summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authornona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-18 19:10:52 +0000
committernona@chromium.org <nona@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-18 19:10:52 +0000
commit85a966cf7b80a1262b3d1c3d4135de9e1645ea69 (patch)
treea9c5581fa06dfe046148e7484fbf293237c8ce47 /chromeos
parent9856b2959287c482a7036a0156898c4e1d13e749 (diff)
downloadchromium_src-85a966cf7b80a1262b3d1c3d4135de9e1645ea69.zip
chromium_src-85a966cf7b80a1262b3d1c3d4135de9e1645ea69.tar.gz
chromium_src-85a966cf7b80a1262b3d1c3d4135de9e1645ea69.tar.bz2
Update DBusThreadManager to handle IBusEngineService and IBusEngineFactory Service.
BUG=126947 TEST=ui_unittests,chromeos_unittests Review URL: https://chromiumcodereview.appspot.com/10701142 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147287 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/dbus/dbus_thread_manager.cc38
-rw-r--r--chromeos/dbus/dbus_thread_manager.h12
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager.h3
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc11
-rw-r--r--chromeos/dbus/mock_dbus_thread_manager_without_gmock.h22
5 files changed, 82 insertions, 4 deletions
diff --git a/chromeos/dbus/dbus_thread_manager.cc b/chromeos/dbus/dbus_thread_manager.cc
index d747eed..397e431 100644
--- a/chromeos/dbus/dbus_thread_manager.cc
+++ b/chromeos/dbus/dbus_thread_manager.cc
@@ -27,6 +27,8 @@
#include "chromeos/dbus/flimflam_service_client.h"
#include "chromeos/dbus/gsm_sms_client.h"
#include "chromeos/dbus/ibus/ibus_client.h"
+#include "chromeos/dbus/ibus/ibus_engine_factory_service.h"
+#include "chromeos/dbus/ibus/ibus_engine_service.h"
#include "chromeos/dbus/ibus/ibus_input_context_client.h"
#include "chromeos/dbus/image_burner_client.h"
#include "chromeos/dbus/introspectable_client.h"
@@ -145,6 +147,13 @@ class DBusThreadManagerImpl : public DBusThreadManager {
if (ibus_bus_.get())
ibus_bus_->ShutdownOnDBusThreadAndBlock();
+ // Release IBusEngineService instances.
+ for (std::map<dbus::ObjectPath, IBusEngineService*>::iterator it
+ = ibus_engine_services_.begin();
+ it != ibus_engine_services_.end(); it++) {
+ delete it->second;
+ }
+
// Stop the D-Bus thread.
dbus_thread_->Stop();
}
@@ -173,6 +182,12 @@ class DBusThreadManagerImpl : public DBusThreadManager {
// Create the ibus input context client.
ibus_input_context_client_.reset(
IBusInputContextClient::Create(client_type));
+
+ // Create the ibus engine factory service.
+ ibus_engine_factory_service_.reset(
+ IBusEngineFactoryService::Create(ibus_bus_.get(), client_type));
+
+ ibus_engine_services_.clear();
}
// DBusThreadManager override.
@@ -320,6 +335,27 @@ class DBusThreadManagerImpl : public DBusThreadManager {
return ibus_input_context_client_.get();
}
+ // DBusThreadManager override.
+ virtual IBusEngineFactoryService* GetIBusEngineFactoryService() OVERRIDE {
+ return ibus_engine_factory_service_.get();
+ }
+
+ // DBusThreadManager override.
+ virtual IBusEngineService* GetIBusEngineService(
+ const dbus::ObjectPath& object_path) OVERRIDE {
+
+ const DBusClientImplementationType client_type =
+ base::chromeos::IsRunningOnChromeOS() ? REAL_DBUS_CLIENT_IMPLEMENTATION
+ : STUB_DBUS_CLIENT_IMPLEMENTATION;
+
+ if (ibus_engine_services_.find(object_path)
+ == ibus_engine_services_.end()) {
+ ibus_engine_services_[object_path] =
+ IBusEngineService::Create(client_type, ibus_bus_.get(), object_path);
+ }
+ return ibus_engine_services_[object_path];
+ }
+
scoped_ptr<base::Thread> dbus_thread_;
scoped_refptr<dbus::Bus> system_bus_;
scoped_refptr<dbus::Bus> ibus_bus_;
@@ -350,6 +386,8 @@ class DBusThreadManagerImpl : public DBusThreadManager {
scoped_ptr<UpdateEngineClient> update_engine_client_;
scoped_ptr<IBusClient> ibus_client_;
scoped_ptr<IBusInputContextClient> ibus_input_context_client_;
+ scoped_ptr<IBusEngineFactoryService> ibus_engine_factory_service_;
+ std::map<dbus::ObjectPath, IBusEngineService*> ibus_engine_services_;
std::string ibus_address_;
};
diff --git a/chromeos/dbus/dbus_thread_manager.h b/chromeos/dbus/dbus_thread_manager.h
index 5e96ef2..733d561 100644
--- a/chromeos/dbus/dbus_thread_manager.h
+++ b/chromeos/dbus/dbus_thread_manager.h
@@ -17,6 +17,7 @@ class Thread;
namespace dbus {
class Bus;
+class ObjectPath;
};
namespace chromeos {
@@ -40,6 +41,8 @@ class FlimflamProfileClient;
class FlimflamServiceClient;
class GsmSMSClient;
class IBusClient;
+class IBusEngineService;
+class IBusEngineFactoryService;
class IBusInputContextClient;
class ImageBurnerClient;
class IntrospectableClient;
@@ -232,6 +235,15 @@ class CHROMEOS_EXPORT DBusThreadManager {
// cache this pointer and use it after DBusThreadManager is shut down.
virtual IBusInputContextClient* GetIBusInputContextClient() = 0;
+ // Returns the ibus engine factory service, owned by DBusThreadManager. Do not
+ // cache this pointer and use it after DBusThreadManager is shut down.
+ virtual IBusEngineFactoryService* GetIBusEngineFactoryService() = 0;
+
+ // Returns the ibus engine service, owned by DBusThreadManager. Do not cache
+ // this pointer and use it after DBusThreadManager is shut down.
+ virtual IBusEngineService* GetIBusEngineService(
+ const dbus::ObjectPath& object_path) = 0;
+
virtual ~DBusThreadManager();
protected:
diff --git a/chromeos/dbus/mock_dbus_thread_manager.h b/chromeos/dbus/mock_dbus_thread_manager.h
index 7396a99..5a10724 100644
--- a/chromeos/dbus/mock_dbus_thread_manager.h
+++ b/chromeos/dbus/mock_dbus_thread_manager.h
@@ -82,6 +82,9 @@ class MockDBusThreadManager : public DBusThreadManager {
MOCK_METHOD0(GetUpdateEngineClient, UpdateEngineClient*(void));
MOCK_METHOD0(GetIBusClient, IBusClient*(void));
MOCK_METHOD0(GetIBusInputContextClient, IBusInputContextClient*(void));
+ MOCK_METHOD0(GetIBusEngineFactoryService, IBusEngineFactoryService*(void));
+ MOCK_METHOD1(GetIBusEngineService,
+ IBusEngineService*(const dbus::ObjectPath& object_path));
MockBluetoothAdapterClient* mock_bluetooth_adapter_client() {
return mock_bluetooth_adapter_client_.get();
diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
index ab6dad2..c9c309b 100644
--- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
+++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.cc
@@ -5,6 +5,8 @@
#include "chromeos/dbus/mock_dbus_thread_manager_without_gmock.h"
#include "chromeos/dbus/ibus/mock_ibus_client.h"
+#include "chromeos/dbus/ibus/mock_ibus_engine_factory_service.h"
+#include "chromeos/dbus/ibus/mock_ibus_engine_service.h"
#include "chromeos/dbus/ibus/mock_ibus_input_context_client.h"
namespace chromeos {
@@ -181,5 +183,14 @@ IBusInputContextClient*
return mock_ibus_input_context_client_.get();
}
+IBusEngineFactoryService*
+ MockDBusThreadManagerWithoutGMock::GetIBusEngineFactoryService() {
+ return mock_ibus_engine_factory_service_.get();
+}
+
+IBusEngineService* MockDBusThreadManagerWithoutGMock::GetIBusEngineService(
+ const dbus::ObjectPath& object_path) {
+ return mock_ibus_engine_service_.get();
+}
} // namespace chromeos
diff --git a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
index 36e6893..aad907e 100644
--- a/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
+++ b/chromeos/dbus/mock_dbus_thread_manager_without_gmock.h
@@ -11,15 +11,16 @@
#include "chromeos/dbus/dbus_thread_manager.h"
namespace dbus {
-
class Bus;
-
+class ObjectPath;
} // namespace dbus
namespace chromeos {
-class MockIBusClient;
-class MockIBusInputContextClient;
+class MockIBusClient;
+class MockIBusEngineFactoryService;
+class MockIBusEngineService;
+class MockIBusInputContextClient;
// This class provides an another mock DBusThreadManager without gmock
// dependency. This class is used only for places where GMock is not allowed
@@ -60,6 +61,9 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager {
virtual BluetoothOutOfBandClient* GetBluetoothOutOfBandClient() OVERRIDE;
virtual IBusClient* GetIBusClient() OVERRIDE;
virtual IBusInputContextClient* GetIBusInputContextClient() OVERRIDE;
+ virtual IBusEngineFactoryService* GetIBusEngineFactoryService() OVERRIDE;
+ virtual IBusEngineService* GetIBusEngineService(
+ const dbus::ObjectPath& object_path) OVERRIDE;
MockIBusClient* mock_ibus_client() {
return mock_ibus_client_.get();
@@ -69,6 +73,14 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager {
return mock_ibus_input_context_client_.get();
}
+ MockIBusEngineService* mock_ibus_engine_service() {
+ return mock_ibus_engine_service_.get();
+ }
+
+ MockIBusEngineFactoryService* mock_ibus_engine_factory_service() {
+ return mock_ibus_engine_factory_service_.get();
+ }
+
void set_ibus_bus(dbus::Bus* ibus_bus) {
ibus_bus_ = ibus_bus;
}
@@ -76,6 +88,8 @@ class MockDBusThreadManagerWithoutGMock : public DBusThreadManager {
private:
scoped_ptr<MockIBusClient> mock_ibus_client_;
scoped_ptr<MockIBusInputContextClient> mock_ibus_input_context_client_;
+ scoped_ptr<MockIBusEngineService> mock_ibus_engine_service_;
+ scoped_ptr<MockIBusEngineFactoryService> mock_ibus_engine_factory_service_;
dbus::Bus* ibus_bus_;
DISALLOW_COPY_AND_ASSIGN(MockDBusThreadManagerWithoutGMock);