15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/platform_thread.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Bus;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExportedObject;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CrosDBusService is used to run a D-Bus service inside Chrome for Chrome
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OS. The service will be registered as follows:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Service name: org.chromium.LibCrosService (kLibCrosServiceName)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Object path: chromium/LibCrosService (kLibCrosServicePath)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// For historical reasons, the rather irrelevant name "LibCrosService" is
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// used in the D-Bus constants such as the service name.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CrosDBusService exports D-Bus methods through service provider classes
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that implement CrosDBusService::ServiceProviderInterface.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CrosDBusService {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // CrosDBusService consists of service providers that implement this
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // interface.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class ServiceProviderInterface {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Starts the service provider. |exported_object| is used to export
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // D-Bus methods.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void Start(
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        scoped_refptr<dbus::ExportedObject> exported_object) = 0;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~ServiceProviderInterface();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initializes the global instance.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void Initialize();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Destroys the global instance.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void Shutdown();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~CrosDBusService();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Initializes the global instance for testing. Takes ownership of
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |proxy_resolution_service|.
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class CrosDBusServiceTest;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void InitializeForTesting(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dbus::Bus* bus,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ServiceProviderInterface* proxy_resolution_service);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_DBUS_CROS_DBUS_SERVICE_H_
66