Commit 7c173628 authored by Andrey Lushnikov's avatar Andrey Lushnikov Committed by Commit Bot

DevTools: implement Target.getBrowserContexts() method

This patch implements Target.getBrowserContexts() method that
returns all the contexts created with Target.createBrowserContext()
calls.

R=dgozman, alexclarke, caseq

BUG: 836272
Change-Id: Ib39f947c5591ddb2d6158d8417bc1c8b82561d15
Reviewed-on: https://chromium-review.googlesource.com/1049266
Commit-Queue: Andrey Lushnikov <lushnikov@chromium.org>
Reviewed-by: default avatarDmitry Gozman <dgozman@chromium.org>
Reviewed-by: default avatarAlex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556977}
parent 4e8093de
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
}, },
{ {
"domain": "Target", "domain": "Target",
"include": [ "setRemoteLocations", "createBrowserContext", "createTarget", "disposeBrowserContext" ], "include": [ "setRemoteLocations", "createBrowserContext", "getBrowserContexts", "createTarget", "disposeBrowserContext" ],
"async": ["disposeBrowserContext"], "async": ["disposeBrowserContext"],
"include_events": [] "include_events": []
}, },
......
...@@ -17,6 +17,8 @@ class DevToolsBrowserContextManager : public BrowserListObserver { ...@@ -17,6 +17,8 @@ class DevToolsBrowserContextManager : public BrowserListObserver {
public: public:
DevToolsBrowserContextManager(); DevToolsBrowserContextManager();
protocol::Response CreateBrowserContext(std::string* out_context_id); protocol::Response CreateBrowserContext(std::string* out_context_id);
protocol::Response GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids);
Profile* GetBrowserContext(const std::string& context_id); Profile* GetBrowserContext(const std::string& context_id);
void DisposeBrowserContext( void DisposeBrowserContext(
const std::string& context_id, const std::string& context_id,
...@@ -64,6 +66,16 @@ protocol::Response DevToolsBrowserContextManager::CreateBrowserContext( ...@@ -64,6 +66,16 @@ protocol::Response DevToolsBrowserContextManager::CreateBrowserContext(
return protocol::Response::OK(); return protocol::Response::OK();
} }
protocol::Response DevToolsBrowserContextManager::GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids) {
*browser_context_ids = std::make_unique<protocol::Array<protocol::String>>();
for (const auto& registration_pair : registrations_) {
(*browser_context_ids)
->addItem(registration_pair.second->profile()->UniqueId());
}
return protocol::Response::OK();
}
void DevToolsBrowserContextManager::DisposeBrowserContext( void DevToolsBrowserContextManager::DisposeBrowserContext(
const std::string& context_id, const std::string& context_id,
std::unique_ptr<TargetHandler::DisposeBrowserContextCallback> callback) { std::unique_ptr<TargetHandler::DisposeBrowserContextCallback> callback) {
...@@ -206,6 +218,12 @@ protocol::Response TargetHandler::CreateBrowserContext( ...@@ -206,6 +218,12 @@ protocol::Response TargetHandler::CreateBrowserContext(
out_context_id); out_context_id);
} }
protocol::Response TargetHandler::GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids) {
return g_devtools_browser_context_manager.Get().GetBrowserContexts(
browser_context_ids);
}
void TargetHandler::DisposeBrowserContext( void TargetHandler::DisposeBrowserContext(
const std::string& context_id, const std::string& context_id,
std::unique_ptr<DisposeBrowserContextCallback> callback) { std::unique_ptr<DisposeBrowserContextCallback> callback) {
......
...@@ -36,6 +36,9 @@ class TargetHandler : public protocol::Target::Backend { ...@@ -36,6 +36,9 @@ class TargetHandler : public protocol::Target::Backend {
protocol::Maybe<std::string> browser_context_id, protocol::Maybe<std::string> browser_context_id,
protocol::Maybe<bool> enable_begin_frame_control, protocol::Maybe<bool> enable_begin_frame_control,
std::string* out_target_id) override; std::string* out_target_id) override;
protocol::Response GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids)
override;
void DisposeBrowserContext( void DisposeBrowserContext(
const std::string& context_id, const std::string& context_id,
std::unique_ptr<DisposeBrowserContextCallback> callback) override; std::unique_ptr<DisposeBrowserContextCallback> callback) override;
......
...@@ -396,6 +396,11 @@ Response TargetHandler::DisposeBrowserContext(const std::string& context_id) { ...@@ -396,6 +396,11 @@ Response TargetHandler::DisposeBrowserContext(const std::string& context_id) {
return Response::Error("Not supported"); return Response::Error("Not supported");
} }
Response TargetHandler::GetBrowserContexts(
std::unique_ptr<protocol::Array<String>>* browser_context_ids) {
return Response::Error("Not supported");
}
Response TargetHandler::CreateTarget(const std::string& url, Response TargetHandler::CreateTarget(const std::string& url,
Maybe<int> width, Maybe<int> width,
Maybe<int> height, Maybe<int> height,
......
...@@ -64,6 +64,8 @@ class TargetHandler : public DevToolsDomainHandler, ...@@ -64,6 +64,8 @@ class TargetHandler : public DevToolsDomainHandler,
bool* out_success) override; bool* out_success) override;
Response CreateBrowserContext(std::string* out_context_id) override; Response CreateBrowserContext(std::string* out_context_id) override;
Response DisposeBrowserContext(const std::string& context_id) override; Response DisposeBrowserContext(const std::string& context_id) override;
Response GetBrowserContexts(
std::unique_ptr<protocol::Array<String>>* browser_context_ids) override;
Response CreateTarget(const std::string& url, Response CreateTarget(const std::string& url,
Maybe<int> width, Maybe<int> width,
Maybe<int> height, Maybe<int> height,
......
...@@ -101,5 +101,15 @@ Response TargetHandler::DisposeBrowserContext(const std::string& context_id) { ...@@ -101,5 +101,15 @@ Response TargetHandler::DisposeBrowserContext(const std::string& context_id) {
return Response::OK(); return Response::OK();
} }
Response TargetHandler::GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids) {
*browser_context_ids = std::make_unique<protocol::Array<protocol::String>>();
for (auto* context : browser()->GetAllBrowserContexts()) {
if (context != browser()->GetDefaultBrowserContext())
(*browser_context_ids)->addItem(context->Id());
}
return Response::OK();
}
} // namespace protocol } // namespace protocol
} // namespace headless } // namespace headless
...@@ -29,6 +29,9 @@ class TargetHandler : public DomainHandler, public Target::Backend { ...@@ -29,6 +29,9 @@ class TargetHandler : public DomainHandler, public Target::Backend {
bool* out_success) override; bool* out_success) override;
Response CreateBrowserContext(std::string* out_context_id) override; Response CreateBrowserContext(std::string* out_context_id) override;
Response DisposeBrowserContext(const std::string& context_id) override; Response DisposeBrowserContext(const std::string& context_id) override;
Response GetBrowserContexts(
std::unique_ptr<protocol::Array<protocol::String>>* browser_context_ids)
override;
private: private:
DISALLOW_COPY_AND_ASSIGN(TargetHandler); DISALLOW_COPY_AND_ASSIGN(TargetHandler);
......
...@@ -642,6 +642,21 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, ...@@ -642,6 +642,21 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest,
if (context_id_one_.empty() || context_id_two_.empty()) if (context_id_one_.empty() || context_id_two_.empty())
return; return;
devtools_client_->GetTarget()->GetExperimental()->GetBrowserContexts(
target::GetBrowserContextsParams::Builder().Build(),
base::BindOnce(&TargetDomainCreateTwoContexts::OnGetBrowserContexts,
base::Unretained(this)));
}
void OnGetBrowserContexts(
std::unique_ptr<target::GetBrowserContextsResult> result) {
const std::vector<std::string>* contexts = result->GetBrowserContextIds();
EXPECT_EQ(2u, contexts->size());
EXPECT_TRUE(std::find(contexts->begin(), contexts->end(),
context_id_one_) != contexts->end());
EXPECT_TRUE(std::find(contexts->begin(), contexts->end(),
context_id_two_) != contexts->end());
devtools_client_->GetTarget()->GetExperimental()->CreateTarget( devtools_client_->GetTarget()->GetExperimental()->CreateTarget(
target::CreateTargetParams::Builder() target::CreateTargetParams::Builder()
.SetUrl("about://blank") .SetUrl("about://blank")
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"options": [ "options": [
{ {
"domain": "Target", "domain": "Target",
"include": ["createTarget", "closeTarget", "createBrowserContext", "disposeBrowserContext"], "include": ["createTarget", "closeTarget", "getBrowserContexts", "createBrowserContext", "disposeBrowserContext"],
"include_events": [] "include_events": []
}, },
{ {
......
...@@ -5528,6 +5528,12 @@ domain Target ...@@ -5528,6 +5528,12 @@ domain Target
# The id of the context created. # The id of the context created.
BrowserContextID browserContextId BrowserContextID browserContextId
# Returns all browser contexts created with `Target.createBrowserContext` method.
experimental command getBrowserContexts
returns
# An array of browser context ids.
array of BrowserContextID browserContextIds
# Creates a new page. # Creates a new page.
command createTarget command createTarget
parameters parameters
......
...@@ -1113,10 +1113,16 @@ ...@@ -1113,10 +1113,16 @@
TestSuite.prototype.testCreateBrowserContext = async function(url) { TestSuite.prototype.testCreateBrowserContext = async function(url) {
this.takeControl(); this.takeControl();
const browserContextIds = []; const browserContextIds = [];
const targetAgent = SDK.targetManager.mainTarget().targetAgent();
const target1 = await createIsolatedTarget(url); const target1 = await createIsolatedTarget(url);
const target2 = await createIsolatedTarget(url); const target2 = await createIsolatedTarget(url);
const response = await targetAgent.invoke_getBrowserContexts();
this.assertEquals(response.browserContextIds.length, 2);
this.assertTrue(response.browserContextIds.includes(browserContextIds[0]));
this.assertTrue(response.browserContextIds.includes(browserContextIds[1]));
await evalCode(target1, 'localStorage.setItem("page1", "page1")'); await evalCode(target1, 'localStorage.setItem("page1", "page1")');
await evalCode(target2, 'localStorage.setItem("page2", "page2")'); await evalCode(target2, 'localStorage.setItem("page2", "page2")');
...@@ -1139,7 +1145,6 @@ ...@@ -1139,7 +1145,6 @@
* @return {!Promise<!SDK.Target>} * @return {!Promise<!SDK.Target>}
*/ */
async function createIsolatedTarget(url) { async function createIsolatedTarget(url) {
const targetAgent = SDK.targetManager.mainTarget().targetAgent();
const {browserContextId} = await targetAgent.invoke_createBrowserContext(); const {browserContextId} = await targetAgent.invoke_createBrowserContext();
browserContextIds.push(browserContextId); browserContextIds.push(browserContextId);
......
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