// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_ #define CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_ #include <map> #include <optional> #include <string> #include "base/callback_list.h" #include "base/gtest_prod_util.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/sessions/session_service_base.h" #include "chrome/browser/ui/browser.h" #include "components/sessions/core/command_storage_manager_delegate.h" #include "components/tab_groups/tab_group_id.h" #include "components/tab_groups/tab_group_visual_data.h" class Profile; namespace content { class WebContents; } // namespace content namespace sessions { struct SessionWindow; } // namespace sessions struct StartupTab; StartupTabs; // SessionService ------------------------------------------------------------ // SessionService is responsible for maintaining the state of open windows // and tabs so that they can be restored at a later date. The state of the // currently open browsers is referred to as the current session. // // SessionService supports restoring from the last session. The last session // typically corresponds to the last run of the browser, but not always. For // example, if the user has a tabbed browser and app window running, closes the // tabbed browser, then creates a new tabbed browser the current session is made // the last session and the current session reset. This is done to provide the // illusion that app windows run in separate processes. Similar behavior occurs // with incognito windows. // // SessionService itself uses functions from session_service_commands to store // commands which can rebuild the open state of the browser (as |SessionWindow|, // |SessionTab| and |SerializedNavigationEntry|). The commands are periodically // flushed to |CommandStorageBackend| and written to a file. Every so often // |SessionService| rebuilds the contents of the file from the open state of the // browser. // TODO([email protected]) When AppSessionService is implemented, we should // make a pass in SessionService to remove app related code. class SessionService : public SessionServiceBase { … }; #endif // CHROME_BROWSER_SESSIONS_SESSION_SERVICE_H_