Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: headless/lib/browser/headless_devtools_manager_delegate.cc

Issue 2626823003: [headless] Add default browser context to HeadlessBrowser. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: headless/lib/browser/headless_devtools_manager_delegate.cc
diff --git a/headless/lib/browser/headless_devtools_manager_delegate.cc b/headless/lib/browser/headless_devtools_manager_delegate.cc
index 0c82f334ab882d7a28a712106a59a99dd862914e..ccdc864b0132e7adf1aa90afc5a49b00295673e5 100644
--- a/headless/lib/browser/headless_devtools_manager_delegate.cc
+++ b/headless/lib/browser/headless_devtools_manager_delegate.cc
@@ -20,9 +20,48 @@
namespace headless {
+namespace {
+const char kIdParam[] = "id";
+const char kResultParam[] = "result";
+const char kErrorParam[] = "error";
+const char kErrorCodeParam[] = "code";
+const char kErrorMessageParam[] = "message";
+
+// JSON RPC 2.0 spec: http://www.jsonrpc.org/specification#error_object
+enum Error {
+ kErrorInvalidParam = -32602
+};
+
+std::unique_ptr<base::DictionaryValue> CreateSuccessResponse(
+ int command_id,
+ std::unique_ptr<base::Value> result) {
+ if (!result)
+ result.reset(new base::DictionaryValue());
+
+ std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+ response->SetInteger(kIdParam, command_id);
+ response->Set(kResultParam, std::move(result));
+ return response;
+}
+
+std::unique_ptr<base::DictionaryValue> CreateInvalidParamResponse(
+ int command_id,
+ const std::string& param) {
+ std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+ base::DictionaryValue* error_object = new base::DictionaryValue();
+ response->Set(kErrorParam, error_object);
alex clarke (OOO till 29th) 2017/01/11 10:06:11 This method is depreciated. It will probably make
Eric Seckler 2017/01/11 10:14:43 Sure thing!
+ error_object->SetInteger(kErrorCodeParam, kErrorInvalidParam);
+ error_object->SetString(
+ kErrorMessageParam,
+ base::StringPrintf("Missing or invalid '%s' parameter", param.c_str()));
+
+ return response;
+}
+} // namespace
+
HeadlessDevToolsManagerDelegate::HeadlessDevToolsManagerDelegate(
base::WeakPtr<HeadlessBrowserImpl> browser)
- : browser_(std::move(browser)), default_browser_context_(nullptr) {
+ : browser_(std::move(browser)) {
command_map_["Target.createTarget"] =
&HeadlessDevToolsManagerDelegate::CreateTarget;
command_map_["Target.closeTarget"] =
@@ -55,19 +94,15 @@ base::DictionaryValue* HeadlessDevToolsManagerDelegate::HandleCommand(
if (find_it == command_map_.end())
return nullptr;
CommandMemberFnPtr command_fn_ptr = find_it->second;
- std::unique_ptr<base::Value> cmd_result(((this)->*command_fn_ptr)(params));
- if (!cmd_result)
- return nullptr;
-
- std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
- result->SetInteger("id", id);
- result->Set("result", std::move(cmd_result));
- return result.release();
+ std::unique_ptr<base::DictionaryValue> cmd_result(
+ ((this)->*command_fn_ptr)(id, params));
+ return cmd_result.release();
}
std::string HeadlessDevToolsManagerDelegate::GetDiscoveryPageHTML() {
- return ResourceBundle::GetSharedInstance().GetRawDataResource(
- IDR_HEADLESS_LIB_DEVTOOLS_DISCOVERY_PAGE).as_string();
+ return ResourceBundle::GetSharedInstance()
+ .GetRawDataResource(IDR_HEADLESS_LIB_DEVTOOLS_DISCOVERY_PAGE)
+ .as_string();
}
std::string HeadlessDevToolsManagerDelegate::GetFrontendResource(
@@ -75,7 +110,9 @@ std::string HeadlessDevToolsManagerDelegate::GetFrontendResource(
return content::DevToolsFrontendHost::GetFrontendResource(path).as_string();
}
-std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CreateTarget(
+std::unique_ptr<base::DictionaryValue>
+HeadlessDevToolsManagerDelegate::CreateTarget(
+ int command_id,
const base::DictionaryValue* params) {
std::string url;
std::string browser_context_id;
@@ -86,35 +123,38 @@ std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CreateTarget(
params->GetInteger("width", &width);
params->GetInteger("height", &height);
- // TODO(alexclarke): Should we fail when user passes incorrect id?
HeadlessBrowserContext* context =
browser_->GetBrowserContextForId(browser_context_id);
- if (!context) {
- if (!default_browser_context_) {
- default_browser_context_ =
- browser_->CreateBrowserContextBuilder().Build();
- }
- context = default_browser_context_;
+ if (!browser_context_id.empty()) {
+ context = browser_->GetBrowserContextForId(browser_context_id);
+ } else {
+ context = browser_->GetDefaultBrowserContext();
}
+ if (!context)
+ return CreateInvalidParamResponse(command_id, "browserContextId");
+
HeadlessWebContentsImpl* web_contents_impl =
HeadlessWebContentsImpl::From(context->CreateWebContentsBuilder()
.SetInitialURL(GURL(url))
.SetWindowSize(gfx::Size(width, height))
.Build());
- return target::CreateTargetResult::Builder()
- .SetTargetId(web_contents_impl->GetDevToolsAgentHostId())
- .Build()
- ->Serialize();
+ std::unique_ptr<base::Value> result(
+ target::CreateTargetResult::Builder()
+ .SetTargetId(web_contents_impl->GetDevToolsAgentHostId())
+ .Build()
+ ->Serialize());
+ return CreateSuccessResponse(command_id, std::move(result));
}
-std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CloseTarget(
+std::unique_ptr<base::DictionaryValue>
+HeadlessDevToolsManagerDelegate::CloseTarget(
+ int command_id,
const base::DictionaryValue* params) {
std::string target_id;
- if (!params->GetString("targetId", &target_id)) {
- return nullptr;
- }
+ if (!params->GetString("targetId", &target_id))
+ return CreateInvalidParamResponse(command_id, "targetId");
HeadlessWebContents* web_contents =
browser_->GetWebContentsForDevToolsAgentHostId(target_id);
bool success = false;
@@ -122,46 +162,51 @@ std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::CloseTarget(
web_contents->Close();
success = true;
}
- return target::CloseTargetResult::Builder()
- .SetSuccess(success)
- .Build()
- ->Serialize();
+ std::unique_ptr<base::Value> result(target::CloseTargetResult::Builder()
+ .SetSuccess(success)
+ .Build()
+ ->Serialize());
+ return CreateSuccessResponse(command_id, std::move(result));
}
-std::unique_ptr<base::Value>
+std::unique_ptr<base::DictionaryValue>
HeadlessDevToolsManagerDelegate::CreateBrowserContext(
+ int command_id,
const base::DictionaryValue* params) {
HeadlessBrowserContext* browser_context =
browser_->CreateBrowserContextBuilder().Build();
- std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
- return target::CreateBrowserContextResult::Builder()
- .SetBrowserContextId(browser_context->Id())
- .Build()
- ->Serialize();
+ std::unique_ptr<base::Value> result(
+ target::CreateBrowserContextResult::Builder()
+ .SetBrowserContextId(browser_context->Id())
+ .Build()
+ ->Serialize());
+ return CreateSuccessResponse(command_id, std::move(result));
}
-std::unique_ptr<base::Value>
+std::unique_ptr<base::DictionaryValue>
HeadlessDevToolsManagerDelegate::DisposeBrowserContext(
+ int command_id,
const base::DictionaryValue* params) {
std::string browser_context_id;
- if (!params->GetString("browserContextId", &browser_context_id)) {
- return nullptr;
- }
+ if (!params->GetString("browserContextId", &browser_context_id))
+ return CreateInvalidParamResponse(command_id, "browserContextId");
HeadlessBrowserContext* context =
browser_->GetBrowserContextForId(browser_context_id);
bool success = false;
- if (context && context != default_browser_context_ &&
+ if (context && context != browser_->GetDefaultBrowserContext() &&
context->GetAllWebContents().empty()) {
success = true;
context->Close();
}
- return target::DisposeBrowserContextResult::Builder()
- .SetSuccess(success)
- .Build()
- ->Serialize();
+ std::unique_ptr<base::Value> result(
+ target::DisposeBrowserContextResult::Builder()
+ .SetSuccess(success)
+ .Build()
+ ->Serialize());
+ return CreateSuccessResponse(command_id, std::move(result));
}
} // namespace headless

Powered by Google App Engine
This is Rietveld 408576698