blob: dcfb54e424f1f0ea856ec6a663c5c190ab48b333 [file] [log] [blame]
[email protected]7d9ad0b32010-02-12 21:44:451// Copyright (c) 2010 The Chromium Authors. All rights reserved.
[email protected]51a9ec42009-12-14 21:42:572// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Devlin Cronine458a222019-12-30 22:39:375#ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_TEST_HELPER_H_
6#define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_TEST_HELPER_H_
[email protected]51a9ec42009-12-14 21:42:577
avia2f4804a2015-12-24 23:11:138#include <stddef.h>
9
dchengc963c7142016-04-08 03:55:2210#include <memory>
[email protected]51a9ec42009-12-14 21:42:5711#include <string>
12
avia2f4804a2015-12-24 23:11:1313#include "base/macros.h"
Devlin Cronin5ce7d582021-05-05 23:01:0314#include "extensions/common/extension_id.h"
[email protected]2e0a1502014-05-14 02:59:4315#include "ui/gfx/native_widget_types.h"
[email protected]a39f1a92010-03-10 18:36:5816
[email protected]51a9ec42009-12-14 21:42:5717class Browser;
Devlin Cronin256b4ae2019-12-09 18:34:2518class ExtensionsContainer;
[email protected]51a9ec42009-12-14 21:42:5719
[email protected]733337862009-12-19 01:27:5120namespace gfx {
[email protected]866d940a2012-09-10 23:02:0221class Image;
[email protected]733337862009-12-19 01:27:5122class Size;
23} // namespace gfx
24
Devlin Cronin5ce7d582021-05-05 23:01:0325// TODO(https://crbug.com/1197766): A lot of this class can be cleaned up for
26// the new toolbar UI. Some of it may also be removable, since we now have
27// the platform-abstract ExtensionsContainer class.
Devlin Cronine458a222019-12-30 22:39:3728class ExtensionActionTestHelper {
[email protected]51a9ec42009-12-14 21:42:5729 public:
Devlin Cronine458a222019-12-30 22:39:3730 // Constructs a ExtensionActionTestHelper which, if |is_real_window| is false,
rdevlin.cronin0c1c08b2015-04-27 21:35:1831 // will create its own browser actions container. This is useful in unit
32 // tests, when the |browser|'s window doesn't create platform-specific views.
Devlin Cronine458a222019-12-30 22:39:3733 static std::unique_ptr<ExtensionActionTestHelper> Create(
Elly Fong-Jones914e0d52018-03-09 16:50:1434 Browser* browser,
35 bool is_real_window = true);
rdevlin.cronin0c1c08b2015-04-27 21:35:1836
Peter Boström53c6c5952021-09-17 09:41:2637 ExtensionActionTestHelper(const ExtensionActionTestHelper&) = delete;
38 ExtensionActionTestHelper& operator=(const ExtensionActionTestHelper&) =
39 delete;
40
Devlin Cronine458a222019-12-30 22:39:3741 virtual ~ExtensionActionTestHelper() {}
[email protected]51a9ec42009-12-14 21:42:5742
43 // Returns the number of browser action buttons in the window toolbar.
Elly Fong-Jones914e0d52018-03-09 16:50:1444 virtual int NumberOfBrowserActions() = 0;
[email protected]51a9ec42009-12-14 21:42:5745
Collin Baker58fb6e0f2020-04-28 01:59:1746 // Returns the number of browser action currently visible. Note that a correct
47 // result may require a UI layout. Ensure the UI layout is up-to-date (e.g. by
48 // calling InProcessBrowserTest::RunScheduledLayouts()) for a browser test.
Elly Fong-Jones914e0d52018-03-09 16:50:1449 virtual int VisibleBrowserActions() = 0;
[email protected]7d9ad0b32010-02-12 21:44:4550
Devlin Cronin5ce7d582021-05-05 23:01:0351 // Returns true if there is an action for the given `id`.
52 virtual bool HasAction(const extensions::ExtensionId& id) = 0;
[email protected]53a7d2d2010-03-10 07:50:0653
Devlin Cronin5ce7d582021-05-05 23:01:0354 // Inspects the extension popup for the action with the given `id`.
55 virtual void InspectPopup(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5756
Devlin Cronin5ce7d582021-05-05 23:01:0357 // Returns whether the extension action for the given `id` has a non-null
58 // icon. Note that the icon is loaded asynchronously, in which case you can
59 // wait for it to load by calling WaitForBrowserActionUpdated.
60 virtual bool HasIcon(const extensions::ExtensionId& id) = 0;
[email protected]866d940a2012-09-10 23:02:0261
Devlin Cronin5ce7d582021-05-05 23:01:0362 // Returns icon for the action for the given `id`.
63 virtual gfx::Image GetIcon(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5764
Devlin Cronin5ce7d582021-05-05 23:01:0365 // Simulates a user click on the action button for the given `id`.
66 virtual void Press(const extensions::ExtensionId& id) = 0;
[email protected]7d9ad0b32010-02-12 21:44:4567
Devlin Cronin5ce7d582021-05-05 23:01:0368 // Returns the current tooltip of the action for the given `id`.
69 virtual std::string GetTooltip(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5770
Elly Fong-Jones914e0d52018-03-09 16:50:1471 virtual gfx::NativeView GetPopupNativeView() = 0;
[email protected]2e0a1502014-05-14 02:59:4372
tapted9e780e22017-06-01 06:13:1973 // Spins a RunLoop until the NativeWindow hosting |GetPopupNativeView()| is
Elly Fong-Jones914e0d52018-03-09 16:50:1474 // reported as active by the OS. Returns true if successful. This method is
75 // strange: it's not overridden by subclasses, and instead the implementation
76 // is selected at compile-time depending on the windowing system in use.
tapted9e780e22017-06-01 06:13:1977 bool WaitForPopup();
78
[email protected]733337862009-12-19 01:27:5179 // Returns whether a browser action popup is being shown currently.
Elly Fong-Jones914e0d52018-03-09 16:50:1480 virtual bool HasPopup() = 0;
[email protected]733337862009-12-19 01:27:5181
[email protected]733337862009-12-19 01:27:5182 // Hides the given popup and returns whether the hide was successful.
Elly Fong-Jones914e0d52018-03-09 16:50:1483 virtual bool HidePopup() = 0;
[email protected]733337862009-12-19 01:27:5184
rdevlin.croninede728b2015-09-17 21:47:3285 // Sets the current width of the browser actions container without resizing
86 // the underlying controller. This is to simulate e.g. when the browser window
87 // is too small for the preferred width.
Elly Fong-Jones914e0d52018-03-09 16:50:1488 virtual void SetWidth(int width) = 0;
rdevlin.croninede728b2015-09-17 21:47:3289
Devlin Cronin256b4ae2019-12-09 18:34:2590 // Returns the associated ExtensionsContainer.
91 virtual ExtensionsContainer* GetExtensionsContainer() = 0;
92
Sanchit Abrol9f4190ad2020-11-05 17:19:2593 // Waits for the ExtensionContainer's layout to be done.
94 virtual void WaitForExtensionsContainerLayout() = 0;
95
Devlin Cronine458a222019-12-30 22:39:3796 // Creates and returns a ExtensionActionTestHelper with an "overflow"
97 // container, with this object's container as the main bar.
98 virtual std::unique_ptr<ExtensionActionTestHelper> CreateOverflowBar(
Devlin Cronin794c0a72019-10-25 01:45:4699 Browser* browser) = 0;
rdevlin.cronin0c1c08b2015-04-27 21:35:18100
Collin Baker58fb6e0f2020-04-28 01:59:17101 // Forces a layout of an overflow bar. Must only be called on the helper
102 // returned by CreateOverflowBar().
103 virtual void LayoutForOverflowBar() = 0;
104
[email protected]733337862009-12-19 01:27:51105 // Returns the minimum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:14106 virtual gfx::Size GetMinPopupSize() = 0;
[email protected]733337862009-12-19 01:27:51107
Devlin Cronin256b4ae2019-12-09 18:34:25108 // Returns the size of the toolbar actions.
109 virtual gfx::Size GetToolbarActionSize() = 0;
110
[email protected]733337862009-12-19 01:27:51111 // Returns the maximum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:14112 virtual gfx::Size GetMaxPopupSize() = 0;
113
Sanchit Abrol9f4190ad2020-11-05 17:19:25114 // Returns the maximum available size to place a bubble anchored to
Devlin Cronin5ce7d582021-05-05 23:01:03115 // the action with the given `id` on screen.
Sanchit Abrol9f4190ad2020-11-05 17:19:25116 virtual gfx::Size GetMaxAvailableSizeToFitBubbleOnScreen(
Devlin Cronin5ce7d582021-05-05 23:01:03117 const extensions::ExtensionId& id) = 0;
Sanchit Abrol9f4190ad2020-11-05 17:19:25118
Elly Fong-Jones914e0d52018-03-09 16:50:14119 protected:
Devlin Cronine458a222019-12-30 22:39:37120 ExtensionActionTestHelper() {}
[email protected]51a9ec42009-12-14 21:42:57121};
122
Devlin Cronine458a222019-12-30 22:39:37123#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_TEST_HELPER_H_