1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
headless / public / headless_browser.h [blame]
// Copyright 2015 The Chromium Authors
// 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 <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/files/file_path.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "headless/public/headless_browser_context.h"
#include "headless/public/headless_export.h"
#include "ui/gfx/font_render_params.h"
#include "ui/gfx/geometry/size.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace blink {
struct UserAgentMetadata;
}
namespace headless {
class HeadlessWebContents;
// This class represents the global headless browser instance. To get a pointer
// to one, call |HeadlessBrowserMain| to initiate the browser main loop. An
// instance of |HeadlessBrowser| will be passed to the callback given to that
// function.
class HEADLESS_EXPORT HeadlessBrowser {
public:
struct Options;
HeadlessBrowser(const HeadlessBrowser&) = delete;
HeadlessBrowser& operator=(const HeadlessBrowser&) = delete;
// Create a new browser context which can be used to create tabs and isolate
// them from one another.
// Pointer to HeadlessBrowserContext becomes invalid after:
// a) Calling HeadlessBrowserContext::Close or
// b) Calling HeadlessBrowser::Shutdown
virtual HeadlessBrowserContext::Builder CreateBrowserContextBuilder() = 0;
virtual std::vector<HeadlessBrowserContext*> GetAllBrowserContexts() = 0;
// Returns HeadlessBrowserContext associated with the given id if any.
// Otherwise returns null.
virtual HeadlessBrowserContext* GetBrowserContextForId(
const std::string& id) = 0;
// Allows setting and getting the browser context that DevTools will create
// new targets in by default.
virtual void SetDefaultBrowserContext(
HeadlessBrowserContext* browser_context) = 0;
virtual HeadlessBrowserContext* GetDefaultBrowserContext() = 0;
// Returns a task runner for submitting work to the browser main thread.
virtual scoped_refptr<base::SingleThreadTaskRunner> BrowserMainThread()
const = 0;
// Requests browser to stop as soon as possible. |Run| will return as soon as
// browser stops.
// IMPORTANT: All pointers to HeadlessBrowserContexts and HeadlessWebContents
// become invalid after calling this function.
virtual void Shutdown() = 0;
static std::string GetProductNameAndVersion();
static blink::UserAgentMetadata GetUserAgentMetadata();
protected:
HeadlessBrowser() {}
virtual ~HeadlessBrowser() {}
};
// Embedding API overrides for the headless browser.
struct HEADLESS_EXPORT HeadlessBrowser::Options {
Options();
Options(Options&& options);
Options(const Options&) = delete;
Options& operator=(const Options&) = delete;
~Options();
Options& operator=(Options&& options);
// Port at which DevTools should listen for connections on localhost.
std::optional<int> devtools_port;
// Enables remote debug over stdio pipes [in=3, out=4].
bool devtools_pipe_enabled = false;
// A single way to test whether the devtools server has been requested.
bool DevtoolsServerEnabled();
// Default per-context options, can be specialized on per-context basis.
std::string accept_language;
std::string user_agent;
// The ProxyConfig to use. The system proxy settings are used by default.
std::unique_ptr<net::ProxyConfig> proxy_config;
// Default window size. This is also used to create the window tree host and
// as the headless screen size. Defaults to 800x600.
gfx::Size window_size = gfx::Size(800, 600);
// Headless screen info specification.
std::string screen_info_spec;
// Path to user data directory, where browser will look for its state.
// If empty, default directory (where the binary is located) will be used.
base::FilePath user_data_dir;
// Path to disk cache directory. If emppty, 'Cache' subdirectory of the
// user data directory will be used.
base::FilePath disk_cache_dir;
// Run a browser context in an incognito mode. Enabled by default.
bool incognito_mode = true;
// If true, then all pop-ups and calls to window.open will fail.
bool block_new_web_contents = false;
// Whether or not BeginFrames will be issued over DevTools protocol
// (experimental).
bool enable_begin_frame_control = false;
// Font render hinting value to override any default settings
gfx::FontRenderParams::Hinting font_render_hinting =
gfx::FontRenderParams::Hinting::HINTING_FULL;
// Whether lazy loading of images and frames is enabled.
bool lazy_load_enabled = true;
// Forces each navigation to use a new BrowsingInstance.
bool force_new_browsing_instance = false;
// Reminder: when adding a new field here, do not forget to add it to
// HeadlessBrowserContextOptions (where appropriate).
};
} // namespace headless
#endif // HEADLESS_PUBLIC_HEADLESS_BROWSER_H_