1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_CONTEXT_OPTIONS_H_
6 #define HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_CONTEXT_OPTIONS_H_
7 
8 #include <string>
9 
10 #include "base/callback.h"
11 #include "base/files/file_path.h"
12 #include "base/optional.h"
13 #include "base/time/time.h"
14 #include "headless/public/headless_browser.h"
15 #include "headless/public/headless_browser_context.h"
16 
17 namespace headless {
18 
19 // Represents options which can be customized for a given BrowserContext.
20 // Provides a fallback to default browser-side options when an option
21 // is not set for a particular BrowserContext.
22 class HeadlessBrowserContextOptions {
23  public:
24   HeadlessBrowserContextOptions(HeadlessBrowserContextOptions&& options);
25   ~HeadlessBrowserContextOptions();
26 
27   HeadlessBrowserContextOptions& operator=(
28       HeadlessBrowserContextOptions&& options);
29 
30   const std::string& product_name_and_version() const;
31   const std::string& accept_language() const;
32   const std::string& user_agent() const;
33 
34   // See HeadlessBrowser::Options::proxy_config.
35   const net::ProxyConfig* proxy_config() const;
36 
37   const gfx::Size& window_size() const;
38 
39   // See HeadlessBrowser::Options::user_data_dir.
40   const base::FilePath& user_data_dir() const;
41 
42   // See HeadlessBrowser::Options::incognito_mode.
43   bool incognito_mode() const;
44 
45   // See HeadlessBrowser::Options::block_new_web_contents.
46   bool block_new_web_contents() const;
47 
48   // See HeadlessBrowser::Options::font_render_hinting.
49   gfx::FontRenderParams::Hinting font_render_hinting() const;
50 
51   // Callback that is invoked to override WebPreferences for RenderViews
52   // created within this HeadlessBrowserContext.
53   base::RepeatingCallback<void(WebPreferences*)>
54   override_web_preferences_callback() const;
55 
56  private:
57   friend class HeadlessBrowserContext::Builder;
58 
59   explicit HeadlessBrowserContextOptions(HeadlessBrowser::Options*);
60 
61   HeadlessBrowser::Options* browser_options_;
62 
63   base::Optional<std::string> product_name_and_version_;
64   base::Optional<std::string> accept_language_;
65   base::Optional<std::string> user_agent_;
66   std::unique_ptr<net::ProxyConfig> proxy_config_;
67   base::Optional<std::string> host_resolver_rules_;
68   base::Optional<gfx::Size> window_size_;
69   base::Optional<base::FilePath> user_data_dir_;
70   base::Optional<bool> incognito_mode_;
71   base::Optional<bool> block_new_web_contents_;
72   base::Optional<base::RepeatingCallback<void(WebPreferences*)>>
73       override_web_preferences_callback_;
74 
75   base::Optional<gfx::FontRenderParams::Hinting> font_render_hinting_;
76 
77   DISALLOW_COPY_AND_ASSIGN(HeadlessBrowserContextOptions);
78 };
79 
80 }  // namespace headless
81 
82 #endif  // HEADLESS_LIB_BROWSER_HEADLESS_BROWSER_CONTEXT_OPTIONS_H_
83