diff --git a/build/cromite_patches_list.txt b/build/cromite_patches_list.txt index dc740073c..76515b430 100644 --- a/build/cromite_patches_list.txt +++ b/build/cromite_patches_list.txt @@ -296,5 +296,3 @@ eyeo-beta-118.0.5993.48-android_api.patch eyeo-beta-118.0.5993.48-android_settings.patch eyeo-beta-118.0.5993.48-extension_api.patch Eyeo-Adblock-Remove-Privacy-Issues.patch -AdblockPlus-add-blocking-in-service-workers.patch -AdblockPlus-connect-popup-blocker.patch diff --git a/build/patches/AdblockPlus-add-blocking-in-service-workers.patch b/build/patches/AdblockPlus-add-blocking-in-service-workers.patch deleted file mode 100644 index 2ec78fdb8..000000000 --- a/build/patches/AdblockPlus-add-blocking-in-service-workers.patch +++ /dev/null @@ -1,729 +0,0 @@ -From: uazo -Date: Thu, 7 Sep 2023 07:25:25 +0000 -Subject: AdblockPlus add blocking in service workers - -License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html ---- - .../adblock/adblock_content_browser_client.cc | 184 ++++++++++++------ - .../adblock/adblock_content_browser_client.h | 27 ++- - .../browser/chrome_content_browser_client.cc | 6 +- - .../browser/chrome_content_browser_client.h | 6 +- - .../browser/adblock_url_loader_factory.cc | 10 +- - .../browser/adblock_url_loader_factory.h | 3 + - .../browser/frame_hierarchy_builder.cc | 3 +- - .../browser/resource_classification_runner.h | 8 + - .../resource_classification_runner_impl.cc | 30 ++- - .../resource_classification_runner_impl.h | 8 + - .../websockets/websocket_connector_impl.cc | 6 +- - .../public/browser/content_browser_client.cc | 4 +- - .../public/browser/content_browser_client.h | 4 +- - 13 files changed, 216 insertions(+), 83 deletions(-) - -diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/browser/adblock/adblock_content_browser_client.cc ---- a/chrome/browser/adblock/adblock_content_browser_client.cc -+++ b/chrome/browser/adblock/adblock_content_browser_client.cc -@@ -43,6 +43,7 @@ - #include "content/public/browser/web_contents.h" - #include "mojo/public/cpp/bindings/self_owned_receiver.h" - #include "services/network/public/mojom/websocket.mojom.h" -+#include "services/network/public/mojom/web_transport.mojom.h" - #include "services/service_manager/public/cpp/binder_registry.h" - #include "third_party/blink/public/common/loader/url_loader_throttle.h" - -@@ -56,6 +57,29 @@ - - namespace { - -+bool IsFilteringNeeded(Profile* profile, const GURL& embedder_url) { -+ DCHECK(profile); -+ -+ if(embedder_url.is_empty()) { -+ // in android can be empty because it was created by -+ // RenderFrameHostImpl::CreateSubresourceLoaderFactoriesForInitialEmptyDocument -+ return true; -+ } -+ -+ HostContentSettingsMap* settings_map = HostContentSettingsMapFactory::GetForProfile(profile); -+ if (settings_map && settings_map->GetContentSetting(embedder_url, GURL(), ContentSettingsType::ADS) -+ == CONTENT_SETTING_ALLOW) { -+ return false; -+ } -+ // Filtering may be needed if there's at least one enabled -+ // FilteringConfiguration. -+ bool ret = base::ranges::any_of( -+ adblock::SubscriptionServiceFactory::GetForBrowserContext(profile) -+ ->GetInstalledFilteringConfigurations(), -+ &adblock::FilteringConfiguration::IsEnabled); -+ return ret; -+} -+ - bool IsFilteringNeeded(content::RenderFrameHost* frame) { - if (frame) { - auto* profile = -@@ -63,17 +87,7 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { - if (profile) { - content::RenderFrameHost* embedder = frame->GetOutermostMainFrameOrEmbedder(); - const auto& embedder_url = embedder->GetLastCommittedURL(); -- HostContentSettingsMap* settings_map = HostContentSettingsMapFactory::GetForProfile(profile); -- if (settings_map && settings_map->GetContentSetting(embedder_url, GURL(), ContentSettingsType::ADS) -- == CONTENT_SETTING_ALLOW) { -- return false; -- } -- // Filtering may be needed if there's at least one enabled -- // FilteringConfiguration. -- return base::ranges::any_of( -- adblock::SubscriptionServiceFactory::GetForBrowserContext(profile) -- ->GetInstalledFilteringConfigurations(), -- &adblock::FilteringConfiguration::IsEnabled); -+ return IsFilteringNeeded(profile, embedder_url); - } - } - return false; -@@ -88,6 +102,8 @@ class AdblockContextData : public base::SupportsUserData::Data { - - static void StartProxying( - Profile* profile, -+ content::BrowserContext* browser_context, -+ const url::Origin& request_initiator, - content::RenderFrameHost* frame, - int render_process_id, - mojo::PendingReceiver receiver, -@@ -100,8 +116,6 @@ class AdblockContextData : public base::SupportsUserData::Data { - self = new AdblockContextData(); - profile->SetUserData(kAdblockContextUserDataKey, base::WrapUnique(self)); - } -- auto* browser_context = -- content::WebContents::FromRenderFrameHost(frame)->GetBrowserContext(); - adblock::AdblockURLLoaderFactoryConfig config{ - adblock::SubscriptionServiceFactory::GetForBrowserContext( - browser_context), -@@ -113,8 +127,9 @@ class AdblockContextData : public base::SupportsUserData::Data { - browser_context)}; - auto proxy = std::make_unique( - std::move(config), -+ request_initiator.GetURL(), - content::GlobalRenderFrameHostId(render_process_id, -- frame->GetRoutingID()), -+ frame ? frame->GetRoutingID() : MSG_ROUTING_NONE), - std::move(receiver), std::move(target_factory), - embedder_support::GetUserAgent(), - base::BindOnce(&AdblockContextData::RemoveProxy, -@@ -155,47 +170,50 @@ void AdblockContentBrowserClient::ForceAdblockProxyForTesting() { - #endif - - bool AdblockContentBrowserClient::WillInterceptWebSocket( -- content::RenderFrameHost* frame) { -+ content::RenderFrameHost* frame, -+ content::RenderProcessHost* process, -+ const url::Origin& origin) { - if (IsFilteringNeeded(frame)) { - return true; -+ } else { -+ auto* browser_context = process->GetBrowserContext(); -+ auto* profile = Profile::FromBrowserContext(browser_context); -+ if (IsFilteringNeeded(profile, origin.GetURL().GetAsReferrer())) { -+ return true; -+ } - } - -- return ChromeContentBrowserClient::WillInterceptWebSocket(frame); -+ return ChromeContentBrowserClient::WillInterceptWebSocket(frame, process, origin); - } - - void AdblockContentBrowserClient::CreateWebSocket( -+ content::RenderProcessHost* process, - content::RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client) { -- if (IsFilteringNeeded(frame)) { -- CreateWebSocketInternal(frame->GetGlobalId(), std::move(factory), url, -- site_for_cookies, user_agent, -- std::move(handshake_client)); -- } else { -- DCHECK(ChromeContentBrowserClient::WillInterceptWebSocket(frame)); -- ChromeContentBrowserClient::CreateWebSocket(frame, std::move(factory), url, -- site_for_cookies, user_agent, -- std::move(handshake_client)); -- } -+ CreateWebSocketInternal(process, -+ frame ? frame->GetGlobalId() : content::GlobalRenderFrameHostId(), -+ std::move(factory), url, initiator_origin, -+ site_for_cookies, user_agent, -+ std::move(handshake_client)); - } - - void AdblockContentBrowserClient::CreateWebSocketInternal( -+ content::RenderProcessHost* process, - content::GlobalRenderFrameHostId render_frame_host_id, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client) { -- auto* frame = content::RenderFrameHost::FromID(render_frame_host_id); -- if (!frame) { -- return; -- } -- auto* browser_context = frame->GetProcess()->GetBrowserContext(); -+ auto* browser_context = process->GetBrowserContext(); - auto* subscription_service = - adblock::SubscriptionServiceFactory::GetForBrowserContext( - browser_context); -@@ -203,33 +221,33 @@ void AdblockContentBrowserClient::CreateWebSocketInternal( - adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( - browser_context); - classification_runner->CheckRequestFilterMatchForWebSocket( -- subscription_service->GetCurrentSnapshot(), url, render_frame_host_id, -+ subscription_service->GetCurrentSnapshot(), url, -+ std::move(initiator_origin.GetURL().GetAsReferrer()), render_frame_host_id, - base::BindOnce( - &AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted, -- weak_factory_.GetWeakPtr(), render_frame_host_id, std::move(factory), -- url, site_for_cookies, user_agent, std::move(handshake_client))); -+ weak_factory_.GetWeakPtr(), process, render_frame_host_id, std::move(factory), -+ url, initiator_origin, site_for_cookies, user_agent, std::move(handshake_client))); - } - - void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( -+ content::RenderProcessHost* process, - content::GlobalRenderFrameHostId render_frame_host_id, - ChromeContentBrowserClient::WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client, - adblock::FilterMatchResult result) { - auto* frame = content::RenderFrameHost::FromID(render_frame_host_id); -- if (!frame) { -- return; -- } - const bool has_blocking_filter = - result == adblock::FilterMatchResult::kBlockRule; - if (!has_blocking_filter) { - VLOG(1) << "[eyeo] Web socket allowed for " << url; -- if (ChromeContentBrowserClient::WillInterceptWebSocket(frame)) { -+ if (ChromeContentBrowserClient::WillInterceptWebSocket(frame, process, initiator_origin)) { - ChromeContentBrowserClient::CreateWebSocket( -- frame, std::move(factory), url, site_for_cookies, user_agent, -+ process, frame, std::move(factory), url, initiator_origin, site_for_cookies, user_agent, - std::move(handshake_client)); - return; - } -@@ -246,6 +264,72 @@ void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( - VLOG(1) << "[eyeo] Web socket blocked for " << url; - } - -+void AdblockContentBrowserClient::WillCreateWebTransport( -+ int process_id, -+ int frame_routing_id, -+ const GURL& url, -+ const url::Origin& initiator_origin, -+ mojo::PendingRemote -+ handshake_client, -+ WillCreateWebTransportCallback callback) { -+ auto* process = content::RenderProcessHost::FromID(process_id); -+ DCHECK(process); -+ -+ auto* browser_context = process->GetBrowserContext(); -+ auto* profile = Profile::FromBrowserContext(browser_context); -+ if (IsFilteringNeeded(profile, initiator_origin.GetURL().GetAsReferrer())) { -+ auto* subscription_service = -+ adblock::SubscriptionServiceFactory::GetForBrowserContext( -+ browser_context); -+ auto* classification_runner = -+ adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( -+ browser_context); -+ -+ classification_runner->CheckRequestFilterMatchForWebTransport( -+ subscription_service->GetCurrentSnapshot(), url, -+ std::move(initiator_origin.GetURL().GetAsReferrer()), -+ content::GlobalRenderFrameHostId(), -+ base::BindOnce( -+ &AdblockContentBrowserClient::OnWebTransportFilterCheckCompleted, -+ weak_factory_.GetWeakPtr(), -+ process_id, frame_routing_id, url, -+ std::move(initiator_origin), std::move(handshake_client), -+ std::move(callback))); -+ return; -+ } -+ -+ ChromeContentBrowserClient::WillCreateWebTransport( -+ process_id, frame_routing_id, -+ url, std::move(initiator_origin), -+ std::move(handshake_client), std::move(callback)); -+} -+ -+void AdblockContentBrowserClient::OnWebTransportFilterCheckCompleted( -+ int process_id, -+ int frame_routing_id, -+ const GURL& url, -+ const url::Origin& initiator_origin, -+ mojo::PendingRemote -+ handshake_client, -+ WillCreateWebTransportCallback callback, -+ adblock::FilterMatchResult result) { -+ const bool has_blocking_filter = -+ result == adblock::FilterMatchResult::kBlockRule; -+ if (!has_blocking_filter) { -+ VLOG(1) << "[eyeo] Web transport allowed for " << url; -+ ChromeContentBrowserClient::WillCreateWebTransport( -+ process_id, frame_routing_id, -+ url, std::move(initiator_origin), -+ std::move(handshake_client), std::move(callback)); -+ return; -+ } -+ VLOG(1) << "[eyeo] Web transport blocked for " << url; -+ std::move(callback).Run(std::move(handshake_client), -+ network::mojom::WebTransportError::New( -+ net::ERR_BLOCKED_BY_ADMINISTRATOR, quic::QUIC_INTERNAL_ERROR, -+ "Blocked", false)); -+} -+ - bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( - content::BrowserContext* browser_context, - content::RenderFrameHost* frame, -@@ -269,24 +353,12 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( - navigation_id, ukm_source_id, factory_receiver, header_client, - bypass_redirect_checks, disable_secure_dns, factory_override, - navigation_response_task_runner); -- auto* profile = frame ? Profile::FromBrowserContext( -- frame->GetProcess()->GetBrowserContext()) -- : nullptr; -- --#if BUILDFLAG(ENABLE_EXTENSIONS) -- if (!force_adblock_proxy_for_testing_ && -- request_initiator.scheme() == extensions::kExtensionScheme) { -- VLOG(1) << "[eyeo] Do not use adblock proxy for extensions requests " -- "[extension id:" -- << request_initiator.host() << "]."; -- return use_chrome_proxy; -- } --#endif -+ auto* profile = Profile::FromBrowserContext(browser_context); - - bool use_adblock_proxy = -- (type == URLLoaderFactoryType::kDocumentSubResource || -- type == URLLoaderFactoryType::kNavigation) && -- IsFilteringNeeded(frame); -+ type != URLLoaderFactoryType::kDownload && -+ (frame ? IsFilteringNeeded(frame) -+ : IsFilteringNeeded(profile, request_initiator.GetURL().GetAsReferrer())); - - bool use_test_loader = false; - #ifdef EYEO_INTERCEPT_DEBUG_URL -@@ -305,7 +377,7 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( - mojo::PendingRemote target_factory_remote; - *factory_receiver = target_factory_remote.InitWithNewPipeAndPassReceiver(); - AdblockContextData::StartProxying( -- profile, frame, render_process_id, std::move(proxied_receiver), -+ profile, browser_context, request_initiator, frame, render_process_id, std::move(proxied_receiver), - std::move(target_factory_remote), use_test_loader); - } - return use_adblock_proxy || use_chrome_proxy; -diff --git a/chrome/browser/adblock/adblock_content_browser_client.h b/chrome/browser/adblock/adblock_content_browser_client.h ---- a/chrome/browser/adblock/adblock_content_browser_client.h -+++ b/chrome/browser/adblock/adblock_content_browser_client.h -@@ -44,16 +44,27 @@ class AdblockContentBrowserClient : public ChromeContentBrowserClient { - static void ForceAdblockProxyForTesting(); - #endif - -- bool WillInterceptWebSocket(content::RenderFrameHost* frame) override; -+ bool WillInterceptWebSocket(content::RenderFrameHost* frame, content::RenderProcessHost* process, const url::Origin& origin) override; - void CreateWebSocket( -+ content::RenderProcessHost* process, - content::RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client) override; - -+ void WillCreateWebTransport( -+ int process_id, -+ int frame_routing_id, -+ const GURL& url, -+ const url::Origin& initiator_origin, -+ mojo::PendingRemote -+ handshake_client, -+ WillCreateWebTransportCallback callback) override; -+ - bool WillCreateURLLoaderFactory( - content::BrowserContext* browser_context, - content::RenderFrameHost* frame, -@@ -73,23 +84,35 @@ class AdblockContentBrowserClient : public ChromeContentBrowserClient { - - private: - void CreateWebSocketInternal( -+ content::RenderProcessHost* process, - content::GlobalRenderFrameHostId render_frame_host_id, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client); - void OnWebSocketFilterCheckCompleted( -+ content::RenderProcessHost* process, - content::GlobalRenderFrameHostId render_frame_host_id, - ChromeContentBrowserClient::WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const absl::optional& user_agent, - mojo::PendingRemote - handshake_client, - adblock::FilterMatchResult result); -- -+ void OnWebTransportFilterCheckCompleted( -+ int process_id, -+ int frame_routing_id, -+ const GURL& url, -+ const url::Origin& initiator_origin, -+ mojo::PendingRemote -+ handshake_client, -+ WillCreateWebTransportCallback callback, -+ adblock::FilterMatchResult result); - base::WeakPtrFactory weak_factory_{this}; - - #if BUILDFLAG(ENABLE_EXTENSIONS) -diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc ---- a/chrome/browser/chrome_content_browser_client.cc -+++ b/chrome/browser/chrome_content_browser_client.cc -@@ -6173,7 +6173,9 @@ ChromeContentBrowserClient:: - } - - bool ChromeContentBrowserClient::WillInterceptWebSocket( -- content::RenderFrameHost* frame) { -+ content::RenderFrameHost* frame, -+ content::RenderProcessHost* process, -+ const url::Origin& origin) { - #if BUILDFLAG(ENABLE_EXTENSIONS) - if (!frame) { - return false; -@@ -6196,9 +6198,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( - } - - void ChromeContentBrowserClient::CreateWebSocket( -+ content::RenderProcessHost* process, - content::RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const std::optional& user_agent, - mojo::PendingRemote -diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h ---- a/chrome/browser/chrome_content_browser_client.h -+++ b/chrome/browser/chrome_content_browser_client.h -@@ -645,11 +645,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { - CreateURLLoaderHandlerForServiceWorkerNavigationPreload( - int frame_tree_node_id, - const network::ResourceRequest& resource_request) override; -- bool WillInterceptWebSocket(content::RenderFrameHost* frame) override; -+ bool WillInterceptWebSocket(content::RenderFrameHost* frame, -+ content::RenderProcessHost* process, -+ const url::Origin& origin) override; - void CreateWebSocket( -+ content::RenderProcessHost* process, - content::RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const std::optional& user_agent, - mojo::PendingRemote -diff --git a/components/adblock/content/browser/adblock_url_loader_factory.cc b/components/adblock/content/browser/adblock_url_loader_factory.cc ---- a/components/adblock/content/browser/adblock_url_loader_factory.cc -+++ b/components/adblock/content/browser/adblock_url_loader_factory.cc -@@ -344,12 +344,6 @@ void AdblockURLLoaderFactory::InProgressRequest::OnRequestError( - - void AdblockURLLoaderFactory::InProgressRequest::CheckFilterMatch( - CheckFilterMatchCallback callback) { -- if (!factory_->CheckHostValid()) { -- PostFilterMatchCallbackToUI(std::move(callback), -- FilterMatchResult::kNoRule); -- return; -- } -- - auto subscription_service = factory_->config_.subscription_service; - if (is_document_request_) { - auto* host = content::RenderFrameHost::FromID(factory_->host_id_); -@@ -388,7 +382,7 @@ void AdblockURLLoaderFactory::InProgressRequest::CheckFilterMatch( - } else { - factory_->config_.resource_classifier->CheckRequestFilterMatch( - subscription_service->GetCurrentSnapshot(), request_url_, -- adblock_resource_type_, factory_->host_id_, -+ factory_->request_initiator_, adblock_resource_type_, factory_->host_id_, - base::BindOnce( - &AdblockURLLoaderFactory::InProgressRequest::OnRequestUrlClassified, - weak_factory_.GetWeakPtr(), -@@ -677,12 +671,14 @@ void AdblockURLLoaderFactory::InProgressRequest::OnRequestFilterMatchResult( - - AdblockURLLoaderFactory::AdblockURLLoaderFactory( - AdblockURLLoaderFactoryConfig config, -+ GURL request_initiator, - content::GlobalRenderFrameHostId host_id, - mojo::PendingReceiver receiver, - mojo::PendingRemote target_factory, - std::string user_agent_string, - DisconnectCallback on_disconnect) - : config_(std::move(config)), -+ request_initiator_(std::move(request_initiator)), - host_id_(host_id), - user_agent_string_(std::move(user_agent_string)), - on_disconnect_(std::move(on_disconnect)) { -diff --git a/components/adblock/content/browser/adblock_url_loader_factory.h b/components/adblock/content/browser/adblock_url_loader_factory.h ---- a/components/adblock/content/browser/adblock_url_loader_factory.h -+++ b/components/adblock/content/browser/adblock_url_loader_factory.h -@@ -25,6 +25,7 @@ - #include "mojo/public/cpp/bindings/receiver_set.h" - #include "mojo/public/cpp/bindings/remote.h" - #include "services/network/public/mojom/url_loader_factory.mojom.h" -+#include "url/gurl.h" - - namespace adblock { - -@@ -57,6 +58,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { - - AdblockURLLoaderFactory( - AdblockURLLoaderFactoryConfig config, -+ GURL request_initiator, - content::GlobalRenderFrameHostId host_id, - mojo::PendingReceiver receiver, - mojo::PendingRemote target_factory, -@@ -86,6 +88,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { - void MaybeDestroySelf(); - - AdblockURLLoaderFactoryConfig config_; -+ const GURL request_initiator_; - content::GlobalRenderFrameHostId host_id_; - mojo::ReceiverSet proxy_receivers_; - std::set, base::UniquePtrComparator> -diff --git a/components/adblock/content/browser/frame_hierarchy_builder.cc b/components/adblock/content/browser/frame_hierarchy_builder.cc ---- a/components/adblock/content/browser/frame_hierarchy_builder.cc -+++ b/components/adblock/content/browser/frame_hierarchy_builder.cc -@@ -76,9 +76,8 @@ std::vector FrameHierarchyBuilder::BuildFrameHierarchy( - content::RenderFrameHost* host) const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - -- DCHECK(host) << "RenderFrameHost is needed to build frame hierarchy"; -- - std::vector referrers_chain; -+ if (!host) return referrers_chain; - for (auto* iter = host; iter; iter = iter->GetParent()) { - auto last_commited_referrer = GetUrlAsReferrer(iter); - if (IsValidForFrameHierarchy(last_commited_referrer)) { -diff --git a/components/adblock/content/browser/resource_classification_runner.h b/components/adblock/content/browser/resource_classification_runner.h ---- a/components/adblock/content/browser/resource_classification_runner.h -+++ b/components/adblock/content/browser/resource_classification_runner.h -@@ -81,12 +81,20 @@ class ResourceClassificationRunner : public KeyedService { - virtual void CheckRequestFilterMatch( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, - ContentType adblock_resource_type, - content::GlobalRenderFrameHostId render_frame_host_id, - CheckFilterMatchCallback callback) = 0; - virtual void CheckRequestFilterMatchForWebSocket( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, -+ content::GlobalRenderFrameHostId render_frame_host_id, -+ CheckFilterMatchCallback callback) = 0; -+ virtual void CheckRequestFilterMatchForWebTransport( -+ SubscriptionService::Snapshot subscription_collections, -+ const GURL& request_url, -+ const GURL& request_initiator, - content::GlobalRenderFrameHostId render_frame_host_id, - CheckFilterMatchCallback callback) = 0; - // No callback, just notify observers -diff --git a/components/adblock/content/browser/resource_classification_runner_impl.cc b/components/adblock/content/browser/resource_classification_runner_impl.cc ---- a/components/adblock/content/browser/resource_classification_runner_impl.cc -+++ b/components/adblock/content/browser/resource_classification_runner_impl.cc -@@ -169,15 +169,28 @@ void ResourceClassificationRunnerImpl::CheckPopupFilterMatch( - void ResourceClassificationRunnerImpl::CheckRequestFilterMatchForWebSocket( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, - content::GlobalRenderFrameHostId render_frame_host_id, - CheckFilterMatchCallback callback) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK(request_url.SchemeIsWSOrWSS()); -- CheckRequestFilterMatch(std::move(subscription_collections), request_url, -+ CheckRequestFilterMatch(std::move(subscription_collections), request_url, request_initiator, - ContentType::Websocket, render_frame_host_id, - std::move(callback)); - } - -+void ResourceClassificationRunnerImpl::CheckRequestFilterMatchForWebTransport( -+ SubscriptionService::Snapshot subscription_collections, -+ const GURL& request_url, -+ const GURL& request_initiator, -+ content::GlobalRenderFrameHostId render_frame_host_id, -+ CheckFilterMatchCallback callback) { -+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -+ CheckRequestFilterMatch(std::move(subscription_collections), request_url, request_initiator, -+ ContentType::Other, render_frame_host_id, -+ std::move(callback)); -+} -+ - void ResourceClassificationRunnerImpl::CheckDocumentAllowlisted( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -@@ -212,6 +225,7 @@ void ResourceClassificationRunnerImpl::ProcessDocumentAllowlistedResponse( - void ResourceClassificationRunnerImpl::CheckRequestFilterMatch( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, - ContentType adblock_resource_type, - content::GlobalRenderFrameHostId frame_host_id, - CheckFilterMatchCallback callback) { -@@ -220,14 +234,10 @@ void ResourceClassificationRunnerImpl::CheckRequestFilterMatch( - DVLOG(1) << "[eyeo] CheckRequestFilterMatchImpl for " << request_url.spec(); - - auto* host = content::RenderFrameHost::FromID(frame_host_id); -- if (!host) { -- // Host has died, likely because this is a deferred execution. It does not -- // matter anymore whether the resource is blocked, the page is gone. -- std::move(callback).Run(FilterMatchResult::kNoRule); -- return; -- } -- const std::vector frame_hierarchy_chain = -+ std::vector frame_hierarchy_chain = - frame_hierarchy_builder_->BuildFrameHierarchy(host); -+ if (!host && frame_hierarchy_chain.size() == 0) -+ frame_hierarchy_chain.emplace_back(request_initiator.GetAsReferrer()); - - DVLOG(1) << "[eyeo] Got " << frame_hierarchy_chain.size() - << " frame_hierarchy for " << request_url.spec(); -@@ -275,7 +285,8 @@ ResourceClassificationRunnerImpl::CheckRequestFilterMatchInternal( - adblock_resource_type, sitekey); - - if (classification_result.decision == ClassificationDecision::Allowed) { -- VLOG(1) << "[eyeo] Document allowed due to allowing filter " << request_url; -+ VLOG(1) << "[eyeo] Document allowed due to allowing filter " << request_url -+ << " " << classification_result.decisive_subscription.spec(); - return CheckResourceFilterMatchResult{ - FilterMatchResult::kAllowRule, - classification_result.decisive_subscription, -@@ -290,6 +301,7 @@ ResourceClassificationRunnerImpl::CheckRequestFilterMatchInternal( - classification_result.decisive_configuration_name}; - } - -+ VLOG(1) << "[eyeo] No Rule for " << request_url; - return CheckResourceFilterMatchResult{FilterMatchResult::kNoRule, {}, {}}; - } - -diff --git a/components/adblock/content/browser/resource_classification_runner_impl.h b/components/adblock/content/browser/resource_classification_runner_impl.h ---- a/components/adblock/content/browser/resource_classification_runner_impl.h -+++ b/components/adblock/content/browser/resource_classification_runner_impl.h -@@ -55,12 +55,14 @@ class ResourceClassificationRunnerImpl final - void CheckRequestFilterMatch( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, - ContentType adblock_resource_type, - content::GlobalRenderFrameHostId render_frame_host_id, - CheckFilterMatchCallback callback) final; - void CheckRequestFilterMatchForWebSocket( - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, -+ const GURL& request_initiator, - content::GlobalRenderFrameHostId render_frame_host_id, - CheckFilterMatchCallback callback) final; - // No callback, just notify observers -@@ -68,6 +70,12 @@ class ResourceClassificationRunnerImpl final - SubscriptionService::Snapshot subscription_collections, - const GURL& request_url, - content::GlobalRenderFrameHostId render_frame_host_id) final; -+ void CheckRequestFilterMatchForWebTransport( -+ SubscriptionService::Snapshot subscription_collections, -+ const GURL& request_url, -+ const GURL& request_initiator, -+ content::GlobalRenderFrameHostId render_frame_host_id, -+ CheckFilterMatchCallback callback) final; - void CheckResponseFilterMatch( - SubscriptionService::Snapshot subscription_collections, - const GURL& response_url, -diff --git a/content/browser/websockets/websocket_connector_impl.cc b/content/browser/websockets/websocket_connector_impl.cc ---- a/content/browser/websockets/websocket_connector_impl.cc -+++ b/content/browser/websockets/websocket_connector_impl.cc -@@ -88,14 +88,14 @@ void WebSocketConnectorImpl::Connect( - const uint32_t options = - GetContentClient()->browser()->GetWebSocketOptions(frame); - -- if (GetContentClient()->browser()->WillInterceptWebSocket(frame)) { -+ if (GetContentClient()->browser()->WillInterceptWebSocket(frame, process, origin_)) { - GetContentClient()->browser()->CreateWebSocket( -- frame, -+ process, frame, - base::BindOnce(ConnectCalledByContentBrowserClient, requested_protocols, - site_for_cookies, has_storage_access, isolation_info_, - process_id_, frame_id_, origin_, options, - std::move(throttling_profile_id)), -- url, site_for_cookies, user_agent, std::move(handshake_client)); -+ url, origin_, site_for_cookies, user_agent, std::move(handshake_client)); - return; - } - std::vector headers; -diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc ---- a/content/public/browser/content_browser_client.cc -+++ b/content/public/browser/content_browser_client.cc -@@ -1014,7 +1014,7 @@ void ContentBrowserClient::WillCreateURLLoaderFactory( - DCHECK(browser_context); - } - --bool ContentBrowserClient::WillInterceptWebSocket(RenderFrameHost*) { -+bool ContentBrowserClient::WillInterceptWebSocket(RenderFrameHost*, RenderProcessHost*, const url::Origin& origin) { - return false; - } - -@@ -1023,9 +1023,11 @@ uint32_t ContentBrowserClient::GetWebSocketOptions(RenderFrameHost* frame) { - } - - void ContentBrowserClient::CreateWebSocket( -+ RenderProcessHost* process, - RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const std::optional& user_agent, - mojo::PendingRemote -diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h ---- a/content/public/browser/content_browser_client.h -+++ b/content/public/browser/content_browser_client.h -@@ -1875,7 +1875,7 @@ class CONTENT_EXPORT ContentBrowserClient { - scoped_refptr navigation_response_task_runner); - - // Returns true when the embedder wants to intercept a websocket connection. -- virtual bool WillInterceptWebSocket(RenderFrameHost* frame); -+ virtual bool WillInterceptWebSocket(RenderFrameHost* frame, RenderProcessHost* process, const url::Origin& origin); - - // Returns the WebSocket creation options. - virtual uint32_t GetWebSocketOptions(RenderFrameHost* frame); -@@ -1897,9 +1897,11 @@ class CONTENT_EXPORT ContentBrowserClient { - // Always called on the UI thread and only when the Network Service is - // enabled. - virtual void CreateWebSocket( -+ RenderProcessHost* process, - RenderFrameHost* frame, - WebSocketFactory factory, - const GURL& url, -+ const url::Origin& initiator_origin, - const net::SiteForCookies& site_for_cookies, - const std::optional& user_agent, - mojo::PendingRemote --- diff --git a/build/patches/AdblockPlus-connect-popup-blocker.patch b/build/patches/AdblockPlus-connect-popup-blocker.patch deleted file mode 100644 index 9449fe264..000000000 --- a/build/patches/AdblockPlus-connect-popup-blocker.patch +++ /dev/null @@ -1,169 +0,0 @@ -From: uazo -Date: Tue, 9 Jan 2024 13:37:05 +0000 -Subject: AdblockPlus connect popup blocker - -activates the pop-up blocking management present in adblockplus -but not active in upstream. -added "enable-stricter-popup-blocker" flag for the global -deactivation of all pop-ups (default disabled) ---- - .../adblock/adblock_content_browser_client.cc | 52 +++++++++++++++++++ - .../adblock/adblock_content_browser_client.h | 14 +++++ - components/blocked_content/popup_blocker.cc | 9 +++- - components/blocked_content/popup_blocker.h | 3 ++ - .../about_flags_cc/Stricter-popup-blocker.inc | 14 +++++ - 5 files changed, 91 insertions(+), 1 deletion(-) - create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc - -diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/browser/adblock/adblock_content_browser_client.cc ---- a/chrome/browser/adblock/adblock_content_browser_client.cc -+++ b/chrome/browser/adblock/adblock_content_browser_client.cc -@@ -330,6 +330,58 @@ void AdblockContentBrowserClient::OnWebTransportFilterCheckCompleted( - "Blocked", false)); - } - -+bool AdblockContentBrowserClient::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, -+ bool user_gesture, -+ bool opener_suppressed, -+ bool* no_javascript_access) { -+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); -+ DCHECK(opener); -+ -+ if (IsFilteringNeeded(opener)) { -+ content::WebContents* web_contents = -+ content::WebContents::FromRenderFrameHost(opener); -+ auto* subscription_service = -+ adblock::SubscriptionServiceFactory::GetForBrowserContext( -+ web_contents->GetBrowserContext()); -+ -+ GURL popup_url(target_url); -+ web_contents->GetPrimaryMainFrame()->GetProcess()->FilterURL(false, -+ &popup_url); -+ auto* classification_runner = -+ adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( -+ web_contents->GetBrowserContext()); -+ const auto popup_blocking_decision = -+ classification_runner->ShouldBlockPopup( -+ subscription_service->GetCurrentSnapshot(), popup_url, opener); -+ if (popup_blocking_decision == adblock::FilterMatchResult::kAllowRule) { -+ return true; -+ } -+ if (popup_blocking_decision == adblock::FilterMatchResult::kBlockRule) { -+ return false; -+ } -+ // Otherwise, if eyeo adblocking is disabled or there is no rule that -+ // explicitly allows or blocks a popup, fall back on Chromium's built-in -+ // popup blocker. -+ DCHECK(popup_blocking_decision == adblock::FilterMatchResult::kDisabled || -+ popup_blocking_decision == adblock::FilterMatchResult::kNoRule); -+ } -+ -+ return ChromeContentBrowserClient::CanCreateWindow( -+ opener, opener_url, opener_top_level_frame_url, source_origin, -+ container_type, target_url, referrer, frame_name, disposition, features, -+ user_gesture, opener_suppressed, no_javascript_access); -+} -+ - bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( - content::BrowserContext* browser_context, - content::RenderFrameHost* frame, -diff --git a/chrome/browser/adblock/adblock_content_browser_client.h b/chrome/browser/adblock/adblock_content_browser_client.h ---- a/chrome/browser/adblock/adblock_content_browser_client.h -+++ b/chrome/browser/adblock/adblock_content_browser_client.h -@@ -82,6 +82,20 @@ class AdblockContentBrowserClient : public ChromeContentBrowserClient { - scoped_refptr navigation_response_task_runner) - 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, -+ bool user_gesture, -+ bool opener_suppressed, -+ bool* no_javascript_access) override; -+ - private: - void CreateWebSocketInternal( - content::RenderProcessHost* process, -diff --git a/components/blocked_content/popup_blocker.cc b/components/blocked_content/popup_blocker.cc ---- a/components/blocked_content/popup_blocker.cc -+++ b/components/blocked_content/popup_blocker.cc -@@ -20,6 +20,11 @@ - #include "third_party/blink/public/mojom/frame/frame.mojom-shared.h" - - namespace blocked_content { -+ -+CROMITE_FEATURE(kStrictPopupBlocker, -+ "StrictPopupBlocker", -+ base::FEATURE_DISABLED_BY_DEFAULT); -+ - namespace { - - content::Page& GetSourcePageForPopup( -@@ -91,7 +96,9 @@ PopupBlockType ShouldBlockPopup(content::WebContents* web_contents, - GetSourcePageForPopup(open_url_params, web_contents))) { - return PopupBlockType::kAbusive; - } -- return PopupBlockType::kNotBlocked; -+ return base::FeatureList::IsEnabled(kStrictPopupBlocker) -+ ? PopupBlockType::kAbusive -+ : PopupBlockType::kNotBlocked; - } - - } // namespace -diff --git a/components/blocked_content/popup_blocker.h b/components/blocked_content/popup_blocker.h ---- a/components/blocked_content/popup_blocker.h -+++ b/components/blocked_content/popup_blocker.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_H_ - #define COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_H_ - -+#include "base/feature_list.h" - #include "components/content_settings/core/browser/host_content_settings_map.h" - #include "third_party/blink/public/mojom/window_features/window_features.mojom-forward.h" - #include "ui/base/window_open_disposition.h" -@@ -18,6 +19,8 @@ struct OpenURLParams; - } // namespace content - - namespace blocked_content { -+BASE_DECLARE_FEATURE(kStrictPopupBlocker); -+ - class PopupNavigationDelegate; - - // Classifies what caused a popup to be blocked. -diff --git a/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc b/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc -new file mode 100644 ---- /dev/null -+++ b/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc -@@ -0,0 +1,14 @@ -+#ifdef ABOUT_FLAG_INCLUDE_SECTION -+ -+#include "components/blocked_content/popup_blocker.h" -+ -+#endif -+ -+#ifdef FLAG_SECTION -+ -+ {"enable-stricter-popup-blocker", -+ "Enable Stricter popup blocker", -+ "Blocks all pop-ups, even those with user gestures.", kOsAll, -+ FEATURE_VALUE_TYPE(blocked_content::kStrictPopupBlocker)}, -+ -+#endif // ifdef FLAG_SECTION --- diff --git a/build/patches/Add-bookmark-import-export-actions.patch b/build/patches/Add-bookmark-import-export-actions.patch index fba5af7a6..33ab53ef1 100644 --- a/build/patches/Add-bookmark-import-export-actions.patch +++ b/build/patches/Add-bookmark-import-export-actions.patch @@ -15,7 +15,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../menu/bookmark_toolbar_menu_improved.xml | 14 + .../browser/TabbedModeTabDelegateFactory.java | 5 +- .../app/bookmarks/BookmarkActivity.java | 32 ++ - .../browser/bookmarks/BookmarkBridge.java | 280 +++++++++++++++++ + .../browser/bookmarks/BookmarkBridge.java | 285 +++++++++++++++++ .../browser/bookmarks/BookmarkDelegate.java | 10 + .../bookmarks/BookmarkManagerCoordinator.java | 9 + .../bookmarks/BookmarkManagerMediator.java | 23 ++ @@ -30,7 +30,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../bookmarks/android/bookmark_bridge.h | 30 +- .../browser/bookmarks/bookmark_html_writer.cc | 11 + .../dialogs/DownloadLocationCustomView.java | 8 +- - .../DownloadLocationDialogCoordinator.java | 8 +- + .../DownloadLocationDialogCoordinator.java | 10 +- .../flags/android/chrome_feature_list.cc | 1 + .../browser/flags/ChromeFeatureList.java | 1 + chrome/browser/importer/profile_writer.cc | 10 + @@ -53,7 +53,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ui/shell_dialogs/select_file_dialog_linux.cc | 4 + ui/shell_dialogs/select_file_dialog_linux.h | 2 + ui/shell_dialogs/select_file_dialog_win.cc | 5 + - 43 files changed, 922 insertions(+), 29 deletions(-) + 43 files changed, 928 insertions(+), 30 deletions(-) create mode 100644 cromite_flags/chrome/browser/about_flags_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-bookmark-import-export-actions.inc create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/add-bookmark-import-export-actions.inc @@ -221,7 +221,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/bookmarks/B diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBridge.java -@@ -33,6 +33,46 @@ import org.chromium.url.GURL; +@@ -33,6 +33,48 @@ import org.chromium.url.GURL; import java.util.ArrayList; import java.util.List; @@ -252,10 +252,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm +import org.chromium.chrome.browser.IntentHandler; +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; +import org.chromium.chrome.browser.download.DownloadLocationDialogType; ++import org.chromium.chrome.browser.download.settings.DownloadLocationHelperImpl; +import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogController; +import org.chromium.chrome.browser.download.dialogs.DownloadLocationDialogCoordinator; +import org.chromium.chrome.browser.download.dialogs.DownloadLocationCustomView; +import org.chromium.chrome.browser.download.DirectoryOption; ++import org.chromium.chrome.browser.profiles.ProfileManager; +import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.ui.base.PageTransition; @@ -268,7 +270,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Provides the communication channel for Android to fetch and manipulate the bookmark model stored * in native. -@@ -483,6 +523,209 @@ class BookmarkBridge { +@@ -483,6 +525,212 @@ class BookmarkBridge { .getTotalBookmarkCount(mNativeBookmarkBridge, id.getId(), id.getType()); } @@ -422,7 +424,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm + // Actually show the dialog. + mCustomView = (DownloadLocationCustomView) LayoutInflater.from(context).inflate( + R.layout.download_location_dialog, null); -+ mCustomView.initialize(DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0); ++ mCustomView.initialize(DownloadLocationDialogType.DEFAULT, /*totalBytes*/ 0, ++ (isChecked) -> {}, ++ new DownloadLocationHelperImpl(mProfile)); + mCustomView.setTitle(context.getString(R.string.export_bookmarks_alert_title)); + mCustomView.setFileName(standardBoorkmarkName); + mCustomView.mDontShowAgain.setVisibility(View.GONE); @@ -472,13 +476,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm + }; + dialog.initialize(controller); + dialog.showDialog(context, modalDialogManager, /*totalBytes*/ 0, -+ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ "", /*isIncognito*/ false); ++ DownloadLocationDialogType.DEFAULT, /*suggestedPath*/ "", ++ ProfileManager.getLastUsedRegularProfile()); + } + /** * Synchronously gets a list of bookmarks that match the specified search query. * -@@ -1036,6 +1279,39 @@ class BookmarkBridge { +@@ -1036,6 +1284,39 @@ class BookmarkBridge { depthList.add(depth); } @@ -518,7 +523,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm private static List> createPairsList(int[] left, int[] right) { List> pairList = new ArrayList<>(); for (int i = 0; i < left.length; i++) { -@@ -1094,6 +1370,10 @@ class BookmarkBridge { +@@ -1094,6 +1375,10 @@ class BookmarkBridge { void getChildIds( long nativeBookmarkBridge, long id, int type, List bookmarksList); @@ -1343,7 +1348,7 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java --- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java +++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/dialogs/DownloadLocationDialogCoordinator.java -@@ -37,12 +37,12 @@ import java.util.ArrayList; +@@ -37,18 +37,18 @@ import java.util.ArrayList; */ public class DownloadLocationDialogCoordinator implements ModalDialogProperties.Controller { @NonNull private DownloadLocationDialogController mController; @@ -1359,6 +1364,13 @@ diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browse private long mTotalBytes; private @DownloadLocationDialogType int mDialogType; private String mSuggestedPath; + private Context mContext; + private boolean mHasMultipleDownloadLocations; +- private Profile mProfile; ++ protected Profile mProfile; + private boolean mLocationDialogManaged; + + /** @@ -140,7 +140,7 @@ public class DownloadLocationDialogCoordinator implements ModalDialogProperties. * Called after retrieved the download directory options. * @param dirs An list of available download directories. diff --git a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch index 139b83270..25d8f6146 100644 --- a/build/patches/Add-menu-item-to-bookmark-all-tabs.patch +++ b/build/patches/Add-menu-item-to-bookmark-all-tabs.patch @@ -9,23 +9,24 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../browser/bookmarks/BookmarkBridge.java | 67 +++++++++++++++++++ .../bookmarks/android/bookmark_bridge.cc | 44 ++++++++++++ .../bookmarks/android/bookmark_bridge.h | 8 +++ - .../browser/bookmarks/bookmark_html_writer.cc | 8 ++- + .../browser/bookmarks/bookmark_html_writer.cc | 11 ++- .../dialogs/DownloadLocationCustomView.java | 4 +- .../strings/android_chrome_strings.grd | 3 + components/bookmark_bar_strings.grdp | 6 ++ - .../bookmarks/browser/bookmark_codec.cc | 19 +++++- + .../bookmarks/browser/bookmark_codec.cc | 20 +++++- components/bookmarks/browser/bookmark_codec.h | 7 +- - .../browser/bookmark_load_details.cc | 11 +-- + .../browser/bookmark_load_details.cc | 8 ++- .../bookmarks/browser/bookmark_load_details.h | 2 + .../bookmarks/browser/bookmark_model.cc | 3 +- components/bookmarks/browser/bookmark_model.h | 7 ++ components/bookmarks/browser/bookmark_node.cc | 11 +++ components/bookmarks/browser/bookmark_node.h | 3 + + .../bookmarks/browser/bookmark_storage.cc | 2 + .../bookmarks/browser/bookmark_uuids.cc | 3 + components/bookmarks/browser/bookmark_uuids.h | 1 + - components/bookmarks/browser/model_loader.cc | 3 +- + components/bookmarks/browser/model_loader.cc | 8 ++- .../bookmark_specifics_conversions.cc | 1 + - 21 files changed, 229 insertions(+), 13 deletions(-) + 22 files changed, 236 insertions(+), 14 deletions(-) diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml @@ -120,7 +121,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm import org.chromium.components.bookmarks.BookmarkId; import org.chromium.components.bookmarks.BookmarkItem; import org.chromium.components.bookmarks.BookmarkType; -@@ -80,6 +86,8 @@ import org.chromium.ui.modaldialog.DialogDismissalCause; +@@ -82,6 +88,8 @@ import org.chromium.ui.modaldialog.DialogDismissalCause; class BookmarkBridge { private final ObserverList mObservers = new ObserverList<>(); @@ -129,7 +130,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm private long mNativeBookmarkBridge; private boolean mIsDestroyed; private boolean mIsDoingExtensiveChanges; -@@ -400,6 +408,16 @@ class BookmarkBridge { +@@ -402,6 +410,16 @@ class BookmarkBridge { return mMobileFolderId; } @@ -146,7 +147,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** Returns Id representing the special "other" folder from bookmark model. */ public BookmarkId getOtherFolderId() { ThreadUtils.assertOnUiThread(); -@@ -1087,6 +1105,50 @@ class BookmarkBridge { +@@ -1092,6 +1110,50 @@ class BookmarkBridge { .addToReadingList(mNativeBookmarkBridge, parentId, title, url); } @@ -197,7 +198,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm /** * Helper method to mark an item as read. * -@@ -1329,6 +1391,9 @@ class BookmarkBridge { +@@ -1334,6 +1396,9 @@ class BookmarkBridge { BookmarkId getMostRecentlyAddedUserBookmarkIdForUrl(long nativeBookmarkBridge, GURL url); @@ -207,7 +208,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/Bookm BookmarkItem getBookmarkById(long nativeBookmarkBridge, long id, int type); void getTopLevelFolderIds( -@@ -1348,6 +1413,8 @@ class BookmarkBridge { +@@ -1353,6 +1418,8 @@ class BookmarkBridge { BookmarkId getRootFolderId(long nativeBookmarkBridge); @@ -319,7 +320,17 @@ diff --git a/chrome/browser/bookmarks/android/bookmark_bridge.h b/chrome/browser diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/bookmarks/bookmark_html_writer.cc --- a/chrome/browser/bookmarks/bookmark_html_writer.cc +++ b/chrome/browser/bookmarks/bookmark_html_writer.cc -@@ -195,15 +195,19 @@ class Writer : public base::RefCountedThreadSafe { +@@ -168,7 +168,8 @@ class Writer : public base::RefCountedThreadSafe { + BookmarkCodec codec; + bookmarks_ = + codec.Encode(model->bookmark_bar_node(), model->other_node(), +- model->mobile_node(), /*sync_metadata_str=*/std::string()); ++ model->mobile_node(), model->tabs_collection_node(), ++ /*sync_metadata_str=*/std::string()); + } + + Writer(const Writer&) = delete; +@@ -195,15 +196,19 @@ class Writer : public base::RefCountedThreadSafe { roots->FindDict(BookmarkCodec::kOtherBookmarkFolderNameKey); base::Value::Dict* mobile_folder_value = roots->FindDict(BookmarkCodec::kMobileBookmarkFolderNameKey); @@ -340,7 +351,7 @@ diff --git a/chrome/browser/bookmarks/bookmark_html_writer.cc b/chrome/browser/b NotifyOnFinish(BookmarksExportObserver::Result::kCouldNotWriteNodes); return; } -@@ -467,6 +471,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() { +@@ -467,6 +472,8 @@ void BookmarkFaviconFetcher::ExportBookmarks() { BookmarkModelFactory::GetForBrowserContext(profile_)->other_node()); ExtractUrls( BookmarkModelFactory::GetForBrowserContext(profile_)->mobile_node()); @@ -425,15 +436,16 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar std::string sync_metadata_str) { ids_reassigned_ = false; uuids_reassigned_ = false; -@@ -91,6 +93,7 @@ base::Value::Dict BookmarkCodec::Encode( +@@ -91,6 +93,8 @@ base::Value::Dict BookmarkCodec::Encode( roots.Set(kBookmarkBarFolderNameKey, EncodeNode(bookmark_bar_node)); roots.Set(kOtherBookmarkFolderNameKey, EncodeNode(other_folder_node)); roots.Set(kMobileBookmarkFolderNameKey, EncodeNode(mobile_folder_node)); -+ roots.Set(kTabsBookmarkFolderNameKey, EncodeNode(tabs_folder_node)); ++ if (tabs_folder_node) ++ roots.Set(kTabsBookmarkFolderNameKey, EncodeNode(tabs_folder_node)); FinalizeChecksum(); // We are going to store the computed checksum. So set stored checksum to be -@@ -107,6 +110,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, +@@ -107,6 +111,7 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, BookmarkNode* bb_node, BookmarkNode* other_folder_node, BookmarkNode* mobile_folder_node, @@ -441,7 +453,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar int64_t* max_id, std::string* sync_metadata_str) { const int64_t max_already_assigned_id = -@@ -117,7 +121,8 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, +@@ -117,7 +122,8 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, base::Uuid::ParseLowercase(kBookmarkBarNodeUuid), base::Uuid::ParseLowercase(kOtherBookmarksNodeUuid), base::Uuid::ParseLowercase(kMobileBookmarksNodeUuid), @@ -451,7 +463,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar ids_reassigned_ = false; uuids_reassigned_ = false; ids_valid_ = true; -@@ -125,13 +130,14 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, +@@ -125,13 +131,14 @@ bool BookmarkCodec::Decode(const base::Value::Dict& value, stored_checksum_.clear(); InitializeChecksum(); bool success = DecodeHelper(bb_node, other_folder_node, mobile_folder_node, @@ -467,7 +479,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar } *max_id = maximum_id_ + 1; return success; -@@ -189,6 +195,7 @@ base::Value::Dict BookmarkCodec::EncodeMetaInfo( +@@ -189,6 +196,7 @@ base::Value::Dict BookmarkCodec::EncodeMetaInfo( bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, BookmarkNode* other_folder_node, BookmarkNode* mobile_folder_node, @@ -475,7 +487,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar const base::Value::Dict& value, std::string* sync_metadata_str) { std::optional version = value.FindInt(kVersionKey); -@@ -213,6 +220,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, +@@ -213,6 +221,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, roots->FindDict(kOtherBookmarkFolderNameKey); const base::Value::Dict* mobile_folder_value = roots->FindDict(kMobileBookmarkFolderNameKey); @@ -484,7 +496,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar if (!bb_value || !other_folder_value || !mobile_folder_value) return false; -@@ -220,6 +229,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, +@@ -220,6 +230,8 @@ bool BookmarkCodec::DecodeHelper(BookmarkNode* bb_node, DecodeNode(*bb_value, nullptr, bb_node); DecodeNode(*other_folder_value, nullptr, other_folder_node); DecodeNode(*mobile_folder_value, nullptr, mobile_folder_node); @@ -493,7 +505,7 @@ diff --git a/components/bookmarks/browser/bookmark_codec.cc b/components/bookmar if (sync_metadata_str) { const std::string* sync_metadata_str_base64 = -@@ -459,11 +470,13 @@ void BookmarkCodec::DecodeMetaInfoHelper( +@@ -459,11 +471,13 @@ void BookmarkCodec::DecodeMetaInfoHelper( void BookmarkCodec::ReassignIDs(BookmarkNode* bb_node, BookmarkNode* other_node, @@ -574,7 +586,7 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ CHECK_EQ(kNumDefaultTopLevelPermanentFolders, root_node_->children().size()); } -@@ -105,12 +107,13 @@ void BookmarkLoadDetails::AddManagedNode( +@@ -105,8 +107,8 @@ void BookmarkLoadDetails::AddManagedNode( void BookmarkLoadDetails::CreateIndices() { local_or_syncable_uuid_index_.insert(root_node_.get()); @@ -585,12 +597,6 @@ diff --git a/components/bookmarks/browser/bookmark_load_details.cc b/components/ for (const auto& child : root_node_->children()) { if (child.get() == account_bb_node_ || child.get() == account_other_folder_node_ || -- child.get() == account_mobile_folder_node_) { -+ child.get() == account_mobile_folder_node_ || -+ child.get() == tabs_collection_folder_node_) { - // Use a dedicated index for account folders and desdendants. - AddNodeToIndexRecursive(child.get(), account_uuid_index_); - } else { diff --git a/components/bookmarks/browser/bookmark_load_details.h b/components/bookmarks/browser/bookmark_load_details.h --- a/components/bookmarks/browser/bookmark_load_details.h +++ b/components/bookmarks/browser/bookmark_load_details.h @@ -702,6 +708,25 @@ diff --git a/components/bookmarks/browser/bookmark_node.h b/components/bookmarks // Returns whether the permanent node of type `type` should be visible even // when it is empty (i.e. no children). +diff --git a/components/bookmarks/browser/bookmark_storage.cc b/components/bookmarks/browser/bookmark_storage.cc +--- a/components/bookmarks/browser/bookmark_storage.cc ++++ b/components/bookmarks/browser/bookmark_storage.cc +@@ -45,6 +45,7 @@ base::Value::Dict EncodeModelToDict( + case BookmarkStorage::kSelectLocalOrSyncableNodes: + return codec.Encode( + model->bookmark_bar_node(), model->other_node(), model->mobile_node(), ++ model->tabs_collection_node(), + model->client()->EncodeLocalOrSyncableBookmarkSyncMetadata()); + case BookmarkStorage::kSelectAccountNodes: + if (!model->account_bookmark_bar_node()) { +@@ -59,6 +60,7 @@ base::Value::Dict EncodeModelToDict( + return codec.Encode(model->account_bookmark_bar_node(), + model->account_other_node(), + model->account_mobile_node(), ++ nullptr, + model->client()->EncodeAccountBookmarkSyncMetadata()); + } + diff --git a/components/bookmarks/browser/bookmark_uuids.cc b/components/bookmarks/browser/bookmark_uuids.cc --- a/components/bookmarks/browser/bookmark_uuids.cc +++ b/components/bookmarks/browser/bookmark_uuids.cc @@ -729,7 +754,26 @@ diff --git a/components/bookmarks/browser/bookmark_uuids.h b/components/bookmark diff --git a/components/bookmarks/browser/model_loader.cc b/components/bookmarks/browser/model_loader.cc --- a/components/bookmarks/browser/model_loader.cc +++ b/components/bookmarks/browser/model_loader.cc -@@ -110,7 +110,8 @@ std::unique_ptr LoadBookmarks( +@@ -71,6 +71,8 @@ std::unique_ptr LoadBookmarks( + BookmarkPermanentNode::CreateOtherBookmarks(0); + std::unique_ptr account_mobile_folder_node = + BookmarkPermanentNode::CreateMobileBookmarks(0); ++ std::unique_ptr tabs_collection_folder_node = ++ BookmarkPermanentNode::CreateTabsCollectionBookmarks(0); + + std::optional root_dict = + LoadFileToDict(account_file_path); +@@ -78,7 +80,8 @@ std::unique_ptr LoadBookmarks( + if (root_dict.has_value() && + codec.Decode(*root_dict, /*already_assigned_ids=*/{}, + account_bb_node.get(), account_other_folder_node.get(), +- account_mobile_folder_node.get(), &max_node_id, ++ account_mobile_folder_node.get(), ++ tabs_collection_folder_node.get(), &max_node_id, + &sync_metadata_str)) { + ids_assigned_to_account_nodes = codec.release_assigned_ids(); + +@@ -110,7 +113,8 @@ std::unique_ptr LoadBookmarks( if (root_dict.has_value() && codec.Decode(*root_dict, std::move(ids_assigned_to_account_nodes), details->bb_node(), details->other_folder_node(), diff --git a/build/patches/Add-search-engine.patch b/build/patches/Add-search-engine.patch index 8f07d6624..456a50f31 100644 --- a/build/patches/Add-search-engine.patch +++ b/build/patches/Add-search-engine.patch @@ -74,7 +74,7 @@ diff --git a/components/search_engines/search_engine_type.h b/components/search_ SEARCH_ENGINE_MAX // Bounding value needed for UMA histogram macro. }; -+static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT != (SEARCH_ENGINE_MAX - 1), ++static_assert(SEARCH_ENGINE_DUCKDUCKGOLIGHT == (SEARCH_ENGINE_MAX - 1), + "Please check this patch"); + // Enum to record the type of search engine a user used in keyword mode. This diff --git a/build/patches/Bromite-auto-updater.patch b/build/patches/Bromite-auto-updater.patch index 805e77735..5cf4824ab 100644 --- a/build/patches/Bromite-auto-updater.patch +++ b/build/patches/Bromite-auto-updater.patch @@ -25,18 +25,18 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/endpoint_fetcher/BUILD.gn | 32 +++ chrome/browser/endpoint_fetcher/DEPS | 3 + chrome/browser/endpoint_fetcher/OWNERS | 1 + - .../endpoint_fetcher_android.cc | 183 ++++++++++++ + .../endpoint_fetcher_android.cc | 184 ++++++++++++ .../endpoint_fetcher/EndpointFetcher.java | 165 +++++++++++ .../EndpointHeaderResponse.java | 31 ++ .../endpoint_fetcher/EndpointResponse.java | 30 ++ .../flags/android/chrome_feature_list.cc | 1 + .../browser/flags/ChromeFeatureList.java | 1 + .../strings/android_chrome_strings.grd | 23 +- - .../endpoint_fetcher/endpoint_fetcher.cc | 98 ++++++- + .../endpoint_fetcher/endpoint_fetcher.cc | 101 ++++++- .../endpoint_fetcher/endpoint_fetcher.h | 23 +- .../Bromite-auto-updater.inc | 3 + .../Bromite-auto-updater.inc | 1 + - 28 files changed, 1264 insertions(+), 52 deletions(-) + 28 files changed, 1268 insertions(+), 52 deletions(-) create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/BromiteInlineUpdateController.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateController.java create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/omaha/inline/InlineUpdateControllerFactory.java @@ -1184,7 +1184,7 @@ diff --git a/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc b/chrom new file mode 100644 --- /dev/null +++ b/chrome/browser/endpoint_fetcher/endpoint_fetcher_android.cc -@@ -0,0 +1,183 @@ +@@ -0,0 +1,184 @@ +// Copyright 2019 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. @@ -1264,7 +1264,7 @@ new file mode 100644 + GURL(base::android::ConvertJavaStringToUTF8(env, jurl)), + base::android::ConvertJavaStringToUTF8(env, jhttps_method), + base::android::ConvertJavaStringToUTF8(env, jcontent_type), scopes, -+ jtimeout, base::android::ConvertJavaStringToUTF8(env, jpost_data), ++ base::Milliseconds(jtimeout), base::android::ConvertJavaStringToUTF8(env, jpost_data), + net::NetworkTrafficAnnotationTag::FromJavaAnnotation( + jannotation_hash_code), + IdentityManagerFactory::GetForProfile( @@ -1300,7 +1300,8 @@ new file mode 100644 + ->GetURLLoaderFactoryForBrowserProcess(), + GURL(base::android::ConvertJavaStringToUTF8(env, jurl)), + base::android::ConvertJavaStringToUTF8(env, jhttps_method), -+ base::android::ConvertJavaStringToUTF8(env, jcontent_type), jtimeout, ++ base::android::ConvertJavaStringToUTF8(env, jcontent_type), ++ base::Milliseconds(jtimeout), + base::android::ConvertJavaStringToUTF8(env, jpost_data), headers, + net::NetworkTrafficAnnotationTag::FromJavaAnnotation( + jannotation_hash_code), @@ -1745,7 +1746,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi + const net::NetworkTrafficAnnotationTag& annotation_tag) + : url_(url), + http_method_(http_method), -+ timeout_ms_(timeout_ms), ++ timeout_(base::Milliseconds(timeout_ms)), + intercept_redirect_(intercept_redirect), + annotation_tag_(annotation_tag), + url_loader_factory_(url_loader_factory), @@ -1764,7 +1765,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi if (base::EqualsCaseInsensitiveASCII(http_method_, "POST")) { resource_request->headers.SetHeader(kContentTypeKey, content_type_); } -@@ -240,25 +269,47 @@ void EndpointFetcher::PerformRequest( +@@ -240,25 +269,50 @@ void EndpointFetcher::PerformRequest( default: break; } @@ -1781,6 +1782,9 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi + simple_url_loader_->SetTimeoutDuration(timeout_); + simple_url_loader_->SetAllowHttpErrorResults(true); + ++ if (!response_) ++ response_ = std::make_unique(); ++ + if (intercept_redirect_ == true) { + // use a callback to capture landing page URL + simple_url_loader_->SetOnRedirectCallback(base::BindRepeating( @@ -1818,7 +1822,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi } void EndpointFetcher::OnResponseFetched( -@@ -339,3 +390,38 @@ void EndpointFetcher::OnSanitizationResult( +@@ -339,3 +393,38 @@ void EndpointFetcher::OnSanitizationResult( std::string EndpointFetcher::GetUrlForTesting() { return url_.spec(); } @@ -1829,7 +1833,7 @@ diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoi + const network::mojom::URLResponseHead& response_head, + std::vector* removed_headers) { + url_ = redirect_info.new_url; -+ if (response_->redirect_url.empty()) { ++ if (response_ && response_->redirect_url.empty()) { + response_->redirect_url = url_.spec(); + response_->response = std::to_string(redirect_info.status_code); + } else { diff --git a/build/patches/Content-settings-infrastructure.patch b/build/patches/Content-settings-infrastructure.patch index b50f851c9..c49add3ee 100644 --- a/build/patches/Content-settings-infrastructure.patch +++ b/build/patches/Content-settings-infrastructure.patch @@ -32,6 +32,7 @@ Require: bromite-build-utils.patch .../views/page_info/page_info_view_factory.h | 3 + .../page_info/permission_toggle_row_view.cc | 163 ++++++- .../page_info/permission_toggle_row_view.h | 18 +- + .../privacy_sandbox_internals_handler.cc | 2 +- .../settings_localized_strings_provider.cc | 54 +++ .../ui/webui/settings/site_settings_helper.cc | 34 +- .../browser_ui/settings/android/BUILD.gn | 1 + @@ -84,7 +85,7 @@ Require: bromite-build-utils.patch .../platform/web_content_settings_client.h | 5 + .../execution_context/execution_context.cc | 16 + .../execution_context/execution_context.h | 5 + - 73 files changed, 1832 insertions(+), 85 deletions(-) + 74 files changed, 1833 insertions(+), 86 deletions(-) create mode 100644 components/browser_ui/settings/android/java/res/layout/preference_spinner_single_widget.xml create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSetting.java create mode 100644 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/BromiteCustomContentSettingImpl.java @@ -1129,6 +1130,18 @@ diff --git a/chrome/browser/ui/views/page_info/permission_toggle_row_view.h b/ch raw_ptr delegate_ = nullptr; raw_ptr navigation_handler_ = nullptr; +diff --git a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler.cc b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler.cc +--- a/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler.cc ++++ b/chrome/browser/ui/webui/privacy_sandbox/privacy_sandbox_internals_handler.cc +@@ -41,7 +41,7 @@ void PrivacySandboxInternalsHandler::ReadPref(const std::string& pref_name, + void PrivacySandboxInternalsHandler::ReadContentSettings( + const ContentSettingsType type, + ReadContentSettingsCallback callback) { +- if (!IsKnownEnumValue(type) || type == ContentSettingsType::NUM_TYPES) { ++ if (!IsKnownEnumValue(type) || type == ContentSettingsType::NUM_TYPES_BROMITE) { + mojo::ReportBadMessage( + "ReadContentSettings received invalid ContentSettingsType"); + return; diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc diff --git a/build/patches/Disable-AsyncDNS-by-default.patch b/build/patches/Disable-AsyncDNS-by-default.patch index 1fa632332..eabef92ec 100644 --- a/build/patches/Disable-AsyncDNS-by-default.patch +++ b/build/patches/Disable-AsyncDNS-by-default.patch @@ -7,14 +7,14 @@ This feature is detrimental to privacy, see also: License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../common/chrome_features_cc/Disable-AsyncDNS-by-default.inc | 1 + + .../net/base/features_cc/Disable-AsyncDNS-by-default.inc | 1 + 1 file changed, 1 insertion(+) - create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-AsyncDNS-by-default.inc + create mode 100644 cromite_flags/net/base/features_cc/Disable-AsyncDNS-by-default.inc -diff --git a/cromite_flags/chrome/common/chrome_features_cc/Disable-AsyncDNS-by-default.inc b/cromite_flags/chrome/common/chrome_features_cc/Disable-AsyncDNS-by-default.inc +diff --git a/cromite_flags/net/base/features_cc/Disable-AsyncDNS-by-default.inc b/cromite_flags/net/base/features_cc/Disable-AsyncDNS-by-default.inc new file mode 100644 --- /dev/null -+++ b/cromite_flags/chrome/common/chrome_features_cc/Disable-AsyncDNS-by-default.inc ++++ b/cromite_flags/net/base/features_cc/Disable-AsyncDNS-by-default.inc @@ -0,0 +1 @@ +SET_CROMITE_FEATURE_DISABLED(kAsyncDns); -- diff --git a/build/patches/Disable-all-predictors-code.patch b/build/patches/Disable-all-predictors-code.patch index 9b006139b..df28baa10 100644 --- a/build/patches/Disable-all-predictors-code.patch +++ b/build/patches/Disable-all-predictors-code.patch @@ -9,7 +9,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../preloading_model_keyed_service.cc | 1 + .../preloading_model_keyed_service_factory.cc | 4 +-- .../chrome_hints_manager.cc | 1 + - .../model_validator_keyed_service.cc | 4 ++- + .../model_validator_keyed_service.cc | 7 +++++- .../optimization_guide_keyed_service.cc | 1 - .../predictors/loading_predictor_config.cc | 4 +-- .../browser/predictors/predictors_features.cc | 11 ++------ @@ -32,7 +32,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../Disable-all-predictors-code.inc | 2 ++ .../document_speculation_rules.cc | 1 + .../platform/runtime_enabled_features.json5 | 2 +- - 27 files changed, 80 insertions(+), 38 deletions(-) + 27 files changed, 83 insertions(+), 38 deletions(-) create mode 100644 cromite_flags/chrome/browser/browser_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/chrome/common/chrome_features_cc/Disable-all-predictors-code.inc create mode 100644 cromite_flags/components/permissions/features_cc/Disable-all-predictors-code.inc @@ -87,7 +87,15 @@ diff --git a/chrome/browser/optimization_guide/chrome_hints_manager.cc b/chrome/ diff --git a/chrome/browser/optimization_guide/model_validator_keyed_service.cc b/chrome/browser/optimization_guide/model_validator_keyed_service.cc --- a/chrome/browser/optimization_guide/model_validator_keyed_service.cc +++ b/chrome/browser/optimization_guide/model_validator_keyed_service.cc -@@ -55,13 +55,13 @@ namespace optimization_guide { +@@ -8,6 +8,7 @@ + #include "base/files/file_util.h" + #include "base/task/sequenced_task_runner.h" + #include "base/task/task_traits.h" ++#include "base/task/thread_pool.h" + #include "build/build_config.h" + #include "chrome/browser/profiles/profile.h" + #include "chrome/browser/signin/identity_manager_factory.h" +@@ -55,13 +56,13 @@ namespace optimization_guide { ModelValidatorKeyedService::ModelValidatorKeyedService(Profile* profile) : profile_(profile) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -102,7 +110,7 @@ diff --git a/chrome/browser/optimization_guide/model_validator_keyed_service.cc if (switches::ShouldValidateModel()) { // Create the validator object which will get destroyed when the model // load is complete. -@@ -122,6 +122,7 @@ void ModelValidatorKeyedService::OnPrimaryAccountChanged( +@@ -122,6 +123,7 @@ void ModelValidatorKeyedService::OnPrimaryAccountChanged( void ModelValidatorKeyedService::StartModelExecutionValidation() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -110,7 +118,7 @@ diff --git a/chrome/browser/optimization_guide/model_validator_keyed_service.cc auto* opt_guide_service = OptimizationGuideKeyedServiceFactory::GetForProfile(profile_); if (!opt_guide_service) { -@@ -139,6 +140,7 @@ void ModelValidatorKeyedService::StartModelExecutionValidation() { +@@ -139,6 +141,7 @@ void ModelValidatorKeyedService::StartModelExecutionValidation() { proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_TEST, request, base::BindOnce(&ModelValidatorKeyedService::OnModelExecuteResponse, weak_ptr_factory_.GetWeakPtr())); @@ -118,6 +126,22 @@ diff --git a/chrome/browser/optimization_guide/model_validator_keyed_service.cc } void ModelValidatorKeyedService::StartOnDeviceModelExecutionValidation( +@@ -156,6 +159,7 @@ void ModelValidatorKeyedService::StartOnDeviceModelExecutionValidation( + + void ModelValidatorKeyedService::PerformOnDeviceModelExecutionValidation( + std::unique_ptr request) { ++#if BUILDFLAG(BUILD_WITH_TFLITE_LIB) + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + auto* opt_guide_service = + OptimizationGuideKeyedServiceFactory::GetForProfile(profile_); +@@ -168,6 +172,7 @@ void ModelValidatorKeyedService::PerformOnDeviceModelExecutionValidation( + *request, base::RepeatingCallback(base::BindRepeating( + &ModelValidatorKeyedService::OnDeviceModelExecuteResponse, + weak_ptr_factory_.GetWeakPtr()))); ++#endif + } + + void ModelValidatorKeyedService::OnDeviceModelExecuteResponse( diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc --- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc +++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc diff --git a/build/patches/Disable-conversion-measurement-api.patch b/build/patches/Disable-conversion-measurement-api.patch index d8d48040d..5bf57fd03 100644 --- a/build/patches/Disable-conversion-measurement-api.patch +++ b/build/patches/Disable-conversion-measurement-api.patch @@ -11,7 +11,8 @@ being sent and being saved to disk, although it is currently in uncalled code. Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- - .../browser/aw_content_browser_client.cc | 1 + + .../browser/aw_content_browser_client.cc | 3 + + .../chromium/android_webview/AwSettings.java | 4 +- chrome/android/java/AndroidManifest.xml | 4 - components/attribution_reporting/features.cc | 2 + .../origin_trials/features.cc | 2 + @@ -25,7 +26,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../attribution_storage_sql.cc | 8 +- content/browser/storage_partition_impl.cc | 9 - content/public/android/BUILD.gn | 2 - - .../browser/AttributionOsLevelManager.java | 296 +----------------- + .../browser/AttributionOsLevelManager.java | 312 +----------------- .../public/browser/content_browser_client.cc | 7 +- .../public/browser/navigation_controller.cc | 1 - .../Disable-conversion-measurement-api.inc | 1 + @@ -36,7 +37,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../network/public/cpp/attribution_utils.cc | 2 + third_party/blink/renderer/core/page/page.cc | 2 +- ui/events/android/motion_event_android.cc | 6 +- - 25 files changed, 65 insertions(+), 323 deletions(-) + 26 files changed, 72 insertions(+), 338 deletions(-) create mode 100644 cromite_flags/content/common/features_cc/Disable-conversion-measurement-api.inc create mode 100644 cromite_flags/content/public/common/content_features_cc/Disable-conversion-measurement-api.inc create mode 100644 cromite_flags/services/network/public/cpp/features_cc/Disable-conversion-measurement-api.inc @@ -53,6 +54,36 @@ diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webv AwSettings* aw_settings = AwSettings::FromWebContents(web_contents); if (aw_settings && aw_settings->GetAttributionBehavior() == AwSettings::AttributionBehavior::DISABLED) { +@@ -1187,6 +1188,8 @@ bool AwContentBrowserClient::IsAttributionReportingOperationAllowed( + const url::Origin* destination_origin, + const url::Origin* reporting_origin, + bool* can_bypass) { ++ if ((true)) ++ return false; + // Check if attribution reporting has been disabled. + // This method should not be called at all if the configured behavior is + // DISABLED. +diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java +--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java ++++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java +@@ -162,7 +162,7 @@ public class AwSettings { + private boolean mSpatialNavigationEnabled; // Default depends on device features. + private boolean mEnableSupportedHardwareAcceleratedFeatures; + private int mMixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW; +- private int mAttributionBehavior = AttributionBehavior.APP_SOURCE_AND_WEB_TRIGGER; ++ private int mAttributionBehavior = AttributionBehavior.DISABLED; + private boolean mCSSHexAlphaColorEnabled; + private boolean mScrollTopLeftInteropEnabled; + private boolean mWillSuppressErrorPage; +@@ -1689,7 +1689,7 @@ public class AwSettings { + public void setAttributionBehavior(@AttributionBehavior int behavior) { + synchronized (mAwSettingsLock) { + if (mAttributionBehavior != behavior) { +- mAttributionBehavior = behavior; ++ mAttributionBehavior = AttributionBehavior.DISABLED; + mEventHandler.updateWebkitPreferencesLocked(); + } + } diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/AndroidManifest.xml --- a/chrome/android/java/AndroidManifest.xml +++ b/chrome/android/java/AndroidManifest.xml @@ -290,16 +321,18 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -@@ -54,6 +42,8 @@ import java.util.concurrent.TimeoutException; +@@ -54,6 +42,10 @@ import java.util.concurrent.TimeoutException; */ @JNINamespace("content") public class AttributionOsLevelManager { + private class MeasurementManagerFutures {} ++ private class WebTriggerParams {} ++ private class WebSourceParams {} + private static final String TAG = "AttributionManager"; // TODO: replace with constant in android.Manifest.permission once it becomes available in U. private static final String PERMISSION_ACCESS_ADSERVICES_ATTRIBUTION = -@@ -118,63 +108,11 @@ public class AttributionOsLevelManager { +@@ -118,63 +110,11 @@ public class AttributionOsLevelManager { } private static boolean supportsAttribution() { @@ -364,7 +397,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } @CalledByNative -@@ -183,22 +121,7 @@ public class AttributionOsLevelManager { +@@ -183,22 +123,7 @@ public class AttributionOsLevelManager { } private MeasurementManagerFutures getManager() { @@ -388,7 +421,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } private void onRegistrationCompleted( -@@ -212,28 +135,6 @@ public class AttributionOsLevelManager { +@@ -212,28 +137,6 @@ public class AttributionOsLevelManager { } } @@ -417,7 +450,15 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib @CalledByNative private static List createWebSourceParamsList(int size) { if (!supportsAttribution()) { -@@ -265,22 +166,6 @@ public class AttributionOsLevelManager { +@@ -248,7 +151,6 @@ public class AttributionOsLevelManager { + if (!supportsAttribution()) { + return; + } +- list.add(new WebSourceParams(Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed)); + } + + /** +@@ -265,32 +167,12 @@ public class AttributionOsLevelManager { OperationResult.ERROR_VERSION_UNSUPPORTED); return; } @@ -440,7 +481,17 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } /** -@@ -301,20 +186,6 @@ public class AttributionOsLevelManager { + * Registers an attribution source with native, see `registerSourceAsync()`: + * https://developer.android.com/reference/androidx/privacysandbox/ads/adservices/java/measurement/MeasurementManagerFutures. + */ +- @OptIn( +- markerClass = +- androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures +- .RegisterSourceOptIn.class) + @CalledByNative + private void registerAttributionSource( + int requestId, GURL[] registrationUrls, MotionEvent event) { +@@ -301,37 +183,16 @@ public class AttributionOsLevelManager { OperationResult.ERROR_VERSION_UNSUPPORTED); return; } @@ -461,7 +512,25 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } @CalledByNative -@@ -348,18 +219,6 @@ public class AttributionOsLevelManager { + private static List createWebTriggerParamsList(int size) { +- if (!supportsAttribution()) { +- return null; +- } +- return new ArrayList(size); ++ return null; + } + + @CalledByNative + private static void addWebTriggerParams( + List list, GURL registrationUrl, boolean isDebugKeyAllowed) { +- if (!supportsAttribution()) { +- return; +- } +- list.add(new WebTriggerParams(Uri.parse(registrationUrl.getSpec()), isDebugKeyAllowed)); + } + + /** +@@ -348,18 +209,6 @@ public class AttributionOsLevelManager { OperationResult.ERROR_VERSION_UNSUPPORTED); return; } @@ -480,7 +549,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } /** -@@ -375,15 +234,6 @@ public class AttributionOsLevelManager { +@@ -375,15 +224,6 @@ public class AttributionOsLevelManager { OperationResult.ERROR_VERSION_UNSUPPORTED); return; } @@ -496,7 +565,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } private void onDataDeletionCompleted(int requestId) { -@@ -418,96 +268,7 @@ public class AttributionOsLevelManager { +@@ -418,96 +258,7 @@ public class AttributionOsLevelManager { onDataDeletionCompleted(requestId); return; } @@ -594,7 +663,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib } private static void onMeasurementStateReturned(int status, @OperationResult int result) { -@@ -523,6 +284,10 @@ public class AttributionOsLevelManager { +@@ -523,6 +274,10 @@ public class AttributionOsLevelManager { private static void getMeasurementApiStatus() { ThreadUtils.assertOnBackgroundThread(); @@ -605,7 +674,7 @@ diff --git a/content/public/android/java/src/org/chromium/content/browser/Attrib if (sManagerForTesting != null) { AttributionOsLevelManagerJni.get().onMeasurementStateReturned(1); return; -@@ -542,49 +307,6 @@ public class AttributionOsLevelManager { +@@ -542,49 +297,6 @@ public class AttributionOsLevelManager { onMeasurementStateReturned(/* status= */ 0, OperationResult.ERROR_PERMISSION_UNGRANTED); return; } diff --git a/build/patches/Disable-minidump-upload-scheduling.patch b/build/patches/Disable-minidump-upload-scheduling.patch index e9af8d5a6..794d8dece 100644 --- a/build/patches/Disable-minidump-upload-scheduling.patch +++ b/build/patches/Disable-minidump-upload-scheduling.patch @@ -11,7 +11,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoint_fetcher/endpoint_fetcher.cc --- a/components/endpoint_fetcher/endpoint_fetcher.cc +++ b/components/endpoint_fetcher/endpoint_fetcher.cc -@@ -364,7 +364,7 @@ void EndpointFetcher::OnResponseFetched( +@@ -367,7 +367,7 @@ void EndpointFetcher::OnResponseFetched( } } else { std::string net_error = net::ErrorToString(net_error_code); diff --git a/build/patches/Disable-privacy-issues-in-password-manager.patch b/build/patches/Disable-privacy-issues-in-password-manager.patch index 7f3e53b4a..8e9924b9c 100644 --- a/build/patches/Disable-privacy-issues-in-password-manager.patch +++ b/build/patches/Disable-privacy-issues-in-password-manager.patch @@ -74,17 +74,17 @@ diff --git a/components/affiliations/core/browser/affiliation_service_impl.cc b/ diff --git a/components/affiliations/core/browser/facet_manager.cc b/components/affiliations/core/browser/facet_manager.cc --- a/components/affiliations/core/browser/facet_manager.cc +++ b/components/affiliations/core/browser/facet_manager.cc -@@ -114,6 +114,10 @@ void FacetManager::GetAffiliationsAndBranding( - StrategyOnCacheMiss cache_miss_strategy, - AffiliationService::ResultCallback callback, - const scoped_refptr& callback_task_runner) { +@@ -117,6 +117,10 @@ void FacetManager::GetAffiliationsAndBranding( + RequestInfo request_info; + request_info.callback = std::move(callback); + request_info.callback_task_runner = callback_task_runner; + if ((true)) { + ServeRequestWithFailure(std::move(request_info)); + return; + } - RequestInfo request_info; - request_info.callback = std::move(callback); - request_info.callback_task_runner = callback_task_runner; + if (IsCachedDataFresh()) { + AffiliatedFacetsWithUpdateTime affiliation; + if (!backend_->ReadAffiliationsAndBrandingFromDatabase(facet_uri_, diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc diff --git a/build/patches/Enable-native-Android-autofill.patch b/build/patches/Enable-native-Android-autofill.patch index 0ab1c61ef..97e78d9ad 100644 --- a/build/patches/Enable-native-Android-autofill.patch +++ b/build/patches/Enable-native-Android-autofill.patch @@ -23,24 +23,27 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html chrome/browser/android/tab_android.cc | 15 ++++ chrome/browser/android/tab_android.h | 2 + .../strings/android_chrome_strings.grd | 6 ++ - .../ui/autofill/chrome_autofill_client.cc | 22 ++++- - .../ui/autofill/chrome_autofill_client.h | 3 +- components/android_autofill/browser/BUILD.gn | 1 + + .../browser/android_autofill_manager.cc | 2 + + .../browser/android_autofill_manager.h | 2 + .../autofill/AutofillManagerWrapper.java | 5 +- .../components/autofill/AutofillProvider.java | 7 ++ .../BrowserSelectionActionMenuDelegate.java | 62 ++++++++++++++ - .../content/browser/content_autofill_client.h | 3 +- .../browser/content_autofill_driver.cc | 57 +++++++++++++ - .../content/browser/content_autofill_driver.h | 11 +++ + .../content/browser/content_autofill_driver.h | 10 +++ + .../content_autofill_driver_factory.cc | 13 +++ .../content/renderer/autofill_agent.cc | 6 ++ .../renderer/password_autofill_agent.cc | 5 +- .../autofill/core/browser/autofill_driver.h | 2 + + .../autofill/core/browser/autofill_manager.h | 2 + + .../core/browser/browser_autofill_manager.cc | 2 + + .../core/browser/browser_autofill_manager.h | 2 + .../autofill/core/common/autofill_prefs.cc | 2 + .../autofill/core/common/autofill_prefs.h | 5 ++ .../embedder_support/view/ContentView.java | 46 +++++++++++ .../selection/FloatingPastePopupMenu.java | 3 +- .../chromium/ui/base/ViewAndroidDelegate.java | 8 ++ - 25 files changed, 420 insertions(+), 9 deletions(-) + 28 files changed, 419 insertions(+), 4 deletions(-) create mode 100644 components/android_autofill/browser/java/src/org/chromium/components/autofill/BrowserSelectionActionMenuDelegate.java diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn @@ -385,58 +388,6 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro Auto Sign-in -diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc ---- a/chrome/browser/ui/autofill/chrome_autofill_client.cc -+++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc -@@ -1346,6 +1346,11 @@ ChromeAutofillClient::GetDeviceAuthenticator() { - - ChromeAutofillClient::ChromeAutofillClient(content::WebContents* web_contents) - : ContentAutofillClient(web_contents), -+#if BUILDFLAG(IS_ANDROID) -+ /*enable_secondary_autofill_manager*/ true, -+#else -+ /*enable_secondary_autofill_manager*/ false, -+#endif - content::WebContentsObserver(web_contents), - log_manager_( - // TODO(crbug.com/928595): Replace the closure with a callback to the -@@ -1435,9 +1440,20 @@ ChromeAutofillClient::GetOrCreateAutofillSaveCardBottomSheetBridge() { - - std::unique_ptr ChromeAutofillClient::CreateManager( - base::PassKey pass_key, -- ContentAutofillDriver& driver) { -- return std::make_unique( -- &driver, this, g_browser_process->GetApplicationLocale()); -+ ContentAutofillDriver& driver, -+ bool enable_secondary_autofill_manager) { -+ std::unique_ptr manager = -+ std::make_unique( -+ &driver, this, g_browser_process->GetApplicationLocale()) -+#if BUILDFLAG(IS_ANDROID) -+ driver->set_autofill_manager( -+ manager, -+ enable_secondary_autofill_manager == false ? nullptr : -+ base::WrapUnique(new AndroidAutofillManager(driver, client))); -+#else -+ driver->set_autofill_manager(manager, nullptr); -+#endif -+ return manager; - } - - void ChromeAutofillClient::InitAgent( -diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.h b/chrome/browser/ui/autofill/chrome_autofill_client.h ---- a/chrome/browser/ui/autofill/chrome_autofill_client.h -+++ b/chrome/browser/ui/autofill/chrome_autofill_client.h -@@ -292,7 +292,8 @@ class ChromeAutofillClient : public ContentAutofillClient, - // ContentAutofillClient: - std::unique_ptr CreateManager( - base::PassKey pass_key, -- ContentAutofillDriver& driver) override; -+ ContentAutofillDriver& driver, -+ bool enable_secondary_autofill_manager) override; - void InitAgent( - base::PassKey pass_key, - const mojo::AssociatedRemote& agent) override; diff --git a/components/android_autofill/browser/BUILD.gn b/components/android_autofill/browser/BUILD.gn --- a/components/android_autofill/browser/BUILD.gn +++ b/components/android_autofill/browser/BUILD.gn @@ -448,6 +399,30 @@ diff --git a/components/android_autofill/browser/BUILD.gn b/components/android_a "java/src/org/chromium/components/autofill/FormData.java", "java/src/org/chromium/components/autofill/FormFieldData.java", "java/src/org/chromium/components/autofill/PrefillRequest.java", +diff --git a/components/android_autofill/browser/android_autofill_manager.cc b/components/android_autofill/browser/android_autofill_manager.cc +--- a/components/android_autofill/browser/android_autofill_manager.cc ++++ b/components/android_autofill/browser/android_autofill_manager.cc +@@ -34,6 +34,8 @@ AndroidAutofillManager::~AndroidAutofillManager() { + Reset(); + } + ++bool AndroidAutofillManager::IsAndroidAutofill() const { return true; } ++ + base::WeakPtr AndroidAutofillManager::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); + } +diff --git a/components/android_autofill/browser/android_autofill_manager.h b/components/android_autofill/browser/android_autofill_manager.h +--- a/components/android_autofill/browser/android_autofill_manager.h ++++ b/components/android_autofill/browser/android_autofill_manager.h +@@ -33,6 +33,8 @@ class AndroidAutofillManager : public AutofillManager, + + ~AndroidAutofillManager() override; + ++ bool IsAndroidAutofill() const override; ++ + base::WeakPtr GetWeakPtrToLeafClass() { + return weak_ptr_factory_.GetWeakPtr(); + } diff --git a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java --- a/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java +++ b/components/android_autofill/browser/java/src/org/chromium/components/autofill/AutofillManagerWrapper.java @@ -582,19 +557,6 @@ new file mode 100644 + mAutofillSelectionMenuItemHelper = provider; + } +} -diff --git a/components/autofill/content/browser/content_autofill_client.h b/components/autofill/content/browser/content_autofill_client.h ---- a/components/autofill/content/browser/content_autofill_client.h -+++ b/components/autofill/content/browser/content_autofill_client.h -@@ -33,7 +33,8 @@ class ContentAutofillClient - // behaviour. Implementations should not call into `driver`. - virtual std::unique_ptr CreateManager( - base::PassKey pass_key, -- ContentAutofillDriver& driver) = 0; -+ ContentAutofillDriver& driver, -+ bool enable_secondary_autofill_manager) = 0; - - // Called by ContentAutofillDriverFactory to tweak the AutofillAgent in to the - // embedder's needs. diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/components/autofill/content/browser/content_autofill_driver.cc --- a/components/autofill/content/browser/content_autofill_driver.cc +++ b/components/autofill/content/browser/content_autofill_driver.cc @@ -773,13 +735,12 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.cc b/co diff --git a/components/autofill/content/browser/content_autofill_driver.h b/components/autofill/content/browser/content_autofill_driver.h --- a/components/autofill/content/browser/content_autofill_driver.h +++ b/components/autofill/content/browser/content_autofill_driver.h -@@ -128,6 +128,13 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -128,6 +128,12 @@ class ContentAutofillDriver : public AutofillDriver, ContentAutofillDriver& operator=(const ContentAutofillDriver&) = delete; ~ContentAutofillDriver() override; -+ void set_autofill_manager(std::unique_ptr autofill_manager, ++ void set_secondary_autofill_manager( + std::unique_ptr secondary_autofill_manager) { -+ autofill_manager_ = std::move(autofill_manager); + secondary_autofill_manager_ = std::move(secondary_autofill_manager); + } + raw_ptr secondary_autofill_manager() override; @@ -787,7 +748,7 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com content::RenderFrameHost* render_frame_host() { return &*render_frame_host_; } const content::RenderFrameHost* render_frame_host() const { return &*render_frame_host_; -@@ -326,6 +333,10 @@ class ContentAutofillDriver : public AutofillDriver, +@@ -326,6 +332,10 @@ class ContentAutofillDriver : public AutofillDriver, // The factory that created this driver. Outlives `this`. const raw_ref owner_; @@ -798,6 +759,36 @@ diff --git a/components/autofill/content/browser/content_autofill_driver.h b/com mojo::AssociatedReceiver receiver_{this}; mojo::AssociatedRemote autofill_agent_; +diff --git a/components/autofill/content/browser/content_autofill_driver_factory.cc b/components/autofill/content/browser/content_autofill_driver_factory.cc +--- a/components/autofill/content/browser/content_autofill_driver_factory.cc ++++ b/components/autofill/content/browser/content_autofill_driver_factory.cc +@@ -21,6 +21,12 @@ + #include "content/public/browser/web_contents.h" + #include "third_party/blink/public/common/features.h" + ++#if BUILDFLAG(IS_ANDROID) ++#include "components/android_autofill/browser/android_autofill_manager.h" ++#include "components/android_autofill/browser/autofill_provider.h" ++#include "components/android_autofill/browser/autofill_provider_android.h" ++#endif ++ + namespace autofill { + + class ScopedAutofillManagersObservation; +@@ -95,6 +101,13 @@ ContentAutofillDriver* ContentAutofillDriverFactory::DriverForFrame( + // 5. `render_frame_host->~RenderFrameHostImpl()` finishes. + if (render_frame_host->IsRenderFrameLive()) { + driver = std::make_unique(render_frame_host, this); ++#if BUILDFLAG(IS_ANDROID) ++ if (!driver->GetAutofillManager().IsAndroidAutofill()) { ++ driver->set_secondary_autofill_manager( ++ base::WrapUnique(new AndroidAutofillManager(driver.get(), ++ &client_.get()))); ++ } ++#endif + for (Observer& observer : observers_) { + observer.OnContentAutofillDriverCreated(*this, *driver); + } diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc --- a/components/autofill/content/renderer/autofill_agent.cc +++ b/components/autofill/content/renderer/autofill_agent.cc @@ -859,6 +850,42 @@ diff --git a/components/autofill/core/browser/autofill_driver.h b/components/aut // Returns whether the AutofillDriver instance is associated with an active // frame in the MPArch sense. virtual bool IsInActiveFrame() const = 0; +diff --git a/components/autofill/core/browser/autofill_manager.h b/components/autofill/core/browser/autofill_manager.h +--- a/components/autofill/core/browser/autofill_manager.h ++++ b/components/autofill/core/browser/autofill_manager.h +@@ -183,6 +183,8 @@ class AutofillManager + + ~AutofillManager() override; + ++ virtual bool IsAndroidAutofill() const = 0; ++ + // The following will fail a DCHECK if called for a prerendered main frame. + AutofillClient& client() { + DCHECK(!driver().IsPrerendering()); +diff --git a/components/autofill/core/browser/browser_autofill_manager.cc b/components/autofill/core/browser/browser_autofill_manager.cc +--- a/components/autofill/core/browser/browser_autofill_manager.cc ++++ b/components/autofill/core/browser/browser_autofill_manager.cc +@@ -477,6 +477,8 @@ BrowserAutofillManager::~BrowserAutofillManager() { + // (due to a navigation). + } + ++bool BrowserAutofillManager::IsAndroidAutofill() const { return false; } ++ + base::WeakPtr BrowserAutofillManager::GetWeakPtr() { + return weak_ptr_factory_.GetWeakPtr(); + } +diff --git a/components/autofill/core/browser/browser_autofill_manager.h b/components/autofill/core/browser/browser_autofill_manager.h +--- a/components/autofill/core/browser/browser_autofill_manager.h ++++ b/components/autofill/core/browser/browser_autofill_manager.h +@@ -121,6 +121,8 @@ class BrowserAutofillManager : public AutofillManager { + + ~BrowserAutofillManager() override; + ++ bool IsAndroidAutofill() const override; ++ + // Whether the |field| should show an entry to scan a credit card. + virtual bool ShouldShowScanCreditCard(const FormData& form, + const FormFieldData& field) const; diff --git a/components/autofill/core/common/autofill_prefs.cc b/components/autofill/core/common/autofill_prefs.cc --- a/components/autofill/core/common/autofill_prefs.cc +++ b/components/autofill/core/common/autofill_prefs.cc diff --git a/build/patches/Experimental-user-scripts-support.patch b/build/patches/Experimental-user-scripts-support.patch index 1e35f7516..ad5252ad5 100644 --- a/build/patches/Experimental-user-scripts-support.patch +++ b/build/patches/Experimental-user-scripts-support.patch @@ -74,7 +74,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../user-script-ui/user-scripts-ui.js | 9 + .../browser/ui/user_scripts_ui.cc | 146 ++++ .../user_scripts/browser/ui/user_scripts_ui.h | 37 + - .../browser/user_script_loader.cc | 717 ++++++++++++++++ + .../browser/user_script_loader.cc | 716 ++++++++++++++++ .../user_scripts/browser/user_script_loader.h | 168 ++++ .../browser/user_script_pref_info.cc | 34 + .../browser/user_script_pref_info.h | 72 ++ @@ -133,8 +133,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../renderer/web_ui_injection_host.h | 27 + .../strings/userscripts_strings.grdp | 54 ++ .../Experimental-user-scripts-support.inc | 13 + + ipc/ipc_message_start.h | 1 + tools/gritsettings/resource_ids.spec | 6 + - 107 files changed, 9496 insertions(+), 2 deletions(-) + 108 files changed, 9496 insertions(+), 2 deletions(-) create mode 100644 components/user_scripts/README.md create mode 100755 components/user_scripts/android/BUILD.gn create mode 100644 components/user_scripts/android/java/res/layout/accept_script_item.xml @@ -1963,7 +1964,7 @@ new file mode 100644 + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage(message) -+ .setPositiveButton(context.getString(R.string.yes), dialogClickListener) ++ .setPositiveButton(context.getString(R.string.ok), dialogClickListener) + .setNegativeButton(context.getString(R.string.no), dialogClickListener) + .show(); + } @@ -2832,7 +2833,7 @@ diff --git a/components/user_scripts/browser/user_script_loader.cc b/components/ new file mode 100755 --- /dev/null +++ b/components/user_scripts/browser/user_script_loader.cc -@@ -0,0 +1,717 @@ +@@ -0,0 +1,716 @@ +/* + This file is part of Bromite. + @@ -3101,9 +3102,8 @@ new file mode 100755 + + // create SHA256 of file + char raw[crypto::kSHA256Length] = {0}; -+ std::string key; + crypto::SHA256HashString(content, raw, crypto::kSHA256Length); -+ base::Base64Encode(base::StringPiece(raw, crypto::kSHA256Length), &key); ++ std::string key = base::Base64Encode(base::StringPiece(raw, crypto::kSHA256Length)); + file->set_key(key); + + file->set_url(GURL(base::StrCat({"https://userscripts/file/", key, ".js"}))); @@ -10472,6 +10472,17 @@ new file mode 100644 +#endif + +#endif +diff --git a/ipc/ipc_message_start.h b/ipc/ipc_message_start.h +--- a/ipc/ipc_message_start.h ++++ b/ipc/ipc_message_start.h +@@ -17,6 +17,7 @@ enum IPCMessageStart { + WorkerMsgStart, + NaClMsgStart, + PpapiMsgStart, ++ ExtensionMsgStart, + NaClHostMsgStart, + GinJavaBridgeMsgStart, + LastIPCMsgStart // Must come last. diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec diff --git a/build/patches/Eyeo-Adblock-Remove-Privacy-Issues.patch b/build/patches/Eyeo-Adblock-Remove-Privacy-Issues.patch index 65a9fe998..1f7a9d9df 100644 --- a/build/patches/Eyeo-Adblock-Remove-Privacy-Issues.patch +++ b/build/patches/Eyeo-Adblock-Remove-Privacy-Issues.patch @@ -3,11 +3,19 @@ Date: Thu, 29 Sep 2022 11:27:35 +0000 Subject: Eyeo Adblock for Bromite Change the normal behaviour of Eyeo Chromium SDK to -suit Bromite logic +suit Bromite logic. +Add blocking in service workers +Activates the pop-up blocking management present in adblockplus +but not active in upstream. +Added "enable-stricter-popup-blocker" flag for the global +deactivation of all pop-ups (default disabled) --- .../android/java/res/xml/main_preferences.xml | 19 +- chrome/browser/BUILD.gn | 2 - - .../adblock/adblock_content_browser_client.cc | 26 +- + .../adblock/adblock_content_browser_client.cc | 280 +- + .../adblock/adblock_content_browser_client.h | 47 +- + .../browser/chrome_content_browser_client.cc | 6 +- + .../browser/chrome_content_browser_client.h | 6 +- .../adblock_private/adblock_private_api.cc | 74 +- .../api/adblock_private/adblock_private_api.h | 49 + .../eyeo_filtering_private_api.cc | 25 +- @@ -41,10 +49,16 @@ suit Bromite logic .../settings/AdblockSettingsFragment.java | 45 +- components/adblock/content/browser/BUILD.gn | 18 +- .../adblock_controller_factory_base.cc | 5 +- + .../browser/adblock_url_loader_factory.cc | 17 +- + .../browser/adblock_url_loader_factory.h | 7 +- .../browser/adblock_webcontents_observer.cc | 25 +- .../browser/adblock_webcontents_observer.h | 5 +- .../content_security_policy_injector_impl.cc | 1 + .../content/browser/element_hider_impl.cc | 2 +- + .../browser/frame_hierarchy_builder.cc | 3 +- + .../browser/resource_classification_runner.h | 8 + + .../resource_classification_runner_impl.cc | 30 +- + .../resource_classification_runner_impl.h | 8 + .../subscription_service_factory_base.cc | 11 +- .../subscription_service_factory_base.h | 1 + components/adblock/core/BUILD.gn | 39 - @@ -93,6 +107,8 @@ suit Bromite logic .../subscription/subscription_service_impl.h | 9 + .../subscription/subscription_updater_impl.cc | 8 +- .../subscription_validator_impl.cc | 4 +- + components/blocked_content/popup_blocker.cc | 9 +- + components/blocked_content/popup_blocker.h | 3 + .../browser/bromite_content_settings/ads.inc | 3 + components/resources/BUILD.gn | 1 - components/resources/adblock_resources.grdp | 3 - @@ -104,11 +120,15 @@ suit Bromite logic .../dist/isolated-first-xpath3.source.jst | 3696 +++++++++++++++++ .../snippets/dist/isolated-first.jst | 65 + .../snippets/dist/isolated-first.source.jst | 3624 ++++++++++++++++ + .../websockets/websocket_connector_impl.cc | 6 +- + .../public/browser/content_browser_client.cc | 4 +- + .../public/browser/content_browser_client.h | 4 +- + .../about_flags_cc/Stricter-popup-blocker.inc | 14 + .../blink/renderer/core/css/style_engine.cc | 8 + .../blink/renderer/core/css/style_engine.h | 1 + .../renderer/core/exported/web_document.cc | 15 +- .../definitions/adblock_private.d.ts | 14 + - 103 files changed, 8866 insertions(+), 1160 deletions(-) + 118 files changed, 9188 insertions(+), 1264 deletions(-) create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.html create mode 100644 chrome/browser/resources/settings/adblock_page/adblock_page.ts rename components/adblock/android/java/res/xml/{adblock_preferences.xml => eyeo_adblock_preferences.xml} (56%) @@ -123,6 +143,7 @@ suit Bromite logic create mode 100644 components/resources/adblocking/snippets/dist/isolated-first-xpath3.source.jst create mode 100755 components/resources/adblocking/snippets/dist/isolated-first.jst create mode 100755 components/resources/adblocking/snippets/dist/isolated-first.source.jst + create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml --- a/chrome/android/java/res/xml/main_preferences.xml @@ -189,21 +210,82 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "components/adblock/content/browser/adblock_url_loader_factory.h" -@@ -59,6 +61,13 @@ bool IsFilteringNeeded(content::RenderFrameHost* frame) { +@@ -41,6 +43,7 @@ + #include "content/public/browser/web_contents.h" + #include "mojo/public/cpp/bindings/self_owned_receiver.h" + #include "services/network/public/mojom/websocket.mojom.h" ++#include "services/network/public/mojom/web_transport.mojom.h" + #include "services/service_manager/public/cpp/binder_registry.h" + #include "third_party/blink/public/common/loader/url_loader_throttle.h" + +@@ -54,17 +57,37 @@ + + namespace { + ++bool IsFilteringNeeded(Profile* profile, const GURL& embedder_url) { ++ DCHECK(profile); ++ ++ if(embedder_url.is_empty()) { ++ // in android can be empty because it was created by ++ // RenderFrameHostImpl::CreateSubresourceLoaderFactoriesForInitialEmptyDocument ++ return true; ++ } ++ ++ HostContentSettingsMap* settings_map = HostContentSettingsMapFactory::GetForProfile(profile); ++ if (settings_map && settings_map->GetContentSetting(embedder_url, GURL(), ContentSettingsType::ADS) ++ == CONTENT_SETTING_ALLOW) { ++ return false; ++ } ++ // Filtering may be needed if there's at least one enabled ++ // FilteringConfiguration. ++ bool ret = base::ranges::any_of( ++ adblock::SubscriptionServiceFactory::GetForBrowserContext(profile) ++ ->GetInstalledFilteringConfigurations(), ++ &adblock::FilteringConfiguration::IsEnabled); ++ return ret; ++} ++ + bool IsFilteringNeeded(content::RenderFrameHost* frame) { + if (frame) { auto* profile = Profile::FromBrowserContext(frame->GetProcess()->GetBrowserContext()); if (profile) { +- // Filtering may be needed if there's at least one enabled +- // FilteringConfiguration. +- return base::ranges::any_of( +- adblock::SubscriptionServiceFactory::GetForBrowserContext(profile) +- ->GetInstalledFilteringConfigurations(), +- &adblock::FilteringConfiguration::IsEnabled); + content::RenderFrameHost* embedder = frame->GetOutermostMainFrameOrEmbedder(); + const auto& embedder_url = embedder->GetLastCommittedURL(); -+ HostContentSettingsMap* settings_map = HostContentSettingsMapFactory::GetForProfile(profile); -+ if (settings_map && settings_map->GetContentSetting(embedder_url, GURL(), ContentSettingsType::ADS) -+ == CONTENT_SETTING_ALLOW) { -+ return false; -+ } - // Filtering may be needed if there's at least one enabled - // FilteringConfiguration. - return base::ranges::any_of( -@@ -102,23 +111,6 @@ class AdblockContextData : public base::SupportsUserData::Data { ++ return IsFilteringNeeded(profile, embedder_url); + } + } + return false; +@@ -79,10 +102,11 @@ class AdblockContextData : public base::SupportsUserData::Data { + + static void StartProxying( + Profile* profile, ++ content::BrowserContext* browser_context, ++ const url::Origin& request_initiator, + content::RenderFrameHost* frame, + int render_process_id, +- mojo::PendingReceiver receiver, +- mojo::PendingRemote target_factory, ++ network::URLLoaderFactoryBuilder& factory_builder, + bool use_test_loader) { + const void* const kAdblockContextUserDataKey = &kAdblockContextUserDataKey; + auto* self = static_cast( +@@ -91,8 +115,6 @@ class AdblockContextData : public base::SupportsUserData::Data { + self = new AdblockContextData(); + profile->SetUserData(kAdblockContextUserDataKey, base::WrapUnique(self)); + } +- auto* browser_context = +- content::WebContents::FromRenderFrameHost(frame)->GetBrowserContext(); + adblock::AdblockURLLoaderFactoryConfig config{ + adblock::SubscriptionServiceFactory::GetForBrowserContext( + browser_context), +@@ -102,28 +124,12 @@ class AdblockContextData : public base::SupportsUserData::Data { adblock::SitekeyStorageFactory::GetForBrowserContext(browser_context), adblock::ContentSecurityPolicyInjectorFactory::GetForBrowserContext( browser_context)}; @@ -226,7 +308,460 @@ diff --git a/chrome/browser/adblock/adblock_content_browser_client.cc b/chrome/b -#endif auto proxy = std::make_unique( std::move(config), ++ request_initiator.GetURL(), content::GlobalRenderFrameHostId(render_process_id, +- frame->GetRoutingID()), +- std::move(receiver), std::move(target_factory), ++ frame ? frame->GetRoutingID() : MSG_ROUTING_NONE), ++ factory_builder, + embedder_support::GetUserAgent(), + base::BindOnce(&AdblockContextData::RemoveProxy, + self->weak_factory_.GetWeakPtr())); +@@ -163,47 +169,50 @@ void AdblockContentBrowserClient::ForceAdblockProxyForTesting() { + #endif + + bool AdblockContentBrowserClient::WillInterceptWebSocket( +- content::RenderFrameHost* frame) { ++ content::RenderFrameHost* frame, ++ content::RenderProcessHost* process, ++ const url::Origin& origin) { + if (IsFilteringNeeded(frame)) { + return true; ++ } else { ++ auto* browser_context = process->GetBrowserContext(); ++ auto* profile = Profile::FromBrowserContext(browser_context); ++ if (IsFilteringNeeded(profile, origin.GetURL().GetAsReferrer())) { ++ return true; ++ } + } + +- return ChromeContentBrowserClient::WillInterceptWebSocket(frame); ++ return ChromeContentBrowserClient::WillInterceptWebSocket(frame, process, origin); + } + + void AdblockContentBrowserClient::CreateWebSocket( ++ content::RenderProcessHost* process, + content::RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client) { +- if (IsFilteringNeeded(frame)) { +- CreateWebSocketInternal(frame->GetGlobalId(), std::move(factory), url, +- site_for_cookies, user_agent, +- std::move(handshake_client)); +- } else { +- DCHECK(ChromeContentBrowserClient::WillInterceptWebSocket(frame)); +- ChromeContentBrowserClient::CreateWebSocket(frame, std::move(factory), url, +- site_for_cookies, user_agent, +- std::move(handshake_client)); +- } ++ CreateWebSocketInternal(process, ++ frame ? frame->GetGlobalId() : content::GlobalRenderFrameHostId(), ++ std::move(factory), url, initiator_origin, ++ site_for_cookies, user_agent, ++ std::move(handshake_client)); + } + + void AdblockContentBrowserClient::CreateWebSocketInternal( ++ content::RenderProcessHost* process, + content::GlobalRenderFrameHostId render_frame_host_id, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client) { +- auto* frame = content::RenderFrameHost::FromID(render_frame_host_id); +- if (!frame) { +- return; +- } +- auto* browser_context = frame->GetProcess()->GetBrowserContext(); ++ auto* browser_context = process->GetBrowserContext(); + auto* subscription_service = + adblock::SubscriptionServiceFactory::GetForBrowserContext( + browser_context); +@@ -211,33 +220,33 @@ void AdblockContentBrowserClient::CreateWebSocketInternal( + adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( + browser_context); + classification_runner->CheckRequestFilterMatchForWebSocket( +- subscription_service->GetCurrentSnapshot(), url, render_frame_host_id, ++ subscription_service->GetCurrentSnapshot(), url, ++ std::move(initiator_origin.GetURL().GetAsReferrer()), render_frame_host_id, + base::BindOnce( + &AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted, +- weak_factory_.GetWeakPtr(), render_frame_host_id, std::move(factory), +- url, site_for_cookies, user_agent, std::move(handshake_client))); ++ weak_factory_.GetWeakPtr(), process, render_frame_host_id, std::move(factory), ++ url, initiator_origin, site_for_cookies, user_agent, std::move(handshake_client))); + } + + void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( ++ content::RenderProcessHost* process, + content::GlobalRenderFrameHostId render_frame_host_id, + ChromeContentBrowserClient::WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client, + adblock::FilterMatchResult result) { + auto* frame = content::RenderFrameHost::FromID(render_frame_host_id); +- if (!frame) { +- return; +- } + const bool has_blocking_filter = + result == adblock::FilterMatchResult::kBlockRule; + if (!has_blocking_filter) { + VLOG(1) << "[eyeo] Web socket allowed for " << url; +- if (ChromeContentBrowserClient::WillInterceptWebSocket(frame)) { ++ if (ChromeContentBrowserClient::WillInterceptWebSocket(frame, process, initiator_origin)) { + ChromeContentBrowserClient::CreateWebSocket( +- frame, std::move(factory), url, site_for_cookies, user_agent, ++ process, frame, std::move(factory), url, initiator_origin, site_for_cookies, user_agent, + std::move(handshake_client)); + return; + } +@@ -254,15 +263,133 @@ void AdblockContentBrowserClient::OnWebSocketFilterCheckCompleted( + VLOG(1) << "[eyeo] Web socket blocked for " << url; + } + +-bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( ++void AdblockContentBrowserClient::WillCreateWebTransport( ++ int process_id, ++ int frame_routing_id, ++ const GURL& url, ++ const url::Origin& initiator_origin, ++ mojo::PendingRemote ++ handshake_client, ++ WillCreateWebTransportCallback callback) { ++ auto* process = content::RenderProcessHost::FromID(process_id); ++ DCHECK(process); ++ ++ auto* browser_context = process->GetBrowserContext(); ++ auto* profile = Profile::FromBrowserContext(browser_context); ++ if (IsFilteringNeeded(profile, initiator_origin.GetURL().GetAsReferrer())) { ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ browser_context); ++ auto* classification_runner = ++ adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( ++ browser_context); ++ ++ classification_runner->CheckRequestFilterMatchForWebTransport( ++ subscription_service->GetCurrentSnapshot(), url, ++ std::move(initiator_origin.GetURL().GetAsReferrer()), ++ content::GlobalRenderFrameHostId(), ++ base::BindOnce( ++ &AdblockContentBrowserClient::OnWebTransportFilterCheckCompleted, ++ weak_factory_.GetWeakPtr(), ++ process_id, frame_routing_id, url, ++ std::move(initiator_origin), std::move(handshake_client), ++ std::move(callback))); ++ return; ++ } ++ ++ ChromeContentBrowserClient::WillCreateWebTransport( ++ process_id, frame_routing_id, ++ url, std::move(initiator_origin), ++ std::move(handshake_client), std::move(callback)); ++} ++ ++void AdblockContentBrowserClient::OnWebTransportFilterCheckCompleted( ++ int process_id, ++ int frame_routing_id, ++ const GURL& url, ++ const url::Origin& initiator_origin, ++ mojo::PendingRemote ++ handshake_client, ++ WillCreateWebTransportCallback callback, ++ adblock::FilterMatchResult result) { ++ const bool has_blocking_filter = ++ result == adblock::FilterMatchResult::kBlockRule; ++ if (!has_blocking_filter) { ++ VLOG(1) << "[eyeo] Web transport allowed for " << url; ++ ChromeContentBrowserClient::WillCreateWebTransport( ++ process_id, frame_routing_id, ++ url, std::move(initiator_origin), ++ std::move(handshake_client), std::move(callback)); ++ return; ++ } ++ VLOG(1) << "[eyeo] Web transport blocked for " << url; ++ std::move(callback).Run(std::move(handshake_client), ++ network::mojom::WebTransportError::New( ++ net::ERR_BLOCKED_BY_ADMINISTRATOR, quic::QUIC_INTERNAL_ERROR, ++ "Blocked", false)); ++} ++ ++bool AdblockContentBrowserClient::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, ++ bool user_gesture, ++ bool opener_suppressed, ++ bool* no_javascript_access) { ++ DCHECK_CURRENTLY_ON(content::BrowserThread::UI); ++ DCHECK(opener); ++ ++ if (IsFilteringNeeded(opener)) { ++ content::WebContents* web_contents = ++ content::WebContents::FromRenderFrameHost(opener); ++ auto* subscription_service = ++ adblock::SubscriptionServiceFactory::GetForBrowserContext( ++ web_contents->GetBrowserContext()); ++ ++ GURL popup_url(target_url); ++ web_contents->GetPrimaryMainFrame()->GetProcess()->FilterURL(false, ++ &popup_url); ++ auto* classification_runner = ++ adblock::ResourceClassificationRunnerFactory::GetForBrowserContext( ++ web_contents->GetBrowserContext()); ++ const auto popup_blocking_decision = ++ classification_runner->ShouldBlockPopup( ++ subscription_service->GetCurrentSnapshot(), popup_url, opener); ++ if (popup_blocking_decision == adblock::FilterMatchResult::kAllowRule) { ++ return true; ++ } ++ if (popup_blocking_decision == adblock::FilterMatchResult::kBlockRule) { ++ return false; ++ } ++ // Otherwise, if eyeo adblocking is disabled or there is no rule that ++ // explicitly allows or blocks a popup, fall back on Chromium's built-in ++ // popup blocker. ++ DCHECK(popup_blocking_decision == adblock::FilterMatchResult::kDisabled || ++ popup_blocking_decision == adblock::FilterMatchResult::kNoRule); ++ } ++ ++ return ChromeContentBrowserClient::CanCreateWindow( ++ opener, opener_url, opener_top_level_frame_url, source_origin, ++ container_type, target_url, referrer, frame_name, disposition, features, ++ user_gesture, opener_suppressed, no_javascript_access); ++} ++ ++void AdblockContentBrowserClient::WillCreateURLLoaderFactory( + content::BrowserContext* browser_context, + content::RenderFrameHost* frame, + int render_process_id, + URLLoaderFactoryType type, + const url::Origin& request_initiator, +- absl::optional navigation_id, ++ std::optional navigation_id, + ukm::SourceIdObj ukm_source_id, +- mojo::PendingReceiver* factory_receiver, ++ network::URLLoaderFactoryBuilder& factory_builder, + mojo::PendingRemote* + header_client, + bool* bypass_redirect_checks, +@@ -271,30 +398,17 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( + scoped_refptr navigation_response_task_runner) { + // Create Chromium proxy first as WebRequestProxyingURLLoaderFactory logic + // depends on being first proxy +- bool use_chrome_proxy = +- ChromeContentBrowserClient::WillCreateURLLoaderFactory( +- browser_context, frame, render_process_id, type, request_initiator, +- navigation_id, ukm_source_id, factory_receiver, header_client, +- bypass_redirect_checks, disable_secure_dns, factory_override, +- navigation_response_task_runner); +- auto* profile = frame ? Profile::FromBrowserContext( +- frame->GetProcess()->GetBrowserContext()) +- : nullptr; +- +-#if BUILDFLAG(ENABLE_EXTENSIONS) +- if (!force_adblock_proxy_for_testing_ && +- request_initiator.scheme() == extensions::kExtensionScheme) { +- VLOG(1) << "[eyeo] Do not use adblock proxy for extensions requests " +- "[extension id:" +- << request_initiator.host() << "]."; +- return use_chrome_proxy; +- } +-#endif ++ ChromeContentBrowserClient::WillCreateURLLoaderFactory( ++ browser_context, frame, render_process_id, type, request_initiator, ++ navigation_id, ukm_source_id, factory_builder, header_client, ++ bypass_redirect_checks, disable_secure_dns, factory_override, ++ navigation_response_task_runner); ++ auto* profile = Profile::FromBrowserContext(browser_context); + + bool use_adblock_proxy = +- (type == URLLoaderFactoryType::kDocumentSubResource || +- type == URLLoaderFactoryType::kNavigation) && +- IsFilteringNeeded(frame); ++ type != URLLoaderFactoryType::kDownload && ++ (frame ? IsFilteringNeeded(frame) ++ : IsFilteringNeeded(profile, request_initiator.GetURL().GetAsReferrer())); + + bool use_test_loader = false; + #ifdef EYEO_INTERCEPT_DEBUG_URL +@@ -309,12 +423,8 @@ bool AdblockContentBrowserClient::WillCreateURLLoaderFactory( + #endif + + if (use_adblock_proxy) { +- auto proxied_receiver = std::move(*factory_receiver); +- mojo::PendingRemote target_factory_remote; +- *factory_receiver = target_factory_remote.InitWithNewPipeAndPassReceiver(); + AdblockContextData::StartProxying( +- profile, frame, render_process_id, std::move(proxied_receiver), +- std::move(target_factory_remote), use_test_loader); ++ profile, browser_context, request_initiator, frame, render_process_id, ++ factory_builder, use_test_loader); + } +- return use_adblock_proxy || use_chrome_proxy; + } +diff --git a/chrome/browser/adblock/adblock_content_browser_client.h b/chrome/browser/adblock/adblock_content_browser_client.h +--- a/chrome/browser/adblock/adblock_content_browser_client.h ++++ b/chrome/browser/adblock/adblock_content_browser_client.h +@@ -44,25 +44,36 @@ class AdblockContentBrowserClient : public ChromeContentBrowserClient { + static void ForceAdblockProxyForTesting(); + #endif + +- bool WillInterceptWebSocket(content::RenderFrameHost* frame) override; ++ bool WillInterceptWebSocket(content::RenderFrameHost* frame, content::RenderProcessHost* process, const url::Origin& origin) override; + void CreateWebSocket( ++ content::RenderProcessHost* process, + content::RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client) override; + +- bool WillCreateURLLoaderFactory( ++ void WillCreateWebTransport( ++ int process_id, ++ int frame_routing_id, ++ const GURL& url, ++ const url::Origin& initiator_origin, ++ mojo::PendingRemote ++ handshake_client, ++ WillCreateWebTransportCallback callback) override; ++ ++ void WillCreateURLLoaderFactory( + content::BrowserContext* browser_context, + content::RenderFrameHost* frame, + int render_process_id, + URLLoaderFactoryType type, + const url::Origin& request_initiator, +- absl::optional navigation_id, ++ std::optional navigation_id, + ukm::SourceIdObj ukm_source_id, +- mojo::PendingReceiver* factory_receiver, ++ network::URLLoaderFactoryBuilder& factory_builder, + mojo::PendingRemote* + header_client, + bool* bypass_redirect_checks, +@@ -71,25 +82,51 @@ class AdblockContentBrowserClient : public ChromeContentBrowserClient { + scoped_refptr navigation_response_task_runner) + 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, ++ bool user_gesture, ++ bool opener_suppressed, ++ bool* no_javascript_access) override; ++ + private: + void CreateWebSocketInternal( ++ content::RenderProcessHost* process, + content::GlobalRenderFrameHostId render_frame_host_id, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client); + void OnWebSocketFilterCheckCompleted( ++ content::RenderProcessHost* process, + content::GlobalRenderFrameHostId render_frame_host_id, + ChromeContentBrowserClient::WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const absl::optional& user_agent, + mojo::PendingRemote + handshake_client, + adblock::FilterMatchResult result); +- ++ void OnWebTransportFilterCheckCompleted( ++ int process_id, ++ int frame_routing_id, ++ const GURL& url, ++ const url::Origin& initiator_origin, ++ mojo::PendingRemote ++ handshake_client, ++ WillCreateWebTransportCallback callback, ++ adblock::FilterMatchResult result); + base::WeakPtrFactory weak_factory_{this}; + + #if BUILDFLAG(ENABLE_EXTENSIONS) +diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc +--- a/chrome/browser/chrome_content_browser_client.cc ++++ b/chrome/browser/chrome_content_browser_client.cc +@@ -6173,7 +6173,9 @@ ChromeContentBrowserClient:: + } + + bool ChromeContentBrowserClient::WillInterceptWebSocket( +- content::RenderFrameHost* frame) { ++ content::RenderFrameHost* frame, ++ content::RenderProcessHost* process, ++ const url::Origin& origin) { + #if BUILDFLAG(ENABLE_EXTENSIONS) + if (!frame) { + return false; +@@ -6196,9 +6198,11 @@ bool ChromeContentBrowserClient::WillInterceptWebSocket( + } + + void ChromeContentBrowserClient::CreateWebSocket( ++ content::RenderProcessHost* process, + content::RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const std::optional& user_agent, + mojo::PendingRemote +diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h +--- a/chrome/browser/chrome_content_browser_client.h ++++ b/chrome/browser/chrome_content_browser_client.h +@@ -645,11 +645,15 @@ class ChromeContentBrowserClient : public content::ContentBrowserClient { + CreateURLLoaderHandlerForServiceWorkerNavigationPreload( + int frame_tree_node_id, + const network::ResourceRequest& resource_request) override; +- bool WillInterceptWebSocket(content::RenderFrameHost* frame) override; ++ bool WillInterceptWebSocket(content::RenderFrameHost* frame, ++ content::RenderProcessHost* process, ++ const url::Origin& origin) override; + void CreateWebSocket( ++ content::RenderProcessHost* process, + content::RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const std::optional& user_agent, + mojo::PendingRemote diff --git a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc --- a/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc +++ b/chrome/browser/extensions/api/adblock_private/adblock_private_api.cc @@ -740,7 +1275,7 @@ new file mode 100644 +import { I18nMixin } from 'chrome://resources/cr_elements/i18n_mixin.js'; +import { BaseMixin } from '../base_mixin.js'; +import { PolymerElement } from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -+import { SettingsToggleButtonElement } from '/shared/settings/controls/settings_toggle_button.js'; ++import { SettingsToggleButtonElement } from '../controls/settings_toggle_button.js'; +import { PrefsMixin } from 'chrome://resources/cr_components/settings_prefs/prefs_mixin.js'; +import { CrCheckboxElement } from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js'; +import { getTemplate } from './adblock_page.html.js'; @@ -1989,6 +2524,93 @@ diff --git a/components/adblock/content/browser/adblock_controller_factory_base. if (base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableAdblock) || base::CommandLine::ForCurrentProcess()->HasSwitch( +diff --git a/components/adblock/content/browser/adblock_url_loader_factory.cc b/components/adblock/content/browser/adblock_url_loader_factory.cc +--- a/components/adblock/content/browser/adblock_url_loader_factory.cc ++++ b/components/adblock/content/browser/adblock_url_loader_factory.cc +@@ -344,12 +344,6 @@ void AdblockURLLoaderFactory::InProgressRequest::OnRequestError( + + void AdblockURLLoaderFactory::InProgressRequest::CheckFilterMatch( + CheckFilterMatchCallback callback) { +- if (!factory_->CheckHostValid()) { +- PostFilterMatchCallbackToUI(std::move(callback), +- FilterMatchResult::kNoRule); +- return; +- } +- + auto subscription_service = factory_->config_.subscription_service; + if (is_document_request_) { + auto* host = content::RenderFrameHost::FromID(factory_->host_id_); +@@ -388,7 +382,7 @@ void AdblockURLLoaderFactory::InProgressRequest::CheckFilterMatch( + } else { + factory_->config_.resource_classifier->CheckRequestFilterMatch( + subscription_service->GetCurrentSnapshot(), request_url_, +- adblock_resource_type_, factory_->host_id_, ++ factory_->request_initiator_, adblock_resource_type_, factory_->host_id_, + base::BindOnce( + &AdblockURLLoaderFactory::InProgressRequest::OnRequestUrlClassified, + weak_factory_.GetWeakPtr(), +@@ -677,12 +671,13 @@ void AdblockURLLoaderFactory::InProgressRequest::OnRequestFilterMatchResult( + + AdblockURLLoaderFactory::AdblockURLLoaderFactory( + AdblockURLLoaderFactoryConfig config, ++ GURL request_initiator, + content::GlobalRenderFrameHostId host_id, +- mojo::PendingReceiver receiver, +- mojo::PendingRemote target_factory, ++ network::URLLoaderFactoryBuilder& factory_builder, + std::string user_agent_string, + DisconnectCallback on_disconnect) + : config_(std::move(config)), ++ request_initiator_(std::move(request_initiator)), + host_id_(host_id), + user_agent_string_(std::move(user_agent_string)), + on_disconnect_(std::move(on_disconnect)) { +@@ -691,10 +686,12 @@ AdblockURLLoaderFactory::AdblockURLLoaderFactory( + DCHECK(config_.element_hider); + DCHECK(config_.sitekey_storage); + DCHECK(config_.csp_injector); ++ auto [loader_receiver, target_factory] = factory_builder.Append(); ++ DCHECK(!target_factory_.is_bound()); + target_factory_.Bind(std::move(target_factory)); + target_factory_.set_disconnect_handler(base::BindOnce( + &AdblockURLLoaderFactory::OnTargetFactoryError, base::Unretained(this))); +- proxy_receivers_.Add(this, std::move(receiver)); ++ proxy_receivers_.Add(this, std::move(loader_receiver)); + proxy_receivers_.set_disconnect_handler(base::BindRepeating( + &AdblockURLLoaderFactory::OnProxyBindingError, base::Unretained(this))); + } +diff --git a/components/adblock/content/browser/adblock_url_loader_factory.h b/components/adblock/content/browser/adblock_url_loader_factory.h +--- a/components/adblock/content/browser/adblock_url_loader_factory.h ++++ b/components/adblock/content/browser/adblock_url_loader_factory.h +@@ -25,6 +25,8 @@ + #include "mojo/public/cpp/bindings/receiver_set.h" + #include "mojo/public/cpp/bindings/remote.h" + #include "services/network/public/mojom/url_loader_factory.mojom.h" ++#include "services/network/public/cpp/url_loader_factory_builder.h" ++#include "url/gurl.h" + + namespace adblock { + +@@ -57,9 +59,9 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { + + AdblockURLLoaderFactory( + AdblockURLLoaderFactoryConfig config, ++ GURL request_initiator, + content::GlobalRenderFrameHostId host_id, +- mojo::PendingReceiver receiver, +- mojo::PendingRemote target_factory, ++ network::URLLoaderFactoryBuilder& factory_builder, + std::string user_agent_string, + DisconnectCallback on_disconnect); + ~AdblockURLLoaderFactory() override; +@@ -86,6 +88,7 @@ class AdblockURLLoaderFactory : public network::mojom::URLLoaderFactory { + void MaybeDestroySelf(); + + AdblockURLLoaderFactoryConfig config_; ++ const GURL request_initiator_; + content::GlobalRenderFrameHostId host_id_; + mojo::ReceiverSet proxy_receivers_; + std::set, base::UniquePtrComparator> diff --git a/components/adblock/content/browser/adblock_webcontents_observer.cc b/components/adblock/content/browser/adblock_webcontents_observer.cc --- a/components/adblock/content/browser/adblock_webcontents_observer.cc +++ b/components/adblock/content/browser/adblock_webcontents_observer.cc @@ -2106,6 +2728,152 @@ diff --git a/components/adblock/content/browser/element_hider_impl.cc b/componen return; } auto* info = ElementHiderInfo::GetOrCreateForCurrentDocument(frame_host); +diff --git a/components/adblock/content/browser/frame_hierarchy_builder.cc b/components/adblock/content/browser/frame_hierarchy_builder.cc +--- a/components/adblock/content/browser/frame_hierarchy_builder.cc ++++ b/components/adblock/content/browser/frame_hierarchy_builder.cc +@@ -76,9 +76,8 @@ std::vector FrameHierarchyBuilder::BuildFrameHierarchy( + content::RenderFrameHost* host) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + +- DCHECK(host) << "RenderFrameHost is needed to build frame hierarchy"; +- + std::vector referrers_chain; ++ if (!host) return referrers_chain; + for (auto* iter = host; iter; iter = iter->GetParent()) { + auto last_commited_referrer = GetUrlAsReferrer(iter); + if (IsValidForFrameHierarchy(last_commited_referrer)) { +diff --git a/components/adblock/content/browser/resource_classification_runner.h b/components/adblock/content/browser/resource_classification_runner.h +--- a/components/adblock/content/browser/resource_classification_runner.h ++++ b/components/adblock/content/browser/resource_classification_runner.h +@@ -81,12 +81,20 @@ class ResourceClassificationRunner : public KeyedService { + virtual void CheckRequestFilterMatch( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, + ContentType adblock_resource_type, + content::GlobalRenderFrameHostId render_frame_host_id, + CheckFilterMatchCallback callback) = 0; + virtual void CheckRequestFilterMatchForWebSocket( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, ++ content::GlobalRenderFrameHostId render_frame_host_id, ++ CheckFilterMatchCallback callback) = 0; ++ virtual void CheckRequestFilterMatchForWebTransport( ++ SubscriptionService::Snapshot subscription_collections, ++ const GURL& request_url, ++ const GURL& request_initiator, + content::GlobalRenderFrameHostId render_frame_host_id, + CheckFilterMatchCallback callback) = 0; + // No callback, just notify observers +diff --git a/components/adblock/content/browser/resource_classification_runner_impl.cc b/components/adblock/content/browser/resource_classification_runner_impl.cc +--- a/components/adblock/content/browser/resource_classification_runner_impl.cc ++++ b/components/adblock/content/browser/resource_classification_runner_impl.cc +@@ -169,15 +169,28 @@ void ResourceClassificationRunnerImpl::CheckPopupFilterMatch( + void ResourceClassificationRunnerImpl::CheckRequestFilterMatchForWebSocket( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, + content::GlobalRenderFrameHostId render_frame_host_id, + CheckFilterMatchCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(request_url.SchemeIsWSOrWSS()); +- CheckRequestFilterMatch(std::move(subscription_collections), request_url, ++ CheckRequestFilterMatch(std::move(subscription_collections), request_url, request_initiator, + ContentType::Websocket, render_frame_host_id, + std::move(callback)); + } + ++void ResourceClassificationRunnerImpl::CheckRequestFilterMatchForWebTransport( ++ SubscriptionService::Snapshot subscription_collections, ++ const GURL& request_url, ++ const GURL& request_initiator, ++ content::GlobalRenderFrameHostId render_frame_host_id, ++ CheckFilterMatchCallback callback) { ++ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ++ CheckRequestFilterMatch(std::move(subscription_collections), request_url, request_initiator, ++ ContentType::Other, render_frame_host_id, ++ std::move(callback)); ++} ++ + void ResourceClassificationRunnerImpl::CheckDocumentAllowlisted( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, +@@ -212,6 +225,7 @@ void ResourceClassificationRunnerImpl::ProcessDocumentAllowlistedResponse( + void ResourceClassificationRunnerImpl::CheckRequestFilterMatch( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, + ContentType adblock_resource_type, + content::GlobalRenderFrameHostId frame_host_id, + CheckFilterMatchCallback callback) { +@@ -220,14 +234,10 @@ void ResourceClassificationRunnerImpl::CheckRequestFilterMatch( + DVLOG(1) << "[eyeo] CheckRequestFilterMatchImpl for " << request_url.spec(); + + auto* host = content::RenderFrameHost::FromID(frame_host_id); +- if (!host) { +- // Host has died, likely because this is a deferred execution. It does not +- // matter anymore whether the resource is blocked, the page is gone. +- std::move(callback).Run(FilterMatchResult::kNoRule); +- return; +- } +- const std::vector frame_hierarchy_chain = ++ std::vector frame_hierarchy_chain = + frame_hierarchy_builder_->BuildFrameHierarchy(host); ++ if (!host && frame_hierarchy_chain.size() == 0) ++ frame_hierarchy_chain.emplace_back(request_initiator.GetAsReferrer()); + + DVLOG(1) << "[eyeo] Got " << frame_hierarchy_chain.size() + << " frame_hierarchy for " << request_url.spec(); +@@ -275,7 +285,8 @@ ResourceClassificationRunnerImpl::CheckRequestFilterMatchInternal( + adblock_resource_type, sitekey); + + if (classification_result.decision == ClassificationDecision::Allowed) { +- VLOG(1) << "[eyeo] Document allowed due to allowing filter " << request_url; ++ VLOG(1) << "[eyeo] Document allowed due to allowing filter " << request_url ++ << " " << classification_result.decisive_subscription.spec(); + return CheckResourceFilterMatchResult{ + FilterMatchResult::kAllowRule, + classification_result.decisive_subscription, +@@ -290,6 +301,7 @@ ResourceClassificationRunnerImpl::CheckRequestFilterMatchInternal( + classification_result.decisive_configuration_name}; + } + ++ VLOG(1) << "[eyeo] No Rule for " << request_url; + return CheckResourceFilterMatchResult{FilterMatchResult::kNoRule, {}, {}}; + } + +diff --git a/components/adblock/content/browser/resource_classification_runner_impl.h b/components/adblock/content/browser/resource_classification_runner_impl.h +--- a/components/adblock/content/browser/resource_classification_runner_impl.h ++++ b/components/adblock/content/browser/resource_classification_runner_impl.h +@@ -55,12 +55,14 @@ class ResourceClassificationRunnerImpl final + void CheckRequestFilterMatch( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, + ContentType adblock_resource_type, + content::GlobalRenderFrameHostId render_frame_host_id, + CheckFilterMatchCallback callback) final; + void CheckRequestFilterMatchForWebSocket( + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, ++ const GURL& request_initiator, + content::GlobalRenderFrameHostId render_frame_host_id, + CheckFilterMatchCallback callback) final; + // No callback, just notify observers +@@ -68,6 +70,12 @@ class ResourceClassificationRunnerImpl final + SubscriptionService::Snapshot subscription_collections, + const GURL& request_url, + content::GlobalRenderFrameHostId render_frame_host_id) final; ++ void CheckRequestFilterMatchForWebTransport( ++ SubscriptionService::Snapshot subscription_collections, ++ const GURL& request_url, ++ const GURL& request_initiator, ++ content::GlobalRenderFrameHostId render_frame_host_id, ++ CheckFilterMatchCallback callback) final; + void CheckResponseFilterMatch( + SubscriptionService::Snapshot subscription_collections, + const GURL& response_url, diff --git a/components/adblock/content/browser/subscription_service_factory_base.cc b/components/adblock/content/browser/subscription_service_factory_base.cc --- a/components/adblock/content/browser/subscription_service_factory_base.cc +++ b/components/adblock/content/browser/subscription_service_factory_base.cc @@ -4378,6 +5146,52 @@ diff --git a/components/adblock/core/subscription/subscription_validator_impl.cc return false; } return true; +diff --git a/components/blocked_content/popup_blocker.cc b/components/blocked_content/popup_blocker.cc +--- a/components/blocked_content/popup_blocker.cc ++++ b/components/blocked_content/popup_blocker.cc +@@ -20,6 +20,11 @@ + #include "third_party/blink/public/mojom/frame/frame.mojom-shared.h" + + namespace blocked_content { ++ ++CROMITE_FEATURE(kStrictPopupBlocker, ++ "StrictPopupBlocker", ++ base::FEATURE_DISABLED_BY_DEFAULT); ++ + namespace { + + content::Page& GetSourcePageForPopup( +@@ -91,7 +96,9 @@ PopupBlockType ShouldBlockPopup(content::WebContents* web_contents, + GetSourcePageForPopup(open_url_params, web_contents))) { + return PopupBlockType::kAbusive; + } +- return PopupBlockType::kNotBlocked; ++ return base::FeatureList::IsEnabled(kStrictPopupBlocker) ++ ? PopupBlockType::kAbusive ++ : PopupBlockType::kNotBlocked; + } + + } // namespace +diff --git a/components/blocked_content/popup_blocker.h b/components/blocked_content/popup_blocker.h +--- a/components/blocked_content/popup_blocker.h ++++ b/components/blocked_content/popup_blocker.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_H_ + #define COMPONENTS_BLOCKED_CONTENT_POPUP_BLOCKER_H_ + ++#include "base/feature_list.h" + #include "components/content_settings/core/browser/host_content_settings_map.h" + #include "third_party/blink/public/mojom/window_features/window_features.mojom-forward.h" + #include "ui/base/window_open_disposition.h" +@@ -18,6 +19,8 @@ struct OpenURLParams; + } // namespace content + + namespace blocked_content { ++BASE_DECLARE_FEATURE(kStrictPopupBlocker); ++ + class PopupNavigationDelegate; + + // Classifies what caused a popup to be blocked. diff --git a/components/content_settings/core/browser/bromite_content_settings/ads.inc b/components/content_settings/core/browser/bromite_content_settings/ads.inc new file mode 100644 --- /dev/null @@ -11954,6 +12768,94 @@ new file mode 100755 + document.addEventListener("readystatechange", append, {once:true}); + } +} +diff --git a/content/browser/websockets/websocket_connector_impl.cc b/content/browser/websockets/websocket_connector_impl.cc +--- a/content/browser/websockets/websocket_connector_impl.cc ++++ b/content/browser/websockets/websocket_connector_impl.cc +@@ -88,14 +88,14 @@ void WebSocketConnectorImpl::Connect( + const uint32_t options = + GetContentClient()->browser()->GetWebSocketOptions(frame); + +- if (GetContentClient()->browser()->WillInterceptWebSocket(frame)) { ++ if (GetContentClient()->browser()->WillInterceptWebSocket(frame, process, origin_)) { + GetContentClient()->browser()->CreateWebSocket( +- frame, ++ process, frame, + base::BindOnce(ConnectCalledByContentBrowserClient, requested_protocols, + site_for_cookies, has_storage_access, isolation_info_, + process_id_, frame_id_, origin_, options, + std::move(throttling_profile_id)), +- url, site_for_cookies, user_agent, std::move(handshake_client)); ++ url, origin_, site_for_cookies, user_agent, std::move(handshake_client)); + return; + } + std::vector headers; +diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc +--- a/content/public/browser/content_browser_client.cc ++++ b/content/public/browser/content_browser_client.cc +@@ -1014,7 +1014,7 @@ void ContentBrowserClient::WillCreateURLLoaderFactory( + DCHECK(browser_context); + } + +-bool ContentBrowserClient::WillInterceptWebSocket(RenderFrameHost*) { ++bool ContentBrowserClient::WillInterceptWebSocket(RenderFrameHost*, RenderProcessHost*, const url::Origin& origin) { + return false; + } + +@@ -1023,9 +1023,11 @@ uint32_t ContentBrowserClient::GetWebSocketOptions(RenderFrameHost* frame) { + } + + void ContentBrowserClient::CreateWebSocket( ++ RenderProcessHost* process, + RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const std::optional& user_agent, + mojo::PendingRemote +diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h +--- a/content/public/browser/content_browser_client.h ++++ b/content/public/browser/content_browser_client.h +@@ -1875,7 +1875,7 @@ class CONTENT_EXPORT ContentBrowserClient { + scoped_refptr navigation_response_task_runner); + + // Returns true when the embedder wants to intercept a websocket connection. +- virtual bool WillInterceptWebSocket(RenderFrameHost* frame); ++ virtual bool WillInterceptWebSocket(RenderFrameHost* frame, RenderProcessHost* process, const url::Origin& origin); + + // Returns the WebSocket creation options. + virtual uint32_t GetWebSocketOptions(RenderFrameHost* frame); +@@ -1897,9 +1897,11 @@ class CONTENT_EXPORT ContentBrowserClient { + // Always called on the UI thread and only when the Network Service is + // enabled. + virtual void CreateWebSocket( ++ RenderProcessHost* process, + RenderFrameHost* frame, + WebSocketFactory factory, + const GURL& url, ++ const url::Origin& initiator_origin, + const net::SiteForCookies& site_for_cookies, + const std::optional& user_agent, + mojo::PendingRemote +diff --git a/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc b/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc +new file mode 100644 +--- /dev/null ++++ b/cromite_flags/chrome/browser/about_flags_cc/Stricter-popup-blocker.inc +@@ -0,0 +1,14 @@ ++#ifdef ABOUT_FLAG_INCLUDE_SECTION ++ ++#include "components/blocked_content/popup_blocker.h" ++ ++#endif ++ ++#ifdef FLAG_SECTION ++ ++ {"enable-stricter-popup-blocker", ++ "Enable Stricter popup blocker", ++ "Blocks all pop-ups, even those with user gestures.", kOsAll, ++ FEATURE_VALUE_TYPE(blocked_content::kStrictPopupBlocker)}, ++ ++#endif // ifdef FLAG_SECTION diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc --- a/third_party/blink/renderer/core/css/style_engine.cc +++ b/third_party/blink/renderer/core/css/style_engine.cc diff --git a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch index 04442881a..52b48ed2b 100644 --- a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch +++ b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch @@ -79,7 +79,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting + + mContextualSearch = findPreference(PREF_CONTEXTUAL_SEARCH); + boolean isContextualSearchEnabled = -+ !ContextualSearchManager.isContextualSearchDisabled(); ++ !ContextualSearchManager.isContextualSearchDisabled(getProfile()); + mContextualSearch.setSummary( + isContextualSearchEnabled ? R.string.text_on : R.string.text_off); + diff --git a/build/patches/Remove-binary-blob-integrations.patch b/build/patches/Remove-binary-blob-integrations.patch index 9ae875b73..610344705 100644 --- a/build/patches/Remove-binary-blob-integrations.patch +++ b/build/patches/Remove-binary-blob-integrations.patch @@ -89,10 +89,9 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html components/module_installer/android/BUILD.gn | 4 - components/signin/public/android/BUILD.gn | 3 - .../signin/AccountRenameChecker.java | 16 - - components/webauthn/android/BUILD.gn | 13 +- - .../webauthn/AuthenticatorImpl.java | 83 +-- + components/webauthn/android/BUILD.gn | 14 +- + .../webauthn/AuthenticatorImpl.java | 72 -- .../webauthn/ConditionalUiState.java | 15 + - .../webauthn/Fido2ApiCallHelper.java | 10 - .../components/webauthn/GmsCoreUtils.java | 21 +- .../webauthn/WebauthnModeProvider.java | 12 - .../webauthn/cred_man/CredManHelper.java | 16 +- @@ -109,7 +108,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../preconditions/javatests/BUILD.gn | 1 - .../gms/ChromiumPlayServicesAvailability.java | 10 +- third_party/cardboard/BUILD.gn | 4 - - 85 files changed, 115 insertions(+), 2193 deletions(-) + 84 files changed, 114 insertions(+), 2174 deletions(-) create mode 100644 components/webauthn/android/java/src/org/chromium/components/webauthn/ConditionalUiState.java diff --git a/android_webview/expectations/system_webview_bundle.AndroidManifest.expected b/android_webview/expectations/system_webview_bundle.AndroidManifest.expected @@ -3158,20 +3157,20 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "java/src/org/chromium/components/webauthn/InternalAuthenticator.java", "java/src/org/chromium/components/webauthn/WebauthnBrowserBridge.java", "java/src/org/chromium/components/webauthn/cred_man/CredManSupportProvider.java", -@@ -30,11 +28,8 @@ android_library("java") { +@@ -30,11 +28,7 @@ android_library("java") { "java/src/org/chromium/components/webauthn/AuthenticatorImpl.java", "java/src/org/chromium/components/webauthn/Barrier.java", "java/src/org/chromium/components/webauthn/CreateConfirmationUiDelegate.java", - "java/src/org/chromium/components/webauthn/Fido2Api.java", - "java/src/org/chromium/components/webauthn/Fido2ApiCall.java", - "java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java", +- "java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java", - "java/src/org/chromium/components/webauthn/Fido2CredentialRequest.java", - "java/src/org/chromium/components/webauthn/FidoErrorResponseCallback.java", + "java/src/org/chromium/components/webauthn/ConditionalUiState.java", "java/src/org/chromium/components/webauthn/FidoIntentSender.java", "java/src/org/chromium/components/webauthn/GetAssertionResponseCallback.java", "java/src/org/chromium/components/webauthn/GetMatchingCredentialIdsResponseCallback.java", -@@ -60,9 +55,6 @@ android_library("java") { +@@ -60,9 +54,6 @@ android_library("java") { jar_excluded_patterns = [ "*/cred_man/CredManUiModeRecommender.class" ] deps = [ @@ -3181,7 +3180,7 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "//base:base_java", "//base/version_info/android:version_constants_java", "//build/android:build_java", -@@ -119,8 +111,6 @@ android_library("test_support_java") { +@@ -119,8 +110,6 @@ android_library("test_support_java") { source_set("android") { sources = [ "cred_man_support.h", @@ -3190,7 +3189,7 @@ diff --git a/components/webauthn/android/BUILD.gn b/components/webauthn/android/ "internal_authenticator_android.cc", "internal_authenticator_android.h", "webauthn_browser_bridge.cc", -@@ -187,7 +177,6 @@ robolectric_library("junit") { +@@ -187,7 +176,6 @@ robolectric_library("junit") { ":delegate_public_java", ":java", ":test_support_java", @@ -3236,21 +3235,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut /** * Called by InternalAuthenticatorAndroid, which facilitates WebAuthn for processes that * originate from the browser process. Since the request is from the browser process, the -@@ -144,12 +123,10 @@ public final class AuthenticatorImpl implements Authenticator { - - mMakeCredentialCallback = callback; - mIsOperationPending = true; -+ - if (!GmsCoreUtils.isWebauthnSupported() - || (!isChrome() && !GmsCoreUtils.isResultReceiverSupported())) { - onError(AuthenticatorStatus.NOT_IMPLEMENTED); -- return; -- } -- - if (mCreateConfirmationUiDelegate != null) { - if (!mCreateConfirmationUiDelegate.show( - () -> continueMakeCredential(options, callback), -@@ -163,15 +140,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -163,15 +142,6 @@ public final class AuthenticatorImpl implements Authenticator { private void continueMakeCredential( PublicKeyCredentialCreationOptions options, MakeCredential_Response callback) { @@ -3266,12 +3251,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -188,20 +156,6 @@ public final class AuthenticatorImpl implements Authenticator { - if (!GmsCoreUtils.isWebauthnSupported() - || (!isChrome() && !GmsCoreUtils.isResultReceiverSupported())) { +@@ -190,18 +160,6 @@ public final class AuthenticatorImpl implements Authenticator { onError(AuthenticatorStatus.NOT_IMPLEMENTED); -- return; -- } + return; + } - - mPendingFido2CredentialRequest = getFido2CredentialRequest(); - mPendingFido2CredentialRequest.handleGetAssertionRequest( @@ -3287,11 +3270,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -217,14 +171,6 @@ public final class AuthenticatorImpl implements Authenticator { - if (!GmsCoreUtils.isWebauthnSupported()) { +@@ -218,13 +176,6 @@ public final class AuthenticatorImpl implements Authenticator { decoratedCallback.call(false); return; -- } + } - - mIsUserVerifyingPlatformAuthenticatorAvailableCallbackQueue.add(decoratedCallback); - getFido2CredentialRequest() @@ -3302,12 +3284,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** -@@ -243,17 +189,6 @@ public final class AuthenticatorImpl implements Authenticator { - GetMatchingCredentialIdsResponseCallback callback) { - if (!GmsCoreUtils.isGetMatchingCredentialIdsSupported()) { +@@ -245,15 +196,6 @@ public final class AuthenticatorImpl implements Authenticator { callback.onResponse(new ArrayList()); -- return; -- } + return; + } - - getFido2CredentialRequest() - .handleGetMatchingCredentialIdsRequest( @@ -3320,12 +3300,10 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -263,16 +198,6 @@ public final class AuthenticatorImpl implements Authenticator { - || Build.VERSION.SDK_INT < Build.VERSION_CODES.P - || !isChrome()) { +@@ -265,14 +207,6 @@ public final class AuthenticatorImpl implements Authenticator { callback.call(false); -- return; -- } + return; + } - - // If the gmscore and chromium versions are out of sync for some reason, this method will - // return true but chrome will ignore conditional requests. Android surfaces only platform @@ -3337,7 +3315,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } @Override -@@ -284,8 +209,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -284,8 +218,6 @@ public final class AuthenticatorImpl implements Authenticator { if (!mIsOperationPending || mGetAssertionCallback == null) { return; } @@ -3346,7 +3324,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut } /** Callbacks for receiving responses from the internal handlers. */ -@@ -330,7 +253,6 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -330,7 +262,6 @@ public final class AuthenticatorImpl implements Authenticator { } else if (mGetAssertionCallback != null) { mGetAssertionCallback.call(status, null, null); } @@ -3354,7 +3332,7 @@ diff --git a/components/webauthn/android/java/src/org/chromium/components/webaut cleanupRequest(); } -@@ -338,13 +260,10 @@ public final class AuthenticatorImpl implements Authenticator { +@@ -338,13 +269,10 @@ public final class AuthenticatorImpl implements Authenticator { mIsOperationPending = false; mMakeCredentialCallback = null; mGetAssertionCallback = null; @@ -3388,36 +3366,6 @@ new file mode 100644 + CANCEL_PENDING, + CANCEL_PENDING_RP_ID_VALIDATION_COMPLETE, +} -diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java ---- a/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java -+++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/Fido2ApiCallHelper.java -@@ -9,16 +9,11 @@ import android.net.Uri; - import android.os.Parcel; - import android.os.ResultReceiver; - --import com.google.android.gms.tasks.OnFailureListener; --import com.google.android.gms.tasks.OnSuccessListener; --import com.google.android.gms.tasks.Task; -- - import org.chromium.base.ContextUtils; - import org.chromium.blink.mojom.PublicKeyCredentialCreationOptions; - import org.chromium.blink.mojom.PublicKeyCredentialRequestOptions; - import org.chromium.components.externalauth.ExternalAuthUtils; - import org.chromium.components.externalauth.UserRecoverableErrorHandler; --import org.chromium.components.webauthn.Fido2ApiCall.Fido2ApiCallParams; - - import java.security.NoSuchAlgorithmException; - import java.util.List; -@@ -110,9 +105,4 @@ public class Fido2ApiCallHelper { - Fido2ApiCallParams params = WebauthnModeProvider.getInstance().getFido2ApiCallParams(); - params.mMethodInterfaces.getAssertion( - options, uri, clientDataHash, /* tunnelId= */ null, resultReceiver, args); -- Task task = -- call.run(params.mSignMethodId, Fido2ApiCall.TRANSACTION_SIGN, args, result); -- task.addOnSuccessListener(successCallback); -- task.addOnFailureListener(failureCallback); -- } - } diff --git a/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreUtils.java b/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreUtils.java --- a/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreUtils.java +++ b/components/webauthn/android/java/src/org/chromium/components/webauthn/GmsCoreUtils.java diff --git a/build/patches/Remove-detection-of-captive-portals.patch b/build/patches/Remove-detection-of-captive-portals.patch index fc130b63f..35c7dc1af 100644 --- a/build/patches/Remove-detection-of-captive-portals.patch +++ b/build/patches/Remove-detection-of-captive-portals.patch @@ -4,8 +4,10 @@ Subject: Remove detection of captive portals License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- - chrome/browser/net/profile_network_context_service.cc | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + .../browser/net/profile_network_context_service.cc | 2 +- + .../ssl/chrome_security_blocking_page_factory.cc | 14 -------------- + components/captive_portal/core/features.gni | 2 +- + 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc --- a/chrome/browser/net/profile_network_context_service.cc @@ -19,4 +21,38 @@ diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/brow registry->RegisterBooleanPref(prefs::kQuicAllowed, true); registry->RegisterBooleanPref(prefs::kGloballyScopeHTTPAuthCacheEnabled, false); +diff --git a/chrome/browser/ssl/chrome_security_blocking_page_factory.cc b/chrome/browser/ssl/chrome_security_blocking_page_factory.cc +--- a/chrome/browser/ssl/chrome_security_blocking_page_factory.cc ++++ b/chrome/browser/ssl/chrome_security_blocking_page_factory.cc +@@ -102,20 +102,6 @@ bool IsEnterpriseManaged() { + // CaptivePortalBlockingPage to be invoked when the user has pressed the + // connect button. + void OpenLoginPage(content::WebContents* web_contents) { +-#if !BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) +- // OpenLoginTabForWebContents() is not available on Android (the only +- // platform on which captive portal detection is not enabled). Simply open +- // the platform's portal detection URL in a new tab. +- const std::string url = security_interstitials::GetCaptivePortalServerUrl( +- base::android::AttachCurrentThread()); +- content::OpenURLParams params(GURL(url), content::Referrer(), +- WindowOpenDisposition::NEW_FOREGROUND_TAB, +- ui::PAGE_TRANSITION_LINK, false); +- web_contents->OpenURL(params); +-#else +- ChromeSecurityBlockingPageFactory::OpenLoginTabForWebContents(web_contents, +- true); +-#endif // !BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION) + } + + std::unique_ptr CreateMetricsHelperAndStartRecording( +diff --git a/components/captive_portal/core/features.gni b/components/captive_portal/core/features.gni +--- a/components/captive_portal/core/features.gni ++++ b/components/captive_portal/core/features.gni +@@ -6,5 +6,5 @@ import("//build/config/compiler/compiler.gni") + + # Please keep features in alphabetical order. + declare_args() { +- enable_captive_portal_detection = !is_android && !is_ios && !is_castos ++ enable_captive_portal_detection = false + } -- diff --git a/build/patches/Restore-Simplified-NTP-launch.patch b/build/patches/Restore-Simplified-NTP-launch.patch index 4527a9b2b..622313d96 100644 --- a/build/patches/Restore-Simplified-NTP-launch.patch +++ b/build/patches/Restore-Simplified-NTP-launch.patch @@ -17,11 +17,11 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../chrome/browser/ntp/NewTabPageLayout.java | 31 ++++++++- .../SuggestionsNavigationDelegate.java | 17 +++++ .../flags/android/chrome_feature_list.cc | 1 + - .../browser/flags/ChromeFeatureList.java | 1 + + .../browser/flags/ChromeFeatureList.java | 3 +- .../Restore-Simplified-NTP-launch.inc | 12 ++++ - .../Restore-Simplified-NTP-launch.inc | 3 + + .../Restore-Simplified-NTP-launch.inc | 5 ++ .../Restore-Simplified-NTP-launch.inc | 1 + - 15 files changed, 183 insertions(+), 5 deletions(-) + 15 files changed, 186 insertions(+), 6 deletions(-) create mode 100644 chrome/android/java/res/layout/ntp_shortcuts.xml create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/feedback/SimplifiedNtpFeedbackSource.java create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc @@ -365,6 +365,15 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f public static final String MESSAGES_FOR_ANDROID_INFRASTRUCTURE = "MessagesForAndroidInfrastructure"; public static final String SEARCH_READY_OMNIBOX = "SearchReadyOmnibox"; +@@ -634,7 +635,7 @@ public abstract class ChromeFeatureList { + newCachedFlag(ACCOUNT_REAUTHENTICATION_RECENT_TIME_WINDOW, true); + public static final CachedFlag sStartSurfaceWithAccessibility = + newCachedFlag(START_SURFACE_WITH_ACCESSIBILITY, true); +- public static final CachedFlag sSurfacePolish = newCachedFlag(SURFACE_POLISH, true); ++ public static final CachedFlag sSurfacePolish = newCachedFlag(SURFACE_POLISH, false); + public static final CachedFlag sTabDragDropAsWindowAndroid = + newCachedFlag(TAB_DRAG_DROP_ANDROID, false); + public static final CachedFlag sTabGroupPaneAndroid = diff --git a/cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc b/cromite_flags/chrome/browser/about_flags_cc/Restore-Simplified-NTP-launch.inc new file mode 100644 --- /dev/null @@ -386,10 +395,12 @@ diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/R new file mode 100644 --- /dev/null +++ b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/Restore-Simplified-NTP-launch.inc -@@ -0,0 +1,3 @@ +@@ -0,0 +1,5 @@ +CROMITE_FEATURE(kSimplifiedNTP, + "SimplifiedNTP", + base::FEATURE_ENABLED_BY_DEFAULT); ++ ++SET_CROMITE_FEATURE_DISABLED(kSurfacePolish); diff --git a/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc b/cromite_flags/chrome/browser/flags/android/chrome_feature_list_h/Restore-Simplified-NTP-launch.inc new file mode 100644 --- /dev/null diff --git a/build/patches/Welcome-screen.patch b/build/patches/Welcome-screen.patch index 0e274b968..aed5ec06d 100644 --- a/build/patches/Welcome-screen.patch +++ b/build/patches/Welcome-screen.patch @@ -1265,7 +1265,7 @@ diff --git a/chrome/browser/locale/java/src/org/chromium/chrome/browser/locale/L - throw new IllegalStateException( - "Not applicable unless existing or new promos are required"); + TemplateUrlService templateUrlService = -+ TemplateUrlServiceFactory.getForProfile(Profile.getLastUsedRegularProfile()); ++ TemplateUrlServiceFactory.getForProfile(ProfileManager.getLastUsedRegularProfile()); + return templateUrlService.getTemplateUrls(); } diff --git a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch index d580b8856..50816de0a 100644 --- a/build/patches/ungoogled-chromium-no-special-hosts-domains.patch +++ b/build/patches/ungoogled-chromium-no-special-hosts-domains.patch @@ -9,7 +9,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- chrome/browser/BUILD.gn | 8 - .../android/metrics/uma_session_stats.cc | 10 - - .../android/signin/signin_manager_android.cc | 5 + + .../android/signin/signin_manager_android.cc | 39 +-- chrome/browser/browser_process_impl.cc | 1 - chrome/browser/chrome_browser_main.cc | 10 - .../browser/chrome_content_browser_client.cc | 35 +- @@ -59,7 +59,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html ...gled-chromium-no-special-hosts-domains.inc | 1 + net/base/url_util.cc | 25 +- services/network/network_context.cc | 2 +- - 52 files changed, 59 insertions(+), 775 deletions(-) + 52 files changed, 58 insertions(+), 810 deletions(-) create mode 100644 cromite_flags/content/common/features_cc/ungoogled-chromium-no-special-hosts-domains.inc create mode 100644 cromite_flags/content/public/common/content_features_cc/ungoogled-chromium-no-special-hosts-domains.inc @@ -125,18 +125,52 @@ diff --git a/chrome/browser/android/metrics/uma_session_stats.cc b/chrome/browse diff --git a/chrome/browser/android/signin/signin_manager_android.cc b/chrome/browser/android/signin/signin_manager_android.cc --- a/chrome/browser/android/signin/signin_manager_android.cc +++ b/chrome/browser/android/signin/signin_manager_android.cc -@@ -60,6 +60,11 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { +@@ -60,41 +60,10 @@ class ProfileDataRemover : public content::BrowsingDataRemover::Observer { origin_runner_(base::SingleThreadTaskRunner::GetCurrentDefault()), remover_(profile->GetBrowsingDataRemover()) { remover_->AddObserver(this); +- +- if (all_data) { +- chrome_browsing_data_remover::DataType removed_types = +- chrome_browsing_data_remover::ALL_DATA_TYPES; +- if (password_manager::UsesSplitStoresAndUPMForLocal( +- profile_->GetPrefs())) { +- // If usesSplitStoresAndUPMForLocal() is true, browser sign-in won't +- // upload existing passwords, so there's no reason to wipe them +- // immediately before. Similarly, on browser sign-out, account passwords +- // should survive (outside of the browser) to be used by other apps, +- // until system-level sign-out. In other words, the browser has no +- // business deleting any passwords here. +- removed_types &= ~chrome_browsing_data_remover::DATA_TYPE_PASSWORDS; +- } +- remover_->RemoveAndReply(base::Time(), base::Time::Max(), removed_types, +- chrome_browsing_data_remover::ALL_ORIGIN_TYPES, +- this); +- } else { +- std::unique_ptr google_tld_filter = +- content::BrowsingDataFilterBuilder::Create( +- content::BrowsingDataFilterBuilder::Mode::kDelete); +- +- // TODO(msramek): BrowsingDataFilterBuilder was not designed for +- // large filters. Optimize it. +- for (const std::string& domain : +- google_util::GetGoogleRegistrableDomains()) { +- google_tld_filter->AddRegisterableDomain(domain); +- } +- +- remover_->RemoveWithFilterAndReply( +- base::Time(), base::Time::Max(), +- content::BrowsingDataRemover::DATA_TYPE_CACHE_STORAGE, +- chrome_browsing_data_remover::ALL_ORIGIN_TYPES, +- std::move(google_tld_filter), this); +- } + remover_->RemoveAndReply(base::Time(), base::Time::Max(), + chrome_browsing_data_remover::ALL_DATA_TYPES, + chrome_browsing_data_remover::ALL_ORIGIN_TYPES, + this); -+ if ((true)) return; + } - if (all_data) { - chrome_browsing_data_remover::DataType removed_types = + ProfileDataRemover(const ProfileDataRemover&) = delete; diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc --- a/chrome/browser/browser_process_impl.cc +++ b/chrome/browser/browser_process_impl.cc