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

Side by Side Diff: headless/lib/browser/headless_devtools_manager_delegate.cc

Issue 2119063002: Add commands to manage tabs and contexts to Browser Domain (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing Sami's comments. Created 4 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "headless/lib/browser/headless_devtools_manager_delegate.h"
6
7 #include <string>
8
9 #include "base/guid.h"
10 #include "content/public/browser/web_contents.h"
11 #include "headless/lib/browser/headless_browser_context_impl.h"
12 #include "headless/lib/browser/headless_browser_impl.h"
13 #include "headless/lib/browser/headless_web_contents_impl.h"
14 #include "headless/public/domains/browser.h"
15
16 namespace headless {
17
18 HeadlessDevToolsManagerDelegate::HeadlessDevToolsManagerDelegate(
19 HeadlessBrowserImpl* browser)
20 : browser_(browser) {
21 command_map_["Browser.newPage"] = &HeadlessDevToolsManagerDelegate::newPage;
22 command_map_["Browser.closePage"] =
23 &HeadlessDevToolsManagerDelegate::closePage;
24 command_map_["Browser.newBrowserContext"] =
25 &HeadlessDevToolsManagerDelegate::newBrowserContext;
26 command_map_["Browser.closeBrowserContext"] =
27 &HeadlessDevToolsManagerDelegate::closeBrowserContext;
28 }
29
30 HeadlessDevToolsManagerDelegate::~HeadlessDevToolsManagerDelegate() {}
31
32 base::DictionaryValue* HeadlessDevToolsManagerDelegate::HandleCommand(
33 content::DevToolsAgentHost* agent_host,
34 base::DictionaryValue* command) {
35 int id;
36 std::string method;
37 const base::DictionaryValue* params = nullptr;
38 if (!command->GetInteger("id", &id) ||
39 !command->GetString("method", &method) ||
40 !command->GetDictionary("params", &params)) {
41 return nullptr;
42 }
43 auto find_it = command_map_.find(method);
44 if (find_it == command_map_.end())
45 return nullptr;
46 CommandMemberFnPtr command_fn_ptr = find_it->second;
47 std::unique_ptr<base::Value> cmd_result(((this)->*command_fn_ptr)(params));
48 if (!cmd_result)
49 return nullptr;
50
51 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
52 result->SetInteger("id", id);
53 result->Set("result", std::move(cmd_result));
54 return result.release();
55 }
56
57 std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::newPage(
58 const base::DictionaryValue* params) {
59 std::string initial_url;
60 std::string browser_context_id;
61 int width = 800;
62 int height = 800;
Sami 2016/07/05 09:41:35 600?
alex clarke (OOO till 29th) 2016/07/05 11:54:00 Done.
63 params->GetString("initialUrl", &initial_url);
64 params->GetString("browserContextId", &browser_context_id);
65 params->GetInteger("width", &width);
66 params->GetInteger("height", &height);
67 HeadlessWebContentsImpl* web_contents_impl;
68 auto find_it = browser_context_map_.find(browser_context_id);
69 if (find_it != browser_context_map_.end()) {
70 web_contents_impl = HeadlessWebContentsImpl::From(
71 browser_->CreateWebContentsBuilder()
72 .SetInitialURL(GURL(initial_url))
73 .SetWindowSize(gfx::Size(width, height))
74 .SetBrowserContext(find_it->second.get())
75 .Build());
76 } else {
77 web_contents_impl = HeadlessWebContentsImpl::From(
78 browser_->CreateWebContentsBuilder()
79 .SetInitialURL(GURL(initial_url))
80 .SetWindowSize(gfx::Size(width, height))
81 .Build());
82 }
83 web_contents_map_[web_contents_impl->GetAgentHostId()] = web_contents_impl;
84 return browser::NewPageResult::Builder()
85 .SetPageId(web_contents_impl->GetAgentHostId())
86 .Build()
87 ->Serialize();
88 }
89
90 std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::closePage(
91 const base::DictionaryValue* params) {
92 std::string page_id;
93 if (!params->GetString("pageId", &page_id)) {
94 return nullptr;
95 }
96 auto find_it = web_contents_map_.find(page_id);
97 bool success = false;
98 if (find_it != web_contents_map_.end()) {
99 find_it->second->Close();
100 web_contents_map_.erase(find_it);
101 success = true;
102 }
103 return browser::ClosePageResult::Builder()
104 .SetSuccess(success)
105 .Build()
106 ->Serialize();
107 }
108
109 std::unique_ptr<base::Value> HeadlessDevToolsManagerDelegate::newBrowserContext(
110 const base::DictionaryValue* params) {
111 std::string browser_context_id = base::GenerateGUID();
112 browser_context_map_[browser_context_id] =
113 browser_->CreateBrowserContextBuilder().Build();
114 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
115 return browser::NewBrowserContextResult::Builder()
116 .SetBrowserContextId(browser_context_id)
117 .Build()
118 ->Serialize();
119 }
120
121 std::unique_ptr<base::Value>
122 HeadlessDevToolsManagerDelegate::closeBrowserContext(
123 const base::DictionaryValue* params) {
124 std::string browser_context_id;
125 if (!params->GetString("browserContextId", &browser_context_id)) {
126 return nullptr;
127 }
128 auto find_it = browser_context_map_.find(browser_context_id);
129 bool success = false;
130 if (find_it != browser_context_map_.end()) {
131 success = true;
132 HeadlessBrowserContextImpl* headless_browser_context =
133 HeadlessBrowserContextImpl::From(find_it->second.get());
134 // Make sure |headless_browser_context| isn't in use!
135 for (HeadlessWebContents* headless_web_contents :
136 browser_->GetAllWebContents()) {
137 content::WebContents* web_contents =
138 HeadlessWebContentsImpl::From(headless_web_contents)->web_contents();
139 if (web_contents->GetBrowserContext() == headless_browser_context) {
140 success = false;
141 break;
142 }
143 }
144 if (success)
145 browser_context_map_.erase(find_it);
146 }
147 return browser::CloseBrowserContextResult::Builder()
148 .SetSuccess(success)
149 .Build()
150 ->Serialize();
151 }
152
153 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698