![electron-roller[bot]](/assets/img/avatar_default.png) 30fbeec036
			
		
	
	
	
	
	30fbeec036* chore: bump chromium in DEPS to 130.0.6723.4 * chore: bump chromium in DEPS to 131.0.6724.0 * chore: update patches * chore: update libc++ filenames * 5844369: controlledframe: Disable Web Bluetooth for <webview> & <controlledframe> https://chromium-review.googlesource.com/c/chromium/src/+/5844369 * (multiple CLs): Use an opaque type for FrameTreeNode IDs 5807683: Use an opaque type for FrameTreeNode IDs, part 1 | https://chromium-review.googlesource.com/c/chromium/src/+/5807683 5829746: Use an opaque type for FrameTreeNode IDs, part 2 | https://chromium-review.googlesource.com/c/chromium/src/+/5829746 5836903: Use an opaque type for FrameTreeNode IDs, part 7 | https://chromium-review.googlesource.com/c/chromium/src/+/5836903 5837249: Use an opaque type for FrameTreeNode IDs, part 8 | https://chromium-review.googlesource.com/c/chromium/src/+/5837249 5836564: Use an opaque type for FrameTreeNode IDs, part 12 | https://chromium-review.googlesource.com/c/chromium/src/+/5836564 5837180: Use an opaque type for FrameTreeNode IDs, part 15 | https://chromium-review.googlesource.com/c/chromium/src/+/5837180 * 5822889: [task] Make GetForegroundTaskRunner non-virtual https://chromium-review.googlesource.com/c/v8/v8/+/5822889 * 5833297: Remove unused inner WebContents attach params https://chromium-review.googlesource.com/c/chromium/src/+/5833297 * 5806403: Shift PowerMonitor to non static https://chromium-review.googlesource.com/c/chromium/src/+/5806403 * 5666874: [3/N] Remove old OnPowerChange in PowerObserver https://chromium-review.googlesource.com/c/chromium/src/+/5666874 * 5829085: [v8] Differentiate between UserVisible and BestEffort task runners https://chromium-review.googlesource.com/c/chromium/src/+/5829085 * 5791112: [webrtc] Use `c/b/permissions/system` for system permissions https://chromium-review.googlesource.com/c/chromium/src/+/5791112 * 5825636: [Extensions] Create WebContentsObservers with ExtensionsBrowserClient https://chromium-review.googlesource.com/c/chromium/src/+/5825636 * fixup! (multiple CLs): Use an opaque type for FrameTreeNode IDs * fixup! 5791112: [webrtc] Use `c/b/permissions/system` for system permissions https://chromium-review.googlesource.com/c/chromium/src/+/5791112 * chore: bump chromium in DEPS to 131.0.6726.0 * chore: update patches * chore: update libc++ filenames * 5858119: Declutter: Allow opening to a specific feature https://chromium-review.googlesource.com/c/chromium/src/+/5858119 * fix: macOS SDK 15 error Not sure exactly what changed in the upgrade to macOS SDK 15, but it triggered a new error: ``` electron/shell/browser/ui/message_box_mac.mm:84:7: error: multiple methods named 'highlight:' found with mismatched result, parameter type or attributes ``` The `highlight:` selector a few lines down was ambiguous because the object type of the `NSArray` was not specified. Specifying `NSButton` as the element type makes the selector unambiguous for type checking. * 5854143: [File Download Access Prevention] Obfuscate download file for enterprise deep scan https://chromium-review.googlesource.com/c/chromium/src/+/5854143 * 5854811: Use kNotAllowedError instead of kSecurityError for Web MIDI https://chromium-review.googlesource.com/c/chromium/src/+/5854811 * chore: bump chromium in DEPS to 131.0.6728.0 * chore: update patches * disable invalid test * chore: bump chromium in DEPS to 131.0.6730.0 * chore: update patches * update build tools target commit for new macOS SDK * chore: update libc++ file names * chore: bump chromium in DEPS to 131.0.6732.0 * chore: bump chromium in DEPS to 131.0.6734.0 * 5856527: [UI] Use mojo enum for `WindowShowState` in ui/ https://chromium-review.googlesource.com/c/chromium/src/+/5856527 * chore: update build-tools sha to include macOD 15.0 SDK --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: clavin <clavin@electronjs.org> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com> Co-authored-by: alice <alice@makenotion.com>
		
			
				
	
	
		
			355 lines
		
	
	
	
		
			15 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			355 lines
		
	
	
	
		
			15 KiB
			
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2013 GitHub, Inc.
 | |
| // Use of this source code is governed by the MIT license that can be
 | |
| // found in the LICENSE file.
 | |
| 
 | |
| #ifndef ELECTRON_SHELL_BROWSER_ELECTRON_BROWSER_CLIENT_H_
 | |
| #define ELECTRON_SHELL_BROWSER_ELECTRON_BROWSER_CLIENT_H_
 | |
| 
 | |
| #include <memory>
 | |
| #include <optional>
 | |
| #include <string>
 | |
| #include <string_view>
 | |
| #include <vector>
 | |
| 
 | |
| #include "base/containers/flat_map.h"
 | |
| #include "base/containers/flat_set.h"
 | |
| #include "base/memory/raw_ptr.h"
 | |
| #include "base/synchronization/lock.h"
 | |
| #include "content/public/browser/content_browser_client.h"
 | |
| #include "content/public/browser/frame_tree_node_id.h"
 | |
| #include "content/public/browser/render_process_host_observer.h"
 | |
| #include "content/public/browser/web_contents.h"
 | |
| #include "electron/buildflags/buildflags.h"
 | |
| #include "net/ssl/client_cert_identity.h"
 | |
| #include "services/metrics/public/cpp/ukm_source_id.h"
 | |
| #include "third_party/blink/public/mojom/badging/badging.mojom-forward.h"
 | |
| 
 | |
| namespace base {
 | |
| class FilePath;
 | |
| }  // namespace base
 | |
| 
 | |
| namespace content {
 | |
| class ClientCertificateDelegate;
 | |
| class PlatformNotificationService;
 | |
| class QuotaPermissionContext;
 | |
| }  // namespace content
 | |
| 
 | |
| namespace net {
 | |
| class SSLCertRequestInfo;
 | |
| }
 | |
| 
 | |
| namespace electron {
 | |
| 
 | |
| class ElectronBluetoothDelegate;
 | |
| class ElectronBrowserMainParts;
 | |
| class ElectronHidDelegate;
 | |
| class ElectronSerialDelegate;
 | |
| class ElectronUsbDelegate;
 | |
| class ElectronWebAuthenticationDelegate;
 | |
| class NotificationPresenter;
 | |
| class PlatformNotificationService;
 | |
| 
 | |
| class ElectronBrowserClient : public content::ContentBrowserClient,
 | |
|                               private content::RenderProcessHostObserver {
 | |
|  public:
 | |
|   static ElectronBrowserClient* Get();
 | |
|   static void SetApplicationLocale(const std::string& locale);
 | |
| 
 | |
|   ElectronBrowserClient();
 | |
|   ~ElectronBrowserClient() override;
 | |
| 
 | |
|   // disable copy
 | |
|   ElectronBrowserClient(const ElectronBrowserClient&) = delete;
 | |
|   ElectronBrowserClient& operator=(const ElectronBrowserClient&) = delete;
 | |
| 
 | |
|   using Delegate = content::ContentBrowserClient;
 | |
|   void set_delegate(Delegate* delegate) { delegate_ = delegate; }
 | |
| 
 | |
|   // Returns the WebContents for pending render processes.
 | |
|   content::WebContents* GetWebContentsFromProcessID(int process_id);
 | |
| 
 | |
|   NotificationPresenter* GetNotificationPresenter();
 | |
| 
 | |
|   void WebNotificationAllowed(content::RenderFrameHost* rfh,
 | |
|                               base::OnceCallback<void(bool, bool)> callback);
 | |
| 
 | |
|   // content::NavigatorDelegate
 | |
|   std::vector<std::unique_ptr<content::NavigationThrottle>>
 | |
|   CreateThrottlesForNavigation(content::NavigationHandle* handle) override;
 | |
| 
 | |
|   // content::ContentBrowserClient:
 | |
|   std::string GetApplicationLocale() override;
 | |
|   bool ShouldEnableStrictSiteIsolation() override;
 | |
|   void BindHostReceiverForRenderer(
 | |
|       content::RenderProcessHost* render_process_host,
 | |
|       mojo::GenericPendingReceiver receiver) override;
 | |
|   void ExposeInterfacesToRenderer(
 | |
|       service_manager::BinderRegistry* registry,
 | |
|       blink::AssociatedInterfaceRegistry* associated_registry,
 | |
|       content::RenderProcessHost* render_process_host) override;
 | |
|   void RegisterBrowserInterfaceBindersForFrame(
 | |
|       content::RenderFrameHost* render_frame_host,
 | |
|       mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override;
 | |
|   void RegisterBrowserInterfaceBindersForServiceWorker(
 | |
|       content::BrowserContext* browser_context,
 | |
|       const content::ServiceWorkerVersionBaseInfo& service_worker_version_info,
 | |
|       mojo::BinderMapWithContext<const content::ServiceWorkerVersionBaseInfo&>*
 | |
|           map) override;
 | |
| #if BUILDFLAG(IS_LINUX)
 | |
|   void GetAdditionalMappedFilesForChildProcess(
 | |
|       const base::CommandLine& command_line,
 | |
|       int child_process_id,
 | |
|       content::PosixFileDescriptorInfo* mappings) override;
 | |
| #endif
 | |
| 
 | |
|   std::string GetUserAgent() override;
 | |
|   void SetUserAgent(const std::string& user_agent);
 | |
|   blink::UserAgentMetadata GetUserAgentMetadata() override;
 | |
| 
 | |
|   content::SerialDelegate* GetSerialDelegate() override;
 | |
| 
 | |
|   content::BluetoothDelegate* GetBluetoothDelegate() override;
 | |
| 
 | |
|   content::HidDelegate* GetHidDelegate() override;
 | |
|   content::UsbDelegate* GetUsbDelegate() override;
 | |
| 
 | |
|   content::WebAuthenticationDelegate* GetWebAuthenticationDelegate() override;
 | |
| 
 | |
| #if BUILDFLAG(IS_MAC)
 | |
|   device::GeolocationSystemPermissionManager*
 | |
|   GetGeolocationSystemPermissionManager() override;
 | |
| #endif
 | |
| 
 | |
|   content::PlatformNotificationService* GetPlatformNotificationService();
 | |
| 
 | |
|  protected:
 | |
|   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
 | |
|   content::SpeechRecognitionManagerDelegate*
 | |
|   CreateSpeechRecognitionManagerDelegate() override;
 | |
|   content::TtsPlatform* GetTtsPlatform() override;
 | |
| 
 | |
|   void OverrideWebkitPrefs(content::WebContents* web_contents,
 | |
|                            blink::web_pref::WebPreferences* prefs) override;
 | |
|   void RegisterPendingSiteInstance(
 | |
|       content::RenderFrameHost* render_frame_host,
 | |
|       content::SiteInstance* pending_site_instance) override;
 | |
|   void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
 | |
|                                       int child_process_id) override;
 | |
|   std::string GetGeolocationApiKey() override;
 | |
|   content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
 | |
|       content::BrowserContext* context) override;
 | |
|   void AllowCertificateError(
 | |
|       content::WebContents* web_contents,
 | |
|       int cert_error,
 | |
|       const net::SSLInfo& ssl_info,
 | |
|       const GURL& request_url,
 | |
|       bool is_main_frame_request,
 | |
|       bool strict_enforcement,
 | |
|       base::OnceCallback<void(content::CertificateRequestResultType)> callback)
 | |
|       override;
 | |
|   base::OnceClosure SelectClientCertificate(
 | |
|       content::BrowserContext* browser_context,
 | |
|       int process_id,
 | |
|       content::WebContents* web_contents,
 | |
|       net::SSLCertRequestInfo* cert_request_info,
 | |
|       net::ClientCertIdentityList client_certs,
 | |
|       std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
 | |
|   bool CanCreateWindow(content::RenderFrameHost* opener,
 | |
|                        const GURL& opener_url,
 | |
|                        const GURL& opener_top_level_frame_url,
 | |
|                        const url::Origin& source_origin,
 | |
|                        content::mojom::WindowContainerType container_type,
 | |
|                        const GURL& target_url,
 | |
|                        const content::Referrer& referrer,
 | |
|                        const std::string& frame_name,
 | |
|                        WindowOpenDisposition disposition,
 | |
|                        const blink::mojom::WindowFeatures& features,
 | |
|                        const std::string& raw_features,
 | |
|                        const scoped_refptr<network::ResourceRequestBody>& body,
 | |
|                        bool user_gesture,
 | |
|                        bool opener_suppressed,
 | |
|                        bool* no_javascript_access) override;
 | |
|   std::unique_ptr<content::VideoOverlayWindow>
 | |
|   CreateWindowForVideoPictureInPicture(
 | |
|       content::VideoPictureInPictureWindowController* controller) override;
 | |
|   void GetAdditionalAllowedSchemesForFileSystem(
 | |
|       std::vector<std::string>* additional_schemes) override;
 | |
|   void GetAdditionalWebUISchemes(
 | |
|       std::vector<std::string>* additional_schemes) override;
 | |
|   std::unique_ptr<net::ClientCertStore> CreateClientCertStore(
 | |
|       content::BrowserContext* browser_context) override;
 | |
|   std::unique_ptr<device::LocationProvider> OverrideSystemLocationProvider()
 | |
|       override;
 | |
|   void ConfigureNetworkContextParams(
 | |
|       content::BrowserContext* browser_context,
 | |
|       bool in_memory,
 | |
|       const base::FilePath& relative_partition_path,
 | |
|       network::mojom::NetworkContextParams* network_context_params,
 | |
|       cert_verifier::mojom::CertVerifierCreationParams*
 | |
|           cert_verifier_creation_params) override;
 | |
|   network::mojom::NetworkContext* GetSystemNetworkContext() override;
 | |
|   content::MediaObserver* GetMediaObserver() override;
 | |
|   std::unique_ptr<content::DevToolsManagerDelegate>
 | |
|   CreateDevToolsManagerDelegate() override;
 | |
|   std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
 | |
|       bool /* is_integration_test */) override;
 | |
|   base::FilePath GetDefaultDownloadDirectory() override;
 | |
|   scoped_refptr<network::SharedURLLoaderFactory>
 | |
|   GetSystemSharedURLLoaderFactory() override;
 | |
|   void OnNetworkServiceCreated(
 | |
|       network::mojom::NetworkService* network_service) override;
 | |
|   std::vector<base::FilePath> GetNetworkContextsParentDirectory() override;
 | |
|   std::string GetProduct() override;
 | |
|   mojo::PendingRemote<network::mojom::URLLoaderFactory>
 | |
|   CreateNonNetworkNavigationURLLoaderFactory(
 | |
|       const std::string& scheme,
 | |
|       content::FrameTreeNodeId frame_tree_node_id) override;
 | |
|   void RegisterNonNetworkWorkerMainResourceURLLoaderFactories(
 | |
|       content::BrowserContext* browser_context,
 | |
|       NonNetworkURLLoaderFactoryMap* factories) override;
 | |
|   void RegisterNonNetworkSubresourceURLLoaderFactories(
 | |
|       int render_process_id,
 | |
|       int render_frame_id,
 | |
|       const std::optional<url::Origin>& request_initiator_origin,
 | |
|       NonNetworkURLLoaderFactoryMap* factories) override;
 | |
|   void RegisterNonNetworkServiceWorkerUpdateURLLoaderFactories(
 | |
|       content::BrowserContext* browser_context,
 | |
|       NonNetworkURLLoaderFactoryMap* factories) override;
 | |
|   void CreateWebSocket(
 | |
|       content::RenderFrameHost* frame,
 | |
|       WebSocketFactory factory,
 | |
|       const GURL& url,
 | |
|       const net::SiteForCookies& site_for_cookies,
 | |
|       const std::optional<std::string>& user_agent,
 | |
|       mojo::PendingRemote<network::mojom::WebSocketHandshakeClient>
 | |
|           handshake_client) override;
 | |
|   bool WillInterceptWebSocket(content::RenderFrameHost*) override;
 | |
|   void WillCreateURLLoaderFactory(
 | |
|       content::BrowserContext* browser_context,
 | |
|       content::RenderFrameHost* frame,
 | |
|       int render_process_id,
 | |
|       URLLoaderFactoryType type,
 | |
|       const url::Origin& request_initiator,
 | |
|       const net::IsolationInfo& isolation_info,
 | |
|       std::optional<int64_t> navigation_id,
 | |
|       ukm::SourceIdObj ukm_source_id,
 | |
|       network::URLLoaderFactoryBuilder& factory_builder,
 | |
|       mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
 | |
|           header_client,
 | |
|       bool* bypass_redirect_checks,
 | |
|       bool* disable_secure_dns,
 | |
|       network::mojom::URLLoaderFactoryOverridePtr* factory_override,
 | |
|       scoped_refptr<base::SequencedTaskRunner> navigation_response_task_runner)
 | |
|       override;
 | |
|   std::vector<std::unique_ptr<content::URLLoaderRequestInterceptor>>
 | |
|   WillCreateURLLoaderRequestInterceptors(
 | |
|       content::NavigationUIData* navigation_ui_data,
 | |
|       content::FrameTreeNodeId frame_tree_node_id,
 | |
|       int64_t navigation_id,
 | |
|       bool force_no_https_upgrade,
 | |
|       scoped_refptr<base::SequencedTaskRunner> navigation_response_task_runner)
 | |
|       override;
 | |
|   bool ShouldTreatURLSchemeAsFirstPartyWhenTopLevel(
 | |
|       std::string_view scheme,
 | |
|       bool is_embedded_origin_secure) override;
 | |
|   void OverrideURLLoaderFactoryParams(
 | |
|       content::BrowserContext* browser_context,
 | |
|       const url::Origin& origin,
 | |
|       bool is_for_isolated_world,
 | |
|       network::mojom::URLLoaderFactoryParams* factory_params) override;
 | |
|   void RegisterAssociatedInterfaceBindersForRenderFrameHost(
 | |
|       content::RenderFrameHost& render_frame_host,
 | |
|       blink::AssociatedInterfaceRegistry& associated_registry) override;
 | |
|   void RegisterAssociatedInterfaceBindersForServiceWorker(
 | |
|       const content::ServiceWorkerVersionBaseInfo& service_worker_version_info,
 | |
|       blink::AssociatedInterfaceRegistry& associated_registry) override;
 | |
| 
 | |
|   bool HandleExternalProtocol(
 | |
|       const GURL& url,
 | |
|       content::WebContents::Getter web_contents_getter,
 | |
|       content::FrameTreeNodeId frame_tree_node_id,
 | |
|       content::NavigationUIData* navigation_data,
 | |
|       bool is_primary_main_frame,
 | |
|       bool is_in_fenced_frame_tree,
 | |
|       network::mojom::WebSandboxFlags sandbox_flags,
 | |
|       ui::PageTransition page_transition,
 | |
|       bool has_user_gesture,
 | |
|       const std::optional<url::Origin>& initiating_origin,
 | |
|       content::RenderFrameHost* initiator_document,
 | |
|       mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
 | |
|       override;
 | |
|   std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
 | |
|       const net::AuthChallengeInfo& auth_info,
 | |
|       content::WebContents* web_contents,
 | |
|       content::BrowserContext* browser_context,
 | |
|       const content::GlobalRequestID& request_id,
 | |
|       bool is_main_frame,
 | |
|       const GURL& url,
 | |
|       scoped_refptr<net::HttpResponseHeaders> response_headers,
 | |
|       bool first_auth_attempt,
 | |
|       LoginAuthRequiredCallback auth_required_callback) override;
 | |
|   void SiteInstanceGotProcessAndSite(
 | |
|       content::SiteInstance* site_instance) override;
 | |
|   std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
 | |
|   CreateURLLoaderThrottles(
 | |
|       const network::ResourceRequest& request,
 | |
|       content::BrowserContext* browser_context,
 | |
|       const base::RepeatingCallback<content::WebContents*()>& wc_getter,
 | |
|       content::NavigationUIData* navigation_ui_data,
 | |
|       content::FrameTreeNodeId frame_tree_node_id,
 | |
|       std::optional<int64_t> navigation_id) override;
 | |
|   base::flat_set<std::string> GetPluginMimeTypesWithExternalHandlers(
 | |
|       content::BrowserContext* browser_context) override;
 | |
|   bool IsSuitableHost(content::RenderProcessHost* process_host,
 | |
|                       const GURL& site_url) override;
 | |
|   bool ShouldUseProcessPerSite(content::BrowserContext* browser_context,
 | |
|                                const GURL& effective_url) override;
 | |
|   void GetMediaDeviceIDSalt(
 | |
|       content::RenderFrameHost* rfh,
 | |
|       const net::SiteForCookies& site_for_cookies,
 | |
|       const blink::StorageKey& storage_key,
 | |
|       base::OnceCallback<void(bool, const std::string&)> callback) override;
 | |
|   base::FilePath GetLoggingFileName(const base::CommandLine& cmd_line) override;
 | |
| 
 | |
|   // content::RenderProcessHostObserver:
 | |
|   void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
 | |
|   void RenderProcessReady(content::RenderProcessHost* host) override;
 | |
|   void RenderProcessExited(
 | |
|       content::RenderProcessHost* host,
 | |
|       const content::ChildProcessTerminationInfo& info) override;
 | |
| 
 | |
|  private:
 | |
|   content::SiteInstance* GetSiteInstanceFromAffinity(
 | |
|       content::BrowserContext* browser_context,
 | |
|       const GURL& url,
 | |
|       content::RenderFrameHost* rfh) const;
 | |
| 
 | |
|   bool IsRendererSubFrame(int process_id) const;
 | |
| 
 | |
|   // pending_render_process => web contents.
 | |
|   base::flat_map<int, content::WebContents*> pending_processes_;
 | |
| 
 | |
|   base::flat_set<int> renderer_is_subframe_;
 | |
| 
 | |
|   std::unique_ptr<PlatformNotificationService> notification_service_;
 | |
|   std::unique_ptr<NotificationPresenter> notification_presenter_;
 | |
| 
 | |
|   raw_ptr<Delegate> delegate_ = nullptr;
 | |
| 
 | |
|   std::string user_agent_override_ = "";
 | |
| 
 | |
|   // Simple shared ID generator, used by ProxyingURLLoaderFactory and
 | |
|   // ProxyingWebSocket classes.
 | |
|   uint64_t next_id_ = 0;
 | |
| 
 | |
|   std::unique_ptr<ElectronSerialDelegate> serial_delegate_;
 | |
|   std::unique_ptr<ElectronBluetoothDelegate> bluetooth_delegate_;
 | |
|   std::unique_ptr<ElectronUsbDelegate> usb_delegate_;
 | |
|   std::unique_ptr<ElectronHidDelegate> hid_delegate_;
 | |
|   std::unique_ptr<ElectronWebAuthenticationDelegate>
 | |
|       web_authentication_delegate_;
 | |
| };
 | |
| 
 | |
| }  // namespace electron
 | |
| 
 | |
| #endif  // ELECTRON_SHELL_BROWSER_ELECTRON_BROWSER_CLIENT_H_
 |