fix: clean up devtools frontend_host on webcontents destroy (#40666)
* fix: clean up devtools frontend_host on destroy * chore: use IsInPrimaryMainFrame instead of IsInMainFrame * test: add a test for re-opening devtools
This commit is contained in:
parent
344b7f0d06
commit
3609fc7402
2 changed files with 21 additions and 2 deletions
|
@ -1007,6 +1007,7 @@ void InspectableWebContents::WebContentsDestroyed() {
|
||||||
Observe(nullptr);
|
Observe(nullptr);
|
||||||
Detach();
|
Detach();
|
||||||
embedder_message_dispatcher_.reset();
|
embedder_message_dispatcher_.reset();
|
||||||
|
frontend_host_.reset();
|
||||||
|
|
||||||
if (view_ && view_->GetDelegate())
|
if (view_ && view_->GetDelegate())
|
||||||
view_->GetDelegate()->DevToolsClosed();
|
view_->GetDelegate()->DevToolsClosed();
|
||||||
|
@ -1052,7 +1053,7 @@ void InspectableWebContents::OnWebContentsFocused(
|
||||||
|
|
||||||
void InspectableWebContents::ReadyToCommitNavigation(
|
void InspectableWebContents::ReadyToCommitNavigation(
|
||||||
content::NavigationHandle* navigation_handle) {
|
content::NavigationHandle* navigation_handle) {
|
||||||
if (navigation_handle->IsInMainFrame()) {
|
if (navigation_handle->IsInPrimaryMainFrame()) {
|
||||||
if (navigation_handle->GetRenderFrameHost() ==
|
if (navigation_handle->GetRenderFrameHost() ==
|
||||||
GetDevToolsWebContents()->GetPrimaryMainFrame() &&
|
GetDevToolsWebContents()->GetPrimaryMainFrame() &&
|
||||||
frontend_host_) {
|
frontend_host_) {
|
||||||
|
@ -1069,7 +1070,7 @@ void InspectableWebContents::ReadyToCommitNavigation(
|
||||||
|
|
||||||
void InspectableWebContents::DidFinishNavigation(
|
void InspectableWebContents::DidFinishNavigation(
|
||||||
content::NavigationHandle* navigation_handle) {
|
content::NavigationHandle* navigation_handle) {
|
||||||
if (navigation_handle->IsInMainFrame() ||
|
if (navigation_handle->IsInPrimaryMainFrame() ||
|
||||||
!navigation_handle->GetURL().SchemeIs("chrome-extension") ||
|
!navigation_handle->GetURL().SchemeIs("chrome-extension") ||
|
||||||
!navigation_handle->HasCommitted())
|
!navigation_handle->HasCommitted())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -639,6 +639,24 @@ describe('webContents module', () => {
|
||||||
await devtoolsOpened;
|
await devtoolsOpened;
|
||||||
expect(w.webContents.getDevToolsTitle()).to.equal('myTitle');
|
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', () => {
|
describe('setDevToolsTitle() API', () => {
|
||||||
|
|
Loading…
Reference in a new issue