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

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

Issue 23766008: Delete IBusEngineServiceImpl which is no longer used for production. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 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_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
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
OLDNEW
« no previous file with comments | « chromeos/dbus/ibus/ibus_engine_service.h ('k') | chromeos/dbus/ibus/ibus_engine_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698