1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
// Copyright 2020 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/browser/ui/views/tabs/tab_search_button.h"
#include <vector>
#include "base/feature_list.h"
#include "base/run_loop.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/test/test_browser_dialog.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h"
#include "chrome/browser/ui/views/bubble/webui_bubble_manager.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/tab_strip_region_view.h"
#include "chrome/browser/ui/views/tab_search_bubble_host.h"
#include "chrome/browser/ui/views/tabs/tab_search_button.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "ui/views/test/button_test_api.h"
namespace {
ui::MouseEvent GetDummyEvent() {
return ui::MouseEvent(ui::EventType::kMousePressed, gfx::PointF(),
gfx::PointF(), base::TimeTicks::Now(), 0, 0);
}
} // namespace
class TabSearchButtonBrowserTest : public InProcessBrowserTest {
public:
TabSearchButtonBrowserTest() {
feature_list_.InitWithFeaturesAndParameters(
{{features::kTabstripComboButton,
{{"tab_search_toolbar_button", "false"}}}},
{});
}
BrowserView* browser_view() {
return BrowserView::GetBrowserViewForBrowser(browser());
}
TabSearchButton* tab_search_button() {
return browser_view()->tab_strip_region_view()->GetTabSearchButton();
}
TabSearchBubbleHost* tab_search_bubble_host() {
return browser_view()->GetTabSearchBubbleHost();
}
WebUIBubbleManager* bubble_manager() {
return tab_search_bubble_host()->webui_bubble_manager_for_testing();
}
void RunUntilBubbleWidgetDestroyed() {
ASSERT_NE(nullptr, bubble_manager()->GetBubbleWidget());
base::RunLoop run_loop;
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, run_loop.QuitClosure());
run_loop.Run();
ASSERT_EQ(nullptr, bubble_manager()->GetBubbleWidget());
}
private:
base::test::ScopedFeatureList feature_list_;
};
IN_PROC_BROWSER_TEST_F(TabSearchButtonBrowserTest, ButtonClickCreatesBubble) {
ASSERT_EQ(nullptr, bubble_manager()->GetBubbleWidget());
views::test::ButtonTestApi(tab_search_button()).NotifyClick(GetDummyEvent());
ASSERT_NE(nullptr, bubble_manager()->GetBubbleWidget());
tab_search_bubble_host()->CloseTabSearchBubble();
ASSERT_TRUE(bubble_manager()->GetBubbleWidget()->IsClosed());
RunUntilBubbleWidgetDestroyed();
}
class TabSearchButtonBrowserUITest : public DialogBrowserTest {
public:
TabSearchButtonBrowserUITest() {
feature_list_.InitWithFeaturesAndParameters(
{{features::kTabstripComboButton,
{{"tab_search_toolbar_button", "false"}}}},
{});
}
// DialogBrowserTest:
void ShowUi(const std::string& name) override {
AppendTab(chrome::kChromeUISettingsURL);
AppendTab(chrome::kChromeUIHistoryURL);
AppendTab(chrome::kChromeUIBookmarksURL);
auto* tab_search_button = BrowserView::GetBrowserViewForBrowser(browser())
->tab_strip_region_view()
->GetTabSearchButton();
views::test::ButtonTestApi(tab_search_button).NotifyClick(GetDummyEvent());
}
void AppendTab(std::string url) {
chrome::AddTabAt(browser(), GURL(url), -1, true);
}
private:
base::test::ScopedFeatureList feature_list_;
};
// Invokes a tab search bubble.
IN_PROC_BROWSER_TEST_F(TabSearchButtonBrowserUITest, InvokeUi_default) {
ShowAndVerifyUi();
}
|