fix: enable workaround for nativeWindowOpen hang (#22825)
This commit is contained in:
parent
21c839578f
commit
5154e8ff75
3 changed files with 61 additions and 0 deletions
|
@ -663,6 +663,30 @@ void WebContents::WebContentsCreatedWithFullParams(
|
||||||
tracker->body = params.body;
|
tracker->body = params.body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WebContents::IsWebContentsCreationOverridden(
|
||||||
|
content::SiteInstance* source_site_instance,
|
||||||
|
content::mojom::WindowContainerType window_container_type,
|
||||||
|
const GURL& opener_url,
|
||||||
|
const std::string& frame_name,
|
||||||
|
const GURL& target_url) {
|
||||||
|
if (Emit("-will-add-new-contents", target_url, frame_name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
content::WebContents* WebContents::CreateCustomWebContents(
|
||||||
|
content::RenderFrameHost* opener,
|
||||||
|
content::SiteInstance* source_site_instance,
|
||||||
|
bool is_new_browsing_instance,
|
||||||
|
const GURL& opener_url,
|
||||||
|
const std::string& frame_name,
|
||||||
|
const GURL& target_url,
|
||||||
|
const std::string& partition_id,
|
||||||
|
content::SessionStorageNamespace* session_storage_namespace) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void WebContents::AddNewContents(
|
void WebContents::AddNewContents(
|
||||||
content::WebContents* source,
|
content::WebContents* source,
|
||||||
std::unique_ptr<content::WebContents> new_contents,
|
std::unique_ptr<content::WebContents> new_contents,
|
||||||
|
|
|
@ -384,6 +384,21 @@ class WebContents : public gin_helper::TrackableObject<WebContents>,
|
||||||
const base::string16& message,
|
const base::string16& message,
|
||||||
int32_t line_no,
|
int32_t line_no,
|
||||||
const base::string16& source_id) override;
|
const base::string16& source_id) override;
|
||||||
|
bool IsWebContentsCreationOverridden(
|
||||||
|
content::SiteInstance* source_site_instance,
|
||||||
|
content::mojom::WindowContainerType window_container_type,
|
||||||
|
const GURL& opener_url,
|
||||||
|
const std::string& frame_name,
|
||||||
|
const GURL& target_url) override;
|
||||||
|
content::WebContents* CreateCustomWebContents(
|
||||||
|
content::RenderFrameHost* opener,
|
||||||
|
content::SiteInstance* source_site_instance,
|
||||||
|
bool is_new_browsing_instance,
|
||||||
|
const GURL& opener_url,
|
||||||
|
const std::string& frame_name,
|
||||||
|
const GURL& target_url,
|
||||||
|
const std::string& partition_id,
|
||||||
|
content::SessionStorageNamespace* session_storage_namespace) override;
|
||||||
void WebContentsCreatedWithFullParams(
|
void WebContentsCreatedWithFullParams(
|
||||||
content::WebContents* source_contents,
|
content::WebContents* source_contents,
|
||||||
int opener_render_process_id,
|
int opener_render_process_id,
|
||||||
|
|
|
@ -1829,4 +1829,26 @@ describe('webContents module', () => {
|
||||||
expect(body).to.equal('401');
|
expect(body).to.equal('401');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('emits a cancelable event before creating a child webcontents', async () => {
|
||||||
|
const w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
sandbox: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
w.webContents.on('-will-add-new-contents' as any, (event: any, url: any) => {
|
||||||
|
expect(url).to.equal('about:blank');
|
||||||
|
event.preventDefault();
|
||||||
|
});
|
||||||
|
let wasCalled = false;
|
||||||
|
w.webContents.on('new-window' as any, () => {
|
||||||
|
wasCalled = true;
|
||||||
|
});
|
||||||
|
await w.loadURL('about:blank');
|
||||||
|
await w.webContents.executeJavaScript(`window.open('about:blank')`);
|
||||||
|
await new Promise((resolve) => { process.nextTick(resolve); });
|
||||||
|
expect(wasCalled).to.equal(false);
|
||||||
|
await closeAllWindows();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue