[AUTO][FILECONTROL] - version 139.0.7258.128 (#2246)

[AUTO][FILECONTROL] - version 139.0.7258.128
This commit is contained in:
uazo
2025-08-13 13:33:59 -01:00
committed by GitHub
113 changed files with 3936 additions and 2069 deletions
+1 -1
View File
@@ -1 +1 @@
138.0.7204.169
139.0.7258.128
@@ -24,6 +24,7 @@
#include "android_webview/browser/aw_devtools_manager_delegate.h"
#include "android_webview/browser/aw_feature_list_creator.h"
#include "android_webview/browser/aw_http_auth_handler.h"
#include "android_webview/browser/aw_origin_matched_header.h"
#include "android_webview/browser/aw_settings.h"
#include "android_webview/browser/aw_speech_recognition_manager_delegate.h"
#include "android_webview/browser/aw_web_contents_delegate.h"
@@ -63,10 +64,11 @@
#include "base/metrics/histogram_macros.h"
#include "base/notreached.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/thread_pool/thread_pool_instance.h"
#include "base/trace_event/base_tracing.h"
#include "base/trace_event/trace_event.h"
#include "build/build_config.h"
#include "components/crash/content/browser/crash_handler_host_linux.h"
#include "components/embedder_support/origin_trials/origin_trials_settings_storage.h"
@@ -643,9 +645,14 @@ void AwContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
CHECK_GE(fd, 0);
mappings->ShareWithRegion(kAndroidWebView100PercentPakDescriptor, fd, region);
fd = ui::GetLocalePackFd(&region);
CHECK_GE(fd, 0);
mappings->ShareWithRegion(kAndroidWebViewLocalePakDescriptor, fd, region);
// WebView will (currently) only ever have one locale pak, compared to Clank,
// which has up to 2. This will change in the near future when we introduce
// genders to locales.
auto locale_paks = ui::GetLocalePaks();
CHECK_EQ(locale_paks.size(), 1u);
CHECK_GE(locale_paks.at(0).fd, 0);
mappings->ShareWithRegion(kAndroidWebViewLocalePakDescriptor,
locale_paks.at(0).fd, locale_paks.at(0).region);
int crash_signal_fd =
crashpad::CrashHandlerHost::Get()->GetDeathSignalSocket();
@@ -978,14 +985,16 @@ bool AwContentBrowserClient::HandleExternalProtocol(
const net::IsolationInfo& isolation_info) {
// Manages its own lifetime.
new android_webview::AwProxyingURLLoaderFactory(
std::nullopt /* cookie_manager */,
nullptr /* cookie_access_policy */, isolation_info,
/* cookie_manager=*/std::nullopt,
/* cookie_access_policy=*/nullptr, isolation_info,
web_contents_key, frame_tree_node_id, std::move(receiver),
mojo::NullRemote(), true /* intercept_only */,
std::nullopt /* security_options */,
nullptr /* xrw_allowlist_matcher */,
mojo::NullRemote(),
/* intercept_only=*/true,
/* security_options=*/std::nullopt,
/* xrw_allowlist_matcher=*/nullptr,
/* origin_matched_headers=*/{},
std::move(browser_context_handle),
std::nullopt /* navigation_id */);
/* navigation_id=*/std::nullopt);
},
std::move(receiver), web_contents_key, frame_tree_node_id,
std::move(browser_context_handle), isolation_info));
@@ -1176,6 +1185,7 @@ void AwContentBrowserClient::WillCreateURLLoaderFactory(
frame->GetFrameTreeNodeId(), std::move(proxied_receiver),
std::move(target_factory_remote), security_options,
std::move(xrw_allowlist_matcher),
aw_browser_context->GetOriginMatchedHeaders(),
std::move(browser_context_handle), navigation_id));
} else {
// A service worker and worker subresources set nullptr to |frame|, and
@@ -1190,6 +1200,7 @@ void AwContentBrowserClient::WillCreateURLLoaderFactory(
std::move(proxied_receiver), std::move(target_factory_remote),
std::nullopt /* security_options */,
aw_browser_context->service_worker_xrw_allowlist_matcher(),
aw_browser_context->GetOriginMatchedHeaders(),
std::move(browser_context_handle), navigation_id));
}
}
@@ -18,6 +18,7 @@
#include "components/permissions/features.h"
#include "components/safe_browsing/core/common/features.h"
#include "components/translate/core/common/translate_util.h"
#include "components/variations/feature_overrides.h"
#include "components/viz/common/features.h"
#include "content/public/common/content_features.h"
#include "gpu/config/gpu_finch_features.h"
@@ -32,48 +33,6 @@
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_switches.h"
namespace internal {
AwFeatureOverrides::AwFeatureOverrides(base::FeatureList& feature_list)
: feature_list_(feature_list) {}
AwFeatureOverrides::~AwFeatureOverrides() {
// TODO(crbug.com/379864779): This doesn't play well with potential server-
// side overrides.
for (const auto& field_trial_override : field_trial_overrides_) {
feature_list_->RegisterFieldTrialOverride(
field_trial_override.feature->name, field_trial_override.override_state,
field_trial_override.field_trial);
}
feature_list_->RegisterExtraFeatureOverrides(
std::move(overrides_), /*replace_use_default_overrides=*/true);
}
void AwFeatureOverrides::EnableFeature(const base::Feature& feature) {
overrides_.emplace_back(
std::cref(feature),
base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE);
}
void AwFeatureOverrides::DisableFeature(const base::Feature& feature) {
overrides_.emplace_back(
std::cref(feature),
base::FeatureList::OverrideState::OVERRIDE_DISABLE_FEATURE);
}
void AwFeatureOverrides::OverrideFeatureWithFieldTrial(
const base::Feature& feature,
base::FeatureList::OverrideState override_state,
base::FieldTrial* field_trial) {
field_trial_overrides_.emplace_back(FieldTrialOverride{
.feature = raw_ref(feature),
.override_state = override_state,
.field_trial = field_trial,
});
}
} // namespace internal
void AwFieldTrials::OnVariationsSetupComplete() {
// Persistent histograms must be enabled ASAP, but depends on Features.
base::FilePath metrics_dir;
@@ -90,7 +49,7 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
if (!feature_list) {
return;
}
internal::AwFeatureOverrides aw_feature_overrides(*feature_list);
variations::FeatureOverrides aw_feature_overrides(*feature_list);
// Disable third-party storage partitioning on WebView.
aw_feature_overrides.DisableFeature(
@@ -104,6 +63,10 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
aw_feature_overrides.DisableFeature(
blink::features::kEnforceNoopenerOnBlobURLNavigation);
// TODO(crbug.com/421547429): Temporarily disabled to address crashes.
aw_feature_overrides.DisableFeature(
network::features::kMaskedDomainListFlatbufferImpl);
#if BUILDFLAG(ENABLE_VALIDATING_COMMAND_DECODER)
// Disable the passthrough on WebView.
aw_feature_overrides.DisableFeature(
@@ -148,10 +111,20 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// kVulkan in case it becomes enabled by default.
aw_feature_overrides.DisableFeature(::features::kVulkan);
// WebView does not support web-app (service-worker) based payment apps for
// Payment Request.
aw_feature_overrides.DisableFeature(::features::kServiceWorkerPaymentApps);
// Payment Request on WebView does not send down the deprecated parameters to
// Android payment apps.
aw_feature_overrides.EnableFeature(
::payments::android::kAndroidPaymentIntentsOmitDeprecatedParameters);
// WebView does not support Secure Payment Confirmation, and thus should not
// expose the PaymentRequest.securePaymentConfirmationAvailability API.
aw_feature_overrides.DisableFeature(
blink::features::kSecurePaymentConfirmationAvailabilityAPI);
// WebView does not support overlay fullscreen yet for video overlays.
aw_feature_overrides.DisableFeature(media::kOverlayFullscreenVideo);
@@ -161,8 +134,7 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// WebView does not support multiple processes, so don't try to call some
// MediaDrm APIs in a separate process.
aw_feature_overrides.DisableFeature(
media::kAllowMediaCodecCallsInSeparateProcess);
aw_feature_overrides.DisableFeature(media::kMediaDrmQueryInSeparateProcess);
aw_feature_overrides.DisableFeature(::features::kBackgroundFetch);
@@ -250,24 +222,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// function and the webview permission manager cannot support it.
aw_feature_overrides.DisableFeature(blink::features::kPermissionElement);
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kDebugBsa)) {
// Feature parameters can only be set via a field trial.
const char kTrialName[] = "StudyDebugBsa";
const char kGroupName[] = "GroupDebugBsa";
base::FieldTrial* field_trial =
base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName);
// If field_trial is null, there was some unexpected name conflict.
CHECK(field_trial);
base::FieldTrialParams params;
params.emplace(net::features::kIpPrivacyTokenServer.name,
"https://staging-phosphor-pa.sandbox.googleapis.com");
base::AssociateFieldTrialParams(kTrialName, kGroupName, params);
aw_feature_overrides.OverrideFeatureWithFieldTrial(
net::features::kEnableIpProtectionProxy,
base::FeatureList::OverrideState::OVERRIDE_ENABLE_FEATURE, field_trial);
aw_feature_overrides.EnableFeature(network::features::kMaskedDomainList);
}
// Feature parameters can only be set via a field trial.
// Note: Performing a field trial here means we cannot include
// |kBtmTtl| in the testing config json.
@@ -315,6 +269,11 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// Sharing ANGLE's Vulkan queue is not supported on WebView.
aw_feature_overrides.DisableFeature(::features::kVulkanFromANGLE);
// This feature has not been experimented with yet on WebView.
// TODO(crbug.com/371512561): Disable this feature for WebView only if webview
// itself is using GLES.
aw_feature_overrides.DisableFeature(::features::kDefaultANGLEVulkan);
// Partitioned :visited links history is not supported on WebView.
aw_feature_overrides.DisableFeature(
blink::features::kPartitionVisitedLinkDatabaseWithSelfLinks);
@@ -327,4 +286,8 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
// TODO(crbug.com/422161917): Revert this for the ablation study.
aw_feature_overrides.EnableFeature(
features::kServiceWorkerBackgroundUpdateForRegisteredStorageKeys);
// Explicitly disable PrefetchProxy instead of relying only on passing an
// empty URL.
aw_feature_overrides.DisableFeature(features::kPrefetchProxy);
}
@@ -468,12 +468,6 @@ by a child template that "extends" this file.
android:excludeFromRecents="true"
android:exported="false" />
<receiver android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$PhoneUnlockedReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<!-- Phishing Protection related -->
<receiver android:name="org.chromium.chrome.browser.safe_browsing.PasswordProtectionBroadcastReceiver"
android:exported="true"
@@ -24,6 +24,7 @@
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/metrics/user_metrics.h"
#include "base/notimplemented.h"
#include "base/strings/strcat.h"
#include "base/task/bind_post_task.h"
#include "base/task/thread_pool.h"
@@ -87,6 +88,7 @@
#include "chrome/common/buildflags.h"
#include "chrome/common/url_constants.h"
#include "components/autofill/core/browser/data_manager/addresses/address_data_manager.h"
#include "components/autofill/core/browser/data_manager/autofill_ai/entity_data_manager.h"
#include "components/autofill/core/browser/data_manager/payments/payments_data_manager.h"
#include "components/autofill/core/browser/data_manager/personal_data_manager.h"
#include "components/autofill/core/browser/strike_databases/strike_database.h"
@@ -95,6 +97,7 @@
#include "components/autofill/core/common/autofill_payments_features.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/browsing_data/content/browsing_data_helper.h"
#include "components/browsing_data/core/features.h"
#include "components/content_settings/core/browser/content_settings_registry.h"
#include "components/content_settings/core/browser/content_settings_utils.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
@@ -762,6 +765,21 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
browser_bound_key_deleter->RemoveInvalidBBKs();
}
#endif // BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_CHROMEOS)
if (base::FeatureList::IsEnabled(
browsing_data::features::kDbdRevampDesktop) &&
ash::SystemProxyManager::Get()) {
// Sends a request to the System-proxy daemon to clear the proxy user
// credentials. System-proxy retrieves proxy username and password from
// the NetworkService, but not the creation time of the credentials. The
// |ClearUserCredentials| request will remove all the cached proxy
// credentials. If credentials prior to |delete_begin_| are removed from
// System-proxy, the daemon will send a D-Bus request to Chrome to fetch
// them from the NetworkService when needed.
ash::SystemProxyManager::Get()->ClearUserCredentials();
}
#endif // BUILDFLAG(IS_CHROMEOS)
}
//////////////////////////////////////////////////////////////////////////////
@@ -978,17 +996,6 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
CreateTaskCompletionClosureForMojo(
TracingDataType::kHttpAuthCache));
scoped_refptr<payments::PaymentManifestWebDataService> web_data_service =
webdata_services::WebDataServiceWrapperFactory::
GetPaymentManifestWebDataServiceForBrowserContext(
profile_, ServiceAccessType::EXPLICIT_ACCESS);
if (web_data_service) {
web_data_service->ClearSecurePaymentConfirmationCredentials(
delete_begin_, delete_end_,
CreateTaskCompletionClosure(
TracingDataType::kSecurePaymentConfirmationCredentials));
}
#if BUILDFLAG(IS_CHROMEOS)
if (ash::SystemProxyManager::Get()) {
// Sends a request to the System-proxy daemon to clear the proxy user
@@ -1120,6 +1127,26 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
}
}
if ((remove_mask & constants::DATA_TYPE_PASSWORDS)
#if !BUILDFLAG(IS_ANDROID)
||
((remove_mask & constants::DATA_TYPE_FORM_DATA) &&
base::FeatureList::IsEnabled(browsing_data::features::kDbdRevampDesktop))
#endif // !BUILDFLAG(IS_ANDROID)
) {
scoped_refptr<payments::PaymentManifestWebDataService>
payment_web_data_service =
webdata_services::WebDataServiceWrapperFactory::
GetPaymentManifestWebDataServiceForBrowserContext(
profile_, ServiceAccessType::EXPLICIT_ACCESS);
if (payment_web_data_service) {
payment_web_data_service->ClearSecurePaymentConfirmationCredentials(
delete_begin_, delete_end_,
CreateTaskCompletionClosure(
TracingDataType::kSecurePaymentConfirmationCredentials));
}
}
//////////////////////////////////////////////////////////////////////////////
// DATA_TYPE_CACHE
if (remove_mask & content::BrowsingDataRemover::DATA_TYPE_CACHE) {
@@ -32,6 +32,8 @@
#include "chrome/common/buildflags.h"
#include "chrome/common/pref_names.h"
#include "chrome/services/speech/buildflags/buildflags.h"
#include "components/autofill/content/browser/content_autofill_client.h"
#include "components/credential_management/content_credential_manager.h"
#include "components/dom_distiller/content/browser/distillability_driver.h"
#include "components/dom_distiller/content/browser/distiller_javascript_service_impl.h"
#include "components/dom_distiller/content/common/mojom/distillability_service.mojom.h"
@@ -396,6 +398,32 @@ void BindModelBroker(
}
}
void BindCredentialManager(
content::RenderFrameHost* frame_host,
mojo::PendingReceiver<blink::mojom::CredentialManager> receiver) {
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(frame_host);
autofill::ContentAutofillClient* autofill_client =
autofill::ContentAutofillClient::FromWebContents(web_contents);
// Not every `WebContents` has a `ContentAutofillClient`.
if (!autofill_client) {
return;
}
credential_management::ContentCredentialManager* content_credential_manager =
autofill_client->GetContentCredentialManager();
// Try to bind to the credential manager, but if it's not available for this
// render frame host, the request will be just dropped. This will cause the
// message pipe to be closed, which will raise a connection error on the peer
// side.
if (!content_credential_manager) {
// TODO(crbug.com/406224744): Retry to bind the credential manager.
return;
}
content_credential_manager->BindRequest(frame_host, std::move(receiver));
}
} // namespace
void PopulateChromeFrameBinders(
@@ -446,7 +474,7 @@ void PopulateChromeFrameBinders(
}
map->Add<blink::mojom::CredentialManager>(
base::BindRepeating(&ChromePasswordManagerClient::BindCredentialManager));
base::BindRepeating(&BindCredentialManager));
map->Add<chrome::mojom::OpenSearchDescriptionDocumentHandler>(
base::BindRepeating(
@@ -32,6 +32,7 @@
#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram_functions.h"
#include "base/no_destructor.h"
#include "base/notimplemented.h"
#include "base/notreached.h"
#include "base/path_service.h"
#include "base/stl_util.h"
@@ -232,9 +233,11 @@
#include "components/enterprise/common/proto/connectors.pb.h"
#include "components/enterprise/content/clipboard_restriction_service.h"
#include "components/enterprise/content/pref_names.h"
#include "components/enterprise/data_controls/content/browser/last_replaced_clipboard_data.h"
#include "components/error_page/common/error.h"
#include "components/error_page/common/error_page_switches.h"
#include "components/error_page/common/localized_error.h"
#include "components/fingerprinting_protection_filter/common/fingerprinting_protection_filter_features.h"
#include "components/google/core/common/google_switches.h"
#include "components/heap_profiling/in_process/heap_profiler_controller.h"
#include "components/keep_alive_registry/keep_alive_types.h"
@@ -259,7 +262,7 @@
#include "components/payments/content/payment_request_display_manager.h"
#include "components/payments/content/secure_payment_confirmation_service_factory.h"
#include "components/pdf/common/pdf_util.h"
#include "components/permissions/permission_context_base.h"
#include "components/permissions/content_setting_permission_context_base.h"
#include "components/policy/content/policy_blocklist_service.h"
#include "components/policy/core/common/management/management_service.h"
#include "components/policy/core/common/policy_pref_names.h"
@@ -285,6 +288,7 @@
#include "components/search_engines/template_url_service.h"
#include "components/security_state/core/security_state.h"
#include "components/services/on_device_translation/buildflags/buildflags.h"
#include "components/site_isolation/features.h"
#include "components/site_isolation/pref_names.h"
#include "components/site_isolation/preloaded_isolated_origins.h"
#include "components/site_isolation/site_isolation_policy.h"
@@ -322,7 +326,9 @@
#include "content/public/browser/permission_descriptor_util.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/service_worker_context.h"
#include "content/public/browser/site_isolation_mode.h"
#include "content/public/browser/site_isolation_policy.h"
#include "content/public/browser/sms_fetcher.h"
#include "content/public/browser/tts_controller.h"
#include "content/public/browser/tts_platform.h"
@@ -338,9 +344,9 @@
#include "content/public/common/content_descriptors.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/origin_util.h"
#include "content/public/common/url_utils.h"
#include "content/public/common/window_container_type.mojom-shared.h"
#include "device/fido/features.h"
#include "device/vr/buildflags/buildflags.h"
#include "extensions/browser/browser_frame_context_data.h"
#include "extensions/buildflags/buildflags.h"
@@ -482,11 +488,12 @@
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/android/tab_web_contents_delegate_android.h"
#include "chrome/browser/chrome_browser_main_android.h"
#include "chrome/browser/chrome_content_browser_client_android.h"
#include "chrome/browser/digital_credentials/digital_identity_provider_android.h"
#include "chrome/browser/flags/android/chrome_feature_list.h"
#include "chrome/browser/safe_browsing/android/safe_browsing_referring_app_bridge_android.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
#include "chrome/common/chrome_descriptors.h"
#include "chrome/common/chrome_descriptors_android.h"
#include "components/browser_ui/accessibility/android/font_size_prefs_android.h"
#include "components/crash/content/browser/child_exit_observer_android.h"
#include "components/crash/content/browser/crash_memory_metrics_collector_android.h"
@@ -622,8 +629,8 @@
#include "chrome/browser/speech/extension_api/tts_engine_extension_api.h"
#include "chrome/browser/ui/web_applications/app_browser_controller.h"
#include "chrome/browser/web_applications/web_app_utils.h"
#include "content/public/browser/site_isolation_policy.h"
#include "extensions/browser/api/web_request/web_request_proxying_webtransport.h"
#include "extensions/common/user_script.h"
#endif // BUILDFLAG(ENABLE_EXTENSIONS)
#if BUILDFLAG(ENABLE_GUEST_VIEW)
@@ -774,6 +781,11 @@ BASE_FEATURE(kSkipPagehideInCommitForDSENavigation,
"SkipPagehideInCommitForDSENavigation",
base::FEATURE_DISABLED_BY_DEFAULT);
// Warm up the ServiceWorker registration for DSE.
BASE_FEATURE(kPrewarmServiceWorkerRegistrationForDSE,
"PrewarmServiceWorkerRegistrationForDSE",
base::FEATURE_DISABLED_BY_DEFAULT);
// A small ChromeBrowserMainExtraParts that invokes a callback when threads are
// ready. Used to initialize ChromeContentBrowserClient data that needs the UI
// thread.
@@ -1327,6 +1339,10 @@ bool IsDefaultSearchEngine(Profile* profile, const GURL& url) {
auto* template_url_service =
TemplateURLServiceFactory::GetForProfile(profile);
if (!template_url_service) {
return false;
}
const TemplateURL* default_search_engine =
template_url_service->GetDefaultSearchProvider();
@@ -1392,12 +1408,7 @@ void ChromeContentBrowserClient::RegisterLocalStatePrefs(
registry->RegisterIntegerPref(prefs::kSCTAuditingHashdanceReportCount, 0);
registry->RegisterBooleanPref(prefs::kDataURLWhitespacePreservationEnabled,
true);
#if BUILDFLAG(IS_CHROMEOS)
registry->RegisterBooleanPref(prefs::kNativeClientForceAllowed, false);
registry->RegisterBooleanPref(prefs::kDeviceNativeClientForceAllowed, false);
registry->RegisterBooleanPref(prefs::kDeviceNativeClientForceAllowedCache,
false);
#endif // BUILDFLAG(IS_CHROMEOS)
registry->RegisterBooleanPref(prefs::kEnableUnsafeSwiftShader, false);
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID)
registry->RegisterBooleanPref(prefs::kOutOfProcessSystemDnsResolutionEnabled,
true);
@@ -1473,12 +1484,6 @@ void ChromeContentBrowserClient::RegisterProfilePrefs(
policy::policy_prefs::kCSSCustomStateDeprecatedSyntaxEnabled,
/*default_value=*/false);
registry->RegisterBooleanPref(
policy::policy_prefs::kSelectParserRelaxationEnabled,
/*default_value=*/true);
registry->RegisterBooleanPref(
policy::policy_prefs::kKeyboardFocusableScrollersEnabled, true);
registry->RegisterBooleanPref(
policy::policy_prefs::kStandardizedBrowserZoomEnabled, true);
@@ -2458,6 +2463,59 @@ ChromeContentBrowserClient::GetOriginsRequiringDedicatedProcess() {
return isolated_origin_list;
}
void ChromeContentBrowserClient::WillComputeSiteForNavigation(
content::BrowserContext* browser_context,
const GURL& url) {
if (!site_isolation::SiteIsolationPolicy::
IsOriginIsolationForJsOptExceptionsEnabled()) {
return;
}
// Only process HTTP(S) URLs. Special URLs like data:, about:blank and others
// can't really be isolated by the process model on their own.
if (!url.SchemeIsHTTPOrHTTPS()) {
return;
}
// If the JS optimizer policy for this `url`'s origin differs from the default
// JS optimizer policy, then the url needs to be put into its own process
// (otherwise it will have the default JS setting applied). This lets JS
// optimizer policy rules be applied to URLs on clients that have partial site
// isolation (like Android). This also improves JS optimizer rules handling on
// clients where subdomains of a site are not isolated. For example, if a.com
// has site isolation, but sub.a.com needs a different rule (More information
// at: crbug.com/377733397). Note that this will cause explicit opt-outs using
// the Origin-Agent-Cluster header to be ignored. Note that it is safe to do
// this multiple times for the same origin because AddFutureIsolatedOrigins
// should drop requests to isolate an origin that is already isolated.
Profile* profile = Profile::FromBrowserContext(browser_context);
auto* map = HostContentSettingsMapFactory::GetForProfile(profile);
if (!map) {
return;
}
if (map->GetDefaultContentSetting(ContentSettingsType::JAVASCRIPT_OPTIMIZER,
nullptr) !=
map->GetContentSetting(url, url,
ContentSettingsType::JAVASCRIPT_OPTIMIZER)) {
url::Origin origin(url::Origin::Create(url));
content::ChildProcessSecurityPolicy* policy =
content::ChildProcessSecurityPolicy::GetInstance();
// The user added a content setting rule and then navigated, so specify the
// isolation source as USER_TRIGGERED. This choice doesn't matter much
// because the origin isolation is only for this session.
// TODO(crbug.com/410544327): We may create a more specific source in the
// future to show more clearly on chrome://process-internals the reason for
// isolating this origin.
// TODO(crbug.com/417770940): Investigate to see if adding this on JS
// optimizer rule change would work better.
policy->AddFutureIsolatedOrigins({origin},
content::ChildProcessSecurityPolicy::
IsolatedOriginSource::USER_TRIGGERED,
browser_context);
}
}
bool ChromeContentBrowserClient::ShouldEnableStrictSiteIsolation() {
if (base::FeatureList::IsEnabled(features::kSitePerProcess)) {
return true;
@@ -2556,9 +2614,8 @@ bool ChromeContentBrowserClient::IsIsolatedContextAllowedForUrl(
void ChromeContentBrowserClient::CheckGetAllScreensMediaAllowed(
content::RenderFrameHost* render_frame_host,
base::OnceCallback<void(bool)> callback) {
capture_policy::CheckGetAllScreensMediaAllowed(
render_frame_host->GetMainFrame()->GetLastCommittedOrigin().GetURL(),
std::move(callback));
std::move(callback).Run(capture_policy::IsMultiScreenCaptureAllowed(
render_frame_host->GetMainFrame()->GetLastCommittedOrigin().GetURL()));
}
bool ChromeContentBrowserClient::IsFileAccessAllowed(
@@ -2729,11 +2786,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
blink::switches::kDisableBlobUrlPartitioning);
}
if (!prefs->GetBoolean(
policy::policy_prefs::kKeyboardFocusableScrollersEnabled)) {
command_line->AppendSwitch(
blink::switches::kKeyboardFocusableScrollersOptOut);
}
if (!prefs->GetBoolean(
policy::policy_prefs::kStandardizedBrowserZoomEnabled)) {
command_line->AppendSwitch(
@@ -2744,11 +2796,6 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
command_line->AppendSwitch(
blink::switches::kCSSCustomStateDeprecatedSyntaxEnabled);
}
if (!prefs->GetBoolean(
policy::policy_prefs::kSelectParserRelaxationEnabled)) {
command_line->AppendSwitch(
blink::switches::kDisableSelectParserRelaxation);
}
if (prefs->GetBoolean(policy::policy_prefs::
kForcePermissionPolicyUnloadDefaultEnabled)) {
@@ -2853,9 +2900,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
// Make the WebAuthenticationRemoteDesktopAllowedOrigins policy enable the
// experimental WebAuthenticationRemoteDesktopSupport Blink runtime
// feature.
if (base::FeatureList::IsEnabled(
device::kWebAuthnRemoteDesktopAllowedOriginsPolicy) &&
!prefs->GetList(webauthn::pref_names::kRemoteDesktopAllowedOrigins)
if (!prefs->GetList(webauthn::pref_names::kRemoteDesktopAllowedOrigins)
.empty()) {
command_line->AppendSwitch(switches::kWebAuthRemoteDesktopSupport);
}
@@ -2886,6 +2931,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
extensions::switches::kDisableExtensionsHttpThrottling,
extensions::switches::kEnableExperimentalExtensionApis,
extensions::switches::kExtensionsOnChromeURLs,
extensions::switches::kExtensionsOnExtensionURLs,
extensions::switches::kSetExtensionThrottleTestParams, // For tests
// only.
extensions::switches::kAllowlistedExtensionID,
@@ -2895,6 +2941,7 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
switches::kAppsGalleryURL,
switches::kDisableJavaScriptHarmonyShipping,
variations::switches::kEnableBenchmarking,
variations::switches::kEnableBenchmarkingApi,
switches::kEnableDistillabilityService,
switches::kEnableNaCl,
#if BUILDFLAG(ENABLE_NACL)
@@ -3342,9 +3389,10 @@ ChromeContentBrowserClient::AllowWebBluetooth(
// base::CommandLine::ForCurrentProcess()->
// HasSwitch(switches::kEnableWebBluetooth) is true.
if (base::GetFieldTrialParamValue(
permissions::PermissionContextBase::kPermissionsKillSwitchFieldStudy,
"Bluetooth") ==
permissions::PermissionContextBase::kPermissionsKillSwitchBlockedValue) {
permissions::ContentSettingPermissionContextBase::
kPermissionsKillSwitchFieldStudy,
"Bluetooth") == permissions::ContentSettingPermissionContextBase::
kPermissionsKillSwitchBlockedValue) {
// The kill switch is enabled for this permission. Block requests.
return AllowWebBluetoothResult::BLOCK_GLOBALLY_DISABLED;
}
@@ -3672,7 +3720,20 @@ bool ChromeContentBrowserClient::IsPrefetchWithServiceWorkerAllowed(
content::BrowserContext* browser_context) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
Profile* profile = Profile::FromBrowserContext(browser_context);
return profile->GetPrefs()->GetBoolean(prefs::kPrefetchWithServiceWorkerEnabled);
return profile->GetPrefs()->GetBoolean(
prefs::kPrefetchWithServiceWorkerEnabled);
}
bool ChromeContentBrowserClient::IsServiceWorkerSyntheticResponseAllowed(
content::BrowserContext* browser_context,
const GURL& url) {
Profile* profile = Profile::FromBrowserContext(browser_context);
if (!profile || profile->IsSystemProfile()) {
// Exclude if the profile is a system profile.
return false;
}
return IsDefaultSearchEngine(profile, url);
}
void ChromeContentBrowserClient::GrantCookieAccessDueToHeuristic(
@@ -3708,6 +3769,61 @@ bool ChromeContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed(
return !cookie_settings->ShouldBlockThirdPartyCookies();
}
void ChromeContentBrowserClient::PrewarmServiceWorkerRegistrationForDSE(
content::BrowserContext* browser_context,
content::ServiceWorkerContext& service_worker_context) {
TRACE_EVENT(
"ServiceWorker",
"ChromeContentBrowserClient::PrewarmServiceWorkerRegistrationForDSE");
if (ChromeContentBrowserClient::
PrewarmServiceWorkerRegistrationForDSECalledCountForTesting()) {
CHECK_IS_TEST();
++(*ChromeContentBrowserClient::
PrewarmServiceWorkerRegistrationForDSECalledCountForTesting());
}
if (!base::FeatureList::IsEnabled(kPrewarmServiceWorkerRegistrationForDSE)) {
return;
}
Profile* profile = Profile::FromBrowserContext(browser_context);
if (!profile) {
return;
}
TemplateURLService* template_url_service =
TemplateURLServiceFactory::GetForProfile(profile);
if (!template_url_service) {
return;
}
GURL url =
template_url_service->GenerateSearchURLForDefaultSearchProvider(u"");
if (!content::OriginCanAccessServiceWorkers(url)) {
return;
}
const blink::StorageKey key =
blink::StorageKey::CreateFirstParty(url::Origin::Create(url));
if (!service_worker_context.MaybeHasRegistrationForStorageKey(key)) {
return;
}
service_worker_context.CheckHasServiceWorker(url, key, base::DoNothing());
}
// static
std::optional<int>& ChromeContentBrowserClient::
PrewarmServiceWorkerRegistrationForDSECalledCountForTesting() {
static std::optional<int> call_count;
return call_count;
}
bool ChromeContentBrowserClient::CanSendSCTAuditingReport(
content::BrowserContext* browser_context) {
return SCTReportingService::CanSendSCTAuditingReport();
@@ -4366,9 +4482,10 @@ void ChromeContentBrowserClient::OverrideWebPreferences(
Profile::FromBrowserContext(web_contents->GetBrowserContext());
PrefService* prefs = profile->GetPrefs();
// Fill font preferences. These are not registered on Android
// Fill font preferences. These are not registered on Android unless we're built
// with extensions (the chrome.fontSettings API can change these).
// - http://crbug.com/308033, http://crbug.com/696364.
#if !BUILDFLAG(IS_ANDROID)
#if !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_DESKTOP_ANDROID_EXTENSIONS)
// Enabling the FontFamilyCache needs some KeyedService that might not be
// available for some irregular profiles, like the System Profile.
if (!AreKeyedServicesDisabledForProfileByDefault(profile)) {
@@ -4675,6 +4792,18 @@ void ChromeContentBrowserClient::OverrideWebPreferences(
web_prefs->always_show_context_menu_on_touch =
base::FeatureList::IsEnabled(::features::kContextMenuEmptySpace);
#endif
web_prefs->api_based_fingerprinting_interventions_enabled =
base::FeatureList::IsEnabled(
features::kIncognitoFingerprintingInterventions) &&
Profile::FromBrowserContext(web_contents->GetBrowserContext())
->IsIncognitoProfile();
web_prefs->content_based_fingerprinting_protection_enabled =
fingerprinting_protection_filter::features::
IsFingerprintingProtectionEnabledForIncognitoState(
Profile::FromBrowserContext(web_contents->GetBrowserContext())
->IsIncognitoProfile());
}
bool ChromeContentBrowserClientParts::OverrideWebPreferencesAfterNavigation(
@@ -4973,14 +5102,7 @@ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
fd = ui::GetCommonResourcesPackFd(&region);
mappings->ShareWithRegion(kAndroidChrome100PercentPakDescriptor, fd, region);
fd = ui::GetLocalePackFd(&region);
mappings->ShareWithRegion(kAndroidLocalePakDescriptor, fd, region);
// Optional secondary locale .pak file.
fd = ui::GetSecondaryLocalePackFd(&region);
if (fd != -1) {
mappings->ShareWithRegion(kAndroidSecondaryLocalePakDescriptor, fd, region);
}
GetMappedLocalePacksForChildProcess(mappings);
base::FilePath app_data_path;
base::PathService::Get(base::DIR_ANDROID_APP_DATA, &app_data_path);
@@ -5546,12 +5668,6 @@ ChromeContentBrowserClient::MaybeCreateSafeBrowsingURLLoaderThrottle(
safe_browsing::RealTimePolicyEngine::CanPerformEnterpriseFullURLLookup(
profile->GetPrefs(), has_valid_dm_token, profile->IsOffTheRecord(),
profile->IsGuestSession());
#if BUILDFLAG(IS_ANDROID)
is_enterprise_lookup_enabled =
is_enterprise_lookup_enabled &&
base::FeatureList::IsEnabled(
safe_browsing::kEnterpriseRealTimeUrlCheckOnAndroid);
#endif
bool is_consumer_lookup_enabled =
safe_browsing::RealTimePolicyEngine::CanPerformFullURLLookup(
profile->GetPrefs(), profile->IsOffTheRecord(),
@@ -5584,17 +5700,13 @@ ChromeContentBrowserClient::MaybeCreateSafeBrowsingURLLoaderThrottle(
std::optional<safe_browsing::internal::ReferringAppInfo> referring_app_info =
std::nullopt;
#if BUILDFLAG(IS_ANDROID)
if (safe_browsing::IsEnhancedProtectionEnabled(*profile->GetPrefs()) &&
base::FeatureList::IsEnabled(
safe_browsing::kAddReferringAppInfoToProtegoPings)) {
bool get_webapk_info = base::FeatureList::IsEnabled(
safe_browsing::kAddReferringWebApkToProtegoPings);
if (safe_browsing::IsEnhancedProtectionEnabled(*profile->GetPrefs())) {
WebContents* web_contents = wc_getter.Run();
if (web_contents) {
referring_app_info =
std::make_optional<safe_browsing::internal::ReferringAppInfo>(
safe_browsing::GetReferringAppInfo(web_contents,
get_webapk_info));
/*get_webapk_info=*/true));
}
}
#endif
@@ -7565,15 +7677,12 @@ ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy(
}
#endif
// TODO(crbug.com/400455013): Add LNA support on Android
#if !BUILDFLAG(IS_ANDROID)
Profile* profile = Profile::FromBrowserContext(browser_context);
if (profile->GetPrefs()->GetBoolean(
prefs::kManagedLocalNetworkAccessRestrictionsEnabled)) {
return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride::
kBlockInsteadOfWarn;
}
#endif
return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride::
kDefault;
@@ -8165,21 +8274,6 @@ bool ChromeContentBrowserClient::DoesGaiaOriginRequireDedicatedProcess() {
#endif // !BUILDFLAG(IS_ANDROID)
}
bool ChromeContentBrowserClient::CanBackForwardCachedPageReceiveCookieChanges(
content::BrowserContext& browser_context,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
const net::CookieSettingOverrides overrides,
base::optional_ref<const net::CookiePartitionKey> cookie_partition_key) {
scoped_refptr<content_settings::CookieSettings> cookie_settings =
CookieSettingsFactory::GetForProfile(
Profile::FromBrowserContext(&browser_context));
CHECK(cookie_settings);
return cookie_settings->IsFullCookieAccessAllowed(
url, site_for_cookies, top_frame_origin, overrides, cookie_partition_key);
}
void ChromeContentBrowserClient::GetCloudIdentifiers(
const storage::FileSystemURL& url,
content::FileSystemAccessPermissionContext::HandleType handle_type,
@@ -8470,6 +8564,11 @@ void ChromeContentBrowserClient::QueryInstalledWebAppsByManifestId(
base::OnceCallback<void(std::optional<blink::mojom::RelatedApplication>)>
callback) {
Profile* profile = Profile::FromBrowserContext(browser_context);
if (!web_app::AreWebAppsEnabled(profile)) {
return std::move(callback).Run(std::nullopt);
}
web_app::WebAppProvider* const provider =
web_app::WebAppProvider::GetForLocalAppsUnchecked(profile);
@@ -8712,3 +8811,16 @@ ChromeContentBrowserClient::MaybeCreateKeepAliveRequestTracker(
return ChromeKeepAliveRequestTracker::MaybeCreateKeepAliveRequestTracker(
request, ukm_source_id, std::move(is_context_detached_callback));
}
std::optional<std::vector<std::u16string>>
ChromeContentBrowserClient::GetClipboardTypesIfPolicyApplied(
const ui::ClipboardSequenceNumberToken& seqno) {
const data_controls::LastReplacedClipboardData& last_replaced_data =
data_controls::GetLastReplacedClipboardData();
if (last_replaced_data.seqno == seqno) {
return last_replaced_data.GetAvailableTypes();
}
return std::nullopt;
}
@@ -228,8 +228,6 @@ bool IsErrorPageAutoReloadEnabled() {
void MaybeCreateAndAddVisitedLinkNavigationThrottle(
content::NavigationThrottleRegistry& registry) {
if (!base::FeatureList::IsEnabled(
blink::features::kPartitionVisitedLinkDatabase) &&
!base::FeatureList::IsEnabled(
blink::features::kPartitionVisitedLinkDatabaseWithSelfLinks)) {
return;
}
@@ -355,8 +353,7 @@ void CreateAndAddChromeThrottlesForNavigation(
#endif
SupervisedUserGoogleAuthNavigationThrottle::MaybeCreateAndAdd(registry);
supervised_user::MaybeCreateAndAddClassifyUrlNavigationThrottle(registry);
supervised_user::ClassifyUrlNavigationThrottle::MaybeCreateAndAdd(registry);
if (auto* throttle_manager =
subresource_filter::ContentSubresourceFilterThrottleManager::
@@ -173,6 +173,7 @@ public abstract class ChromeFeatureList {
"AndroidAppIntegrationWithFavicon";
public static final String ANDROID_BOOKMARK_BAR = "AndroidBookmarkBar";
public static final String ANDROID_BOTTOM_TOOLBAR = "AndroidBottomToolbar";
public static final String ANDROID_COMPOSEPLATE = "AndroidComposeplate";
public static final String ANDROID_DUMP_ON_SCROLL_WITHOUT_RESOURCE =
"AndroidDumpOnScrollWithoutResource";
public static final String ANDROID_ELEGANT_TEXT_HEIGHT = "AndroidElegantTextHeight";
@@ -187,8 +188,11 @@ public abstract class ChromeFeatureList {
"AndroidOmniboxFocusedNewTabPage";
public static final String ANDROID_OPEN_PDF_INLINE_BACKPORT = "AndroidOpenPdfInlineBackport";
public static final String ANDROID_PDF_ASSIST_CONTENT = "AndroidPdfAssistContent";
public static final String ANDROID_PINNED_TABS = "AndroidPinnedTabs";
public static final String ANDROID_PROGRESS_BAR_VISUAL_UPDATE =
"AndroidProgressBarVisualUpdate";
public static final String ANDROID_SHOW_RESTORE_TABS_PROMO_ON_FRE_BYPASSED_KILL_SWITCH =
"AndroidShowRestoreTabsPromoOnFREBypassedKillSwitch";
public static final String ANDROID_SURFACE_COLOR_UPDATE = "AndroidSurfaceColorUpdate";
public static final String ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE =
"AndroidTabDeclutterArchiveAllButActiveTab";
@@ -205,6 +209,8 @@ public abstract class ChromeFeatureList {
"AndroidTabDeclutterPerformanceImprovements";
public static final String ANDROID_TAB_DECLUTTER_RESCUE_KILLSWITCH =
"AndroidTabDeclutterRescueKillswitch";
public static final String ANDROID_TAB_GROUPS_COLOR_UPDATE_GM3 =
"AndroidTabGroupsColorUpdateGM3";
public static final String ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH =
"AndroidTabSkipSaveTabsTaskKillswitch";
public static final String ANDROID_THEME_MODULE = "AndroidThemeModule";
@@ -225,6 +231,8 @@ public abstract class ChromeFeatureList {
"AutofillEnableCardBenefitsForBmo";
public static final String AUTOFILL_ENABLE_CVC_STORAGE = "AutofillEnableCvcStorageAndFilling";
public static final String AUTOFILL_ENABLE_LOCAL_IBAN = "AutofillEnableLocalIban";
public static final String AUTOFILL_ENABLE_LOYALTY_CARDS_FILLING =
"AutofillEnableLoyaltyCardsFilling";
public static final String AUTOFILL_ENABLE_PAYMENT_SETTINGS_CARD_PROMO_AND_SCAN_CARD =
"AutofillEnablePaymentSettingsCardPromoAndScanCard";
public static final String AUTOFILL_ENABLE_PAYMENT_SETTINGS_SERVER_CARD_SAVE =
@@ -251,12 +259,15 @@ public abstract class ChromeFeatureList {
"AutofillVirtualViewStructureAndroid";
public static final String AVOID_RELAYOUT_DURING_FOCUS_ANIMATION =
"AvoidRelayoutDuringFocusAnimation";
public static final String BACKGROUND_THREAD_POOL = "BackgroundThreadPool";
public static final String BACKGROUND_THREAD_POOL_FIELD_TRIAL =
"BackgroundThreadPoolFieldTrial";
public static final String BACK_FORWARD_CACHE = "BackForwardCache";
public static final String BACK_FORWARD_TRANSITIONS = "BackForwardTransitions";
public static final String BATCH_TAB_RESTORE = "BatchTabRestore";
public static final String BCIV_BOTTOM_CONTROLS = "AndroidBcivBottomControls";
public static final String BIOMETRIC_AUTH_IDENTITY_CHECK = "BiometricAuthIdentityCheck";
public static final String BLOCK_INSTALLING_EXTENSIONS_ON_DESKTOP_ANDROID =
"BlockInstallingExtensionsOnDesktopAndroid";
public static final String BLOCK_INTENTS_WHILE_LOCKED = "BlockIntentsWhileLocked";
public static final String BOARDING_PASS_DETECTOR = "BoardingPassDetector";
public static final String BOOKMARK_PANE_ANDROID = "BookmarkPaneAndroid";
@@ -270,6 +281,7 @@ public abstract class ChromeFeatureList {
"CacheIsMultiInstanceApi31Enabled";
public static final String CAPTIVE_PORTAL_CERTIFICATE_LIST = "CaptivePortalCertificateList";
public static final String CCT_ADAPTIVE_BUTTON = "CCTAdaptiveButton";
public static final String CCT_ADAPTIVE_BUTTON_TEST_SWITCH = "CCTAdaptiveButtonTestSwitch";
public static final String CCT_AUTH_TAB = "CCTAuthTab";
public static final String CCT_AUTH_TAB_DISABLE_ALL_EXTERNAL_INTENTS =
"CCTAuthTabDisableAllExternalIntents";
@@ -284,6 +296,7 @@ public abstract class ChromeFeatureList {
"CCTEphemeralMediaViewerExperiment";
public static final String CCT_EPHEMERAL_MODE = "CCTEphemeralMode";
public static final String CCT_EXTEND_TRUSTED_CDN_PUBLISHER = "CCTExtendTrustedCdnPublisher";
public static final String CCT_FIX_WARMUP = "CCTFixWarmup";
public static final String CCT_FRE_IN_SAME_TASK = "CCTFreInSameTask";
public static final String CCT_GOOGLE_BOTTOM_BAR = "CCTGoogleBottomBar";
public static final String CCT_GOOGLE_BOTTOM_BAR_VARIANT_LAYOUTS =
@@ -302,6 +315,8 @@ public abstract class ChromeFeatureList {
public static final String CCT_PREDICTIVE_BACK_GESTURE = "CCTPredictiveBackGesture";
// NOTE: Do not query this feature directly, use WarmupManager#isCCTPrewarmTabFeatureEnabled.
public static final String CCT_PREWARM_TAB = "CCTPrewarmTab";
public static final String CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND =
"CCTRealtimeEngagementEventsInBackground";
public static final String CCT_REPORT_PARALLEL_REQUEST_STATUS =
"CCTReportParallelRequestStatus";
public static final String CCT_REPORT_PRERENDER_EVENTS = "CCTReportPrerenderEvents";
@@ -326,6 +341,8 @@ public abstract class ChromeFeatureList {
public static final String CONTEXTUAL_PAGE_ACTIONS = "ContextualPageActions";
public static final String CONTEXTUAL_PAGE_ACTION_READER_MODE =
"ContextualPageActionReaderMode";
public static final String CONTEXTUAL_PAGE_ACTION_TAB_GROUPING =
"ContextualPageActionTabGrouping";
public static final String CONTEXTUAL_SEARCH_DISABLE_ONLINE_DETECTION =
"ContextualSearchDisableOnlineDetection";
public static final String CONTEXTUAL_SEARCH_SUPPRESS_SHORT_VIEW =
@@ -346,23 +363,25 @@ public abstract class ChromeFeatureList {
public static final String DATA_SHARING_JOIN_ONLY = "DataSharingJoinOnly";
public static final String DATA_SHARING_NON_PRODUCTION_ENVIRONMENT =
"DataSharingNonProductionEnvironment";
public static final String SHARED_DATA_TYPES_KILL_SWITCH = "SharedDataTypesKillSwitch";
public static final String DATA_SHARING_ENABLE_UPDATE_CHROME_UI =
"DataSharingEnableUpdateChromeUI";
public static final String DEFAULT_BROWSER_PROMO_ANDROID2 = "DefaultBrowserPromoAndroid2";
public static final String DETAILED_LANGUAGE_SETTINGS = "DetailedLanguageSettings";
public static final String DEVICE_AUTHENTICATOR_ANDROIDX = "DeviceAuthenticatorAndroidx";
public static final String DISABLE_INSTANCE_LIMIT = "DisableInstanceLimit";
public static final String DISABLE_LIST_TAB_SWITCHER = "DisableListTabSwitcher";
public static final String DISCO_FEED_ENDPOINT = "DiscoFeedEndpoint";
public static final String DISPLAY_EDGE_TO_EDGE_FULLSCREEN = "DisplayEdgeToEdgeFullscreen";
public static final String DISPLAY_WILDCARD_CONTENT_SETTINGS =
"DisplayWildcardInContentSettings";
public static final String DISPLAY_EDGE_TO_EDGE_FULLSCREEN = "DisplayEdgeToEdgeFullscreen";
public static final String DRAW_CUTOUT_EDGE_TO_EDGE = "DrawCutoutEdgeToEdge";
public static final String DRAW_KEY_NATIVE_EDGE_TO_EDGE = "DrawKeyNativeEdgeToEdge";
public static final String DYNAMIC_SAFE_AREA_INSETS = "DynamicSafeAreaInsets";
public static final String EDGE_TO_EDGE_BOTTOM_CHIN = "EdgeToEdgeBottomChin";
public static final String EDGE_TO_EDGE_DEBUGGING = "EdgeToEdgeDebugging";
public static final String EDGE_TO_EDGE_EVERYWHERE = "EdgeToEdgeEverywhere";
public static final String EDGE_TO_EDGE_MONITOR_CONFIGURATIONS =
"EdgeToEdgeMonitorConfigurations";
public static final String EDGE_TO_EDGE_EVERYWHERE = "EdgeToEdgeEverywhere";
public static final String EDGE_TO_EDGE_SAFE_AREA_CONSTRAINT = "EdgeToEdgeSafeAreaConstraint";
public static final String EDGE_TO_EDGE_TABLET = "EdgeToEdgeTablet";
public static final String EDGE_TO_EDGE_WEB_OPT_IN = "EdgeToEdgeWebOptIn";
@@ -371,11 +390,12 @@ public abstract class ChromeFeatureList {
public static final String EDUCATIONAL_TIP_MODULE = "EducationalTipModule";
public static final String EMPTY_TAB_LIST_ANIMATION_KILL_SWITCH =
"EmptyTabListAnimationKillSwitch";
public static final String ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD =
"EnableSavePackageForOffTheRecord";
public static final String ENABLE_CLIPBOARD_DATA_CONTROLS_ANDROID =
"EnableClipboardDataControlsAndroid";
public static final String ENABLE_DISCOUNT_INFO_API = "EnableDiscountInfoApi";
public static final String ENABLE_EXCLUSIVE_ACCESS_MANAGER = "EnableExclusiveAccessManager";
public static final String ENABLE_SAVE_PACKAGE_FOR_OFF_THE_RECORD =
"EnableSavePackageForOffTheRecord";
public static final String ENABLE_X_AXIS_ACTIVITY_TRANSITION = "EnableXAxisActivityTransition";
public static final String FEED_CONTAINMENT = "FeedContainment";
public static final String FEED_FOLLOW_UI_UPDATE = "FeedFollowUiUpdate";
@@ -397,9 +417,9 @@ public abstract class ChromeFeatureList {
public static final String FULLSCREEN_INSETS_API_MIGRATION = "FullscreenInsetsApiMigration";
public static final String FULLSCREEN_INSETS_API_MIGRATION_ON_AUTOMOTIVE =
"FullscreenInsetsApiMigrationOnAutomotive";
public static final String GRID_TAB_SWITCHER_UPDATE = "GridTabSwitcherUpdate";
public static final String GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE =
"GridTabSwitcherSurfaceColorUpdate";
public static final String GRID_TAB_SWITCHER_UPDATE = "GridTabSwitcherUpdate";
public static final String GROUP_NEW_TAB_WITH_PARENT = "GroupNewTabWithParent";
public static final String GROUP_SUGGESTION_SERVICE = "GroupSuggestionService";
public static final String HASH_PREFIX_REAL_TIME_LOOKUPS =
@@ -421,11 +441,13 @@ public abstract class ChromeFeatureList {
public static final String LINKED_SERVICES_SETTING = "LinkedServicesSetting";
public static final String LOADING_PREDICTOR_LIMIT_PRECONNECT_SOCKET_COUNT =
"LoadingPredictorLimitPreconnectSocketCount";
public static final String LOCAL_NETWORK_ACCESS = "LocalNetworkAccessChecks";
public static final String LOCK_BACK_PRESS_HANDLER_AT_START = "LockBackPressHandlerAtStart";
public static final String LOGIN_DB_DEPRECATION_ANDROID = "LoginDbDeprecationAndroid";
public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI =
"LookalikeUrlNavigationSuggestionsUI";
public static final String MAGIC_STACK_ANDROID = "MagicStackAndroid";
public static final String MALICIOUS_APK_DOWNLOAD_CHECK = "MaliciousApkDownloadCheck";
public static final String MAYLAUNCHURL_USES_SEPARATE_STORAGE_PARTITION =
"MayLaunchUrlUsesSeparateStoragePartition";
public static final String MINI_ORIGIN_BAR = "MiniOriginBar";
@@ -442,8 +464,10 @@ public abstract class ChromeFeatureList {
public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 =
"NewTabPageAndroidTriggerForPrerender2";
public static final String NEW_TAB_PAGE_CUSTOMIZATION = "NewTabPageCustomization";
public static final String NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT = "NewTabPageCustomizationForMvt";
public static final String NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON =
"NewTabPageCustomizationToolbarButton";
public static final String NEW_TAB_PAGE_CUSTOMIZATION_V2 = "NewTabPageCustomizationV2";
public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe";
public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET =
"NotificationPermissionBottomSheet";
@@ -485,13 +509,13 @@ public abstract class ChromeFeatureList {
public static final String PRIVACY_SANDBOX_ADS_NOTICE_CCT = "PrivacySandboxAdsNoticeCCT";
public static final String PRIVACY_SANDBOX_AD_TOPICS_CONTENT_PARITY =
"PrivacySandboxAdTopicsContentParity";
public static final String PRIVACY_SANDBOX_CCT_ADS_NOTICE_SURVEY =
"PrivacySandboxCctAdsNoticeSurvey";
public static final String PRIVACY_SANDBOX_RELATED_WEBSITE_SETS_UI =
"PrivacySandboxRelatedWebsiteSetsUi";
public static final String PRIVACY_SANDBOX_SENTIMENT_SURVEY = "PrivacySandboxSentimentSurvey";
public static final String PRIVACY_SANDBOX_SETTINGS_4 = "PrivacySandboxSettings4";
public static final String PROCESS_RANK_POLICY_ANDROID = "ProcessRankPolicyAndroid";
public static final String PROPAGATE_DEVICE_CONTENT_FILTERS_TO_SUPERVISED_USER =
"PropagateDeviceContentFiltersToSupervisedUser";
public static final String PUSH_MESSAGING_DISALLOW_SENDER_IDS =
"PushMessagingDisallowSenderIDs";
public static final String PWA_RESTORE_UI = "PwaRestoreUi";
@@ -540,6 +564,10 @@ public abstract class ChromeFeatureList {
public static final String SEARCH_IN_CCT = "SearchInCCT";
public static final String SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING =
"SearchInCCTAlternateTapHandling";
public static final String SEARCH_IN_CCT_IF_ENABLED_BY_EMBEDDER =
"SearchInCCTIfEnabledByEmbedder";
public static final String SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING_IF_ENABLED_BY_EMBEDDER =
"SearchInCCTAlternateTapHandlingIfEnabledByEmbedder";
public static final String SEARCH_RESUMPTION_MODULE_ANDROID = "SearchResumptionModuleAndroid";
public static final String SEED_ACCOUNTS_REVAMP = "SeedAccountsRevamp";
public static final String SEGMENTATION_PLATFORM_ANDROID_HOME_MODULE_RANKER =
@@ -555,6 +583,7 @@ public abstract class ChromeFeatureList {
public static final String SHARE_CUSTOM_ACTIONS_IN_CCT = "ShareCustomActionsInCCT";
public static final String SHOW_HOME_BUTTON_POLICY_ANDROID = "ShowHomeButtonPolicyAndroid";
public static final String SHOW_NEW_TAB_ANIMATIONS = "ShowNewTabAnimations";
public static final String SHOW_TAB_LIST_ANIMATIONS = "ShowTabListAnimations";
public static final String SHOW_WARNINGS_FOR_SUSPICIOUS_NOTIFICATIONS =
"ShowWarningsForSuspiciousNotifications";
public static final String SKIP_ISOLATED_SPLIT_PRELOAD = "SkipIsolatedSplitPreload";
@@ -572,15 +601,15 @@ public abstract class ChromeFeatureList {
"SwapNewTabAndNewTabInGroupAndroid";
public static final String SYNC_ENABLE_PASSWORDS_SYNC_ERROR_MESSAGE_ALTERNATIVE =
"SyncEnablePasswordsSyncErrorMessageAlternative";
public static final String TABLET_TAB_STRIP_ANIMATION = "TabletTabStripAnimation";
public static final String TAB_ARCHIVAL_DRAG_DROP_ANDROID = "TabArchivalDragDropAndroid";
public static final String TAB_CLOSURE_METHOD_REFACTOR = "TabClosureMethodRefactor";
public static final String TAB_COLLECTION_ANDROID = "TabCollectionAndroid";
public static final String TAB_FREEZE_ON_UNDOABLE_CLOSURE_KILL_SWITCH =
"TabFreezeOnUndoableClosureKillSwitch";
public static final String TAB_GROUP_ENTRY_POINTS_ANDROID = "TabGroupEntryPointsAndroid";
public static final String TAB_GROUP_PARITY_BOTTOM_SHEET_ANDROID =
"TabGroupParityBottomSheetAndroid";
public static final String TAB_GROUP_SYNC_ANDROID = "TabGroupSyncAndroid";
public static final String TAB_GROUP_SYNC_AUTO_OPEN_KILL_SWITCH =
"TabGroupSyncAutoOpenKillSwitch";
public static final String TABLET_TAB_STRIP_ANIMATION = "TabletTabStripAnimation";
public static final String TAB_RESUMPTION_MODULE_ANDROID = "TabResumptionModuleAndroid";
public static final String TAB_STATE_FLAT_BUFFER = "TabStateFlatBuffer";
public static final String TAB_STRIP_CONTEXT_MENU = "TabStripContextMenuAndroid";
public static final String TAB_STRIP_DENSITY_CHANGE_ANDROID = "TabStripDensityChangeAndroid";
@@ -591,6 +620,11 @@ public abstract class ChromeFeatureList {
public static final String TAB_STRIP_TRANSITION_IN_DESKTOP_WINDOW =
"TabStripTransitionInDesktopWindow";
public static final String TAB_SWITCHER_COLOR_BLEND_ANIMATE = "TabSwitcherColorBlendAnimate";
public static final String TAB_SWITCHER_DRAG_DROP_ANDROID = "TabSwitcherDragDropAndroid";
public static final String TAB_SWITCHER_GROUP_SUGGESTIONS_ANDROID =
"TabSwitcherGroupSuggestionsAndroid";
public static final String TAB_SWITCHER_GROUP_SUGGESTIONS_TEST_MODE_ANDROID =
"TabSwitcherGroupSuggestionsTestModeAndroid";
public static final String TAB_SWITCHER_FOREIGN_FAVICON_SUPPORT =
"TabSwitcherForeignFaviconSupport";
public static final String TAB_WINDOW_MANAGER_REPORT_INDICES_MISMATCH =
@@ -598,10 +632,11 @@ public abstract class ChromeFeatureList {
public static final String TASK_MANAGER_CLANK = "TaskManagerClank";
public static final String TEST_DEFAULT_DISABLED = "TestDefaultDisabled";
public static final String TEST_DEFAULT_ENABLED = "TestDefaultEnabled";
public static final String TILE_CONTEXT_MENU_REFACTOR = "TileContextMenuRefactor";
public static final String TINKER_TANK_BOTTOM_SHEET = "TinkerTankBottomSheet";
public static final String TOOLBAR_PHONE_ANIMATION_REFACTOR = "ToolbarPhoneAnimationRefactor";
public static final String TOOLBAR_SCROLL_ABLATION = "AndroidToolbarScrollAblation";
public static final String TOP_CONTROLS_REFACTOR = "TopControlsRefactor";
public static final String TOUCH_TO_SEARCH_CALLOUT = "TouchToSearchCallout";
public static final String TRACE_BINDER_IPC = "TraceBinderIpc";
public static final String TRACKING_PROTECTION_3PCD = "TrackingProtection3pcd";
public static final String TRACKING_PROTECTION_USER_BYPASS_PWA =
@@ -613,11 +648,13 @@ public abstract class ChromeFeatureList {
public static final String UNO_PHASE_2_FOLLOW_UP = "UnoPhase2FollowUp";
public static final String UPDATE_COMPOSTIROR_FOR_SURFACE_CONTROL =
"UpdateCompositorForSurfaceControl";
public static final String USE_ACTIVITY_MANAGER_FOR_TAB_ACTIVATION =
"UseActivityManagerForTabActivation";
public static final String USE_ALTERNATE_HISTORY_SYNC_ILLUSTRATION =
"UseAlternateHistorySyncIllustration";
public static final String USE_CHIME_ANDROID_SDK = "UseChimeAndroidSdk";
public static final String USE_ACTIVITY_MANAGER_FOR_TAB_ACTIVATION =
"UseActivityManagerForTabActivation";
public static final String USE_INITIAL_NETWORK_STATE_AT_STARTUP =
"UseInitialNetworkStateAtStartup";
public static final String USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID =
"UseLibunwindstackNativeUnwinderAndroid";
public static final String VISITED_URL_RANKING_SERVICE = "VisitedURLRankingService";
@@ -635,7 +672,10 @@ public abstract class ChromeFeatureList {
public static final CachedFlag sAccountForSuppressedKeyboardInsets =
newCachedFlag(ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS, /* defaultValue= */ true);
public static final CachedFlag sAllowTabClosingUponMinimization =
newCachedFlag(ALLOW_TAB_CLOSING_UPON_MINIMIZATION, false);
newCachedFlag(
ALLOW_TAB_CLOSING_UPON_MINIMIZATION,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sAndroidAppIntegration =
newCachedFlag(ANDROID_APP_INTEGRATION, true);
public static final CachedFlag sAndroidAppIntegrationModule =
@@ -648,12 +688,17 @@ public abstract class ChromeFeatureList {
newCachedFlag(ANDROID_APP_INTEGRATION_WITH_FAVICON, true);
public static final CachedFlag sAndroidBottomToolbar =
newCachedFlag(ANDROID_BOTTOM_TOOLBAR, false, true);
public static final CachedFlag sAndroidComposeplate =
newCachedFlag(ANDROID_COMPOSEPLATE, false, true);
public static final CachedFlag sAndroidElegantTextHeight =
newCachedFlag(ANDROID_ELEGANT_TEXT_HEIGHT, true);
public static final CachedFlag sAndroidMinimalUiLargeScreen =
newCachedFlag(ANDROID_MINIMAL_UI_LARGE_SCREEN, false, true);
public static final CachedFlag sAndroidProgressBarVisualUpdate =
newCachedFlag(ANDROID_PROGRESS_BAR_VISUAL_UPDATE, false);
newCachedFlag(
ANDROID_PROGRESS_BAR_VISUAL_UPDATE,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sAndroidSurfaceColorUpdate =
newCachedFlag(
ANDROID_SURFACE_COLOR_UPDATE,
@@ -661,6 +706,9 @@ public abstract class ChromeFeatureList {
/* defaultValueInTests= */ true);
public static final CachedFlag sAndroidTabDeclutterDedupeTabIdsKillSwitch =
newCachedFlag(ANDROID_TAB_DECLUTTER_DEDUPE_TAB_IDS_KILL_SWITCH, true);
public static final CachedFlag sAndroidTabGroupsColorUpdateGm3 =
newCachedFlag(
ANDROID_TAB_GROUPS_COLOR_UPDATE_GM3, false, /* defaultValueInTests= */ true);
public static final CachedFlag sAndroidTabSkipSaveTabsKillswitch =
newCachedFlag(ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH, true, true);
public static final CachedFlag sAndroidThemeModule =
@@ -674,6 +722,8 @@ public abstract class ChromeFeatureList {
newCachedFlag(ASYNC_NOTIFICATION_MANAGER, false, true);
public static final CachedFlag sAsyncNotificationManagerForDownload =
newCachedFlag(ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD, false, true);
public static final CachedFlag sBackgroundThreadPoolFieldTrial =
newCachedFlag(BACKGROUND_THREAD_POOL_FIELD_TRIAL, false);
public static final CachedFlag sBatchTabRestore =
newCachedFlag(
BATCH_TAB_RESTORE, /* defaultValue= */ false, /* defaultValueInTests= */ true);
@@ -700,6 +750,9 @@ public abstract class ChromeFeatureList {
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sCctEphemeralMode = newCachedFlag(CCT_EPHEMERAL_MODE, true);
public static final CachedFlag sCctFixWarmup =
newCachedFlag(
CCT_FIX_WARMUP, /* defaultValue= */ false, /* defaultValueInTests= */ true);
public static final CachedFlag sCctFreInSameTask = newCachedFlag(CCT_FRE_IN_SAME_TASK, true);
public static final CachedFlag sCctGoogleBottomBar =
newCachedFlag(
@@ -720,15 +773,20 @@ public abstract class ChromeFeatureList {
/* defaultValueInTests= */ true);
public static final CachedFlag sCctNestedSecurityIcon =
newCachedFlag(CCT_NESTED_SECURITY_ICON, true);
public static final CachedFlag sCctOpenInBrowserButtonIfAllowedByEmbedder =
newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ALLOWED_BY_EMBEDDER, false);
public static final CachedFlag sCctOpenInBrowserButtonIfEnabledByEmbedder =
newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER, true);
public static final CachedFlag sCctPredictiveBackGesture =
newCachedFlag(
CCT_PREDICTIVE_BACK_GESTURE,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sCctOpenInBrowserButtonIfAllowedByEmbedder =
newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ALLOWED_BY_EMBEDDER, false);
public static final CachedFlag sCctOpenInBrowserButtonIfEnabledByEmbedder =
newCachedFlag(CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER, true);
public static final CachedFlag sCctRealtimeEngagementEventsInBackground =
newCachedFlag(
CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sCctResizableForThirdParties =
newCachedFlag(CCT_RESIZABLE_FOR_THIRD_PARTIES, true);
public static final CachedFlag sCctRevampedBranding =
@@ -746,7 +804,14 @@ public abstract class ChromeFeatureList {
/* defaultValueInTests= */ true);
public static final CachedFlag sCommandLineOnNonRooted =
newCachedFlag(COMMAND_LINE_ON_NON_ROOTED, false);
public static final CachedFlag sCpaSpecUpdate = newCachedFlag(CPA_SPEC_UPDATE, false);
public static final CachedFlag sCpaSpecUpdate =
newCachedFlag(
CPA_SPEC_UPDATE, /* defaultValue= */ false, /* defaultValueInTests= */ true);
public static final CachedFlag sCpaTabGroupingButton =
newCachedFlag(
CONTEXTUAL_PAGE_ACTION_TAB_GROUPING,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sCrossDeviceTabPaneAndroid =
newCachedFlag(CROSS_DEVICE_TAB_PANE_ANDROID, false);
public static final CachedFlag sDisableInstanceLimit =
@@ -754,11 +819,8 @@ public abstract class ChromeFeatureList {
DISABLE_INSTANCE_LIMIT,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sDisableListTabSwitcher =
newCachedFlag(
DISABLE_LIST_TAB_SWITCHER,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sDisplayEdgeToEdgeFullscreen =
newCachedFlag(DISPLAY_EDGE_TO_EDGE_FULLSCREEN, false, true);
public static final CachedFlag sDrawKeyNativeEdgeToEdge =
newCachedFlag(DRAW_KEY_NATIVE_EDGE_TO_EDGE, true);
public static final CachedFlag sEdgeToEdgeBottomChin =
@@ -768,13 +830,13 @@ public abstract class ChromeFeatureList {
EDGE_TO_EDGE_DEBUGGING,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sEdgeToEdgeMonitorConfigurations =
newCachedFlag(EDGE_TO_EDGE_MONITOR_CONFIGURATIONS, /* defaultValue= */ true);
public static final CachedFlag sEdgeToEdgeEverywhere =
newCachedFlag(
EDGE_TO_EDGE_EVERYWHERE,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sEdgeToEdgeMonitorConfigurations =
newCachedFlag(EDGE_TO_EDGE_MONITOR_CONFIGURATIONS, /* defaultValue= */ true);
public static final CachedFlag sEdgeToEdgeTablet = newCachedFlag(EDGE_TO_EDGE_TABLET, false);
public static final CachedFlag sEdgeToEdgeWebOptIn =
newCachedFlag(EDGE_TO_EDGE_WEB_OPT_IN, true);
@@ -784,11 +846,11 @@ public abstract class ChromeFeatureList {
newCachedFlag(EDUCATIONAL_TIP_MODULE, false, true);
public static final CachedFlag sEnableDiscountInfoApi =
newCachedFlag(ENABLE_DISCOUNT_INFO_API, false, true);
public static final CachedFlag sEnableExclusiveAccessManager =
newCachedFlag(ENABLE_EXCLUSIVE_ACCESS_MANAGER, false);
public static final CachedFlag sEnableXAxisActivityTransition =
newCachedFlag(ENABLE_X_AXIS_ACTIVITY_TRANSITION, false);
public static final CachedFlag sFloatingSnackbar = newCachedFlag(FLOATING_SNACKBAR, true);
public static final CachedFlag sForceListTabSwitcher =
newCachedFlag(FORCE_LIST_TAB_SWITCHER, false);
public static final CachedFlag sForceTranslucentNotificationTrampoline =
newCachedFlag(FORCE_TRANSLUCENT_NOTIFICATION_TRAMPOLINE, false);
public static final CachedFlag sFullscreenInsetsApiMigration =
@@ -817,9 +879,17 @@ public abstract class ChromeFeatureList {
public static final CachedFlag sLockBackPressHandlerAtStart =
newCachedFlag(LOCK_BACK_PRESS_HANDLER_AT_START, true);
public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true);
public static final CachedFlag sMaliciousApkDownloadCheck =
newCachedFlag(
MALICIOUS_APK_DOWNLOAD_CHECK,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sMiniOriginBar = newCachedFlag(MINI_ORIGIN_BAR, false, true);
public static final CachedFlag sMostVisitedTilesCustomization =
newCachedFlag(MOST_VISITED_TILES_CUSTOMIZATION, false);
newCachedFlag(
MOST_VISITED_TILES_CUSTOMIZATION,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sMostVisitedTilesReselect =
newCachedFlag(MOST_VISITED_TILES_RESELECT, false);
public static final CachedFlag sMultiInstanceApplicationStatusCleanup =
@@ -830,15 +900,22 @@ public abstract class ChromeFeatureList {
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sNavBarColorAnimation =
newCachedFlag(NAV_BAR_COLOR_ANIMATION, false);
newCachedFlag(
NAV_BAR_COLOR_ANIMATION,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sNavBarColorMatchesTabBackground =
newCachedFlag(NAV_BAR_COLOR_MATCHES_TAB_BACKGROUND, true);
public static final CachedFlag sNewTabPageAndroidTriggerForPrerender2 =
newCachedFlag(NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2, true);
public static final CachedFlag sNewTabPageCustomization =
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, false, true);
public static final CachedFlag sNewTabPageCustomizationForMvt =
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT, false);
public static final CachedFlag sNewTabPageCustomizationToolbarButton =
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_TOOLBAR_BUTTON, false);
public static final CachedFlag sNewTabPageCustomizationV2 =
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_V2, false);
public static final CachedFlag sNotificationTrampoline =
newCachedFlag(NOTIFICATION_TRAMPOLINE, false);
public static final CachedFlag sOptimizationGuidePushNotifications =
@@ -847,10 +924,7 @@ public abstract class ChromeFeatureList {
public static final CachedFlag sPostGetMyMemoryStateToBackground =
newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true);
public static final CachedFlag sPowerSavingModeBroadcastReceiverInBackground =
newCachedFlag(
POWER_SAVING_MODE_BROADCAST_RECEIVER_IN_BACKGROUND,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
newCachedFlag(POWER_SAVING_MODE_BROADCAST_RECEIVER_IN_BACKGROUND, true);
public static final CachedFlag sPrefetchBrowserInitiatedTriggers =
newCachedFlag(PREFETCH_BROWSER_INITIATED_TRIGGERS, true);
public static final CachedFlag sPriceChangeModule = newCachedFlag(PRICE_CHANGE_MODULE, true);
@@ -870,6 +944,10 @@ public abstract class ChromeFeatureList {
SEARCH_IN_CCT, /* defaultValue= */ false, /* defaultValueInTests= */ true);
public static final CachedFlag sSearchInCCTAlternateTapHandling =
newCachedFlag(SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING, false);
public static final CachedFlag sSearchInCCTIfEnabledByEmbedder =
newCachedFlag(SEARCH_IN_CCT_IF_ENABLED_BY_EMBEDDER, true);
public static final CachedFlag sSearchInCCTAlternateTapHandlingIfEnabledByEmbedder =
newCachedFlag(SEARCH_IN_CCT_ALTERNATE_TAP_HANDLING_IF_ENABLED_BY_EMBEDDER, true);
public static final CachedFlag sSettingsSingleActivity =
newCachedFlag(SETTINGS_SINGLE_ACTIVITY, false);
public static final CachedFlag sShowHomeButtonPolicyAndroid =
@@ -885,8 +963,6 @@ public abstract class ChromeFeatureList {
newCachedFlag(START_SURFACE_RETURN_TIME, true);
public static final CachedFlag sTabClosureMethodRefactor =
newCachedFlag(TAB_CLOSURE_METHOD_REFACTOR, false);
public static final CachedFlag sTabletTabStripAnimation =
newCachedFlag(TABLET_TAB_STRIP_ANIMATION, false);
public static final CachedFlag sTabStateFlatBuffer =
newCachedFlag(
TAB_STATE_FLAT_BUFFER,
@@ -906,6 +982,11 @@ public abstract class ChromeFeatureList {
/* defaultValueInTests= */ true);
public static final CachedFlag sTabWindowManagerReportIndicesMismatch =
newCachedFlag(TAB_WINDOW_MANAGER_REPORT_INDICES_MISMATCH, true);
public static final CachedFlag sTabletTabStripAnimation =
newCachedFlag(
TABLET_TAB_STRIP_ANIMATION,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sTestDefaultDisabled =
newCachedFlag(TEST_DEFAULT_DISABLED, false);
public static final CachedFlag sTestDefaultEnabled = newCachedFlag(TEST_DEFAULT_ENABLED, true);
@@ -914,11 +995,21 @@ public abstract class ChromeFeatureList {
TOP_CONTROLS_REFACTOR,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sTouchToSearchCallout =
newCachedFlag(
TOUCH_TO_SEARCH_CALLOUT,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sTraceBinderIpc = newCachedFlag(TRACE_BINDER_IPC, false);
public static final CachedFlag sUseChimeAndroidSdk =
newCachedFlag(USE_CHIME_ANDROID_SDK, false);
public static final CachedFlag sUseActivityManagerForTabActivation =
newCachedFlag(USE_ACTIVITY_MANAGER_FOR_TAB_ACTIVATION, true);
public static final CachedFlag sUseChimeAndroidSdk =
newCachedFlag(USE_CHIME_ANDROID_SDK, false);
public static final CachedFlag sUseInitialNetworkStateAtStartup =
newCachedFlag(
USE_INITIAL_NETWORK_STATE_AT_STARTUP,
/* defaultValue= */ false,
/* defaultValueInTests= */ true);
public static final CachedFlag sUseLibunwindstackNativeUnwinderAndroid =
newCachedFlag(USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID, true);
public static final CachedFlag sWebApkMinShellApkVersion =
@@ -934,17 +1025,20 @@ public abstract class ChromeFeatureList {
sAndroidAppIntegrationV2,
sAndroidAppIntegrationWithFavicon,
sAndroidBottomToolbar,
sAndroidComposeplate,
sAndroidElegantTextHeight,
sAndroidMinimalUiLargeScreen,
sAndroidProgressBarVisualUpdate,
sAndroidSurfaceColorUpdate,
sAndroidTabDeclutterDedupeTabIdsKillSwitch,
sAndroidTabGroupsColorUpdateGm3,
sAndroidTabSkipSaveTabsKillswitch,
sAndroidThemeModule,
sAndroidWebAppLaunchHandler,
sAndroidWindowPopupLargeScreen,
sAppSpecificHistory,
sAsyncNotificationManager,
sBackgroundThreadPoolFieldTrial,
sBatchTabRestore,
sBlockIntentsWhileLocked,
sBookmarkPaneAndroid,
@@ -958,6 +1052,7 @@ public abstract class ChromeFeatureList {
sCctBlockTouchesDuringEnterAnimation,
sCctEphemeralMediaViewerExperiment,
sCctEphemeralMode,
sCctFixWarmup,
sCctFreInSameTask,
sCctGoogleBottomBar,
sCctGoogleBottomBarVariantLayouts,
@@ -966,9 +1061,10 @@ public abstract class ChromeFeatureList {
sCctMinimized,
sCctNavigationalPrefetch,
sCctNestedSecurityIcon,
sCctPredictiveBackGesture,
sCctOpenInBrowserButtonIfAllowedByEmbedder,
sCctOpenInBrowserButtonIfEnabledByEmbedder,
sCctPredictiveBackGesture,
sCctRealtimeEngagementEventsInBackground,
sCctResizableForThirdParties,
sCctRevampedBranding,
sCctTabModalDialog,
@@ -978,9 +1074,10 @@ public abstract class ChromeFeatureList {
sCollectAndroidFrameTimelineMetrics,
sCommandLineOnNonRooted,
sCpaSpecUpdate,
sCpaTabGroupingButton,
sCrossDeviceTabPaneAndroid,
sDisableInstanceLimit,
sDisableListTabSwitcher,
sDisplayEdgeToEdgeFullscreen,
sDrawKeyNativeEdgeToEdge,
sEdgeToEdgeBottomChin,
sEdgeToEdgeDebugging,
@@ -991,9 +1088,9 @@ public abstract class ChromeFeatureList {
sEducationalTipDefaultBrowserPromoCard,
sEducationalTipModule,
sEnableDiscountInfoApi,
sEnableExclusiveAccessManager,
sEnableXAxisActivityTransition,
sFloatingSnackbar,
sForceListTabSwitcher,
sForceTranslucentNotificationTrampoline,
sFullscreenInsetsApiMigration,
sFullscreenInsetsApiMigrationOnAutomotive,
@@ -1006,6 +1103,7 @@ public abstract class ChromeFeatureList {
sLegacyTabStateDeprecation,
sLockBackPressHandlerAtStart,
sMagicStackAndroid,
sMaliciousApkDownloadCheck,
sMiniOriginBar,
sMostVisitedTilesCustomization,
sMostVisitedTilesReselect,
@@ -1015,7 +1113,9 @@ public abstract class ChromeFeatureList {
sNavBarColorMatchesTabBackground,
sNewTabPageAndroidTriggerForPrerender2,
sNewTabPageCustomization,
sNewTabPageCustomizationForMvt,
sNewTabPageCustomizationToolbarButton,
sNewTabPageCustomizationV2,
sNotificationTrampoline,
sOptimizationGuidePushNotifications,
sPaintPreviewDemo,
@@ -1029,22 +1129,26 @@ public abstract class ChromeFeatureList {
sSafetyHubWeakAndReusedPasswords,
sSearchInCCT,
sSearchInCCTAlternateTapHandling,
sSearchInCCTIfEnabledByEmbedder,
sSearchInCCTAlternateTapHandlingIfEnabledByEmbedder,
sSettingsSingleActivity,
sShowHomeButtonPolicyAndroid,
sSkipIsolatedSplitPreload,
sSmallerTabStripTitleLimit,
sStartSurfaceReturnTime,
sTabClosureMethodRefactor,
sTabletTabStripAnimation,
sTabStateFlatBuffer,
sTabStripDensityChangeAndroid,
sTabStripIncognitoMigration,
sTabStripLayoutOptimization,
sTabWindowManagerReportIndicesMismatch,
sTabletTabStripAnimation,
sTopControlsRefactor,
sTouchToSearchCallout,
sTraceBinderIpc,
sUseChimeAndroidSdk,
sUseActivityManagerForTabActivation,
sUseChimeAndroidSdk,
sUseInitialNetworkStateAtStartup,
sUseLibunwindstackNativeUnwinderAndroid,
sWebApkMinShellApkVersion);
@@ -1063,6 +1167,8 @@ public abstract class ChromeFeatureList {
// MutableFlagWithSafeDefault instances.
/* Alphabetical: */
public static final MutableFlagWithSafeDefault sAdaptiveButtonInTopToolbarCustomizationV2 =
newMutableFlagWithSafeDefault(ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2, false);
public static final MutableFlagWithSafeDefault sAndroidAppearanceSettings =
newMutableFlagWithSafeDefault(ANDROID_APPEARANCE_SETTINGS, false);
public static final MutableFlagWithSafeDefault sAndroidBookmarkBar =
@@ -1070,7 +1176,13 @@ public abstract class ChromeFeatureList {
public static final MutableFlagWithSafeDefault sAndroidDumpOnScrollWithoutResource =
newMutableFlagWithSafeDefault(ANDROID_DUMP_ON_SCROLL_WITHOUT_RESOURCE, false);
public static final MutableFlagWithSafeDefault sAndroidNativePagesInNewTab =
newMutableFlagWithSafeDefault(ANDROID_NATIVE_PAGES_IN_NEW_TAB, false);
newMutableFlagWithSafeDefault(ANDROID_NATIVE_PAGES_IN_NEW_TAB, true);
public static final MutableFlagWithSafeDefault sAndroidPinnedTabs =
newMutableFlagWithSafeDefault(ANDROID_PINNED_TABS, false);
public static final MutableFlagWithSafeDefault
sAndroidShowRestoreTabsPromoOnFreBypassedKillSwitch =
newMutableFlagWithSafeDefault(
ANDROID_SHOW_RESTORE_TABS_PROMO_ON_FRE_BYPASSED_KILL_SWITCH, true);
public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveAllButActiveTab =
newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE, false);
public static final MutableFlagWithSafeDefault sAndroidTabDeclutterArchiveDuplicateTabs =
@@ -1129,22 +1241,35 @@ public abstract class ChromeFeatureList {
newMutableFlagWithSafeDefault(SAFETY_HUB_FOLLOWUP, true);
public static final MutableFlagWithSafeDefault sShowNewTabAnimations =
newMutableFlagWithSafeDefault(SHOW_NEW_TAB_ANIMATIONS, false);
public static final MutableFlagWithSafeDefault sShowTabListAnimations =
newMutableFlagWithSafeDefault(SHOW_TAB_LIST_ANIMATIONS, false);
public static final MutableFlagWithSafeDefault sSuppressToolbarCapturesAtGestureEnd =
newMutableFlagWithSafeDefault(SUPPRESS_TOOLBAR_CAPTURES_AT_GESTURE_END, false);
public static final MutableFlagWithSafeDefault sSwapNewTabAndNewTabInGroupAndroid =
newMutableFlagWithSafeDefault(SWAP_NEW_TAB_AND_NEW_TAB_IN_GROUP_ANDROID, false);
public static final MutableFlagWithSafeDefault sTabArchivalDragDropAndroid =
newMutableFlagWithSafeDefault(TAB_ARCHIVAL_DRAG_DROP_ANDROID, true);
public static final MutableFlagWithSafeDefault sTabCollectionAndroid =
newMutableFlagWithSafeDefault(TAB_COLLECTION_ANDROID, false);
// Default value will only ever be reached in tests.
public static final MutableFlagWithSafeDefault sTabFreezeOnUndoableClosureKillSwitch =
newMutableFlagWithSafeDefault(TAB_FREEZE_ON_UNDOABLE_CLOSURE_KILL_SWITCH, true);
public static final MutableFlagWithSafeDefault sTabGroupEntryPointsAndroid =
newMutableFlagWithSafeDefault(TAB_GROUP_ENTRY_POINTS_ANDROID, false);
public static final MutableFlagWithSafeDefault sTabGroupParityBottomSheetAndroid =
newMutableFlagWithSafeDefault(TAB_GROUP_PARITY_BOTTOM_SHEET_ANDROID, false);
public static final MutableFlagWithSafeDefault sTabSwitcherColorBlendAnimate =
newMutableFlagWithSafeDefault(TAB_SWITCHER_COLOR_BLEND_ANIMATE, true);
public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsAndroid =
newMutableFlagWithSafeDefault(TAB_SWITCHER_GROUP_SUGGESTIONS_ANDROID, false);
public static final MutableFlagWithSafeDefault sTabSwitcherGroupSuggestionsTestModeAndroid =
newMutableFlagWithSafeDefault(TAB_SWITCHER_GROUP_SUGGESTIONS_TEST_MODE_ANDROID, false);
public static final MutableFlagWithSafeDefault sTabSwitcherForeignFaviconSupport =
newMutableFlagWithSafeDefault(TAB_SWITCHER_FOREIGN_FAVICON_SUPPORT, true);
public static final MutableFlagWithSafeDefault sToolbarPhoneAnimationRefactor =
newMutableFlagWithSafeDefault(TOOLBAR_PHONE_ANIMATION_REFACTOR, false);
public static final MutableFlagWithSafeDefault sToolbarScrollAblation =
newMutableFlagWithSafeDefault(TOOLBAR_SCROLL_ABLATION, false);
public static final MutableFlagWithSafeDefault sAdaptiveButtonInTopToolbarCustomizationV2 =
newMutableFlagWithSafeDefault(ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2, false);
// CachedFeatureParam instances.
/* Alphabetical order by feature name, arbitrary order by param name: */
@@ -1155,6 +1280,10 @@ public abstract class ChromeFeatureList {
newBooleanCachedFeatureParam(CCT_ADAPTIVE_BUTTON, "open_in_browser", false);
public static final BooleanCachedFeatureParam sCctAdaptiveButtonEnableVoice =
newBooleanCachedFeatureParam(CCT_ADAPTIVE_BUTTON, "voice", false);
public static final BooleanCachedFeatureParam sCctAdaptiveButtonContextualOnly =
newBooleanCachedFeatureParam(CCT_ADAPTIVE_BUTTON, "contextual_only", false);
public static final IntCachedFeatureParam sCctAdaptiveButtonDefaultVariant =
newIntCachedFeatureParam(CCT_ADAPTIVE_BUTTON, "default_variant", 0);
public static final IntCachedFeatureParam sAndroidAppIntegrationV2ContentTtlHours =
newIntCachedFeatureParam(ANDROID_APP_INTEGRATION_V2, "content_ttl_hours", 168);
@@ -1203,9 +1332,18 @@ public abstract class ChromeFeatureList {
"multi_data_source_skip_device_check",
false);
public static final BooleanCachedFeatureParam sAndroidComposeplateSkipLocaleCheck =
newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "skip_locale_check", false);
public static final BooleanCachedFeatureParam sAndroidComposeplateHideIncognitoButton =
newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "hide_incognito_button", false);
public static final BooleanCachedFeatureParam sAndroidBottomToolbarDefaultToTop =
newBooleanCachedFeatureParam(ANDROID_BOTTOM_TOOLBAR, "default_to_top", true);
public static final IntCachedFeatureParam sBackgroundThreadPoolFieldTrialConfig =
newIntCachedFeatureParam(BACKGROUND_THREAD_POOL_FIELD_TRIAL, "config", 0);
public static final IntCachedFeatureParam sBatchTabRestoreBatchSize =
newIntCachedFeatureParam(BATCH_TAB_RESTORE, "batch_tab_restore_batch_size", 5);
@@ -1342,6 +1480,12 @@ public abstract class ChromeFeatureList {
"max_legacy_tab_state_files_deleted_per_session",
100);
public static final IntCachedFeatureParam sDisableInstanceLimitMemoryThresholdMb =
newIntCachedFeatureParam(
DISABLE_INSTANCE_LIMIT, "max_instance_limit_memory_threshold_mb", 6500);
public static final IntCachedFeatureParam sDisableInstanceLimitMaxCount =
newIntCachedFeatureParam(DISABLE_INSTANCE_LIMIT, "max_instance_limit", 20);
/** Cached param whether we disable e2e on the recent tabs page. */
public static final BooleanCachedFeatureParam sDrawKeyNativeEdgeToEdgeDisableRecentTabsE2e =
newBooleanCachedFeatureParam(
@@ -1411,12 +1555,21 @@ public abstract class ChromeFeatureList {
public static final BooleanCachedFeatureParam sEdgeToEdgeEverywhereIsDebugging =
newBooleanCachedFeatureParam(EDGE_TO_EDGE_EVERYWHERE, "e2e_everywhere_debug", false);
public static final IntCachedFeatureParam sEdgeToEdgeTabletInvisibleBottomChinMinWidth =
newIntCachedFeatureParam(
EDGE_TO_EDGE_TABLET, "e2e_tablet_invisible_bottom_chin_min_width", -1);
public static final IntCachedFeatureParam sEdgeToEdgeTabletMinWidthThreshold =
newIntCachedFeatureParam(EDGE_TO_EDGE_TABLET, "e2e_tablet_width_threshold", -1);
public static final BooleanCachedFeatureParam sTabGroupListContainment =
newBooleanCachedFeatureParam(
GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, "tab_group_list_containment", true);
public static final BooleanCachedFeatureParam sMagicStackAndroidShowAllModules =
newBooleanCachedFeatureParam(MAGIC_STACK_ANDROID, "show_all_modules", false);
public static final BooleanCachedFeatureParam sMaliciousApkDownloadCheckTelemetryOnly =
newBooleanCachedFeatureParam(MALICIOUS_APK_DOWNLOAD_CHECK, "telemetry_only", false);
public static final BooleanCachedFeatureParam sMostVisitedTilesReselectLaxSchemeHost =
newBooleanCachedFeatureParam(MOST_VISITED_TILES_RESELECT, "lax_scheme_host", false);
public static final BooleanCachedFeatureParam sMostVisitedTilesReselectLaxRef =
@@ -1454,6 +1607,12 @@ public abstract class ChromeFeatureList {
"skip_shopping_persisted_tab_data_delayed_initialization",
true);
public static final IntCachedFeatureParam sReadAloudAudioOverviewsSpeedAdditionPercentage =
newIntCachedFeatureParam(
READALOUD_AUDIO_OVERVIEWS,
"read_aloud_audio_overviews_speed_addition_percentage",
20);
/** Controls whether Referrer App ID is passed to Search Results Page via client= param. */
public static final BooleanCachedFeatureParam sSearchinCctApplyReferrerId =
newBooleanCachedFeatureParam(SEARCH_IN_CCT, "apply_referrer_id", false);
@@ -1505,14 +1664,17 @@ public abstract class ChromeFeatureList {
public static final IntCachedFeatureParam sWebApkMinShellApkVersionValue =
newIntCachedFeatureParam(WEB_APK_MIN_SHELL_APK_VERSION, "version", 146);
public static final BooleanCachedFeatureParam sTouchToSearchCalloutTextVariant =
newBooleanCachedFeatureParam(TOUCH_TO_SEARCH_CALLOUT, "text_variant", false);
/** All {@link CachedFeatureParam}s of features in this FeatureList */
public static final List<CachedFeatureParam<?>> sParamsCached =
List.of(
sAndroidAppIntegrationModuleForceCardShow,
sAndroidAppIntegrationModuleShowThirdPartyCard,
sAndroidAppIntegrationMultiDataSourceHistoryContentTtlHours,
sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck,
sAndroidAppIntegrationMultiDataSourceSkipDeviceCheck,
sAndroidAppIntegrationMultiDataSourceSkipSchemaCheck,
sAndroidAppIntegrationV2ContentTtlHours,
sAndroidAppIntegrationWithFaviconScheduleDelayTimeMs,
sAndroidAppIntegrationWithFaviconSkipDeviceCheck,
@@ -1520,12 +1682,16 @@ public abstract class ChromeFeatureList {
sAndroidAppIntegrationWithFaviconUseLargeFavicon,
sAndroidAppIntegrationWithFaviconZeroStateFaviconNumber,
sAndroidBottomToolbarDefaultToTop,
sAndroidComposeplateSkipLocaleCheck,
sAndroidComposeplateHideIncognitoButton,
sAndroidThemeModuleForceDependencies,
sBackgroundThreadPoolFieldTrialConfig,
sBatchTabRestoreBatchSize,
sCctAdaptiveButtonContextualOnly,
sCctAdaptiveButtonDefaultVariant,
sCctAdaptiveButtonEnableOpenInBrowser,
sCctAdaptiveButtonEnableVoice,
sCctAuthTabEnableHttpsRedirectsVerificationTimeoutMs,
sClampAutomotiveScalingMaxScalingPercentage,
sCctAutoTranslateAllowAllFirstParties,
sCctAutoTranslatePackageNamesAllowlist,
sCctGoogleBottomBarButtonList,
@@ -1538,10 +1704,13 @@ public abstract class ChromeFeatureList {
sCctResizableForThirdPartiesAllowlistEntries,
sCctResizableForThirdPartiesDefaultPolicy,
sCctResizableForThirdPartiesDenylistEntries,
sClampAutomotiveScalingMaxScalingPercentage,
sClankStartupLatencyInjectionAmountMs,
sCollectAndroidFrameTimelineMetricsJankTrackerDelayedStartMs,
sDeleteLegacyTabStateFilesBatchSize,
sDeleteMigratedLegacyTabStateFilesAfterRestore,
sDisableInstanceLimitMaxCount,
sDisableInstanceLimitMemoryThresholdMb,
sDrawKeyNativeEdgeToEdgeDisableCctMediaViewerE2e,
sDrawKeyNativeEdgeToEdgeDisableHubE2e,
sDrawKeyNativeEdgeToEdgeDisableIncognitoNtpE2e,
@@ -1552,10 +1721,13 @@ public abstract class ChromeFeatureList {
sEdgeToEdgeEverywhereIsDebugging,
sEdgeToEdgeEverywhereOemList,
sEdgeToEdgeEverywhereOemMinVersions,
sEdgeToEdgeTabletInvisibleBottomChinMinWidth,
sEdgeToEdgeTabletMinWidthThreshold,
sMagicStackAndroidShowAllModules,
sMaliciousApkDownloadCheckTelemetryOnly,
sMaxLegacyTabStateFilesDeletedPerSession,
sMostVisitedTilesReselectLaxQuery,
sMostVisitedTilesReselectLaxPath,
sMostVisitedTilesReselectLaxQuery,
sMostVisitedTilesReselectLaxRef,
sMostVisitedTilesReselectLaxSchemeHost,
sNavBarColorAnimationDisableBottomChinColorAnimation,
@@ -1568,6 +1740,7 @@ public abstract class ChromeFeatureList {
sOmahaMinSdkVersionMinSdkVersion,
sOptimizationGuidePushNotificationsMaxCacheSize,
sPriceChangeModuleSkipShoppingPersistedTabDataDelayedInit,
sReadAloudAudioOverviewsSpeedAdditionPercentage,
sSearchinCctApplyReferrerId,
sSearchinCctOmniboxAllowedPackageNames,
sStartSurfaceReturnTimeTabletSecs,
@@ -1578,6 +1751,7 @@ public abstract class ChromeFeatureList {
sTabStripLayoutOptimizationOnExternalDisplay,
sTabStripLayoutOptimizationOnExternalDisplayOemDenylist,
sTabWindowManagerReportIndicesMismatchTimeDiffThresholdMs,
sTouchToSearchCalloutTextVariant,
sUseChimeAndroidSdkAlwaysRegister,
sWebApkMinShellApkVersionValue);
@@ -1585,28 +1759,28 @@ public abstract class ChromeFeatureList {
/* Alphabetical: */
public static final MutableBooleanParamWithSafeDefault
sAndroidNativePagesInNewTabBookmarksEnabled =
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_bookmarks_enabled", true);
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_bookmarks_enabled", true);
public static final MutableBooleanParamWithSafeDefault
sAndroidNativePagesInNewTabDownloadsEnabled =
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_downloads_enabled", true);
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_downloads_enabled", true);
public static final MutableBooleanParamWithSafeDefault
sAndroidNativePagesInNewTabHistoryEnabled =
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_history_enabled", true);
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_history_enabled", true);
public static final MutableBooleanParamWithSafeDefault
sAndroidNativePagesInNewTabRecentTabsEnabled =
sAndroidNativePagesInNewTab.newBooleanParam(
"android_native_pages_in_new_tab_recent_tabs_enabled", true);
public static final MutableIntParamWithSafeDefault
sAndroidTabDeclutterAutoDeleteTimeDeltaHours =
sAndroidTabDeclutterAutoDelete.newIntParam(
"android_tab_declutter_auto_delete_time_delta_hours", 90 * 24);
public static final MutableBooleanParamWithSafeDefault
sDisableBottomControlsStackerYOffsetDispatching =
sBottomBrowserControlsRefactor.newBooleanParam(
"disable_bottom_controls_stacker_y_offset", false);
public static final MutableIntParamWithSafeDefault
sAndroidTabDeclutterAutoDeleteTimeDeltaHours =
sAndroidTabDeclutterAutoDelete.newIntParam(
"android_tab_declutter_auto_delete_time_delta_hours", 90 * 24);
public static final MutableIntParamWithSafeDefault sTabSwitcherColorBlendAnimateDurationMs =
sTabSwitcherColorBlendAnimate.newIntParam("animation_duration_ms", 240);
public static final MutableIntParamWithSafeDefault sTabSwitcherColorBlendAnimateInterpolator =
@@ -51,6 +51,7 @@
#include "chrome/browser/notifications/notifier_state_tracker.h"
#include "chrome/browser/notifications/platform_notification_service_impl.h"
#include "chrome/browser/permissions/quiet_notification_permission_ui_state.h"
#include "chrome/browser/platform_experience/prefs.h"
#include "chrome/browser/policy/developer_tools_policy_handler.h"
#include "chrome/browser/prefs/chrome_pref_service_factory.h"
#include "chrome/browser/prefs/incognito_mode_prefs.h"
@@ -115,6 +116,7 @@
#include "components/enterprise/browser/identifiers/identifiers_prefs.h"
#include "components/enterprise/buildflags/buildflags.h"
#include "components/enterprise/connectors/core/connectors_prefs.h"
#include "components/feature_engagement/public/pref_names.h"
#include "components/fingerprinting_protection_filter/common/fingerprinting_protection_filter_constants.h"
#include "components/fingerprinting_protection_filter/common/prefs.h"
#include "components/history_clusters/core/history_clusters_prefs.h"
@@ -276,6 +278,7 @@
#include "components/permissions/contexts/geolocation_permission_context_android.h"
#include "components/webapps/browser/android/install_prompt_prefs.h"
#else // BUILDFLAG(IS_ANDROID)
#include "chrome/browser/contextual_cueing/contextual_cueing_prefs.h"
#include "chrome/browser/device_api/device_service_impl.h"
#include "chrome/browser/gcm/gcm_product_util.h"
#include "chrome/browser/hid/hid_policy_allowed_devices.h"
@@ -483,10 +486,6 @@
#include "chrome/browser/media/cdm_pref_service_helper.h"
#include "chrome/browser/media/media_foundation_service_monitor.h"
#include "chrome/browser/os_crypt/app_bound_encryption_provider_win.h"
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
#include "chrome/browser/win/conflicts/incompatible_applications_updater.h"
#include "chrome/browser/win/conflicts/third_party_conflicts_manager.h"
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
#endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
@@ -1114,6 +1113,47 @@ inline constexpr char kSyncBagOfChips[] = "sync.bag_of_chips";
inline constexpr char kSyncLastSyncedTime[] = "sync.last_synced_time";
inline constexpr char kSyncLastPollTime[] = "sync.last_poll_time";
inline constexpr char kSyncPollInterval[] = "sync.short_poll_interval";
inline constexpr char kHasSeenWelcomePage[] = "browser.has_seen_welcome_page";
inline constexpr char kSharingVapidKey[] = "sharing.vapid_key";
#if BUILDFLAG(IS_WIN)
// Deprecated 05/2025.
inline constexpr char kIncompatibleApplications[] = "incompatible_applications";
// Deprecated 05/2025.
inline constexpr char kModuleBlocklistCacheMD5Digest[] =
"module_blocklist_cache_md5_digest";
#endif // BUILDFLAG(IS_WIN)
// Deprecated 05/2025.
inline constexpr char kPrivacySandboxFakeNoticePromptShownTimeSync[] =
"privacy_sandbox.fake_notice.prompt_shown_time_sync";
inline constexpr char kPrivacySandboxFakeNoticePromptShownTime[] =
"privacy_sandbox.fake_notice.prompt_shown_time";
inline constexpr char kPrivacySandboxFakeNoticeFirstSignInTime[] =
"privacy_sandbox.fake_notice.first_sign_in_time";
inline constexpr char kPrivacySandboxFakeNoticeFirstSignOutTime[] =
"privacy_sandbox.fake_notice.first_sign_out_time";
// Deprecated 06/2025.
inline constexpr char kStorageGarbageCollect[] =
"extensions.storage.garbagecollect";
inline constexpr char kVariationsLimitedEntropySyntheticTrialSeed[] =
"variations_limited_entropy_synthetic_trial_seed";
inline constexpr char kVariationsLimitedEntropySyntheticTrialSeedV2[] =
"variations_limited_entropy_synthetic_trial_seed_v2";
inline constexpr char kGaiaCookiePeriodicReportTimeDeprecated[] =
"gaia_cookie.periodic_report_time";
#if BUILDFLAG(IS_CHROMEOS)
// Deprecated 06/2025.
inline constexpr char kNativeClientForceAllowed[] =
"native_client_force_allowed";
inline constexpr char kDeviceNativeClientForceAllowed[] =
"device_native_client_force_allowed";
inline constexpr char kDeviceNativeClientForceAllowedCache[] =
"device_native_client_force_allowed_cache";
#endif // BUILDFLAG(IS_CHROMEOS)
// Register local state used only for migration (clearing or moving to a new
// key).
@@ -1222,11 +1262,41 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
registry->RegisterListPref(
kPerformanceInterventionNotificationAcceptHistoryDeprecated);
#endif
#if BUILDFLAG(IS_WIN)
// Deprecated 05/2025.
registry->RegisterDictionaryPref(kIncompatibleApplications);
// Deprecated 05/2025.
registry->RegisterStringPref(kModuleBlocklistCacheMD5Digest, "");
#endif
// Deprecated 06/2025.
registry->RegisterUint64Pref(kVariationsLimitedEntropySyntheticTrialSeed, 0);
registry->RegisterUint64Pref(kVariationsLimitedEntropySyntheticTrialSeedV2,
0);
#if BUILDFLAG(IS_CHROMEOS)
// Deprecated 06/2025
registry->RegisterBooleanPref(kNativeClientForceAllowed, false);
registry->RegisterBooleanPref(kDeviceNativeClientForceAllowed, false);
registry->RegisterBooleanPref(kDeviceNativeClientForceAllowedCache, false);
#endif // BUILDFLAG(IS_CHROMEOS)
}
// Register prefs used only for migration (clearing or moving to a new key).
void RegisterProfilePrefsForMigration(
user_prefs::PrefRegistrySyncable* registry) {
// Deprecated 05/28.
registry->RegisterTimePref(kPrivacySandboxFakeNoticePromptShownTimeSync,
base::Time());
registry->RegisterTimePref(kPrivacySandboxFakeNoticePromptShownTime,
base::Time());
registry->RegisterTimePref(kPrivacySandboxFakeNoticeFirstSignInTime,
base::Time());
registry->RegisterTimePref(kPrivacySandboxFakeNoticeFirstSignOutTime,
base::Time());
chrome_browser_net::secure_dns::RegisterProbesSettingBackupPref(registry);
#if BUILDFLAG(IS_CHROMEOS)
@@ -1576,6 +1646,12 @@ void RegisterProfilePrefsForMigration(
registry->RegisterTimePref(kSyncLastSyncedTime, base::Time());
registry->RegisterTimePref(kSyncLastPollTime, base::Time());
registry->RegisterTimeDeltaPref(kSyncPollInterval, base::TimeDelta());
registry->RegisterDictionaryPref(kSharingVapidKey);
registry->RegisterBooleanPref(kHasSeenWelcomePage, false);
// Deprecated 06/2025
registry->RegisterBooleanPref(kStorageGarbageCollect, false);
registry->RegisterDoublePref(kGaiaCookiePeriodicReportTimeDeprecated, 0);
}
} // namespace
@@ -1638,6 +1714,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
ProfileAttributesStorage::RegisterPrefs(registry);
ProfileNetworkContextService::RegisterLocalStatePrefs(registry);
profiles::RegisterPrefs(registry);
feature_engagement::RegisterLocalStatePrefs(registry);
#if BUILDFLAG(IS_ANDROID)
PushMessagingServiceImpl::RegisterPrefs(registry);
#endif
@@ -1827,10 +1904,6 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
policy::policy_prefs::kNativeWindowOcclusionEnabled, true);
MediaFoundationServiceMonitor::RegisterPrefs(registry);
os_crypt_async::AppBoundEncryptionProviderWin::RegisterLocalPrefs(registry);
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
IncompatibleApplicationsUpdater::RegisterLocalStatePrefs(registry);
ThirdPartyConflictsManager::RegisterLocalStatePrefs(registry);
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
#endif // BUILDFLAG(IS_WIN)
#if BUILDFLAG(ENABLE_DOWNGRADE_PROCESSING)
@@ -1863,6 +1936,7 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
// TODO(b/328668317): Default pref should be set to true once this is
// launched.
registry->RegisterBooleanPref(prefs::kOsUpdateHandlerEnabled, false);
platform_experience::prefs::RegisterPrefs(*registry);
#endif // BUILDFLAG(IS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
#if BUILDFLAG(ENABLE_PDF)
@@ -2076,6 +2150,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
captions::LiveTranslateController::RegisterProfilePrefs(registry);
ChromeAuthenticatorRequestDelegate::RegisterProfilePrefs(registry);
commerce::CommerceUiTabHelper::RegisterProfilePrefs(registry);
contextual_cueing::prefs::RegisterProfilePrefs(registry);
DeviceServiceImpl::RegisterProfilePrefs(registry);
DriveService::RegisterProfilePrefs(registry);
extensions::TabsCaptureVisibleTabFunction::RegisterProfilePrefs(registry);
@@ -2300,11 +2375,10 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
registry->RegisterBooleanPref(
prefs::kAccessibilityMainNodeAnnotationsEnabled, false,
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
#endif // !BUILDFLAG(IS_ANDROID)
// TODO(crbug.com/400455013): Add LNA support on Android
registry->RegisterBooleanPref(
prefs::kManagedLocalNetworkAccessRestrictionsEnabled, false);
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_ANDROID)
registry->RegisterBooleanPref(prefs::kVirtualKeyboardResizesLayoutByDefault,
@@ -2491,6 +2565,25 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) {
kPerformanceInterventionNotificationAcceptHistoryDeprecated);
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_WIN)
// Deprecated 05/2025.
local_state->ClearPref(kIncompatibleApplications);
// Deprecated 05/2025.
local_state->ClearPref(kModuleBlocklistCacheMD5Digest);
#endif
// Added 06/2025.
local_state->ClearPref(kVariationsLimitedEntropySyntheticTrialSeed);
local_state->ClearPref(kVariationsLimitedEntropySyntheticTrialSeedV2);
#if BUILDFLAG(IS_CHROMEOS)
// Added 06/2025
local_state->ClearPref(kNativeClientForceAllowed);
local_state->ClearPref(kDeviceNativeClientForceAllowed);
local_state->ClearPref(kDeviceNativeClientForceAllowedCache);
#endif
// Please don't delete the following line. It is used by PRESUBMIT.py.
// END_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS
@@ -2516,6 +2609,12 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs,
// BEGIN_MIGRATE_OBSOLETE_PROFILE_PREFS
// Please don't delete the preceding line. It is used by PRESUBMIT.py.
// Added 05/2025.
profile_prefs->ClearPref(kPrivacySandboxFakeNoticePromptShownTimeSync);
profile_prefs->ClearPref(kPrivacySandboxFakeNoticePromptShownTime);
profile_prefs->ClearPref(kPrivacySandboxFakeNoticeFirstSignInTime);
profile_prefs->ClearPref(kPrivacySandboxFakeNoticeFirstSignOutTime);
privacy_sandbox::PrivacySandboxNoticeStorage::UpdateNoticeSchemaV2(
profile_prefs);
@@ -2886,6 +2985,12 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs,
profile_prefs->ClearPref(kSyncLastSyncedTime);
profile_prefs->ClearPref(kSyncLastPollTime);
profile_prefs->ClearPref(kSyncPollInterval);
profile_prefs->ClearPref(kSharingVapidKey);
profile_prefs->ClearPref(kHasSeenWelcomePage);
// Added 06/2025.
profile_prefs->ClearPref(kStorageGarbageCollect);
profile_prefs->ClearPref(kGaiaCookiePeriodicReportTimeDeprecated);
// Please don't delete the following line. It is used by PRESUBMIT.py.
// END_MIGRATE_OBSOLETE_PROFILE_PREFS
@@ -220,7 +220,6 @@
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
#include "chrome/browser/ui/blocked_content/framebust_block_tab_helper.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/hats/hats_helper.h"
#include "chrome/browser/ui/performance_controls/performance_controls_hats_service_factory.h"
#include "chrome/browser/ui/shared_highlighting/shared_highlighting_promo.h"
@@ -241,13 +240,13 @@
#include "chrome/browser/ui/extensions/extension_side_panel_utils.h"
#include "chrome/browser/web_applications/policy/pre_redirection_url_observer.h"
#include "chrome/browser/web_applications/web_app_utils.h"
#include "extensions/browser/view_type_utils.h" // nogncheck
#include "extensions/common/extension_features.h"
#include "extensions/common/mojom/view_type.mojom.h"
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
#include "chrome/browser/extensions/tab_helper.h"
#include "extensions/browser/view_type_utils.h"
#endif
#if BUILDFLAG(ENABLE_OFFLINE_PAGES)
@@ -628,13 +627,10 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
PluginObserverAndroid::CreateForWebContents(web_contents);
task_manager::WebContentsTags::CreateForTabContents(web_contents);
if (base::FeatureList::IsEnabled(payments::facilitated::kEnablePixPayments) ||
base::FeatureList::IsEnabled(blink::features::kPaymentLinkDetection)) {
if (auto* optimization_guide_decider =
OptimizationGuideKeyedServiceFactory::GetForProfile(profile)) {
ChromeFacilitatedPaymentsClient::CreateForWebContents(
web_contents, optimization_guide_decider);
}
}
#else // BUILDFLAG(IS_ANDROID)
if (web_app::AreWebAppsUserInstallable(profile)) {
@@ -741,7 +737,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
web_contents, false));
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
// If the web contents already have a view type, don't overwrite it here. One
// case where this can happen is when the user opens undocked developer tools.
// For all developer tools web contents, the view type is set to
@@ -751,6 +747,9 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
extensions::SetViewType(web_contents,
extensions::mojom::ViewType::kTabContents);
}
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
extensions::AppTabHelper::CreateForWebContents(web_contents);
extensions::NavigationExtensionEnabler::CreateForWebContents(web_contents);
extensions::WebNavigationTabObserver::CreateForWebContents(web_contents);
@@ -125,7 +125,6 @@ namespace autofillPrivate {
ADDRESS_HOME_APT_TYPE,
ADDRESS_HOME_HOUSE_NUMBER_AND_APT,
SINGLE_USERNAME_WITH_INTERMEDIATE_VALUES,
IMPROVED_PREDICTION,
PASSPORT_NAME_TAG,
PASSPORT_NUMBER,
PASSPORT_ISSUING_COUNTRY,
@@ -0,0 +1,17 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.enterprise.login</code> API to exit user sessions.
// Note: This API is only available to extensions installed by enterprise
// policy in ChromeOS managed sessions.
[platforms = ("chromeos"),
implemented_in = "chrome/browser/extensions/api/enterprise_login/enterprise_login_api.h"]
namespace enterprise.login {
callback VoidCallback = void ();
interface Functions {
// Exits the current managed guest session.
static void exitCurrentManagedGuestSession(
optional VoidCallback callback);
};
};
@@ -319,10 +319,14 @@ namespace enterprise.reportingPrivate {
enum DetectorType { PREDEFINED_DLP, USER_DEFINED };
// Information for a data detector used to apply data masking functionality.
// The fields of this dictionary correspond to the proto fields of
// `MatchedUrlNavigationRule::DataMaskingAction`.
dictionary MatchedDetector {
DOMString detectorId;
DOMString displayName;
DetectorType detectorType;
DOMString? maskType;
DOMString? pattern;
DetectorType? detectorType;
};
// Information for a data leak prevention rule that was used to mask data.
@@ -437,21 +441,15 @@ namespace enterprise.reportingPrivate {
DoneCallback callback);
};
dictionary DataMaskingRule {
// Corresponds to `MatchedUrlNavigationRule::DataMaskingAction::mask_type`.
DOMString level;
// Corresponds to `MatchedUrlNavigationRule::DataMaskingAction::pattern`.
DOMString regex_pattern;
// The URL being navigated to that triggered the rule.
dictionary DataMaskingRules {
// The URL being navigated to that triggered the rules.
DOMString url;
TriggeredRuleInfo triggeredRuleInfo;
TriggeredRuleInfo[] triggeredRuleInfo;
};
interface Events {
static void onDataMaskingRulesTriggered(DataMaskingRule[] rules);
static void onDataMaskingRulesTriggered(DataMaskingRules rules);
};
};
@@ -240,6 +240,9 @@ namespace passwordsPrivate {
// requested.
DOMString? password;
// Recovery password for the password change flow.
DOMString? backupPassword;
// Text shown if the password was obtained via a federated identity.
DOMString? federationText;
@@ -480,7 +480,7 @@ void ChromeContentRendererClient::RenderThreadStarted() {
extensions_v8::LoadTimesExtension::Get());
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
if (command_line->HasSwitch(variations::switches::kEnableBenchmarking)) {
if (command_line->HasSwitch(variations::switches::kEnableBenchmarkingApi)) {
blink::WebScriptController::RegisterExtension(
extensions_v8::BenchmarkingExtension::Get());
}
@@ -727,8 +727,15 @@ void ChromeContentRendererClient::RenderFrameCreated(
subresource_filter_agent->Initialize();
}
if (fingerprinting_protection_filter::features::
IsFingerprintingProtectionFeatureEnabled() &&
if (render_frame->IsMainFrame() && !render_frame->IsInFencedFrameTree()) {
// This web pref applies at the level of the current browser session and may
// change when settings are modified, so we copy the latest value every time
// a new top-level main frame is created for a new page.
content_based_fingerprinting_protection_enabled_ =
render_frame->GetBlinkPreferences()
.content_based_fingerprinting_protection_enabled;
}
if (content_based_fingerprinting_protection_enabled_ &&
fingerprinting_protection_ruleset_dealer_) {
auto* fingerprinting_protection_renderer_agent =
new fingerprinting_protection_filter::RendererAgent(
@@ -1889,6 +1896,11 @@ void ChromeContentRendererClient::AppendContentSecurityPolicy(
#endif
}
bool ChromeContentRendererClient::
IsContentBasedFingerprintingProtectionEnabled() {
return content_based_fingerprinting_protection_enabled_;
}
std::unique_ptr<blink::WebLinkPreviewTriggerer>
ChromeContentRendererClient::CreateLinkPreviewTriggerer() {
return ::CreateWebLinkPreviewTriggerer();
@@ -1364,8 +1364,13 @@ policies:
1363: TLS13EarlyDataEnabled
1364: LocalNetworkAccessRestrictionsEnabled
1365: PrefetchWithServiceWorkerEnabled
1366: AIModeSearchSuggestSettings
1366: ''
1367: AIModeSettings
1368: WatermarkStyle
1369: KioskApplicationLogCollectionEnabled
1370: EnableUnsafeSwiftShader
1371: LocalNetworkAccessAllowedForUrls
1372: LocalNetworkAccessBlockedForUrls
atomic_groups:
1: Homepage
@@ -1425,3 +1430,4 @@ atomic_groups:
55: SmartCardConnectSettings
56: WebRtc
57: ControlledFrameSettings
58: LocalNetworkAccessSettings
@@ -8,6 +8,8 @@ desc: |-
If this policy is set to 2 - BlockPartitioning, third-party storage partitioning will be disabled for all contexts.
Use <ph name="THIRD_PARTY_STORAGE_PARTITIONING_BLOCKED_FOR_ORIGINS_POLICY_NAME">ThirdPartyStoragePartitioningBlockedForOrigins</ph> to disable third-party storage partitioning for specific top-level origins. For detailed information on third-party storage partitioning, please see https://developers.google.com/privacy-sandbox/cookies/storage-partitioning.
This will be removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669.
example_value: 1
features:
dynamic_refresh: true
@@ -7,6 +7,8 @@ desc: |-
For detailed information on valid patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns. Note that patterns you list here are treated as origins, not URLs, so you should not specify a path.
For detailed information on third-party storage partitioning, please see https://developers.google.com/privacy-sandbox/cookies/storage-partitioning.
This will be removed in Chrome 145, and the requestStorageAccess method is recommended for use instead: https://developer.mozilla.org/en-US/docs/Web/API/Document/requestStorageAccess. Feedback can be left at https://crbug.com/425248669.
example_value:
- www.example.com
- '[*.]example.edu'
@@ -22,8 +22,8 @@ items:
name: Allow
value: 1
owners:
- janagrill@google.com
- okalitova@chromium.org
- rbock@google.com
- chromeos-commercial-remote-management@google.com
schema:
enum:
- 0
@@ -25,8 +25,8 @@ items:
name: AllowForAffiliatedUsers
value: 2
owners:
- janagrill@google.com
- okalitova@chromium.org
- rbock@google.com
- chromeos-commercial-remote-management@google.com
schema:
enum:
- 0
@@ -38,8 +38,7 @@ features:
dynamic_refresh: true
per_profile: false
owners:
- janagrill@google.com
- mpolzer@google.com
- rbock@google.com
- chromeos-commercial-remote-management@google.com
schema:
properties:
@@ -14,8 +14,7 @@ features:
dynamic_refresh: true
per_profile: false
owners:
- janagrill@google.com
- mpolzer@google.com
- rbock@google.com
- chromeos-commercial-remote-management@google.com
schema:
type: string
@@ -15,8 +15,7 @@ example_value: '1412.'
features:
dynamic_refresh: true
owners:
- janagrill@google.com
- mpolzer@google.com
- rbock@google.com
- chromeos-commercial-remote-management@google.com
schema:
type: string
@@ -17,7 +17,8 @@ desc: |-
Extensions availability are still controlled by other policies.
supported_on:
- chrome_os:111-
- chrome_os:111-138
deprecated: true
device_only: true
features:
dynamic_refresh: true
@@ -2,7 +2,7 @@ caption: Configure extension installation blocklist
desc: |-
Allows you to specify which extensions the users can NOT install. Extensions already installed will be disabled if blocked, without a way for the user to enable them. Once an extension disabled due to the blocklist is removed from it, it will automatically get re-enabled.
A blocklist value of '*' means all extensions are blocked unless they are explicitly listed in the allowlist.
A blocklist value of '*' means all extensions are blocked by default. Extensions that are explicitly listed in the allowlist are allowed if they are signed (packed). All unpacked extensions are blocked.
If this policy is left not set the user can install any extension in <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>.
example_value:
@@ -17,8 +17,9 @@ desc: |-
Extensions availability are still controlled by other policies.
supported_on:
- chrome.*:110-
- chrome_os:110-
- chrome.*:110-138
- chrome_os:110-138
deprecated: true
future_on:
- fuchsia
features:
@@ -1,40 +0,0 @@
caption: Settings for AI Mode Search recommendations in the address bar and new tab page search box
desc: |-
This policy controls the AI Mode recommendations section in the address bar and the new tab page search box.
This feature is available to all users with Google as their default search engine, unless it is disabled by this policy.
If the policy is unset, its behavior is determined by the <ph name="GEN_AI_DEFAULT_SETTINGS_POLICY_NAME">GenAiDefaultSettings</ph> policy.
When policy is set to 0 - Enabled or not set, the feature will be available to users. When policy is set to 1 - Disabled, the feature will not be available.
0 = Allow the feature to be used
1 = Do not allow the feature.
default: 0
example_value: 1
features:
dynamic_refresh: true
per_profile: true
items:
- caption: Allow AI Mode recommendations.
name: Allowed
value: 0
- caption: Do not allow AI Mode recommendations.
name: Disabled
value: 1
owners:
- file://components/omnibox/OWNERS
schema:
enum:
- 0
- 1
type: integer
future_on:
- android
- ios
- chrome.*
- chrome_os
tags: []
type: int-enum
@@ -29,7 +29,7 @@ items:
name: Disabled
value: 2
owners:
- file://components/autofill_ai/OWNERS
- file://components/autofill/OWNERS
- jkeitel@google.com
schema:
enum:
@@ -38,4 +38,5 @@ default: 0
supported_on:
- chrome.win:137-
- chrome.mac:137-
- ios:139-
tags: []
@@ -0,0 +1,25 @@
owners:
- macinashutosh@google.com
- irfedorova@google.com
- file://chromeos/components/kiosk/OWNERS
caption: Enable kiosk application log collection
default: false
desc: |-
Setting the policy to Enabled means Kiosk application level logs would be collected when a kiosk application is running on the device. Logs would be collected for all kiosk application types.
These logs would be stored in a separate kiosk_apps.log file.
Leaving this policy unset or setting it to Disabled means the Kiosk application level logs would not be collected.
features:
dynamic_refresh: true
per_profile: true
type: main
schema:
type: boolean
items:
- caption: Enable Kiosk application logs
value: true
- caption: Disable Kiosk application logs
value: false
example_value: false
future_on:
- chrome_os
tags: []
@@ -0,0 +1,2 @@
caption: Local Network Access settings
desc: A group of policies related to Local Network Access settings. See https://developer.chrome.com/blog/local-network-access
@@ -0,0 +1,41 @@
owners:
- hchao@chromium.org
- cthomp@chromium.org
- chrome-secure-web-and-net@chromium.org
caption: Allow sites to make requests to local network endpoints.
desc: |-
List of URL patterns. Requests initiated from websites served by matching origins are not subject to <ph name="LOCAL_NETWORK_ACCESS">Local Network Access</ph> checks.
If an origin is covered by both this policy and by LocalNetworkAccessBlockedForUrls, LocalNetworkAccessBlockedForUrls takes precedence.
For origins not covered by the patterns specified here, the user's personal configuration will apply.
For detailed information on valid URL patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.
See https://github.com/explainers-by-googlers/local-network-access for <ph
name="LOCAL_NETWORK_ACCESS">Local Network Access</ph> restrictions.
example_value:
- http://www.example.com:8080
- '[*.]example.edu'
- '*'
supported_on:
- chrome.*:139-
- chrome_os:139-
features:
dynamic_refresh: true
per_profile: true
type: list
schema:
items:
type: string
type: array
tags:
- system-security
@@ -0,0 +1,42 @@
owners:
- hchao@chromium.org
- cthomp@chromium.org
- chrome-secure-web-and-net@chromium.org
caption: Block sites from making requests to local network endpoints.
desc: |-
List of URL patterns. Requests initiated from websites served by matching origins are blocked from issuing <ph name="LOCAL_NETWORK_ACCESS">Local Network Access</ph> requests.
If an origin is covered by both this policy and by LocalNetworkAccessAllowedForUrls, this policy takes precedence.
Depending on the stage of the rollout of <ph name="LOCAL_NETWORK_ACCESS">Local Network Access</ph>, LocalNetworkAccessRestrictionsEnabled may also need to be enabled for this policy to block <ph name="LOCAL_NETWORK_ACCESS">Local Network Access</ph> requests.
For origins not covered by the patterns specified here, the user's personal configuration will apply.
For detailed information on valid URL patterns, please see https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.
See https://github.com/explainers-by-googlers/local-network-access for <ph
name="LOCAL_NETWORK_ACCESS">Local Network Access</ph> restrictions.
example_value:
- http://www.example.com:8080
- '[*.]example.edu'
- '*'
supported_on:
- chrome.*:139-
- chrome_os:139-
features:
dynamic_refresh: true
per_profile: true
type: list
schema:
items:
type: string
type: array
tags: []
@@ -6,8 +6,6 @@ owners:
caption: Specifies whether to apply restrictions to requests to local
network endpoints
deprecated: true
desc: |-
When this policy is set to Enabled, any time when a warning is supposed to be
displayed in the <ph name="DEV_TOOLS_NAME">DevTools</ph> due to <ph
@@ -24,6 +22,7 @@ desc: |-
supported_on:
- chrome.*:138-
- chrome_os:138-
- android:139-
features:
dynamic_refresh: true
@@ -0,0 +1,6 @@
LocalNetworkAccessSettings:
caption: Local Network Access settings
policies:
- LocalNetworkAccessAllowedForUrls
- LocalNetworkAccessBlockedForUrls
- LocalNetworkAccessRestrictionsEnabled
@@ -3,7 +3,9 @@ default: null
desc: |-
Setting the policy to Enabled prevents webpage elements that aren't from the domain that's in the browser's address bar from setting cookies. Setting the policy to Disabled lets those elements set cookies and prevents users from changing this setting.
Leaving it unset turns third-party cookies on, but users can change this setting.
Leaving it unset allows third-party cookies, but users can change this setting.
Note: This policy doesn't apply in Incognito mode, where third-party cookies are blocked and can only be allowed at the site level. To allow cookies at the site level, use the <ph name="COOKIES_ALLOWED_FOR_URLS_POLICY_NAME">CookiesAllowedForUrls</ph> policy.
example_value: false
features:
can_be_recommended: true
@@ -1,19 +1,20 @@
caption: Set the data regions preference for data storage
desc: |-
Choose to store your covered data from <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> in a specific geographic location.
Choose to store your users' covered Chrome Enterprise data in a specific geographic location.
If this policy is left unset or is set to <ph name="DATA_REGION_SETTING_NO_PREFERENCE_OPTION_NAME">No preference</ph> (value 0), covered data may be stored in any geographic location(s).
If this policy is set to <ph name="DATA_REGION_SETTING_UNITED_STATES_OPTION_NAME">United States</ph> (value 1), covered data will be stored in United States.
If this policy is set to <ph name="DATA_REGION_SETTING_EUROPE_OPTION_NAME">Europe</ph> (value 2), covered data will be stored in Europe.
If this policy is set to <ph name="DATA_REGION_SETTING_EUROPE_OPTION_NAME">Europe</ph> (value 2), covered data will be stored in the European Union.
This can only be set in the <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME">Google Admin console</ph> via Data > Compliance > Data regions > Region > Data at rest.
default: 0
example_value: 0
features:
cloud_only: true
dynamic_refresh: false
per_profile: true
unlisted: true
user_only: true
items:
- caption: No preference.
@@ -1,5 +1,6 @@
caption: Forces Native Client (NaCl) to be allowed to run on <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph>.
default: false
deprecated: true
desc: |-
Setting the policy to True allows Native Client to continue to run even if the default behavior is that Native Client is disabled.
Setting the policy to False or leaving it unset will use the default behavior.
@@ -19,6 +20,6 @@ owners:
schema:
type: boolean
supported_on:
- chrome_os:132-
- chrome_os:132-138
tags: []
type: main
@@ -10,8 +10,8 @@ desc: |-
Setting the policy to Disabled or leaving it unset prevents all users from applying firmware updates.
This policy applies to firmware for external peripheral firmware updates and internal component firmware updates for <ph name="PRODUCT_OS_FLEX_NAME">Google ChromeOS Flex</ph> devices. Internal component firmware updates for <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> devices are not affected by this policy.
future_on:
- chrome_os
supported_on:
- chrome_os:139-
device_only: true
features:
dynamic_refresh: true
@@ -24,7 +24,7 @@ items:
value: true
- caption: Users may not initiate firmware updates
value: false
default: false
default: true
example_value: true
tags: ['google-sharing']
generate_device_proto: True
@@ -0,0 +1,30 @@
caption: Allow software WebGL fallback using SwiftShader
desc: |-
A policy that controls if SwiftShader will be used as a WebGL fallback when hardware GPU acceleration is not available.
SwiftShader has been used to support WebGL on systems without GPU acceleration such as headless systems or virtual machines but has been deprecated due to security issues. Starting in M139, WebGL context creation will fail when it would have otherwise used SwiftShader. This policy allows the browser or administrator to temporarily defer the deprecation.
Setting the policy to Enabled, SwiftShader will be used as a software WebGL fallback.
Setting the policy to Disabled or not set, WebGL context creation may fail if hardware GPU acceleration is not available. Web pages may misbehave if they do not gracefully handle WebGL context creation failure.
This is a temporary policy which will be removed in the future.
default: false
example_value: false
features:
dynamic_refresh: false
per_profile: false
items:
- caption: Enable support for unsafe SwiftShader WebGL fallback
value: true
- caption: Disable support for unsafe SwiftShader WebGL fallback
value: false
owners:
- geofflang@chromium.org
- file://gpu/OWNERS
schema:
type: boolean
supported_on:
- chrome.*:139-
tags: []
type: main
@@ -6,12 +6,16 @@ desc: |-
When this policy is applied, any strings that surpass 16 characters will be truncated with a “...” Please refrain from using extended names.
Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers.
On <ph name="MS_WIN_NAME">Microsoft® Windows®</ph>, this policy is only available on instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain, joined to <ph name="MS_AAD_NAME">Microsoft® Azure® Active Directory®</ph> or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
On <ph name="MAC_OS_NAME">macOS</ph>, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
example_value: Chromium
features:
dynamic_refresh: true
per_profile: false
future_on:
- chrome.*
supported_on:
- chrome.*:139-
owners:
- file://components/enterprise/OWNERS
- esalma@google.com
@@ -9,8 +9,6 @@ example_value: true
features:
dynamic_refresh: true
per_profile: true
future_on:
- fuchsia
items:
- caption: Allow managed extensions to use the Enterprise Hardware Platform API
value: true
@@ -6,12 +6,16 @@ desc: |-
It is recommended to use the favicon (example https://www.google.com/favicon.ico) or an icon no smaller than 48 x 48 px.
Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers.
On <ph name="MS_WIN_NAME">Microsoft® Windows®</ph>, this policy is only available on instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain, joined to <ph name="MS_AAD_NAME">Microsoft® Azure® Active Directory®</ph> or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
On <ph name="MAC_OS_NAME">macOS</ph>, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
example_value: https://example.com/image.png
features:
dynamic_refresh: true
per_profile: false
future_on:
- chrome.*
supported_on:
- chrome.*:139-
owners:
- file://components/policy/OWNERS
- esalma@google.com
@@ -1,6 +1,8 @@
caption: Enterprise search aggregator settings
desc: |-
This policy allows administrators to set a designated enterprise search aggregator that will provide search recommendations and results within the address bar when triggered by a specific keyword. Users can initiate a search by typing the keyword specified in the <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> field with or without the @ prefix (e.g. <ph name="SHORTCUT_EXAMPLE_SEARCH_AGGREGATOR_SETTINGS">@work</ph>), followed by Space or Tab, in the address bar.
This policy allows administrators to set a designated enterprise search aggregator that will provide search recommendations and results within the omnibox (address bar) and the search box on the New Tab page.
By default, enterprise search suggestions will be blended and shown alongside regular <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> recommendations. Users can explicitly scope their search to just the enterprise search aggregator by typing the keyword specified in the <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> field with or without the @ prefix (e.g. <ph name="SHORTCUT_EXAMPLE_SEARCH_AGGREGATOR_SETTINGS">@work</ph>) followed by Space or Tab in the omnibox. Scoped enterprise searches (triggered by a keyword) are currently only supported in the omnibox and not in the search box on the New Tab page.
The following fields are required: <ph name="NAME_SEARCH_AGGREGATOR_SETTINGS_FIELD">name</ph>, <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph>, <ph name="SEARCH_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD">search_url</ph>, <ph name="SUGGEST_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD">suggest_url</ph>.
@@ -14,7 +16,7 @@ desc: |-
The <ph name="ICON_URL_SEARCH_AGGREGATOR_SETTINGS_FIELD">icon_url</ph> field specifies the URL to an image that will be used on the search suggestions. A default icon will be used when this field is not set. It's recommended to use a favicon (example <ph name="ICON_URL_EXAMPLE">https://www.google.com/favicon.ico</ph>). Supported image file formats: JPEG, PNG, and ICO.
The <ph name="REQUIRE_SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">require_shortcut</ph> field specifies whether the address bar <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> is required to see search recommendations. If this field is not set, the address bar <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> is not required.
The <ph name="REQUIRE_SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">require_shortcut</ph> field specifies whether the address bar <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> is required to see search recommendations. If required, suggestions will not be shown in the search box on the New Tab page, but will continue to be shown in the omnibox (address bar) in scoped search mode. If this field is not set, the address bar <ph name="SHORTCUT_SEARCH_AGGREGATOR_SETTINGS_FIELD">shortcut</ph> is not required.
On <ph name="MS_WIN_NAME">Microsoft® Windows®</ph>, this policy is only available on instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain, joined to <ph name="MS_AAD_NAME">Microsoft® Azure® Active Directory®</ph> or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
@@ -16,7 +16,6 @@ items:
- caption: Use essential and non-essential cookies in search.
value: false
owners:
- ayag@chromium.org
- mohammedabdon@chromium.org
- dp-chromeos-eng@google.com
schema:
@@ -20,7 +20,7 @@ features:
dynamic_refresh: true
per_profile: true
owners:
- ayag@chromium.org
- andreydav@google.com
- chromeos-commercial-identity@google.com
- file://components/policy/OWNERS
schema:
@@ -1,5 +1,6 @@
caption: Enable keyboard focusable scrollers
default: true
deprecated: true
desc: |-
This policy provides a temporary opt-out for the new keyboard focusable scrollers behavior.
@@ -7,13 +8,11 @@ desc: |-
When this policy is Disabled, scrollers will not be keyboard-focusable by default.
This policy is a temporary workaround, and will be removed in M135.
This policy is a temporary workaround. From M139, this policy is deprecated.
example_value: true
features:
dynamic_refresh: true
per_profile: true
future_on:
- fuchsia
items:
- caption: "Enabled: Scrollers are focusable by default."
value: true
@@ -24,9 +23,9 @@ owners:
schema:
type: boolean
supported_on:
- chrome.*:127-
- chrome_os:127-
- android:127-
- webview_android:127-
- chrome.*:127-138
- chrome_os:127-138
- android:127-138
- webview_android:127-138
tags: []
type: main
@@ -34,8 +34,9 @@ items:
name: keep_all
value: keep_all
owners:
- janagrill@google.com
- artyomchen@google.com
- vsavu@google.com
- chromeos-commercial-remote-management@google.com
schema:
enum:
- none
@@ -6,12 +6,18 @@ desc: |-
If this policy is left unset or set to true, managed browsers will display a “Managed by…” notice with an icon.
If this policy is set to false, the management notice will be hidden.
Note that this policy is only applied for managed browsers, so it will have no effect for managed users on unmanaged browsers.
On <ph name="MS_WIN_NAME">Microsoft® Windows®</ph>, this policy is only available on instances that are joined to a <ph name="MS_AD_NAME">Microsoft® Active Directory®</ph> domain, joined to <ph name="MS_AAD_NAME">Microsoft® Azure® Active Directory®</ph> or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
On <ph name="MAC_OS_NAME">macOS</ph>, this policy is only available on instances that are managed via MDM, joined to a domain via MCX or enrolled in <ph name="CHROME_ENTERPRISE_CORE_NAME">Chrome Enterprise Core</ph>.
example_value: true
features:
dynamic_refresh: true
per_profile: false
future_on:
- chrome.*
supported_on:
- chrome.*:139-
items:
- caption: Enable management notice on NTP Footer
value: true
@@ -1,15 +1,13 @@
caption: Show Outlook Calendar card on the New Tab Page (Beta)
caption: Show Outlook Calendar card on the New Tab Page
default: false
desc: |- # TODO(crbug.com/376287682): insert HC article link
This is a beta feature.
desc: |-
This policy controls the visibility of the Outlook Card on the New Tab Page. The card will only be displayed on the New Tab Page if the policy is enabled and your organization authorized the usage of the Outlook Calendar data in the browser.
Outlook data will not be stored by the browser.
The Outlook card shows the next calendar event, along with a glanceable look at the rest of the day's meetings. It aims to address the issue of context switching and enhance productivity by giving users a shortcut to their next meeting.
The Microsoft Outlook card will require additional admin configuration. For detailed information on connecting the Chrome New Tab Page Card to Outlook, please see help article.
The Microsoft Outlook card will require additional admin configuration. For detailed information on connecting the Chrome New Tab Page Card to Outlook, please see https://support.google.com/chrome/a?p=chrome_ntp_microsoft_cards.
If the <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is disabled, the Outlook Card will not be shown. If <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is enabled, the Outlook card will be shown if this policy is also enabled and there is data to be shown. If <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is unset, the Outlook card will be shown if this policy is also enabled, the user has the card enabled in Customize Chrome, and there is data to be shown.
example_value: false
@@ -1,15 +1,13 @@
caption: Show SharePoint and OneDrive File Card on the New Tab Page (Beta)
caption: Show SharePoint and OneDrive File Card on the New Tab Page
default: false
desc: |- # TODO(crbug.com/376287682): insert HC article link
This is a beta feature.
desc: |-
This policy controls the visibility of the SharePoint and OneDrive File Card on the New Tab Page. The card will only be displayed on the New Tab Page if the policy is enabled and your organization authorized the usage of the SharePoint and OneDrive File data in the browser.
SharePoint and OneDrive data will not be stored by the browser.
The SharePoint and OneDrive Files recommendation card shows a list of recommended files. It aims to address the issue of context switching and enhance productivity by giving users a shortcut to their most important documents.
The Microsoft SharePoint and OneDrive card will require additional admin configuration. For detailed information on connecting the Chrome New Tab Page Card to Sharepoint, please see help article.
The Microsoft SharePoint and OneDrive card will require additional admin configuration. For detailed information on connecting the Chrome New Tab Page Card to Sharepoint, please see https://support.google.com/chrome/a?p=chrome_ntp_microsoft_cards.
If the <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is disabled, the SharePoint and OneDrive Card will not be shown. If <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is enabled, the SharePoint and OneDrive card will be shown if this policy is also enabled and there is data to be shown. If <ph name="NTPCARDSVISIBLE">NTPCardsVisible</ph> is unset, the SharePoint and OneDrive card will be shown if this policy is also enabled, the user has the card enabled in Customize Chrome, and there is data to be shown.
example_value: false
@@ -20,7 +20,7 @@ features:
dynamic_refresh: true
per_profile: true
owners:
- ayag@chromium.org
- andreydav@google.com
- chromeos-commercial-identity@google.com
- file://components/policy/OWNERS
schema:
@@ -12,7 +12,9 @@ desc: |-
Site search entries configured as featured are displayed in the address bar when the user types "@". Up to three entries can be selected as featured.
Users cannot edit or disable site search entries set by policy, but they can add new shortcuts for the same URL. In addition, users cannot create new site search entries with a shortcut previously created via this policy.
For a site search entry where <ph name="ALLOW_USER_OVERRIDE_SITE_SEARCH_SETTINGS_FIELD">allow_user_override</ph> is true, users have the ability to edit or disable that entry. However, featured engines (beginning with "@") can only be disabled. If a user modifies an entry that was initially created by this policy, it will no longer be managed by policy and will be treated like a user-created shortcut. When <ph name="ALLOW_USER_OVERRIDE_SITE_SEARCH_SETTINGS_FIELD">allow_user_override</ph> is false or unspecified for a site search entry, users cannot edit or disable that entry. The setting to allow user override is only supported on M139 and later; earlier versions will default to disabling user override.
Users cannot create new site search entries with a shortcut previously created via this policy unless <ph name="ALLOW_USER_OVERRIDE_SITE_SEARCH_SETTINGS_FIELD">allow_user_override</ph> is set to true for the site search entry.
In case of a conflict with a shortcut previously created by the user, the user setting takes precedence. However, users can still trigger the option created by the policy by typing "@" in the search bar. For example, if the user already defined "work" as a shortcut to URL1 and the policy defines "work" as a shortcut to URL2, then typing "work" in the search bar will trigger a search to URL1, but typing "@work" in the search bar will trigger a search to URL2.
@@ -28,6 +30,10 @@ example_value:
- name: YouTube
shortcut: youtube
url: https://www.youtube.com/results?search_query=%s
- name: Google Drive
shortcut: drive
url: https://drive.google.com/?q=%s
allow_user_override: true
features:
dynamic_refresh: true
per_profile: true
@@ -47,6 +53,8 @@ schema:
type: string
url:
type: string
allow_user_override:
type: boolean
required:
- shortcut
- name
@@ -0,0 +1,45 @@
caption: Configure Custom Watermark Settings
desc: |-
Allows administrators to customize the appearance of watermarks applied by Data Loss Prevention (DLP) rules. This includes setting its filling/oultine opacity, and defining its font size.
If this policy or some values is not set, Chrome will use its default watermark behavior.
The default values are: fill opacity at 4, outline opacity at 6, and font size at 24.
The 'Fill Opacity' is a percentage from 0 (fully transparent) to 100 (fully opaque).
The 'Outline Opacity' is a percentage from 0 (fully transparent) to 100 (fully opaque).
The 'FontSize' is specified in points .
owners:
- adamkl@google.com
- cbe-cep-eng@google.com
supported_on:
- chrome.*:139-
- chrome_os:139-
features:
cloud_only: true
dynamic_refresh: true
per_profile: true
type: dict
schema:
type: object
properties:
fill_opacity:
type: integer
minimum: 0
maximum: 100
description: "Fill opacity of the watermark text, from 0 (transparent) to 100 (opaque)."
outline_opacity:
type: integer
minimum: 0
maximum: 100
description: "Outline opacity of the watermark text, from 0 (transparent) to 100 (opaque)."
font_size:
type: integer
minimum: 1
description: "Font size of the watermark text in points."
example_value:
fill_opacity: 4
outline_opacity: 6
font_size: 24
tags: []
label: Custom Watermark Configuration
@@ -10,7 +10,7 @@ features:
dynamic_refresh: true
per_profile: true
future_on:
- fuchsia
- android
items:
- caption: Allow WebRTC event log collection from Google services
value: true
@@ -25,7 +25,7 @@ supported_on:
- chrome_os:129-
owners:
- ayag@chromium.org
- andreydav@google.com
- chromeos-commercial-identity@google.com
schema:
@@ -23,6 +23,7 @@
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/containers/flat_set.h"
#include "base/debug/crash_logging.h"
#include "base/feature_list.h"
#include "base/files/file_path.h"
#include "base/functional/bind.h"
@@ -270,6 +271,10 @@
#include "content/public/browser/picture_in_picture_window_controller.h"
#endif // !BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS)
#include "content/browser/ios/nfc_host.h"
#endif
namespace content {
namespace {
@@ -2086,6 +2091,25 @@ RenderWidgetHostView* WebContentsImpl::GetTopLevelRenderWidgetHostView() {
return GetRenderManager()->GetRenderWidgetHostView();
}
RenderWidgetHost* WebContentsImpl::FindWidgetAtPoint(const gfx::PointF& point) {
if (GetOuterWebContents()) {
return GetOuterWebContents()->FindWidgetAtPoint(point);
}
gfx::PointF transformed_point;
input::RenderWidgetHostViewInput* rwhvi =
GetInputEventRouter()->GetRenderWidgetHostViewInputAtPoint(
static_cast<RenderWidgetHostViewBase*>(
GetTopLevelRenderWidgetHostView()),
point, &transformed_point);
RenderWidgetHostImpl* widget_host = RenderWidgetHostImpl::From(
static_cast<RenderWidgetHostViewBase*>(rwhvi)->GetRenderWidgetHost());
if (!widget_host) {
return nullptr;
}
return widget_host;
}
WebContentsView* WebContentsImpl::GetView() const {
return view_.get();
}
@@ -3771,10 +3795,6 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences(
#if BUILDFLAG(IS_ANDROID)
prefs.device_scale_adjustment = GetDeviceScaleAdjustment(min_width_in_dp);
if (base::FeatureList::IsEnabled(blink::features::kForceOffTextAutosizing)) {
prefs.text_autosizing_enabled = false;
}
#endif // BUILDFLAG(IS_ANDROID)
// GuestViews in the same StoragePartition need to find each other's frames.
@@ -5993,9 +6013,9 @@ device::mojom::WakeLockContext* WebContentsImpl::GetWakeLockContext() {
return wake_lock_context_host_->GetWakeLockContext();
}
#if BUILDFLAG(IS_ANDROID)
#if BUILDFLAG(IS_ANDROID) || (BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_IOS_TVOS))
void WebContentsImpl::GetNFC(
RenderFrameHost* render_frame_host,
RenderFrameHostImpl* render_frame_host,
mojo::PendingReceiver<device::mojom::NFC> receiver) {
if (!nfc_host_) {
nfc_host_ = std::make_unique<NFCHost>(this);
@@ -8136,6 +8156,13 @@ void WebContentsImpl::UnregisterProtocolHandler(RenderFrameHostImpl* source,
delegate_->UnregisterProtocolHandler(source, protocol, url, user_gesture);
}
base::ScopedClosureRunner WebContentsImpl::MarkAudible() {
auto audible_client = audio_stream_monitor_.RegisterAudibleClient(
GetPrimaryMainFrame()->GetGlobalId());
return base::ScopedClosureRunner(
base::DoNothingWithBoundArgs(std::move(audible_client)));
}
void WebContentsImpl::DomOperationResponse(RenderFrameHost* render_frame_host,
const std::string& json_string) {
OPTIONAL_TRACE_EVENT2("content", "WebContentsImpl::DomOperationResponse",
@@ -10684,8 +10711,6 @@ void WebContentsImpl::UpdateWindowControlsOverlay(
GetPrimaryMainFrame()->GetRenderWidgetHost()) {
render_widget_host->SynchronizeVisualProperties();
}
view_->UpdateWindowControlsOverlay(bounding_rect);
}
BrowserPluginEmbedder* WebContentsImpl::GetBrowserPluginEmbedder() const {
@@ -11396,6 +11421,13 @@ void WebContentsImpl::IsClipboardPasteAllowedWrapperCallback(
--suppress_unresponsive_renderer_count_;
}
std::optional<std::vector<std::u16string>>
WebContentsImpl::GetClipboardTypesIfPolicyApplied(
const ui::ClipboardSequenceNumberToken& seqno) {
return GetContentClient()->browser()->GetClipboardTypesIfPolicyApplied(
seqno);
}
void WebContentsImpl::BindScreenOrientation(
RenderFrameHost* rfh,
mojo::PendingAssociatedReceiver<device::mojom::ScreenOrientation>
@@ -11982,9 +12014,11 @@ std::unique_ptr<PrefetchHandle> WebContentsImpl::StartPrefetch(
const blink::mojom::Referrer& referrer,
const std::optional<url::Origin>& referring_origin,
std::optional<net::HttpNoVarySearchData> no_vary_search_hint,
std::optional<PrefetchPriority> priority,
scoped_refptr<PreloadPipelineInfo> preload_pipeline_info,
base::WeakPtr<PreloadingAttempt> attempt,
std::optional<PreloadingHoldbackStatus> holdback_status_override) {
std::optional<PreloadingHoldbackStatus> holdback_status_override,
std::optional<base::TimeDelta> ttl) {
if (!base::FeatureList::IsEnabled(
features::kPrefetchBrowserInitiatedTriggers)) {
return nullptr;
@@ -12000,9 +12034,9 @@ std::unique_ptr<PrefetchHandle> WebContentsImpl::StartPrefetch(
use_prefetch_proxy);
auto container = std::make_unique<PrefetchContainer>(
*this, prefetch_url, prefetch_type, embedder_histogram_suffix, referrer,
referring_origin, std::move(no_vary_search_hint),
referring_origin, std::move(no_vary_search_hint), std::move(priority),
std::move(preload_pipeline_info), std::move(attempt),
holdback_status_override);
holdback_status_override, std::move(ttl));
return prefetch_service->AddPrefetchContainerWithHandle(std::move(container));
}
@@ -29,6 +29,7 @@
#include "device/vr/buildflags/buildflags.h"
#include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_switches.h"
#include "media/audio/audio_features.h"
#include "media/base/media_switches.h"
#include "net/base/features.h"
#include "services/device/public/cpp/device_features.h"
@@ -191,6 +192,10 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
raw_ref(features::kUseAXPositionForDocumentMarkers)},
{wf::EnableAOMAriaRelationshipProperties,
raw_ref(features::kEnableAriaElementReflection)},
#if BUILDFLAG(IS_ANDROID)
{wf::EnableAudioOutputDevices,
raw_ref(features::kAAudioPerStreamDeviceSelection)},
#endif
{wf::EnableBackgroundFetch, raw_ref(features::kBackgroundFetch)},
{wf::EnableBoundaryEventDispatchTracksNodeRemoval,
raw_ref(blink::features::kBoundaryEventDispatchTracksNodeRemoval)},
@@ -353,6 +358,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
raw_ref(network::features::kCompressionDictionaryTransportBackend)},
{"CookieDeprecationFacilitatedTesting",
raw_ref(features::kCookieDeprecationFacilitatedTesting)},
{"CSPHashesV1", raw_ref(network::features::kCSPScriptSrcHashesInV1)},
{"DocumentPolicyIncludeJSCallStacksInCrashReports",
raw_ref(blink::features::
kDocumentPolicyIncludeJSCallStacksInCrashReports),
@@ -465,14 +471,8 @@ void SetRuntimeFeaturesFromCommandLine(const base::CommandLine& command_line) {
{wrf::EnableScriptedSpeechSynthesis, switches::kDisableSpeechSynthesisAPI,
false},
{wrf::EnableSharedWorker, switches::kDisableSharedWorkers, false},
{wrf::EnableKeyboardFocusableScrollers,
blink::switches::kKeyboardFocusableScrollersEnabled, true},
{wrf::EnableKeyboardFocusableScrollers,
blink::switches::kKeyboardFocusableScrollersOptOut, false},
{wrf::EnableStandardizedBrowserZoom,
blink::switches::kDisableStandardizedBrowserZoom, false},
{wrf::EnableSelectParserRelaxation,
blink::switches::kDisableSelectParserRelaxation, false},
{wrf::EnableTextFragmentIdentifiers,
switches::kDisableScrollToTextFragment, false},
{wrf::EnableWebAuthenticationRemoteDesktopSupport,
@@ -14,6 +14,7 @@
#include "base/files/file_path.h"
#include "base/functional/callback_helpers.h"
#include "base/no_destructor.h"
#include "base/notimplemented.h"
#include "base/notreached.h"
#include "base/supports_user_data.h"
#include "base/task/sequenced_task_runner.h"
@@ -724,6 +725,12 @@ bool ContentBrowserClient::IsPrefetchWithServiceWorkerAllowed(
return true;
}
bool ContentBrowserClient::IsServiceWorkerSyntheticResponseAllowed(
content::BrowserContext* browser_context,
const GURL& url) {
return false;
}
void ContentBrowserClient::GrantCookieAccessDueToHeuristic(
content::BrowserContext* browser_context,
const net::SchemefulSite& top_frame_site,
@@ -737,6 +744,10 @@ bool ContentBrowserClient::AreThirdPartyCookiesGenerallyAllowed(
return true;
}
void ContentBrowserClient::PrewarmServiceWorkerRegistrationForDSE(
BrowserContext* browser_context,
ServiceWorkerContext& service_worker_context) {}
bool ContentBrowserClient::CanSendSCTAuditingReport(
BrowserContext* browser_context) {
return false;
@@ -957,7 +968,7 @@ ContentBrowserClient::GetDevToolsBackgroundServiceExpirations(
}
std::unique_ptr<TracingDelegate> ContentBrowserClient::CreateTracingDelegate() {
return nullptr;
return std::make_unique<TracingDelegate>();
}
bool ContentBrowserClient::IsSystemWideTracingEnabled() {
@@ -1778,16 +1789,6 @@ ContentBrowserClient::CreateResponsivenessCalculatorDelegate() {
return nullptr;
}
bool ContentBrowserClient::CanBackForwardCachedPageReceiveCookieChanges(
content::BrowserContext& browser_context,
const GURL& url,
const net::SiteForCookies& site_for_cookies,
const url::Origin& top_frame_origin,
const net::CookieSettingOverrides overrides,
base::optional_ref<const net::CookiePartitionKey> cookie_partition_key) {
return true;
}
void ContentBrowserClient::GetCloudIdentifiers(
const storage::FileSystemURL& url,
FileSystemAccessPermissionContext::HandleType handle_type,
@@ -2002,4 +2003,10 @@ ContentBrowserClient::MaybeCreateKeepAliveRequestTracker(
return nullptr;
}
std::optional<std::vector<std::u16string>>
ContentBrowserClient::GetClipboardTypesIfPolicyApplied(
const ui::ClipboardSequenceNumberToken& seqno) {
return std::nullopt;
}
} // namespace content
@@ -27,6 +27,7 @@
#include "base/files/file_path.h"
#include "base/files/memory_mapped_file.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/notreached.h"
@@ -374,9 +375,6 @@ void SetFeatureFlags() {
SetV8FlagsIfOverridden(features::kV8ExternalMemoryAccountedInGlobalLimit,
"--external-memory-accounted-in-global-limit",
"--no-external-memory-accounted-in-global-limit");
SetV8FlagsIfOverridden(features::kV8GCSpeedUsesCounters,
"--gc-speed-uses-counters",
"--no-gc-speed-uses-counters");
SetV8FlagsIfOverridden(features::kV8TurboFastApiCalls,
"--turbo-fast-api-calls", "--no-turbo-fast-api-calls");
SetV8FlagsIfOverridden(features::kV8MegaDomIC, "--mega-dom-ic",
@@ -19,6 +19,8 @@
#include "base/check.h"
#include "base/check_op.h"
#include "base/command_line.h"
#include "base/containers/flat_set.h"
#include "base/containers/to_vector.h"
#include "base/containers/unique_ptr_adapters.h"
#include "base/dcheck_is_on.h"
#include "base/feature_list.h"
@@ -224,6 +226,21 @@ class WrappedTestingCertVerifier : public net::CertVerifier {
return g_cert_verifier_for_testing->Verify(
params, verify_result, std::move(callback), out_req, net_log);
}
void Verify2QwacBinding(
const std::string& binding,
const std::string& hostname,
const scoped_refptr<net::X509Certificate>& tls_cert,
base::OnceCallback<void(const scoped_refptr<net::X509Certificate>&)>
callback,
const net::NetLogWithSource& net_log) override {
if (!g_cert_verifier_for_testing) {
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), nullptr));
return;
}
g_cert_verifier_for_testing->Verify2QwacBinding(
binding, hostname, tls_cert, std::move(callback), net_log);
}
void SetConfig(const Config& config) override {
if (!g_cert_verifier_for_testing) {
return;
@@ -2084,6 +2101,21 @@ void NetworkContext::VerifyCertForSignedExchange(
CTVerificationMode::kSignedExchange, std::move(callback));
}
void NetworkContext::Verify2QwacCertBinding(
const std::string& binding,
const std::string& hostname,
const scoped_refptr<net::X509Certificate>& tls_certificate,
Verify2QwacCertBindingCallback callback) {
net::CertVerifier* cert_verifier =
g_cert_verifier_for_testing ? g_cert_verifier_for_testing
: url_request_context_->cert_verifier();
cert_verifier->Verify2QwacBinding(
binding, hostname, tls_certificate, std::move(callback),
net::NetLogWithSource::Make(
url_request_context_->net_log(),
net::NetLogSourceType::CERT_VERIFIER_2QWAC_JOB));
}
void NetworkContext::NotifyExternalCacheHit(const GURL& url,
const std::string& http_method,
const net::NetworkIsolationKey& key,
@@ -2255,6 +2287,14 @@ void NetworkContext::VerifyCertificateForTesting(
net::NetLogSourceType::NONE));
}
void NetworkContext::GetTrustAnchorIDsForTesting(
GetTrustAnchorIDsForTestingCallback callback) {
std::move(callback).Run(
base::ToVector(url_request_context_->ssl_config_service()
->GetSSLContextConfig()
.trust_anchor_ids));
}
void NetworkContext::PreconnectSockets(
uint32_t num_streams,
const GURL& original_url,
@@ -2561,9 +2601,10 @@ void NetworkContext::OnHttpAuthDynamicParamsChanged(
http_auth_dynamic_network_service_params->allow_gssapi_library_load);
#endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_LINUX)
if (http_auth_dynamic_network_service_params->allowed_schemes.has_value()) {
http_auth_merged_preferences_.set_allowed_schemes(std::set<std::string>(
http_auth_dynamic_network_service_params->allowed_schemes->begin(),
http_auth_dynamic_network_service_params->allowed_schemes->end()));
http_auth_merged_preferences_.set_allowed_schemes(
base::flat_set<std::string>(
http_auth_dynamic_network_service_params->allowed_schemes->begin(),
http_auth_dynamic_network_service_params->allowed_schemes->end()));
} else {
http_auth_merged_preferences_.set_allowed_schemes(std::nullopt);
}
File diff suppressed because it is too large Load Diff
@@ -10,7 +10,8 @@ module blink.mojom;
// https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/use_counter_wiki.md
//
// Do not change assigned numbers of existing items: add new features
// to the end of the list.
// to the end of the list. It's OK to rename an existing feature without
// changing its numerical value.
//
// If you want to mark an item as no-longer-used, simply rename it, prefixing
// "kOBSOLETE_" before the existing name.
@@ -539,7 +540,7 @@ enum WebFeature {
kV8Event_InitEvent_Method = 867,
kV8KeyboardEvent_InitKeyboardEvent_Method = 868,
kV8MouseEvent_InitMouseEvent_Method = 869,
kV8MutationEvent_InitMutationEvent_Method = 870,
kOBSOLETE_V8MutationEvent_InitMutationEvent_Method = 870,
kV8StorageEvent_InitStorageEvent_Method = 871,
kV8UIEvent_InitUIEvent_Method = 873,
kRequestFileSystemNonWebbyOrigin = 876,
@@ -790,14 +791,14 @@ enum WebFeature {
kDocumentCreateEventErrorEvent = 1170,
kDocumentCreateEventFocusEvent = 1171,
kDocumentCreateEventHashChangeEvent = 1172,
kDocumentCreateEventMutationEvent = 1173,
kOBSOLETE_DocumentCreateEventMutationEvent = 1173,
kDocumentCreateEventPageTransitionEvent = 1174,
kDocumentCreateEventPopStateEvent = 1176,
kDocumentCreateEventTextEvent = 1182,
kDocumentCreateEventTransitionEvent = 1183,
kDocumentCreateEventWheelEvent = 1184,
kDocumentCreateEventTrackEvent = 1186,
kDocumentCreateEventMutationEvents = 1188,
kOBSOLETE_DocumentCreateEventMutationEvents = 1188,
kDocumentCreateEventSVGEvents = 1190,
kDocumentCreateEventDeviceMotionEvent = 1195,
kDocumentCreateEventDeviceOrientationEvent = 1196,
@@ -1575,7 +1576,7 @@ enum WebFeature {
kOBSOLETE_BatteryStatusInsecureOrigin = 2199,
kBatteryStatusCrossOrigin = 2200,
kBatteryStatusSameOriginABA = 2201,
kHasIDClassTagAttribute = 2203,
kOBSOLETE_HasIDClassTagAttribute = 2203,
kHasBeforeOrAfterPseudoElement = 2204,
kShapeOutsideMaybeAffectedInlineSize = 2205,
kShapeOutsideMaybeAffectedInlinePosition = 2206,
@@ -3009,26 +3010,26 @@ enum WebFeature {
kPaymentHandlerStandardizedPaymentMethodIdentifier = 3750,
kWebCodecsAudioEncoder = 3751,
kEmbeddedCrossOriginFrameWithoutFrameAncestorsOrXFO = 3752,
kAddressSpacePrivateSecureContextEmbeddedLocal = 3753,
kAddressSpacePrivateNonSecureContextEmbeddedLocal = 3754,
kAddressSpacePublicSecureContextEmbeddedLocal = 3755,
kAddressSpacePublicNonSecureContextEmbeddedLocal = 3756,
kAddressSpacePublicSecureContextEmbeddedPrivate = 3757,
kAddressSpacePublicNonSecureContextEmbeddedPrivate = 3758,
kAddressSpaceUnknownSecureContextEmbeddedLocal = 3759,
kAddressSpaceUnknownNonSecureContextEmbeddedLocal = 3760,
kAddressSpaceUnknownSecureContextEmbeddedPrivate = 3761,
kAddressSpaceUnknownNonSecureContextEmbeddedPrivate = 3762,
kAddressSpacePrivateSecureContextNavigatedToLocal = 3763,
kAddressSpacePrivateNonSecureContextNavigatedToLocal = 3764,
kAddressSpacePublicSecureContextNavigatedToLocal = 3765,
kAddressSpacePublicNonSecureContextNavigatedToLocal = 3766,
kAddressSpacePublicSecureContextNavigatedToPrivate = 3767,
kAddressSpacePublicNonSecureContextNavigatedToPrivate = 3768,
kAddressSpaceUnknownSecureContextNavigatedToLocal = 3769,
kAddressSpaceUnknownNonSecureContextNavigatedToLocal = 3770,
kAddressSpaceUnknownSecureContextNavigatedToPrivate = 3771,
kAddressSpaceUnknownNonSecureContextNavigatedToPrivate = 3772,
kAddressSpaceLocalSecureContextEmbeddedLoopbackV2 = 3753,
kAddressSpaceLocalNonSecureContextEmbeddedLoopbackV2 = 3754,
kAddressSpacePublicSecureContextEmbeddedLoopbackV2 = 3755,
kAddressSpacePublicNonSecureContextEmbeddedLoopbackV2 = 3756,
kAddressSpacePublicSecureContextEmbeddedLocalV2 = 3757,
kAddressSpacePublicNonSecureContextEmbeddedLocalV2 = 3758,
kAddressSpaceUnknownSecureContextEmbeddedLoopbackV2 = 3759,
kAddressSpaceUnknownNonSecureContextEmbeddedLoopbackV2 = 3760,
kAddressSpaceUnknownSecureContextEmbeddedLocalV2 = 3761,
kAddressSpaceUnknownNonSecureContextEmbeddedLocalV2 = 3762,
kAddressSpaceLocalSecureContextNavigatedToLoopbackV2 = 3763,
kAddressSpaceLocalNonSecureContextNavigatedToLoopbackV2 = 3764,
kAddressSpacePublicSecureContextNavigatedToLoopbackV2 = 3765,
kAddressSpacePublicNonSecureContextNavigatedToLoopbackV2 = 3766,
kAddressSpacePublicSecureContextNavigatedToLocalV2 = 3767,
kAddressSpacePublicNonSecureContextNavigatedToLocalV2 = 3768,
kAddressSpaceUnknownSecureContextNavigatedToLoopbackV2 = 3769,
kAddressSpaceUnknownNonSecureContextNavigatedToLoopbackV2 = 3770,
kAddressSpaceUnknownSecureContextNavigatedToLocalV2 = 3771,
kAddressSpaceUnknownNonSecureContextNavigatedToLocalV2 = 3772,
kOBSOLETE_RTCPeerConnectionSdpSemanticsPlanB = 3773,
// The items above roughly this point are available in the M89 branch.
kFetchRespondWithNoResponseWithUsedRequestBody = 3774,
@@ -3198,7 +3199,7 @@ enum WebFeature {
kXRFrameFillJointRadii = 3939,
kXRFrameFillPoses = 3940,
kOBSOLETE_kWindowOpenNewPopupBehaviorMismatch = 3941,
kExplicitPointerCaptureClickTargetDiff = 3942,
kOBSOLETE_kExplicitPointerCaptureClickTargetDiff = 3942,
// The items above roughly this point are available in the M92 branch.
kControlledNonBlobURLWorkerWillBeUncontrolled = 3943,
kMediaMetaThemeColor = 3944,
@@ -4180,8 +4181,8 @@ enum WebFeature {
kDOMNodeRemovedFromDocumentEventFired = 4888,
kDOMNodeInsertedIntoDocumentEventFired = 4889,
kDOMCharacterDataModifiedEventFired = 4890,
kAnyMutationEventFired = 4891,
kAnyMutationEventListenerAdded = 4892,
kOBSOLETE_AnyMutationEventFired = 4891,
kOBSOLETE_AnyMutationEventListenerAdded = 4892,
kBadgeSetWithoutNotificationPermissionInBrowserWindow = 4893,
kBadgeSetWithoutNotificationPermissionInAppWindow = 4894,
kBadgeSetWithoutNotificationPermissionInWorker = 4895,
@@ -4505,7 +4506,7 @@ enum WebFeature {
kGeolocationSucceeded = 5201,
kGeolocationSucceededWithoutInjectionMitigation = 5202,
kSharedWorkerScriptUnderServiceWorkerControlIsBlob = 5203,
kDisableThirdPartyStoragePartitioning3 = 5204,
kOBSOLETE_DisableThirdPartyStoragePartitioning3 = 5204,
kControlledFrameElement = 5205,
kCanvas2DIsPointInPath = 5206,
kCanvas2DIsPointInStroke = 5207,
@@ -4899,6 +4900,11 @@ enum WebFeature {
kSchedulerYieldNonTrivialInherit = 5590,
kSchedulerYieldNonTrivialInheritCrossFrameIgnored = 5591,
kLocalNetworkAccessPrivateAliasUse = 5592,
kV8URLPattern_Generate_Method = 5593,
kSelectMultipleSizeOne = 5594,
kWebGPUFeatureLevelCompatibility = 5595,
kOverscrollBehaviorOnNonScrollableScrollContainer = 5596,
kFetchRetry = 5612,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. Also don't add extra
@@ -507,4 +507,8 @@ struct WebPreferences {
// Whether PaymentRequest is enabled. Controlled by WebView settings on
// WebView and by `kWebPayments` feature flag everywhere.
bool payment_request_enabled = false;
bool api_based_fingerprinting_interventions_enabled = false;
bool content_based_fingerprinting_protection_enabled = false;
};
@@ -64,5 +64,4 @@ enum ReplaceState { "active", "removed", "persisted" };
[Measure] attribute EventHandler onremove;
[CallWith=ScriptState] readonly attribute Promise<Animation> finished;
[CallWith=ScriptState] readonly attribute Promise<Animation> ready;
[RuntimeEnabled=AnimationTrigger] attribute AnimationTrigger? trigger;
};
@@ -17,4 +17,6 @@ enum AnimationTriggerType { "once", "repeat", "alternate", "state" };
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeEnd;
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeStart;
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeEnd;
[RaisesException] void addAnimation(Animation animation);
void removeAnimation(Animation animation);
};
@@ -234,7 +234,7 @@ std::optional<MediaQueryExpValue> ConsumeUnparsed(
CSSVariableData* data =
CSSVariableData::Create(value_string, /* is_animation_tainted= */ false,
/* is_attr_tainted= */ false,
/*needs_variable_resolution=*/false);
/*needs_variable_resolution=*/true);
const CSSValue* value =
MakeGarbageCollected<CSSUnparsedDeclarationValue>(data, &context);
return MediaQueryExpValue(*value);
@@ -171,6 +171,7 @@ dictionary SetHTMLUnsafeOptions {
// Element Timing
[CEReactions, Reflect=elementtiming] attribute DOMString elementTiming;
[RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming] attribute DOMString containerTiming;
[RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-ignore] attribute boolean containerTimingIgnore;
// Heading Offset
[CEReactions, RuntimeEnabled=HeadingOffset] attribute unsigned long headingOffset;
@@ -54,32 +54,6 @@ interface ShadowRoot : DocumentFragment {
// See https://crbug.com/346835896
[RuntimeEnabled=ShadowRootReferenceTarget] attribute DOMString referenceTarget;
// Scoped element creation APIs
// https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries#scoped-element-creation-apis
[
NewObject, PerWorldBindings, RaisesException, CEReactions,
RuntimeEnabled=ScopedCustomElementRegistry,
ImplementedAs=CreateElementForBinding
]
Element createElement(DOMString localName);
[
NewObject, PerWorldBindings, RaisesException, CEReactions,
RuntimeEnabled=ScopedCustomElementRegistry,
ImplementedAs=CreateElementForBinding
]
Element createElement(DOMString localName, (DOMString or ElementCreationOptions) options);
[
NewObject, RaisesException, CEReactions,
RuntimeEnabled=ScopedCustomElementRegistry
]
Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName);
[
NewObject, RaisesException, CEReactions,
RuntimeEnabled=ScopedCustomElementRegistry
]
Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName,
(DOMString or ElementCreationOptions) options);
[RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe(HTMLString string);
[RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLUnsafe,CEReactions] void setHTMLUnsafe(HTMLString html, SetHTMLUnsafeOptions options);
[RuntimeEnabled=SanitizerAPI,RaisesException,MeasureAs=SetHTMLSafe,CEReactions] void setHTML(DOMString html, optional SetHTMLOptions options = {});
@@ -6,15 +6,9 @@
data: [
"DOMActivate",
"DOMCharacterDataModified",
"DOMContentLoaded",
"DOMFocusIn",
"DOMFocusOut",
"DOMNodeInserted",
"DOMNodeInsertedIntoDocument",
"DOMNodeRemoved",
"DOMNodeRemovedFromDocument",
"DOMSubtreeModified",
"abort",
"abortpayment",
"accessibleclick",
@@ -1,45 +0,0 @@
/*
* Copyright (C) 2006 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
// https://w3c.github.io/uievents/#interface-MutationEvent
[
Exposed=Window,
RuntimeEnabled=MutationEvents
] interface MutationEvent : Event {
// attrChangeType
const unsigned short MODIFICATION = 1;
const unsigned short ADDITION = 2;
const unsigned short REMOVAL = 3;
readonly attribute Node? relatedNode;
readonly attribute DOMString prevValue;
readonly attribute DOMString newValue;
readonly attribute DOMString attrName;
readonly attribute unsigned short attrChange;
// TODO(foolip): None of the initMutationEvent() arguments should be optional.
[Measure] void initMutationEvent(DOMString type,
optional boolean bubbles = false,
optional boolean cancelable = false,
optional Node? relatedNode = null,
optional DOMString prevValue = "undefined",
optional DOMString newValue = "undefined",
optional DOMString attrName = "undefined",
optional unsigned short attrChange = 0);
};
@@ -48,4 +48,7 @@ enum SecurityPolicyViolationEventDisposition {
readonly attribute long lineNumber;
readonly attribute long columnNumber;
readonly attribute DOMString sample;
// Contains the hashes of scripts that were blocked from being run through
// eval due to unsafe-eval not being set.
[RuntimeEnabled=CSPHashesV1] readonly attribute DOMString evalHash;
};
@@ -24,4 +24,5 @@ dictionary SecurityPolicyViolationEventInit : EventInit {
long columnNumber = 0;
DOMString violatedDirective = "";
[RuntimeEnabled=CSPHashesV1] DOMString evalHash;
};
@@ -8,5 +8,5 @@
constructor(DOMString type, optional ToggleEventInit eventInitDict = {});
readonly attribute DOMString oldState;
readonly attribute DOMString newState;
[RuntimeEnabled=ToggleEventSource] readonly attribute Element source;
[RuntimeEnabled=ToggleEventSource] readonly attribute Element? source;
};
@@ -35,6 +35,7 @@
#include <vector>
#include "base/command_line.h"
#include "base/debug/alias.h"
#include "base/debug/crash_logging.h"
#include "base/debug/dump_without_crashing.h"
#include "base/memory/scoped_refptr.h"
@@ -252,16 +253,6 @@ HashSet<WebViewImpl*>& WebViewImpl::AllInstances() {
return all_instances;
}
static bool g_should_use_external_popup_menus = false;
void WebView::SetUseExternalPopupMenus(bool use_external_popup_menus) {
g_should_use_external_popup_menus = use_external_popup_menus;
}
bool WebViewImpl::UseExternalPopupMenus() {
return g_should_use_external_popup_menus;
}
namespace {
class EmptyEventListener final : public NativeEventListener {
@@ -800,8 +791,8 @@ float WebViewImpl::MaximumLegiblePageScale() const {
}
void WebViewImpl::ComputeScaleAndScrollForBlockRect(
const gfx::Point& hit_point_in_root_frame,
const gfx::Rect& block_rect_in_root_frame,
gfx::Rect hit_rect_in_root_frame,
gfx::Rect block_rect_in_root_frame,
float padding,
float default_scale_when_already_legible,
float& scale,
@@ -810,9 +801,7 @@ void WebViewImpl::ComputeScaleAndScrollForBlockRect(
scale = PageScaleFactor();
scroll = gfx::Point();
gfx::Rect rect = block_rect_in_root_frame;
if (!rect.IsEmpty()) {
if (!block_rect_in_root_frame.IsEmpty()) {
float default_margin = doubleTapZoomContentDefaultMargin;
float minimum_margin = doubleTapZoomContentMinimumMargin;
// We want the margins to have the same physical size, which means we
@@ -821,11 +810,15 @@ void WebViewImpl::ComputeScaleAndScrollForBlockRect(
// we express them as a fraction of the target rectangle: this will be
// correct if we end up fully zooming to it, and won't matter if we
// don't.
rect = WidenRectWithinPageBounds(
rect, static_cast<int>(default_margin * rect.width() / size_.width()),
static_cast<int>(minimum_margin * rect.width() / size_.width()));
block_rect_in_root_frame = WidenRectWithinPageBounds(
block_rect_in_root_frame,
base::ClampFloor(default_margin * block_rect_in_root_frame.width() /
size_.width()),
base::ClampFloor(minimum_margin * block_rect_in_root_frame.width() /
size_.width()));
// Fit block to screen, respecting limits.
scale = static_cast<float>(size_.width()) / rect.width();
scale =
static_cast<float>(size_.width()) / block_rect_in_root_frame.width();
scale = std::min(scale, MaximumLegiblePageScale());
if (PageScaleFactor() < default_scale_when_already_legible)
scale = std::max(scale, default_scale_when_already_legible);
@@ -839,32 +832,57 @@ void WebViewImpl::ComputeScaleAndScrollForBlockRect(
// double-tap zoom strategy (fitting the containing block to the screen)
// though.
float screen_width = size_.width() / scale;
float screen_height = size_.height() / scale;
float viewport_width = size_.width() / scale;
float viewport_height = size_.height() / scale;
// Scroll to vertically align the block.
if (rect.height() < screen_height) {
// Vertically center short blocks.
rect.Offset(0, -0.5 * (screen_height - rect.height()));
if (RuntimeEnabledFeatures::AlignZoomToCenterEnabled()) {
const float kMarginPadding = 20 / scale;
hit_rect_in_root_frame.Intersect(
gfx::Rect(hit_rect_in_root_frame.origin(),
gfx::Size(viewport_width - kMarginPadding,
viewport_height - kMarginPadding)));
// If the block fits in the viewport, center the block.
// Otherwise center the target point.
gfx::Point center_point_in_root_frame(
block_rect_in_root_frame.width() <= viewport_width
? block_rect_in_root_frame.CenterPoint().x()
: hit_rect_in_root_frame.CenterPoint().x(),
block_rect_in_root_frame.height() <= viewport_height
? block_rect_in_root_frame.CenterPoint().y()
: hit_rect_in_root_frame.CenterPoint().y());
gfx::Vector2d viewport_center(viewport_width * 0.5, viewport_height * 0.5);
gfx::Point frame_offset = center_point_in_root_frame - viewport_center;
scroll = MainFrameImpl()->GetFrameView()->RootFrameToDocument(frame_offset);
} else {
// Ensure position we're zooming to (+ padding) isn't off the bottom of
// the screen.
rect.set_y(std::max<float>(
rect.y(), hit_point_in_root_frame.y() + padding - screen_height));
} // Otherwise top align the block.
// TODO(crbug.com/422382412): Remove this branch once the above
// lands in stable.
// Scroll to vertically align the block.
if (block_rect_in_root_frame.height() < viewport_height) {
// Vertically center short blocks.
block_rect_in_root_frame.Offset(
0, -0.5 * (viewport_height - block_rect_in_root_frame.height()));
} else {
// Ensure position we're zooming to (+ padding) isn't off the bottom of
// the screen.
block_rect_in_root_frame.set_y(std::max<float>(
block_rect_in_root_frame.y(),
hit_rect_in_root_frame.y() + padding - viewport_height));
} // Otherwise top align the block.
// Do the same thing for horizontal alignment.
if (rect.width() < screen_width) {
rect.Offset(-0.5 * (screen_width - rect.width()), 0);
} else {
rect.set_x(std::max<float>(
rect.x(), hit_point_in_root_frame.x() + padding - screen_width));
// Do the same thing for horizontal alignment.
if (block_rect_in_root_frame.width() < viewport_width) {
block_rect_in_root_frame.Offset(
-0.5 * (viewport_width - block_rect_in_root_frame.width()), 0);
} else {
block_rect_in_root_frame.set_x(std::max<float>(
block_rect_in_root_frame.x(),
hit_rect_in_root_frame.x() + padding - viewport_width));
}
scroll.set_x(block_rect_in_root_frame.x());
scroll.set_y(block_rect_in_root_frame.y());
scale = ClampPageScaleFactorToLimits(scale);
scroll = MainFrameImpl()->GetFrameView()->RootFrameToDocument(scroll);
}
scroll.set_x(rect.x());
scroll.set_y(rect.y());
scale = ClampPageScaleFactorToLimits(scale);
scroll = MainFrameImpl()->GetFrameView()->RootFrameToDocument(scroll);
scroll =
GetPage()->GetVisualViewport().ClampDocumentOffsetAtScale(scroll, scale);
}
@@ -950,9 +968,9 @@ void WebViewImpl::AnimateDoubleTapZoom(const gfx::Point& point_in_root_frame,
float scale;
gfx::Point scroll;
gfx::Rect rect_in_root_frame(point_in_root_frame, gfx::Size(1, 1));
ComputeScaleAndScrollForBlockRect(
point_in_root_frame, rect_to_zoom, touchPointPadding,
rect_in_root_frame, rect_to_zoom, touchPointPadding,
MinimumPageScaleFactor() * doubleTapZoomAlreadyLegibleRatio, scale,
scroll);
@@ -1007,7 +1025,7 @@ void WebViewImpl::ZoomToFindInPageRect(const gfx::Rect& rect_in_root_frame) {
float scale;
gfx::Point scroll;
ComputeScaleAndScrollForBlockRect(rect_in_root_frame.origin(), block_bounds,
ComputeScaleAndScrollForBlockRect(rect_in_root_frame, block_bounds,
nonUserInitiatedPointPadding,
MinimumPageScaleFactor(), scale, scroll);
@@ -1905,6 +1923,10 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs,
RuntimeEnabledFeatures::SetPaymentRequestEnabled(
prefs.payment_request_enabled);
if (prefs.api_based_fingerprinting_interventions_enabled) {
RuntimeEnabledFeatures::SetReduceScreenSizeEnabled(true);
}
}
void WebViewImpl::ThemeChanged() {
@@ -3838,35 +3860,6 @@ Element* WebViewImpl::FocusedElement() const {
return document->FocusedElement();
}
WebHitTestResult WebViewImpl::HitTestResultForTap(
const gfx::Point& tap_point_window_pos,
const gfx::Size& tap_area) {
auto* main_frame = DynamicTo<LocalFrame>(page_->MainFrame());
if (!main_frame)
return HitTestResult();
WebGestureEvent tap_event(WebInputEvent::Type::kGestureTap,
WebInputEvent::kNoModifiers, base::TimeTicks::Now(),
WebGestureDevice::kTouchscreen);
// GestureTap is only ever from a touchscreen.
tap_event.SetPositionInWidget(gfx::PointF(tap_point_window_pos));
tap_event.data.tap.tap_count = 1;
tap_event.data.tap.width = tap_area.width();
tap_event.data.tap.height = tap_area.height();
WebGestureEvent scaled_event =
TransformWebGestureEvent(MainFrameImpl()->GetFrameView(), tap_event);
HitTestResult result =
main_frame->GetEventHandler()
.HitTestResultForGestureEvent(
scaled_event, HitTestRequest::kReadOnly | HitTestRequest::kActive)
.GetHitTestResult();
result.SetToShadowHostIfInUAShadowRoot();
return result;
}
void WebViewImpl::SetTabsToLinks(bool enable) {
tabs_to_links_ = enable;
}
@@ -19,11 +19,10 @@ dictionary RetryOptions {
// A factor of 1.0 means fixed delay. Defaults to browser-configured value if not specified.
double? backoffFactor;
// Optional: Maximum total time allowed for all retry attempts in milliseconds,
// measured from when the first attempt fails. If this duration is exceeded,
// no further retries will be made, even if maxAttempts has not been reached.
// Defaults to browser-configured value if not specified.
unsigned long? maxAge;
// Maximum total time allowed for all retry attempts in milliseconds, measure
// from when the first request starts. If this duration is exceeded, no further
// retries will be made, even if maxAttempts has not been reached.
required unsigned long maxAge;
// Optional: Controls whether the browser should continue attempting retries
// even after the originating document has been unloaded.
@@ -135,8 +135,8 @@
[HighEntropy=Direct, MeasureAs=WindowPageXOffset, Replaceable] readonly attribute double pageXOffset;
[HighEntropy=Direct, MeasureAs=WindowScrollY, Replaceable] readonly attribute double scrollY;
[HighEntropy=Direct, MeasureAs=WindowPageYOffset, Replaceable] readonly attribute double pageYOffset;
void scroll(optional ScrollToOptions options = {});
void scroll(unrestricted double x, unrestricted double y);
[ImplementedAs=scrollTo] void scroll(optional ScrollToOptions options = {});
[ImplementedAs=scrollTo] void scroll(unrestricted double x, unrestricted double y);
void scrollTo(optional ScrollToOptions options = {});
void scrollTo(unrestricted double x, unrestricted double y);
void scrollBy(optional ScrollToOptions options = {});
@@ -0,0 +1,8 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
dictionary HighlightHitResult {
Highlight highlight;
sequence<AbstractRange> ranges;
};
@@ -12,7 +12,7 @@
// shadow trees if the shadow root is passed in as part of the |options|
// parameter.
[RuntimeEnabled=HighlightsFromPoint]
sequence<Highlight> highlightsFromPoint(
sequence<HighlightHitResult> highlightsFromPoint(
float x,
float y,
optional HighlightsFromPointOptions options = {});
@@ -24,6 +24,18 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
dictionary CanvasHitTestRect {
double x;
double y;
double? width;
double? height;
};
dictionary CanvasElementHitTestRegion {
Element element;
CanvasHitTestRect rect;
};
// https://html.spec.whatwg.org/C/canvas.html#htmlcanvaselement
[
Exposed=Window,
@@ -59,6 +59,7 @@
// CSSOM View Module
// https://drafts.csswg.org/cssom-view/#extensions-to-the-htmlelement-interface
[RuntimeEnabled=HTMLElementScrollParent, ImplementedAs=unclosedScrollParent] readonly attribute Element? scrollParent;
[PerWorldBindings, ImplementedAs=unclosedOffsetParent] readonly attribute Element? offsetParent;
[ImplementedAs=offsetTopForBinding] readonly attribute long offsetTop;
[ImplementedAs=offsetLeftForBinding] readonly attribute long offsetLeft;
@@ -8,6 +8,9 @@
RuntimeEnabled=MenuElements
] interface HTMLMenuItemElement : HTMLElement {
[CEReactions, Reflect] attribute boolean disabled;
[CEReactions, Reflect=checked] attribute boolean defaultChecked;
[ImplementedAs=Checked] attribute boolean checked;
[CEReactions] attribute boolean checked;
// Command Invokers
[RuntimeEnabled=HTMLCommandAttributes, CEReactions, Reflect=commandfor] attribute Element? commandForElement;
[RuntimeEnabled=HTMLCommandAttributes, CEReactions] attribute DOMString command;
};
@@ -8,7 +8,8 @@
] interface ReadableStreamBYOBReader {
[CallWith=ScriptState, RaisesException] constructor(ReadableStream stream);
[CallWith=ScriptState, RaisesException] Promise<ReadableStreamReadResult> read(ArrayBufferView view);
[CallWith=ScriptState, RaisesException] Promise<ReadableStreamReadResult> read(ArrayBufferView view, optional ReadableStreamBYOBReaderReadOptions options = {});
[CallWith=ScriptState, RaisesException] void releaseLock();
};
@@ -0,0 +1,9 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://streams.spec.whatwg.org/#dictdef-readablestreambyobreaderreadoptions
dictionary ReadableStreamBYOBReaderReadOptions {
[EnforceRange] unsigned long long min = 1;
};
@@ -325,7 +325,7 @@ interface Internals {
unsigned long canvasFontCacheMaxFonts();
void forceLoseCanvasContext(CanvasRenderingContext2D ctx);
void forceLoseCanvasContext(OffscreenCanvasRenderingContext2D ctx);
void disableCanvasAcceleration(HTMLCanvasElement canvas);
void disableCanvasAccelerationForCanvas2D(HTMLCanvasElement canvas);
boolean isCanvasImageSourceAccelerated(HTMLCanvasElement imageSource);
boolean isCanvasImageSourceAccelerated(OffscreenCanvas imageSource);
@@ -0,0 +1,18 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://github.com/WICG/soft-navigations
[Exposed=Window, RuntimeEnabled=SoftNavigationHeuristics]
interface InteractionContentfulPaint : PerformanceEntry {
readonly attribute DOMHighResTimeStamp renderTime;
readonly attribute DOMHighResTimeStamp loadTime;
readonly attribute unsigned long long size;
readonly attribute DOMString id;
readonly attribute DOMString url;
readonly attribute Element? element;
[CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON();
};
InteractionContentfulPaint includes PaintTimingMixin;
@@ -74,9 +74,6 @@ interface Performance : EventTarget {
[Exposed=Window, SameObject, SaveSameObject] readonly attribute EventCounts eventCounts;
[Exposed=Window, RuntimeEnabled=EventTimingInteractionCount] readonly attribute unsigned long long interactionCount;
// TODO(https://crbug.com/1457049): remove this once visited links are partitioned.
[RuntimeEnabled=SoftNavigationHeuristicsExposeFPAndFCP] readonly attribute boolean softNavPaintMetricsSupported;
[Exposed=Window, RuntimeEnabled=UserDefinedEntryPointTiming] Function bind(Function innerFunction, optional any thisArg, any... args);
[CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON();
@@ -86,5 +86,10 @@ interface PerformanceResourceTiming : PerformanceEntry {
readonly attribute DOMHighResTimeStamp finalResponseHeadersStart;
readonly attribute DOMHighResTimeStamp firstInterimResponseStart;
// PerformanceResourceTiming#initiatorUrl
// see: https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/ResourceTimingInitiatorInfo/explainer.md
[RuntimeEnabled=ResourceTimingInitiator]
readonly attribute DOMString initiatorUrl;
[CallWith=ScriptState, ImplementedAs=toJSONForBinding] object toJSON();
};
@@ -6,3 +6,4 @@
interface SoftNavigationEntry : PerformanceEntry {
};
SoftNavigationEntry includes PaintTimingMixin;
@@ -24,6 +24,9 @@ enum URLPatternComponent { "protocol", "username", "password", "hostname",
[RaisesException, CallWith=ScriptState, Measure]
URLPatternResult? exec(optional URLPatternInput input = {}, optional USVString baseURL);
[RuntimeEnabled=URLPatternGenerate, RaisesException, Measure]
USVString generate(URLPatternComponent component, record<USVString, USVString> groups);
readonly attribute USVString protocol;
readonly attribute USVString username;
readonly attribute USVString password;
@@ -10,6 +10,7 @@ dictionary LanguageModelCloneOptions {
dictionary LanguageModelPromptOptions {
object responseConstraint;
boolean omitResponseConstraintInput = false;
AbortSignal signal;
};
@@ -16,6 +16,9 @@ dictionary LanguageModelMessage {
// The DOMString branch is shorthand for `[{ type: "text", value: providedValue }]`
required (DOMString or sequence<LanguageModelMessageContent>) content;
// Whether this message is an assistant response prefix.
boolean prefix = false;
};
dictionary LanguageModelMessageContent {
@@ -23,9 +26,13 @@ dictionary LanguageModelMessageContent {
required LanguageModelMessageValue value;
};
// LINT.IfChange
enum LanguageModelMessageRole { "system", "user", "assistant" };
// LINT.ThenChange(//third_party/blink/renderer/modules/ai/ai_metrics.h:LanguageModelInputRole)
// LINT.IfChange
enum LanguageModelMessageType { "text", "image", "audio" };
// LINT.ThenChange(//third_party/blink/renderer/modules/ai/ai_metrics.h:LanguageModelInputType)
typedef (
ImageBitmapSource
@@ -61,6 +61,9 @@ interface CanvasRenderingContext2D {
void drawElement(Element element, unrestricted double x, unrestricted double y,
unrestricted double dwidth, unrestricted double dheight);
[RuntimeEnabled=CanvasDrawElement, RaisesException]
void setHitTestRegions(sequence<CanvasElementHitTestRegion> hitTestRegions);
[MeasureAs=GetCanvas2DContextAttributes] CanvasRenderingContext2DSettings getContextAttributes();
};
@@ -8,4 +8,5 @@ dictionary PaymentCredentialInstrument {
required USVString displayName;
required USVString icon;
boolean iconMustBeShown = true;
[RuntimeEnabled=SecurePaymentConfirmationUxRefresh] USVString details;
};
@@ -1,8 +1,8 @@
// Copyright 2024 The Chromium Authors
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
dictionary IDBGetAllRecordsOptions {
dictionary IDBGetAllOptions {
any query = null;
[EnforceRange] unsigned long count;
IDBCursorDirection direction = "next";
@@ -36,9 +36,10 @@
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest get(any key);
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest getKey(any key);
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAll(optional any query = null,
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAll(optional any query_or_options = null,
optional [EnforceRange] unsigned long count);
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAllKeys(optional any query = null,
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest getAllKeys(optional any query_or_options = null,
optional [EnforceRange] unsigned long count);
[NewObject, CallWith=ScriptState, RaisesException] IDBRequest count(optional any key = null);
@@ -48,5 +49,5 @@
optional IDBCursorDirection direction = "next");
[RuntimeEnabled=IndexedDbGetAllRecords, NewObject, CallWith=ScriptState, RaisesException]
IDBRequest getAllRecords(optional IDBGetAllRecordsOptions options = {});
IDBRequest getAllRecords(optional IDBGetAllOptions options = {});
};
@@ -58,15 +58,15 @@
IDBRequest getKey(any key);
[CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException]
IDBRequest getAll(optional any query = null,
IDBRequest getAll(optional any query_or_options = null,
optional [EnforceRange] unsigned long count);
[CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException]
IDBRequest getAllKeys(optional any query = null,
IDBRequest getAllKeys(optional any query_or_options = null,
optional [EnforceRange] unsigned long count);
[RuntimeEnabled=IndexedDbGetAllRecords, CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException]
IDBRequest getAllRecords(optional IDBGetAllRecordsOptions options = {});
IDBRequest getAllRecords(optional IDBGetAllOptions options = {});
[CallWith=ScriptState, MeasureAs=IndexedDBRead, NewObject, RaisesException]
IDBRequest count(optional any key = null);
@@ -340,12 +340,9 @@ typedef record<USVString, MLTensor> MLNamedTensors;
CallWith=ScriptState
] MLOpSupportLimits opSupportLimits();
// TODO(crbug.com/345352987): remove device once MLContext(gpuDevice) is
// implemented.
[
RuntimeEnabled=MachineLearningNeuralNetwork,
CallWith=ScriptState,
RaisesException
] Promise<GPUBuffer> exportToGPU(
GPUDevice device, MLTensor tensor);
] Promise<GPUBuffer> exportToGPU(MLTensor tensor);
};
@@ -0,0 +1,9 @@
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// https://w3c.github.io/secure-payment-confirmation/#sctn-paymententitylogo-dictionary
dictionary PaymentEntityLogo {
required USVString url;
required USVString label;
};

Some files were not shown because too many files have changed in this diff Show More