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 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->tab_socket_type_ != Builder::TabSocketType::NONE) { | 161 if (builder->create_tab_socket_) { |
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; | |
166 | 164 |
167 builder->mojo_services_.emplace_back( | 165 builder->mojo_services_.emplace_back( |
168 TabSocket::Name_, | 166 TabSocket::Name_, |
169 base::Bind( | 167 base::Bind( |
170 &ForwardToServiceFactory, | 168 &ForwardToServiceFactory, |
171 base::Bind( | 169 base::Bind( |
172 &HeadlessTabSocketImpl::CreateMojoService, | 170 &HeadlessTabSocketImpl::CreateMojoService, |
173 base::Unretained( | 171 base::Unretained( |
174 headless_web_contents->headless_tab_socket_.get())))); | 172 headless_web_contents->headless_tab_socket_.get())))); |
175 } | 173 } |
(...skipping 22 matching lines...) Expand all Loading... |
198 } | 196 } |
199 | 197 |
200 HeadlessWebContentsImpl::HeadlessWebContentsImpl( | 198 HeadlessWebContentsImpl::HeadlessWebContentsImpl( |
201 content::WebContents* web_contents, | 199 content::WebContents* web_contents, |
202 HeadlessBrowserContextImpl* browser_context) | 200 HeadlessBrowserContextImpl* browser_context) |
203 : content::WebContentsObserver(web_contents), | 201 : content::WebContentsObserver(web_contents), |
204 web_contents_delegate_( | 202 web_contents_delegate_( |
205 new HeadlessWebContentsImpl::Delegate(browser_context)), | 203 new HeadlessWebContentsImpl::Delegate(browser_context)), |
206 web_contents_(web_contents), | 204 web_contents_(web_contents), |
207 agent_host_(content::DevToolsAgentHost::GetOrCreateFor(web_contents)), | 205 agent_host_(content::DevToolsAgentHost::GetOrCreateFor(web_contents)), |
208 inject_mojo_services_into_isolated_world_(false), | |
209 browser_context_(browser_context), | 206 browser_context_(browser_context), |
210 render_process_host_(web_contents->GetRenderProcessHost()) { | 207 render_process_host_(web_contents->GetRenderProcessHost()) { |
211 #if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD) | 208 #if BUILDFLAG(ENABLE_BASIC_PRINTING) && !defined(CHROME_MULTIPLE_DLL_CHILD) |
212 printing::HeadlessPrintManager::CreateForWebContents(web_contents); | 209 printing::HeadlessPrintManager::CreateForWebContents(web_contents); |
213 #endif | 210 #endif |
214 web_contents_->SetDelegate(web_contents_delegate_.get()); | 211 web_contents_->SetDelegate(web_contents_delegate_.get()); |
215 render_process_host_->AddObserver(this); | 212 render_process_host_->AddObserver(this); |
216 agent_host_->AddObserver(this); | 213 agent_host_->AddObserver(this); |
217 } | 214 } |
218 | 215 |
219 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() { | 216 HeadlessWebContentsImpl::~HeadlessWebContentsImpl() { |
220 agent_host_->RemoveObserver(this); | 217 agent_host_->RemoveObserver(this); |
221 if (render_process_host_) | 218 if (render_process_host_) |
222 render_process_host_->RemoveObserver(this); | 219 render_process_host_->RemoveObserver(this); |
223 } | 220 } |
224 | 221 |
225 void HeadlessWebContentsImpl::RenderFrameCreated( | 222 void HeadlessWebContentsImpl::RenderFrameCreated( |
226 content::RenderFrameHost* render_frame_host) { | 223 content::RenderFrameHost* render_frame_host) { |
227 if (!mojo_services_.empty()) { | 224 if (!mojo_services_.empty()) { |
228 render_frame_host->AllowBindings( | 225 render_frame_host->AllowBindings(content::BINDINGS_POLICY_HEADLESS); |
229 inject_mojo_services_into_isolated_world_ | |
230 ? content::BINDINGS_POLICY_HEADLESS_ISOLATED_WORLD | |
231 : content::BINDINGS_POLICY_HEADLESS_MAIN_WORLD); | |
232 } | 226 } |
233 | 227 |
234 service_manager::BinderRegistry* interface_registry = | 228 service_manager::BinderRegistry* interface_registry = |
235 render_frame_host->GetInterfaceRegistry(); | 229 render_frame_host->GetInterfaceRegistry(); |
236 | 230 |
237 for (const MojoService& service : mojo_services_) { | 231 for (const MojoService& service : mojo_services_) { |
238 interface_registry->AddInterface(service.service_name, | 232 interface_registry->AddInterface(service.service_name, |
239 service.service_factory, | 233 service.service_factory, |
240 browser()->BrowserMainThread()); | 234 browser()->BrowserMainThread()); |
241 } | 235 } |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 initial_url_ = initial_url; | 377 initial_url_ = initial_url; |
384 return *this; | 378 return *this; |
385 } | 379 } |
386 | 380 |
387 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize( | 381 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetWindowSize( |
388 const gfx::Size& size) { | 382 const gfx::Size& size) { |
389 window_size_ = size; | 383 window_size_ = size; |
390 return *this; | 384 return *this; |
391 } | 385 } |
392 | 386 |
393 HeadlessWebContents::Builder& HeadlessWebContents::Builder::SetTabSocketType( | 387 HeadlessWebContents::Builder& HeadlessWebContents::Builder::CreateTabSocket( |
394 TabSocketType type) { | 388 bool create_tab_socket) { |
395 tab_socket_type_ = type; | 389 create_tab_socket_ = create_tab_socket; |
396 return *this; | 390 return *this; |
397 } | 391 } |
398 | 392 |
399 HeadlessWebContents* HeadlessWebContents::Builder::Build() { | 393 HeadlessWebContents* HeadlessWebContents::Builder::Build() { |
400 return browser_context_->CreateWebContents(this); | 394 return browser_context_->CreateWebContents(this); |
401 } | 395 } |
402 | 396 |
403 HeadlessWebContents::Builder::MojoService::MojoService() {} | 397 HeadlessWebContents::Builder::MojoService::MojoService() {} |
404 | 398 |
405 HeadlessWebContents::Builder::MojoService::MojoService( | 399 HeadlessWebContents::Builder::MojoService::MojoService( |
406 const std::string& service_name, | 400 const std::string& service_name, |
407 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory) | 401 const base::Callback<void(mojo::ScopedMessagePipeHandle)>& service_factory) |
408 : service_name(service_name), service_factory(service_factory) {} | 402 : service_name(service_name), service_factory(service_factory) {} |
409 | 403 |
410 HeadlessWebContents::Builder::MojoService::~MojoService() {} | 404 HeadlessWebContents::Builder::MojoService::~MojoService() {} |
411 | 405 |
412 } // namespace headless | 406 } // namespace headless |
OLD | NEW |