| Index: headless/public/headless_browser.h
|
| diff --git a/headless/public/headless_browser.h b/headless/public/headless_browser.h
|
| index 19694ec18af19b40f4e72857a1850a01b0745155..92b2610abd15be9500f13331b24a691e168aba85 100644
|
| --- a/headless/public/headless_browser.h
|
| +++ b/headless/public/headless_browser.h
|
| @@ -22,6 +22,10 @@
|
| #include "net/base/ip_endpoint.h"
|
| #include "ui/gfx/geometry/size.h"
|
|
|
| +#if defined(OS_WIN)
|
| +#include "sandbox/win/src/sandbox_types.h"
|
| +#endif
|
| +
|
| namespace base {
|
| class MessagePump;
|
| class SingleThreadTaskRunner;
|
| @@ -95,7 +99,7 @@ class HEADLESS_EXPORT HeadlessBrowser {
|
| };
|
|
|
| // Embedding API overrides for the headless browser.
|
| -struct HeadlessBrowser::Options {
|
| +struct HEADLESS_EXPORT HeadlessBrowser::Options {
|
| class Builder;
|
|
|
| Options(Options&& options);
|
| @@ -107,6 +111,14 @@ struct HeadlessBrowser::Options {
|
| int argc;
|
| const char** argv;
|
|
|
| +#if defined(OS_WIN)
|
| + // Set hardware instance if available, otherwise it defaults to 0.
|
| + HINSTANCE instance;
|
| +
|
| + // Set with sandbox information. This has to be already initialized.
|
| + sandbox::SandboxInterfaceInfo* sandbox_info;
|
| +#endif
|
| +
|
| // Address at which DevTools should listen for connections. Disabled by
|
| // default. Mutually exclusive with devtools_socket_fd.
|
| net::IPEndPoint devtools_endpoint;
|
| @@ -185,7 +197,7 @@ struct HeadlessBrowser::Options {
|
| DISALLOW_COPY_AND_ASSIGN(Options);
|
| };
|
|
|
| -class HeadlessBrowser::Options::Builder {
|
| +class HEADLESS_EXPORT HeadlessBrowser::Options::Builder {
|
| public:
|
| Builder(int argc, const char** argv);
|
| Builder();
|
| @@ -200,6 +212,10 @@ class HeadlessBrowser::Options::Builder {
|
| Builder& SetDisableSandbox(bool disable_sandbox);
|
| Builder& SetGLImplementation(const std::string& gl_implementation);
|
| Builder& AddMojoServiceName(const std::string& mojo_service_name);
|
| +#if defined(OS_WIN)
|
| + Builder& SetInstance(HINSTANCE instance);
|
| + Builder& SetSandboxInfo(sandbox::SandboxInterfaceInfo* sandbox_info);
|
| +#endif
|
|
|
| // Per-context settings.
|
|
|
| @@ -224,6 +240,7 @@ class HeadlessBrowser::Options::Builder {
|
| DISALLOW_COPY_AND_ASSIGN(Builder);
|
| };
|
|
|
| +#if !defined(OS_WIN)
|
| // The headless browser may need to create child processes (e.g., a renderer
|
| // which runs web content). This is done by re-executing the parent process as
|
| // a zygote[1] and forking each child process from that zygote.
|
| @@ -243,7 +260,17 @@ class HeadlessBrowser::Options::Builder {
|
| //
|
| // [1]
|
| // https://chromium.googlesource.com/chromium/src/+/master/docs/linux_zygote.md
|
| -void RunChildProcessIfNeeded(int argc, const char** argv);
|
| +HEADLESS_EXPORT void RunChildProcessIfNeeded(int argc, const char** argv);
|
| +#else
|
| +// In Windows, the headless browser may need to create child processes. This is
|
| +// done by re-executing the parent process which may have been initialized with
|
| +// different libraries (e.g. child_dll). In this case, the embedder has to pass
|
| +// the appropiate HINSTANCE and initalization sandbox_info to properly launch
|
| +// the child process.
|
| +HEADLESS_EXPORT void RunChildProcessIfNeeded(
|
| + HINSTANCE instance,
|
| + sandbox::SandboxInterfaceInfo* sandbox_info);
|
| +#endif // !defined(OS_WIN)
|
|
|
| // Main entry point for running the headless browser. This function constructs
|
| // the headless browser instance, passing it to the given
|
| @@ -251,7 +278,7 @@ void RunChildProcessIfNeeded(int argc, const char** argv);
|
| // the main loop, it will only return after HeadlessBrowser::Shutdown() is
|
| // called, returning the exit code for the process. It is not possible to
|
| // initialize the browser again after it has been torn down.
|
| -int HeadlessBrowserMain(
|
| +HEADLESS_EXPORT int HeadlessBrowserMain(
|
| HeadlessBrowser::Options options,
|
| const base::Callback<void(HeadlessBrowser*)>& on_browser_start_callback);
|
|
|
|
|