Chromium Code Reviews| Index: headless/public/headless_web_contents.h |
| diff --git a/headless/public/headless_web_contents.h b/headless/public/headless_web_contents.h |
| index a193d5042e6932a42330ef9edca24d54eb54ce9d..0d7314d40bcd6ee2c690e893b5fcb7b2623d1999 100644 |
| --- a/headless/public/headless_web_contents.h |
| +++ b/headless/public/headless_web_contents.h |
| @@ -5,9 +5,12 @@ |
| #ifndef HEADLESS_PUBLIC_HEADLESS_WEB_CONTENTS_H_ |
| #define HEADLESS_PUBLIC_HEADLESS_WEB_CONTENTS_H_ |
| -#include "base/callback.h" |
| +#include <list> |
| + |
| +#include "base/bind.h" |
| #include "base/macros.h" |
| #include "headless/public/headless_export.h" |
| +#include "mojo/public/cpp/bindings/interface_request.h" |
| #include "ui/gfx/geometry/size.h" |
| #include "url/gurl.h" |
| @@ -82,6 +85,24 @@ class HEADLESS_EXPORT HeadlessWebContents::Builder { |
| // outlive this HeadlessWebContents. |
| Builder& SetBrowserContext(HeadlessBrowserContext* browser_context); |
| + // Specify an embedder provided Mojo service to be installed. |
|
Sami
2016/06/10 10:27:39
Please document the arguments.
alex clarke (OOO till 29th)
2016/06/11 20:51:50
Done.
|
| + template <typename Interface> |
| + Builder& AddEmbedderMojoService( |
| + const base::Callback<void(mojo::InterfaceRequest<Interface>)>& |
| + service_factory, |
| + const std::string& js_binding) { |
| + return AddEmbedderMojoService( |
| + Interface::Name_, |
| + base::Bind(&Builder::ForwardToServiceFactory<Interface>, |
| + service_factory), |
| + js_binding); |
| + } |
| + Builder& AddEmbedderMojoService( |
| + const std::string& service_name, |
| + const base::Callback<void(mojo::ScopedMessagePipeHandle)>& |
| + service_factory, |
| + const std::string& js_binding); |
| + |
| // The returned object is owned by HeadlessBrowser. Call |
| // HeadlessWebContents::Close() to dispose it. |
| HeadlessWebContents* Build(); |
| @@ -90,12 +111,36 @@ class HEADLESS_EXPORT HeadlessWebContents::Builder { |
| friend class HeadlessBrowserImpl; |
| friend class HeadlessWebContentsImpl; |
| + template <typename Interface> |
| + static void ForwardToServiceFactory( |
| + const base::Callback<void(mojo::InterfaceRequest<Interface>)>& |
| + service_factory, |
| + mojo::ScopedMessagePipeHandle handle) { |
| + service_factory.Run(mojo::MakeRequest<Interface>(std::move(handle))); |
| + } |
| + |
| + struct EmbedderMojoService { |
| + EmbedderMojoService(); |
| + EmbedderMojoService(const std::string& service_name, |
| + const base::Callback<void( |
| + mojo::ScopedMessagePipeHandle)>& service_factory, |
| + const std::string& js_binding); |
| + ~EmbedderMojoService(); |
| + |
| + std::string service_name; |
| + base::Callback<void(mojo::ScopedMessagePipeHandle)> service_factory; |
| + std::string js_binding; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(EmbedderMojoService); |
|
Sami
2016/06/10 10:27:39
private:
alex clarke (OOO till 29th)
2016/06/11 20:51:50
Done.
|
| + }; |
| + |
| explicit Builder(HeadlessBrowserImpl* browser); |
| HeadlessBrowserImpl* browser_; |
| GURL initial_url_ = GURL("about:blank"); |
| gfx::Size window_size_ = gfx::Size(800, 600); |
| HeadlessBrowserContext* browser_context_; |
| + std::list<EmbedderMojoService> embedder_mojo_services_; |
| DISALLOW_COPY_AND_ASSIGN(Builder); |
| }; |