Index: chromeos/ime/ibus_daemon_controller.cc |
diff --git a/chromeos/ime/ibus_daemon_controller.cc b/chromeos/ime/ibus_daemon_controller.cc |
index a0d23f088c5f40fc71ed58507c80faa5de245715..290c31ef381cf63578776ae1098ae04ceb87032c 100644 |
--- a/chromeos/ime/ibus_daemon_controller.cc |
+++ b/chromeos/ime/ibus_daemon_controller.cc |
@@ -263,20 +263,52 @@ class IBusDaemonControllerImpl : public IBusDaemonController { |
DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerImpl); |
}; |
-// The stub implementation of IBusDaemonController. |
-class IBusDaemonControllerStubImpl : public IBusDaemonController { |
+// An implementation of IBusDaemonController without ibus-daemon interaction. |
+// Currently this class is used only on linux desktop. |
+// TODO(nona): Remove IBusDaemonControlelr this once crbug.com/171351 is fixed. |
+class IBusDaemonControllerDaemonlessImpl : public IBusDaemonController { |
public: |
- IBusDaemonControllerStubImpl() {} |
- virtual ~IBusDaemonControllerStubImpl() {} |
+ IBusDaemonControllerDaemonlessImpl() |
+ : is_started_(false) {} |
+ virtual ~IBusDaemonControllerDaemonlessImpl() {} |
// IBusDaemonController overrides: |
- virtual void AddObserver(Observer* observer) OVERRIDE {} |
- virtual void RemoveObserver(Observer* observer) OVERRIDE {} |
- virtual bool Start() OVERRIDE { return true; } |
- virtual bool Stop() OVERRIDE { return true; } |
+ virtual void AddObserver(Observer* observer) OVERRIDE { |
+ observers_.AddObserver(observer); |
+ } |
+ |
+ virtual void RemoveObserver(Observer* observer) OVERRIDE { |
+ observers_.RemoveObserver(observer); |
+ } |
+ |
+ virtual bool Start() OVERRIDE { |
+ if (is_started_) |
+ return false; |
+ // IBusBus should be initialized but it is okay to pass "dummy address" as |
+ // the bus address because the actual dbus implementation is stub if the |
+ // Chrome OS is working on Linux desktop. This path is not used in |
+ // production at this moment, only for Chrome OS on Linux Desktop. |
+ // TODO(nona): Remove InitIBusBus oncer all legacy ime is migrated to IME |
+ // extension API. |
+ DCHECK(!base::chromeos::IsRunningOnChromeOS()); |
+ DBusThreadManager::Get()->InitIBusBus("dummy address", |
+ base::Bind(&base::DoNothing)); |
+ is_started_ = true; |
+ FOR_EACH_OBSERVER(Observer, observers_, OnConnected()); |
+ return true; |
+ } |
+ virtual bool Stop() OVERRIDE { |
+ if (!is_started_) |
+ return false; |
+ is_started_ = false; |
+ FOR_EACH_OBSERVER(Observer, observers_, OnDisconnected()); |
+ return true; |
+ } |
private: |
- DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerStubImpl); |
+ ObserverList<Observer> observers_; |
+ bool is_started_; |
+ DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerDaemonlessImpl); |
}; |
} // namespace |
@@ -300,7 +332,7 @@ void IBusDaemonController::Initialize( |
g_ibus_daemon_controller = new IBusDaemonControllerImpl(ui_task_runner, |
file_task_runner); |
} else { |
- g_ibus_daemon_controller = new IBusDaemonControllerStubImpl(); |
+ g_ibus_daemon_controller = new IBusDaemonControllerDaemonlessImpl(); |
} |
} |