chrome: Support Chrome and DevTools command execution (fixes #3282, fixes #3600)

Add new CefBrowserHost::[Can]ExecuteChromeCommand methods for executing
arbitrary Chrome commands.

Add support for existing CefBrowserHost::ShowDevTools, CloseDevTools and
HasDevTools methods.

DevTools windows now support the same Views callbacks as normal popup
windows with the new CefLifeSpanHandler::OnBeforeDevToolsPopup callback
as the DevTools-specific equivalent of OnBeforePopup.

Always create DevTools as an undocked window to support use of
ShowDevTools with default Chrome browser windows.

To test:

Run `ceftests --enable-chrome-runtime [--use-views]
     --gtest_filter=V8Test.OnUncaughtExceptionDevTools`

OR:

1. Run `cefclient --enable-chrome-runtime [--use-native]`
2. Select "Show DevTools", "Close DevTools" or "Inspect" from the
   right-click menu.
3. Notice that the DevTools window is Views-hosted (or native-hosted)
   and works as expected.

Add --use-default-popup to get a default styled popup in step 3.
This commit is contained in:
Marshall Greenblatt
2023-11-14 17:16:43 +00:00
parent d3d465b32e
commit 53ef570f57
50 changed files with 1173 additions and 240 deletions

View File

@@ -262,7 +262,7 @@ class TestHandler : public CefClient,
// number of times.
void SignalTestCompletion();
// Reuturns true if SignalTestCompletion() has been called the necessary
// Returns true if SignalTestCompletion() has been called the necessary
// number of times (may be 0), in which case TestComplete() will be called
// automatically when all browsers have closed. Must be called on the
// UI thread.
@@ -275,6 +275,11 @@ class TestHandler : public CefClient,
// Call OnTestTimeout() after the specified amount of time.
void SetTestTimeout(int timeout_ms = 5000, bool treat_as_error = true);
// Call prior to CreateBrowser() to configure whether browsers will be created
// as Views-hosted. Defaults to false unless the `--use-views` command-line
// flag is specified.
void SetUseViews(bool use_views);
// Returns the single UIThreadHelper instance, creating it if necessary. Must
// be called on the UI thread.
UIThreadHelper* GetUIThreadHelper();
@@ -290,7 +295,7 @@ class TestHandler : public CefClient,
NT_BROWSER,
NT_WINDOW,
};
void OnCreated(int browser_id, NotifyType type);
void OnCreated(int browser_id, NotifyType type, bool views_hosted);
void OnClosed(int browser_id, NotifyType type);
std::string MakeDebugStringPrefix() const;
@@ -300,10 +305,17 @@ class TestHandler : public CefClient,
CompletionState* completion_state_;
bool completion_state_owned_;
bool use_views_;
// Map of browser ID to browser object. Only accessed on the UI thread.
BrowserMap browser_map_;
struct NotifyStatus {
// True if this particular browser window is Views-hosted (see SetUseViews).
// Some tests create popup or DevTools windows with default handling (e.g.
// not Views-hosted).
bool views_hosted;
// Keyed by NotifyType.
TrackCallback got_created[2];
TrackCallback got_closed[2];