diff options
Diffstat (limited to 'content/shell/shell_browser_main.cc')
-rw-r--r-- | content/shell/shell_browser_main.cc | 49 |
1 files changed, 33 insertions, 16 deletions
diff --git a/content/shell/shell_browser_main.cc b/content/shell/shell_browser_main.cc index 324139e..a5f2fbe 100644 --- a/content/shell/shell_browser_main.cc +++ b/content/shell/shell_browser_main.cc @@ -40,9 +40,41 @@ ShellBrowserMainParts::ShellBrowserMainParts( } ShellBrowserMainParts::~ShellBrowserMainParts() { + base::ThreadRestrictions::SetIOAllowed(true); + io_thread()->message_loop()->PostTask( + FROM_HERE, base::IgnoreReturn<bool>( + base::Bind(&base::ThreadRestrictions::SetIOAllowed, true))); + + browser_context_.reset(); + + resource_dispatcher_host_->download_file_manager()->Shutdown(); + resource_dispatcher_host_->save_file_manager()->Shutdown(); + resource_dispatcher_host_->Shutdown(); + io_thread_.reset(); + cache_thread_.reset(); + process_launcher_thread_.reset(); + file_thread_.reset(); + resource_dispatcher_host_.reset(); // Kills WebKit thread. + db_thread_.reset(); } -void ShellBrowserMainParts::PreCreateThreads() { +void ShellBrowserMainParts::PreMainMessageLoopRun() { + db_thread_.reset(new BrowserProcessSubThread(BrowserThread::DB)); + db_thread_->Start(); + file_thread_.reset(new BrowserProcessSubThread(BrowserThread::FILE)); + file_thread_->Start(); + process_launcher_thread_.reset( + new BrowserProcessSubThread(BrowserThread::PROCESS_LAUNCHER)); + process_launcher_thread_->Start(); + + base::Thread::Options options; + options.message_loop_type = MessageLoop::TYPE_IO; + + cache_thread_.reset(new BrowserProcessSubThread(BrowserThread::CACHE)); + cache_thread_->StartWithOptions(options); + io_thread_.reset(new BrowserProcessSubThread(BrowserThread::IO)); + io_thread_->StartWithOptions(options); + browser_context_.reset(new ShellBrowserContext(this)); Shell::PlatformInitialize(); @@ -53,22 +85,7 @@ void ShellBrowserMainParts::PreCreateThreads() { NULL, MSG_ROUTING_NONE, NULL); -} - -void ShellBrowserMainParts::PostMainMessageLoopRun() { - browser_context_.reset(); - resource_dispatcher_host_->download_file_manager()->Shutdown(); - resource_dispatcher_host_->save_file_manager()->Shutdown(); - resource_dispatcher_host_->Shutdown(); -} - -void ShellBrowserMainParts::PreStopThread(BrowserThread::ID id) { - if (id == BrowserThread::WEBKIT) { - // It remains the embedder's responsibility to kill the WebKit - // thread. This happens when RDH is destroyed. - resource_dispatcher_host_.reset(); - } } bool ShellBrowserMainParts::MainMessageLoopRun(int* result_code) { |