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

Unified Diff: chrome/browser/ui/browser_list.h

Issue 471763008: Nicely handle OnBeforeUnloads with guest and lock mode. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change to local static bool with AutoReset Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/browser_list.h
diff --git a/chrome/browser/ui/browser_list.h b/chrome/browser/ui/browser_list.h
index 11a736b12959f7a1b4b6eedae32f8ab215492767..aaf9c604968aa164f9f45c681de4cb594336f4ba 100644
--- a/chrome/browser/ui/browser_list.h
+++ b/chrome/browser/ui/browser_list.h
@@ -19,6 +19,10 @@ namespace chrome {
class BrowserListObserver;
}
+namespace base {
+class FilePath;
noms (inactive) 2014/09/03 14:25:08 nit: I these should be sorted alphabetically by na
Mike Lerman 2014/09/03 15:28:34 Done.
+}
+
// Maintains a list of Browser objects present in a given HostDesktop (see
// HostDesktopType).
class BrowserList {
@@ -72,8 +76,18 @@ class BrowserList {
static void SetLastActive(Browser* browser);
// Closes all browsers for |profile| across all desktops.
+ // TODO(mlerman): Move the Profile Deletion flow to use the overloaded
+ // version of this method with a callback, then remove this method.
static void CloseAllBrowsersWithProfile(Profile* profile);
+ // Closes all browsers for |profile| across all desktops. Uses
+ // TryToCloseBrowserList() to do the actual closing and trigger any
+ // OnBeforeUnload events. If all OnBeforeUnload events are confirmed,
+ // |on_close_success| is called.
+ static void CloseAllBrowsersWithProfile(
+ Profile* profile,
+ const base::Callback<void(const base::FilePath&)>& on_close_success);
+
// Returns true if at least one incognito session is active across all
// desktops.
static bool IsOffTheRecordSessionActive();
@@ -89,6 +103,27 @@ class BrowserList {
// Helper method to remove a browser instance from a list of browsers
static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
+ // Attempts to close |browsers_to_close| while respecting OnBeforeUnload
+ // events. If there are no OnBeforeUnload events to be called,
+ // |on_close_confirmed| will be called, with a parameter of |profile_path|.
+ // If at least one unfired OnBeforeUnload event is found, handle it with a
+ // callback to PostBeforeUnloadHandlers, which upon success will recursively
+ // call this method to handle any other OnBeforeUnload events.
+ static void TryToCloseBrowserList(
+ const BrowserVector& browsers_to_close,
+ const base::Callback<void(const base::FilePath&)>& on_close_success,
+ const base::FilePath& profile_path);
+
+ // Called after handling an OnBeforeUnload event. If |tab_close_confirmed| is
+ // true, calls |TryToCloseBrowserList()|, passing the parameters
+ // |browsers_to_close|, |on_close_confirmed|, and |profile_path|. Otherwise,
+ // resets all the OnBeforeUnload event handlers.
+ static void PostBeforeUnloadHandlers(
+ const BrowserVector& browsers_to_close,
+ const base::Callback<void(const base::FilePath&)>& on_close_success,
+ const base::FilePath& profile_path,
+ bool tab_close_confirmed);
+
// A vector of the browsers in this list, in the order they were added.
BrowserVector browsers_;
// A vector of the browsers in this list that have been activated, in the

Powered by Google App Engine
This is Rietveld 408576698