1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/bubble/webui_bubble_manager.h"
6
7 #include "chrome/browser/ui/browser.h"
8 #include "chrome/browser/ui/views/bubble/webui_bubble_dialog_view.h"
9 #include "chrome/browser/ui/views/frame/browser_view.h"
10 #include "chrome/test/base/in_process_browser_test.h"
11 #include "content/public/test/browser_test.h"
12
13 namespace {
14
15 class TestWebUIBubbleManager : public WebUIBubbleManagerBase {
16 public:
TestWebUIBubbleManager(Browser * browser)17 explicit TestWebUIBubbleManager(Browser* browser)
18 : WebUIBubbleManagerBase(BrowserView::GetBrowserViewForBrowser(browser),
19 browser->profile(),
20 GURL("chrome://about")) {}
21 TestWebUIBubbleManager(const TestWebUIBubbleManager&) = delete;
22 const TestWebUIBubbleManager& operator=(const TestWebUIBubbleManager&) =
23 delete;
24 ~TestWebUIBubbleManager() override = default;
25
26 private:
CreateWebView()27 std::unique_ptr<WebUIBubbleView> CreateWebView() override {
28 return std::make_unique<WebUIBubbleView>(browser_context());
29 }
30 };
31
32 } // namespace
33
34 class WebUIBubbleManagerBrowserTest : public InProcessBrowserTest {
35 public:
36 WebUIBubbleManagerBrowserTest() = default;
37 WebUIBubbleManagerBrowserTest(const WebUIBubbleManagerBrowserTest&) = delete;
38 const WebUIBubbleManagerBrowserTest& operator=(
39 const WebUIBubbleManagerBrowserTest&) = delete;
40 ~WebUIBubbleManagerBrowserTest() override = default;
41
42 // content::BrowserTestBase:
SetUpOnMainThread()43 void SetUpOnMainThread() override {
44 InProcessBrowserTest::SetUpOnMainThread();
45 bubble_manager_ = std::make_unique<TestWebUIBubbleManager>(browser());
46 }
TearDownOnMainThread()47 void TearDownOnMainThread() override {
48 auto* widget = bubble_manager_->GetBubbleWidget();
49 if (widget)
50 widget->CloseNow();
51 bubble_manager()->ResetWebViewForTesting();
52 InProcessBrowserTest::TearDownOnMainThread();
53 }
54
bubble_manager()55 TestWebUIBubbleManager* bubble_manager() { return bubble_manager_.get(); }
56
57 private:
58 std::unique_ptr<TestWebUIBubbleManager> bubble_manager_;
59 };
60
IN_PROC_BROWSER_TEST_F(WebUIBubbleManagerBrowserTest,CreateAndCloseBubble)61 IN_PROC_BROWSER_TEST_F(WebUIBubbleManagerBrowserTest, CreateAndCloseBubble) {
62 EXPECT_EQ(nullptr, bubble_manager()->GetBubbleWidget());
63 bubble_manager()->ShowBubble();
64 EXPECT_NE(nullptr, bubble_manager()->GetBubbleWidget());
65 EXPECT_FALSE(bubble_manager()->GetBubbleWidget()->IsClosed());
66
67 bubble_manager()->CloseBubble();
68 EXPECT_TRUE(bubble_manager()->GetBubbleWidget()->IsClosed());
69 }
70
IN_PROC_BROWSER_TEST_F(WebUIBubbleManagerBrowserTest,ShowUISetsBubbleWidgetVisible)71 IN_PROC_BROWSER_TEST_F(WebUIBubbleManagerBrowserTest,
72 ShowUISetsBubbleWidgetVisible) {
73 EXPECT_EQ(nullptr, bubble_manager()->GetBubbleWidget());
74 bubble_manager()->ShowBubble();
75 EXPECT_NE(nullptr, bubble_manager()->GetBubbleWidget());
76 EXPECT_FALSE(bubble_manager()->GetBubbleWidget()->IsClosed());
77 EXPECT_FALSE(bubble_manager()->GetBubbleWidget()->IsVisible());
78
79 bubble_manager()->bubble_view_for_testing()->ShowUI();
80 EXPECT_TRUE(bubble_manager()->GetBubbleWidget()->IsVisible());
81
82 bubble_manager()->CloseBubble();
83 EXPECT_TRUE(bubble_manager()->GetBubbleWidget()->IsClosed());
84 }
85