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 "chrome/browser/browser_process_impl.h" | 5 #include "chrome/browser/browser_process_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
285 // IOThread object being NULL is considered synonymous with the | 285 // IOThread object being NULL is considered synonymous with the |
286 // IO thread having stopped. | 286 // IO thread having stopped. |
287 io_thread_.reset(); | 287 io_thread_.reset(); |
288 } | 288 } |
289 | 289 |
290 #if defined(OS_WIN) | 290 #if defined(OS_WIN) |
291 // Send a QuitTask to the given MessageLoop when the (file) thread has processed | 291 // Send a QuitTask to the given MessageLoop when the (file) thread has processed |
292 // our (other) recent requests (to save preferences). | 292 // our (other) recent requests (to save preferences). |
293 // Change the boolean so that the receiving thread will know that we did indeed | 293 // Change the boolean so that the receiving thread will know that we did indeed |
294 // send the QuitTask that terminated the message loop. | 294 // send the QuitTask that terminated the message loop. |
295 static void PostQuit(MessageLoop* message_loop) { | 295 static void PostQuit(base::MessageLoop* message_loop) { |
296 g_end_session_file_thread_has_completed = true; | 296 g_end_session_file_thread_has_completed = true; |
297 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 297 message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); |
298 } | 298 } |
299 #elif defined(USE_X11) | 299 #elif defined(USE_X11) |
300 static void Signal(base::WaitableEvent* event) { | 300 static void Signal(base::WaitableEvent* event) { |
301 event->Signal(); | 301 event->Signal(); |
302 } | 302 } |
303 #endif | 303 #endif |
304 | 304 |
305 unsigned int BrowserProcessImpl::AddRefModule() { | 305 unsigned int BrowserProcessImpl::AddRefModule() { |
306 DCHECK(CalledOnValidThread()); | 306 DCHECK(CalledOnValidThread()); |
307 | 307 |
(...skipping 19 matching lines...) Expand all Loading... |
327 release_last_reference_callstack_ = base::debug::StackTrace(); | 327 release_last_reference_callstack_ = base::debug::StackTrace(); |
328 | 328 |
329 #if defined(ENABLE_PRINTING) | 329 #if defined(ENABLE_PRINTING) |
330 // Wait for the pending print jobs to finish. Don't do this later, since | 330 // Wait for the pending print jobs to finish. Don't do this later, since |
331 // this might cause a nested message loop to run, and we don't want pending | 331 // this might cause a nested message loop to run, and we don't want pending |
332 // tasks to run once teardown has started. | 332 // tasks to run once teardown has started. |
333 print_job_manager_->OnQuit(); | 333 print_job_manager_->OnQuit(); |
334 print_job_manager_.reset(); | 334 print_job_manager_.reset(); |
335 #endif | 335 #endif |
336 | 336 |
337 CHECK(MessageLoop::current()->is_running()); | 337 CHECK(base::MessageLoop::current()->is_running()); |
338 | 338 |
339 #if defined(OS_MACOSX) | 339 #if defined(OS_MACOSX) |
340 MessageLoop::current()->PostTask( | 340 base::MessageLoop::current()->PostTask( |
341 FROM_HERE, | 341 FROM_HERE, |
342 base::Bind(ChromeBrowserMainPartsMac::DidEndMainMessageLoop)); | 342 base::Bind(ChromeBrowserMainPartsMac::DidEndMainMessageLoop)); |
343 #endif | 343 #endif |
344 MessageLoop::current()->Quit(); | 344 base::MessageLoop::current()->Quit(); |
345 } | 345 } |
346 return module_ref_count_; | 346 return module_ref_count_; |
347 } | 347 } |
348 | 348 |
349 void BrowserProcessImpl::EndSession() { | 349 void BrowserProcessImpl::EndSession() { |
350 // Mark all the profiles as clean. | 350 // Mark all the profiles as clean. |
351 ProfileManager* pm = profile_manager(); | 351 ProfileManager* pm = profile_manager(); |
352 std::vector<Profile*> profiles(pm->GetLoadedProfiles()); | 352 std::vector<Profile*> profiles(pm->GetLoadedProfiles()); |
353 for (size_t i = 0; i < profiles.size(); ++i) | 353 for (size_t i = 0; i < profiles.size(); ++i) |
354 profiles[i]->SetExitType(Profile::EXIT_SESSION_ENDED); | 354 profiles[i]->SetExitType(Profile::EXIT_SESSION_ENDED); |
(...skipping 21 matching lines...) Expand all Loading... |
376 base::Bind(Signal, done_writing.get())); | 376 base::Bind(Signal, done_writing.get())); |
377 // If all file writes haven't cleared in the timeout, leak the WaitableEvent | 377 // If all file writes haven't cleared in the timeout, leak the WaitableEvent |
378 // so that there's no race to reference it in Signal(). | 378 // so that there's no race to reference it in Signal(). |
379 if (!done_writing->TimedWait( | 379 if (!done_writing->TimedWait( |
380 base::TimeDelta::FromSeconds(kEndSessionTimeoutSeconds))) { | 380 base::TimeDelta::FromSeconds(kEndSessionTimeoutSeconds))) { |
381 ignore_result(done_writing.release()); | 381 ignore_result(done_writing.release()); |
382 } | 382 } |
383 | 383 |
384 #elif defined(OS_WIN) | 384 #elif defined(OS_WIN) |
385 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 385 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
386 base::Bind(PostQuit, MessageLoop::current())); | 386 base::Bind(PostQuit, base::MessageLoop::current())); |
387 int quits_received = 0; | 387 int quits_received = 0; |
388 do { | 388 do { |
389 MessageLoop::current()->Run(); | 389 base::MessageLoop::current()->Run(); |
390 ++quits_received; | 390 ++quits_received; |
391 } while (!g_end_session_file_thread_has_completed); | 391 } while (!g_end_session_file_thread_has_completed); |
392 // If we did get extra quits, then we should re-post them to the message loop. | 392 // If we did get extra quits, then we should re-post them to the message loop. |
393 while (--quits_received > 0) | 393 while (--quits_received > 0) { |
394 MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 394 base::MessageLoop::current()->PostTask(FROM_HERE, |
| 395 base::MessageLoop::QuitClosure()); |
| 396 } |
395 #else | 397 #else |
396 NOTIMPLEMENTED(); | 398 NOTIMPLEMENTED(); |
397 #endif | 399 #endif |
398 } | 400 } |
399 | 401 |
400 MetricsService* BrowserProcessImpl::metrics_service() { | 402 MetricsService* BrowserProcessImpl::metrics_service() { |
401 DCHECK(CalledOnValidThread()); | 403 DCHECK(CalledOnValidThread()); |
402 if (!created_metrics_service_) | 404 if (!created_metrics_service_) |
403 CreateMetricsService(); | 405 CreateMetricsService(); |
404 return metrics_service_.get(); | 406 return metrics_service_.get(); |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1044 } | 1046 } |
1045 | 1047 |
1046 void BrowserProcessImpl::OnAutoupdateTimer() { | 1048 void BrowserProcessImpl::OnAutoupdateTimer() { |
1047 if (CanAutorestartForUpdate()) { | 1049 if (CanAutorestartForUpdate()) { |
1048 DLOG(WARNING) << "Detected update. Restarting browser."; | 1050 DLOG(WARNING) << "Detected update. Restarting browser."; |
1049 RestartBackgroundInstance(); | 1051 RestartBackgroundInstance(); |
1050 } | 1052 } |
1051 } | 1053 } |
1052 | 1054 |
1053 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) | 1055 #endif // (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS) |
OLD | NEW |