blob: e5b278c5a5e8272abddc8a9f3a8c9509a7120b1e [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;
17
[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 Gale91301922024-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:
EmiliaPazb48d0992024-10-22 22:25:1228 static std::unique_ptr<ExtensionActionTestHelper> Create(Browser* browser);
rdevlin.cronin0c1c08b2015-04-27 21:35:1829
Peter Boström53c6c5952021-09-17 09:41:2630 ExtensionActionTestHelper(const ExtensionActionTestHelper&) = delete;
31 ExtensionActionTestHelper& operator=(const ExtensionActionTestHelper&) =
32 delete;
33
Sorin Jianuadfd3bf2024-12-05 22:32:4334 virtual ~ExtensionActionTestHelper() = default;
[email protected]51a9ec42009-12-14 21:42:5735
36 // Returns the number of browser action buttons in the window toolbar.
Elly Fong-Jones914e0d52018-03-09 16:50:1437 virtual int NumberOfBrowserActions() = 0;
[email protected]51a9ec42009-12-14 21:42:5738
Devlin Cronin5ce7d582021-05-05 23:01:0339 // Returns true if there is an action for the given `id`.
40 virtual bool HasAction(const extensions::ExtensionId& id) = 0;
[email protected]53a7d2d2010-03-10 07:50:0641
Keren Zhu321371e2024-05-15 19:49:5242 // Simulates a user click on the action button for the given `id`.
43 virtual void Press(const extensions::ExtensionId& id) = 0;
44
Devlin Cronin5ce7d582021-05-05 23:01:0345 // Inspects the extension popup for the action with the given `id`.
46 virtual void InspectPopup(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5747
Devlin Cronin5ce7d582021-05-05 23:01:0348 // Returns icon for the action for the given `id`.
49 virtual gfx::Image GetIcon(const extensions::ExtensionId& id) = 0;
[email protected]51a9ec42009-12-14 21:42:5750
Elly Fong-Jones914e0d52018-03-09 16:50:1451 virtual gfx::NativeView GetPopupNativeView() = 0;
[email protected]2e0a1502014-05-14 02:59:4352
tapted9e780e22017-06-01 06:13:1953 // Spins a RunLoop until the NativeWindow hosting |GetPopupNativeView()| is
Devlin Croninca5732012024-07-11 23:09:0154 // reported as active by the OS. This method is strange: it's not overridden
55 // by subclasses, and instead the implementation is selected at compile-time
56 // depending on the windowing system in use.
57 void WaitForPopup();
tapted9e780e22017-06-01 06:13:1958
[email protected]733337862009-12-19 01:27:5159 // Returns whether a browser action popup is being shown currently.
Elly Fong-Jones914e0d52018-03-09 16:50:1460 virtual bool HasPopup() = 0;
[email protected]733337862009-12-19 01:27:5161
[email protected]733337862009-12-19 01:27:5162 // Hides the given popup and returns whether the hide was successful.
Elly Fong-Jones914e0d52018-03-09 16:50:1463 virtual bool HidePopup() = 0;
[email protected]733337862009-12-19 01:27:5164
Sanchit Abrol9f4190ad2020-11-05 17:19:2565 // Waits for the ExtensionContainer's layout to be done.
66 virtual void WaitForExtensionsContainerLayout() = 0;
67
[email protected]733337862009-12-19 01:27:5168 // Returns the minimum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:1469 virtual gfx::Size GetMinPopupSize() = 0;
[email protected]733337862009-12-19 01:27:5170
71 // Returns the maximum allowed size of an extension popup.
Elly Fong-Jones914e0d52018-03-09 16:50:1472 virtual gfx::Size GetMaxPopupSize() = 0;
73
Sanchit Abrol9f4190ad2020-11-05 17:19:2574 // Returns the maximum available size to place a bubble anchored to
Devlin Cronin5ce7d582021-05-05 23:01:0375 // the action with the given `id` on screen.
Sanchit Abrol9f4190ad2020-11-05 17:19:2576 virtual gfx::Size GetMaxAvailableSizeToFitBubbleOnScreen(
Devlin Cronin5ce7d582021-05-05 23:01:0377 const extensions::ExtensionId& id) = 0;
Sanchit Abrol9f4190ad2020-11-05 17:19:2578
Elly Fong-Jones914e0d52018-03-09 16:50:1479 protected:
Sorin Jianuadfd3bf2024-12-05 22:32:4380 ExtensionActionTestHelper() = default;
[email protected]51a9ec42009-12-14 21:42:5781};
82
Devlin Cronine458a222019-12-30 22:39:3783#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_ACTION_TEST_HELPER_H_