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

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

Issue 2873283002: [Reland] Allow headless TabSocket in isolated worlds & remove obsolete logic (Closed)
Patch Set: Fix GN Issue Created 3 years, 7 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "headless/lib/browser/headless_web_contents_impl.h" 5 #include "headless/lib/browser/headless_web_contents_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 HeadlessWebContents::Builder* builder) { 151 HeadlessWebContents::Builder* builder) {
152 content::WebContents::CreateParams create_params(builder->browser_context_, 152 content::WebContents::CreateParams create_params(builder->browser_context_,
153 nullptr); 153 nullptr);
154 create_params.initial_size = builder->window_size_; 154 create_params.initial_size = builder->window_size_;
155 155
156 std::unique_ptr<HeadlessWebContentsImpl> headless_web_contents = 156 std::unique_ptr<HeadlessWebContentsImpl> headless_web_contents =
157 base::WrapUnique(new HeadlessWebContentsImpl( 157 base::WrapUnique(new HeadlessWebContentsImpl(
158 content::WebContents::Create(create_params), 158 content::WebContents::Create(create_params),
159 builder->browser_context_)); 159 builder->browser_context_));
160 160
161 if (builder->create_tab_socket_) { 161 if (builder->tab_socket_type_ != Builder::TabSocketType::NONE) {
162 headless_web_contents->headless_tab_socket_ = 162 headless_web_contents->headless_tab_socket_ =
163 base::MakeUnique<HeadlessTabSocketImpl>(); 163 base::MakeUnique<HeadlessTabSocketImpl>();
164 headless_web_contents->inject_mojo_services_into_isolated_world_ =
165 builder->tab_socket_type_ == Builder::TabSocketType::ISOLATED_WORLD;
164 166
165 builder->mojo_services_.emplace_back( 167 builder->mojo_services_.emplace_back(
166 TabSocket::Name_, 168 TabSocket::Name_,
167 base::Bind( 169 base::Bind(
168 &ForwardToServiceFactory, 170 &ForwardToServiceFactory,
169 base::Bind( 171 base::Bind(
170 &HeadlessTabSocketImpl::CreateMojoService, 172 &HeadlessTabSocketImpl::CreateMojoService,
171 base::Unretained( 173 base::Unretained(
172 headless_web_contents->headless_tab_socket_.get())))); 174 headless_web_contents->headless_tab_socket_.get()))));
173 } 175 }
(...skipping 22 matching lines...) Expand all
196 } 198 }
197 199
198 HeadlessWebContentsImpl::HeadlessWebContentsImpl( 200 HeadlessWebContentsImpl::HeadlessWebContentsImpl(
199 content::WebContents* web_contents, 201 content::WebContents* web_contents,
200 HeadlessBrowserContextImpl* browser_context) 202 HeadlessBrowserContextImpl* browser_context)
201 : content::WebContentsObserver(web_contents), 203 : content::WebContentsObserver(web_contents),
202 web_contents_delegate_( 204 web_contents_delegate_(
203 new HeadlessWebContentsImpl::Delegate(browser_context)), 205 new HeadlessWebContentsImpl::Delegate(browser_context)),
204 web_contents_(web_contents), 206 web_contents_(web_contents),
205 agent_host_(content::DevToolsAgentHost::GetOrCreateFor(web_contents)), 207 agent_host_(content::DevToolsAgentHost::GetOrCreateFor(web_contents)),
208 inject_mojo_services_into_isolated_world_(false),
206 browser_context_(browser_context), 209 browser_context_(browser_context),
207 render_process_host_(web_contents->GetRenderProcessHost()) { 210 render_process_host_(web_contents->GetRenderProcessHost()) {
208 #if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD) 211 #if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD)
209 printing::HeadlessPrintManager::CreateForWebContents(web_contents); 212 printing::HeadlessPrintManager::CreateForWebContents(web_contents);
210 #endif 213 #endif
211 web_contents_->SetDelegate(web_contents_delegate_.get()); 214 web_contents_->SetDelegate(web_contents_delegate_.get());
212 render_process_host_->AddObserver(this); 215 render_process_host_->AddObserver(this);
213 agent_host_->AddObserver(this); 216 agent_host_->AddObserver(this);
214 } 217 }
215 218
216 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() { 219 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() {
217 agent_host_->RemoveObserver(this); 220 agent_host_->RemoveObserver(this);
218 if (render_process_host_) 221 if (render_process_host_)
219 render_process_host_->RemoveObserver(this); 222 render_process_host_->RemoveObserver(this);
220 } 223 }
221 224
222 void HeadlessWebContentsImpl::RenderFrameCreated( 225 void HeadlessWebContentsImpl::RenderFrameCreated(
223 content::RenderFrameHost* render_frame_host) { 226 content::RenderFrameHost* render_frame_host) {
224 if (!mojo_services_.empty()) { 227 if (!mojo_services_.empty()) {
225 render_frame_host->AllowBindings(content::BINDINGS_POLICY_HEADLESS); 228 render_frame_host->AllowBindings(
229 inject_mojo_services_into_isolated_world_
230 ? content::BINDINGS_POLICY_HEADLESS_ISOLATED_WORLD
231 : content::BINDINGS_POLICY_HEADLESS_MAIN_WORLD);
226 } 232 }
227 233
228 service_manager::BinderRegistry* interface_registry = 234 service_manager::BinderRegistry* interface_registry =
229 render_frame_host->GetInterfaceRegistry(); 235 render_frame_host->GetInterfaceRegistry();
230 236
231 for (const MojoService& service : mojo_services_) { 237 for (const MojoService& service : mojo_services_) {
232 interface_registry->AddInterface(service.service_name, 238 interface_registry->AddInterface(service.service_name,
233 service.service_factory, 239 service.service_factory,
234 browser()->BrowserMainThread()); 240 browser()->BrowserMainThread());
235 } 241 }
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 initial_url_ = initial_url; 383 initial_url_ = initial_url;
378 return *this; 384 return *this;
379 } 385 }
380 386
381 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize( 387 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize(
382 const gfx::Size& size) { 388 const gfx::Size& size) {
383 window_size_ = size; 389 window_size_ = size;
384 return *this; 390 return *this;
385 } 391 }
386 392
387 HeadlessWebContents::Builder& HeadlessWebContents::Builder::CreateTabSocket( 393 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetTabSocketType(
388 bool create_tab_socket) { 394 TabSocketType type) {
389 create_tab_socket_ = create_tab_socket; 395 tab_socket_type_ = type;
390 return *this; 396 return *this;
391 } 397 }
392 398
393 HeadlessWebContents* HeadlessWebContents::Builder::Build() { 399 HeadlessWebContents* HeadlessWebContents::Builder::Build() {
394 return browser_context_->CreateWebContents(this); 400 return browser_context_->CreateWebContents(this);
395 } 401 }
396 402
397 HeadlessWebContents::Builder::MojoService::MojoService() {} 403 HeadlessWebContents::Builder::MojoService::MojoService() {}
398 404
399 HeadlessWebContents::Builder::MojoService::MojoService( 405 HeadlessWebContents::Builder::MojoService::MojoService(
400 const std::string& service_name, 406 const std::string& service_name,
401 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory) 407 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory)
402 : service_name(service_name), service_factory(service_factory) {} 408 : service_name(service_name), service_factory(service_factory) {}
403 409
404 HeadlessWebContents::Builder::MojoService::~MojoService() {} 410 HeadlessWebContents::Builder::MojoService::~MojoService() {}
405 411
406 } // namespace headless 412 } // namespace headless
OLDNEW
« no previous file with comments | « headless/lib/browser/headless_web_contents_impl.h ('k') | headless/lib/headless_web_contents_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698