File: extension_installed_bubble_view_browsertest.cc

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (132 lines) | stat: -rw-r--r-- 5,007 bytes parent folder | download | duplicates (5)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// 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 <algorithm>

#include "base/memory/raw_ptr.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/ui/extensions/extension_install_ui_desktop.h"
#include "chrome/browser/ui/test/test_browser_dialog.h"
#include "content/public/test/browser_test.h"
#include "extensions/browser/extension_registrar.h"
#include "extensions/common/api/extension_action/action_info.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/test/widget_test.h"
#include "ui/views/widget/widget.h"

class ExtensionInstalledBubbleViewsBrowserTest
    : public SupportsTestDialog<extensions::ExtensionBrowserTest> {
 public:
  ExtensionInstalledBubbleViewsBrowserTest() = default;
  ~ExtensionInstalledBubbleViewsBrowserTest() override = default;

  void ShowUi(const std::string& name) override;
  bool VerifyUi() override;
  void WaitForUserDismissal() override;

 private:
  scoped_refptr<const extensions::Extension> MakeExtensionOfType(
      const std::string& type) {
    extensions::ExtensionBuilder builder(type);

    if (type == "BrowserAction") {
      builder.SetAction(extensions::ActionInfo::Type::kBrowser);
    } else if (type == "PageAction") {
      builder.SetAction(extensions::ActionInfo::Type::kPage);
    }

    if (type == "SignInPromo" || type == "NoAction") {
      builder.SetLocation(extensions::mojom::ManifestLocation::kInternal);
    } else {
      builder.SetLocation(extensions::mojom::ManifestLocation::kComponent);
    }

    if (type == "Omnibox") {
      base::Value::Dict extra_keys;
      extra_keys.SetByDottedPath(extensions::manifest_keys::kOmniboxKeyword,
                                 "foo");
      builder.MergeManifest(std::move(extra_keys));
    }

    scoped_refptr<const extensions::Extension> extension = builder.Build();
    extension_registrar()->AddExtension(extension);
    return extension;
  }

  raw_ptr<views::Widget, AcrossTasksDanglingUntriaged> bubble_widget_;
};

void ExtensionInstalledBubbleViewsBrowserTest::ShowUi(const std::string& name) {
  scoped_refptr<const extensions::Extension> extension =
      MakeExtensionOfType(name);

  views::Widget::Widgets old_widgets = views::test::WidgetTest::GetAllWidgets();
  ExtensionInstallUIDesktop::ShowBubble(extension, browser(), SkBitmap());
  views::Widget::Widgets new_widgets = views::test::WidgetTest::GetAllWidgets();
  views::Widget::Widgets added_widgets;
  std::set_difference(new_widgets.begin(), new_widgets.end(),
                      old_widgets.begin(), old_widgets.end(),
                      std::inserter(added_widgets, added_widgets.begin()));
  ASSERT_EQ(added_widgets.size(), 1u);
  bubble_widget_ = *added_widgets.begin();

  // The extension slides out of the extensions menu before the bubble shows.
  // Wait for the bubble to become visible.
  views::test::WidgetVisibleWaiter(bubble_widget_).Wait();
}

bool ExtensionInstalledBubbleViewsBrowserTest::VerifyUi() {
  return bubble_widget_->IsVisible();
}

void ExtensionInstalledBubbleViewsBrowserTest::WaitForUserDismissal() {
  views::test::WidgetDestroyedWaiter observer(bubble_widget_);
  observer.Wait();
}

#if BUILDFLAG(IS_CHROMEOS)
// None of these tests work when run under Ash, because they need an
// AuraTestHelper constructed at an inconvenient time in test setup, which
// InProcessBrowserTest is not equipped to handle.
// TODO(ellyjones): Fix that, or figure out an alternate way to test this UI.
#define MAYBE_InvokeUi_default DISABLED_InvokeUi_default
#define MAYBE_InvokeUi_BrowserAction DISABLED_InvokeUi_BrowserAction
#define MAYBE_InvokeUi_PageAction DISABLED_InvokeUi_PageAction
#define MAYBE_InvokeUi_SignInPromo DISABLED_InvokeUi_SignInPromo
#define MAYBE_InvokeUi_Omnibox DISABLED_InvokeUi_Omnibox
#else
#define MAYBE_InvokeUi_default InvokeUi_default
#define MAYBE_InvokeUi_BrowserAction InvokeUi_BrowserAction
#define MAYBE_InvokeUi_PageAction InvokeUi_PageAction
#define MAYBE_InvokeUi_SignInPromo InvokeUi_SignInPromo
#define MAYBE_InvokeUi_Omnibox InvokeUi_Omnibox
#endif

IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleViewsBrowserTest,
                       MAYBE_InvokeUi_default) {
  ShowAndVerifyUi();
}

IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleViewsBrowserTest,
                       MAYBE_InvokeUi_BrowserAction) {
  ShowAndVerifyUi();
}

IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleViewsBrowserTest,
                       MAYBE_InvokeUi_PageAction) {
  ShowAndVerifyUi();
}

IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleViewsBrowserTest,
                       MAYBE_InvokeUi_SignInPromo) {
  ShowAndVerifyUi();
}

IN_PROC_BROWSER_TEST_F(ExtensionInstalledBubbleViewsBrowserTest,
                       MAYBE_InvokeUi_Omnibox) {
  ShowAndVerifyUi();
}