| Index: chromeos/dbus/ibus/ibus_engine_factory_service.cc
|
| diff --git a/chromeos/dbus/ibus/ibus_engine_factory_service.cc b/chromeos/dbus/ibus/ibus_engine_factory_service.cc
|
| index 6241ad0a2df7a971e35783051d2073edcae06803..ed1b8e0f34f64b93bf445a3db70ca43f34ac26b8 100644
|
| --- a/chromeos/dbus/ibus/ibus_engine_factory_service.cc
|
| +++ b/chromeos/dbus/ibus/ibus_engine_factory_service.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #include "chromeos/dbus/ibus/ibus_engine_factory_service.h"
|
|
|
| +#include <map>
|
| +#include <string>
|
| +
|
| #include "base/string_number_conversions.h"
|
| #include "chromeos/dbus/ibus/ibus_constants.h"
|
| #include "dbus/bus.h"
|
| @@ -17,7 +20,6 @@ class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService {
|
| explicit IBusEngineFactoryServiceImpl(dbus::Bus* bus)
|
| : bus_(bus),
|
| weak_ptr_factory_(this) {
|
| -
|
| exported_object_ = bus_->GetExportedObject(
|
| dbus::ObjectPath(ibus::engine_factory::kServicePath));
|
|
|
| @@ -37,14 +39,16 @@ class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService {
|
|
|
| // IBusEngineFactoryService override.
|
| virtual void SetCreateEngineHandler(
|
| + const std::string& engine_id,
|
| const CreateEngineHandler& create_engine_handler) OVERRIDE {
|
| - DCHECK(!create_engine_handler.is_null());
|
| - create_engine_handler_ = create_engine_handler;
|
| + DCHECK(!create_engine_callback_map_[engine_id].is_null());
|
| + create_engine_callback_map_[engine_id] = create_engine_handler;
|
| }
|
|
|
| // IBusEngineFactoryService override.
|
| - virtual void UnsetCreateEngineHandler() OVERRIDE {
|
| - create_engine_handler_.Reset();
|
| + virtual void UnsetCreateEngineHandler(
|
| + const std::string& engine_id) OVERRIDE {
|
| + create_engine_callback_map_[engine_id].Reset();
|
| }
|
|
|
| private:
|
| @@ -62,17 +66,28 @@ class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService {
|
| LOG(ERROR) << "Expected argument is string.";
|
| return;
|
| }
|
| - if(create_engine_handler_.is_null()) {
|
| - LOG(WARNING) << "The CreateEngine handler is NULL.";
|
| + if (create_engine_callback_map_[engine_name].is_null()) {
|
| + LOG(WARNING) << "The CreateEngine handler for " << engine_name
|
| + << " is NULL.";
|
| } else {
|
| - dbus::Response* response = dbus::Response::FromMethodCall(method_call);
|
| - dbus::MessageWriter writer(response);
|
| - const dbus::ObjectPath path = create_engine_handler_.Run(engine_name);
|
| - writer.AppendObjectPath(path);
|
| - response_sender.Run(response);
|
| + create_engine_callback_map_[engine_name].Run(
|
| + base::Bind(&IBusEngineFactoryServiceImpl::CreateEngineSendReply,
|
| + weak_ptr_factory_.GetWeakPtr(),
|
| + dbus::Response::FromMethodCall(method_call),
|
| + response_sender));
|
| }
|
| }
|
|
|
| + // Sends reply message for CreateEngine method call.
|
| + void CreateEngineSendReply(
|
| + dbus::Response* response,
|
| + const dbus::ExportedObject::ResponseSender response_sender,
|
| + const dbus::ObjectPath& path) {
|
| + dbus::MessageWriter writer(response);
|
| + writer.AppendObjectPath(path);
|
| + response_sender.Run(response);
|
| + }
|
| +
|
| // Called when the CreateEngine method is exported.
|
| void CreateEngineExported(const std::string& interface_name,
|
| const std::string& method_name,
|
| @@ -82,7 +97,7 @@ class IBusEngineFactoryServiceImpl : public IBusEngineFactoryService {
|
| }
|
|
|
| // CreateEngine method call handler.
|
| - CreateEngineHandler create_engine_handler_;
|
| + std::map<std::string, CreateEngineHandler> create_engine_callback_map_;
|
|
|
| dbus::Bus* bus_;
|
| scoped_refptr<dbus::ExportedObject> exported_object_;
|
| @@ -98,8 +113,10 @@ class IBusEngineFactoryServiceStubImpl : public IBusEngineFactoryService {
|
|
|
| // IBusEngineFactoryService overrides.
|
| virtual void SetCreateEngineHandler(
|
| + const std::string& engine_id,
|
| const CreateEngineHandler& create_engine_handler) OVERRIDE {}
|
| - virtual void UnsetCreateEngineHandler() OVERRIDE {}
|
| + virtual void UnsetCreateEngineHandler(
|
| + const std::string& engine_id) OVERRIDE {}
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(IBusEngineFactoryServiceStubImpl);
|
|
|