Avi Drissman | 4a8573c | 2022-09-09 19:35:54 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ |
| 6 | #define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ |
| 7 | |
Avi Drissman | 02e49e58 | 2023-01-07 01:23:18 | [diff] [blame] | 8 | #include "base/functional/callback.h" |
Ali Hijazi | e63cbaf6 | 2023-12-20 19:29:35 | [diff] [blame] | 9 | #include "base/memory/raw_ptr.h" |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 10 | #include "chrome/browser/devtools/devtools_window.h" |
tfarina | 3b0452d | 2014-12-31 15:20:09 | [diff] [blame] | 11 | #include "ui/gfx/geometry/rect.h" |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 12 | |
| 13 | class Browser; |
| 14 | class Profile; |
| 15 | |
| 16 | namespace content { |
| 17 | class DevToolsAgentHost; |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 18 | class MessageLoopRunner; |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 19 | class WebContents; |
| 20 | } |
| 21 | |
| 22 | class DevToolsWindowTesting { |
| 23 | public: |
Peter Boström | 53c6c595 | 2021-09-17 09:41:26 | [diff] [blame] | 24 | DevToolsWindowTesting(const DevToolsWindowTesting&) = delete; |
| 25 | DevToolsWindowTesting& operator=(const DevToolsWindowTesting&) = delete; |
| 26 | |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 27 | virtual ~DevToolsWindowTesting(); |
| 28 | |
| 29 | // The following methods block until DevToolsWindow is completely loaded. |
| 30 | static DevToolsWindow* OpenDevToolsWindowSync( |
pfeldman@chromium.org | b3f957e6 | 2014-08-08 10:09:02 | [diff] [blame] | 31 | content::WebContents* inspected_web_contents, |
Simon Zünd | 5fed603a | 2021-10-19 06:21:14 | [diff] [blame] | 32 | Profile* profile, |
| 33 | bool is_docked); |
| 34 | static DevToolsWindow* OpenDevToolsWindowSync( |
| 35 | content::WebContents* inspected_web_contents, |
pfeldman@chromium.org | b3f957e6 | 2014-08-08 10:09:02 | [diff] [blame] | 36 | bool is_docked); |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 37 | static DevToolsWindow* OpenDevToolsWindowSync( |
| 38 | Browser* browser, bool is_docked); |
Dmitry Gozman | dc7f367 | 2017-11-20 15:52:46 | [diff] [blame] | 39 | static DevToolsWindow* OpenDevToolsWindowSync( |
| 40 | Profile* profile, |
| 41 | scoped_refptr<content::DevToolsAgentHost> agent_host); |
Dmitry Gozman | 2731b56 | 2018-09-10 23:19:02 | [diff] [blame] | 42 | static DevToolsWindow* OpenDiscoveryDevToolsWindowSync(Profile* profile); |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 43 | |
| 44 | // Closes the window like it was user-initiated. |
| 45 | static void CloseDevToolsWindow(DevToolsWindow* window); |
| 46 | // Blocks until window is closed. |
| 47 | static void CloseDevToolsWindowSync(DevToolsWindow* window); |
| 48 | |
| 49 | static DevToolsWindowTesting* Get(DevToolsWindow* window); |
| 50 | |
| 51 | Browser* browser(); |
| 52 | content::WebContents* main_web_contents(); |
| 53 | content::WebContents* toolbox_web_contents(); |
| 54 | void SetInspectedPageBounds(const gfx::Rect& bounds); |
danakj | 710b4c0 | 2019-11-28 16:08:45 | [diff] [blame] | 55 | void SetCloseCallback(base::OnceClosure closure); |
Dmitry Gozman | 57b92ce | 2017-12-28 22:24:54 | [diff] [blame] | 56 | void SetOpenNewWindowForPopups(bool value); |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 57 | |
| 58 | private: |
| 59 | friend class DevToolsWindow; |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 60 | friend class DevToolsWindowCreationObserver; |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 61 | |
| 62 | explicit DevToolsWindowTesting(DevToolsWindow* window); |
| 63 | static void WaitForDevToolsWindowLoad(DevToolsWindow* window); |
| 64 | static void WindowClosed(DevToolsWindow* window); |
| 65 | static DevToolsWindowTesting* Find(DevToolsWindow* window); |
| 66 | |
| 67 | DevToolsWindow* devtools_window_; |
danakj | 710b4c0 | 2019-11-28 16:08:45 | [diff] [blame] | 68 | base::OnceClosure close_callback_; |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 69 | }; |
| 70 | |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 71 | class DevToolsWindowCreationObserver { |
| 72 | public: |
| 73 | DevToolsWindowCreationObserver(); |
Peter Boström | 53c6c595 | 2021-09-17 09:41:26 | [diff] [blame] | 74 | |
| 75 | DevToolsWindowCreationObserver(const DevToolsWindowCreationObserver&) = |
| 76 | delete; |
| 77 | DevToolsWindowCreationObserver& operator=( |
| 78 | const DevToolsWindowCreationObserver&) = delete; |
| 79 | |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 80 | ~DevToolsWindowCreationObserver(); |
| 81 | |
Ali Hijazi | e63cbaf6 | 2023-12-20 19:29:35 | [diff] [blame] | 82 | using DevToolsWindows = |
| 83 | std::vector<raw_ptr<DevToolsWindow, VectorExperimental>>; |
dgozman | 010f9e0e | 2016-02-24 21:25:53 | [diff] [blame] | 84 | const DevToolsWindows& devtools_windows() { return devtools_windows_; } |
| 85 | DevToolsWindow* devtools_window(); |
| 86 | |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 87 | void Wait(); |
| 88 | void WaitForLoad(); |
dgozman | 010f9e0e | 2016-02-24 21:25:53 | [diff] [blame] | 89 | void CloseAllSync(); |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 90 | |
| 91 | private: |
| 92 | friend class DevToolsWindow; |
| 93 | |
| 94 | void DevToolsWindowCreated(DevToolsWindow* devtools_window); |
| 95 | |
Leonard Grey | e91d21c | 2021-01-14 16:37:32 | [diff] [blame] | 96 | base::RepeatingCallback<void(DevToolsWindow*)> creation_callback_; |
dgozman | 010f9e0e | 2016-02-24 21:25:53 | [diff] [blame] | 97 | DevToolsWindows devtools_windows_; |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 98 | scoped_refptr<content::MessageLoopRunner> runner_; |
dgozman | ab68041 | 2016-02-04 02:21:37 | [diff] [blame] | 99 | }; |
| 100 | |
dgozman@chromium.org | d118ad7 | 2014-07-21 14:07:01 | [diff] [blame] | 101 | #endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_WINDOW_TESTING_H_ |