summaryrefslogtreecommitdiff
path: root/chromium/headless/lib/browser
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-20 09:47:09 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-06-07 11:15:42 +0000
commit189d4fd8fad9e3c776873be51938cd31a42b6177 (patch)
tree6497caeff5e383937996768766ab3bb2081a40b2 /chromium/headless/lib/browser
parent8bc75099d364490b22f43a7ce366b366c08f4164 (diff)
downloadqtwebengine-chromium-189d4fd8fad9e3c776873be51938cd31a42b6177.tar.gz
BASELINE: Update Chromium to 90.0.4430.221
Change-Id: Iff4d9d18d2fcf1a576f3b1f453010f744a232920 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/headless/lib/browser')
-rw-r--r--chromium/headless/lib/browser/DEPS10
-rw-r--r--chromium/headless/lib/browser/headless_browser_context_impl.cc2
-rw-r--r--chromium/headless/lib/browser/headless_browser_context_impl.h2
-rw-r--r--chromium/headless/lib/browser/headless_browser_impl.cc1
-rw-r--r--chromium/headless/lib/browser/headless_browser_main_parts.cc58
-rw-r--r--chromium/headless/lib/browser/headless_browser_main_parts.h13
-rw-r--r--chromium/headless/lib/browser/headless_browser_main_parts_linux.cc3
-rw-r--r--chromium/headless/lib/browser/headless_clipboard.cc18
-rw-r--r--chromium/headless/lib/browser/headless_clipboard.h7
-rw-r--r--chromium/headless/lib/browser/headless_content_browser_client.cc62
-rw-r--r--chromium/headless/lib/browser/headless_content_browser_client.h19
-rw-r--r--chromium/headless/lib/browser/headless_devtools.cc17
-rw-r--r--chromium/headless/lib/browser/headless_devtools.h4
-rw-r--r--chromium/headless/lib/browser/headless_permission_manager.cc7
-rw-r--r--chromium/headless/lib/browser/headless_permission_manager.h5
-rw-r--r--chromium/headless/lib/browser/headless_print_manager.cc89
-rw-r--r--chromium/headless/lib/browser/headless_print_manager.h21
-rw-r--r--chromium/headless/lib/browser/headless_request_context_manager.cc53
-rw-r--r--chromium/headless/lib/browser/headless_request_context_manager.h5
-rw-r--r--chromium/headless/lib/browser/headless_web_contents_impl.cc42
-rw-r--r--chromium/headless/lib/browser/headless_web_contents_impl.h10
21 files changed, 342 insertions, 106 deletions
diff --git a/chromium/headless/lib/browser/DEPS b/chromium/headless/lib/browser/DEPS
index 2884f436d9c..8cb7f76c6e6 100644
--- a/chromium/headless/lib/browser/DEPS
+++ b/chromium/headless/lib/browser/DEPS
@@ -7,13 +7,23 @@ include_rules = [
"+components/security_state",
"+components/viz",
"+printing",
+ "+services/cert_verifier/public/mojom",
"+services/network",
"+storage/browser/quota",
"+storage/common/quota",
"+third_party/skia/include",
"+third_party/blink/public/mojom/quota",
+ "+third_party/blink/public/mojom/badging",
"+third_party/blink/public/common/renderer_preferences/renderer_preferences.h",
"+ui/aura",
"+ui/compositor",
"+ui/events/keycodes/dom",
]
+specific_include_rules = {
+ "headless_browser_main_parts.h": [
+ "+components/prefs",
+ ],
+ "headless_browser_main_parts.cc": [
+ "+components/prefs",
+ ],
+}
diff --git a/chromium/headless/lib/browser/headless_browser_context_impl.cc b/chromium/headless/lib/browser/headless_browser_context_impl.cc
index 39ea5936ec6..d1d630b0172 100644
--- a/chromium/headless/lib/browser/headless_browser_context_impl.cc
+++ b/chromium/headless/lib/browser/headless_browser_context_impl.cc
@@ -293,7 +293,7 @@ void HeadlessBrowserContextImpl::ConfigureNetworkContextParams(
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) {
request_context_manager_->ConfigureNetworkContextParams(
in_memory, relative_partition_path, network_context_params,
diff --git a/chromium/headless/lib/browser/headless_browser_context_impl.h b/chromium/headless/lib/browser/headless_browser_context_impl.h
index a16612a7aad..fcb28e214bd 100644
--- a/chromium/headless/lib/browser/headless_browser_context_impl.h
+++ b/chromium/headless/lib/browser/headless_browser_context_impl.h
@@ -104,7 +104,7 @@ class HEADLESS_EXPORT HeadlessBrowserContextImpl final
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params);
private:
diff --git a/chromium/headless/lib/browser/headless_browser_impl.cc b/chromium/headless/lib/browser/headless_browser_impl.cc
index 5c2270330b9..95c433e6cce 100644
--- a/chromium/headless/lib/browser/headless_browser_impl.cc
+++ b/chromium/headless/lib/browser/headless_browser_impl.cc
@@ -23,7 +23,6 @@
#include "headless/lib/browser/headless_browser_main_parts.h"
#include "headless/lib/browser/headless_devtools_agent_host_client.h"
#include "headless/lib/browser/headless_web_contents_impl.h"
-#include "headless/lib/headless_content_main_delegate.h"
#include "net/http/http_util.h"
#include "services/network/public/cpp/network_switches.h"
#include "ui/events/devices/device_data_manager.h"
diff --git a/chromium/headless/lib/browser/headless_browser_main_parts.cc b/chromium/headless/lib/browser/headless_browser_main_parts.cc
index 39cfaf1e670..06c4754c6b0 100644
--- a/chromium/headless/lib/browser/headless_browser_main_parts.cc
+++ b/chromium/headless/lib/browser/headless_browser_main_parts.cc
@@ -4,13 +4,29 @@
#include "headless/lib/browser/headless_browser_main_parts.h"
+#include "headless/app/headless_shell_switches.h"
#include "headless/lib/browser/headless_browser_context_impl.h"
#include "headless/lib/browser/headless_browser_impl.h"
#include "headless/lib/browser/headless_devtools.h"
#include "headless/lib/browser/headless_screen.h"
+#if defined(HEADLESS_USE_PREFS)
+#include "components/os_crypt/os_crypt.h"
+#include "components/prefs/json_pref_store.h"
+#include "components/prefs/pref_service_factory.h"
+#endif
+
namespace headless {
+namespace {
+
+#if defined(HEADLESS_USE_PREFS)
+const base::FilePath::CharType kLocalStateFilename[] =
+ FILE_PATH_LITERAL("Local State");
+#endif
+
+} // namespace
+
HeadlessBrowserMainParts::HeadlessBrowserMainParts(
const content::MainFunctionParams& parameters,
HeadlessBrowserImpl* browser)
@@ -19,8 +35,11 @@ HeadlessBrowserMainParts::HeadlessBrowserMainParts(
HeadlessBrowserMainParts::~HeadlessBrowserMainParts() = default;
void HeadlessBrowserMainParts::PreMainMessageLoopRun() {
+#if defined(HEADLESS_USE_PREFS)
+ CreatePrefService();
+#endif
if (browser_->options()->DevtoolsServerEnabled()) {
- StartLocalDevToolsHttpHandler(browser_->options());
+ StartLocalDevToolsHttpHandler(browser_);
devtools_http_handler_started_ = true;
}
browser_->PlatformInitialize();
@@ -47,6 +66,10 @@ void HeadlessBrowserMainParts::PostMainMessageLoopRun() {
StopLocalDevToolsHttpHandler();
devtools_http_handler_started_ = false;
}
+#if defined(HEADLESS_USE_PREFS)
+ if (local_state_)
+ local_state_->CommitPendingWrite();
+#endif
}
void HeadlessBrowserMainParts::QuitMainMessageLoop() {
@@ -54,4 +77,37 @@ void HeadlessBrowserMainParts::QuitMainMessageLoop() {
std::move(quit_main_message_loop_).Run();
}
+#if defined(HEADLESS_USE_PREFS)
+void HeadlessBrowserMainParts::CreatePrefService() {
+ if (browser_->options()->user_data_dir.empty()) {
+ LOG(WARNING) << "Cannot create Pref Service with no user data dir.";
+ return;
+ }
+
+ base::FilePath local_state_file =
+ browser_->options()->user_data_dir.Append(kLocalStateFilename);
+ auto pref_store = base::MakeRefCounted<JsonPrefStore>(local_state_file);
+ auto result = pref_store->ReadPrefs();
+ CHECK(result == JsonPrefStore::PREF_READ_ERROR_NONE ||
+ result == JsonPrefStore::PREF_READ_ERROR_NO_FILE);
+
+ auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>();
+#if defined(OS_WIN)
+ OSCrypt::RegisterLocalPrefs(pref_registry.get());
+#endif
+
+ PrefServiceFactory factory;
+ factory.set_user_prefs(pref_store);
+ local_state_ = factory.Create(std::move(pref_registry));
+
+#if defined(OS_WIN)
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableCookieEncryption)) {
+ if (!OSCrypt::Init(local_state_.get()))
+ LOG(ERROR) << "Failed to initialize OSCrypt";
+ }
+#endif
+}
+#endif // defined(HEADLESS_USE_PREFS)
+
} // namespace headless
diff --git a/chromium/headless/lib/browser/headless_browser_main_parts.h b/chromium/headless/lib/browser/headless_browser_main_parts.h
index 1bc219297de..e1a531c9717 100644
--- a/chromium/headless/lib/browser/headless_browser_main_parts.h
+++ b/chromium/headless/lib/browser/headless_browser_main_parts.h
@@ -13,6 +13,11 @@
#include "content/public/common/main_function_params.h"
#include "headless/public/headless_browser.h"
+#if defined(HEADLESS_USE_PREFS)
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/pref_service.h"
+#endif
+
namespace headless {
class HeadlessBrowserImpl;
@@ -38,9 +43,17 @@ class HeadlessBrowserMainParts : public content::BrowserMainParts {
void QuitMainMessageLoop();
private:
+#if defined(HEADLESS_USE_PREFS)
+ void CreatePrefService();
+#endif
+
const content::MainFunctionParams parameters_; // For running browser tests.
HeadlessBrowserImpl* browser_; // Not owned.
+#if defined(HEADLESS_USE_PREFS)
+ std::unique_ptr<PrefService> local_state_;
+#endif
+
bool run_message_loop_ = true;
bool devtools_http_handler_started_ = false;
base::OnceClosure quit_main_message_loop_;
diff --git a/chromium/headless/lib/browser/headless_browser_main_parts_linux.cc b/chromium/headless/lib/browser/headless_browser_main_parts_linux.cc
index 129b6745001..9f1e4b1e0d7 100644
--- a/chromium/headless/lib/browser/headless_browser_main_parts_linux.cc
+++ b/chromium/headless/lib/browser/headless_browser_main_parts_linux.cc
@@ -5,12 +5,13 @@
#include "headless/lib/browser/headless_browser_main_parts.h"
#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
#include "device/bluetooth/dbus/bluez_dbus_manager.h"
namespace headless {
void HeadlessBrowserMainParts::PostMainMessageLoopStart() {
-#if defined(USE_DBUS) && !defined(OS_CHROMEOS)
+#if defined(USE_DBUS) && !BUILDFLAG(IS_CHROMEOS_ASH)
bluez::BluezDBusManager::Initialize(/*system_bus=*/nullptr);
#endif
}
diff --git a/chromium/headless/lib/browser/headless_clipboard.cc b/chromium/headless/lib/browser/headless_clipboard.cc
index c9acecda6f1..62949fe4930 100644
--- a/chromium/headless/lib/browser/headless_clipboard.cc
+++ b/chromium/headless/lib/browser/headless_clipboard.cc
@@ -19,6 +19,12 @@ HeadlessClipboard::~HeadlessClipboard() = default;
void HeadlessClipboard::OnPreShutdown() {}
+// DataTransferEndpoint is not used on this platform.
+ui::DataTransferEndpoint* HeadlessClipboard::GetSource(
+ ui::ClipboardBuffer buffer) const {
+ return nullptr;
+}
+
uint64_t HeadlessClipboard::GetSequenceNumber(
ui::ClipboardBuffer buffer) const {
return GetStore(buffer).sequence_number;
@@ -160,6 +166,14 @@ void HeadlessClipboard::ReadCustomData(ui::ClipboardBuffer clipboard_buffer,
// |data_dst| is not used. It's only passed to be consistent with other
// platforms.
+void HeadlessClipboard::ReadFilenames(ui::ClipboardBuffer buffer,
+ const ui::DataTransferEndpoint* data_dst,
+ std::vector<ui::FileInfo>* result) const {
+ *result = GetStore(buffer).filenames;
+}
+
+// |data_dst| is not used. It's only passed to be consistent with other
+// platforms.
void HeadlessClipboard::ReadBookmark(const ui::DataTransferEndpoint* data_dst,
base::string16* title,
std::string* url) const {
@@ -243,6 +257,10 @@ void HeadlessClipboard::WriteRTF(const char* rtf_data, size_t data_len) {
std::string(rtf_data, data_len);
}
+void HeadlessClipboard::WriteFilenames(std::vector<ui::FileInfo> filenames) {
+ GetDefaultStore().filenames = std::move(filenames);
+}
+
void HeadlessClipboard::WriteBookmark(const char* title_data,
size_t title_len,
const char* url_data,
diff --git a/chromium/headless/lib/browser/headless_clipboard.h b/chromium/headless/lib/browser/headless_clipboard.h
index f3f2f98d10f..e616a68def3 100644
--- a/chromium/headless/lib/browser/headless_clipboard.h
+++ b/chromium/headless/lib/browser/headless_clipboard.h
@@ -25,6 +25,8 @@ class HeadlessClipboard : public ui::Clipboard {
private:
// Clipboard overrides.
void OnPreShutdown() override;
+ ui::DataTransferEndpoint* GetSource(
+ ui::ClipboardBuffer buffer) const override;
uint64_t GetSequenceNumber(ui::ClipboardBuffer buffer) const override;
bool IsFormatAvailable(
const ui::ClipboardFormatType& format,
@@ -62,6 +64,9 @@ class HeadlessClipboard : public ui::Clipboard {
const base::string16& type,
const ui::DataTransferEndpoint* data_dst,
base::string16* result) const override;
+ void ReadFilenames(ui::ClipboardBuffer buffer,
+ const ui::DataTransferEndpoint* data_dst,
+ std::vector<ui::FileInfo>* result) const override;
void ReadBookmark(const ui::DataTransferEndpoint* data_dst,
base::string16* title,
std::string* url) const override;
@@ -86,6 +91,7 @@ class HeadlessClipboard : public ui::Clipboard {
size_t url_len) override;
void WriteSvg(const char* markup_data, size_t markup_len) override;
void WriteRTF(const char* rtf_data, size_t data_len) override;
+ void WriteFilenames(std::vector<ui::FileInfo> filenames) override;
void WriteBookmark(const char* title_data,
size_t title_len,
const char* url_data,
@@ -106,6 +112,7 @@ class HeadlessClipboard : public ui::Clipboard {
std::string url_title;
std::string html_src_url;
SkBitmap image;
+ std::vector<ui::FileInfo> filenames;
};
// The non-const versions increment the sequence number as a side effect.
diff --git a/chromium/headless/lib/browser/headless_content_browser_client.cc b/chromium/headless/lib/browser/headless_content_browser_client.cc
index 8aee01518c8..cb06a3eaffd 100644
--- a/chromium/headless/lib/browser/headless_content_browser_client.cc
+++ b/chromium/headless/lib/browser/headless_content_browser_client.cc
@@ -20,9 +20,11 @@
#include "content/public/browser/browser_context.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/client_certificate_delegate.h"
+#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/storage_partition.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h"
#include "headless/app/headless_shell_switches.h"
#include "headless/lib/browser/headless_browser_context_impl.h"
@@ -31,6 +33,9 @@
#include "headless/lib/browser/headless_devtools_manager_delegate.h"
#include "headless/lib/browser/headless_quota_permission_context.h"
#include "headless/lib/headless_macros.h"
+#include "mojo/public/cpp/bindings/binder_map.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
#include "net/base/url_util.h"
#include "net/ssl/client_cert_identity.h"
#include "printing/buildflags/buildflags.h"
@@ -109,6 +114,32 @@ int GetCrashSignalFD(const base::CommandLine& command_line,
} // namespace
+// Implements a stub BadgeService. This implementation does nothing, but is
+// required because inbound Mojo messages which do not have a registered
+// handler are considered an error, and the render process is terminated.
+// See https://crbug.com/1090429
+class HeadlessContentBrowserClient::StubBadgeService
+ : public blink::mojom::BadgeService {
+ public:
+ StubBadgeService() = default;
+ StubBadgeService(const StubBadgeService&) = delete;
+ StubBadgeService& operator=(const StubBadgeService&) = delete;
+ ~StubBadgeService() override = default;
+
+ void Bind(mojo::PendingReceiver<blink::mojom::BadgeService> receiver) {
+ receivers_.Add(this, std::move(receiver));
+ }
+
+ void Reset() {}
+
+ // blink::mojom::BadgeService:
+ void SetBadge(blink::mojom::BadgeValuePtr value) override {}
+ void ClearBadge() override {}
+
+ private:
+ mojo::ReceiverSet<blink::mojom::BadgeService> receivers_;
+};
+
HeadlessContentBrowserClient::HeadlessContentBrowserClient(
HeadlessBrowserImpl* browser)
: browser_(browser),
@@ -129,16 +160,23 @@ HeadlessContentBrowserClient::CreateBrowserMainParts(
}
void HeadlessContentBrowserClient::OverrideWebkitPrefs(
- content::RenderViewHost* render_view_host,
+ content::WebContents* web_contents,
blink::web_pref::WebPreferences* prefs) {
- auto* browser_context = HeadlessBrowserContextImpl::From(
- render_view_host->GetProcess()->GetBrowserContext());
+ auto* browser_context =
+ HeadlessBrowserContextImpl::From(web_contents->GetBrowserContext());
base::RepeatingCallback<void(blink::web_pref::WebPreferences*)> callback =
browser_context->options()->override_web_preferences_callback();
if (callback)
callback.Run(prefs);
}
+void HeadlessContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
+ content::RenderFrameHost* render_frame_host,
+ mojo::BinderMapWithContext<content::RenderFrameHost*>* map) {
+ map->Add<blink::mojom::BadgeService>(base::BindRepeating(
+ &HeadlessContentBrowserClient::BindBadgeService, base::Unretained(this)));
+}
+
content::DevToolsManagerDelegate*
HeadlessContentBrowserClient::GetDevToolsManagerDelegate() {
return new HeadlessDevToolsManagerDelegate(browser_->GetWeakPtr());
@@ -305,7 +343,7 @@ void HeadlessContentBrowserClient::ConfigureNetworkContextParams(
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) {
HeadlessBrowserContextImpl::From(context)->ConfigureNetworkContextParams(
in_memory, relative_partition_path, network_context_params,
@@ -320,4 +358,20 @@ std::string HeadlessContentBrowserClient::GetUserAgent() {
return browser_->options()->user_agent;
}
+void HeadlessContentBrowserClient::BindBadgeService(
+ content::RenderFrameHost* render_frame_host,
+ mojo::PendingReceiver<blink::mojom::BadgeService> receiver) {
+ if (!stub_badge_service_)
+ stub_badge_service_ = std::make_unique<StubBadgeService>();
+
+ stub_badge_service_->Bind(std::move(receiver));
+}
+
+bool HeadlessContentBrowserClient::CanAcceptUntrustedExchangesIfNeeded() {
+ // We require --user-data-dir flag too so that no dangerous changes are made
+ // in the user's regular profile.
+ return base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kUserDataDir);
+}
+
} // namespace headless
diff --git a/chromium/headless/lib/browser/headless_content_browser_client.h b/chromium/headless/lib/browser/headless_content_browser_client.h
index c59a2ac4006..6573d227dee 100644
--- a/chromium/headless/lib/browser/headless_content_browser_client.h
+++ b/chromium/headless/lib/browser/headless_content_browser_client.h
@@ -8,7 +8,9 @@
#include <memory>
#include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/render_frame_host.h"
#include "headless/public/headless_browser.h"
+#include "third_party/blink/public/mojom/badging/badging.mojom.h"
namespace headless {
@@ -22,8 +24,11 @@ class HeadlessContentBrowserClient : public content::ContentBrowserClient {
// content::ContentBrowserClient implementation:
std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
const content::MainFunctionParams&) override;
- void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
+ void OverrideWebkitPrefs(content::WebContents* web_contents,
blink::web_pref::WebPreferences* prefs) override;
+ void RegisterBrowserInterfaceBindersForFrame(
+ content::RenderFrameHost* render_frame_host,
+ mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override;
content::DevToolsManagerDelegate* GetDevToolsManagerDelegate() override;
scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext()
override;
@@ -60,19 +65,29 @@ class HeadlessContentBrowserClient : public content::ContentBrowserClient {
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) override;
std::string GetProduct() override;
std::string GetUserAgent() override;
+ bool CanAcceptUntrustedExchangesIfNeeded() override;
+
private:
+ class StubBadgeService;
+
+ void BindBadgeService(
+ content::RenderFrameHost* render_frame_host,
+ mojo::PendingReceiver<blink::mojom::BadgeService> receiver);
+
HeadlessBrowserImpl* browser_; // Not owned.
// We store the callback here because we may call it from the I/O thread.
HeadlessBrowser::Options::AppendCommandLineFlagsCallback
append_command_line_flags_callback_;
+ std::unique_ptr<StubBadgeService> stub_badge_service_;
+
DISALLOW_COPY_AND_ASSIGN(HeadlessContentBrowserClient);
};
diff --git a/chromium/headless/lib/browser/headless_devtools.cc b/chromium/headless/lib/browser/headless_devtools.cc
index 81912056d40..5a37c61c781 100644
--- a/chromium/headless/lib/browser/headless_devtools.cc
+++ b/chromium/headless/lib/browser/headless_devtools.cc
@@ -9,6 +9,8 @@
#include "base/files/file_path.h"
#include "base/memory/ptr_util.h"
+#include "content/public/browser/browser_task_traits.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/devtools_socket_factory.h"
#include "content/public/browser/navigation_entry.h"
@@ -124,11 +126,20 @@ class DummyTCPServerSocketFactory : public content::DevToolsSocketFactory {
DISALLOW_COPY_AND_ASSIGN(DummyTCPServerSocketFactory);
};
#endif // defined(OS_POSIX)
+
+void PostTaskToCloseBrowser(base::WeakPtr<HeadlessBrowserImpl> browser) {
+ content::GetUIThreadTaskRunner({})->PostTask(
+ FROM_HERE, base::BindOnce(&HeadlessBrowserImpl::Shutdown, browser));
+}
+
} // namespace
-void StartLocalDevToolsHttpHandler(HeadlessBrowser::Options* options) {
- if (options->devtools_pipe_enabled)
- content::DevToolsAgentHost::StartRemoteDebuggingPipeHandler();
+void StartLocalDevToolsHttpHandler(HeadlessBrowserImpl* browser) {
+ HeadlessBrowser::Options* options = browser->options();
+ if (options->devtools_pipe_enabled) {
+ content::DevToolsAgentHost::StartRemoteDebuggingPipeHandler(
+ base::BindOnce(&PostTaskToCloseBrowser, browser->GetWeakPtr()));
+ }
if (options->devtools_endpoint.IsEmpty())
return;
diff --git a/chromium/headless/lib/browser/headless_devtools.h b/chromium/headless/lib/browser/headless_devtools.h
index eccdd088806..ba29e439632 100644
--- a/chromium/headless/lib/browser/headless_devtools.h
+++ b/chromium/headless/lib/browser/headless_devtools.h
@@ -7,13 +7,13 @@
#include <memory>
-#include "headless/public/headless_browser.h"
+#include "headless/lib/browser/headless_browser_impl.h"
namespace headless {
// Starts a DevTools HTTP handler on the loopback interface on the port
// configured by HeadlessBrowser::Options.
-void StartLocalDevToolsHttpHandler(HeadlessBrowser::Options* options);
+void StartLocalDevToolsHttpHandler(HeadlessBrowserImpl* browser);
void StopLocalDevToolsHttpHandler();
} // namespace headless
diff --git a/chromium/headless/lib/browser/headless_permission_manager.cc b/chromium/headless/lib/browser/headless_permission_manager.cc
index 5d4d609fc0c..359ecdc4b72 100644
--- a/chromium/headless/lib/browser/headless_permission_manager.cc
+++ b/chromium/headless/lib/browser/headless_permission_manager.cc
@@ -71,15 +71,16 @@ HeadlessPermissionManager::GetPermissionStatusForFrame(
return blink::mojom::PermissionStatus::ASK;
}
-int HeadlessPermissionManager::SubscribePermissionStatusChange(
+HeadlessPermissionManager::SubscriptionId
+HeadlessPermissionManager::SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) {
- return content::PermissionController::kNoPendingOperation;
+ return SubscriptionId();
}
void HeadlessPermissionManager::UnsubscribePermissionStatusChange(
- int subscription_id) {}
+ SubscriptionId subscription_id) {}
} // namespace headless
diff --git a/chromium/headless/lib/browser/headless_permission_manager.h b/chromium/headless/lib/browser/headless_permission_manager.h
index 4b83309ab3a..ac30670cb38 100644
--- a/chromium/headless/lib/browser/headless_permission_manager.h
+++ b/chromium/headless/lib/browser/headless_permission_manager.h
@@ -46,13 +46,14 @@ class HeadlessPermissionManager : public content::PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
- int SubscribePermissionStatusChange(
+ SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
override;
- void UnsubscribePermissionStatusChange(int subscription_id) override;
+ void UnsubscribePermissionStatusChange(
+ SubscriptionId subscription_id) override;
private:
content::BrowserContext* browser_context_;
diff --git a/chromium/headless/lib/browser/headless_print_manager.cc b/chromium/headless/lib/browser/headless_print_manager.cc
index 67ffbad89c4..6620bf1ba1a 100644
--- a/chromium/headless/lib/browser/headless_print_manager.cc
+++ b/chromium/headless/lib/browser/headless_print_manager.cc
@@ -16,14 +16,25 @@
#include "base/strings/utf_string_conversions.h"
#include "components/printing/browser/print_manager_utils.h"
#include "components/printing/common/print.mojom.h"
-#include "components/printing/common/print_messages.h"
#include "content/public/browser/render_view_host.h"
#include "printing/mojom/print.mojom.h"
#include "printing/print_job_constants.h"
#include "printing/units.h"
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
+#include "mojo/public/cpp/bindings/message.h"
+#endif
namespace headless {
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
+namespace {
+
+constexpr char kInvalidPathForCheckForCancel[] =
+ "Invalid path for CheckForCancel";
+
+} // namespace
+#endif
+
HeadlessPrintSettings::HeadlessPrintSettings()
: prefer_css_page_size(false),
landscape(false),
@@ -186,32 +197,6 @@ HeadlessPrintManager::GetPrintParamsFromSettings(
return print_params;
}
-bool HeadlessPrintManager::OnMessageReceived(
- const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) {
- if (!printing_rfh_ && message.type() == PrintHostMsg_ScriptedPrint::ID) {
- std::string type;
- switch (message.type()) {
- case PrintHostMsg_ScriptedPrint::ID:
- type = "ScriptedPrint";
- break;
- default:
- type = "Unknown";
- break;
- }
- DLOG(ERROR)
- << "Unexpected message received before GetPDFContents is called: "
- << type;
-
- // TODO: consider propagating the error back to the caller, rather than
- // effectively dropping the request.
- render_frame_host->Send(IPC::SyncMessage::GenerateReply(&message));
- return true;
- }
-
- return PrintManager::OnMessageReceived(message, render_frame_host);
-}
-
void HeadlessPrintManager::GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) {
if (!printing_rfh_) {
@@ -223,27 +208,32 @@ void HeadlessPrintManager::GetDefaultPrintSettings(
std::move(callback).Run(print_params_->params->Clone());
}
-void HeadlessPrintManager::OnScriptedPrint(
- content::RenderFrameHost* render_frame_host,
- const printing::mojom::ScriptedPrintParams& params,
- IPC::Message* reply_msg) {
+void HeadlessPrintManager::ScriptedPrint(
+ printing::mojom::ScriptedPrintParamsPtr params,
+ ScriptedPrintCallback callback) {
PageRangeStatus status =
PageRangeTextToPages(page_ranges_text_, ignore_invalid_page_ranges_,
- params.expected_pages_count, &print_params_->pages);
- // Intentionally using |printing_rfh_| instead of |render_frame_host|
- // parameter.
+ params->expected_pages_count, &print_params_->pages);
+
+ auto default_param = printing::mojom::PrintPagesParams::New();
+ default_param->params = printing::mojom::PrintParams::New();
+ if (!printing_rfh_) {
+ DLOG(ERROR) << "Unexpected message received before GetPDFContents is "
+ "called: ScriptedPrint";
+ std::move(callback).Run(std::move(default_param));
+ return;
+ }
switch (status) {
case SYNTAX_ERROR:
- printing_rfh_->Send(reply_msg);
ReleaseJob(PAGE_RANGE_SYNTAX_ERROR);
+ std::move(callback).Run(std::move(default_param));
return;
case LIMIT_ERROR:
- printing_rfh_->Send(reply_msg);
ReleaseJob(PAGE_COUNT_EXCEEDED);
+ std::move(callback).Run(std::move(default_param));
return;
case PRINT_NO_ERROR:
- PrintHostMsg_ScriptedPrint::WriteReplyParams(reply_msg, *print_params_);
- printing_rfh_->Send(reply_msg);
+ std::move(callback).Run(print_params_->Clone());
return;
default:
NOTREACHED();
@@ -259,22 +249,33 @@ void HeadlessPrintManager::PrintingFailed(int32_t cookie) {
ReleaseJob(PRINTING_FAILED);
}
-void HeadlessPrintManager::OnDidPrintDocument(
- content::RenderFrameHost* render_frame_host,
- const printing::mojom::DidPrintDocumentParams& params,
- std::unique_ptr<DelayedFrameDispatchHelper> helper) {
- auto& content = *params.content;
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
+void HeadlessPrintManager::CheckForCancel(int32_t preview_ui_id,
+ int32_t request_id,
+ CheckForCancelCallback callback) {
+ // CheckForCancel should never be called on HeadlessPrintManager, since this
+ // is only triggered by Print Preview.
+ mojo::ReportBadMessage(kInvalidPathForCheckForCancel);
+}
+#endif
+
+void HeadlessPrintManager::DidPrintDocument(
+ printing::mojom::DidPrintDocumentParamsPtr params,
+ DidPrintDocumentCallback callback) {
+ auto& content = *params->content;
if (!content.metafile_data_region.IsValid()) {
ReleaseJob(INVALID_MEMORY_HANDLE);
+ std::move(callback).Run(false);
return;
}
base::ReadOnlySharedMemoryMapping map = content.metafile_data_region.Map();
if (!map.IsValid()) {
ReleaseJob(METAFILE_MAP_ERROR);
+ std::move(callback).Run(false);
return;
}
data_ = std::string(static_cast<const char*>(map.memory()), map.size());
- helper->SendCompleted();
+ std::move(callback).Run(true);
ReleaseJob(PRINT_SUCCESS);
}
diff --git a/chromium/headless/lib/browser/headless_print_manager.h b/chromium/headless/lib/browser/headless_print_manager.h
index ce2236dd111..f593ec2c790 100644
--- a/chromium/headless/lib/browser/headless_print_manager.h
+++ b/chromium/headless/lib/browser/headless_print_manager.h
@@ -90,24 +90,21 @@ class HeadlessPrintManager
printing::mojom::PrintPagesParamsPtr GetPrintParamsFromSettings(
const HeadlessPrintSettings& settings);
- // content::WebContentsObserver implementation.
- bool OnMessageReceived(const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) override;
-
- // printing::PrintManager:
- void OnDidPrintDocument(
- content::RenderFrameHost* render_frame_host,
- const printing::mojom::DidPrintDocumentParams& params,
- std::unique_ptr<DelayedFrameDispatchHelper> helper) override;
- void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
- const printing::mojom::ScriptedPrintParams& params,
- IPC::Message* reply_msg) override;
// printing::mojom::PrintManagerHost:
+ void DidPrintDocument(printing::mojom::DidPrintDocumentParamsPtr params,
+ DidPrintDocumentCallback callback) override;
void GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) override;
+ void ScriptedPrint(printing::mojom::ScriptedPrintParamsPtr params,
+ ScriptedPrintCallback callback) override;
void ShowInvalidPrinterSettingsError() override;
void PrintingFailed(int32_t cookie) override;
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
+ void CheckForCancel(int32_t preview_ui_id,
+ int32_t request_id,
+ CheckForCancelCallback callback) override;
+#endif
void Reset();
void ReleaseJob(PrintResult result);
diff --git a/chromium/headless/lib/browser/headless_request_context_manager.cc b/chromium/headless/lib/browser/headless_request_context_manager.cc
index 4148c584f49..4ac0070c86b 100644
--- a/chromium/headless/lib/browser/headless_request_context_manager.cc
+++ b/chromium/headless/lib/browser/headless_request_context_manager.cc
@@ -8,6 +8,7 @@
#include "base/task/post_task.h"
#include "base/threading/thread_task_runner_handle.h"
#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/browser/resource_context.h"
@@ -16,17 +17,25 @@
#include "mojo/public/cpp/bindings/receiver.h"
#include "net/http/http_auth_preferences.h"
#include "net/proxy_resolution/configured_proxy_resolution_service.h"
+#include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
#include "services/network/network_service.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/network_service.mojom.h"
#include "services/network/url_request_context_builder_mojo.h"
+#if defined(HEADLESS_USE_PREFS)
+#include "components/os_crypt/os_crypt.h"
+#include "content/public/common/network_service_util.h"
+#endif
+
namespace headless {
namespace {
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
+// of lacros-chrome is complete.
+#if defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
constexpr char kProductName[] = "HeadlessChrome";
#endif
@@ -56,13 +65,15 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTrafficAnnotationTag() {
return traffic_annotation;
}
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
-::network::mojom::CryptConfigPtr BuildCryptConfigOnce(
- const base::FilePath& user_data_path) {
+void SetCryptConfigOnce(const base::FilePath& user_data_path) {
static bool done_once = false;
if (done_once)
- return nullptr;
+ return;
done_once = true;
+
+// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
+// of lacros-chrome is complete.
+#if defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
::network::mojom::CryptConfigPtr config =
::network::mojom::CryptConfig::New();
config->store = base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
@@ -70,9 +81,17 @@ net::NetworkTrafficAnnotationTag GetProxyConfigTrafficAnnotationTag() {
config->product_name = kProductName;
config->should_use_preference = false;
config->user_data_path = user_data_path;
- return config;
-}
+ content::GetNetworkService()->SetCryptConfig(std::move(config));
+#elif defined(OS_WIN) && defined(HEADLESS_USE_PREFS)
+ // The OSCrypt keys are process bound, so if network service is out of
+ // process, send it the required key if it is available.
+ if (content::IsOutOfProcessNetworkService() &&
+ OSCrypt::IsEncryptionAvailable()) {
+ content::GetNetworkService()->SetEncryptionKey(
+ OSCrypt::GetRawEncryptionKey());
+ }
#endif
+}
} // namespace
@@ -174,9 +193,9 @@ HeadlessRequestContextManager::CreateSystemContext(
::network::mojom::NetworkContextParamsPtr network_context_params =
::network::mojom::NetworkContextParams::New();
- ::network::mojom::CertVerifierCreationParamsPtr
+ ::cert_verifier::mojom::CertVerifierCreationParamsPtr
cert_verifier_creation_params =
- ::network::mojom::CertVerifierCreationParams::New();
+ ::cert_verifier::mojom::CertVerifierCreationParams::New();
manager->ConfigureNetworkContextParamsInternal(
network_context_params.get(), cert_verifier_creation_params.get());
network_context_params->cert_verifier_params =
@@ -192,9 +211,8 @@ HeadlessRequestContextManager::HeadlessRequestContextManager(
const HeadlessBrowserContextOptions* options,
base::FilePath user_data_path)
:
-// On Windows, Cookie encryption requires access to local_state prefs, which are
-// unavailable.
-#if defined(OS_WIN)
+// On Windows, Cookie encryption requires access to local_state prefs.
+#if defined(OS_WIN) && !defined(HEADLESS_USE_PREFS)
cookie_encryption_enabled_(false),
#else
cookie_encryption_enabled_(
@@ -218,11 +236,8 @@ HeadlessRequestContextManager::HeadlessRequestContextManager(
base::ThreadTaskRunnerHandle::Get());
}
}
-#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
- auto crypt_config = BuildCryptConfigOnce(user_data_path_);
- if (crypt_config)
- content::GetNetworkService()->SetCryptConfig(std::move(crypt_config));
-#endif
+
+ SetCryptConfigOnce(user_data_path_);
}
HeadlessRequestContextManager::~HeadlessRequestContextManager() {
@@ -235,7 +250,7 @@ void HeadlessRequestContextManager::ConfigureNetworkContextParams(
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) {
ConfigureNetworkContextParamsInternal(network_context_params,
cert_verifier_creation_params);
@@ -243,7 +258,7 @@ void HeadlessRequestContextManager::ConfigureNetworkContextParams(
void HeadlessRequestContextManager::ConfigureNetworkContextParamsInternal(
::network::mojom::NetworkContextParams* context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params) {
context_params->user_agent = user_agent_;
context_params->accept_language = accept_language_;
diff --git a/chromium/headless/lib/browser/headless_request_context_manager.h b/chromium/headless/lib/browser/headless_request_context_manager.h
index cfc49194954..39da6471650 100644
--- a/chromium/headless/lib/browser/headless_request_context_manager.h
+++ b/chromium/headless/lib/browser/headless_request_context_manager.h
@@ -12,6 +12,7 @@
#include "content/public/browser/browser_context.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
+#include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom-forward.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/network_service.mojom.h"
@@ -39,7 +40,7 @@ class HeadlessRequestContextManager {
bool in_memory,
const base::FilePath& relative_partition_path,
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params);
content::ResourceContext* GetResourceContext() {
@@ -49,7 +50,7 @@ class HeadlessRequestContextManager {
private:
void ConfigureNetworkContextParamsInternal(
::network::mojom::NetworkContextParams* network_context_params,
- ::network::mojom::CertVerifierCreationParams*
+ ::cert_verifier::mojom::CertVerifierCreationParams*
cert_verifier_creation_params);
const bool cookie_encryption_enabled_;
diff --git a/chromium/headless/lib/browser/headless_web_contents_impl.cc b/chromium/headless/lib/browser/headless_web_contents_impl.cc
index b3e8582ca50..4fdbf1c7030 100644
--- a/chromium/headless/lib/browser/headless_web_contents_impl.cc
+++ b/chromium/headless/lib/browser/headless_web_contents_impl.cc
@@ -10,6 +10,7 @@
#include <vector>
#include "base/bind.h"
+#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/memory/weak_ptr.h"
#include "base/stl_util.h"
@@ -17,6 +18,8 @@
#include "base/threading/sequenced_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
#include "base/values.h"
+#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
#include "components/security_state/content/content_utils.h"
#include "components/security_state/core/security_state.h"
#include "content/public/browser/browser_thread.h"
@@ -29,6 +32,7 @@
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
+#include "content/public/browser/renderer_preferences_util.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/common/bindings_policy.h"
@@ -42,6 +46,8 @@
#include "printing/buildflags/buildflags.h"
#include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "ui/base/ui_base_features.h"
#include "ui/compositor/compositor.h"
#include "ui/gfx/switches.h"
@@ -51,6 +57,28 @@
namespace headless {
+namespace {
+
+void UpdatePrefsFromSystemSettings(blink::RendererPreferences* prefs) {
+#if defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) || defined(OS_WIN)
+ content::UpdateFontRendererPreferencesFromSystemSettings(prefs);
+#endif
+
+ // The values were copied from chrome/browser/renderer_preferences_util.cc.
+#if defined(USE_AURA)
+ prefs->focus_ring_color = SkColorSetRGB(0x4D, 0x90, 0xFE);
+#endif
+ if (::features::IsFormControlsRefreshEnabled()) {
+#if defined(OS_MAC)
+ prefs->focus_ring_color = SkColorSetRGB(0x00, 0x5F, 0xCC);
+#else
+ prefs->focus_ring_color = SkColorSetRGB(0x10, 0x10, 0x10);
+#endif
+ }
+}
+
+} // namespace
+
// static
HeadlessWebContentsImpl* HeadlessWebContentsImpl::From(
HeadlessWebContents* web_contents) {
@@ -177,6 +205,13 @@ class HeadlessWebContentsImpl::Delegate : public content::WebContentsDelegate {
->block_new_web_contents();
}
+ void RequestToLockMouse(content::WebContents* web_contents,
+ bool user_gesture,
+ bool last_unlocked_by_target) override {
+ web_contents->GotResponseToLockMouseRequest(
+ blink::mojom::PointerLockResult::kSuccess);
+ }
+
private:
HeadlessBrowserImpl* browser() { return headless_web_contents_->browser(); }
@@ -285,16 +320,17 @@ HeadlessWebContentsImpl::HeadlessWebContentsImpl(
std::unique_ptr<content::WebContents> web_contents,
HeadlessBrowserContextImpl* browser_context)
: content::WebContentsObserver(web_contents.get()),
+ browser_context_(browser_context),
+ render_process_host_(web_contents->GetMainFrame()->GetProcess()),
web_contents_delegate_(new HeadlessWebContentsImpl::Delegate(this)),
web_contents_(std::move(web_contents)),
agent_host_(
- content::DevToolsAgentHost::GetOrCreateFor(web_contents_.get())),
- browser_context_(browser_context),
- render_process_host_(web_contents_->GetMainFrame()->GetProcess()) {
+ content::DevToolsAgentHost::GetOrCreateFor(web_contents_.get())) {
#if BUILDFLAG(ENABLE_PRINTING)
HeadlessPrintManager::CreateForWebContents(web_contents_.get());
// TODO(weili): Add support for printing OOPIFs.
#endif
+ UpdatePrefsFromSystemSettings(web_contents_->GetMutableRendererPrefs());
web_contents_->GetMutableRendererPrefs()->accept_languages =
browser_context->options()->accept_language();
web_contents_->GetMutableRendererPrefs()->hinting =
diff --git a/chromium/headless/lib/browser/headless_web_contents_impl.h b/chromium/headless/lib/browser/headless_web_contents_impl.h
index 3281913ede2..ee3d0fe094d 100644
--- a/chromium/headless/lib/browser/headless_web_contents_impl.h
+++ b/chromium/headless/lib/browser/headless_web_contents_impl.h
@@ -141,6 +141,11 @@ class HEADLESS_EXPORT HeadlessWebContentsImpl
viz::BeginFrameArgs::kStartingFrameNumber;
bool begin_frame_control_enabled_ = false;
+ HeadlessBrowserContextImpl* browser_context_; // Not owned.
+ // TODO(alexclarke): With OOPIF there may be more than one renderer, we need
+ // to fix this. See crbug.com/715924
+ content::RenderProcessHost* render_process_host_; // Not owned.
+
class Delegate;
std::unique_ptr<Delegate> web_contents_delegate_;
std::unique_ptr<HeadlessWindowTreeHost> window_tree_host_;
@@ -151,11 +156,6 @@ class HEADLESS_EXPORT HeadlessWebContentsImpl
bool devtools_target_ready_notification_sent_ = false;
bool render_process_exited_ = false;
- HeadlessBrowserContextImpl* browser_context_; // Not owned.
- // TODO(alexclarke): With OOPIF there may be more than one renderer, we need
- // to fix this. See crbug.com/715924
- content::RenderProcessHost* render_process_host_; // Not owned.
-
base::ObserverList<HeadlessWebContents::Observer>::Unchecked observers_;
class PendingFrame;