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

Side by Side Diff: chrome/browser/browser_list.h

Issue 2866034: Refactor shutdown code to allow win/linux to run after last browser closes. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Uploaded patch that resolves merge issue Created 10 years, 5 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
« no previous file with comments | « chrome/browser/browser_init.cc ('k') | chrome/browser/browser_list.cc » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 #ifndef CHROME_BROWSER_BROWSER_LIST_H_ 5 #ifndef CHROME_BROWSER_BROWSER_LIST_H_
6 #define CHROME_BROWSER_BROWSER_LIST_H_ 6 #define CHROME_BROWSER_BROWSER_LIST_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/observer_list.h" 10 #include "base/observer_list.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // more windows are remaining. On other platforms (the Mac), this will 106 // more windows are remaining. On other platforms (the Mac), this will
107 // additionally exit the application. 107 // additionally exit the application.
108 static void CloseAllBrowsersAndExit(); 108 static void CloseAllBrowsersAndExit();
109 109
110 // Begins shutdown of the application when the Windows session is ending. 110 // Begins shutdown of the application when the Windows session is ending.
111 static void WindowsSessionEnding(); 111 static void WindowsSessionEnding();
112 112
113 // Returns true if there is at least one Browser with the specified profile. 113 // Returns true if there is at least one Browser with the specified profile.
114 static bool HasBrowserWithProfile(Profile* profile); 114 static bool HasBrowserWithProfile(Profile* profile);
115 115
116 // Returns true if browser is in persistent mode and false otherwise. 116 // Tells the BrowserList to keep the application alive after the last Browser
117 static bool IsInPersistentMode(); 117 // closes. This is implemented as a count, so callers should pair their calls
118 // to StartKeepAlive() with matching calls to EndKeepAlive() when they no
119 // longer need to keep the application running.
120 static void StartKeepAlive();
121
122 // Stops keeping the application alive after the last Browser is closed.
123 // Should match a previous call to StartKeepAlive().
124 static void EndKeepAlive();
125
126 // Returns true if application will continue running after the last Browser
127 // closes.
128 static bool WillKeepAlive();
118 129
119 static const_iterator begin() { return browsers_.begin(); } 130 static const_iterator begin() { return browsers_.begin(); }
120 static const_iterator end() { return browsers_.end(); } 131 static const_iterator end() { return browsers_.end(); }
121 132
122 static size_t size() { return browsers_.size(); } 133 static size_t size() { return browsers_.size(); }
123 134
124 // Returns iterated access to list of open browsers ordered by when 135 // Returns iterated access to list of open browsers ordered by when
125 // they were last active. The underlying data structure is a vector 136 // they were last active. The underlying data structure is a vector
126 // and we push_back on recent access so a reverse iterator gives the 137 // and we push_back on recent access so a reverse iterator gives the
127 // latest accessed browser first. 138 // latest accessed browser first.
128 static const_reverse_iterator begin_last_active() { 139 static const_reverse_iterator begin_last_active() {
129 return last_active_browsers_.rbegin(); 140 return last_active_browsers_.rbegin();
130 } 141 }
131 142
132 static const_reverse_iterator end_last_active() { 143 static const_reverse_iterator end_last_active() {
133 return last_active_browsers_.rend(); 144 return last_active_browsers_.rend();
134 } 145 }
135 146
136 // Return the number of browsers with the following profile which are 147 // Return the number of browsers with the following profile which are
137 // currently open. 148 // currently open.
138 static size_t GetBrowserCount(Profile* p); 149 static size_t GetBrowserCount(Profile* p);
139 150
140 // Return the number of browsers with the following profile and type which are 151 // Return the number of browsers with the following profile and type which are
141 // currently open. 152 // currently open.
142 static size_t GetBrowserCountForType(Profile* p, Browser::Type type); 153 static size_t GetBrowserCountForType(Profile* p, Browser::Type type);
143 154
144 // Returns true if at least one off the record session is active. 155 // Returns true if at least one off the record session is active.
145 static bool IsOffTheRecordSessionActive(); 156 static bool IsOffTheRecordSessionActive();
146 157
147 // Called when the last browser is closed. 158 // Called once there are no more browsers open and the application is exiting.
148 static void AllBrowsersClosed(); 159 static void AllBrowsersClosedAndAppExiting();
149 160
150 private: 161 private:
151 // Helper method to remove a browser instance from a list of browsers 162 // Helper method to remove a browser instance from a list of browsers
152 static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list); 163 static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
153 164
154 static BrowserVector browsers_; 165 static BrowserVector browsers_;
155 static BrowserVector last_active_browsers_; 166 static BrowserVector last_active_browsers_;
156 static ObserverList<Observer> observers_; 167 static ObserverList<Observer> observers_;
168
169 // Counter of calls to StartKeepAlive(). If non-zero, the application will
170 // continue running after the last browser has exited.
171 static int keep_alive_count_;
157 }; 172 };
158 173
159 class TabContents; 174 class TabContents;
160 175
161 // Iterates through all web view hosts in all browser windows. Because the 176 // Iterates through all web view hosts in all browser windows. Because the
162 // renderers act asynchronously, getting a host through this interface does 177 // renderers act asynchronously, getting a host through this interface does
163 // not guarantee that the renderer is ready to go. Doing anything to affect 178 // not guarantee that the renderer is ready to go. Doing anything to affect
164 // browser windows or tabs while iterating may cause incorrect behavior. 179 // browser windows or tabs while iterating may cause incorrect behavior.
165 // 180 //
166 // Example: 181 // Example:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 // tab index into the current Browser of the current web view 225 // tab index into the current Browser of the current web view
211 int web_view_index_; 226 int web_view_index_;
212 227
213 // Current TabContents, or NULL if we're at the end of the list. This can 228 // Current TabContents, or NULL if we're at the end of the list. This can
214 // be extracted given the browser iterator and index, but it's nice to cache 229 // be extracted given the browser iterator and index, but it's nice to cache
215 // this since the caller may access the current host many times. 230 // this since the caller may access the current host many times.
216 TabContents* cur_; 231 TabContents* cur_;
217 }; 232 };
218 233
219 #endif // CHROME_BROWSER_BROWSER_LIST_H_ 234 #endif // CHROME_BROWSER_BROWSER_LIST_H_
OLDNEW
« no previous file with comments | « chrome/browser/browser_init.cc ('k') | chrome/browser/browser_list.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698