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 |
32 // Contains net::URLRequestContextGetter required for resource loading. | 36 // Contains net::URLRequestContextGetter required for resource loading. |
33 // Must be destructed on the IO thread as per content::ResourceContext | 37 // Must be destructed on the IO thread as per content::ResourceContext |
34 // requirements. | 38 // requirements. |
35 class HeadlessResourceContext : public content::ResourceContext { | 39 class HeadlessResourceContext : public content::ResourceContext { |
36 public: | 40 public: |
37 HeadlessResourceContext(); | 41 HeadlessResourceContext(); |
38 ~HeadlessResourceContext() override; | 42 ~HeadlessResourceContext() override; |
39 | 43 |
40 // ResourceContext implementation: | 44 // ResourceContext implementation: |
41 net::HostResolver* GetHostResolver() override; | 45 net::HostResolver* GetHostResolver() override; |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 407 |
404 HeadlessBrowserContext::Builder& | 408 HeadlessBrowserContext::Builder& |
405 HeadlessBrowserContext::Builder::SetOverrideWebPreferencesCallback( | 409 HeadlessBrowserContext::Builder::SetOverrideWebPreferencesCallback( |
406 base::Callback<void(WebPreferences*)> callback) { | 410 base::Callback<void(WebPreferences*)> callback) { |
407 options_->override_web_preferences_callback_ = std::move(callback); | 411 options_->override_web_preferences_callback_ = std::move(callback); |
408 return *this; | 412 return *this; |
409 } | 413 } |
410 | 414 |
411 HeadlessBrowserContext* HeadlessBrowserContext::Builder::Build() { | 415 HeadlessBrowserContext* HeadlessBrowserContext::Builder::Build() { |
412 if (!mojo_bindings_.empty()) { | 416 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 |
413 // Unless you know what you're doing it's unsafe to allow http/https for a | 430 // Unless you know what you're doing it's unsafe to allow http/https for a |
414 // context with mojo bindings. | 431 // context with mojo bindings. |
415 if (!enable_http_and_https_if_mojo_used_) { | 432 if (!enable_http_and_https_if_mojo_used_) { |
416 options_->protocol_handlers_[url::kHttpScheme] = | 433 options_->protocol_handlers_[url::kHttpScheme] = |
417 base::MakeUnique<BlackHoleProtocolHandler>(); | 434 base::MakeUnique<BlackHoleProtocolHandler>(); |
418 options_->protocol_handlers_[url::kHttpsScheme] = | 435 options_->protocol_handlers_[url::kHttpsScheme] = |
419 base::MakeUnique<BlackHoleProtocolHandler>(); | 436 base::MakeUnique<BlackHoleProtocolHandler>(); |
420 } | 437 } |
421 } | 438 } |
422 | 439 |
423 return browser_->CreateBrowserContext(this); | 440 return browser_->CreateBrowserContext(this); |
424 } | 441 } |
425 | 442 |
426 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() {} | 443 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() {} |
427 | 444 |
428 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings( | 445 HeadlessBrowserContext::Builder::MojoBindings::MojoBindings( |
429 const std::string& mojom_name, | 446 const std::string& mojom_name, |
430 const std::string& js_bindings) | 447 const std::string& js_bindings) |
431 : mojom_name(mojom_name), js_bindings(js_bindings) {} | 448 : mojom_name(mojom_name), js_bindings(js_bindings) {} |
432 | 449 |
433 HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() {} | 450 HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() {} |
434 | 451 |
435 } // namespace headless | 452 } // namespace headless |
OLD | NEW |