Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |