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

Side by Side Diff: chrome/browser/lifetime/browser_keep_alive.cc

Issue 1376063005: Cleanup: Pull some browser keep alive functions into its own file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 2 months 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/lifetime/browser_keep_alive.h"
6
7 #include "base/message_loop/message_loop.h"
8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/browser_shutdown.h"
10 #include "chrome/browser/lifetime/application_lifetime.h"
11 #include "chrome/browser/ui/browser_finder.h"
12
13 namespace browser_lifetime {
14
15 namespace {
16
17 int g_keep_alive_count = 0;
18 bool g_disable_shutdown_for_testing = false;
19
20 void CloseAllBrowsersIfNeeded() {
21 // If there are no browsers open and we aren't already shutting down,
22 // initiate a shutdown. Also skips shutdown if this is a unit test.
23 // (MessageLoop::current() == null or explicitly disabled).
24 if (chrome::GetTotalBrowserCount() == 0 &&
25 !browser_shutdown::IsTryingToQuit() &&
26 base::MessageLoop::current() &&
27 !g_disable_shutdown_for_testing) {
28 chrome::CloseAllBrowsers();
29 }
30 }
31
32 } // namespace
33
34 ScopedKeepAlive::ScopedKeepAlive() {
35 // Allow ScopedKeepAlive to be used in unit tests.
36 if (g_browser_process)
37 browser_lifetime::IncrementKeepAliveCount();
38 }
39
40 ScopedKeepAlive::~ScopedKeepAlive() {
41 if (g_browser_process)
42 browser_lifetime::DecrementKeepAliveCount();
43 }
44
45 void IncrementKeepAliveCount() {
46 // Increment the browser process refcount as long as we're keeping the
47 // application alive.
48 if (!WillKeepAlive())
49 g_browser_process->AddRefModule();
50 ++g_keep_alive_count;
51 }
52
53 void DecrementKeepAliveCount() {
54 DCHECK_GT(g_keep_alive_count, 0);
55 --g_keep_alive_count;
56 // Although we should have a browser process, if there is none,
57 // there is nothing to do.
58 if (!g_browser_process)
59 return;
60
61 // Allow the app to shutdown again.
62 if (!WillKeepAlive()) {
63 g_browser_process->ReleaseModule();
64 CloseAllBrowsersIfNeeded();
65 }
66 }
67
68 bool WillKeepAlive() {
69 return g_keep_alive_count > 0;
70 }
71
72 void DisableShutdownForTesting(bool disable_shutdown_for_testing) {
73 g_disable_shutdown_for_testing = disable_shutdown_for_testing;
74 if (!g_disable_shutdown_for_testing && !WillKeepAlive())
75 CloseAllBrowsersIfNeeded();
76 }
77
78 } // namespace browser_lifetime
OLDNEW
« no previous file with comments | « chrome/browser/lifetime/browser_keep_alive.h ('k') | chrome/browser/metro_viewer/chrome_metro_viewer_process_host_aurawin.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698