Index: headless/lib/browser/headless_browser_context_impl.cc |
diff --git a/headless/lib/browser/headless_browser_context_impl.cc b/headless/lib/browser/headless_browser_context_impl.cc |
index ed0188050ec88de09923d17faeab4fc65db6f886..87407e87e2e123dfaed525be1dffbf9a3e25a7b7 100644 |
--- a/headless/lib/browser/headless_browser_context_impl.cc |
+++ b/headless/lib/browser/headless_browser_context_impl.cc |
@@ -13,10 +13,15 @@ |
#include "content/public/browser/storage_partition.h" |
#include "headless/lib/browser/headless_browser_impl.h" |
#include "headless/lib/browser/headless_url_request_context_getter.h" |
+#include "headless/public/util/in_memory_protocol_handler.h" |
#include "net/url_request/url_request_context.h" |
namespace headless { |
+namespace { |
+const char kHeadlessMojomProtocol[] = "headless-mojom"; |
+} |
+ |
// Contains net::URLRequestContextGetter required for resource loading. |
// Must be destructed on the IO thread as per content::ResourceContext |
// requirements. |
@@ -202,10 +207,42 @@ HeadlessBrowserContext::Builder::SetProtocolHandlers( |
return *this; |
} |
+HeadlessBrowserContext::Builder& |
+HeadlessBrowserContext::Builder::AddJsMojoBindings( |
+ const std::string& mojom_name, |
+ const std::string& js_bindings) { |
+ mojo_bindings_.emplace_back(mojom_name, js_bindings); |
+ return *this; |
+} |
+ |
std::unique_ptr<HeadlessBrowserContext> |
HeadlessBrowserContext::Builder::Build() { |
+ if (!mojo_bindings_.empty()) { |
+ std::unique_ptr<InMemoryProtocolHandler> headless_mojom_protocol_handler( |
+ new InMemoryProtocolHandler()); |
+ for (const MojoBindings& binding : mojo_bindings_) { |
+ headless_mojom_protocol_handler->InsertResponse( |
+ binding.mojom_name, |
+ InMemoryProtocolHandler::Response(binding.js_bindings, |
+ "application/javascript")); |
+ } |
+ DCHECK(protocol_handlers_.find(kHeadlessMojomProtocol) == |
+ protocol_handlers_.end()); |
+ protocol_handlers_[kHeadlessMojomProtocol] = |
+ std::move(headless_mojom_protocol_handler); |
+ } |
+ |
return base::WrapUnique(new HeadlessBrowserContextImpl( |
std::move(protocol_handlers_), browser_->options())); |
} |
+HeadlessBrowserContext::Builder::MojoBindings::MojoBindings() {} |
+ |
+HeadlessBrowserContext::Builder::MojoBindings::MojoBindings( |
+ const std::string& mojom_name, |
+ const std::string& js_bindings) |
+ : mojom_name(mojom_name), js_bindings(js_bindings) {} |
+ |
+HeadlessBrowserContext::Builder::MojoBindings::~MojoBindings() {} |
+ |
} // namespace headless |