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

Side by Side Diff: chromeos/dbus/dbus_thread_manager.cc

Issue 83633004: Do not spawn a thread in browser/interactive ui tests before spawning sandbox host process (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years 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 | Annotate | Revision Log
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/dbus_thread_manager.h" 5 #include "chromeos/dbus/dbus_thread_manager.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/observer_list.h" 10 #include "base/observer_list.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "chromeos/dbus/shill_stub_helper.h" 45 #include "chromeos/dbus/shill_stub_helper.h"
46 #include "chromeos/dbus/sms_client.h" 46 #include "chromeos/dbus/sms_client.h"
47 #include "chromeos/dbus/system_clock_client.h" 47 #include "chromeos/dbus/system_clock_client.h"
48 #include "chromeos/dbus/update_engine_client.h" 48 #include "chromeos/dbus/update_engine_client.h"
49 #include "dbus/bus.h" 49 #include "dbus/bus.h"
50 #include "dbus/dbus_statistics.h" 50 #include "dbus/dbus_statistics.h"
51 51
52 namespace chromeos { 52 namespace chromeos {
53 53
54 static DBusThreadManager* g_dbus_thread_manager = NULL; 54 static DBusThreadManager* g_dbus_thread_manager = NULL;
55 static bool g_dbus_thread_manager_set_for_testing = false; 55 static DBusThreadManager* g_dbus_thread_manager_for_testing = NULL;
56 56
57 // The DBusThreadManager implementation used in production. 57 // The DBusThreadManager implementation used in production.
58 class DBusThreadManagerImpl : public DBusThreadManager { 58 class DBusThreadManagerImpl : public DBusThreadManager {
59 public: 59 public:
60 explicit DBusThreadManagerImpl() { 60 explicit DBusThreadManagerImpl() {
61 // Create the D-Bus thread. 61 // Create the D-Bus thread.
62 base::Thread::Options thread_options; 62 base::Thread::Options thread_options;
63 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; 63 thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
64 dbus_thread_.reset(new base::Thread("D-Bus thread")); 64 dbus_thread_.reset(new base::Thread("D-Bus thread"));
65 dbus_thread_->StartWithOptions(thread_options); 65 dbus_thread_->StartWithOptions(thread_options);
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 scoped_ptr<PowerManagerClient> power_manager_client_; 323 scoped_ptr<PowerManagerClient> power_manager_client_;
324 scoped_ptr<SessionManagerClient> session_manager_client_; 324 scoped_ptr<SessionManagerClient> session_manager_client_;
325 scoped_ptr<SMSClient> sms_client_; 325 scoped_ptr<SMSClient> sms_client_;
326 scoped_ptr<UpdateEngineClient> update_engine_client_; 326 scoped_ptr<UpdateEngineClient> update_engine_client_;
327 327
328 scoped_ptr<PowerPolicyController> power_policy_controller_; 328 scoped_ptr<PowerPolicyController> power_policy_controller_;
329 }; 329 };
330 330
331 // static 331 // static
332 void DBusThreadManager::Initialize() { 332 void DBusThreadManager::Initialize() {
333 // Ignore Initialize() if we set a test DBusThreadManager.
334 if (g_dbus_thread_manager_set_for_testing)
335 return;
336 // If we initialize DBusThreadManager twice we may also be shutting it down 333 // If we initialize DBusThreadManager twice we may also be shutting it down
337 // early; do not allow that. 334 // early; do not allow that.
338 CHECK(g_dbus_thread_manager == NULL); 335 CHECK(g_dbus_thread_manager == NULL);
339 336
337 if (g_dbus_thread_manager_for_testing) {
338 g_dbus_thread_manager = g_dbus_thread_manager_for_testing;
339 InitializeClients();
340 VLOG(1) << "DBusThreadManager initialized with test implementation";
341 return;
342 }
340 // Determine whether we use stub or real client implementations. 343 // Determine whether we use stub or real client implementations.
341 if (base::SysInfo::IsRunningOnChromeOS()) { 344 if (base::SysInfo::IsRunningOnChromeOS()) {
342 g_dbus_thread_manager = new DBusThreadManagerImpl; 345 g_dbus_thread_manager = new DBusThreadManagerImpl;
343 InitializeClients(); 346 InitializeClients();
344 VLOG(1) << "DBusThreadManager initialized for ChromeOS"; 347 VLOG(1) << "DBusThreadManager initialized for ChromeOS";
345 } else { 348 } else {
346 InitializeWithStub(); 349 InitializeWithStub();
347 return;
348 } 350 }
349 } 351 }
350 352
351 // static 353 // static
354 void DBusThreadManager::SetInstanceForTesting(
355 DBusThreadManager* dbus_thread_manager) {
356 CHECK(!g_dbus_thread_manager);
357 CHECK(!g_dbus_thread_manager_for_testing);
358 g_dbus_thread_manager_for_testing = dbus_thread_manager;
359 }
360
361 // static
352 void DBusThreadManager::InitializeForTesting( 362 void DBusThreadManager::InitializeForTesting(
353 DBusThreadManager* dbus_thread_manager) { 363 DBusThreadManager* dbus_thread_manager) {
354 // If we initialize DBusThreadManager twice we may also be shutting it down 364 SetInstanceForTesting(dbus_thread_manager);
355 // early; do not allow that. 365 Initialize();
356 CHECK(g_dbus_thread_manager == NULL);
357 CHECK(dbus_thread_manager);
358 g_dbus_thread_manager = dbus_thread_manager;
359 g_dbus_thread_manager_set_for_testing = true;
360 InitializeClients();
361 VLOG(1) << "DBusThreadManager initialized with test implementation";
362 } 366 }
363 367
364 // static 368 // static
365 void DBusThreadManager::InitializeWithStub() { 369 void DBusThreadManager::InitializeWithStub() {
366 // If we initialize DBusThreadManager twice we may also be shutting it down 370 // If we initialize DBusThreadManager twice we may also be shutting it down
367 // early; do not allow that. 371 // early; do not allow that.
368 CHECK(g_dbus_thread_manager == NULL); 372 CHECK(g_dbus_thread_manager == NULL);
369 FakeDBusThreadManager* fake_dbus_thread_manager = new FakeDBusThreadManager; 373 FakeDBusThreadManager* fake_dbus_thread_manager = new FakeDBusThreadManager;
370 fake_dbus_thread_manager->SetFakeClients(); 374 fake_dbus_thread_manager->SetFakeClients();
371 g_dbus_thread_manager = fake_dbus_thread_manager; 375 g_dbus_thread_manager = fake_dbus_thread_manager;
372 InitializeClients(); 376 InitializeClients();
373 shill_stub_helper::SetupDefaultEnvironment(); 377 shill_stub_helper::SetupDefaultEnvironment();
374 VLOG(1) << "DBusThreadManager initialized with stub implementation"; 378 VLOG(1) << "DBusThreadManager initialized with stub implementation";
375 } 379 }
376 380
377 // static 381 // static
378 bool DBusThreadManager::IsInitialized() { 382 bool DBusThreadManager::IsInitialized() {
379 return g_dbus_thread_manager != NULL; 383 return g_dbus_thread_manager != NULL;
380 } 384 }
381 385
382 // static 386 // static
383 void DBusThreadManager::Shutdown() { 387 void DBusThreadManager::Shutdown() {
384 // If we called InitializeForTesting, this may get called more than once. 388 // If we called InitializeForTesting, this may get called more than once.
385 // Ensure that we only shutdown DBusThreadManager once. 389 // Ensure that we only shutdown DBusThreadManager once.
386 CHECK(g_dbus_thread_manager || g_dbus_thread_manager_set_for_testing); 390 CHECK(g_dbus_thread_manager || g_dbus_thread_manager_for_testing);
387 DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager; 391 DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager;
388 g_dbus_thread_manager = NULL; 392 g_dbus_thread_manager = NULL;
393 g_dbus_thread_manager_for_testing = NULL;
389 delete dbus_thread_manager; 394 delete dbus_thread_manager;
390 VLOG(1) << "DBusThreadManager Shutdown completed"; 395 VLOG(1) << "DBusThreadManager Shutdown completed";
391 } 396 }
392 397
393 DBusThreadManager::DBusThreadManager() { 398 DBusThreadManager::DBusThreadManager() {
394 dbus::statistics::Initialize(); 399 dbus::statistics::Initialize();
395 } 400 }
396 401
397 DBusThreadManager::~DBusThreadManager() { 402 DBusThreadManager::~DBusThreadManager() {
398 dbus::statistics::Shutdown(); 403 dbus::statistics::Shutdown();
399 if (g_dbus_thread_manager == NULL) 404 if (g_dbus_thread_manager == NULL)
400 return; // Called form Shutdown() or local test instance. 405 return; // Called form Shutdown() or local test instance.
401 // There should never be both a global instance and a local instance. 406 // There should never be both a global instance and a local instance.
402 CHECK(this == g_dbus_thread_manager); 407 CHECK(this == g_dbus_thread_manager);
403 if (g_dbus_thread_manager_set_for_testing) { 408 if (g_dbus_thread_manager_for_testing) {
404 g_dbus_thread_manager = NULL; 409 g_dbus_thread_manager = NULL;
405 g_dbus_thread_manager_set_for_testing = false; 410 g_dbus_thread_manager_for_testing = NULL;
406 VLOG(1) << "DBusThreadManager destroyed"; 411 VLOG(1) << "DBusThreadManager destroyed";
407 } else { 412 } else {
408 LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()"; 413 LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()";
409 } 414 }
410 } 415 }
411 416
412 // static 417 // static
413 DBusThreadManager* DBusThreadManager::Get() { 418 DBusThreadManager* DBusThreadManager::Get() {
414 CHECK(g_dbus_thread_manager) 419 CHECK(g_dbus_thread_manager)
415 << "DBusThreadManager::Get() called before Initialize()"; 420 << "DBusThreadManager::Get() called before Initialize()";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects(); 466 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects();
462 } 467 }
463 468
464 // static 469 // static
465 void DBusThreadManager::InitClient(DBusClient* client) { 470 void DBusThreadManager::InitClient(DBusClient* client) {
466 if (client) 471 if (client)
467 client->Init(g_dbus_thread_manager->GetSystemBus()); 472 client->Init(g_dbus_thread_manager->GetSystemBus());
468 } 473 }
469 474
470 } // namespace chromeos 475 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698