#include "chrome/browser/extensions/api/sessions/sessions_api.h"
#include <stddef.h>
#include <algorithm>
#include <memory>
#include <optional>
#include <utility>
#include <vector>
#include "base/i18n/rtl.h"
#include "base/lazy_instance.h"
#include "base/memory/raw_ptr.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "build/chromeos_buildflags.h"
#include "chrome/browser/extensions/api/sessions/session_id.h"
#include "chrome/browser/extensions/api/tab_groups/tab_groups_util.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/api/tabs/windows_util.h"
#include "chrome/browser/extensions/extension_browser_window.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/window_controller.h"
#include "chrome/browser/extensions/window_controller_list.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/search.h"
#include "chrome/browser/sessions/session_restore.h"
#include "chrome/browser/sessions/tab_restore_service_factory.h"
#include "chrome/browser/sync/session_sync_service_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_live_tab_context.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "components/sessions/content/content_live_tab.h"
#include "components/sessions/core/tab_restore_service.h"
#include "components/sync_sessions/open_tabs_ui_delegate.h"
#include "components/sync_sessions/session_sync_service.h"
#include "components/sync_sessions/synced_session.h"
#include "components/url_formatter/url_formatter.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_function_dispatcher.h"
#include "extensions/browser/extension_function_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/error_utils.h"
#include "extensions/common/mojom/context_type.mojom.h"
namespace extensions {
windows;
namespace {
GetRecentlyClosed;
GetDevices;
Restore;
const char kNoRecentlyClosedSessionsError[] = …;
const char kInvalidSessionIdError[] = …;
const char kNoBrowserToRestoreSession[] = …;
const char kSessionSyncError[] = …;
const char kRestoreInIncognitoError[] = …;
bool SortSessionsByRecency(const sync_sessions::SyncedSession* s1,
const sync_sessions::SyncedSession* s2) { … }
bool SortTabsByRecency(const sessions::SessionTab* t1,
const sessions::SessionTab* t2) { … }
api::tabs::Tab CreateTabModelHelper(
const sessions::SerializedNavigationEntry& current_navigation,
const std::string& session_id,
int index,
bool pinned,
bool active,
const Extension* extension,
mojom::ContextType context) { … }
api::windows::Window CreateWindowModelHelper(
std::vector<api::tabs::Tab> tabs,
const std::string& session_id,
const api::windows::WindowType& type,
const api::windows::WindowState& state) { … }
api::sessions::Session CreateSessionModelHelper(
int last_modified,
std::optional<api::tabs::Tab> tab,
std::optional<api::windows::Window> window,
std::optional<api::tab_groups::TabGroup> group) { … }
bool is_window_entry(const sessions::tab_restore::Entry& entry) { … }
}
api::tabs::Tab SessionsGetRecentlyClosedFunction::CreateTabModel(
const sessions::tab_restore::Tab& tab,
bool active) { … }
api::windows::Window SessionsGetRecentlyClosedFunction::CreateWindowModel(
const sessions::tab_restore::Window& window) { … }
api::tab_groups::TabGroup SessionsGetRecentlyClosedFunction::CreateGroupModel(
const sessions::tab_restore::Group& group) { … }
api::sessions::Session SessionsGetRecentlyClosedFunction::CreateSessionModel(
const sessions::tab_restore::Entry& entry) { … }
ExtensionFunction::ResponseAction SessionsGetRecentlyClosedFunction::Run() { … }
api::tabs::Tab SessionsGetDevicesFunction::CreateTabModel(
const std::string& session_tag,
const sessions::SessionTab& tab,
int tab_index,
bool active) { … }
std::optional<api::windows::Window>
SessionsGetDevicesFunction::CreateWindowModel(
const sessions::SessionWindow& window,
const std::string& session_tag) { … }
std::optional<api::sessions::Session>
SessionsGetDevicesFunction::CreateSessionModel(
const sessions::SessionWindow& window,
const std::string& session_tag) { … }
api::sessions::Device SessionsGetDevicesFunction::CreateDeviceModel(
const sync_sessions::SyncedSession* session) { … }
ExtensionFunction::ResponseAction SessionsGetDevicesFunction::Run() { … }
ExtensionFunction::ResponseValue SessionsRestoreFunction::GetRestoredTabResult(
content::WebContents* contents) { … }
ExtensionFunction::ResponseValue
SessionsRestoreFunction::GetRestoredWindowResult(int window_id) { … }
ExtensionFunction::ResponseValue
SessionsRestoreFunction::RestoreMostRecentlyClosed(Browser* browser) { … }
ExtensionFunction::ResponseValue SessionsRestoreFunction::RestoreLocalSession(
const SessionId& session_id,
Browser* browser) { … }
ExtensionFunction::ResponseValue SessionsRestoreFunction::RestoreForeignSession(
const SessionId& session_id,
Browser* browser) { … }
ExtensionFunction::ResponseAction SessionsRestoreFunction::Run() { … }
SessionsEventRouter::SessionsEventRouter(Profile* profile)
: … { … }
SessionsEventRouter::~SessionsEventRouter() { … }
void SessionsEventRouter::TabRestoreServiceChanged(
sessions::TabRestoreService* service) { … }
void SessionsEventRouter::TabRestoreServiceDestroyed(
sessions::TabRestoreService* service) { … }
SessionsAPI::SessionsAPI(content::BrowserContext* context)
: … { … }
SessionsAPI::~SessionsAPI() { … }
void SessionsAPI::Shutdown() { … }
static base::LazyInstance<BrowserContextKeyedAPIFactory<SessionsAPI>>::
DestructorAtExit g_sessions_api_factory = …;
BrowserContextKeyedAPIFactory<SessionsAPI>*
SessionsAPI::GetFactoryInstance() { … }
void SessionsAPI::OnListenerAdded(const EventListenerInfo& details) { … }
}