Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(311)

Side by Side Diff: chromeos/dbus/ibus/ibus_engine_factory_service.cc

Issue 10836047: Revise IBus related DBus module. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix style nits Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/ibus/ibus_engine_factory_service.h" 5 #include "chromeos/dbus/ibus/ibus_engine_factory_service.h"
6 6
7 #include <map>
8 #include <string>
9
7 #include "base/string_number_conversions.h" 10 #include "base/string_number_conversions.h"
8 #include "chromeos/dbus/ibus/ibus_constants.h" 11 #include "chromeos/dbus/ibus/ibus_constants.h"
9 #include "dbus/bus.h" 12 #include "dbus/bus.h"
10 #include "dbus/message.h" 13 #include "dbus/message.h"
11 #include "dbus/exported_object.h" 14 #include "dbus/exported_object.h"
12 15
13 namespace chromeos { 16 namespace chromeos {
14 17
15 class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService { 18 class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService {
16 public: 19 public:
17 explicit IBusEngineFactoryServiceImpl(dbus::Bus* bus) 20 explicit IBusEngineFactoryServiceImpl(dbus::Bus* bus)
18 : bus_(bus), 21 : bus_(bus),
19 weak_ptr_factory_(this) { 22 weak_ptr_factory_(this) {
20
21 exported_object_ = bus_->GetExportedObject( 23 exported_object_ = bus_->GetExportedObject(
22 dbus::ObjectPath(ibus::engine_factory::kServicePath)); 24 dbus::ObjectPath(ibus::engine_factory::kServicePath));
23 25
24 exported_object_->ExportMethod( 26 exported_object_->ExportMethod(
25 ibus::engine_factory::kServiceInterface, 27 ibus::engine_factory::kServiceInterface,
26 ibus::engine_factory::kCreateEngineMethod, 28 ibus::engine_factory::kCreateEngineMethod,
27 base::Bind(&IBusEngineFactoryServiceImpl::CreateEngine, 29 base::Bind(&IBusEngineFactoryServiceImpl::CreateEngine,
28 weak_ptr_factory_.GetWeakPtr()), 30 weak_ptr_factory_.GetWeakPtr()),
29 base::Bind(&IBusEngineFactoryServiceImpl::CreateEngineExported, 31 base::Bind(&IBusEngineFactoryServiceImpl::CreateEngineExported,
30 weak_ptr_factory_.GetWeakPtr())); 32 weak_ptr_factory_.GetWeakPtr()));
31 } 33 }
32 34
33 virtual ~IBusEngineFactoryServiceImpl() { 35 virtual ~IBusEngineFactoryServiceImpl() {
34 bus_->UnregisterExportedObject(dbus::ObjectPath( 36 bus_->UnregisterExportedObject(dbus::ObjectPath(
35 ibus::engine_factory::kServicePath)); 37 ibus::engine_factory::kServicePath));
36 } 38 }
37 39
38 // IBusEngineFactoryService override. 40 // IBusEngineFactoryService override.
39 virtual void SetCreateEngineHandler( 41 virtual void SetCreateEngineHandler(
42 const std::string& engine_id,
40 const CreateEngineHandler& create_engine_handler) OVERRIDE { 43 const CreateEngineHandler& create_engine_handler) OVERRIDE {
41 DCHECK(!create_engine_handler.is_null()); 44 DCHECK(!create_engine_callback_map_[engine_id].is_null());
42 create_engine_handler_ = create_engine_handler; 45 create_engine_callback_map_[engine_id] = create_engine_handler;
43 } 46 }
44 47
45 // IBusEngineFactoryService override. 48 // IBusEngineFactoryService override.
46 virtual void UnsetCreateEngineHandler() OVERRIDE { 49 virtual void UnsetCreateEngineHandler(
47 create_engine_handler_.Reset(); 50 const std::string& engine_id) OVERRIDE {
51 create_engine_callback_map_[engine_id].Reset();
48 } 52 }
49 53
50 private: 54 private:
51 // Called when the ibus-daemon requires new engine instance. 55 // Called when the ibus-daemon requires new engine instance.
52 void CreateEngine(dbus::MethodCall* method_call, 56 void CreateEngine(dbus::MethodCall* method_call,
53 dbus::ExportedObject::ResponseSender response_sender) { 57 dbus::ExportedObject::ResponseSender response_sender) {
54 if (!method_call) { 58 if (!method_call) {
55 LOG(ERROR) << "method call does not have any arguments."; 59 LOG(ERROR) << "method call does not have any arguments.";
56 return; 60 return;
57 } 61 }
58 dbus::MessageReader reader(method_call); 62 dbus::MessageReader reader(method_call);
59 std::string engine_name; 63 std::string engine_name;
60 64
61 if (!reader.PopString(&engine_name)) { 65 if (!reader.PopString(&engine_name)) {
62 LOG(ERROR) << "Expected argument is string."; 66 LOG(ERROR) << "Expected argument is string.";
63 return; 67 return;
64 } 68 }
65 if(create_engine_handler_.is_null()) { 69 if (create_engine_callback_map_[engine_name].is_null()) {
66 LOG(WARNING) << "The CreateEngine handler is NULL."; 70 LOG(WARNING) << "The CreateEngine handler for " << engine_name
71 << " is NULL.";
67 } else { 72 } else {
68 dbus::Response* response = dbus::Response::FromMethodCall(method_call); 73 create_engine_callback_map_[engine_name].Run(
69 dbus::MessageWriter writer(response); 74 base::Bind(&IBusEngineFactoryServiceImpl::CreateEngineSendReply,
70 const dbus::ObjectPath path = create_engine_handler_.Run(engine_name); 75 weak_ptr_factory_.GetWeakPtr(),
71 writer.AppendObjectPath(path); 76 dbus::Response::FromMethodCall(method_call),
72 response_sender.Run(response); 77 response_sender));
73 } 78 }
74 } 79 }
75 80
81 // Sends reply message for CreateEngine method call.
82 void CreateEngineSendReply(
83 dbus::Response* response,
84 const dbus::ExportedObject::ResponseSender response_sender,
85 const dbus::ObjectPath& path) {
86 dbus::MessageWriter writer(response);
87 writer.AppendObjectPath(path);
88 response_sender.Run(response);
89 }
90
76 // Called when the CreateEngine method is exported. 91 // Called when the CreateEngine method is exported.
77 void CreateEngineExported(const std::string& interface_name, 92 void CreateEngineExported(const std::string& interface_name,
78 const std::string& method_name, 93 const std::string& method_name,
79 bool success) { 94 bool success) {
80 DCHECK(success) << "Failed to export: " 95 DCHECK(success) << "Failed to export: "
81 << interface_name << "." << method_name; 96 << interface_name << "." << method_name;
82 } 97 }
83 98
84 // CreateEngine method call handler. 99 // CreateEngine method call handler.
85 CreateEngineHandler create_engine_handler_; 100 std::map<std::string, CreateEngineHandler> create_engine_callback_map_;
86 101
87 dbus::Bus* bus_; 102 dbus::Bus* bus_;
88 scoped_refptr<dbus::ExportedObject> exported_object_; 103 scoped_refptr<dbus::ExportedObject> exported_object_;
89 base::WeakPtrFactory<IBusEngineFactoryServiceImpl> weak_ptr_factory_; 104 base::WeakPtrFactory<IBusEngineFactoryServiceImpl> weak_ptr_factory_;
90 105
91 DISALLOW_COPY_AND_ASSIGN(IBusEngineFactoryServiceImpl); 106 DISALLOW_COPY_AND_ASSIGN(IBusEngineFactoryServiceImpl);
92 }; 107 };
93 108
94 class IBusEngineFactoryServiceStubImpl : public IBusEngineFactoryService { 109 class IBusEngineFactoryServiceStubImpl : public IBusEngineFactoryService {
95 public: 110 public:
96 IBusEngineFactoryServiceStubImpl() {} 111 IBusEngineFactoryServiceStubImpl() {}
97 virtual ~IBusEngineFactoryServiceStubImpl() {} 112 virtual ~IBusEngineFactoryServiceStubImpl() {}
98 113
99 // IBusEngineFactoryService overrides. 114 // IBusEngineFactoryService overrides.
100 virtual void SetCreateEngineHandler( 115 virtual void SetCreateEngineHandler(
116 const std::string& engine_id,
101 const CreateEngineHandler& create_engine_handler) OVERRIDE {} 117 const CreateEngineHandler& create_engine_handler) OVERRIDE {}
102 virtual void UnsetCreateEngineHandler() OVERRIDE {} 118 virtual void UnsetCreateEngineHandler(
119 const std::string& engine_id) OVERRIDE {}
103 120
104 private: 121 private:
105 DISALLOW_COPY_AND_ASSIGN(IBusEngineFactoryServiceStubImpl); 122 DISALLOW_COPY_AND_ASSIGN(IBusEngineFactoryServiceStubImpl);
106 }; 123 };
107 124
108 IBusEngineFactoryService::IBusEngineFactoryService() { 125 IBusEngineFactoryService::IBusEngineFactoryService() {
109 } 126 }
110 127
111 IBusEngineFactoryService::~IBusEngineFactoryService() { 128 IBusEngineFactoryService::~IBusEngineFactoryService() {
112 } 129 }
113 130
114 // static 131 // static
115 IBusEngineFactoryService* IBusEngineFactoryService::Create( 132 IBusEngineFactoryService* IBusEngineFactoryService::Create(
116 dbus::Bus* bus, 133 dbus::Bus* bus,
117 DBusClientImplementationType type) { 134 DBusClientImplementationType type) {
118 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 135 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
119 return new IBusEngineFactoryServiceImpl(bus); 136 return new IBusEngineFactoryServiceImpl(bus);
120 else 137 else
121 return new IBusEngineFactoryServiceStubImpl(); 138 return new IBusEngineFactoryServiceStubImpl();
122 } 139 }
123 140
124 } // namespace chromeos 141 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698