1685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// 2685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// Copyright (C) 2015 The Android Open Source Project 3685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// 4685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// you may not use this file except in compliance with the License. 6685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// You may obtain a copy of the License at 7685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// 8685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// 10685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// Unless required by applicable law or agreed to in writing, software 11685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// See the License for the specific language governing permissions and 14685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// limitations under the License. 15685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu// 16685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 17685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#ifndef APMANAGER_DBUS_MANAGER_DBUS_ADAPTOR_H_ 18685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#define APMANAGER_DBUS_MANAGER_DBUS_ADAPTOR_H_ 19685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 207758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu#include <map> 217758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu 22685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#include <base/macros.h> 237758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu#include <brillo/dbus/dbus_service_watcher.h> 24685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#include <dbus_bindings/org.chromium.apmanager.Manager.h> 25685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 26685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#include "apmanager/manager_adaptor_interface.h" 27685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 28685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiunamespace apmanager { 29685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 30685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiuclass Manager; 317758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiuclass Service; 32685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 33685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiuclass ManagerDBusAdaptor : public org::chromium::apmanager::ManagerInterface, 34685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu public ManagerAdaptorInterface { 35685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu public: 36685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu ManagerDBusAdaptor(const scoped_refptr<dbus::Bus>& bus, 37685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu brillo::dbus_utils::ExportedObjectManager* object_manager, 38685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu Manager* manager); 39685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu ~ManagerDBusAdaptor() override; 40685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 41685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu // Implementation of org::chromium::apmanager::ManagerInterface. 427758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu bool CreateService(brillo::ErrorPtr* dbus_error, 43685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu dbus::Message* message, 44685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu dbus::ObjectPath* out_service) override; 457758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu bool RemoveService(brillo::ErrorPtr* dbus_error, 46685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu dbus::Message* message, 47685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu const dbus::ObjectPath& in_service) override; 48685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 49685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu // Implementation of ManagerAdaptorInterface. 50685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu void RegisterAsync( 51685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu const base::Callback<void(bool)>& completion_callback) override; 52685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 53685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu private: 547758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu using DBusServiceWatcher = brillo::dbus_utils::DBusServiceWatcher; 557758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu // Context for service owner watcher. 567758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu struct ServiceOwnerWatcherContext { 577758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu ServiceOwnerWatcherContext() {} 587758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu ServiceOwnerWatcherContext(const scoped_refptr<Service>& in_service, 597758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu std::unique_ptr<DBusServiceWatcher> in_watcher) 607758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu : service(in_service), 617758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu watcher(std::move(in_watcher)) {} 627758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu scoped_refptr<Service> service; 637758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu std::unique_ptr<DBusServiceWatcher> watcher; 647758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu }; 657758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu 667758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu // Invoked when the owner of a Service vanished. 677758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu void OnServiceOwnerVanished(const dbus::ObjectPath& service_path); 687758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu 69685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu org::chromium::apmanager::ManagerAdaptor adaptor_; 70685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu brillo::dbus_utils::DBusObject dbus_object_; 717758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu scoped_refptr<dbus::Bus> bus_; 72685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu Manager* manager_; 737758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu // Map of service path to owner monitor context. 747758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu std::map<dbus::ObjectPath, ServiceOwnerWatcherContext> 757758d8db3ddb2582fb57bda4a26c9f6f6bd20316Peter Qiu service_owner_watchers_; 76685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 77685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu DISALLOW_COPY_AND_ASSIGN(ManagerDBusAdaptor); 78685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu}; 79685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 80685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu} // namespace apmanager 81685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu 82685dd4acea083dc74105edbdf8a06e539c291a45Peter Qiu#endif // APMANAGER_DBUS_MANAGER_DBUS_ADAPTOR_H_ 83