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

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: More tests 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 create_params.initial_size = builder->window_size_; 151 create_params.initial_size = builder->window_size_;
152 152
153 std::unique_ptr<HeadlessWebContentsImpl> headless_web_contents = 153 std::unique_ptr<HeadlessWebContentsImpl> headless_web_contents =
154 base::WrapUnique(new HeadlessWebContentsImpl( 154 base::WrapUnique(new HeadlessWebContentsImpl(
155 content::WebContents::Create(create_params), 155 content::WebContents::Create(create_params),
156 builder->browser_context_)); 156 builder->browser_context_));
157 157
158 if (builder->create_tab_socket_) { 158 if (builder->create_tab_socket_) {
159 headless_web_contents->headless_tab_socket_ = 159 headless_web_contents->headless_tab_socket_ =
160 base::MakeUnique<HeadlessTabSocketImpl>(); 160 base::MakeUnique<HeadlessTabSocketImpl>();
161 headless_web_contents->inject_mojo_services_into_isolated_world_ =
162 builder->create_tab_socket_in_isolated_worlds_;
161 163
162 builder->mojo_services_.emplace_back( 164 builder->mojo_services_.emplace_back(
163 TabSocket::Name_, 165 TabSocket::Name_,
164 base::Bind( 166 base::Bind(
165 &ForwardToServiceFactory, 167 &ForwardToServiceFactory,
166 base::Bind( 168 base::Bind(
167 &HeadlessTabSocketImpl::CreateMojoService, 169 &HeadlessTabSocketImpl::CreateMojoService,
168 base::Unretained( 170 base::Unretained(
169 headless_web_contents->headless_tab_socket_.get())))); 171 headless_web_contents->headless_tab_socket_.get()))));
170 } 172 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 214
213 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() { 215 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() {
214 agent_host_->RemoveObserver(this); 216 agent_host_->RemoveObserver(this);
215 if (render_process_host_) 217 if (render_process_host_)
216 render_process_host_->RemoveObserver(this); 218 render_process_host_->RemoveObserver(this);
217 } 219 }
218 220
219 void HeadlessWebContentsImpl::RenderFrameCreated( 221 void HeadlessWebContentsImpl::RenderFrameCreated(
220 content::RenderFrameHost* render_frame_host) { 222 content::RenderFrameHost* render_frame_host) {
221 if (!mojo_services_.empty()) { 223 if (!mojo_services_.empty()) {
222 render_frame_host->AllowBindings(content::BINDINGS_POLICY_HEADLESS); 224 render_frame_host->AllowBindings(
225 inject_mojo_services_into_isolated_world_
226 ? content::BINDINGS_POLICY_HEADLESS_ISOLATED_WORLD
227 : content::BINDINGS_POLICY_HEADLESS_MAIN_WORLD);
223 } 228 }
224 229
225 service_manager::BinderRegistry* interface_registry = 230 service_manager::BinderRegistry* interface_registry =
226 render_frame_host->GetInterfaceRegistry(); 231 render_frame_host->GetInterfaceRegistry();
227 232
228 for (const MojoService& service : mojo_services_) { 233 for (const MojoService& service : mojo_services_) {
229 interface_registry->AddInterface(service.service_name, 234 interface_registry->AddInterface(service.service_name,
230 service.service_factory, 235 service.service_factory,
231 browser()->BrowserMainThread()); 236 browser()->BrowserMainThread());
232 } 237 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 return *this; 380 return *this;
376 } 381 }
377 382
378 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize( 383 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize(
379 const gfx::Size& size) { 384 const gfx::Size& size) {
380 window_size_ = size; 385 window_size_ = size;
381 return *this; 386 return *this;
382 } 387 }
383 388
384 HeadlessWebContents::Builder& HeadlessWebContents::Builder::CreateTabSocket( 389 HeadlessWebContents::Builder& HeadlessWebContents::Builder::CreateTabSocket(
385 bool create_tab_socket) { 390 bool create_tab_socket,
391 bool in_isolated_worlds) {
386 create_tab_socket_ = create_tab_socket; 392 create_tab_socket_ = create_tab_socket;
Sami 2017/05/12 17:18:02 create_tab_socket_in_main_world_ to be explicit?
alex clarke (OOO till 29th) 2017/05/15 09:50:57 Maybe an enum is better still.
393 create_tab_socket_in_isolated_worlds_ = in_isolated_worlds;
387 return *this; 394 return *this;
388 } 395 }
389 396
390 HeadlessWebContents* HeadlessWebContents::Builder::Build() { 397 HeadlessWebContents* HeadlessWebContents::Builder::Build() {
391 return browser_context_->CreateWebContents(this); 398 return browser_context_->CreateWebContents(this);
392 } 399 }
393 400
394 HeadlessWebContents::Builder::MojoService::MojoService() {} 401 HeadlessWebContents::Builder::MojoService::MojoService() {}
395 402
396 HeadlessWebContents::Builder::MojoService::MojoService( 403 HeadlessWebContents::Builder::MojoService::MojoService(
397 const std::string& service_name, 404 const std::string& service_name,
398 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory) 405 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory)
399 : service_name(service_name), service_factory(service_factory) {} 406 : service_name(service_name), service_factory(service_factory) {}
400 407
401 HeadlessWebContents::Builder::MojoService::~MojoService() {} 408 HeadlessWebContents::Builder::MojoService::~MojoService() {}
402 409
403 } // namespace headless 410 } // namespace headless
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698