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 |