blob: e5bb030b6917d67f2be403dc704f5f0cb048532e [file] [log] [blame]
Avi Drissman4a8573c2022-09-09 19:35:541// Copyright 2010 The Chromium Authors
[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
Devlin Cronin5ce7d582021-05-05 23:01:0313#include "extensions/common/extension_id.h"
[email protected]2e0a1502014-05-14 02:59:4314#include "ui/gfx/native_widget_types.h"
[email protected]a39f1a92010-03-10 18:36:5815
[email protected]51a9ec42009-12-14 21:42:5716class Browser;
[email protected]51a9ec42009-12-14 21:42:5717
[email protected]733337862009-12-19 01:27:5118namespace gfx {
[email protected]866d940a2012-09-10 23:02:0219class Image;
[email protected]733337862009-12-19 01:27:5120class Size;
21} // namespace gfx
22
Alison Gale9130192d2024-04-15 19:35:2723// TODO(crbug.com/40177062): A lot of this class can be cleaned up for
Devlin Cronin5ce7d582021-05-05 23:01:0324// the new toolbar UI. Some of it may also be removable, since we now have
25// the platform-abstract ExtensionsContainer class.
Devlin Cronine458a222019-12-30 22:39:3726class ExtensionActionTestHelper {
[email protected]51a9ec42009-12-14 21:42:5727 public:
Devlin Cronine458a222019-12-30 22:39:3728 // Constructs a ExtensionActionTestHelper which, if |is_real_window| is false,
rdevlin.cronin0c1c08b2015-04-27 21:35:1829 // will create its own browser actions container. This is useful in unit
30 // tests, when the |browser|'s window doesn't create platform-specific views.
Devlin Cronine458a222019-12-30 22:39:3731 static std::unique_ptr<ExtensionActionTestHelper> Create(
Elly Fong-Jones914e0d52018-03-09 16:50:1432 Browser* browser,
33 bool is_real_window = true);
rdevlin.cronin0c1c08b2015-04-27 21:35:1834
Peter Boström53c6c5952021-09-17 09:41:2635 ExtensionActionTestHelper(const ExtensionActionTestHelper&) = delete;
36 ExtensionActionTestHelper& operator=(const ExtensionActionTestHelper&) =
37 delete;
38
Devlin Cronine458a222019-12-30 22:39:3739 virtual ~ExtensionActionTestHelper() {}
[email protected]51a9ec42009-12-14 21:42:5740
41 // Returns the number of browser action buttons in the window toolbar.
Elly Fong-Jones914e0d52018-03-09 16:50:1442 virtual int NumberOfBrowserActions() = 0;
[email protected]51a9ec42009-12-14 21:42:5743
Devlin Cronin5ce7d582021-05-05 23:01:0344 // Returns true if there is an action for the given `id`.
45 virtual bool HasAction(const extensions::ExtensionId& id) = 0;
[email protected]53a7d2d2010-03-10 07:50:0646
Keren Zhu321371e2024-05-15 19:49:5247 // Simulates a user click on the action button for the given `id`.
48 virtual void Press(const extensions::ExtensionId& id) = 0;
49
Devlin Cronin5ce7d582021-05-05 23:01:0350 // Inspects the extension popup for the action with the given `id`.
51 virtual void InspectPopup(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5752
Devlin Cronin5ce7d582021-05-05 23:01:0353 // Returns icon for the action for the given `id`.
54 virtual gfx::Image GetIcon(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5755
Elly Fong-Jones914e0d52018-03-09 16:50:1456 virtual gfx::NativeView GetPopupNativeView() = 0;
[email protected]2e0a1502014-05-14 02:59:4357
tapted9e780e22017-06-01 06:13:1958 // Spins a RunLoop until the NativeWindow hosting |GetPopupNativeView()| is
Devlin Croninca5732012024-07-11 23:09:0159 // reported as active by the OS. This method is strange: it's not overridden
60 // by subclasses, and instead the implementation is selected at compile-time
61 // depending on the windowing system in use.
62 void WaitForPopup();
tapted9e780e22017-06-01 06:13:1963
[email protected]733337862009-12-19 01:27:5164 // Returns whether a browser action popup is being shown currently.
Elly Fong-Jones914e0d52018-03-09 16:50:1465 virtual bool HasPopup() = 0;
[email protected]733337862009-12-19 01:27:5166
[email protected]733337862009-12-19 01:27:5167 // Hides the given popup and returns whether the hide was successful.
Elly Fong-Jones914e0d52018-03-09 16:50:1468 virtual bool HidePopup() = 0;
[email protected]733337862009-12-19 01:27:5169
Sanchit Abrol9f4190ad2020-11-05 17:19:2570 // Waits for the ExtensionContainer's layout to be done.
71 virtual void WaitForExtensionsContainerLayout() = 0;
72
[email protected]733337862009-12-19 01:27:5173 // Returns the minimum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:1474 virtual gfx::Size GetMinPopupSize() = 0;
[email protected]733337862009-12-19 01:27:5175
[email protected]733337862009-12-19 01:27:5176 // Returns the maximum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:1477 virtual gfx::Size GetMaxPopupSize() = 0;
78
Sanchit Abrol9f4190ad2020-11-05 17:19:2579 // Returns the maximum available size to place a bubble anchored to
Devlin Cronin5ce7d582021-05-05 23:01:0380 // the action with the given `id` on screen.
Sanchit Abrol9f4190ad2020-11-05 17:19:2581 virtual gfx::Size GetMaxAvailableSizeToFitBubbleOnScreen(
Devlin Cronin5ce7d582021-05-05 23:01:0382 const extensions::ExtensionId& id) = 0;
Sanchit Abrol9f4190ad2020-11-05 17:19:2583
Elly Fong-Jones914e0d52018-03-09 16:50:1484 protected:
Devlin Cronine458a222019-12-30 22:39:3785 ExtensionActionTestHelper() {}
[email protected]51a9ec42009-12-14 21:42:5786};
87
Devlin Cronine458a222019-12-30 22:39:3788#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_TEST_HELPER_H_