Home | History | Annotate | Download | only in dbus
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROMEOS_DBUS_INTROSPECTABLE_CLIENT_H_
      6 #define CHROMEOS_DBUS_INTROSPECTABLE_CLIENT_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/callback.h"
     12 #include "chromeos/chromeos_export.h"
     13 #include "chromeos/dbus/dbus_client.h"
     14 #include "dbus/object_path.h"
     15 
     16 namespace chromeos {
     17 
     18 // IntrospectableClient is used to retrieve the D-Bus introspection data
     19 // from a remote object.
     20 class CHROMEOS_EXPORT IntrospectableClient : public DBusClient {
     21  public:
     22   virtual ~IntrospectableClient();
     23 
     24   // The IntrospectCallback is used for the Introspect() method. It receives
     25   // four arguments, the first two are the |service_name| and |object_path|
     26   // of the remote object being introspected, the third is the |xml_data| of
     27   // the object as described in
     28   // http://dbus.freedesktop.org/doc/dbus-specification.html, the fourth
     29   // |success| indicates whether the request succeeded.
     30   typedef base::Callback<void(const std::string&, const dbus::ObjectPath&,
     31                               const std::string&, bool)> IntrospectCallback;
     32 
     33   // Retrieves introspection data from the remote object on service name
     34   // |service_name| with object path |object_path|, calling |callback| with
     35   // the XML-formatted data received.
     36   virtual void Introspect(const std::string& service_name,
     37                           const dbus::ObjectPath& object_path,
     38                           const IntrospectCallback& callback) = 0;
     39 
     40   // Parses XML-formatted introspection data returned by
     41   // org.freedesktop.DBus.Introspectable.Introspect and returns the list of
     42   // interface names declared within.
     43   static std::vector<std::string> GetInterfacesFromIntrospectResult(
     44       const std::string& xml_data);
     45 
     46   // Creates the instance
     47   static IntrospectableClient* Create();
     48 
     49  protected:
     50   IntrospectableClient();
     51 
     52  private:
     53   DISALLOW_COPY_AND_ASSIGN(IntrospectableClient);
     54 };
     55 
     56 }  // namespace chromeos
     57 
     58 #endif  // CHROMEOS_DBUS_INTROSPECTABLE_CLIENT_H_
     59