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

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: style fix 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "chromeos/dbus/shill_stub_helper.h" 44 #include "chromeos/dbus/shill_stub_helper.h"
45 #include "chromeos/dbus/sms_client.h" 45 #include "chromeos/dbus/sms_client.h"
46 #include "chromeos/dbus/system_clock_client.h" 46 #include "chromeos/dbus/system_clock_client.h"
47 #include "chromeos/dbus/update_engine_client.h" 47 #include "chromeos/dbus/update_engine_client.h"
48 #include "dbus/bus.h" 48 #include "dbus/bus.h"
49 #include "dbus/dbus_statistics.h" 49 #include "dbus/dbus_statistics.h"
50 50
51 namespace chromeos { 51 namespace chromeos {
52 52
53 static DBusThreadManager* g_dbus_thread_manager = NULL; 53 static DBusThreadManager* g_dbus_thread_manager = NULL;
54 static bool g_dbus_thread_manager_set_for_testing = false; 54 static DBusThreadManager* g_dbus_thread_manager_for_testing = NULL;
55 55
56 // The DBusThreadManager implementation used in production. 56 // The DBusThreadManager implementation used in production.
57 class DBusThreadManagerImpl : public DBusThreadManager { 57 class DBusThreadManagerImpl : public DBusThreadManager {
58 public: 58 public:
59 explicit DBusThreadManagerImpl() { 59 explicit DBusThreadManagerImpl() {
60 // Create the D-Bus thread. 60 // Create the D-Bus thread.
61 base::Thread::Options thread_options; 61 base::Thread::Options thread_options;
62 thread_options.message_loop_type = base::MessageLoop::TYPE_IO; 62 thread_options.message_loop_type = base::MessageLoop::TYPE_IO;
63 dbus_thread_.reset(new base::Thread("D-Bus thread")); 63 dbus_thread_.reset(new base::Thread("D-Bus thread"));
64 dbus_thread_->StartWithOptions(thread_options); 64 dbus_thread_->StartWithOptions(thread_options);
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 scoped_ptr<PowerManagerClient> power_manager_client_; 312 scoped_ptr<PowerManagerClient> power_manager_client_;
313 scoped_ptr<SessionManagerClient> session_manager_client_; 313 scoped_ptr<SessionManagerClient> session_manager_client_;
314 scoped_ptr<SMSClient> sms_client_; 314 scoped_ptr<SMSClient> sms_client_;
315 scoped_ptr<UpdateEngineClient> update_engine_client_; 315 scoped_ptr<UpdateEngineClient> update_engine_client_;
316 316
317 scoped_ptr<PowerPolicyController> power_policy_controller_; 317 scoped_ptr<PowerPolicyController> power_policy_controller_;
318 }; 318 };
319 319
320 // static 320 // static
321 void DBusThreadManager::Initialize() { 321 void DBusThreadManager::Initialize() {
322 // Ignore Initialize() if we set a test DBusThreadManager.
323 if (g_dbus_thread_manager_set_for_testing)
324 return;
325 // If we initialize DBusThreadManager twice we may also be shutting it down 322 // If we initialize DBusThreadManager twice we may also be shutting it down
326 // early; do not allow that. 323 // early; do not allow that.
327 CHECK(g_dbus_thread_manager == NULL); 324 CHECK(g_dbus_thread_manager == NULL);
328 325
326 if (g_dbus_thread_manager_for_testing) {
327 g_dbus_thread_manager = g_dbus_thread_manager_for_testing;
328 InitializeClients();
329 VLOG(1) << "DBusThreadManager initialized with test implementation";
330 return;
331 }
329 // Determine whether we use stub or real client implementations. 332 // Determine whether we use stub or real client implementations.
330 if (base::SysInfo::IsRunningOnChromeOS()) { 333 if (base::SysInfo::IsRunningOnChromeOS()) {
331 g_dbus_thread_manager = new DBusThreadManagerImpl; 334 g_dbus_thread_manager = new DBusThreadManagerImpl;
332 InitializeClients(); 335 InitializeClients();
333 VLOG(1) << "DBusThreadManager initialized for ChromeOS"; 336 VLOG(1) << "DBusThreadManager initialized for ChromeOS";
334 } else { 337 } else {
335 InitializeWithStub(); 338 InitializeWithStub();
336 return;
337 } 339 }
338 } 340 }
339 341
340 // static 342 // static
343 void DBusThreadManager::SetInstanceForTesting(
344 DBusThreadManager* dbus_thread_manager) {
345 CHECK(!g_dbus_thread_manager);
346 CHECK(!g_dbus_thread_manager_for_testing);
347 g_dbus_thread_manager_for_testing = dbus_thread_manager;
348 }
349
350 // static
341 void DBusThreadManager::InitializeForTesting( 351 void DBusThreadManager::InitializeForTesting(
342 DBusThreadManager* dbus_thread_manager) { 352 DBusThreadManager* dbus_thread_manager) {
343 // If we initialize DBusThreadManager twice we may also be shutting it down 353 SetInstanceForTesting(dbus_thread_manager);
344 // early; do not allow that. 354 Initialize();
345 CHECK(g_dbus_thread_manager == NULL);
346 CHECK(dbus_thread_manager);
347 g_dbus_thread_manager = dbus_thread_manager;
348 g_dbus_thread_manager_set_for_testing = true;
349 InitializeClients();
350 VLOG(1) << "DBusThreadManager initialized with test implementation";
351 } 355 }
352 356
353 // static 357 // static
354 void DBusThreadManager::InitializeWithStub() { 358 void DBusThreadManager::InitializeWithStub() {
355 // If we initialize DBusThreadManager twice we may also be shutting it down 359 // If we initialize DBusThreadManager twice we may also be shutting it down
356 // early; do not allow that. 360 // early; do not allow that.
357 CHECK(g_dbus_thread_manager == NULL); 361 CHECK(g_dbus_thread_manager == NULL);
358 FakeDBusThreadManager* fake_dbus_thread_manager = new FakeDBusThreadManager; 362 FakeDBusThreadManager* fake_dbus_thread_manager = new FakeDBusThreadManager;
359 fake_dbus_thread_manager->SetFakeClients(); 363 fake_dbus_thread_manager->SetFakeClients();
360 g_dbus_thread_manager = fake_dbus_thread_manager; 364 g_dbus_thread_manager = fake_dbus_thread_manager;
361 InitializeClients(); 365 InitializeClients();
362 shill_stub_helper::SetupDefaultEnvironment(); 366 shill_stub_helper::SetupDefaultEnvironment();
363 VLOG(1) << "DBusThreadManager initialized with stub implementation"; 367 VLOG(1) << "DBusThreadManager initialized with stub implementation";
364 } 368 }
365 369
366 // static 370 // static
367 bool DBusThreadManager::IsInitialized() { 371 bool DBusThreadManager::IsInitialized() {
368 return g_dbus_thread_manager != NULL; 372 return g_dbus_thread_manager != NULL;
369 } 373 }
370 374
371 // static 375 // static
372 void DBusThreadManager::Shutdown() { 376 void DBusThreadManager::Shutdown() {
373 // If we called InitializeForTesting, this may get called more than once. 377 // If we called InitializeForTesting, this may get called more than once.
374 // Ensure that we only shutdown DBusThreadManager once. 378 // Ensure that we only shutdown DBusThreadManager once.
375 CHECK(g_dbus_thread_manager || g_dbus_thread_manager_set_for_testing); 379 CHECK(g_dbus_thread_manager || g_dbus_thread_manager_for_testing);
376 DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager; 380 DBusThreadManager* dbus_thread_manager = g_dbus_thread_manager;
377 g_dbus_thread_manager = NULL; 381 g_dbus_thread_manager = NULL;
382 g_dbus_thread_manager_for_testing = NULL;
378 delete dbus_thread_manager; 383 delete dbus_thread_manager;
379 VLOG(1) << "DBusThreadManager Shutdown completed"; 384 VLOG(1) << "DBusThreadManager Shutdown completed";
380 } 385 }
381 386
382 DBusThreadManager::DBusThreadManager() { 387 DBusThreadManager::DBusThreadManager() {
383 dbus::statistics::Initialize(); 388 dbus::statistics::Initialize();
384 } 389 }
385 390
386 DBusThreadManager::~DBusThreadManager() { 391 DBusThreadManager::~DBusThreadManager() {
387 dbus::statistics::Shutdown(); 392 dbus::statistics::Shutdown();
388 if (g_dbus_thread_manager == NULL) 393 if (g_dbus_thread_manager == NULL)
389 return; // Called form Shutdown() or local test instance. 394 return; // Called form Shutdown() or local test instance.
390 // There should never be both a global instance and a local instance. 395 // There should never be both a global instance and a local instance.
391 CHECK(this == g_dbus_thread_manager); 396 CHECK(this == g_dbus_thread_manager);
392 if (g_dbus_thread_manager_set_for_testing) { 397 if (g_dbus_thread_manager_for_testing) {
393 g_dbus_thread_manager = NULL; 398 g_dbus_thread_manager = NULL;
394 g_dbus_thread_manager_set_for_testing = false; 399 g_dbus_thread_manager_for_testing = NULL;
395 VLOG(1) << "DBusThreadManager destroyed"; 400 VLOG(1) << "DBusThreadManager destroyed";
396 } else { 401 } else {
397 LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()"; 402 LOG(FATAL) << "~DBusThreadManager() called outside of Shutdown()";
398 } 403 }
399 } 404 }
400 405
401 // static 406 // static
402 DBusThreadManager* DBusThreadManager::Get() { 407 DBusThreadManager* DBusThreadManager::Get() {
403 CHECK(g_dbus_thread_manager) 408 CHECK(g_dbus_thread_manager)
404 << "DBusThreadManager::Get() called before Initialize()"; 409 << "DBusThreadManager::Get() called before Initialize()";
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects(); 455 g_dbus_thread_manager->GetSystemBus()->GetManagedObjects();
451 } 456 }
452 457
453 // static 458 // static
454 void DBusThreadManager::InitClient(DBusClient* client) { 459 void DBusThreadManager::InitClient(DBusClient* client) {
455 if (client) 460 if (client)
456 client->Init(g_dbus_thread_manager->GetSystemBus()); 461 client->Init(g_dbus_thread_manager->GetSystemBus());
457 } 462 }
458 463
459 } // namespace chromeos 464 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/dbus_thread_manager.h ('k') | content/browser/renderer_host/render_sandbox_host_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698