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

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

Issue 2681203002: Add Browser::SkipCallBeforeUnload so that the browser windows can be closed regardless of beforeunl… (Closed)
Patch Set: cr - remove delegate in UnloadController Created 3 years, 9 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/ui/browser.cc ('k') | chrome/browser/ui/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) 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 #ifndef CHROME_BROWSER_UI_BROWSER_LIST_H_ 5 #ifndef CHROME_BROWSER_UI_BROWSER_LIST_H_
6 #define CHROME_BROWSER_UI_BROWSER_LIST_H_ 6 #define CHROME_BROWSER_UI_BROWSER_LIST_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <vector> 10 #include <vector>
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 // Notifies the observers when the current active browser becomes not active. 82 // Notifies the observers when the current active browser becomes not active.
83 static void NotifyBrowserNoLongerActive(Browser* browser); 83 static void NotifyBrowserNoLongerActive(Browser* browser);
84 84
85 // Closes all browsers for |profile| across all desktops. 85 // Closes all browsers for |profile| across all desktops.
86 // TODO(mlerman): Move the Profile Deletion flow to use the overloaded 86 // TODO(mlerman): Move the Profile Deletion flow to use the overloaded
87 // version of this method with a callback, then remove this method. 87 // version of this method with a callback, then remove this method.
88 static void CloseAllBrowsersWithProfile(Profile* profile); 88 static void CloseAllBrowsersWithProfile(Profile* profile);
89 89
90 // Closes all browsers for |profile| across all desktops. Uses 90 // Closes all browsers for |profile| across all desktops. Uses
91 // TryToCloseBrowserList() to do the actual closing and trigger any 91 // TryToCloseBrowserList() to do the actual closing. Trigger any
92 // OnBeforeUnload events. If all OnBeforeUnload events are confirmed, 92 // OnBeforeUnload events if |if_force| is false. If all OnBeforeUnload events
93 // |on_close_success| is called, otherwise |on_close_aborted| is called. 93 // are confirmed or |skip_beforeunload| is true, |on_close_success| is called,
94 static void CloseAllBrowsersWithProfile( 94 // otherwise |on_close_aborted| is called.
95 Profile* profile, 95 // Note that if there is any browser window has been used before, user
96 const CloseCallback& on_close_success, 96 // should always has a chance to save his or her work before closing windows
97 const CloseCallback& on_close_aborted); 97 // without trigger beforeunload event.
98 static void CloseAllBrowsersWithProfile(Profile* profile,
99 const CloseCallback& on_close_success,
100 const CloseCallback& on_close_aborted,
101 bool skip_beforeunload);
98 102
99 // Returns true if at least one incognito session is active across all 103 // Returns true if at least one incognito session is active across all
100 // desktops. 104 // desktops.
101 static bool IsIncognitoSessionActive(); 105 static bool IsIncognitoSessionActive();
102 106
103 // Returns true if at least one incognito session is active for |profile| 107 // Returns true if at least one incognito session is active for |profile|
104 // across all desktops. 108 // across all desktops.
105 static bool IsIncognitoSessionActiveForProfile(Profile* profile); 109 static bool IsIncognitoSessionActiveForProfile(Profile* profile);
106 110
107 private: 111 private:
108 BrowserList(); 112 BrowserList();
109 ~BrowserList(); 113 ~BrowserList();
110 114
111 // Helper method to remove a browser instance from a list of browsers 115 // Helper method to remove a browser instance from a list of browsers
112 static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list); 116 static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
113 117
114 // Attempts to close |browsers_to_close| while respecting OnBeforeUnload 118 // Attempts to close |browsers_to_close| while respecting OnBeforeUnload
115 // events. If there are no OnBeforeUnload events to be called, 119 // events. If there are no OnBeforeUnload events to be called,
116 // |on_close_success| will be called, with a parameter of |profile_path|, 120 // |on_close_success| will be called, with a parameter of |profile_path|,
117 // and the Browsers will then be closed. If at least one unfired 121 // and the Browsers will then be closed. If at least one unfired
118 // OnBeforeUnload event is found, handle it with a callback to 122 // OnBeforeUnload event is found, handle it with a callback to
119 // PostBeforeUnloadHandlers, which upon success will recursively call this 123 // PostTryToCloseBrowserWindow, which upon success will recursively call this
120 // method to handle any other OnBeforeUnload events. If aborted in the 124 // method to handle any other OnBeforeUnload events. If aborted in the
121 // OnBeforeUnload event, PostBeforeUnloadHandlers will call |on_close_aborted| 125 // OnBeforeUnload event, PostTryToCloseBrowserWindow will call
122 // instead and reset all OnBeforeUnload event handlers. 126 // |on_close_aborted| instead and reset all OnBeforeUnload event handlers.
123 static void TryToCloseBrowserList( 127 static void TryToCloseBrowserList(const BrowserVector& browsers_to_close,
124 const BrowserVector& browsers_to_close, 128 const CloseCallback& on_close_success,
125 const CloseCallback& on_close_success, 129 const CloseCallback& on_close_aborted,
126 const CloseCallback& on_close_aborted, 130 const base::FilePath& profile_path,
127 const base::FilePath& profile_path); 131 const bool skip_beforeunload);
128 132
129 // Called after handling an OnBeforeUnload event. If |tab_close_confirmed| is 133 // Called after handling an OnBeforeUnload event. If |tab_close_confirmed| is
130 // true, calls |TryToCloseBrowserList()|, passing the parameters 134 // true, calls |TryToCloseBrowserList()|, passing the parameters
131 // |browsers_to_close|, |on_close_success|, |on_close_aborted|, and 135 // |browsers_to_close|, |on_close_success|, |on_close_aborted|, and
132 // |profile_path|. Otherwise, resets all the OnBeforeUnload event handlers and 136 // |profile_path|. Otherwise, resets all the OnBeforeUnload event handlers and
133 // calls |on_close_aborted|. 137 // calls |on_close_aborted|.
134 static void PostBeforeUnloadHandlers( 138 static void PostTryToCloseBrowserWindow(
135 const BrowserVector& browsers_to_close, 139 const BrowserVector& browsers_to_close,
136 const CloseCallback& on_close_success, 140 const CloseCallback& on_close_success,
137 const CloseCallback& on_close_aborted, 141 const CloseCallback& on_close_aborted,
138 const base::FilePath& profile_path, 142 const base::FilePath& profile_path,
143 const bool skip_beforeunload,
139 bool tab_close_confirmed); 144 bool tab_close_confirmed);
140 145
141 // A vector of the browsers in this list, in the order they were added. 146 // A vector of the browsers in this list, in the order they were added.
142 BrowserVector browsers_; 147 BrowserVector browsers_;
143 // A vector of the browsers in this list that have been activated, in the 148 // A vector of the browsers in this list that have been activated, in the
144 // reverse order in which they were last activated. 149 // reverse order in which they were last activated.
145 BrowserVector last_active_browsers_; 150 BrowserVector last_active_browsers_;
146 151
147 // A list of observers which will be notified of every browser addition and 152 // A list of observers which will be notified of every browser addition and
148 // removal across all BrowserLists. 153 // removal across all BrowserLists.
149 static base::LazyInstance< 154 static base::LazyInstance<
150 base::ObserverList<chrome::BrowserListObserver>>::Leaky observers_; 155 base::ObserverList<chrome::BrowserListObserver>>::Leaky observers_;
151 156
152 static BrowserList* instance_; 157 static BrowserList* instance_;
153 158
154 DISALLOW_COPY_AND_ASSIGN(BrowserList); 159 DISALLOW_COPY_AND_ASSIGN(BrowserList);
155 }; 160 };
156 161
157 #endif // CHROME_BROWSER_UI_BROWSER_LIST_H_ 162 #endif // CHROME_BROWSER_UI_BROWSER_LIST_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/browser.cc ('k') | chrome/browser/ui/browser_list.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698