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_browser_context_impl.h" | 5 #include "headless/lib/browser/headless_browser_context_impl.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "headless/lib/browser/headless_net_log.h" | 22 #include "headless/lib/browser/headless_net_log.h" |
23 #include "headless/lib/browser/headless_permission_manager.h" | 23 #include "headless/lib/browser/headless_permission_manager.h" |
24 #include "headless/lib/browser/headless_url_request_context_getter.h" | 24 #include "headless/lib/browser/headless_url_request_context_getter.h" |
25 #include "headless/public/util/black_hole_protocol_handler.h" | 25 #include "headless/public/util/black_hole_protocol_handler.h" |
26 #include "headless/public/util/in_memory_protocol_handler.h" | 26 #include "headless/public/util/in_memory_protocol_handler.h" |
27 #include "net/url_request/url_request_context.h" | 27 #include "net/url_request/url_request_context.h" |
28 #include "ui/base/resource/resource_bundle.h" | 28 #include "ui/base/resource/resource_bundle.h" |
29 | 29 |
30 namespace headless { | 30 namespace headless { |
31 | 31 |
32 namespace { | |
33 const char kHeadlessMojomProtocol[] = "headless-mojom"; | |
34 } | |
35 | |
36 // Contains net::URLRequestContextGetter required for resource loading. | 32 // Contains net::URLRequestContextGetter required for resource loading. |
37 // Must be destructed on the IO thread as per content::ResourceContext | 33 // Must be destructed on the IO thread as per content::ResourceContext |
38 // requirements. | 34 // requirements. |
39 class HeadlessResourceContext : public content::ResourceContext { | 35 class HeadlessResourceContext : public content::ResourceContext { |
40 public: | 36 public: |
41 HeadlessResourceContext(); | 37 HeadlessResourceContext(); |
42 ~HeadlessResourceContext() override; | 38 ~HeadlessResourceContext() override; |
43 | 39 |
44 // ResourceContext implementation: | 40 // ResourceContext implementation: |
45 net::HostResolver* GetHostResolver() override; | 41 net::HostResolver* GetHostResolver() override; |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 | 403 |
408 HeadlessBrowserContext::Builder& | 404 HeadlessBrowserContext::Builder& |
409 HeadlessBrowserContext::Builder::SetOverrideWebPreferencesCallback( | 405 HeadlessBrowserContext::Builder::SetOverrideWebPreferencesCallback( |
410 base::Callback<void(WebPreferences*)> callback) { | 406 base::Callback<void(WebPreferences*)> callback) { |
411 options_->override_web_preferences_callback_ = std::move(callback); | 407 options_->override_web_preferences_callback_ = std::move(callback); |
412 return *this; | 408 return *this; |
413 } | 409 } |
414 | 410 |
415 HeadlessBrowserContext* HeadlessBrowserContext::Builder::Build() { | 411 HeadlessBrowserContext* HeadlessBrowserContext::Builder::Build() { |
416 if (!mojo_bindings_.empty()) { | 412 if (!mojo_bindings_.empty()) { |
417 std::unique_ptr<InMemoryProtocolHandler> headless_mojom_protocol_handler( | |
418 new InMemoryProtocolHandler()); | |
419 for (const MojoBindings& binding : mojo_bindings_) { | |
420 headless_mojom_protocol_handler->InsertResponse( | |
421 binding.mojom_name, | |
422 InMemoryProtocolHandler::Response(binding.js_bindings, | |
423 "application/javascript")); | |
424 } | |
425 DCHECK(options_->protocol_handlers_.find(kHeadlessMojomProtocol) == | |
426 options_->protocol_handlers_.end()); | |
427 options_->protocol_handlers_[kHeadlessMojomProtocol] = | |
428 std::move(headless_mojom_protocol_handler); | |
429 | |
430 // Unless you know what you're doing it's unsafe to allow http/https for a | 413 // Unless you know what you're doing it's unsafe to allow http/https for a |
431 // context with mojo bindings. | 414 // context with mojo bindings. |
432 if (!enable_http_and_https_if_mojo_used_) { | 415 if (!enable_http_and_https_if_mojo_used_) { |
433 options_->protocol_handlers_[url::kHttpScheme] = | 416 options_->protocol_handlers_[url::kHttpScheme] = |
434 base::MakeUnique<BlackHoleProtocolHandler>(); | 417 base::MakeUnique<BlackHoleProtocolHandler>(); |
435 options_->protocol_handlers_[url::kHttpsScheme] = | 418 options_->protocol_handlers_[url::kHttpsScheme] = |
436 base::MakeUnique<BlackHoleProtocolHandler>(); | 419 base::MakeUnique<BlackHoleProtocolHandler>(); |
437 } | 420 } |
438 } | 421 } |
439 | 422 |
440 return browser_->CreateBrowserContext(this); | 423 return browser_->CreateBrowserContext(this); |
441 } | 424 } |
442 | 425 |
443 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() {} | 426 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() {} |
444 | 427 |
445 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings( | 428 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings( |
446 const std::string& mojom_name, | 429 const std::string& mojom_name, |
447 const std::string& js_bindings) | 430 const std::string& js_bindings) |
448 : mojom_name(mojom_name), js_bindings(js_bindings) {} | 431 : mojom_name(mojom_name), js_bindings(js_bindings) {} |
449 | 432 |
450 HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() {} | 433 HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() {} |
451 | 434 |
452 } // namespace headless | 435 } // namespace headless |
OLD | NEW |