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/ime/ibus_daemon_controller.h" | 5 #include "chromeos/ime/ibus_daemon_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/chromeos/chromeos_version.h" | 8 #include "base/chromeos/chromeos_version.h" |
9 #include "base/environment.h" | 9 #include "base/environment.h" |
10 #include "base/files/file_path_watcher.h" | 10 #include "base/files/file_path_watcher.h" |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 | 256 |
257 ObserverList<Observer> observers_; | 257 ObserverList<Observer> observers_; |
258 base::ThreadChecker thread_checker_; | 258 base::ThreadChecker thread_checker_; |
259 | 259 |
260 // Used for making callbacks for PostTask. | 260 // Used for making callbacks for PostTask. |
261 base::WeakPtrFactory<IBusDaemonControllerImpl> weak_ptr_factory_; | 261 base::WeakPtrFactory<IBusDaemonControllerImpl> weak_ptr_factory_; |
262 | 262 |
263 DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerImpl); | 263 DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerImpl); |
264 }; | 264 }; |
265 | 265 |
266 // The stub implementation of IBusDaemonController. | 266 // An implementation of IBusDaemonController without ibus-daemon interaction. |
267 class IBusDaemonControllerStubImpl : public IBusDaemonController { | 267 // Currently this class is used only on linux desktop. |
| 268 // TODO(nona): Remove IBusDaemonControlelr this once crbug.com/171351 is fixed. |
| 269 class IBusDaemonControllerDaemonlessImpl : public IBusDaemonController { |
268 public: | 270 public: |
269 IBusDaemonControllerStubImpl() {} | 271 IBusDaemonControllerDaemonlessImpl() |
270 virtual ~IBusDaemonControllerStubImpl() {} | 272 : is_started_(false) {} |
| 273 virtual ~IBusDaemonControllerDaemonlessImpl() {} |
271 | 274 |
272 // IBusDaemonController overrides: | 275 // IBusDaemonController overrides: |
273 virtual void AddObserver(Observer* observer) OVERRIDE {} | 276 virtual void AddObserver(Observer* observer) OVERRIDE { |
274 virtual void RemoveObserver(Observer* observer) OVERRIDE {} | 277 observers_.AddObserver(observer); |
275 virtual bool Start() OVERRIDE { return true; } | 278 } |
276 virtual bool Stop() OVERRIDE { return true; } | 279 |
| 280 virtual void RemoveObserver(Observer* observer) OVERRIDE { |
| 281 observers_.RemoveObserver(observer); |
| 282 } |
| 283 |
| 284 virtual bool Start() OVERRIDE { |
| 285 if (is_started_) |
| 286 return false; |
| 287 // IBusBus should be initialized but it is okay to pass "dummy address" as |
| 288 // the bus address because the actual dbus implementation is stub if the |
| 289 // Chrome OS is working on Linux desktop. This path is not used in |
| 290 // production at this moment, only for Chrome OS on Linux Desktop. |
| 291 // TODO(nona): Remove InitIBusBus oncer all legacy ime is migrated to IME |
| 292 // extension API. |
| 293 DCHECK(!base::chromeos::IsRunningOnChromeOS()); |
| 294 DBusThreadManager::Get()->InitIBusBus("dummy address", |
| 295 base::Bind(&base::DoNothing)); |
| 296 is_started_ = true; |
| 297 FOR_EACH_OBSERVER(Observer, observers_, OnConnected()); |
| 298 return true; |
| 299 } |
| 300 virtual bool Stop() OVERRIDE { |
| 301 if (!is_started_) |
| 302 return false; |
| 303 is_started_ = false; |
| 304 FOR_EACH_OBSERVER(Observer, observers_, OnDisconnected()); |
| 305 return true; |
| 306 } |
277 | 307 |
278 private: | 308 private: |
279 DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerStubImpl); | 309 ObserverList<Observer> observers_; |
| 310 bool is_started_; |
| 311 DISALLOW_COPY_AND_ASSIGN(IBusDaemonControllerDaemonlessImpl); |
280 }; | 312 }; |
281 | 313 |
282 } // namespace | 314 } // namespace |
283 | 315 |
284 /////////////////////////////////////////////////////////////////////////////// | 316 /////////////////////////////////////////////////////////////////////////////// |
285 // IBusDaemonController | 317 // IBusDaemonController |
286 | 318 |
287 IBusDaemonController::IBusDaemonController() { | 319 IBusDaemonController::IBusDaemonController() { |
288 } | 320 } |
289 | 321 |
290 IBusDaemonController::~IBusDaemonController() { | 322 IBusDaemonController::~IBusDaemonController() { |
291 } | 323 } |
292 | 324 |
293 // static | 325 // static |
294 void IBusDaemonController::Initialize( | 326 void IBusDaemonController::Initialize( |
295 const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, | 327 const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, |
296 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) { | 328 const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) { |
297 DCHECK(g_ibus_daemon_controller == NULL) | 329 DCHECK(g_ibus_daemon_controller == NULL) |
298 << "Do not call Initialize function multiple times."; | 330 << "Do not call Initialize function multiple times."; |
299 if (base::chromeos::IsRunningOnChromeOS()) { | 331 if (base::chromeos::IsRunningOnChromeOS()) { |
300 g_ibus_daemon_controller = new IBusDaemonControllerImpl(ui_task_runner, | 332 g_ibus_daemon_controller = new IBusDaemonControllerImpl(ui_task_runner, |
301 file_task_runner); | 333 file_task_runner); |
302 } else { | 334 } else { |
303 g_ibus_daemon_controller = new IBusDaemonControllerStubImpl(); | 335 g_ibus_daemon_controller = new IBusDaemonControllerDaemonlessImpl(); |
304 } | 336 } |
305 } | 337 } |
306 | 338 |
307 // static | 339 // static |
308 void IBusDaemonController::InitializeForTesting( | 340 void IBusDaemonController::InitializeForTesting( |
309 IBusDaemonController* controller_) { | 341 IBusDaemonController* controller_) { |
310 DCHECK(g_ibus_daemon_controller == NULL); | 342 DCHECK(g_ibus_daemon_controller == NULL); |
311 DCHECK(controller_); | 343 DCHECK(controller_); |
312 g_ibus_daemon_controller = controller_; | 344 g_ibus_daemon_controller = controller_; |
313 } | 345 } |
314 | 346 |
315 // static | 347 // static |
316 void IBusDaemonController::Shutdown() { | 348 void IBusDaemonController::Shutdown() { |
317 delete g_ibus_daemon_controller; | 349 delete g_ibus_daemon_controller; |
318 g_ibus_daemon_controller = NULL; | 350 g_ibus_daemon_controller = NULL; |
319 } | 351 } |
320 | 352 |
321 // static | 353 // static |
322 IBusDaemonController* IBusDaemonController::GetInstance() { | 354 IBusDaemonController* IBusDaemonController::GetInstance() { |
323 return g_ibus_daemon_controller; | 355 return g_ibus_daemon_controller; |
324 } | 356 } |
325 | 357 |
326 } // namespace chromeos | 358 } // namespace chromeos |
OLD | NEW |