// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef HEADLESS_PUBLIC_HEADLESS_BROWSER_H_ #define HEADLESS_PUBLIC_HEADLESS_BROWSER_H_ #include "base/callback.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "headless/public/headless_export.h" namespace base { class SingleThreadTaskRunner; namespace trace_event { class TraceConfig; } } namespace gfx { class Size; } namespace net { class URLRequestContextGetter; } namespace headless { class WebContents; class HEADLESS_EXPORT HeadlessBrowser { public: static HeadlessBrowser* Get(); struct Options; // Main routine for running browser. // Takes command line args and callback to run as soon as browser starts. static int Run( const Options& options, const base::Callback& on_browser_start_callback); // Create a new browser tab. virtual scoped_ptr CreateWebContents(const gfx::Size& size) = 0; virtual scoped_refptr BrowserMainThread() = 0; virtual scoped_refptr RendererMainThread() = 0; // Requests browser to stop as soon as possible. // |Run| will return as soon as browser stops. virtual void Stop() = 0; virtual void StartTracing(const base::trace_event::TraceConfig& trace_config, const base::Closure& on_tracing_started) = 0; virtual void StopTracing(const std::string& log_file_name, const base::Closure& on_tracing_stopped) = 0; protected: virtual ~HeadlessBrowser() {} private: DISALLOW_COPY_AND_ASSIGN(HeadlessBrowser); }; struct HeadlessBrowser::Options { ~Options(); class Builder; // Command line options to be passed to browser. int argc; const char** argv; std::string user_agent; std::string navigator_platform; static const int kInvalidPort = -1; // If not null, create start devtools for remote debugging // on specified port. int devtools_http_port; // Optional URLRequestContextGetter for customizing network stack. // Allows overriding: // - Cookie storage // - HTTP cache // - SSL config // - Proxy service scoped_refptr url_request_context_getter; scoped_ptr message_pump; private: Options(int argc, const char** argv); }; class HeadlessBrowser::Options::Builder { public: Builder(int argc, const char** argv); ~Builder(); Builder& SetUserAgent(const std::string& user_agent); Builder& EnableDevToolsServer(int port); Builder& SetURLRequestContextGetter( scoped_refptr url_request_context_getter); Options Build(); private: Options options_; DISALLOW_COPY_AND_ASSIGN(Builder); }; } // namespace headless #endif // HEADLESS_PUBLIC_HEADLESS_BROWSER_H_