electron/shell/browser/browser_process_impl.cc
electron-roller[bot] c670e38b4b
chore: bump chromium to 125.0.6412.0 (main) (#41610)
* chore: bump chromium in DEPS to 124.0.6361.0

* chore: bump chromium in DEPS to 124.0.6363.0

* chore: update patches

Manually apply printing.patch w/no code changes due to upstream shear.
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5349263

* chore: bump chromium in DEPS to 124.0.6365.0

* chore: bump chromium in DEPS to 124.0.6367.0

* update patches

* 5371735: Rename SystemGeolocationSourceMac to SystemGeolocationSourceApple

https://chromium-review.googlesource.com/c/chromium/src/+/5371735

* missed a MAS bit

* chore: update windows toolchain

5350823: New toolchain for Windows 11 10.0.22621.2428 SDK | https://chromium-review.googlesource.com/c/chromium/src/+/5350823

* chore: bump chromium in DEPS to 125.0.6368.0

* fix patches

* chore: update patches

* 5232401: [PDF] Move generic utils from //chrome to //components/pdf (1/2)

https://chromium-review.googlesource.com/c/chromium/src/+/5232401

* revert https://chromium-review.googlesource.com/c/chromium/src/+/5380898

* chore: bump chromium in DEPS to 125.0.6370.0

* build: use updated windows toolchain

* fix patches

* chore: update patches

* more pdf_util to components

* 5372414: [Extensions] Remove DispatcherDelegate

https://chromium-review.googlesource.com/c/chromium/src/+/5372414

* fix accessibility_ui patch

* chore: bump chromium in DEPS to 125.0.6372.0

* chore: bump chromium in DEPS to 125.0.6374.0

* chore: bump chromium in DEPS to 125.0.6376.0

* chore: bump chromium in DEPS to 125.0.6378.0

* chore: bump chromium in DEPS to 125.0.6379.3

* chore: update patches (+ MAS patch changes)

* chore: update patches

* 5381159: Cleanup media::KeySystemSupportObserver
https://chromium-review.googlesource.com/c/chromium/src/+/5381159

* 5382233: Reland "Web `Speech to Text` with SODA backend"
https://chromium-review.googlesource.com/c/chromium/src/+/5382233

* chore: update `exclusive_access` patch

- 5367497: Add a metric for the website state when Fullscreen API is requested
  - https://chromium-review.googlesource.com/c/chromium/src/+/5367497

* chore: add build dependency

5367497: Add a metric for the website state when Fullscreen API is requested
https://chromium-review.googlesource.com/c/chromium/src/+/5367497

* chore: bump chromium in DEPS to 125.0.6382.0

* chore: update libcxx filenames

* chore: update patches

* chore: bump chromium in DEPS to 125.0.6384.0

* chore: remove old patch

* 5394039: [Extensions] Change "blessed" -> "privileged" in extension feature files
https://chromium-review.googlesource.com/c/chromium/src/+/5394039

* fix: remove deprecated errno constants in node/libuv

* 5362194: Return expected from ProcessMetrics CPU methods
https://chromium-review.googlesource.com/c/chromium/src/+/5362194

* 5383927: Add new Pickle factory functions with explicit ownership
https://chromium-review.googlesource.com/c/chromium/src/+/5383927

* 5373340: Simplify app-region/Draggable Region implementation
https://chromium-review.googlesource.com/c/chromium/src/+/5373340

* 5386875: Cleanup printing preferences files
https://chromium-review.googlesource.com/c/chromium/src/+/5386875

* chore: update libc++ filenames

* fix: add enterprise buildflags dep

* chore: bump chromium in DEPS to 125.0.6386.0

* chore: add build dep

* chore: update patches

* chore: bump chromium in DEPS to 125.0.6388.0

* chore: bump chromium in DEPS to 125.0.6390.0

* chore: update patches

* 4918014: preloading: Add NewTabPagePageLoadMetricsObserver
https://chromium-review.googlesource.com/c/chromium/src/+/4918014

* 5401234: [PDF] Remove `PDFDocumentHelperClient::FindPdfChildFrame` API
https://chromium-review.googlesource.com/c/chromium/src/+/5401234

* 5116175: Relocate Windows XPS printing feature helper methods
https://chromium-review.googlesource.com/c/chromium/src/+/5116175

* fixup! 5373340: Simplify app-region/Draggable Region implementation https://chromium-review.googlesource.com/c/chromium/src/+/5373340

* fixup! chore: add build dep

* chore: remove dead code & dead patch

Was dealing with https://chromium-review.googlesource.com/c/chromium/src/+/5402805 when I realized this code is no longer possible to call. It seems like this code became dead in the previous roll (#41514).

The patch exposed a `DxdiagDx12VulkanRequested` method on Chromium's `GpuDataManagerImpl`, which we consumed only in our own `GPUInfoManager::NeedsCompleteGpuInfoCollection`. There are no other references to this method, so it and the patch can both be deleted. Yay!

* chore: bump chromium in DEPS to 125.0.6392.0

* chore: bump chromium in DEPS to 125.0.6393.0

* chore: update patches

* chore: bump chromium in DEPS to 125.0.6394.0

* chore: bump chromium in DEPS to 125.0.6396.0

* chore: bump chromium in DEPS to 125.0.6397.0

* chore: update printing.patch

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5100842

No code changes, but had to apply patch manually due to upstream code shear

* chore: update add_maximized_parameter_to_linuxui_getwindowframeprovider.patch

No manual changes; patch applied with fuzz 1

* chore: update feat_allow_code_cache_in_custom_schemes.patch

No manual changes; patch applied with fuzz 2

* chore: silence "space before tab in indent" git rebase-apply warning

* chore: e patches all

* build: update all.gn to avoid FTBFS when disabling raw_ptr

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5371737

* Rename PdfService Mojo interface to PdfHost

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5411957

* chore: bump chromium in DEPS to 125.0.6398.0

* chore: update patches

* chore: bump chromium in DEPS to 125.0.6400.0

* chore: update patches

* [media] Remove unused `GetSupportedKeySystems` from MediaClient

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5420247

* chore: update JSInjection::New call to match upstream change

Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5403967

[Extensions] Wire up the renderer for multiple user script worlds

* 5362362: Derive display ID from monitor adapter ID instead of szDevice.

https://chromium-review.googlesource.com/c/chromium/src/+/5362362

* 5116175: Relocate Windows XPS printing feature helper methods

https://chromium-review.googlesource.com/c/chromium/src/+/5116175

* chore: add v8-sandbox.h to electron-node

* chore: update patches

* chore: update patches

* fixup! 5394039: [Extensions] Change blessed -> privileged in extension feature files

* chore: bump chromium in DEPS to 125.0.6412.0

* chore: update patches

* chore: node script/gen-libc++-filenames.js

* [FPF] Create Fingerprinting Protection ruleset service.

Refs https://chromium-review.googlesource.com/c/chromium/src/+/5420158

* Add ExclusiveAccessPermissionManager

Refs https://chromium-review.googlesource.com/c/chromium/src/+/5273787

* Preserve the PNG colorspace when decoding into a SkBitmap.

Refs https://chromium-review.googlesource.com/c/chromium/src/+/5421254

* chore: iwyu

* fix: abstract-socket compilation

* ci: bump container for node 20 support

* fixup! abstract-socket compilation

* fix: compiling nan specs

* chore: revert winreg version bump

accidental bump to 1.2.5 revealed failing app.setasdefaultprotocolclient
test suite. Should be revisited separately.

* ci: set node 20 for darwin x64 tests

* fix: broken patch export

* chore: cleanup mas_avoid_private_macos_api_usage.patch.patch

Removed code that was inadvertently put back after https://chromium-review.googlesource.com/c/chromium/src/+/5348565 removed it

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: clavin <clavin@electronjs.org>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2024-04-15 18:10:32 -04:00

409 lines
13 KiB
C++

// Copyright (c) 2012 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.
#include "shell/browser/browser_process_impl.h"
#include <memory>
#include <utility>
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "chrome/browser/browser_process.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "components/os_crypt/async/browser/key_provider.h"
#include "components/os_crypt/async/browser/os_crypt_async.h"
#include "components/os_crypt/sync/os_crypt.h"
#include "components/prefs/in_memory_pref_store.h"
#include "components/prefs/json_pref_store.h"
#include "components/prefs/overlay_user_pref_store.h"
#include "components/prefs/pref_registry.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service_factory.h"
#include "components/proxy_config/pref_proxy_config_tracker_impl.h"
#include "components/proxy_config/proxy_config_dictionary.h"
#include "components/proxy_config/proxy_config_pref_names.h"
#include "content/public/browser/child_process_security_policy.h"
#include "content/public/browser/network_quality_observer_factory.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/common/content_switches.h"
#include "electron/fuses.h"
#include "extensions/common/constants.h"
#include "net/proxy_resolution/proxy_config.h"
#include "net/proxy_resolution/proxy_config_service.h"
#include "net/proxy_resolution/proxy_config_with_annotation.h"
#include "services/device/public/cpp/geolocation/geolocation_system_permission_manager.h"
#include "services/network/public/cpp/network_switches.h"
#include "shell/browser/net/resolve_proxy_helper.h"
#include "shell/common/electron_paths.h"
#include "shell/common/thread_restrictions.h"
#if BUILDFLAG(ENABLE_PRINTING)
#include "chrome/browser/printing/print_job_manager.h"
#endif
BrowserProcessImpl::BrowserProcessImpl() {
g_browser_process = this;
}
BrowserProcessImpl::~BrowserProcessImpl() {
g_browser_process = nullptr;
}
// static
void BrowserProcessImpl::ApplyProxyModeFromCommandLine(
ValueMapPrefStore* pref_store) {
if (!pref_store)
return;
auto* command_line = base::CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(switches::kNoProxyServer)) {
pref_store->SetValue(proxy_config::prefs::kProxy,
base::Value(ProxyConfigDictionary::CreateDirect()),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
} else if (command_line->HasSwitch(switches::kProxyPacUrl)) {
std::string pac_script_url =
command_line->GetSwitchValueASCII(switches::kProxyPacUrl);
pref_store->SetValue(proxy_config::prefs::kProxy,
base::Value(ProxyConfigDictionary::CreatePacScript(
pac_script_url, false /* pac_mandatory */)),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
} else if (command_line->HasSwitch(switches::kProxyAutoDetect)) {
pref_store->SetValue(proxy_config::prefs::kProxy,
base::Value(ProxyConfigDictionary::CreateAutoDetect()),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
} else if (command_line->HasSwitch(switches::kProxyServer)) {
std::string proxy_server =
command_line->GetSwitchValueASCII(switches::kProxyServer);
std::string bypass_list =
command_line->GetSwitchValueASCII(switches::kProxyBypassList);
pref_store->SetValue(proxy_config::prefs::kProxy,
base::Value(ProxyConfigDictionary::CreateFixedServers(
proxy_server, bypass_list)),
WriteablePrefStore::DEFAULT_PREF_WRITE_FLAGS);
}
}
BuildState* BrowserProcessImpl::GetBuildState() {
NOTIMPLEMENTED();
return nullptr;
}
void BrowserProcessImpl::PostEarlyInitialization() {
PrefServiceFactory prefs_factory;
auto pref_registry = base::MakeRefCounted<PrefRegistrySimple>();
PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry.get());
#if BUILDFLAG(IS_WIN)
OSCrypt::RegisterLocalPrefs(pref_registry.get());
#endif
in_memory_pref_store_ = base::MakeRefCounted<ValueMapPrefStore>();
ApplyProxyModeFromCommandLine(in_memory_pref_store());
prefs_factory.set_command_line_prefs(in_memory_pref_store());
// Only use a persistent prefs store when cookie encryption is enabled as that
// is the only key that needs it
base::FilePath prefs_path;
CHECK(base::PathService::Get(electron::DIR_SESSION_DATA, &prefs_path));
prefs_path = prefs_path.Append(FILE_PATH_LITERAL("Local State"));
electron::ScopedAllowBlockingForElectron allow_blocking;
scoped_refptr<JsonPrefStore> user_pref_store =
base::MakeRefCounted<JsonPrefStore>(prefs_path);
user_pref_store->ReadPrefs();
prefs_factory.set_user_prefs(user_pref_store);
local_state_ = prefs_factory.Create(std::move(pref_registry));
}
void BrowserProcessImpl::PreCreateThreads() {
// chrome-extension:// URLs are safe to request anywhere, but may only
// commit (including in iframes) in extension processes.
content::ChildProcessSecurityPolicy::GetInstance()
->RegisterWebSafeIsolatedScheme(extensions::kExtensionScheme, true);
// Must be created before the IOThread.
// Once IOThread class is no longer needed,
// this can be created on first use.
if (!SystemNetworkContextManager::GetInstance())
SystemNetworkContextManager::CreateInstance(local_state_.get());
}
void BrowserProcessImpl::PreMainMessageLoopRun() {
CreateNetworkQualityObserver();
CreateOSCryptAsync();
}
void BrowserProcessImpl::PostMainMessageLoopRun() {
if (local_state_)
local_state_->CommitPendingWrite();
// This expects to be destroyed before the task scheduler is torn down.
SystemNetworkContextManager::DeleteInstance();
}
bool BrowserProcessImpl::IsShuttingDown() {
return false;
}
metrics_services_manager::MetricsServicesManager*
BrowserProcessImpl::GetMetricsServicesManager() {
return nullptr;
}
metrics::MetricsService* BrowserProcessImpl::metrics_service() {
return nullptr;
}
ProfileManager* BrowserProcessImpl::profile_manager() {
return nullptr;
}
PrefService* BrowserProcessImpl::local_state() {
DCHECK(local_state_.get());
return local_state_.get();
}
scoped_refptr<network::SharedURLLoaderFactory>
BrowserProcessImpl::shared_url_loader_factory() {
return system_network_context_manager()->GetSharedURLLoaderFactory();
}
variations::VariationsService* BrowserProcessImpl::variations_service() {
return nullptr;
}
BrowserProcessPlatformPart* BrowserProcessImpl::platform_part() {
return nullptr;
}
extensions::EventRouterForwarder*
BrowserProcessImpl::extension_event_router_forwarder() {
return nullptr;
}
NotificationUIManager* BrowserProcessImpl::notification_ui_manager() {
return nullptr;
}
NotificationPlatformBridge* BrowserProcessImpl::notification_platform_bridge() {
return nullptr;
}
SystemNetworkContextManager*
BrowserProcessImpl::system_network_context_manager() {
DCHECK(SystemNetworkContextManager::GetInstance());
return SystemNetworkContextManager::GetInstance();
}
network::NetworkQualityTracker* BrowserProcessImpl::network_quality_tracker() {
return nullptr;
}
embedder_support::OriginTrialsSettingsStorage*
BrowserProcessImpl::GetOriginTrialsSettingsStorage() {
return &origin_trials_settings_storage_;
}
policy::ChromeBrowserPolicyConnector*
BrowserProcessImpl::browser_policy_connector() {
return nullptr;
}
policy::PolicyService* BrowserProcessImpl::policy_service() {
return nullptr;
}
IconManager* BrowserProcessImpl::icon_manager() {
return nullptr;
}
GpuModeManager* BrowserProcessImpl::gpu_mode_manager() {
return nullptr;
}
printing::PrintPreviewDialogController*
BrowserProcessImpl::print_preview_dialog_controller() {
return nullptr;
}
printing::BackgroundPrintingManager*
BrowserProcessImpl::background_printing_manager() {
return nullptr;
}
IntranetRedirectDetector* BrowserProcessImpl::intranet_redirect_detector() {
return nullptr;
}
DownloadStatusUpdater* BrowserProcessImpl::download_status_updater() {
return nullptr;
}
DownloadRequestLimiter* BrowserProcessImpl::download_request_limiter() {
return nullptr;
}
BackgroundModeManager* BrowserProcessImpl::background_mode_manager() {
return nullptr;
}
StatusTray* BrowserProcessImpl::status_tray() {
return nullptr;
}
safe_browsing::SafeBrowsingService*
BrowserProcessImpl::safe_browsing_service() {
return nullptr;
}
subresource_filter::RulesetService*
BrowserProcessImpl::subresource_filter_ruleset_service() {
return nullptr;
}
component_updater::ComponentUpdateService*
BrowserProcessImpl::component_updater() {
return nullptr;
}
MediaFileSystemRegistry* BrowserProcessImpl::media_file_system_registry() {
return nullptr;
}
WebRtcLogUploader* BrowserProcessImpl::webrtc_log_uploader() {
return nullptr;
}
network_time::NetworkTimeTracker* BrowserProcessImpl::network_time_tracker() {
return nullptr;
}
gcm::GCMDriver* BrowserProcessImpl::gcm_driver() {
return nullptr;
}
resource_coordinator::ResourceCoordinatorParts*
BrowserProcessImpl::resource_coordinator_parts() {
return nullptr;
}
resource_coordinator::TabManager* BrowserProcessImpl::GetTabManager() {
return nullptr;
}
SerialPolicyAllowedPorts* BrowserProcessImpl::serial_policy_allowed_ports() {
return nullptr;
}
HidSystemTrayIcon* BrowserProcessImpl::hid_system_tray_icon() {
return nullptr;
}
UsbSystemTrayIcon* BrowserProcessImpl::usb_system_tray_icon() {
return nullptr;
}
subresource_filter::RulesetService*
BrowserProcessImpl::fingerprinting_protection_ruleset_service() {
return nullptr;
}
os_crypt_async::OSCryptAsync* BrowserProcessImpl::os_crypt_async() {
return os_crypt_async_.get();
}
void BrowserProcessImpl::SetSystemLocale(const std::string& locale) {
system_locale_ = locale;
}
const std::string& BrowserProcessImpl::GetSystemLocale() const {
return system_locale_;
}
electron::ResolveProxyHelper* BrowserProcessImpl::GetResolveProxyHelper() {
if (!resolve_proxy_helper_) {
resolve_proxy_helper_ = base::MakeRefCounted<electron::ResolveProxyHelper>(
system_network_context_manager()->GetContext());
}
return resolve_proxy_helper_.get();
}
#if BUILDFLAG(IS_LINUX)
void BrowserProcessImpl::SetLinuxStorageBackend(
os_crypt::SelectedLinuxBackend selected_backend) {
switch (selected_backend) {
case os_crypt::SelectedLinuxBackend::BASIC_TEXT:
selected_linux_storage_backend_ = "basic_text";
break;
case os_crypt::SelectedLinuxBackend::GNOME_LIBSECRET:
selected_linux_storage_backend_ = "gnome_libsecret";
break;
case os_crypt::SelectedLinuxBackend::KWALLET:
selected_linux_storage_backend_ = "kwallet";
break;
case os_crypt::SelectedLinuxBackend::KWALLET5:
selected_linux_storage_backend_ = "kwallet5";
break;
case os_crypt::SelectedLinuxBackend::KWALLET6:
selected_linux_storage_backend_ = "kwallet6";
break;
case os_crypt::SelectedLinuxBackend::DEFER:
NOTREACHED();
break;
}
}
#endif // BUILDFLAG(IS_LINUX)
void BrowserProcessImpl::SetApplicationLocale(const std::string& locale) {
locale_ = locale;
}
const std::string& BrowserProcessImpl::GetApplicationLocale() {
return locale_;
}
printing::PrintJobManager* BrowserProcessImpl::print_job_manager() {
#if BUILDFLAG(ENABLE_PRINTING)
if (!print_job_manager_)
print_job_manager_ = std::make_unique<printing::PrintJobManager>();
return print_job_manager_.get();
#else
return nullptr;
#endif
}
StartupData* BrowserProcessImpl::startup_data() {
return nullptr;
}
network::NetworkQualityTracker* BrowserProcessImpl::GetNetworkQualityTracker() {
if (!network_quality_tracker_) {
network_quality_tracker_ = std::make_unique<network::NetworkQualityTracker>(
base::BindRepeating(&content::GetNetworkService));
}
return network_quality_tracker_.get();
}
void BrowserProcessImpl::CreateNetworkQualityObserver() {
DCHECK(!network_quality_observer_);
network_quality_observer_ =
content::CreateNetworkQualityObserver(GetNetworkQualityTracker());
DCHECK(network_quality_observer_);
}
void BrowserProcessImpl::CreateOSCryptAsync() {
// source: https://chromium-review.googlesource.com/c/chromium/src/+/4455776
// For now, initialize OSCryptAsync with no providers. This delegates all
// encryption operations to OSCrypt.
// TODO(crbug.com/1373092): Add providers behind features, as support for them
// is added.
os_crypt_async_ = std::make_unique<os_crypt_async::OSCryptAsync>(
std::vector<
std::pair<size_t, std::unique_ptr<os_crypt_async::KeyProvider>>>());
// Trigger async initialization of OSCrypt key providers.
std::ignore = os_crypt_async_->GetInstance(base::DoNothing());
}