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