| Index: headless/public/headless_browser.h
 | 
| diff --git a/headless/public/headless_browser.h b/headless/public/headless_browser.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..183668899d094aa71515ef8ae2450d36a322551b
 | 
| --- /dev/null
 | 
| +++ b/headless/public/headless_browser.h
 | 
| @@ -0,0 +1,113 @@
 | 
| +// 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/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;
 | 
| +
 | 
| +  // Create a new browser tab.
 | 
| +  virtual scoped_ptr<WebContents> CreateWebContents(const gfx::Size& size) = 0;
 | 
| +
 | 
| +  virtual scoped_refptr<base::SingleThreadTaskRunner> browser_main_thread() = 0;
 | 
| +  virtual scoped_refptr<base::SingleThreadTaskRunner>
 | 
| +  renderer_main_thread() = 0;
 | 
| +
 | 
| +  // Main routine for running browser.
 | 
| +  // Takes command line args and callback to run as soon as browser starts.
 | 
| +  // Should be called from main in the following manner:
 | 
| +  // int main(int argc, const char** argv) {
 | 
| +  //   return headless::HeadlessBrowser::Get()->Run(
 | 
| +  //     argc, argv, base::Bind(function_to_be_run_on_browser_start));
 | 
| +  // }
 | 
| +  virtual int Run(const Options& options,
 | 
| +                  const base::Closure& on_browser_start_callback) = 0;
 | 
| +
 | 
| +  // Requests browser to stop as soon as possible.
 | 
| +  virtual void Stop() = 0;
 | 
| +
 | 
| +  virtual void StartTracing(
 | 
| +      const base::trace_event::TraceConfig& trace_config,
 | 
| +      const base::Closure& tracing_started) = 0;
 | 
| +  virtual void StopTracing(
 | 
| +      const std::string& log_file_name,
 | 
| +      const base::Closure& tracing_stopped) = 0;
 | 
| +
 | 
| + protected:
 | 
| +  virtual ~HeadlessBrowser() {}
 | 
| +};
 | 
| +
 | 
| +struct HeadlessBrowser::Options {
 | 
| +  Options(Options&&);
 | 
| +  ~Options();
 | 
| +
 | 
| +  class Builder;
 | 
| +
 | 
| +  // Command line options to be passed to browser.
 | 
| +  int argc;
 | 
| +  const char** argv;
 | 
| +
 | 
| +  scoped_ptr<std::string> user_agent;
 | 
| +
 | 
| +  // If not null, create start devtools for remote debugging
 | 
| +  // on specified port.
 | 
| +  scoped_ptr<int> devtools_http_port;
 | 
| +
 | 
| +  // Using URLRequestContextGetter we can provide our own implementation of
 | 
| +  // entire network stack.
 | 
| +  // If null, default Chromium network settings will be used.
 | 
| +  scoped_refptr<net::URLRequestContextGetter> url_request_context_getter;
 | 
| +
 | 
| + 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<net::URLRequestContextGetter> url_request_context_getter);
 | 
| +
 | 
| +  Options Build();
 | 
| +
 | 
| + private:
 | 
| +  Options options_;
 | 
| +};
 | 
| +
 | 
| +
 | 
| +}  // namespace headless
 | 
| +
 | 
| +#endif  // HEADLESS_PUBLIC_HEADLESS_BROWSER_H_
 | 
| 
 |