blob: 61fc38745057dd0dbba368370a34a1f25a7ad453 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/tabs/split_tab_metrics.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/view_ids.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/views/view.h"
class ImmersiveReadAnythingBrowserTest
: public InProcessBrowserTest,
public testing::WithParamInterface<bool> {
public:
ImmersiveReadAnythingBrowserTest() {
feature_list_.InitWithFeatureState(features::kImmersiveReadAnything,
IsImmersiveEnabled());
}
void SetUpOnMainThread() override {
BrowserView* browser_view =
BrowserView::GetBrowserViewForBrowser(browser());
ASSERT_NE(browser_view, nullptr);
browser_view->GetWidget()->Show();
}
protected:
bool IsImmersiveEnabled() const { return GetParam(); }
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_P(ImmersiveReadAnythingBrowserTest,
OverlayExistsIfImmersiveFeatureEnabled) {
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
views::View* contents_container =
browser_view->GetActiveContentsContainerView();
ASSERT_NE(contents_container, nullptr);
views::View* overlay_view = nullptr;
int overlay_count = 0;
for (views::View* child : contents_container->children()) {
if (child->GetID() == VIEW_ID_READ_ANYTHING_OVERLAY) {
overlay_view = child;
overlay_count++;
}
}
if (IsImmersiveEnabled()) {
ASSERT_NE(overlay_view, nullptr)
<< "Overlay should exist when Immersive Reading Mode is enabled.";
EXPECT_FALSE(overlay_view->GetVisible()) << "Overlay should be hidden.";
} else {
EXPECT_EQ(nullptr, overlay_view);
EXPECT_EQ(0, overlay_count);
}
}
INSTANTIATE_TEST_SUITE_P(All,
ImmersiveReadAnythingBrowserTest,
testing::Bool());
class ImmersiveReadAnythingSplitViewBrowserTest
: public InProcessBrowserTest,
public testing::WithParamInterface<bool> {
public:
ImmersiveReadAnythingSplitViewBrowserTest() {
feature_list_.InitWithFeatureStates({
{features::kSideBySide, true},
{features::kImmersiveReadAnything, IsImmersiveEnabled()},
});
}
void SetUpOnMainThread() override {
BrowserView* browser_view =
BrowserView::GetBrowserViewForBrowser(browser());
ASSERT_NE(browser_view, nullptr);
browser_view->GetWidget()->Show();
chrome::NewTab(browser());
browser()->tab_strip_model()->ActivateTabAt(0);
std::vector<int> other_tab_indices = {1};
split_tabs::SplitTabVisualData visual_data;
split_tabs::SplitTabCreatedSource source =
split_tabs::SplitTabCreatedSource::kToolbarButton;
browser()->tab_strip_model()->AddToNewSplit(other_tab_indices, visual_data,
source);
}
protected:
bool IsImmersiveEnabled() const { return GetParam(); }
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_P(ImmersiveReadAnythingSplitViewBrowserTest,
OverlayExistsOnSplitViewsWhenImmersiveIsEnabled) {
const auto ContainsReadAnythingOverlay = [](views::View* container) {
if (!container) {
return false;
}
for (views::View* child : container->children()) {
if (child->GetID() == VIEW_ID_READ_ANYTHING_OVERLAY) {
return true;
}
}
return false;
};
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
views::View* container_0 = browser_view->GetActiveContentsContainerView();
ASSERT_NE(container_0, nullptr);
ASSERT_EQ(ContainsReadAnythingOverlay(container_0), IsImmersiveEnabled());
browser()->tab_strip_model()->ActivateTabAt(1);
views::View* container_1 = browser_view->GetActiveContentsContainerView();
ASSERT_NE(container_1, nullptr);
ASSERT_NE(container_0, container_1);
ASSERT_EQ(ContainsReadAnythingOverlay(container_1), IsImmersiveEnabled());
}
INSTANTIATE_TEST_SUITE_P(All,
ImmersiveReadAnythingSplitViewBrowserTest,
testing::Bool());