xref: /aosp_15_r20/external/libchrome/libchrome_tools/patches/dbus-Add-TryRegisterFallback.patch (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard WorkerFrom a4d8dee3905d784f40d8f480eaacae2655e68b47 Mon Sep 17 00:00:00 2001
2*635a8641SAndroid Build Coastguard WorkerFrom: Sonny Sasaka <[email protected]>
3*635a8641SAndroid Build Coastguard WorkerDate: Wed, 11 Jul 2018 20:55:58 -0700
4*635a8641SAndroid Build Coastguard WorkerSubject: [PATCH] dbus: Add TryRegisterFallback
5*635a8641SAndroid Build Coastguard Worker
6*635a8641SAndroid Build Coastguard WorkerThe TryRegisterFallback works just like TryRegisterObjectPath,
7*635a8641SAndroid Build Coastguard Workerwith addition that the registered callbacks also apply to the specified
8*635a8641SAndroid Build Coastguard Workerobject path and its sub paths. This is useful to implement a "catch-all"
9*635a8641SAndroid Build Coastguard Workerhandler.
10*635a8641SAndroid Build Coastguard Worker
11*635a8641SAndroid Build Coastguard WorkerCurrently this is needed by Bluetooth dispatcher which needs to catch
12*635a8641SAndroid Build Coastguard Workerall method calls to all objects and forward them to another D-Bus
13*635a8641SAndroid Build Coastguard Workerservice.
14*635a8641SAndroid Build Coastguard Worker
15*635a8641SAndroid Build Coastguard WorkerBug:862849
16*635a8641SAndroid Build Coastguard Worker---
17*635a8641SAndroid Build Coastguard Worker dbus/bus.cc     | 27 +++++++++++++++++++++------
18*635a8641SAndroid Build Coastguard Worker dbus/bus.h      | 32 ++++++++++++++++++++++++++++++++
19*635a8641SAndroid Build Coastguard Worker dbus/mock_bus.h |  5 +++++
20*635a8641SAndroid Build Coastguard Worker 3 files changed, 58 insertions(+), 6 deletions(-)
21*635a8641SAndroid Build Coastguard Worker
22*635a8641SAndroid Build Coastguard Workerdiff --git a/dbus/bus.cc b/dbus/bus.cc
23*635a8641SAndroid Build Coastguard Workerindex e62058e0dc34..29043609e760 100644
24*635a8641SAndroid Build Coastguard Worker--- a/dbus/bus.cc
25*635a8641SAndroid Build Coastguard Worker+++ b/dbus/bus.cc
26*635a8641SAndroid Build Coastguard Worker@@ -722,6 +722,25 @@ bool Bus::TryRegisterObjectPath(const ObjectPath& object_path,
27*635a8641SAndroid Build Coastguard Worker                                 const DBusObjectPathVTable* vtable,
28*635a8641SAndroid Build Coastguard Worker                                 void* user_data,
29*635a8641SAndroid Build Coastguard Worker                                 DBusError* error) {
30*635a8641SAndroid Build Coastguard Worker+  return TryRegisterObjectPathInternal(
31*635a8641SAndroid Build Coastguard Worker+      object_path, vtable, user_data, error,
32*635a8641SAndroid Build Coastguard Worker+      dbus_connection_try_register_object_path);
33*635a8641SAndroid Build Coastguard Worker+}
34*635a8641SAndroid Build Coastguard Worker+
35*635a8641SAndroid Build Coastguard Worker+bool Bus::TryRegisterFallback(const ObjectPath& object_path,
36*635a8641SAndroid Build Coastguard Worker+                              const DBusObjectPathVTable* vtable,
37*635a8641SAndroid Build Coastguard Worker+                              void* user_data,
38*635a8641SAndroid Build Coastguard Worker+                              DBusError* error) {
39*635a8641SAndroid Build Coastguard Worker+  return TryRegisterObjectPathInternal(object_path, vtable, user_data, error,
40*635a8641SAndroid Build Coastguard Worker+                                       dbus_connection_try_register_fallback);
41*635a8641SAndroid Build Coastguard Worker+}
42*635a8641SAndroid Build Coastguard Worker+
43*635a8641SAndroid Build Coastguard Worker+bool Bus::TryRegisterObjectPathInternal(
44*635a8641SAndroid Build Coastguard Worker+    const ObjectPath& object_path,
45*635a8641SAndroid Build Coastguard Worker+    const DBusObjectPathVTable* vtable,
46*635a8641SAndroid Build Coastguard Worker+    void* user_data,
47*635a8641SAndroid Build Coastguard Worker+    DBusError* error,
48*635a8641SAndroid Build Coastguard Worker+    TryRegisterObjectPathFunction* register_function) {
49*635a8641SAndroid Build Coastguard Worker   DCHECK(connection_);
50*635a8641SAndroid Build Coastguard Worker   AssertOnDBusThread();
51*635a8641SAndroid Build Coastguard Worker
52*635a8641SAndroid Build Coastguard Worker@@ -731,12 +750,8 @@ bool Bus::TryRegisterObjectPath(const ObjectPath& object_path,
53*635a8641SAndroid Build Coastguard Worker     return false;
54*635a8641SAndroid Build Coastguard Worker   }
55*635a8641SAndroid Build Coastguard Worker
56*635a8641SAndroid Build Coastguard Worker-  const bool success = dbus_connection_try_register_object_path(
57*635a8641SAndroid Build Coastguard Worker-      connection_,
58*635a8641SAndroid Build Coastguard Worker-      object_path.value().c_str(),
59*635a8641SAndroid Build Coastguard Worker-      vtable,
60*635a8641SAndroid Build Coastguard Worker-      user_data,
61*635a8641SAndroid Build Coastguard Worker-      error);
62*635a8641SAndroid Build Coastguard Worker+  const bool success = register_function(
63*635a8641SAndroid Build Coastguard Worker+      connection_, object_path.value().c_str(), vtable, user_data, error);
64*635a8641SAndroid Build Coastguard Worker   if (success)
65*635a8641SAndroid Build Coastguard Worker     registered_object_paths_.insert(object_path);
66*635a8641SAndroid Build Coastguard Worker   return success;
67*635a8641SAndroid Build Coastguard Workerdiff --git a/dbus/bus.h b/dbus/bus.h
68*635a8641SAndroid Build Coastguard Workerindex c2c2685afdc4..704a4c3a0b54 100644
69*635a8641SAndroid Build Coastguard Worker--- a/dbus/bus.h
70*635a8641SAndroid Build Coastguard Worker+++ b/dbus/bus.h
71*635a8641SAndroid Build Coastguard Worker@@ -520,6 +520,24 @@ class CHROME_DBUS_EXPORT Bus : public base::RefCountedThreadSafe<Bus> {
72*635a8641SAndroid Build Coastguard Worker                                      void* user_data,
73*635a8641SAndroid Build Coastguard Worker                                      DBusError* error);
74*635a8641SAndroid Build Coastguard Worker
75*635a8641SAndroid Build Coastguard Worker+  // Tries to register the object path and its sub paths.
76*635a8641SAndroid Build Coastguard Worker+  // Returns true on success.
77*635a8641SAndroid Build Coastguard Worker+  // Returns false if the object path is already registered.
78*635a8641SAndroid Build Coastguard Worker+  //
79*635a8641SAndroid Build Coastguard Worker+  // |message_function| in |vtable| will be called every time when a new
80*635a8641SAndroid Build Coastguard Worker+  // message sent to the object path (or hierarchically below) arrives.
81*635a8641SAndroid Build Coastguard Worker+  //
82*635a8641SAndroid Build Coastguard Worker+  // The same object path must not be added more than once.
83*635a8641SAndroid Build Coastguard Worker+  //
84*635a8641SAndroid Build Coastguard Worker+  // See also documentation of |dbus_connection_try_register_fallback| at
85*635a8641SAndroid Build Coastguard Worker+  // http://dbus.freedesktop.org/doc/api/html/group__DBusConnection.html
86*635a8641SAndroid Build Coastguard Worker+  //
87*635a8641SAndroid Build Coastguard Worker+  // BLOCKING CALL.
88*635a8641SAndroid Build Coastguard Worker+  virtual bool TryRegisterFallback(const ObjectPath& object_path,
89*635a8641SAndroid Build Coastguard Worker+                                   const DBusObjectPathVTable* vtable,
90*635a8641SAndroid Build Coastguard Worker+                                   void* user_data,
91*635a8641SAndroid Build Coastguard Worker+                                   DBusError* error);
92*635a8641SAndroid Build Coastguard Worker+
93*635a8641SAndroid Build Coastguard Worker   // Unregister the object path.
94*635a8641SAndroid Build Coastguard Worker   //
95*635a8641SAndroid Build Coastguard Worker   // BLOCKING CALL.
96*635a8641SAndroid Build Coastguard Worker@@ -590,8 +608,22 @@ class CHROME_DBUS_EXPORT Bus : public base::RefCountedThreadSafe<Bus> {
97*635a8641SAndroid Build Coastguard Worker   virtual ~Bus();
98*635a8641SAndroid Build Coastguard Worker
99*635a8641SAndroid Build Coastguard Worker  private:
100*635a8641SAndroid Build Coastguard Worker+  using TryRegisterObjectPathFunction =
101*635a8641SAndroid Build Coastguard Worker+      dbus_bool_t(DBusConnection* connection,
102*635a8641SAndroid Build Coastguard Worker+                  const char* object_path,
103*635a8641SAndroid Build Coastguard Worker+                  const DBusObjectPathVTable* vtable,
104*635a8641SAndroid Build Coastguard Worker+                  void* user_data,
105*635a8641SAndroid Build Coastguard Worker+                  DBusError* error);
106*635a8641SAndroid Build Coastguard Worker+
107*635a8641SAndroid Build Coastguard Worker   friend class base::RefCountedThreadSafe<Bus>;
108*635a8641SAndroid Build Coastguard Worker
109*635a8641SAndroid Build Coastguard Worker+  bool TryRegisterObjectPathInternal(
110*635a8641SAndroid Build Coastguard Worker+      const ObjectPath& object_path,
111*635a8641SAndroid Build Coastguard Worker+      const DBusObjectPathVTable* vtable,
112*635a8641SAndroid Build Coastguard Worker+      void* user_data,
113*635a8641SAndroid Build Coastguard Worker+      DBusError* error,
114*635a8641SAndroid Build Coastguard Worker+      TryRegisterObjectPathFunction* register_function);
115*635a8641SAndroid Build Coastguard Worker+
116*635a8641SAndroid Build Coastguard Worker   // Helper function used for RemoveObjectProxy().
117*635a8641SAndroid Build Coastguard Worker   void RemoveObjectProxyInternal(scoped_refptr<dbus::ObjectProxy> object_proxy,
118*635a8641SAndroid Build Coastguard Worker                                  const base::Closure& callback);
119*635a8641SAndroid Build Coastguard Workerdiff --git a/dbus/mock_bus.h b/dbus/mock_bus.h
120*635a8641SAndroid Build Coastguard Workerindex 216bc64bd068..6b3495db6014 100644
121*635a8641SAndroid Build Coastguard Worker--- a/dbus/mock_bus.h
122*635a8641SAndroid Build Coastguard Worker+++ b/dbus/mock_bus.h
123*635a8641SAndroid Build Coastguard Worker@@ -62,6 +62,11 @@ class MockBus : public Bus {
124*635a8641SAndroid Build Coastguard Worker                                            const DBusObjectPathVTable* vtable,
125*635a8641SAndroid Build Coastguard Worker                                            void* user_data,
126*635a8641SAndroid Build Coastguard Worker                                            DBusError* error));
127*635a8641SAndroid Build Coastguard Worker+  MOCK_METHOD4(TryRegisterFallback,
128*635a8641SAndroid Build Coastguard Worker+               bool(const ObjectPath& object_path,
129*635a8641SAndroid Build Coastguard Worker+                    const DBusObjectPathVTable* vtable,
130*635a8641SAndroid Build Coastguard Worker+                    void* user_data,
131*635a8641SAndroid Build Coastguard Worker+                    DBusError* error));
132*635a8641SAndroid Build Coastguard Worker   MOCK_METHOD1(UnregisterObjectPath, void(const ObjectPath& object_path));
133*635a8641SAndroid Build Coastguard Worker   MOCK_METHOD0(GetDBusTaskRunner, base::TaskRunner*());
134*635a8641SAndroid Build Coastguard Worker   MOCK_METHOD0(GetOriginTaskRunner, base::TaskRunner*());
135*635a8641SAndroid Build Coastguard Worker--
136*635a8641SAndroid Build Coastguard Worker2.18.0.203.gfac676dfb9-goog
137*635a8641SAndroid Build Coastguard Worker
138