blob: 1550460bba11c19534adeab1ee877db1f45dffac [file] [log] [blame]
// 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.
#import "ios/chrome/browser/sessions/live_tab_context_browser_agent.h"
#import <memory>
#import <utility>
#import "base/notreached.h"
#import "base/strings/sys_string_conversions.h"
#import "components/sessions/core/session_types.h"
#import "components/tab_groups/tab_group_id.h"
#import "components/tab_groups/tab_group_visual_data.h"
#import "ios/chrome/browser/sessions/session_util.h"
#import "ios/chrome/browser/shared/model/browser_state/chrome_browser_state.h"
#import "ios/chrome/browser/shared/model/web_state_list/web_state_list.h"
#import "ios/chrome/browser/shared/model/web_state_list/web_state_opener.h"
#import "ios/web/public/web_state.h"
#import "third_party/abseil-cpp/absl/types/optional.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
BROWSER_USER_DATA_KEY_IMPL(LiveTabContextBrowserAgent)
LiveTabContextBrowserAgent::LiveTabContextBrowserAgent(Browser* browser)
: browser_state_(browser->GetBrowserState()),
web_state_list_(browser->GetWebStateList()),
session_id_(SessionID::NewUnique()) {}
LiveTabContextBrowserAgent::~LiveTabContextBrowserAgent() {}
void LiveTabContextBrowserAgent::ShowBrowserWindow() {
// No need to do anything here, as the singleton browser "window" is already
// shown.
}
SessionID LiveTabContextBrowserAgent::GetSessionID() const {
return session_id_;
}
sessions::SessionWindow::WindowType LiveTabContextBrowserAgent::GetWindowType()
const {
// Not supported by iOS.
return sessions::SessionWindow::TYPE_NORMAL;
}
int LiveTabContextBrowserAgent::GetTabCount() const {
return web_state_list_->count();
}
int LiveTabContextBrowserAgent::GetSelectedIndex() const {
return web_state_list_->active_index();
}
std::string LiveTabContextBrowserAgent::GetAppName() const {
return std::string();
}
std::string LiveTabContextBrowserAgent::GetUserTitle() const {
return std::string();
}
sessions::LiveTab* LiveTabContextBrowserAgent::GetLiveTabAt(int index) const {
return nullptr;
}
sessions::LiveTab* LiveTabContextBrowserAgent::GetActiveLiveTab() const {
return nullptr;
}
std::map<std::string, std::string>
LiveTabContextBrowserAgent::GetExtraDataForTab(int index) const {
return std::map<std::string, std::string>();
}
std::map<std::string, std::string>
LiveTabContextBrowserAgent::GetExtraDataForWindow() const {
return std::map<std::string, std::string>();
}
absl::optional<tab_groups::TabGroupId>
LiveTabContextBrowserAgent::GetTabGroupForTab(int index) const {
// Not supported by iOS.
return absl::nullopt;
}
const tab_groups::TabGroupVisualData*
LiveTabContextBrowserAgent::GetVisualDataForGroup(
const tab_groups::TabGroupId& group) const {
// Since we never return a group from GetTabGroupForTab(), this should never
// be called.
NOTREACHED();
return nullptr;
}
bool LiveTabContextBrowserAgent::IsTabPinned(int index) const {
// Not supported by iOS.
return false;
}
void LiveTabContextBrowserAgent::SetVisualDataForGroup(
const tab_groups::TabGroupId& group,
const tab_groups::TabGroupVisualData& visual_data) {
// Not supported on iOS.
}
const gfx::Rect LiveTabContextBrowserAgent::GetRestoredBounds() const {
// Not supported by iOS.
return gfx::Rect();
}
ui::WindowShowState LiveTabContextBrowserAgent::GetRestoredState() const {
// Not supported by iOS.
return ui::SHOW_STATE_NORMAL;
}
std::string LiveTabContextBrowserAgent::GetWorkspace() const {
// Not supported by iOS.
return std::string();
}
sessions::LiveTab* LiveTabContextBrowserAgent::AddRestoredTab(
const std::vector<sessions::SerializedNavigationEntry>& navigations,
int tab_index,
int selected_navigation,
const std::string& extension_app_id,
absl::optional<tab_groups::TabGroupId> group,
const tab_groups::TabGroupVisualData& group_visual_data,
bool select,
bool pin,
const sessions::PlatformSpecificTabData* tab_platform_data,
const sessions::SerializedUserAgentOverride& user_agent_override,
const std::map<std::string, std::string>& extra_data,
const SessionID* tab_id) {
// TODO(crbug.com/661636): Handle tab-switch animation somehow...
web_state_list_->InsertWebState(
tab_index,
session_util::CreateWebStateWithNavigationEntries(
browser_state_, selected_navigation, navigations),
WebStateList::INSERT_FORCE_INDEX | WebStateList::INSERT_ACTIVATE,
WebStateOpener());
return nullptr;
}
sessions::LiveTab* LiveTabContextBrowserAgent::ReplaceRestoredTab(
const std::vector<sessions::SerializedNavigationEntry>& navigations,
absl::optional<tab_groups::TabGroupId> group,
int selected_navigation,
const std::string& extension_app_id,
const sessions::PlatformSpecificTabData* tab_platform_data,
const sessions::SerializedUserAgentOverride& user_agent_override,
const std::map<std::string, std::string>& extra_data) {
web_state_list_->ReplaceWebStateAt(
web_state_list_->active_index(),
session_util::CreateWebStateWithNavigationEntries(
browser_state_, selected_navigation, navigations));
return nullptr;
}
void LiveTabContextBrowserAgent::CloseTab() {
web_state_list_->CloseWebStateAt(web_state_list_->active_index(),
WebStateList::CLOSE_USER_ACTION);
}