blob: d489ebff46e6fc94242feb43938e8c6878f5f4cd [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.
#include "chrome/test/base/test_browser_window.h"
#include <utility>
#include "base/feature_list.h"
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
#include "chrome/browser/ui/find_bar/find_bar.h"
#include "chrome/browser/ui/user_education/browser_user_education_interface.h"
#include "chrome/browser/ui/views/bubble_anchor_util_views.h"
#include "components/sharing_message/sharing_dialog_data.h"
#include "components/user_education/common/new_badge/new_badge_controller.h"
#include "content/public/browser/keyboard_event_processing_result.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/mojom/window_show_state.mojom.h"
#include "ui/color/color_provider_key.h"
#include "ui/color/color_provider_manager.h"
#include "ui/gfx/geometry/rect.h"
// Helpers --------------------------------------------------------------------
std::unique_ptr<Browser> CreateBrowserWithTestWindowForParams(
Browser::CreateParams params) {
DCHECK(!params.window);
auto window = std::make_unique<TestBrowserWindow>();
window->set_is_minimized(params.initial_show_state ==
ui::mojom::WindowShowState::kMinimized);
// Tests generally expect TestBrowserWindows not to be active.
window->set_is_active(
params.initial_show_state != ui::mojom::WindowShowState::kInactive &&
params.initial_show_state != ui::mojom::WindowShowState::kDefault &&
params.initial_show_state != ui::mojom::WindowShowState::kMinimized);
params.window = window.release();
return Browser::DeprecatedCreateOwnedForTesting(params);
}
// TestBrowserWindow::TestLocationBar -----------------------------------------
OmniboxView* TestBrowserWindow::TestLocationBar::GetOmniboxView() {
return nullptr;
}
OmniboxController* TestBrowserWindow::TestLocationBar::GetOmniboxController() {
return nullptr;
}
LocationBarTesting*
TestBrowserWindow::TestLocationBar::GetLocationBarForTesting() {
return nullptr;
}
LocationBarModel* TestBrowserWindow::TestLocationBar::GetLocationBarModel() {
return nullptr;
}
content::WebContents* TestBrowserWindow::TestLocationBar::GetWebContents() {
return nullptr;
}
std::optional<bubble_anchor_util::AnchorConfiguration>
TestBrowserWindow::TestLocationBar::GetChipAnchor() {
return {};
}
// TestBrowserWindow ----------------------------------------------------------
TestBrowserWindow::TestBrowserWindow() {
// TestBrowserWindow will always be instantiated before its Browser.
// TODO(crbug.com/413168662): This can be removed once Browser is updated to
// always own its BrowserWindow.
browser_list_observer_.Observe(BrowserList::GetInstance());
}
TestBrowserWindow::~TestBrowserWindow() {
if (browser_) {
// BrowserWindow implementations are expected to call
// TearDownPreBrowserWindowDestruction() before destruction.
browser_->GetFeatures().TearDownPreBrowserWindowDestruction();
browser_ = nullptr;
}
}
void TestBrowserWindow::Close() {
if (close_callback_) {
std::move(close_callback_).Run();
}
is_closed_ = true;
}
bool TestBrowserWindow::IsActive() const {
return is_active_;
}
ui::ZOrderLevel TestBrowserWindow::GetZOrderLevel() const {
return ui::ZOrderLevel::kNormal;
}
gfx::NativeWindow TestBrowserWindow::GetNativeWindow() const {
return native_window_;
}
bool TestBrowserWindow::IsOnCurrentWorkspace() const {
return true;
}
bool TestBrowserWindow::IsVisibleOnScreen() const {
return true;
}
void TestBrowserWindow::SetTopControlsShownRatio(
content::WebContents* web_contents,
float ratio) {}
bool TestBrowserWindow::DoBrowserControlsShrinkRendererSize(
const content::WebContents* contents) const {
return false;
}
ui::NativeTheme* TestBrowserWindow::GetNativeTheme() {
return nullptr;
}
const ui::ThemeProvider* TestBrowserWindow::GetThemeProvider() const {
return nullptr;
}
const ui::ColorProvider* TestBrowserWindow::GetColorProvider() const {
return ui::ColorProviderManager::Get().GetColorProviderFor(
ui::ColorProviderKey());
}
int TestBrowserWindow::GetTopControlsHeight() const {
return 0;
}
void TestBrowserWindow::SetTopControlsGestureScrollInProgress(
bool in_progress) {}
std::vector<StatusBubble*> TestBrowserWindow::GetStatusBubbles() {
return {};
}
bool TestBrowserWindow::CanDockDevTools() const {
return true;
}
gfx::Rect TestBrowserWindow::GetRestoredBounds() const {
return gfx::Rect();
}
ui::mojom::WindowShowState TestBrowserWindow::GetRestoredState() const {
return ui::mojom::WindowShowState::kDefault;
}
gfx::Rect TestBrowserWindow::GetBounds() const {
return gfx::Rect();
}
gfx::Size TestBrowserWindow::GetContentsSize() const {
return gfx::Size();
}
void TestBrowserWindow::SetContentsSize(const gfx::Size& size) {}
bool TestBrowserWindow::IsMaximized() const {
return false;
}
bool TestBrowserWindow::IsMinimized() const {
return is_minimized_;
}
bool TestBrowserWindow::ShouldHideUIForFullscreen() const {
return false;
}
bool TestBrowserWindow::GetCanResize() {
return false;
}
ui::mojom::WindowShowState TestBrowserWindow::GetWindowShowState() const {
return ui::mojom::WindowShowState::kDefault;
}
bool TestBrowserWindow::IsFullscreen() const {
return false;
}
bool TestBrowserWindow::IsFullscreenBubbleVisible() const {
return false;
}
bool TestBrowserWindow::IsForceFullscreen() const {
return false;
}
bool TestBrowserWindow::UpdateToolbarSecurityState() {
return false;
}
bool TestBrowserWindow::IsVisible() const {
return true;
}
LocationBar* TestBrowserWindow::GetLocationBar() const {
return const_cast<TestLocationBar*>(&location_bar_);
}
autofill::AutofillBubbleHandler* TestBrowserWindow::GetAutofillBubbleHandler() {
return &autofill_bubble_handler_;
}
ExtensionsContainer* TestBrowserWindow::GetExtensionsContainer() {
return nullptr;
}
content::KeyboardEventProcessingResult
TestBrowserWindow::PreHandleKeyboardEvent(
const input::NativeWebKeyboardEvent& event) {
return content::KeyboardEventProcessingResult::NOT_HANDLED;
}
bool TestBrowserWindow::HandleKeyboardEvent(
const input::NativeWebKeyboardEvent& event) {
return false;
}
bool TestBrowserWindow::IsBookmarkBarVisible() const {
return false;
}
bool TestBrowserWindow::IsBookmarkBarAnimating() const {
return false;
}
bool TestBrowserWindow::IsTabStripEditable() const {
return is_tab_strip_editable_;
}
void TestBrowserWindow::SetTabStripNotEditableForTesting() {
is_tab_strip_editable_ = false;
}
bool TestBrowserWindow::IsToolbarVisible() const {
return false;
}
bool TestBrowserWindow::IsToolbarShowing() const {
return false;
}
bool TestBrowserWindow::IsLocationBarVisible() const {
return false;
}
bool TestBrowserWindow::IsBorderlessModeEnabled() const {
return false;
}
BrowserView* TestBrowserWindow::AsBrowserView() {
return nullptr;
}
void TestBrowserWindow::DeleteBrowserWindow() {
delete this;
}
ShowTranslateBubbleResult TestBrowserWindow::ShowTranslateBubble(
content::WebContents* contents,
translate::TranslateStep step,
const std::string& source_language,
const std::string& target_language,
translate::TranslateErrors error_type,
bool is_user_gesture) {
return ShowTranslateBubbleResult::kSuccess;
}
void TestBrowserWindow::StartPartialTranslate(
const std::string& source_language,
const std::string& target_language,
const std::u16string& text_selection) {}
qrcode_generator::QRCodeGeneratorBubbleView*
TestBrowserWindow::ShowQRCodeGeneratorBubble(content::WebContents* contents,
const GURL& url,
bool show_back_button) {
return nullptr;
}
SharingDialog* TestBrowserWindow::ShowSharingDialog(
content::WebContents* web_contents,
SharingDialogData data) {
return nullptr;
}
#if !BUILDFLAG(IS_ANDROID)
sharing_hub::ScreenshotCapturedBubble*
TestBrowserWindow::ShowScreenshotCapturedBubble(content::WebContents* contents,
const gfx::Image& image) {
return nullptr;
}
#endif
send_tab_to_self::SendTabToSelfBubbleView*
TestBrowserWindow::ShowSendTabToSelfDevicePickerBubble(
content::WebContents* contents) {
return nullptr;
}
send_tab_to_self::SendTabToSelfBubbleView*
TestBrowserWindow::ShowSendTabToSelfPromoBubble(content::WebContents* contents,
bool show_signin_button) {
return nullptr;
}
#if BUILDFLAG(IS_CHROMEOS)
void TestBrowserWindow::ToggleMultitaskMenu() {
return;
}
#else
sharing_hub::SharingHubBubbleView* TestBrowserWindow::ShowSharingHubBubble(
share::ShareAttempt attempt) {
return nullptr;
}
#endif // BUILDFLAG(IS_CHROMEOS)
DownloadBubbleUIController* TestBrowserWindow::GetDownloadBubbleUIController() {
return nullptr;
}
std::unique_ptr<FindBar> TestBrowserWindow::CreateFindBar() {
return nullptr;
}
web_modal::WebContentsModalDialogHost*
TestBrowserWindow::GetWebContentsModalDialogHost() {
return nullptr;
}
web_modal::WebContentsModalDialogHost*
TestBrowserWindow::GetWebContentsModalDialogHostFor(
content::WebContents* web_contents) {
return nullptr;
}
ExclusiveAccessContext* TestBrowserWindow::GetExclusiveAccessContext() {
return nullptr;
}
std::string TestBrowserWindow::GetWorkspace() const {
return workspace_;
}
bool TestBrowserWindow::IsVisibleOnAllWorkspaces() const {
return visible_on_all_workspaces_;
}
std::unique_ptr<content::EyeDropper> TestBrowserWindow::OpenEyeDropper(
content::RenderFrameHost* frame,
content::EyeDropperListener* listener) {
return nullptr;
}
void TestBrowserWindow::SetNativeWindow(gfx::NativeWindow window) {
native_window_ = window;
}
void TestBrowserWindow::SetCloseCallback(base::OnceClosure close_callback) {
close_callback_ = std::move(close_callback);
}
bool TestBrowserWindow::IsTabModalPopupDeprecated() const {
return is_tab_modal_popup_deprecated_;
}
void TestBrowserWindow::SetIsTabModalPopupDeprecated(
bool is_tab_modal_popup_deprecated) {
is_tab_modal_popup_deprecated_ = is_tab_modal_popup_deprecated;
}
void TestBrowserWindow::OnBrowserAdded(Browser* browser) {
if (browser->create_params().window == this) {
browser_ = browser;
browser_list_observer_.Reset();
}
}