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

Side by Side Diff: content/browser/browser_main_loop.cc

Issue 8776007: Start/stop WebKitThread from BrowserMainLoop like other BrowserThreads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to head. Created 9 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
« no previous file with comments | « content/browser/browser_main_loop.h ('k') | content/browser/in_process_webkit/webkit_thread.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "content/browser/browser_main_loop.h" 5 #include "content/browser/browser_main_loop.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/metrics/field_trial.h" 11 #include "base/metrics/field_trial.h"
12 #include "base/metrics/histogram.h" 12 #include "base/metrics/histogram.h"
13 #include "base/threading/thread_restrictions.h" 13 #include "base/threading/thread_restrictions.h"
14 #include "content/browser/browser_thread_impl.h" 14 #include "content/browser/browser_thread_impl.h"
15 #include "content/browser/in_process_webkit/webkit_thread.h"
15 #include "content/browser/trace_controller.h" 16 #include "content/browser/trace_controller.h"
16 #include "content/common/hi_res_timer_manager.h" 17 #include "content/common/hi_res_timer_manager.h"
17 #include "content/common/sandbox_policy.h" 18 #include "content/common/sandbox_policy.h"
18 #include "content/public/browser/browser_main_parts.h" 19 #include "content/public/browser/browser_main_parts.h"
19 #include "content/public/browser/browser_shutdown.h" 20 #include "content/public/browser/browser_shutdown.h"
20 #include "content/public/browser/content_browser_client.h" 21 #include "content/public/browser/content_browser_client.h"
21 #include "content/public/common/content_switches.h" 22 #include "content/public/common/content_switches.h"
22 #include "content/public/common/main_function_params.h" 23 #include "content/public/common/main_function_params.h"
23 #include "content/public/common/result_codes.h" 24 #include "content/public/common/result_codes.h"
24 #include "crypto/nss_util.h" 25 #include "crypto/nss_util.h"
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 thread_id < BrowserThread::ID_COUNT; 314 thread_id < BrowserThread::ID_COUNT;
314 ++thread_id) { 315 ++thread_id) {
315 scoped_ptr<BrowserProcessSubThread>* thread_to_start = NULL; 316 scoped_ptr<BrowserProcessSubThread>* thread_to_start = NULL;
316 base::Thread::Options* options = &default_options; 317 base::Thread::Options* options = &default_options;
317 318
318 switch (thread_id) { 319 switch (thread_id) {
319 case BrowserThread::DB: 320 case BrowserThread::DB:
320 thread_to_start = &db_thread_; 321 thread_to_start = &db_thread_;
321 break; 322 break;
322 case BrowserThread::WEBKIT: 323 case BrowserThread::WEBKIT:
323 // For now, the WebKit thread in the browser is owned by 324 // Special case as WebKitThread is a separate
324 // ResourceDispatcherHost, not by the content framework. Until 325 // type. |thread_to_start| is not used in this case.
325 // this is fixed, we don't start the thread but still call
326 // Pre/PostStartThread for the ID.
327 break; 326 break;
328 case BrowserThread::FILE: 327 case BrowserThread::FILE:
329 thread_to_start = &file_thread_; 328 thread_to_start = &file_thread_;
330 #if defined(OS_WIN) 329 #if defined(OS_WIN)
331 // On Windows, the FILE thread needs to be have a UI message loop 330 // On Windows, the FILE thread needs to be have a UI message loop
332 // which pumps messages in such a way that Google Update can 331 // which pumps messages in such a way that Google Update can
333 // communicate back to us. 332 // communicate back to us.
334 options = &ui_message_loop_options; 333 options = &ui_message_loop_options;
335 #else 334 #else
336 options = &io_message_loop_options; 335 options = &io_message_loop_options;
(...skipping 21 matching lines...) Expand all
358 default: 357 default:
359 NOTREACHED(); 358 NOTREACHED();
360 break; 359 break;
361 } 360 }
362 361
363 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id); 362 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id);
364 363
365 if (parts_.get()) 364 if (parts_.get())
366 parts_->PreStartThread(id); 365 parts_->PreStartThread(id);
367 366
368 if (thread_to_start) { 367 if (thread_id == BrowserThread::WEBKIT) {
368 webkit_thread_.reset(new WebKitThread);
369 webkit_thread_->Initialize();
370 } else if (thread_to_start) {
369 (*thread_to_start).reset(new BrowserProcessSubThread(id)); 371 (*thread_to_start).reset(new BrowserProcessSubThread(id));
370 (*thread_to_start)->StartWithOptions(*options); 372 (*thread_to_start)->StartWithOptions(*options);
373 } else {
374 NOTREACHED();
371 } 375 }
372 376
373 if (parts_.get()) 377 if (parts_.get())
374 parts_->PostStartThread(id); 378 parts_->PostStartThread(id);
375 } 379 }
376 380
377 if (parts_.get()) 381 if (parts_.get())
378 parts_->PreMainMessageLoopRun(); 382 parts_->PreMainMessageLoopRun();
379 383
380 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, ""); 384 TRACE_EVENT_BEGIN_ETW("BrowserMain:MESSAGE_LOOP", 0, "");
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 // the embedder to stop, by destroying ResourceDispatcherHost 440 // the embedder to stop, by destroying ResourceDispatcherHost
437 // before the DB thread is stopped) 441 // before the DB thread is stopped)
438 // 442 //
439 // - (Not sure why DB stops last.) 443 // - (Not sure why DB stops last.)
440 scoped_ptr<BrowserProcessSubThread>* thread_to_stop = NULL; 444 scoped_ptr<BrowserProcessSubThread>* thread_to_stop = NULL;
441 switch (thread_id) { 445 switch (thread_id) {
442 case BrowserThread::DB: 446 case BrowserThread::DB:
443 thread_to_stop = &db_thread_; 447 thread_to_stop = &db_thread_;
444 break; 448 break;
445 case BrowserThread::WEBKIT: 449 case BrowserThread::WEBKIT:
446 // For now, the WebKit thread in the browser is owned by 450 // Special case as WebKitThread is a separate
447 // ResourceDispatcherHost, not by the content framework. Until 451 // type. |thread_to_stop| is not used in this case.
448 // this is fixed, we don't stop the thread but still call
449 // Pre/PostStopThread for the ID.
450 break; 452 break;
451 case BrowserThread::FILE: 453 case BrowserThread::FILE:
452 thread_to_stop = &file_thread_; 454 thread_to_stop = &file_thread_;
453 break; 455 break;
454 case BrowserThread::PROCESS_LAUNCHER: 456 case BrowserThread::PROCESS_LAUNCHER:
455 thread_to_stop = &process_launcher_thread_; 457 thread_to_stop = &process_launcher_thread_;
456 break; 458 break;
457 case BrowserThread::CACHE: 459 case BrowserThread::CACHE:
458 thread_to_stop = &cache_thread_; 460 thread_to_stop = &cache_thread_;
459 break; 461 break;
460 case BrowserThread::IO: 462 case BrowserThread::IO:
461 thread_to_stop = &io_thread_; 463 thread_to_stop = &io_thread_;
462 break; 464 break;
463 #if defined(OS_CHROMEOS) 465 #if defined(OS_CHROMEOS)
464 case BrowserThread::WEB_SOCKET_PROXY: 466 case BrowserThread::WEB_SOCKET_PROXY:
465 thread_to_stop = &web_socket_proxy_thread_; 467 thread_to_stop = &web_socket_proxy_thread_;
466 break; 468 break;
467 #endif 469 #endif
468 case BrowserThread::UI: 470 case BrowserThread::UI:
469 case BrowserThread::ID_COUNT: 471 case BrowserThread::ID_COUNT:
470 default: 472 default:
471 NOTREACHED(); 473 NOTREACHED();
472 break; 474 break;
473 } 475 }
474 476
475 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id); 477 BrowserThread::ID id = static_cast<BrowserThread::ID>(thread_id);
476 478
477 if (parts_.get()) 479 if (parts_.get())
478 parts_->PreStopThread(id); 480 parts_->PreStopThread(id);
479 if (thread_to_stop) 481
482 if (id == BrowserThread::WEBKIT) {
483 webkit_thread_.reset();
484 } else if (thread_to_stop) {
480 thread_to_stop->reset(); 485 thread_to_stop->reset();
486 } else {
487 NOTREACHED();
488 }
489
481 if (parts_.get()) 490 if (parts_.get())
482 parts_->PostStopThread(id); 491 parts_->PostStopThread(id);
483 } 492 }
484 493
485 if (parts_.get()) 494 if (parts_.get())
486 parts_->PostDestroyThreads(); 495 parts_->PostDestroyThreads();
487 } 496 }
488 497
489 void BrowserMainLoop::InitializeMainThread() { 498 void BrowserMainLoop::InitializeMainThread() {
490 const char* kThreadName = "CrBrowserMain"; 499 const char* kThreadName = "CrBrowserMain";
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 MessageLoopForUI::current()->PostTask(FROM_HERE, parameters_.ui_task); 550 MessageLoopForUI::current()->PostTask(FROM_HERE, parameters_.ui_task);
542 551
543 #if defined(OS_MACOSX) 552 #if defined(OS_MACOSX)
544 MessageLoopForUI::current()->Run(); 553 MessageLoopForUI::current()->Run();
545 #else 554 #else
546 MessageLoopForUI::current()->RunWithDispatcher(NULL); 555 MessageLoopForUI::current()->RunWithDispatcher(NULL);
547 #endif 556 #endif
548 } 557 }
549 558
550 } // namespace content 559 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/browser_main_loop.h ('k') | content/browser/in_process_webkit/webkit_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698