OLD | NEW |
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_service.h" | 5 #include "chromeos/dbus/ibus/ibus_engine_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "chromeos/dbus/ibus/ibus_constants.h" | 10 #include "chromeos/dbus/ibus/ibus_constants.h" |
11 #include "chromeos/dbus/ibus/ibus_input_context_client.h" | 11 #include "chromeos/dbus/ibus/ibus_input_context_client.h" |
12 #include "chromeos/dbus/ibus/ibus_lookup_table.h" | 12 #include "chromeos/dbus/ibus/ibus_lookup_table.h" |
13 #include "chromeos/dbus/ibus/ibus_property.h" | 13 #include "chromeos/dbus/ibus/ibus_property.h" |
14 #include "chromeos/dbus/ibus/ibus_text.h" | 14 #include "chromeos/dbus/ibus/ibus_text.h" |
15 #include "chromeos/ime/ibus_bridge.h" | 15 #include "chromeos/ime/ibus_bridge.h" |
16 #include "dbus/bus.h" | |
17 #include "dbus/exported_object.h" | |
18 #include "dbus/message.h" | |
19 #include "dbus/object_path.h" | |
20 #include "dbus/object_proxy.h" | |
21 | 16 |
22 namespace chromeos { | 17 namespace chromeos { |
23 | |
24 class IBusEngineServiceImpl : public IBusEngineService { | |
25 public: | |
26 IBusEngineServiceImpl(dbus::Bus* bus, | |
27 const dbus::ObjectPath& object_path) | |
28 : bus_(bus), | |
29 engine_handler_(NULL), | |
30 object_path_(object_path), | |
31 weak_ptr_factory_(this) { | |
32 exported_object_ = bus->GetExportedObject(object_path_); | |
33 | |
34 exported_object_->ExportMethod( | |
35 ibus::engine::kServiceInterface, | |
36 ibus::engine::kFocusInMethod, | |
37 base::Bind(&IBusEngineServiceImpl::FocusIn, | |
38 weak_ptr_factory_.GetWeakPtr()), | |
39 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
40 weak_ptr_factory_.GetWeakPtr())); | |
41 | |
42 exported_object_->ExportMethod( | |
43 ibus::engine::kServiceInterface, | |
44 ibus::engine::kFocusOutMethod, | |
45 base::Bind(&IBusEngineServiceImpl::FocusOut, | |
46 weak_ptr_factory_.GetWeakPtr()), | |
47 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
48 weak_ptr_factory_.GetWeakPtr())); | |
49 | |
50 exported_object_->ExportMethod( | |
51 ibus::engine::kServiceInterface, | |
52 ibus::engine::kEnableMethod, | |
53 base::Bind(&IBusEngineServiceImpl::Enable, | |
54 weak_ptr_factory_.GetWeakPtr()), | |
55 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
56 weak_ptr_factory_.GetWeakPtr())); | |
57 | |
58 exported_object_->ExportMethod( | |
59 ibus::engine::kServiceInterface, | |
60 ibus::engine::kDisableMethod, | |
61 base::Bind(&IBusEngineServiceImpl::Disable, | |
62 weak_ptr_factory_.GetWeakPtr()), | |
63 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
64 weak_ptr_factory_.GetWeakPtr())); | |
65 | |
66 exported_object_->ExportMethod( | |
67 ibus::engine::kServiceInterface, | |
68 ibus::engine::kPropertyActivateMethod, | |
69 base::Bind(&IBusEngineServiceImpl::PropertyActivate, | |
70 weak_ptr_factory_.GetWeakPtr()), | |
71 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
72 weak_ptr_factory_.GetWeakPtr())); | |
73 | |
74 exported_object_->ExportMethod( | |
75 ibus::engine::kServiceInterface, | |
76 ibus::engine::kPropertyShowMethod, | |
77 base::Bind(&IBusEngineServiceImpl::PropertyShow, | |
78 weak_ptr_factory_.GetWeakPtr()), | |
79 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
80 weak_ptr_factory_.GetWeakPtr())); | |
81 | |
82 exported_object_->ExportMethod( | |
83 ibus::engine::kServiceInterface, | |
84 ibus::engine::kPropertyHideMethod, | |
85 base::Bind(&IBusEngineServiceImpl::PropertyHide, | |
86 weak_ptr_factory_.GetWeakPtr()), | |
87 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
88 weak_ptr_factory_.GetWeakPtr())); | |
89 | |
90 exported_object_->ExportMethod( | |
91 ibus::engine::kServiceInterface, | |
92 ibus::engine::kSetCapabilityMethod, | |
93 base::Bind(&IBusEngineServiceImpl::SetCapability, | |
94 weak_ptr_factory_.GetWeakPtr()), | |
95 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
96 weak_ptr_factory_.GetWeakPtr())); | |
97 | |
98 exported_object_->ExportMethod( | |
99 ibus::engine::kServiceInterface, | |
100 ibus::engine::kResetMethod, | |
101 base::Bind(&IBusEngineServiceImpl::Reset, | |
102 weak_ptr_factory_.GetWeakPtr()), | |
103 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
104 weak_ptr_factory_.GetWeakPtr())); | |
105 | |
106 exported_object_->ExportMethod( | |
107 ibus::engine::kServiceInterface, | |
108 ibus::engine::kProcessKeyEventMethod, | |
109 base::Bind(&IBusEngineServiceImpl::ProcessKeyEvent, | |
110 weak_ptr_factory_.GetWeakPtr()), | |
111 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
112 weak_ptr_factory_.GetWeakPtr())); | |
113 | |
114 exported_object_->ExportMethod( | |
115 ibus::engine::kServiceInterface, | |
116 ibus::engine::kCandidateClickedMethod, | |
117 base::Bind(&IBusEngineServiceImpl::CandidateClicked, | |
118 weak_ptr_factory_.GetWeakPtr()), | |
119 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
120 weak_ptr_factory_.GetWeakPtr())); | |
121 | |
122 exported_object_->ExportMethod( | |
123 ibus::engine::kServiceInterface, | |
124 ibus::engine::kSetSurroundingTextMethod, | |
125 base::Bind(&IBusEngineServiceImpl::SetSurroundingText, | |
126 weak_ptr_factory_.GetWeakPtr()), | |
127 base::Bind(&IBusEngineServiceImpl::OnMethodExported, | |
128 weak_ptr_factory_.GetWeakPtr())); | |
129 } | |
130 | |
131 virtual ~IBusEngineServiceImpl() { | |
132 bus_->UnregisterExportedObject(object_path_); | |
133 } | |
134 | |
135 // IBusEngineService override. | |
136 virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE { | |
137 DVLOG_IF(1, engine_handler_ != NULL) << "Replace engine."; | |
138 if (engine_handler_) | |
139 engine_handler_->Disable(); | |
140 engine_handler_ = handler; | |
141 } | |
142 | |
143 // IBusEngineService override. | |
144 virtual void UnsetEngine(IBusEngineHandlerInterface* handler) OVERRIDE { | |
145 if (engine_handler_ == handler) | |
146 engine_handler_ = NULL; | |
147 } | |
148 | |
149 // IBusEngineService override. | |
150 virtual void RegisterProperties( | |
151 const IBusPropertyList& property_list) OVERRIDE { | |
152 dbus::Signal signal(ibus::engine::kServiceInterface, | |
153 ibus::engine::kRegisterPropertiesSignal); | |
154 dbus::MessageWriter writer(&signal); | |
155 AppendIBusPropertyList(property_list, &writer); | |
156 exported_object_->SendSignal(&signal); | |
157 } | |
158 | |
159 // IBusEngineService override. | |
160 virtual void UpdatePreedit(const IBusText& ibus_text, | |
161 uint32 cursor_pos, | |
162 bool is_visible, | |
163 IBusEnginePreeditFocusOutMode mode) OVERRIDE { | |
164 dbus::Signal signal(ibus::engine::kServiceInterface, | |
165 ibus::engine::kUpdatePreeditSignal); | |
166 dbus::MessageWriter writer(&signal); | |
167 AppendIBusText(ibus_text, &writer); | |
168 writer.AppendUint32(cursor_pos); | |
169 writer.AppendBool(is_visible); | |
170 writer.AppendUint32(static_cast<uint32>(mode)); | |
171 exported_object_->SendSignal(&signal); | |
172 } | |
173 | |
174 // IBusEngineService override. | |
175 virtual void UpdateAuxiliaryText(const IBusText& ibus_text, | |
176 bool is_visible) OVERRIDE { | |
177 dbus::Signal signal(ibus::engine::kServiceInterface, | |
178 ibus::engine::kUpdateAuxiliaryTextSignal); | |
179 dbus::MessageWriter writer(&signal); | |
180 AppendIBusText(ibus_text, &writer); | |
181 writer.AppendBool(is_visible); | |
182 exported_object_->SendSignal(&signal); | |
183 } | |
184 | |
185 // IBusEngineService override. | |
186 virtual void UpdateLookupTable(const IBusLookupTable& lookup_table, | |
187 bool is_visible) OVERRIDE { | |
188 dbus::Signal signal(ibus::engine::kServiceInterface, | |
189 ibus::engine::kUpdateLookupTableSignal); | |
190 dbus::MessageWriter writer(&signal); | |
191 AppendIBusLookupTable(lookup_table, &writer); | |
192 writer.AppendBool(is_visible); | |
193 exported_object_->SendSignal(&signal); | |
194 } | |
195 | |
196 // IBusEngineService override. | |
197 virtual void UpdateProperty(const IBusProperty& property) OVERRIDE { | |
198 dbus::Signal signal(ibus::engine::kServiceInterface, | |
199 ibus::engine::kUpdatePropertySignal); | |
200 dbus::MessageWriter writer(&signal); | |
201 AppendIBusProperty(property, &writer); | |
202 exported_object_->SendSignal(&signal); | |
203 } | |
204 | |
205 // IBusEngineService override. | |
206 virtual void ForwardKeyEvent(uint32 keyval, uint32 keycode, | |
207 uint32 state) OVERRIDE { | |
208 dbus::Signal signal(ibus::engine::kServiceInterface, | |
209 ibus::engine::kForwardKeyEventSignal); | |
210 dbus::MessageWriter writer(&signal); | |
211 writer.AppendUint32(keyval); | |
212 writer.AppendUint32(keycode); | |
213 writer.AppendUint32(state); | |
214 exported_object_->SendSignal(&signal); | |
215 } | |
216 | |
217 // IBusEngineService override. | |
218 virtual void RequireSurroundingText() OVERRIDE { | |
219 dbus::Signal signal(ibus::engine::kServiceInterface, | |
220 ibus::engine::kRequireSurroundingTextSignal); | |
221 exported_object_->SendSignal(&signal); | |
222 } | |
223 | |
224 // IBusEngineService override. | |
225 virtual void CommitText(const std::string& text) OVERRIDE { | |
226 dbus::Signal signal(ibus::engine::kServiceInterface, | |
227 ibus::engine::kCommitTextSignal); | |
228 dbus::MessageWriter writer(&signal); | |
229 AppendStringAsIBusText(text, &writer); | |
230 exported_object_->SendSignal(&signal); | |
231 } | |
232 | |
233 // IBusEngineService override. | |
234 virtual void DeleteSurroundingText(int32 offset, uint32 length) OVERRIDE { | |
235 dbus::Signal signal(ibus::engine::kServiceInterface, | |
236 ibus::engine::kDeleteSurroundingTextSignal); | |
237 dbus::MessageWriter writer(&signal); | |
238 writer.AppendInt32(offset); | |
239 writer.AppendUint32(length); | |
240 exported_object_->SendSignal(&signal); | |
241 } | |
242 | |
243 private: | |
244 // Handles FocusIn method call from ibus-daemon. | |
245 void FocusIn(dbus::MethodCall* method_call, | |
246 dbus::ExportedObject::ResponseSender response_sender) { | |
247 if (engine_handler_ == NULL) | |
248 return; | |
249 engine_handler_->FocusIn(); | |
250 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
251 } | |
252 | |
253 // Handles FocusOut method call from ibus-daemon. | |
254 void FocusOut(dbus::MethodCall* method_call, | |
255 dbus::ExportedObject::ResponseSender response_sender) { | |
256 if (engine_handler_ == NULL) | |
257 return; | |
258 engine_handler_->FocusOut(); | |
259 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
260 } | |
261 | |
262 // Handles Enable method call from ibus-daemon. | |
263 void Enable(dbus::MethodCall* method_call, | |
264 dbus::ExportedObject::ResponseSender response_sender) { | |
265 if (engine_handler_ == NULL) | |
266 return; | |
267 engine_handler_->Enable(); | |
268 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
269 } | |
270 | |
271 // Handles Disable method call from ibus-daemon. | |
272 void Disable(dbus::MethodCall* method_call, | |
273 dbus::ExportedObject::ResponseSender response_sender) { | |
274 if (engine_handler_ == NULL) | |
275 return; | |
276 engine_handler_->Disable(); | |
277 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
278 } | |
279 | |
280 // Handles PropertyActivate method call from ibus-daemon. | |
281 void PropertyActivate(dbus::MethodCall* method_call, | |
282 dbus::ExportedObject::ResponseSender response_sender) { | |
283 if (engine_handler_ == NULL) | |
284 return; | |
285 dbus::MessageReader reader(method_call); | |
286 std::string property_name; | |
287 if (!reader.PopString(&property_name)) { | |
288 LOG(WARNING) << "PropertyActivate called with incorrect parameters: " | |
289 << method_call->ToString(); | |
290 return; | |
291 } | |
292 uint32 property_state = 0; | |
293 if (!reader.PopUint32(&property_state)) { | |
294 LOG(WARNING) << "PropertyActivate called with incorrect parameters: " | |
295 << method_call->ToString(); | |
296 return; | |
297 } | |
298 engine_handler_->PropertyActivate( | |
299 property_name, | |
300 static_cast<ibus::IBusPropertyState>(property_state)); | |
301 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
302 } | |
303 | |
304 // Handles PropertyShow method call from ibus-daemon. | |
305 void PropertyShow(dbus::MethodCall* method_call, | |
306 dbus::ExportedObject::ResponseSender response_sender) { | |
307 if (engine_handler_ == NULL) | |
308 return; | |
309 dbus::MessageReader reader(method_call); | |
310 std::string property_name; | |
311 if (!reader.PopString(&property_name)) { | |
312 LOG(WARNING) << "PropertyShow called with incorrect parameters: " | |
313 << method_call->ToString(); | |
314 return; | |
315 } | |
316 engine_handler_->PropertyShow(property_name); | |
317 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
318 } | |
319 | |
320 // Handles PropertyHide method call from ibus-daemon. | |
321 void PropertyHide(dbus::MethodCall* method_call, | |
322 dbus::ExportedObject::ResponseSender response_sender) { | |
323 if (engine_handler_ == NULL) | |
324 return; | |
325 dbus::MessageReader reader(method_call); | |
326 std::string property_name; | |
327 if (!reader.PopString(&property_name)) { | |
328 LOG(WARNING) << "PropertyHide called with incorrect parameters: " | |
329 << method_call->ToString(); | |
330 return; | |
331 } | |
332 engine_handler_->PropertyHide(property_name); | |
333 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
334 } | |
335 | |
336 // Handles SetCapability method call from ibus-daemon. | |
337 void SetCapability(dbus::MethodCall* method_call, | |
338 dbus::ExportedObject::ResponseSender response_sender) { | |
339 if (engine_handler_ == NULL) | |
340 return; | |
341 dbus::MessageReader reader(method_call); | |
342 uint32 capability = 0; | |
343 if (!reader.PopUint32(&capability)) { | |
344 LOG(WARNING) << "SetCapability called with incorrect parameters: " | |
345 << method_call->ToString(); | |
346 return; | |
347 } | |
348 engine_handler_->SetCapability( | |
349 static_cast<IBusEngineHandlerInterface::IBusCapability>(capability)); | |
350 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
351 } | |
352 | |
353 void Reset(dbus::MethodCall* method_call, | |
354 dbus::ExportedObject::ResponseSender response_sender) { | |
355 if (engine_handler_ == NULL) | |
356 return; | |
357 engine_handler_->Reset(); | |
358 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
359 } | |
360 | |
361 // Handles ProcessKeyEvent method call from ibus-daemon. | |
362 void ProcessKeyEvent(dbus::MethodCall* method_call, | |
363 dbus::ExportedObject::ResponseSender response_sender) { | |
364 if (engine_handler_ == NULL) | |
365 return; | |
366 dbus::MessageReader reader(method_call); | |
367 uint32 keysym = 0; | |
368 if (!reader.PopUint32(&keysym)) { | |
369 LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " | |
370 << method_call->ToString(); | |
371 return; | |
372 } | |
373 uint32 keycode = 0; | |
374 if (!reader.PopUint32(&keycode)) { | |
375 LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " | |
376 << method_call->ToString(); | |
377 return; | |
378 } | |
379 uint32 state = 0; | |
380 if (!reader.PopUint32(&state)) { | |
381 LOG(WARNING) << "ProcessKeyEvent called with incorrect parameters: " | |
382 << method_call->ToString(); | |
383 return; | |
384 } | |
385 engine_handler_->ProcessKeyEvent( | |
386 keysym, keycode, state, | |
387 base::Bind(&IBusEngineServiceImpl::KeyEventDone, | |
388 weak_ptr_factory_.GetWeakPtr(), | |
389 base::Passed(dbus::Response::FromMethodCall(method_call)), | |
390 response_sender)); | |
391 } | |
392 | |
393 void KeyEventDone(scoped_ptr<dbus::Response> response, | |
394 const dbus::ExportedObject::ResponseSender& response_sender, | |
395 bool consume) { | |
396 if (engine_handler_ == NULL) | |
397 return; | |
398 dbus::MessageWriter writer(response.get()); | |
399 writer.AppendBool(consume); | |
400 response_sender.Run(response.Pass()); | |
401 } | |
402 | |
403 // Handles CandidateClicked method call from ibus-daemon. | |
404 void CandidateClicked(dbus::MethodCall* method_call, | |
405 dbus::ExportedObject::ResponseSender response_sender) { | |
406 if (engine_handler_ == NULL) | |
407 return; | |
408 dbus::MessageReader reader(method_call); | |
409 uint32 index = 0; | |
410 if (!reader.PopUint32(&index)) { | |
411 LOG(WARNING) << "CandidateClicked called with incorrect parameters: " | |
412 << method_call->ToString(); | |
413 return; | |
414 } | |
415 uint32 button = 0; | |
416 if (!reader.PopUint32(&button)) { | |
417 LOG(WARNING) << "CandidateClicked called with incorrect parameters: " | |
418 << method_call->ToString(); | |
419 return; | |
420 } | |
421 uint32 state = 0; | |
422 if (!reader.PopUint32(&state)) { | |
423 LOG(WARNING) << "CandidateClicked called with incorrect parameters: " | |
424 << method_call->ToString(); | |
425 return; | |
426 } | |
427 engine_handler_->CandidateClicked( | |
428 index, | |
429 static_cast<ibus::IBusMouseButton>(button), | |
430 state); | |
431 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
432 } | |
433 | |
434 // Handles SetSurroundingText method call from ibus-daemon. | |
435 void SetSurroundingText( | |
436 dbus::MethodCall* method_call, | |
437 dbus::ExportedObject::ResponseSender response_sender) { | |
438 if (engine_handler_ == NULL) | |
439 return; | |
440 dbus::MessageReader reader(method_call); | |
441 std::string text; | |
442 if (!PopStringFromIBusText(&reader, &text)) { | |
443 LOG(WARNING) << "SetSurroundingText called with incorrect parameters: " | |
444 << method_call->ToString(); | |
445 return; | |
446 } | |
447 uint32 cursor_pos = 0; | |
448 if (!reader.PopUint32(&cursor_pos)) { | |
449 LOG(WARNING) << "CandidateClicked called with incorrect parameters: " | |
450 << method_call->ToString(); | |
451 return; | |
452 } | |
453 uint32 anchor_pos = 0; | |
454 if (!reader.PopUint32(&anchor_pos)) { | |
455 LOG(WARNING) << "CandidateClicked called with incorrect parameters: " | |
456 << method_call->ToString(); | |
457 return; | |
458 } | |
459 | |
460 engine_handler_->SetSurroundingText(text, cursor_pos, anchor_pos); | |
461 response_sender.Run(dbus::Response::FromMethodCall(method_call)); | |
462 } | |
463 | |
464 // Called when the method call is exported. | |
465 void OnMethodExported(const std::string& interface_name, | |
466 const std::string& method_name, | |
467 bool success) { | |
468 LOG_IF(WARNING, !success) << "Failed to export " | |
469 << interface_name << "." << method_name; | |
470 } | |
471 | |
472 // D-Bus bus object used for unregistering exported methods in dtor. | |
473 dbus::Bus* bus_; | |
474 | |
475 // All incoming method calls are passed on to the |engine_handler_|. | |
476 IBusEngineHandlerInterface* engine_handler_; | |
477 | |
478 dbus::ObjectPath object_path_; | |
479 scoped_refptr<dbus::ExportedObject> exported_object_; | |
480 base::WeakPtrFactory<IBusEngineServiceImpl> weak_ptr_factory_; | |
481 | |
482 DISALLOW_COPY_AND_ASSIGN(IBusEngineServiceImpl); | |
483 }; | |
484 | |
485 // An implementation of IBusEngineService without ibus-daemon interaction. | 18 // An implementation of IBusEngineService without ibus-daemon interaction. |
486 // Currently this class is used only on linux desktop. | 19 // Currently this class is used only on linux desktop. |
487 // TODO(nona): Use this on ChromeOS device once crbug.com/171351 is fixed. | 20 // TODO(nona): Use this on ChromeOS device once crbug.com/171351 is fixed. |
488 class IBusEngineServiceDaemonlessImpl : public IBusEngineService { | 21 class IBusEngineServiceDaemonlessImpl : public IBusEngineService { |
489 public: | 22 public: |
490 IBusEngineServiceDaemonlessImpl() {} | 23 IBusEngineServiceDaemonlessImpl() {} |
491 virtual ~IBusEngineServiceDaemonlessImpl() {} | 24 virtual ~IBusEngineServiceDaemonlessImpl() {} |
492 | 25 |
493 // IBusEngineService override. | 26 // IBusEngineService override. |
494 virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE { | 27 virtual void SetEngine(IBusEngineHandlerInterface* handler) OVERRIDE { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 DISALLOW_COPY_AND_ASSIGN(IBusEngineServiceDaemonlessImpl); | 116 DISALLOW_COPY_AND_ASSIGN(IBusEngineServiceDaemonlessImpl); |
584 }; | 117 }; |
585 | 118 |
586 IBusEngineService::IBusEngineService() { | 119 IBusEngineService::IBusEngineService() { |
587 } | 120 } |
588 | 121 |
589 IBusEngineService::~IBusEngineService() { | 122 IBusEngineService::~IBusEngineService() { |
590 } | 123 } |
591 | 124 |
592 // static | 125 // static |
593 IBusEngineService* IBusEngineService::Create( | 126 IBusEngineService* IBusEngineService::Create() { |
594 DBusClientImplementationType type, | 127 return new IBusEngineServiceDaemonlessImpl(); |
595 dbus::Bus* bus, | |
596 const dbus::ObjectPath& object_path) { | |
597 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | |
598 return new IBusEngineServiceImpl(bus, object_path); | |
599 else | |
600 return new IBusEngineServiceDaemonlessImpl(); | |
601 } | 128 } |
602 | 129 |
603 } // namespace chromeos | 130 } // namespace chromeos |
OLD | NEW |