Commit 0c5d7cec authored by Andrey Lushnikov's avatar Andrey Lushnikov Committed by Commit Bot

DevTools: fix Target.disposeBrowserContext() to work with empty contexts

Currently, chrome's implementation of Target.disposeBrowserContext()
fails to dispose empty browser contexts.

We don't need to wait for browsers to close if there are no opened
browser windows to destroy a browser context.

R=dgozman

Change-Id: I7b41a1b55b398f543a547fd6ead9f83af7f8a843
Reviewed-on: https://chromium-review.googlesource.com/1050909Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Commit-Queue: Andrey Lushnikov <lushnikov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#557085}
parent ffb451b2
......@@ -2178,6 +2178,13 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, CreateBrowserContext) {
DevToolsWindowTesting::CloseDevToolsWindowSync(window_);
}
IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, DisposeEmptyBrowserContext) {
window_ =
DevToolsWindowTesting::OpenDevToolsWindowSync(GetInspectedTab(), false);
RunTestMethod("testDisposeEmptyBrowserContext");
DevToolsWindowTesting::CloseDevToolsWindowSync(window_);
}
IN_PROC_BROWSER_TEST_F(SitePerProcessDevToolsSanityTest, InspectElement) {
GURL url(embedded_test_server()->GetURL("a.com", "/devtools/oopif.html"));
GURL iframe_url(
......
......@@ -92,11 +92,26 @@ void DevToolsBrowserContextManager::DisposeBrowserContext(
return;
}
Profile* profile = it->second->profile();
bool has_opened_browser = false;
for (auto* opened_browser : *BrowserList::GetInstance()) {
if (opened_browser->profile() == profile) {
has_opened_browser = true;
break;
}
}
// If no browsers are opened - dispose right away.
if (!has_opened_browser) {
registrations_.erase(it);
callback->sendSuccess();
return;
}
if (pending_context_disposals_.empty())
BrowserList::AddObserver(this);
pending_context_disposals_[context_id] = std::move(callback);
Profile* profile = it->second->profile();
BrowserList::CloseAllBrowsersWithIncognitoProfile(
profile, base::DoNothing(), base::DoNothing(),
true /* skip_beforeunload */);
......
......@@ -1110,6 +1110,18 @@
this.releaseControl();
};
TestSuite.prototype.testDisposeEmptyBrowserContext = async function(url) {
this.takeControl();
const targetAgent = SDK.targetManager.mainTarget().targetAgent();
const {browserContextId} = await targetAgent.invoke_createBrowserContext();
const response1 = await targetAgent.invoke_getBrowserContexts();
this.assertEquals(response1.browserContextIds.length, 1);
await targetAgent.invoke_disposeBrowserContext({browserContextId});
const response2 = await targetAgent.invoke_getBrowserContexts();
this.assertEquals(response2.browserContextIds.length, 0);
this.releaseControl();
};
TestSuite.prototype.testCreateBrowserContext = async function(url) {
this.takeControl();
const browserContextIds = [];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment