| Index: chrome/browser/lifetime/application_lifetime.h
|
| ===================================================================
|
| --- chrome/browser/lifetime/application_lifetime.h (revision 0)
|
| +++ chrome/browser/lifetime/application_lifetime.h (working copy)
|
| @@ -2,243 +2,81 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#ifndef CHROME_BROWSER_UI_BROWSER_LIST_H_
|
| -#define CHROME_BROWSER_UI_BROWSER_LIST_H_
|
| +#ifndef CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_
|
| +#define CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_
|
| #pragma once
|
|
|
| -#include <set>
|
| -#include <vector>
|
| +namespace browser {
|
|
|
| -#include "base/observer_list.h"
|
| -#include "ui/gfx/native_widget_types.h"
|
| +// Starts a user initiated exit process. Called from Browser::Exit.
|
| +// On platforms other than ChromeOS, this is equivalent to
|
| +// CloseAllBrowsers() On ChromeOS, this tells session manager
|
| +// that chrome is signing out, which lets session manager send
|
| +// SIGTERM to start actual exit process.
|
| +void AttemptUserExit();
|
|
|
| -class Browser;
|
| -class Profile;
|
| +// Starts a user initiated restart process. On platforms other than
|
| +// chromeos, this sets a restart bit in the preference so that
|
| +// chrome will be restarted at the end of shutdown process. On
|
| +// ChromeOS, this simply exits the chrome, which lets sesssion
|
| +// manager re-launch the browser with restore last session flag.
|
| +void AttemptRestart();
|
|
|
| -// Stores a list of all Browser objects.
|
| -class BrowserList {
|
| - public:
|
| - typedef std::vector<Browser*> BrowserVector;
|
| - typedef BrowserVector::iterator iterator;
|
| - typedef BrowserVector::const_iterator const_iterator;
|
| - typedef BrowserVector::const_reverse_iterator const_reverse_iterator;
|
| +// Attempt to exit by closing all browsers. This is equivalent to
|
| +// CloseAllBrowsers() on platforms where the application exits
|
| +// when no more windows are remaining. On other platforms (the Mac),
|
| +// this will additionally exit the application if all browsers are
|
| +// successfully closed.
|
| +// Note that he exit process may be interrupted by download or
|
| +// unload handler, and the browser may or may not exit.
|
| +void AttemptExit();
|
|
|
| - // It is not allowed to change the global window list (add or remove any
|
| - // browser windows while handling observer callbacks.
|
| - class Observer {
|
| - public:
|
| - // Called immediately after a browser is added to the list
|
| - virtual void OnBrowserAdded(const Browser* browser) = 0;
|
| -
|
| - // Called immediately after a browser is removed from the list
|
| - virtual void OnBrowserRemoved(const Browser* browser) = 0;
|
| -
|
| - // Called immediately after a browser is set active (SetLastActive)
|
| - virtual void OnBrowserSetLastActive(const Browser* browser) {}
|
| -
|
| - protected:
|
| - virtual ~Observer() {}
|
| - };
|
| -
|
| - // Adds and removes browsers from the global list. The browser object should
|
| - // be valid BEFORE these calls (for the benefit of observers), so notify and
|
| - // THEN delete the object.
|
| - static void AddBrowser(Browser* browser);
|
| - static void RemoveBrowser(Browser* browser);
|
| -
|
| - static void AddObserver(Observer* observer);
|
| - static void RemoveObserver(Observer* observer);
|
| -
|
| - // Called by Browser objects when their window is activated (focused). This
|
| - // allows us to determine what the last active Browser was.
|
| - static void SetLastActive(Browser* browser);
|
| -
|
| - // Returns the Browser object whose window was most recently active. If the
|
| - // most recently open Browser's window was closed, returns the first Browser
|
| - // in the list. If no Browsers exist, returns NULL.
|
| - //
|
| - // WARNING: this is NULL until a browser becomes active. If during startup
|
| - // a browser does not become active (perhaps the user launches Chrome, then
|
| - // clicks on another app before the first browser window appears) then this
|
| - // returns NULL.
|
| - // WARNING #2: this will always be NULL in unit tests run on the bots.
|
| - static Browser* GetLastActive();
|
| -
|
| - // Checks if the browser can be automatically restarted to install upgrades
|
| - // The browser can be automatically restarted when:
|
| - // 1. It's in the background mode (no visible windows).
|
| - // 2. An update exe is present in the install folder.
|
| - static bool CanRestartForUpdate();
|
| -
|
| - // Starts a user initiated exit process. Called from Browser::Exit.
|
| - // On platforms other than ChromeOS, this is equivalent to
|
| - // CloseAllBrowsers() On ChromeOS, this tells session manager
|
| - // that chrome is signing out, which lets session manager send
|
| - // SIGTERM to start actual exit process.
|
| - static void AttemptUserExit();
|
| -
|
| - // Starts a user initiated restart process. On platforms other than
|
| - // chromeos, this sets a restart bit in the preference so that
|
| - // chrome will be restarted at the end of shutdown process. On
|
| - // ChromeOS, this simply exits the chrome, which lets sesssion
|
| - // manager re-launch the browser with restore last session flag.
|
| - static void AttemptRestart();
|
| -
|
| - // Attempt to exit by closing all browsers. This is equivalent to
|
| - // CloseAllBrowsers() on platforms where the application exits
|
| - // when no more windows are remaining. On other platforms (the Mac),
|
| - // this will additionally exit the application if all browsers are
|
| - // successfully closed.
|
| - // Note that he exit process may be interrupted by download or
|
| - // unload handler, and the browser may or may not exit.
|
| - static void AttemptExit();
|
| -
|
| #if defined(OS_CHROMEOS)
|
| - // This is equivalent to AttemptUserExit, except that it always set
|
| - // exit cleanly bit. ChromeOS checks if it can exit without user
|
| - // interactions, so it will always exit the browser. This is used to
|
| - // handle SIGTERM on chromeos which is a signal to force shutdown
|
| - // the chrome.
|
| - static void ExitCleanly();
|
| +// This is equivalent to AttemptUserExit, except that it always set
|
| +// exit cleanly bit. ChromeOS checks if it can exit without user
|
| +// interactions, so it will always exit the browser. This is used to
|
| +// handle SIGTERM on chromeos which is a signal to force shutdown
|
| +// the chrome.
|
| +void ExitCleanly();
|
| #endif
|
|
|
| - // Closes all browsers. If the session is ending the windows are closed
|
| - // directly. Otherwise the windows are closed by way of posting a WM_CLOSE
|
| - // message.
|
| - static void CloseAllBrowsers();
|
| +// Closes all browsers. If the session is ending the windows are closed
|
| +// directly. Otherwise the windows are closed by way of posting a WM_CLOSE
|
| +// message.
|
| +void CloseAllBrowsers();
|
|
|
| - // Closes all browsers for |profile|.
|
| - static void CloseAllBrowsersWithProfile(Profile* profile);
|
| +// Begins shutdown of the application when the desktop session is ending.
|
| +void SessionEnding();
|
|
|
| - // Begins shutdown of the application when the desktop session is ending.
|
| - static void SessionEnding();
|
| +// Tells the BrowserList to keep the application alive after the last Browser
|
| +// closes. This is implemented as a count, so callers should pair their calls
|
| +// to StartKeepAlive() with matching calls to EndKeepAlive() when they no
|
| +// longer need to keep the application running.
|
| +void StartKeepAlive();
|
|
|
| - // Tells the BrowserList to keep the application alive after the last Browser
|
| - // closes. This is implemented as a count, so callers should pair their calls
|
| - // to StartKeepAlive() with matching calls to EndKeepAlive() when they no
|
| - // longer need to keep the application running.
|
| - static void StartKeepAlive();
|
| +// Stops keeping the application alive after the last Browser is closed.
|
| +// Should match a previous call to StartKeepAlive().
|
| +void EndKeepAlive();
|
|
|
| - // Stops keeping the application alive after the last Browser is closed.
|
| - // Should match a previous call to StartKeepAlive().
|
| - static void EndKeepAlive();
|
| +// Returns true if application will continue running after the last Browser
|
| +// closes.
|
| +bool WillKeepAlive();
|
|
|
| - // Returns true if application will continue running after the last Browser
|
| - // closes.
|
| - static bool WillKeepAlive();
|
| +// Emits APP_TERMINATING notification. It is guaranteed that the
|
| +// notification is sent only once.
|
| +void NotifyAppTerminating();
|
|
|
| - // Browsers are added to the list before they have constructed windows,
|
| - // so the |window()| member function may return NULL.
|
| - static const_iterator begin();
|
| - static const_iterator end();
|
| +// Send out notifications.
|
| +// For ChromeOS, also request session manager to end the session.
|
| +void NotifyAndTerminate(bool fast_path);
|
|
|
| - static bool empty();
|
| - static size_t size();
|
| +// Called once the application is exiting.
|
| +void OnAppExiting();
|
|
|
| - // Returns iterated access to list of open browsers ordered by when
|
| - // they were last active. The underlying data structure is a vector
|
| - // and we push_back on recent access so a reverse iterator gives the
|
| - // latest accessed browser first.
|
| - static const_reverse_iterator begin_last_active();
|
| - static const_reverse_iterator end_last_active();
|
| +// Called once the application is exiting to do any platform specific
|
| +// processing required.
|
| +void HandleAppExitingForPlatform();
|
|
|
| - // Returns true if at least one incognito session is active.
|
| - static bool IsOffTheRecordSessionActive();
|
| +} // namespace browser
|
|
|
| - // Returns true if at least one incognito session is active for |profile|.
|
| - static bool IsOffTheRecordSessionActiveForProfile(Profile* profile);
|
| -
|
| - // Send out notifications.
|
| - // For ChromeOS, also request session manager to end the session.
|
| - static void NotifyAndTerminate(bool fast_path);
|
| -
|
| - // Called once the application is exiting.
|
| - static void OnAppExiting();
|
| -
|
| - // Called once the application is exiting to do any platform specific
|
| - // processing required.
|
| - static void HandleAppExitingForPlatform();
|
| -
|
| - private:
|
| - // Helper method to remove a browser instance from a list of browsers
|
| - static void RemoveBrowserFrom(Browser* browser, BrowserVector* browser_list);
|
| - static void MarkAsCleanShutdown();
|
| - static void AttemptExitInternal();
|
| -
|
| - // Counter of calls to StartKeepAlive(). If non-zero, the application will
|
| - // continue running after the last browser has exited.
|
| - static int keep_alive_count_;
|
| -};
|
| -
|
| -class TabContentsWrapper;
|
| -
|
| -// Iterates through all web view hosts in all browser windows. Because the
|
| -// renderers act asynchronously, getting a host through this interface does
|
| -// not guarantee that the renderer is ready to go. Doing anything to affect
|
| -// browser windows or tabs while iterating may cause incorrect behavior.
|
| -//
|
| -// Example:
|
| -// for (TabContentsIterator iterator; !iterator.done(); ++iterator) {
|
| -// TabContentsWrapper* cur = *iterator;
|
| -// -or-
|
| -// iterator->operationOnTabContents();
|
| -// ...
|
| -// }
|
| -class TabContentsIterator {
|
| - public:
|
| - TabContentsIterator();
|
| -
|
| - // Returns true if we are past the last Browser.
|
| - bool done() const {
|
| - return cur_ == NULL;
|
| - }
|
| -
|
| - // Returns the Browser instance associated with the current
|
| - // TabContentsWrapper. Valid as long as !done()
|
| - Browser* browser() const {
|
| - if (browser_iterator_ != BrowserList::end())
|
| - return *browser_iterator_;
|
| - return NULL;
|
| - }
|
| -
|
| - // Returns the current TabContentsWrapper, valid as long as !Done()
|
| - TabContentsWrapper* operator->() const {
|
| - return cur_;
|
| - }
|
| - TabContentsWrapper* operator*() const {
|
| - return cur_;
|
| - }
|
| -
|
| - // Incrementing operators, valid as long as !Done()
|
| - TabContentsWrapper* operator++() { // ++preincrement
|
| - Advance();
|
| - return cur_;
|
| - }
|
| - TabContentsWrapper* operator++(int) { // postincrement++
|
| - TabContentsWrapper* tmp = cur_;
|
| - Advance();
|
| - return tmp;
|
| - }
|
| -
|
| - private:
|
| - // Loads the next host into Cur. This is designed so that for the initial
|
| - // call when browser_iterator_ points to the first browser and
|
| - // web_view_index_ is -1, it will fill the first host.
|
| - void Advance();
|
| -
|
| - // iterator over all the Browser objects
|
| - BrowserList::const_iterator browser_iterator_;
|
| -
|
| - // tab index into the current Browser of the current web view
|
| - int web_view_index_;
|
| -
|
| - // iterator over the TabContentsWrappers doing background printing.
|
| - std::set<TabContentsWrapper*>::const_iterator bg_printing_iterator_;
|
| -
|
| - // Current TabContentsWrapper, or NULL if we're at the end of the list. This
|
| - // can be extracted given the browser iterator and index, but it's nice to
|
| - // cache this since the caller may access the current host many times.
|
| - TabContentsWrapper* cur_;
|
| -};
|
| -
|
| -#endif // CHROME_BROWSER_UI_BROWSER_LIST_H_
|
| +#endif // CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_
|
|
|