Skip to content

Commit

Permalink
fix: clean up devtools frontend_host on webcontents destroy (#40666)
Browse files Browse the repository at this point in the history
* fix: clean up devtools frontend_host on destroy

* chore: use IsInPrimaryMainFrame instead of IsInMainFrame

* test: add a test for re-opening devtools
  • Loading branch information
albertxing committed Dec 1, 2023
1 parent 344b7f0 commit 3609fc7
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
5 changes: 3 additions & 2 deletions shell/browser/ui/inspectable_web_contents.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1007,6 +1007,7 @@ void InspectableWebContents::WebContentsDestroyed() {
Observe(nullptr);
Detach();
embedder_message_dispatcher_.reset();
frontend_host_.reset();

if (view_ && view_->GetDelegate())
view_->GetDelegate()->DevToolsClosed();
Expand Down Expand Up @@ -1052,7 +1053,7 @@ void InspectableWebContents::OnWebContentsFocused(

void InspectableWebContents::ReadyToCommitNavigation(
content::NavigationHandle* navigation_handle) {
if (navigation_handle->IsInMainFrame()) {
if (navigation_handle->IsInPrimaryMainFrame()) {
if (navigation_handle->GetRenderFrameHost() ==
GetDevToolsWebContents()->GetPrimaryMainFrame() &&
frontend_host_) {
Expand All @@ -1069,7 +1070,7 @@ void InspectableWebContents::ReadyToCommitNavigation(

void InspectableWebContents::DidFinishNavigation(
content::NavigationHandle* navigation_handle) {
if (navigation_handle->IsInMainFrame() ||
if (navigation_handle->IsInPrimaryMainFrame() ||
!navigation_handle->GetURL().SchemeIs("chrome-extension") ||
!navigation_handle->HasCommitted())
return;
Expand Down
18 changes: 18 additions & 0 deletions spec/api-web-contents-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,24 @@ describe('webContents module', () => {
await devtoolsOpened;
expect(w.webContents.getDevToolsTitle()).to.equal('myTitle');
});

it('can re-open devtools', async () => {
const w = new BrowserWindow({ show: false });
const devtoolsOpened = once(w.webContents, 'devtools-opened');
w.webContents.openDevTools({ mode: 'detach', activate: true });
await devtoolsOpened;
expect(w.webContents.isDevToolsOpened()).to.be.true();

const devtoolsClosed = once(w.webContents, 'devtools-closed');
w.webContents.closeDevTools();
await devtoolsClosed;
expect(w.webContents.isDevToolsOpened()).to.be.false();

const devtoolsOpened2 = once(w.webContents, 'devtools-opened');
w.webContents.openDevTools({ mode: 'detach', activate: true });
await devtoolsOpened2;
expect(w.webContents.isDevToolsOpened()).to.be.true();
});
});

describe('setDevToolsTitle() API', () => {
Expand Down

0 comments on commit 3609fc7

Please sign in to comment.