// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_ #define CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_ #include <vector> #include "base/memory/ref_counted.h" #include "base/threading/platform_thread.h" namespace dbus { class Bus; class ExportedObject; } namespace chromeos { // CrosDBusService is used to run a D-Bus service inside Chrome for Chrome // OS. The service will be registered as follows: // // Service name: org.chromium.LibCrosService (kLibCrosServiceName) // Object path: chromium/LibCrosService (kLibCrosServicePath) // // For historical reasons, the rather irrelevant name "LibCrosService" is // used in the D-Bus constants such as the service name. // // CrosDBusService exports D-Bus methods through service provider classes // that implement CrosDBusService::ServiceProviderInterface. class CrosDBusService { public: // CrosDBusService consists of service providers that implement this // interface. class ServiceProviderInterface { public: // Starts the service provider. |exported_object| is used to export // D-Bus methods. virtual void Start( scoped_refptr<dbus::ExportedObject> exported_object) = 0; virtual ~ServiceProviderInterface(); }; // Initializes the global instance. static void Initialize(); // Destroys the global instance. static void Shutdown(); protected: virtual ~CrosDBusService(); private: // Initializes the global instance for testing. Takes ownership of // |proxy_resolution_service|. friend class CrosDBusServiceTest; static void InitializeForTesting( dbus::Bus* bus, ServiceProviderInterface* proxy_resolution_service); }; } // namespace #endif // CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_