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 #include "headless/lib/browser/headless_browser_context_options.h"
6 
7 #include <string>
8 #include <utility>
9 
10 namespace headless {
11 
12 namespace {
13 
14 template <class T>
ReturnOverriddenValue(const base::Optional<T> & value,const T & default_value)15 const T& ReturnOverriddenValue(const base::Optional<T>& value,
16                                const T& default_value) {
17   return value ? *value : default_value;
18 }
19 
20 }  // namespace
21 
22 HeadlessBrowserContextOptions::HeadlessBrowserContextOptions(
23     HeadlessBrowserContextOptions&& options) = default;
24 
25 HeadlessBrowserContextOptions::~HeadlessBrowserContextOptions() = default;
26 
27 HeadlessBrowserContextOptions& HeadlessBrowserContextOptions::operator=(
28     HeadlessBrowserContextOptions&& options) = default;
29 
HeadlessBrowserContextOptions(HeadlessBrowser::Options * options)30 HeadlessBrowserContextOptions::HeadlessBrowserContextOptions(
31     HeadlessBrowser::Options* options)
32     : browser_options_(options) {}
33 
product_name_and_version() const34 const std::string& HeadlessBrowserContextOptions::product_name_and_version()
35     const {
36   return ReturnOverriddenValue(product_name_and_version_,
37                                browser_options_->product_name_and_version);
38 }
39 
accept_language() const40 const std::string& HeadlessBrowserContextOptions::accept_language() const {
41   return ReturnOverriddenValue(accept_language_,
42                                browser_options_->accept_language);
43 }
44 
user_agent() const45 const std::string& HeadlessBrowserContextOptions::user_agent() const {
46   return ReturnOverriddenValue(user_agent_, browser_options_->user_agent);
47 }
48 
proxy_config() const49 const net::ProxyConfig* HeadlessBrowserContextOptions::proxy_config() const {
50   if (proxy_config_)
51     return proxy_config_.get();
52   return browser_options_->proxy_config.get();
53 }
54 
window_size() const55 const gfx::Size& HeadlessBrowserContextOptions::window_size() const {
56   return ReturnOverriddenValue(window_size_, browser_options_->window_size);
57 }
58 
user_data_dir() const59 const base::FilePath& HeadlessBrowserContextOptions::user_data_dir() const {
60   return ReturnOverriddenValue(user_data_dir_, browser_options_->user_data_dir);
61 }
62 
incognito_mode() const63 bool HeadlessBrowserContextOptions::incognito_mode() const {
64   return ReturnOverriddenValue(incognito_mode_,
65                                browser_options_->incognito_mode);
66 }
67 
block_new_web_contents() const68 bool HeadlessBrowserContextOptions::block_new_web_contents() const {
69   return ReturnOverriddenValue(block_new_web_contents_,
70                                browser_options_->block_new_web_contents);
71 }
72 
73 base::RepeatingCallback<void(blink::web_pref::WebPreferences*)>
override_web_preferences_callback() const74 HeadlessBrowserContextOptions::override_web_preferences_callback() const {
75   return ReturnOverriddenValue(
76       override_web_preferences_callback_,
77       browser_options_->override_web_preferences_callback);
78 }
79 
80 gfx::FontRenderParams::Hinting
font_render_hinting() const81 HeadlessBrowserContextOptions::font_render_hinting() const {
82   return ReturnOverriddenValue(font_render_hinting_,
83                                browser_options_->font_render_hinting);
84 }
85 
86 }  // namespace headless
87