[AUTO][FILECONTROL] - version 141.0.7390.55 (#2355)
[AUTO][FILECONTROL] - version 141.0.7390.55
This commit is contained in:
@@ -1 +1 @@
|
||||
140.0.7339.186
|
||||
141.0.7390.55
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
#include "android_webview/common/aw_paths.h"
|
||||
#include "android_webview/common/aw_switches.h"
|
||||
#include "android_webview/common/url_constants.h"
|
||||
#include "base/android/build_info.h"
|
||||
#include "base/android/locale_utils.h"
|
||||
#include "base/android/yield_to_looper_checker.h"
|
||||
#include "base/base_paths_android.h"
|
||||
@@ -173,8 +172,7 @@ bool g_created_network_context_params = false;
|
||||
// On apps targeting API level O or later, check cleartext is enforced.
|
||||
bool g_check_cleartext_permitted = false;
|
||||
|
||||
BASE_FEATURE(kWebViewOptimizeXrwNavigationFlow,
|
||||
"WebViewOptimizeXrwNavigationFlow",
|
||||
BASE_FEATURE(WebViewOptimizeXrwNavigationFlow,
|
||||
base::FEATURE_ENABLED_BY_DEFAULT);
|
||||
|
||||
// A throttle which checks if the XRW origin trial is enabled for this
|
||||
@@ -661,6 +659,11 @@ void AwContentBrowserClient::OverrideWebPreferences(
|
||||
aw_settings->PopulateWebPreferences(web_prefs);
|
||||
}
|
||||
|
||||
// This preference is needed for back-forward transitions, but they are not
|
||||
// enabled for webview (crbug.com/361600214).
|
||||
web_prefs->increment_local_surface_id_for_mainframe_same_doc_navigation =
|
||||
false;
|
||||
|
||||
AwWebContentsDelegate* delegate =
|
||||
static_cast<AwWebContentsDelegate*>(web_contents->GetDelegate());
|
||||
web_prefs->modal_context_menu =
|
||||
|
||||
@@ -155,8 +155,6 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
|
||||
// on WebView.
|
||||
aw_feature_overrides.DisableFeature(::features::kDigitalGoodsApi);
|
||||
|
||||
aw_feature_overrides.DisableFeature(::features::kDynamicColorGamut);
|
||||
|
||||
// COOP is not supported on WebView yet. See:
|
||||
// https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/XBKAGb2_7uAi.
|
||||
aw_feature_overrides.DisableFeature(
|
||||
@@ -195,6 +193,10 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
|
||||
// FedCM is not yet supported on WebView.
|
||||
aw_feature_overrides.DisableFeature(::features::kFedCm);
|
||||
|
||||
// Disable Digital Credentials API on WebView.
|
||||
aw_feature_overrides.DisableFeature(::features::kWebIdentityDigitalCredentials);
|
||||
aw_feature_overrides.DisableFeature(::features::kWebIdentityDigitalCredentialsCreation);
|
||||
|
||||
// TODO(crbug.com/40272633): Web MIDI permission prompt for all usage.
|
||||
aw_feature_overrides.DisableFeature(blink::features::kBlockMidiByDefault);
|
||||
|
||||
@@ -208,11 +210,9 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
|
||||
// enabling site isolation. See crbug.com/356170748.
|
||||
aw_feature_overrides.DisableFeature(blink::features::kPaintHoldingForIframes);
|
||||
|
||||
// Since Default Nav Transition does not support WebView yet, disable the
|
||||
// LocalSurfaceId increment flag. TODO(crbug.com/361600214): Re-enable for
|
||||
// WebView when we start introducing this feature.
|
||||
aw_feature_overrides.DisableFeature(
|
||||
blink::features::kIncrementLocalSurfaceIdForMainframeSameDocNavigation);
|
||||
// Default Nav Transition does not support WebView.
|
||||
// TODO(crbug.com/434928245): cleanup this feature gate in M141.
|
||||
aw_feature_overrides.DisableFeature(blink::features::kBackForwardTransitions);
|
||||
|
||||
// Disabling this feature for WebView, since it can switch focus when scrolled
|
||||
// in cases with multiple views which can trigger HTML focus changes that
|
||||
@@ -300,4 +300,17 @@ void AwFieldTrials::RegisterFeatureOverrides(base::FeatureList* feature_list) {
|
||||
// AAudio per-stream device selection is not supported on WebView.
|
||||
aw_feature_overrides.DisableFeature(
|
||||
features::kAAudioPerStreamDeviceSelection);
|
||||
|
||||
// Disable background media. This is not used in WebView, and also it
|
||||
// side-steps an issue where JNI calls in renderer does not reliably work.
|
||||
// Long-term fix is to plumb this info to the renderer and remove Java calls
|
||||
// there. crbug.com/438910961
|
||||
aw_feature_overrides.DisableFeature(
|
||||
features::kAndroidEnableBackgroundMediaLargeFormFactors);
|
||||
|
||||
// Local Network Access restrictions should not be enforced in WebView.
|
||||
// The LNA permission is auto-granted in WebView, but the permission
|
||||
// policy currently blocks iframes from using it. crbug.com/442879527
|
||||
aw_feature_overrides.DisableFeature(
|
||||
network::features::kLocalNetworkAccessChecks);
|
||||
}
|
||||
|
||||
@@ -901,6 +901,9 @@ by a child template that "extends" this file.
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/quick_action_search_widget_small_info" />
|
||||
@@ -913,6 +916,9 @@ by a child template that "extends" this file.
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/quick_action_search_widget_dino_info" />
|
||||
@@ -949,6 +955,9 @@ by a child template that "extends" this file.
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
||||
</intent-filter>
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/search_widget_info" />
|
||||
|
||||
+20
-4
@@ -32,6 +32,8 @@ import static androidx.browser.trusted.LaunchHandlerClientMode.FOCUS_EXISTING;
|
||||
import static androidx.browser.trusted.LaunchHandlerClientMode.NAVIGATE_EXISTING;
|
||||
import static androidx.browser.trusted.LaunchHandlerClientMode.NAVIGATE_NEW;
|
||||
|
||||
import static org.chromium.chrome.browser.app.tab_activity_glue.PopupCreator.EXTRA_REQUESTED_WINDOW_FEATURES;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.PendingIntent;
|
||||
@@ -72,7 +74,7 @@ import androidx.browser.trusted.sharing.ShareData;
|
||||
import androidx.browser.trusted.sharing.ShareTarget;
|
||||
|
||||
import org.chromium.base.ApiCompatibilityUtils;
|
||||
import org.chromium.base.BuildInfo;
|
||||
import org.chromium.base.DeviceInfo;
|
||||
import org.chromium.base.IntentUtils;
|
||||
import org.chromium.base.LocaleUtils;
|
||||
import org.chromium.base.Log;
|
||||
@@ -95,6 +97,7 @@ import org.chromium.chrome.browser.toolbar.adaptive.AdaptiveToolbarButtonVariant
|
||||
import org.chromium.chrome.browser.ui.google_bottom_bar.GoogleBottomBarCoordinator;
|
||||
import org.chromium.chrome.browser.ui.google_bottom_bar.proto.IntentParams.GoogleBottomBarIntentParams;
|
||||
import org.chromium.chrome.browser.ui.web_app_header.WebAppHeaderUtils;
|
||||
import org.chromium.chrome.browser.util.WindowFeatures;
|
||||
import org.chromium.components.browser_ui.widget.TintedDrawable;
|
||||
import org.chromium.components.embedder_support.util.Origin;
|
||||
import org.chromium.components.embedder_support.util.UrlConstants;
|
||||
@@ -1250,13 +1253,13 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
|
||||
|
||||
@Override
|
||||
public boolean isPartialHeightCustomTab() {
|
||||
if (BuildInfo.getInstance().isAutomotive) return false;
|
||||
if (DeviceInfo.isAutomotive()) return false;
|
||||
return getInitialActivityHeight() > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPartialWidthCustomTab() {
|
||||
if (BuildInfo.getInstance().isAutomotive) return false;
|
||||
if (DeviceInfo.isAutomotive()) return false;
|
||||
return getInitialActivityWidth() > 0;
|
||||
}
|
||||
|
||||
@@ -1656,7 +1659,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
|
||||
public boolean isInteractiveOmniboxAllowed() {
|
||||
if (isOffTheRecord()) return false;
|
||||
if (isPartialCustomTab()) return false;
|
||||
if (BuildInfo.getInstance().isAutomotive) return false;
|
||||
if (DeviceInfo.isAutomotive()) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1791,4 +1794,17 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
|
||||
&& ChromeFeatureList.sCctAdaptiveButtonDefaultVariant.getValue()
|
||||
== AdaptiveToolbarButtonVariant.OPEN_IN_BROWSER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindowFeatures getRequestedWindowFeatures() {
|
||||
if (mUiType != CustomTabsUiType.POPUP) {
|
||||
return null;
|
||||
}
|
||||
final Bundle bundle =
|
||||
IntentUtils.safeGetBundleExtra(getIntent(), EXTRA_REQUESTED_WINDOW_FEATURES);
|
||||
if (bundle == null) {
|
||||
return new WindowFeatures();
|
||||
}
|
||||
return new WindowFeatures(bundle);
|
||||
}
|
||||
}
|
||||
|
||||
+13655
File diff suppressed because it is too large
Load Diff
+10
-52
@@ -83,7 +83,6 @@
|
||||
#include "chrome/browser/translate/chrome_translate_client.h"
|
||||
#include "chrome/browser/ui/find_bar/find_bar_state.h"
|
||||
#include "chrome/browser/ui/find_bar/find_bar_state_factory.h"
|
||||
#include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h"
|
||||
#include "chrome/browser/webdata_services/web_data_service_factory.h"
|
||||
#include "chrome/common/buildflags.h"
|
||||
#include "chrome/common/url_constants.h"
|
||||
@@ -91,7 +90,6 @@
|
||||
#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"
|
||||
#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
|
||||
#include "components/autofill/core/common/autofill_features.h"
|
||||
#include "components/autofill/core/common/autofill_payments_features.h"
|
||||
@@ -140,6 +138,7 @@
|
||||
#include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
|
||||
#include "components/signin/public/identity_manager/identity_manager.h"
|
||||
#include "components/signin/public/identity_manager/identity_utils.h"
|
||||
#include "components/strike_database/strike_database.h"
|
||||
#include "components/sync/service/sync_service.h"
|
||||
#include "components/sync/service/sync_user_settings.h"
|
||||
#include "components/tpcd/metadata/browser/manager.h"
|
||||
@@ -165,6 +164,7 @@
|
||||
#include "net/http/http_transaction_factory.h"
|
||||
#include "net/net_buildflags.h"
|
||||
#include "services/network/public/mojom/clear_data_filter.mojom.h"
|
||||
#include "third_party/perfetto/include/perfetto/tracing/track.h"
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "chrome/browser/android/customtabs/chrome_origin_verifier.h"
|
||||
@@ -353,10 +353,6 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
|
||||
~content::BrowsingDataRemover::DATA_TYPE_AVOID_CLOSING_CONNECTIONS &
|
||||
~constants::FILTERABLE_DATA_TYPES) == 0) ||
|
||||
filter_builder->MatchesAllOriginsAndDomains());
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
DCHECK(!should_clear_sync_account_settings_);
|
||||
#endif
|
||||
|
||||
TRACE_EVENT0("browsing_data",
|
||||
"ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData");
|
||||
|
||||
@@ -696,16 +692,6 @@ void ChromeBrowsingDataRemoverDelegate::RemoveEmbedderData(
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
if (nullable_filter.is_null() ||
|
||||
(!filter_builder->PartitionedCookiesOnly() &&
|
||||
nullable_filter.Run(GaiaUrls::GetInstance()->google_url()))) {
|
||||
// Set a flag to clear account storage settings later instead of clearing
|
||||
// it now as we can not reset this setting before passwords are deleted.
|
||||
should_clear_sync_account_settings_ = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Persistent Origin Trial tokens are only saved until the next page
|
||||
// load from the same origin. For that reason, they are not saved with
|
||||
// last-modified information, so deletion will clear all stored information.
|
||||
@@ -1548,11 +1534,10 @@ void ChromeBrowsingDataRemoverDelegate::OnTaskStarted(
|
||||
auto result = pending_sub_tasks_.insert(data_type);
|
||||
DCHECK(result.second) << "Task already started: "
|
||||
<< static_cast<int>(data_type);
|
||||
TRACE_EVENT_NESTABLE_ASYNC_BEGIN1(
|
||||
"browsing_data", "ChromeBrowsingDataRemoverDelegate",
|
||||
TRACE_ID_WITH_SCOPE("ChromeBrowsingDataRemoverDelegate",
|
||||
static_cast<int>(data_type)),
|
||||
"data_type", static_cast<int>(data_type));
|
||||
TRACE_EVENT_BEGIN("browsing_data", "ChromeBrowsingDataRemoverDelegate",
|
||||
perfetto::NamedTrack("ChromeBrowsingDataRemoverDelegate",
|
||||
static_cast<int>(data_type)),
|
||||
"data_type", static_cast<int>(data_type));
|
||||
}
|
||||
|
||||
void ChromeBrowsingDataRemoverDelegate::OnTaskComplete(
|
||||
@@ -1563,11 +1548,10 @@ void ChromeBrowsingDataRemoverDelegate::OnTaskComplete(
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
size_t num_erased = pending_sub_tasks_.erase(data_type);
|
||||
DCHECK_EQ(num_erased, 1U);
|
||||
TRACE_EVENT_NESTABLE_ASYNC_END1(
|
||||
"browsing_data", "ChromeBrowsingDataRemoverDelegate",
|
||||
TRACE_ID_WITH_SCOPE("ChromeBrowsingDataRemoverDelegate",
|
||||
static_cast<int>(data_type)),
|
||||
"data_type", static_cast<int>(data_type));
|
||||
TRACE_EVENT_END("browsing_data",
|
||||
perfetto::NamedTrack("ChromeBrowsingDataRemoverDelegate",
|
||||
static_cast<int>(data_type)),
|
||||
"data_type", static_cast<int>(data_type));
|
||||
base::UmaHistogramMediumTimes(
|
||||
base::StrCat({"History.ClearBrowsingData.Duration.ChromeTask.",
|
||||
GetHistogramSuffix(data_type)}),
|
||||
@@ -1591,32 +1575,6 @@ void ChromeBrowsingDataRemoverDelegate::OnTaskComplete(
|
||||
}
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Explicitly clear any per account sync settings when cookies are being
|
||||
// cleared. This needs to happen after the corresponding data has been
|
||||
// deleted, so it is performed when all other tasks are completed.
|
||||
// Note: These usually get cleared automatically when the Google cookies are
|
||||
// deleted, but there is one edge case where that doesn't work: If the user
|
||||
// clears cookies via CBD while they are already signed out (but their
|
||||
// account is still present in the account chooser). In that case, without the
|
||||
// code below, the settings-clearing would only happen when the Google cookies
|
||||
// are refreshed the next time, typically on the next browser restart.
|
||||
if (should_clear_sync_account_settings_) {
|
||||
should_clear_sync_account_settings_ = false;
|
||||
signin::IdentityManager* identity_manager =
|
||||
IdentityManagerFactory::GetForProfile(profile_);
|
||||
base::flat_set<GaiaId> gaia_ids = signin::GetAllGaiaIdsForKeyedPreferences(
|
||||
identity_manager,
|
||||
signin::AccountsInCookieJarInfo() /* empty_cookies */);
|
||||
if (syncer::SyncService* sync_service =
|
||||
SyncServiceFactory::GetForProfile(profile_);
|
||||
sync_service) {
|
||||
sync_service->GetUserSettings()->KeepAccountSettingsPrefsOnlyForUsers(
|
||||
base::ToVector(gaia_ids));
|
||||
}
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
slow_pending_tasks_closure_.Cancel();
|
||||
|
||||
DCHECK(!callback_.is_null());
|
||||
|
||||
@@ -16,15 +16,18 @@
|
||||
#include <vector>
|
||||
|
||||
#include "base/base_switches.h"
|
||||
#include "base/byte_count.h"
|
||||
#include "base/check_deref.h"
|
||||
#include "base/command_line.h"
|
||||
#include "base/containers/contains.h"
|
||||
#include "base/containers/fixed_flat_map.h"
|
||||
#include "base/containers/fixed_flat_set.h"
|
||||
#include "base/dcheck_is_on.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/files/file_path.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/functional/callback.h"
|
||||
#include "base/functional/callback_helpers.h"
|
||||
#include "base/i18n/base_i18n_switches.h"
|
||||
#include "base/i18n/character_encoding.h"
|
||||
#include "base/memory/raw_ptr.h"
|
||||
@@ -49,6 +52,10 @@
|
||||
#include "build/branding_buildflags.h"
|
||||
#include "build/build_config.h"
|
||||
#include "build/config/chromebox_for_meetings/buildflags.h" // PLATFORM_CFM
|
||||
#include "chrome/browser/preloading/search_preload/search_preload_features.h"
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
#include "chrome/browser/actor/actor_keyed_service.h"
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
#include "chrome/browser/after_startup_task_utils.h"
|
||||
#include "chrome/browser/ai/ai_manager.h"
|
||||
#include "chrome/browser/app_mode/app_mode_utils.h"
|
||||
@@ -112,6 +119,8 @@
|
||||
#include "chrome/browser/performance_manager/public/chrome_browser_main_extra_parts_performance_manager.h"
|
||||
#include "chrome/browser/performance_manager/public/chrome_content_browser_client_performance_manager_part.h"
|
||||
#include "chrome/browser/performance_monitor/chrome_browser_main_extra_parts_performance_monitor.h"
|
||||
#include "chrome/browser/picture_in_picture/picture_in_picture_window_manager.h"
|
||||
#include "chrome/browser/picture_in_picture/scoped_tuck_picture_in_picture.h"
|
||||
#include "chrome/browser/plugins/plugin_utils.h"
|
||||
#include "chrome/browser/policy/policy_util.h"
|
||||
#include "chrome/browser/policy/profile_policy_connector.h"
|
||||
@@ -234,6 +243,7 @@
|
||||
#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/fingerprinting_protection_filter/interventions/common/interventions_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"
|
||||
@@ -347,6 +357,7 @@
|
||||
#include "google_apis/gaia/gaia_urls.h"
|
||||
#include "google_apis/google_api_keys.h"
|
||||
#include "gpu/config/gpu_switches.h"
|
||||
#include "ipc/ipc_channel_proxy.h"
|
||||
#include "media/base/media_switches.h"
|
||||
#include "media/media_buildflags.h"
|
||||
#include "media/mojo/buildflags.h"
|
||||
@@ -387,6 +398,7 @@
|
||||
#include "third_party/blink/public/public_buildflags.h"
|
||||
#include "third_party/widevine/cdm/buildflags.h"
|
||||
#include "ui/base/clipboard/clipboard_format_type.h"
|
||||
#include "ui/base/clipboard/clipboard_metadata.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
#include "ui/base/page_transition_types.h"
|
||||
#include "ui/base/resource/resource_bundle.h"
|
||||
@@ -452,6 +464,8 @@
|
||||
#include "chrome/browser/ash/profiles/profile_helper.h"
|
||||
#include "chrome/browser/ash/smb_client/fileapi/smbfs_file_system_backend_delegate.h"
|
||||
#include "chrome/browser/ash/system/input_device_settings.h"
|
||||
#include "chrome/browser/media/webrtc/multi_capture/multi_capture_data_service.h"
|
||||
#include "chrome/browser/media/webrtc/multi_capture/multi_capture_data_service_factory.h"
|
||||
#include "chrome/browser/speech/tts_chromeos.h"
|
||||
#include "chrome/browser/speech/tts_controller_delegate_impl.h"
|
||||
#include "chrome/browser/ui/ash/main_extra_parts/chrome_browser_main_extra_parts_ash.h"
|
||||
@@ -472,7 +486,6 @@
|
||||
#include "chrome/browser/ui/views/chrome_browser_main_extra_parts_views_linux.h"
|
||||
#elif BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/application_status_listener.h"
|
||||
#include "base/android/build_info.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "chrome/browser/android/customtabs/client_data_header_web_contents_observer.h"
|
||||
#include "chrome/browser/android/devtools_manager_delegate_android.h"
|
||||
@@ -485,6 +498,7 @@
|
||||
#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.h"
|
||||
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
|
||||
#include "chrome/common/chrome_descriptors_android.h"
|
||||
#include "components/browser_ui/accessibility/android/font_size_prefs_android.h"
|
||||
@@ -519,7 +533,7 @@
|
||||
#include "base/debug/leak_annotations.h"
|
||||
#include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h"
|
||||
#include "chrome/browser/chromeos/tablet_mode/chrome_content_browser_client_tablet_mode_part.h"
|
||||
#include "chrome/browser/file_system_access/cloud_identifier/cloud_identifier_util_cros.h"
|
||||
#include "chrome/browser/file_system_access/cloud_identifier/cloud_identifier_util_ash.h"
|
||||
#include "chrome/browser/media/webrtc/multi_capture/multi_capture_usage_indicator_service.h"
|
||||
#include "chrome/browser/media/webrtc/multi_capture/multi_capture_usage_indicator_service_factory.h"
|
||||
#include "chrome/browser/policy/system_features_disable_list_policy_handler.h"
|
||||
@@ -546,7 +560,9 @@
|
||||
#include "chrome/browser/ui/browser.h"
|
||||
#include "chrome/browser/ui/browser_dialogs.h"
|
||||
#include "chrome/browser/ui/browser_finder.h"
|
||||
#include "chrome/browser/ui/browser_list.h"
|
||||
#include "chrome/browser/ui/chrome_pages.h"
|
||||
#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
||||
#include "chrome/browser/ui/webui/chrome_content_browser_client_webui_part.h"
|
||||
#include "chrome/browser/ui/webui/webui_util_desktop.h"
|
||||
#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_error_page.h"
|
||||
@@ -571,6 +587,7 @@
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/device_info.h"
|
||||
#include "components/crash/content/browser/crash_handler_host_linux.h"
|
||||
#endif
|
||||
|
||||
@@ -996,6 +1013,17 @@ GetNoStatePrefetchCanceler(
|
||||
return canceler;
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
mojo::AssociatedRemote<chrome::mojom::RendererConfiguration>
|
||||
GetRendererConfiguration(content::RenderProcessHost* render_process_host) {
|
||||
IPC::ChannelProxy* channel = render_process_host->GetChannel();
|
||||
mojo::AssociatedRemote<chrome::mojom::RendererConfiguration>
|
||||
renderer_configuration;
|
||||
channel->GetRemoteAssociatedInterface(&renderer_configuration);
|
||||
return renderer_configuration;
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
bool ShouldHonorPolicies() {
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
return policy::ManagementServiceFactory::GetForPlatform()
|
||||
@@ -1343,9 +1371,24 @@ bool IsDefaultSearchEngine(Profile* profile, const GURL& url) {
|
||||
const TemplateURL* default_search_engine =
|
||||
template_url_service->GetDefaultSearchProvider();
|
||||
|
||||
return default_search_engine &&
|
||||
template_url_service->IsSearchResultsPageFromDefaultSearchProvider(
|
||||
url);
|
||||
if (!default_search_engine) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (template_url_service->IsSearchResultsPageFromDefaultSearchProvider(url)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (base::FeatureList::IsEnabled(features::kConsiderDSEWarmUpPageAsSRP)) {
|
||||
const GURL prewarm_url = GURL(features::kPrewarmUrl.Get());
|
||||
if (prewarm_url.is_valid() && url == prewarm_url &&
|
||||
template_url_service->GetDefaultSearchProviderOrigin().IsSameOriginWith(
|
||||
prewarm_url)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -1873,6 +1916,27 @@ GURL ChromeContentBrowserClient::GetEffectiveURL(
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChromeContentBrowserClient::OnRendererProcessLockedStateUpdated(
|
||||
content::RenderProcessHost* host,
|
||||
const GURL& site_url) {
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// If the feature `kInstantUsesSpareRenderer` is not enabled, we continue
|
||||
// relying on the `kInstantProcess` command line switch to handle instant
|
||||
// process related logic.
|
||||
if (!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) {
|
||||
return;
|
||||
}
|
||||
chrome::mojom::StaticParamsPtr params = chrome::mojom::StaticParams::New();
|
||||
Profile* profile = Profile::FromBrowserContext(host->GetBrowserContext());
|
||||
if (search::ShouldAssignURLToInstantRenderer(site_url, profile)) {
|
||||
params->is_instant_process = true;
|
||||
}
|
||||
auto renderer_configuration = GetRendererConfiguration(host);
|
||||
renderer_configuration->SetConfigurationOnProcessLockUpdate(
|
||||
std::move(params));
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::
|
||||
ShouldCompareEffectiveURLsForSiteInstanceSelection(
|
||||
content::BrowserContext* browser_context,
|
||||
@@ -1931,7 +1995,7 @@ bool ChromeContentBrowserClient::ShouldUseProcessPerSite(
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::
|
||||
ShouldReuseExistingProcessForNewMainFrameSiteInstance(
|
||||
ShouldReuseAnyExistingProcessForNewMainFrameSiteInstance(
|
||||
content::BrowserContext* browser_context,
|
||||
const GURL& site_instance_original_url) {
|
||||
// When `kProcessPerSiteForDSE` is disabled,
|
||||
@@ -1990,11 +2054,15 @@ bool ChromeContentBrowserClient::ShouldUseSpareRenderProcessHost(
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Instant renderers should not use a spare process, because they require
|
||||
// passing switches::kInstantProcess to the renderer process when it
|
||||
// launches. A spare process is launched earlier, before it is known which
|
||||
// navigation will use it, so it lacks this flag.
|
||||
if (search::ShouldAssignURLToInstantRenderer(site_url, profile)) {
|
||||
// Instant renderers passed by command line should not use a spare process,
|
||||
// because they require passing switches::kInstantProcess to the renderer
|
||||
// process when it launches. A spare process is launched earlier, before
|
||||
// it is known which navigation will use it, so it lacks this flag. But
|
||||
// with the feature kInstantUsesSpareRenderer enabled, the instant process
|
||||
// is passed later in ProcessLock status changed, we can pass the flag
|
||||
// to spare process.
|
||||
if (search::ShouldAssignURLToInstantRenderer(site_url, profile) &&
|
||||
!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) {
|
||||
// The NTP page chrome://new-tab-page and chrome://new-tab-page-third-party
|
||||
// are using WebUI and will not use instant renderer.
|
||||
// The only usecase is chrome-search:// URLs.
|
||||
@@ -2129,6 +2197,54 @@ void ChromeContentBrowserClient::OverrideURLLoaderFactoryParams(
|
||||
#endif
|
||||
}
|
||||
|
||||
bool IsURLAccessibleByHistoryNavigationFromWebContents(
|
||||
const GURL& url,
|
||||
content::WebContents* web_contents) {
|
||||
if (!web_contents) {
|
||||
return false;
|
||||
}
|
||||
content::NavigationController& controller = web_contents->GetController();
|
||||
for (int j = 0; j < controller.GetEntryCount(); ++j) {
|
||||
content::NavigationEntry* entry = controller.GetEntryAtIndex(j);
|
||||
if (entry && entry->GetURL().EqualsIgnoringRef(url)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::IsURLAccessibleByHistoryNavigation(
|
||||
const GURL& url) {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
for (const TabModel* model : TabModelList::models()) {
|
||||
if (!model) {
|
||||
continue;
|
||||
}
|
||||
for (int i = 0; i < model->GetTabCount(); ++i) {
|
||||
if (IsURLAccessibleByHistoryNavigationFromWebContents(
|
||||
url, model->GetWebContentsAt(i))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
#else
|
||||
for (Browser* browser : *BrowserList::GetInstance()) {
|
||||
TabStripModel* model = browser->tab_strip_model();
|
||||
if (!model) {
|
||||
continue;
|
||||
}
|
||||
for (int i = 0; i < model->count(); ++i) {
|
||||
if (IsURLAccessibleByHistoryNavigationFromWebContents(
|
||||
url, model->GetWebContentsAt(i))) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
}
|
||||
|
||||
// These are treated as WebUI schemes but do not get WebUI bindings. Also,
|
||||
// view-source is allowed for these schemes.
|
||||
void ChromeContentBrowserClient::GetAdditionalWebUISchemes(
|
||||
@@ -2290,8 +2406,18 @@ bool ChromeContentBrowserClient::IsSuitableHost(
|
||||
instant_service->IsInstantProcess(process_host->GetDeprecatedID());
|
||||
bool should_be_in_instant_process =
|
||||
search::ShouldAssignURLToInstantRenderer(site_url, profile);
|
||||
if (is_instant_process || should_be_in_instant_process) {
|
||||
return is_instant_process && should_be_in_instant_process;
|
||||
if (is_instant_process) {
|
||||
return should_be_in_instant_process;
|
||||
}
|
||||
if (should_be_in_instant_process) {
|
||||
// If the host is a spare process that was used for instant URLs,
|
||||
// `IsInstantProcess` is false as `InstantService::AddInstantProcess`
|
||||
// hasn't been called yet. In this case, it's safe to allow the site
|
||||
// to be in the spare process.
|
||||
bool is_spare_taken =
|
||||
(base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer) &&
|
||||
process_host->HostHasNotBeenUsed());
|
||||
return is_instant_process || is_spare_taken;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -2629,11 +2755,17 @@ bool ChromeContentBrowserClient::IsIsolatedContextAllowedForUrl(
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChromeContentBrowserClient::CheckGetAllScreensMediaAllowed(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
base::OnceCallback<void(bool)> callback) {
|
||||
std::move(callback).Run(capture_policy::IsMultiScreenCaptureAllowed(
|
||||
render_frame_host->GetMainFrame()->GetLastCommittedOrigin().GetURL()));
|
||||
bool ChromeContentBrowserClient::IsMultiCaptureAllowed(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
return multi_capture::MultiCaptureDataServiceFactory::GetForBrowserContext(
|
||||
WebContents::FromRenderFrameHost(render_frame_host)
|
||||
->GetBrowserContext())
|
||||
->IsMultiCaptureAllowed(
|
||||
render_frame_host->GetMainFrame()->GetLastCommittedOrigin().GetURL());
|
||||
#else
|
||||
return false;
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::IsFileAccessAllowed(
|
||||
@@ -2835,7 +2967,8 @@ void ChromeContentBrowserClient::AppendExtraCommandLineSwitches(
|
||||
InstantService* instant_service =
|
||||
InstantServiceFactory::GetForProfile(profile);
|
||||
if (instant_service &&
|
||||
instant_service->IsInstantProcess(process->GetDeprecatedID())) {
|
||||
instant_service->IsInstantProcess(process->GetDeprecatedID()) &&
|
||||
!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) {
|
||||
command_line->AppendSwitch(switches::kInstantProcess);
|
||||
}
|
||||
|
||||
@@ -4012,84 +4145,68 @@ bool ShouldDisableForcedColorsForWebContent(content::WebContents* contents,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool UpdateForcedColorsForWebContent(WebPreferences* web_prefs,
|
||||
WebContents* web_contents,
|
||||
const ui::NativeTheme* native_theme) {
|
||||
auto old_in_forced_colors = web_prefs->in_forced_colors;
|
||||
auto old_forced_colors_disabled = web_prefs->is_forced_colors_disabled;
|
||||
bool in_forced_colors = native_theme->InForcedColorsMode();
|
||||
bool should_disable_forced_colors =
|
||||
blink::mojom::PreferredContrast GetPreferredContrast(
|
||||
const ui::NativeTheme* native_theme) {
|
||||
using NC = ui::NativeTheme::PreferredContrast;
|
||||
using BC = blink::mojom::PreferredContrast;
|
||||
static constexpr auto kContrastMap =
|
||||
base::MakeFixedFlatMap<NC, BC>({{NC::kNoPreference, BC::kNoPreference},
|
||||
{NC::kMore, BC::kMore},
|
||||
{NC::kLess, BC::kLess},
|
||||
{NC::kCustom, BC::kCustom}});
|
||||
return kContrastMap.at(native_theme->GetPreferredContrast());
|
||||
}
|
||||
|
||||
std::tuple<bool, bool> GetForcedColorsForWebContent(
|
||||
WebContents* web_contents,
|
||||
const ui::NativeTheme* native_theme) {
|
||||
const bool in_forced_colors = native_theme->InForcedColorsMode();
|
||||
const bool is_forced_colors_disabled =
|
||||
ShouldDisableForcedColorsForWebContent(web_contents, in_forced_colors);
|
||||
|
||||
web_prefs->in_forced_colors =
|
||||
in_forced_colors && !should_disable_forced_colors;
|
||||
web_prefs->is_forced_colors_disabled = should_disable_forced_colors;
|
||||
|
||||
return old_in_forced_colors != web_prefs->in_forced_colors ||
|
||||
old_forced_colors_disabled != web_prefs->is_forced_colors_disabled;
|
||||
return {in_forced_colors && !is_forced_colors_disabled,
|
||||
is_forced_colors_disabled};
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
blink::mojom::PreferredColorScheme ToBlinkPreferredColorScheme(
|
||||
ui::NativeTheme::PreferredColorScheme native_theme_scheme) {
|
||||
switch (native_theme_scheme) {
|
||||
case ui::NativeTheme::PreferredColorScheme::kDark:
|
||||
return blink::mojom::PreferredColorScheme::kDark;
|
||||
case ui::NativeTheme::PreferredColorScheme::kLight:
|
||||
return blink::mojom::PreferredColorScheme::kLight;
|
||||
}
|
||||
return (native_theme_scheme == ui::NativeTheme::PreferredColorScheme::kDark)
|
||||
? blink::mojom::PreferredColorScheme::kDark
|
||||
: blink::mojom::PreferredColorScheme::kLight;
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
// Returns true if preferred color scheme is modified based on at least one of
|
||||
// the following -
|
||||
// |url| - Last committed url.
|
||||
// |web_contents| - For Android based on IsNightModeEnabled().
|
||||
// |native_theme| - For other platforms based on native theme scheme.
|
||||
bool UpdatePreferredColorScheme(WebPreferences* web_prefs,
|
||||
const GURL& url,
|
||||
WebContents* web_contents,
|
||||
const ui::NativeTheme* native_theme) {
|
||||
auto old_preferred_color_scheme = web_prefs->preferred_color_scheme;
|
||||
|
||||
std::tuple<blink::mojom::PreferredColorScheme,
|
||||
blink::mojom::PreferredColorScheme>
|
||||
GetPreferredColorScheme(const WebPreferences& web_prefs,
|
||||
const GURL& url,
|
||||
WebContents* web_contents,
|
||||
const ui::NativeTheme* native_theme) {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
auto* delegate = TabAndroid::FromWebContents(web_contents)
|
||||
? static_cast<android::TabWebContentsDelegateAndroid*>(
|
||||
web_contents->GetDelegate())
|
||||
: nullptr;
|
||||
if (delegate) {
|
||||
web_prefs->preferred_color_scheme =
|
||||
delegate->IsNightModeEnabled()
|
||||
? blink::mojom::PreferredColorScheme::kDark
|
||||
: blink::mojom::PreferredColorScheme::kLight;
|
||||
web_prefs->preferred_root_scrollbar_color_scheme =
|
||||
web_prefs->preferred_color_scheme;
|
||||
if (TabAndroid::FromWebContents(web_contents)) {
|
||||
if (auto* delegate = static_cast<android::TabWebContentsDelegateAndroid*>(
|
||||
web_contents->GetDelegate())) {
|
||||
const auto preferred_color_scheme =
|
||||
delegate->IsNightModeEnabled()
|
||||
? blink::mojom::PreferredColorScheme::kDark
|
||||
: blink::mojom::PreferredColorScheme::kLight;
|
||||
return {preferred_color_scheme, preferred_color_scheme};
|
||||
}
|
||||
}
|
||||
return {web_prefs.preferred_color_scheme,
|
||||
web_prefs.preferred_root_scrollbar_color_scheme};
|
||||
#else
|
||||
|
||||
Profile* profile =
|
||||
Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
||||
CHECK(profile);
|
||||
|
||||
// Update the preferred root scrollbar color based on the lightness level of
|
||||
// the toolbar's color.
|
||||
web_prefs->preferred_root_scrollbar_color_scheme =
|
||||
color_utils::IsDark(
|
||||
web_contents->GetColorProvider().GetColor(kColorToolbar))
|
||||
? blink::mojom::PreferredColorScheme::kDark
|
||||
: blink::mojom::PreferredColorScheme::kLight;
|
||||
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Incognito contents follow the device color mode.
|
||||
if (profile->IsIncognitoProfile() && !content::HasWebUIScheme(url)) {
|
||||
web_prefs->preferred_color_scheme =
|
||||
blink::mojom::PreferredColorScheme preferred_color_scheme;
|
||||
if (Profile::FromBrowserContext(web_contents->GetBrowserContext())
|
||||
->IsIncognitoProfile() &&
|
||||
!content::HasWebUIScheme(url)) {
|
||||
// Incognito contents follow the device color mode.
|
||||
preferred_color_scheme =
|
||||
ToBlinkPreferredColorScheme(native_theme->GetPreferredColorScheme());
|
||||
} else {
|
||||
// WebUI and regular pages follow the browser theme color mode, provided by
|
||||
// the color provider.
|
||||
web_prefs->preferred_color_scheme =
|
||||
preferred_color_scheme =
|
||||
web_contents->GetColorMode() == ui::ColorProviderKey::ColorMode::kLight
|
||||
? blink::mojom::PreferredColorScheme::kLight
|
||||
: blink::mojom::PreferredColorScheme::kDark;
|
||||
@@ -4101,45 +4218,49 @@ bool UpdatePreferredColorScheme(WebPreferences* web_prefs,
|
||||
// If the top-level WebContents is the same as the guest, then
|
||||
// `web_contents` is *not* a guest.
|
||||
if (owner_contents != web_contents) {
|
||||
web_prefs->preferred_color_scheme =
|
||||
preferred_color_scheme =
|
||||
owner_contents->GetOrCreateWebPreferences().preferred_color_scheme;
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
return old_preferred_color_scheme != web_prefs->preferred_color_scheme;
|
||||
// Update the preferred root scrollbar color based on the lightness level of
|
||||
// the toolbar's color.
|
||||
const auto preferred_root_scrollbar_color_scheme =
|
||||
color_utils::IsDark(
|
||||
web_contents->GetColorProvider().GetColor(kColorToolbar))
|
||||
? blink::mojom::PreferredColorScheme::kDark
|
||||
: blink::mojom::PreferredColorScheme::kLight;
|
||||
|
||||
return {preferred_color_scheme, preferred_root_scrollbar_color_scheme};
|
||||
#endif
|
||||
}
|
||||
|
||||
std::optional<SkColor> GetRootScrollbarThemeColor(WebContents* web_contents) {
|
||||
bool root_scrollbar_follows_browser_theme = false;
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
|
||||
// Sets the `root_scrollbar_theme_color` web pref if the user has enabled a
|
||||
// custom colored frame for the UI.
|
||||
void UpdateRootScrollbarThemeColor(Profile* profile,
|
||||
const WebContents* web_contents,
|
||||
WebPreferences* web_prefs) {
|
||||
if (!base::FeatureList::IsEnabled(
|
||||
blink::features::kRootScrollbarFollowsBrowserTheme)) {
|
||||
return;
|
||||
root_scrollbar_follows_browser_theme = base::FeatureList::IsEnabled(
|
||||
blink::features::kRootScrollbarFollowsBrowserTheme);
|
||||
#endif
|
||||
if (!root_scrollbar_follows_browser_theme) {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (ThemeService* theme_service =
|
||||
ThemeServiceFactory::GetForProfile(profile)) {
|
||||
if (!theme_service->UsingDefaultTheme() ||
|
||||
theme_service->GetUserColor().has_value() ||
|
||||
theme_service->UsingDeviceTheme()) {
|
||||
color_utils::HSL hsl;
|
||||
color_utils::SkColorToHSL(
|
||||
web_contents->GetColorProvider().GetColor(kColorToolbar), &hsl);
|
||||
// Clamp the lightness of theme colors that are too light or dark and
|
||||
// have no contrast against the background. We don't use color_utils
|
||||
// contrast functions because they lose saturation.
|
||||
static constexpr double kTopLightnessThreshold = 0.8;
|
||||
static constexpr double kBottomLightnessThreshold = 0.3;
|
||||
hsl.l =
|
||||
std::clamp(hsl.l, kBottomLightnessThreshold, kTopLightnessThreshold);
|
||||
web_prefs->root_scrollbar_theme_color =
|
||||
color_utils::HSLToSkColor(hsl, SK_AlphaOPAQUE);
|
||||
}
|
||||
|
||||
if (ThemeService* theme_service = ThemeServiceFactory::GetForProfile(
|
||||
Profile::FromBrowserContext(web_contents->GetBrowserContext()));
|
||||
!theme_service || (theme_service->UsingDefaultTheme() &&
|
||||
!theme_service->GetUserColor().has_value() &&
|
||||
!theme_service->UsingDeviceTheme())) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
color_utils::HSL hsl;
|
||||
color_utils::SkColorToHSL(
|
||||
web_contents->GetColorProvider().GetColor(kColorToolbar), &hsl);
|
||||
// Clamp the lightness of theme colors that are too light or dark and have no
|
||||
// contrast against the background. We don't use color_utils contrast
|
||||
// functions because they lose saturation.
|
||||
hsl.l = std::clamp(hsl.l, 0.3, 0.8);
|
||||
return color_utils::HSLToSkColor(hsl, SK_AlphaOPAQUE);
|
||||
}
|
||||
#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
|
||||
|
||||
// Returns whether the user can be prompted to select a client certificate after
|
||||
// no certificate got auto-selected.
|
||||
@@ -4732,29 +4853,18 @@ void ChromeContentBrowserClient::OverrideWebPreferences(
|
||||
SubAppsAPIsRequireUserGestureAndAuthorization(web_contents);
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
switch (GetWebTheme()->GetPreferredContrast()) {
|
||||
case ui::NativeTheme::PreferredContrast::kNoPreference:
|
||||
web_prefs->preferred_contrast =
|
||||
blink::mojom::PreferredContrast::kNoPreference;
|
||||
break;
|
||||
case ui::NativeTheme::PreferredContrast::kMore:
|
||||
web_prefs->preferred_contrast = blink::mojom::PreferredContrast::kMore;
|
||||
break;
|
||||
case ui::NativeTheme::PreferredContrast::kLess:
|
||||
web_prefs->preferred_contrast = blink::mojom::PreferredContrast::kLess;
|
||||
break;
|
||||
case ui::NativeTheme::PreferredContrast::kCustom:
|
||||
web_prefs->preferred_contrast = blink::mojom::PreferredContrast::kCustom;
|
||||
break;
|
||||
}
|
||||
web_prefs->preferred_contrast = GetPreferredContrast(GetWebTheme());
|
||||
|
||||
UpdateForcedColorsForWebContent(web_prefs, web_contents, GetWebTheme());
|
||||
std::tie(web_prefs->in_forced_colors, web_prefs->is_forced_colors_disabled) =
|
||||
GetForcedColorsForWebContent(web_contents, GetWebTheme());
|
||||
|
||||
UpdatePreferredColorScheme(web_prefs, main_frame_site.GetSiteURL(),
|
||||
web_contents, GetWebTheme());
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
|
||||
UpdateRootScrollbarThemeColor(profile, web_contents, web_prefs);
|
||||
#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN)
|
||||
std::tie(web_prefs->preferred_color_scheme,
|
||||
web_prefs->preferred_root_scrollbar_color_scheme) =
|
||||
GetPreferredColorScheme(*web_prefs, main_frame_site.GetSiteURL(),
|
||||
web_contents, GetWebTheme());
|
||||
|
||||
web_prefs->root_scrollbar_theme_color =
|
||||
GetRootScrollbarThemeColor(web_contents);
|
||||
|
||||
web_prefs->translate_service_available = TranslateService::IsAvailable(prefs);
|
||||
|
||||
@@ -4852,12 +4962,26 @@ bool ChromeContentBrowserClient::OverrideWebPreferencesAfterNavigation(
|
||||
web_contents, main_frame_site, web_prefs);
|
||||
}
|
||||
|
||||
const auto old_in_forced_colors = web_prefs->in_forced_colors;
|
||||
const auto old_is_forced_colors_disabled =
|
||||
web_prefs->is_forced_colors_disabled;
|
||||
std::tie(web_prefs->in_forced_colors, web_prefs->is_forced_colors_disabled) =
|
||||
GetForcedColorsForWebContent(web_contents, GetWebTheme());
|
||||
prefs_changed |=
|
||||
UpdateForcedColorsForWebContent(web_prefs, web_contents, GetWebTheme());
|
||||
web_prefs->in_forced_colors != old_in_forced_colors ||
|
||||
web_prefs->is_forced_colors_disabled != old_is_forced_colors_disabled;
|
||||
|
||||
const auto old_preferred_color_scheme = web_prefs->preferred_color_scheme;
|
||||
const auto old_preferred_root_scrollbar_color_scheme =
|
||||
web_prefs->preferred_root_scrollbar_color_scheme;
|
||||
std::tie(web_prefs->preferred_color_scheme,
|
||||
web_prefs->preferred_root_scrollbar_color_scheme) =
|
||||
GetPreferredColorScheme(*web_prefs, main_frame_site.GetSiteURL(),
|
||||
web_contents, GetWebTheme());
|
||||
prefs_changed |=
|
||||
UpdatePreferredColorScheme(web_prefs, web_contents->GetLastCommittedURL(),
|
||||
web_contents, GetWebTheme());
|
||||
web_prefs->preferred_color_scheme != old_preferred_color_scheme ||
|
||||
web_prefs->preferred_root_scrollbar_color_scheme !=
|
||||
old_preferred_root_scrollbar_color_scheme;
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
auto* delegate = TabAndroid::FromWebContents(web_contents)
|
||||
@@ -4883,6 +5007,23 @@ bool ChromeContentBrowserClient::OverrideWebPreferencesAfterNavigation(
|
||||
return prefs_changed;
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::
|
||||
WebPreferencesNeedUpdateForColorRelatedStateChanges(
|
||||
WebContents& web_contents,
|
||||
const SiteInstance& main_frame_site) const {
|
||||
const WebPreferences& prefs = web_contents.GetOrCreateWebPreferences();
|
||||
return GetPreferredContrast(GetWebTheme()) != prefs.preferred_contrast ||
|
||||
GetForcedColorsForWebContent(&web_contents, GetWebTheme()) !=
|
||||
std::tie(prefs.in_forced_colors,
|
||||
prefs.is_forced_colors_disabled) ||
|
||||
GetPreferredColorScheme(prefs, main_frame_site.GetSiteURL(),
|
||||
&web_contents, GetWebTheme()) !=
|
||||
std::tie(prefs.preferred_color_scheme,
|
||||
prefs.preferred_root_scrollbar_color_scheme) ||
|
||||
GetRootScrollbarThemeColor(&web_contents) !=
|
||||
prefs.root_scrollbar_theme_color;
|
||||
}
|
||||
|
||||
void ChromeContentBrowserClient::BrowserURLHandlerCreated(
|
||||
BrowserURLHandler* handler) {
|
||||
// The group policy NTP URL handler must be registered before the other NTP
|
||||
@@ -5047,6 +5188,14 @@ void ChromeContentBrowserClient::GetAdditionalMappedFilesForChildProcess(
|
||||
fd = ui::GetCommonResourcesPackFd(®ion);
|
||||
mappings->ShareWithRegion(kAndroidChrome100PercentPakDescriptor, fd, region);
|
||||
|
||||
if constexpr (BUILDFLAG(ENABLE_HIDPI)) {
|
||||
fd = ui::Get200PercentResourcesPackFd(®ion);
|
||||
if (fd != -1) {
|
||||
mappings->ShareWithRegion(kAndroidChrome200PercentPakDescriptor, fd,
|
||||
region);
|
||||
}
|
||||
}
|
||||
|
||||
GetMappedLocalePacksForChildProcess(mappings);
|
||||
|
||||
base::FilePath app_data_path;
|
||||
@@ -6820,6 +6969,23 @@ bool ChromeContentBrowserClient::HandleExternalProtocol(
|
||||
mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory) {
|
||||
CHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
content::WebContents* web_contents = web_contents_getter.Run();
|
||||
if (web_contents) {
|
||||
Profile* profile =
|
||||
Profile::FromBrowserContext(web_contents->GetBrowserContext());
|
||||
const auto* tab_interface =
|
||||
tabs::TabInterface::MaybeGetFromContents(web_contents);
|
||||
auto* actor_service = actor::ActorKeyedService::Get(profile);
|
||||
// If actor is active, bail out early to prevent it from launching external
|
||||
// applications.
|
||||
if (tab_interface && actor_service &&
|
||||
actor_service->IsAnyTaskActingOnTab(*tab_interface)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif //! BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if BUILDFLAG(ENABLE_EXTENSIONS)
|
||||
// External protocols are disabled for guests. An exception is made for the
|
||||
// "mailto" protocol, so that pages that utilize it work properly in a
|
||||
@@ -6865,6 +7031,22 @@ ChromeContentBrowserClient::CreateWindowForVideoPictureInPicture(
|
||||
return content::VideoOverlayWindow::Create(controller);
|
||||
}
|
||||
|
||||
base::ScopedClosureRunner
|
||||
ChromeContentBrowserClient::MaybeGetScopedPictureInPictureTucker(
|
||||
content::WebContents* web_contents) {
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
if (PictureInPictureWindowManager::GetInstance()
|
||||
->ShouldFileDialogTuckPictureInPicture(web_contents)) {
|
||||
// Make the `ScopedTuckPictureInPicture` share the same lifecycle as the
|
||||
// `ScopedClosureRunner`.
|
||||
auto tucker = std::make_unique<ScopedTuckPictureInPicture>();
|
||||
return base::ScopedClosureRunner(
|
||||
base::DoNothingWithBoundArgs(std::move(tucker)));
|
||||
}
|
||||
#endif
|
||||
return base::ScopedClosureRunner();
|
||||
}
|
||||
|
||||
media::PictureInPictureEventsInfo::AutoPipInfo
|
||||
ChromeContentBrowserClient::GetAutoPipInfo(
|
||||
const content::WebContents& web_contents) const {
|
||||
@@ -6901,8 +7083,7 @@ bool ChromeContentBrowserClient::HandleWebUI(
|
||||
}
|
||||
|
||||
#if BUILDFLAG(CHROME_ROOT_STORE_CERT_MANAGEMENT_UI)
|
||||
if (base::FeatureList::IsEnabled(features::kEnableCertManagementUIV2) &&
|
||||
url->SchemeIs(content::kChromeUIScheme) &&
|
||||
if (url->SchemeIs(content::kChromeUIScheme) &&
|
||||
url->host() == chrome::kChromeUISettingsHost &&
|
||||
url->path() == chrome::kChromeUICertificateRedirectPath) {
|
||||
*url = GURL(chrome::kChromeUICertificateManagerDialogURL);
|
||||
@@ -7152,7 +7333,8 @@ void ChromeContentBrowserClient::OnNetworkServiceDataUseUpdate(
|
||||
int64_t recv_bytes,
|
||||
int64_t sent_bytes) {
|
||||
task_manager::TaskManagerInterface::UpdateAccumulatedStatsNetworkForRoute(
|
||||
render_frame_host_id, recv_bytes, sent_bytes);
|
||||
render_frame_host_id, base::ByteCount(recv_bytes),
|
||||
base::ByteCount(sent_bytes));
|
||||
}
|
||||
|
||||
base::FilePath
|
||||
@@ -7281,8 +7463,7 @@ bool ChromeContentBrowserClient::ShouldBlockRendererDebugURL(
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
content::ContentBrowserClient::WideColorGamutHeuristic
|
||||
ChromeContentBrowserClient::GetWideColorGamutHeuristic() {
|
||||
if (viz::AlwaysUseWideColorGamut() ||
|
||||
features::IsDynamicColorGamutEnabled()) {
|
||||
if (viz::AlwaysUseWideColorGamut()) {
|
||||
return WideColorGamutHeuristic::kUseDisplay;
|
||||
}
|
||||
|
||||
@@ -7514,7 +7695,7 @@ bool ChromeContentBrowserClient::IsClipboardPasteAllowed(
|
||||
void ChromeContentBrowserClient::IsClipboardPasteAllowedByPolicy(
|
||||
const content::ClipboardEndpoint& source,
|
||||
const content::ClipboardEndpoint& destination,
|
||||
const content::ClipboardMetadata& metadata,
|
||||
const ui::ClipboardMetadata& metadata,
|
||||
ClipboardPasteData clipboard_paste_data,
|
||||
IsClipboardPasteAllowedCallback callback) {
|
||||
// TODO(b/352728209): Add Android-specific hook for Data Controls.
|
||||
@@ -7536,7 +7717,7 @@ void ChromeContentBrowserClient::IsClipboardPasteAllowedByPolicy(
|
||||
|
||||
void ChromeContentBrowserClient::IsClipboardCopyAllowedByPolicy(
|
||||
const content::ClipboardEndpoint& source,
|
||||
const content::ClipboardMetadata& metadata,
|
||||
const ui::ClipboardMetadata& metadata,
|
||||
const ClipboardPasteData& data,
|
||||
IsClipboardCopyAllowedCallback callback) {
|
||||
#if BUILDFLAG(ENTERPRISE_DATA_CONTROLS)
|
||||
@@ -7613,7 +7794,7 @@ ChromeContentBrowserClient::ShouldOverridePrivateNetworkRequestPolicy(
|
||||
content::BrowserContext* browser_context,
|
||||
const url::Origin& origin) {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
if (base::android::BuildInfo::GetInstance()->is_automotive()) {
|
||||
if (base::android::device_info::is_automotive()) {
|
||||
return content::ContentBrowserClient::PrivateNetworkRequestPolicyOverride::
|
||||
kBlockInsteadOfWarn;
|
||||
}
|
||||
@@ -7891,6 +8072,7 @@ void ChromeContentBrowserClient::OnWebContentsCreated(
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// static
|
||||
base::TimeDelta ChromeContentBrowserClient::GetKeepaliveTimerTimeout(
|
||||
content::BrowserContext* context) {
|
||||
Profile* profile = Profile::FromBrowserContext(context);
|
||||
@@ -8221,8 +8403,7 @@ void ChromeContentBrowserClient::GetCloudIdentifiers(
|
||||
content::FileSystemAccessPermissionContext::HandleType handle_type,
|
||||
GetCloudIdentifiersCallback callback) {
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
cloud_identifier::GetCloudIdentifierFromAsh(url, handle_type,
|
||||
std::move(callback));
|
||||
cloud_identifier::GetCloudIdentifier(url, handle_type, std::move(callback));
|
||||
#else // BUILDFLAG(IS_CHROMEOS)
|
||||
return ContentBrowserClient::GetCloudIdentifiers(url, handle_type,
|
||||
std::move(callback));
|
||||
@@ -8578,11 +8759,6 @@ void ChromeContentBrowserClient::QueryInstalledWebAppsByManifestId(
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
bool ChromeContentBrowserClient::IsSaveableNavigation(
|
||||
content::NavigationHandle* navigation_handle) {
|
||||
return tab_groups::TabGroupSyncUtils::IsSaveableNavigation(navigation_handle);
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
void ChromeContentBrowserClient::OnUiaProviderRequested(
|
||||
bool uia_provider_enabled) {
|
||||
@@ -8723,14 +8899,19 @@ ChromeContentBrowserClient::MaybeOverrideLocalURLCrossOriginEmbedderPolicy(
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// `pdf_extension` could be nullptr, possibly due to a race condition where
|
||||
// the extension frame is deleted as the PDF content navigation is requested.
|
||||
content::RenderFrameHost* pdf_extension = navigation_handle->GetParentFrame();
|
||||
if (!pdf_extension) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
// TODO(crbug.com/40053796): Local URLs inherit their policy container from
|
||||
// the navigation initiator instead of the document creating the navigation
|
||||
// request, so local PDF URL navigations in the PDF renderer inherit policies
|
||||
// from the PDF extension frame (the parent frame) and might have the
|
||||
// incorrect COEP. Until this is fixed, just copy the COEP directly from the
|
||||
// PDF embedder.
|
||||
content::RenderFrameHost* pdf_extension = navigation_handle->GetParentFrame();
|
||||
CHECK(pdf_extension);
|
||||
content::RenderFrameHost* pdf_embedder = pdf_extension->GetParent();
|
||||
CHECK(pdf_embedder);
|
||||
return pdf_embedder->GetCrossOriginEmbedderPolicy();
|
||||
@@ -8770,3 +8951,31 @@ ChromeContentBrowserClient::GetClipboardTypesIfPolicyApplied(
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::ShouldEnableCanvasNoise(
|
||||
content::BrowserContext* browser_context,
|
||||
const GURL& url) {
|
||||
Profile* profile = Profile::FromBrowserContext(browser_context);
|
||||
bool feature_enable = fingerprinting_protection_interventions::features::
|
||||
IsCanvasInterventionsEnabledForIncognitoState(
|
||||
profile->IsIncognitoProfile());
|
||||
// System profiles are considered incognito, but will not query from
|
||||
// ProfileKeyedServices and will return nullptr. We should only check user
|
||||
// bypass if the profile returns TrackingProtectionSettings.
|
||||
privacy_sandbox::TrackingProtectionSettings* tracking_protections_settings =
|
||||
TrackingProtectionSettingsFactory::GetForProfile(profile);
|
||||
if (tracking_protections_settings) {
|
||||
return feature_enable &&
|
||||
!tracking_protections_settings->HasTrackingProtectionException(url);
|
||||
}
|
||||
return feature_enable;
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::UsePrefetchPrerenderIntegration() {
|
||||
return base::FeatureList::IsEnabled(features::kBookmarkTriggerForPrefetch) ||
|
||||
base::FeatureList::IsEnabled(features::kNewTabPageTriggerForPrefetch);
|
||||
}
|
||||
|
||||
bool ChromeContentBrowserClient::UsePreloadServingMetrics() {
|
||||
return features::kDsePreload2UsePreloadServingMetrics.Get();
|
||||
}
|
||||
|
||||
+182
-110
@@ -153,7 +153,7 @@ public abstract class ChromeFeatureList {
|
||||
}
|
||||
|
||||
// Feature names.
|
||||
/* Alphabetical: */
|
||||
// keep-sorted start group_prefixes=["public static final String"]
|
||||
public static final String ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS =
|
||||
"AccountForSuppressedKeyboardInsets";
|
||||
public static final String ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2 =
|
||||
@@ -162,7 +162,10 @@ public abstract class ChromeFeatureList {
|
||||
"AdaptiveButtonInTopToolbarPageSummary";
|
||||
public static final String ALLOW_TAB_CLOSING_UPON_MINIMIZATION =
|
||||
"AllowTabClosingUponMinimization";
|
||||
public static final String ALWAYS_BLOCK_3PCS_INCOGNITO = "AlwaysBlock3pcsIncognito";
|
||||
public static final String ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER =
|
||||
"AndroidAnimatedProgressBarInBrowser";
|
||||
public static final String ANDROID_ANIMATED_PROGRESS_BAR_IN_VIZ =
|
||||
"AndroidAnimatedProgressBarInViz";
|
||||
public static final String ANDROID_APPEARANCE_SETTINGS = "AndroidAppearanceSettings";
|
||||
public static final String ANDROID_APP_INTEGRATION = "AndroidAppIntegration";
|
||||
public static final String ANDROID_APP_INTEGRATION_MODULE = "AndroidAppIntegrationModule";
|
||||
@@ -176,9 +179,9 @@ public abstract class ChromeFeatureList {
|
||||
public static final String ANDROID_BOTTOM_TOOLBAR_V2 = "AndroidBottomToolbarV2";
|
||||
public static final String ANDROID_COMPOSEPLATE = "AndroidComposeplate";
|
||||
public static final String ANDROID_DATA_IMPORTER_SERVICE = "AndroidDataImporterService";
|
||||
public static final String ANDROID_DESKTOP_DENSITY = "AndroidDesktopDensity";
|
||||
public static final String ANDROID_ELEGANT_TEXT_HEIGHT = "AndroidElegantTextHeight";
|
||||
public static final String ANDROID_FIRST_RUN_LAUNCH_BOUNDS = "AndroidFirstRunLaunchBounds";
|
||||
public static final String ANDROID_GRAMMAR_CHECK = "AndroidGrammarCheck";
|
||||
public static final String ANDROID_MINIMAL_UI_LARGE_SCREEN = "AndroidMinimalUiLargeScreen";
|
||||
public static final String ANDROID_NATIVE_PAGES_IN_NEW_TAB = "AndroidNativePagesInNewTab";
|
||||
public static final String ANDROID_NO_VISIBLE_HINT_FOR_DIFFERENT_TLD =
|
||||
@@ -194,7 +197,6 @@ public abstract class ChromeFeatureList {
|
||||
public static final String ANDROID_SETTINGS_CONTAINMENT = "AndroidSettingsContainment";
|
||||
public static final String ANDROID_SHOW_RESTORE_TABS_PROMO_ON_FRE_BYPASSED_KILL_SWITCH =
|
||||
"AndroidShowRestoreTabsPromoOnFREBypassedKillSwitch";
|
||||
public static final String ANDROID_SPELLCHECK_NATIVE_UI = "AndroidSpellcheckNativeUi";
|
||||
public static final String ANDROID_SURFACE_COLOR_UPDATE = "AndroidSurfaceColorUpdate";
|
||||
public static final String ANDROID_TAB_DECLUTTER_ARCHIVE_ALL_BUT_ACTIVE =
|
||||
"AndroidTabDeclutterArchiveAllButActiveTab";
|
||||
@@ -215,12 +217,19 @@ public abstract class ChromeFeatureList {
|
||||
public static final String ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH =
|
||||
"AndroidTabSkipSaveTabsTaskKillswitch";
|
||||
public static final String ANDROID_THEME_MODULE = "AndroidThemeModule";
|
||||
public static final String ANDROID_WEB_APP_LAUNCH_HANDLER = "AndroidWebAppLaunchHandler";
|
||||
public static final String ANDROID_THEME_RESOURCE_PROVIDER = "AndroidThemeResourceProvider";
|
||||
public static final String ANDROID_TIPS_NOTIFICATIONS = "AndroidTipsNotifications";
|
||||
public static final String ANDROID_USE_ADMINS_FOR_ENTERPRISE_INFO =
|
||||
"AndroidUseAdminsForEnterpriseInfo";
|
||||
public static final String ANDROID_WEB_APP_LAUNCH_HANDLER = "AndroidWebAppLaunchHandler";
|
||||
public static final String ANDROID_WINDOW_CONTROLS_OVERLAY = "AndroidWindowControlsOverlay";
|
||||
public static final String ANDROID_WINDOW_POPUP_LARGE_SCREEN = "AndroidWindowPopupLargeScreen";
|
||||
public static final String ANDROID_WINDOW_POPUP_PREDICT_FINAL_BOUNDS =
|
||||
"AndroidWindowPopupPredictFinalBounds";
|
||||
public static final String ANDROID_WINDOW_POPUP_RESIZE_AFTER_SPAWN =
|
||||
"AndroidWindowPopupResizeAfterSpawn";
|
||||
public static final String ANDROID_XR_USES_SURFACE_CONTROL =
|
||||
"AndroidWindowPopupResizeAfterSpawn";
|
||||
public static final String ANIMATED_GIF_REFACTOR = "AnimatedGifRefactor";
|
||||
public static final String ANIMATED_IMAGE_DRAG_SHADOW = "AnimatedImageDragShadow";
|
||||
public static final String ANNOTATED_PAGE_CONTENTS_VIRTUAL_STRUCTURE =
|
||||
@@ -230,9 +239,10 @@ public abstract class ChromeFeatureList {
|
||||
public static final String ASYNC_NOTIFICATION_MANAGER = "AsyncNotificationManager";
|
||||
public static final String ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD =
|
||||
"AsyncNotificationManagerForDownload";
|
||||
public static final String AUTO_PICTURE_IN_PICTURE_ANDROID = "AutoPictureInPictureAndroid";
|
||||
public static final String AUTOFILL_ALLOW_NON_HTTP_ACTIVATION =
|
||||
"AutofillAllowNonHttpActivation";
|
||||
public static final String AUTOFILL_ANDROID_DESKTOP_KEYBOARD_ACCESSORY_REVAMP =
|
||||
"AutofillAndroidDesktopKeyboardAccessoryRevamp";
|
||||
public static final String AUTOFILL_ANDROID_DESKTOP_SUPPRESS_ACCESSORY_ON_EMPTY =
|
||||
"AutofillAndroidDesktopSuppressAccessoryOnEmpty";
|
||||
public static final String AUTOFILL_DEEP_LINK_AUTOFILL_OPTIONS =
|
||||
@@ -249,10 +259,6 @@ public abstract class ChromeFeatureList {
|
||||
"AutofillEnableLoyaltyCardsFilling";
|
||||
public static final String AUTOFILL_ENABLE_NEW_CARD_BENEFITS_TOGGLE_TEXT =
|
||||
"AutofillEnableNewCardBenefitsToggleText";
|
||||
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 =
|
||||
"AutofillEnablePaymentSettingsServerCardSave";
|
||||
public static final String AUTOFILL_ENABLE_RANKING_FORMULA_ADDRESS_PROFILES =
|
||||
"AutofillEnableRankingFormulaAddressProfiles";
|
||||
public static final String AUTOFILL_ENABLE_RANKING_FORMULA_CREDIT_CARDS =
|
||||
@@ -273,10 +279,9 @@ public abstract class ChromeFeatureList {
|
||||
public static final String AUTOFILL_SYNC_EWALLET_ACCOUNTS = "AutofillSyncEwalletAccounts";
|
||||
public static final String AUTOFILL_THIRD_PARTY_MODE_CONTENT_PROVIDER =
|
||||
"AutofillThirdPartyModeContentProvider";
|
||||
public static final String AUTOFILL_VIRTUAL_VIEW_STRUCTURE_ANDROID =
|
||||
"AutofillVirtualViewStructureAndroid";
|
||||
public static final String AUTOMOTIVE_BACK_BUTTON_BAR_STREAMLINE =
|
||||
"AutomotiveBackButtonBarStreamline";
|
||||
public static final String AUTO_PICTURE_IN_PICTURE_ANDROID = "AutoPictureInPictureAndroid";
|
||||
public static final String AVOID_RELAYOUT_DURING_FOCUS_ANIMATION =
|
||||
"AvoidRelayoutDuringFocusAnimation";
|
||||
public static final String BACKGROUND_THREAD_POOL_FIELD_TRIAL =
|
||||
@@ -309,6 +314,8 @@ public abstract class ChromeFeatureList {
|
||||
"CCTBlockTouchesDuringEnterAnimation";
|
||||
public static final String CCT_CLIENT_DATA_HEADER = "CCTClientDataHeader";
|
||||
public static final String CCT_CONTEXTUAL_MENU_ITEMS = "CCTContextualMenuItems";
|
||||
public static final String CCT_DESTROY_TAB_WHEN_MODEL_IS_EMPTY =
|
||||
"CCTDestroyTabWhenModelIsEmpty";
|
||||
public static final String CCT_EARLY_NAV = "CCTEarlyNav";
|
||||
public static final String CCT_EXTEND_TRUSTED_CDN_PUBLISHER = "CCTExtendTrustedCdnPublisher";
|
||||
public static final String CCT_FIX_WARMUP = "CCTFixWarmup";
|
||||
@@ -320,31 +327,31 @@ public abstract class ChromeFeatureList {
|
||||
"CCTIncognitoAvailableToThirdParty";
|
||||
public static final String CCT_MINIMIZED_ENABLED_BY_DEFAULT = "CCTMinimizedEnabledByDefault";
|
||||
public static final String CCT_NAVIGATIONAL_PREFETCH = "CCTNavigationalPrefetch";
|
||||
public static final String CCT_NAVIGATION_METRICS = "CCTNavigationMetrics";
|
||||
public static final String CCT_NESTED_SECURITY_ICON = "CCTNestedSecurityIcon";
|
||||
public static final String CCT_OPEN_IN_BROWSER_BUTTON_IF_ALLOWED_BY_EMBEDDER =
|
||||
"CCTOpenInBrowserButtonIfAllowedByEmbedder";
|
||||
public static final String CCT_OPEN_IN_BROWSER_BUTTON_IF_ENABLED_BY_EMBEDDER =
|
||||
"CCTOpenInBrowserButtonIfEnabledByEmbedder";
|
||||
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";
|
||||
public static final String CCT_RESET_TIMEOUT_ENABLED = "CCTResetTimeoutEnabled";
|
||||
public static final String CCT_RESIZABLE_FOR_THIRD_PARTIES = "CCTResizableForThirdParties";
|
||||
public static final String CCT_REVAMPED_BRANDING = "CCTRevampedBranding";
|
||||
public static final String CCT_SHOW_TAB_FIX = "CCTShowTabFix";
|
||||
public static final String CCT_TAB_MODAL_DIALOG = "CCTTabModalDialog";
|
||||
public static final String CCT_TOOLBAR_REFACTOR = "CCTToolbarRefactor";
|
||||
public static final String CCT_RESET_TIMEOUT_ENABLED = "CCTResetTimeoutEnabled";
|
||||
public static final String CHANGE_UNFOCUSED_PRIORITY = "ChangeUnfocusedPriority";
|
||||
public static final String CHROME_NATIVE_URL_OVERRIDING = "ChromeNativeUrlOverriding";
|
||||
public static final String CHROME_SURVEY_NEXT_ANDROID = "ChromeSurveyNextAndroid";
|
||||
public static final String CLAMP_AUTOMOTIVE_SCALING = "ClampAutomotiveScaling";
|
||||
public static final String CLANK_STARTUP_LATENCY_INJECTION = "ClankStartupLatencyInjection";
|
||||
public static final String CLANK_WHATS_NEW = "ClankWhatsNew";
|
||||
public static final String CLEANUP_LEGACY_TABSTATE = "CleanupLegacyTabState";
|
||||
public static final String CLEAR_BROWSING_DATA_ANDROID_SURVEY =
|
||||
"ClearBrowsingDataAndroidSurvey";
|
||||
public static final String CLEAR_INSTANCE_INFO_WHEN_CLOSED_INTENTIONALLY =
|
||||
@@ -363,6 +370,8 @@ public abstract class ChromeFeatureList {
|
||||
public static final String CONTEXTUAL_SEARCH_SUPPRESS_SHORT_VIEW =
|
||||
"ContextualSearchSuppressShortView";
|
||||
public static final String CONTEXT_MENU_EMPTY_SPACE = "ContextMenuEmptySpace";
|
||||
public static final String CONTEXT_MENU_PICTURE_IN_PICTURE_ANDROID =
|
||||
"ContextMenuPictureInPictureAndroid";
|
||||
public static final String CONTEXT_MENU_TRANSLATE_WITH_GOOGLE_LENS =
|
||||
"ContextMenuTranslateWithGoogleLens";
|
||||
public static final String CONTROLS_VISIBILITY_FROM_NAVIGATIONS =
|
||||
@@ -373,13 +382,13 @@ public abstract class ChromeFeatureList {
|
||||
public static final String DARKEN_WEBSITES_CHECKBOX_IN_THEMES_SETTING =
|
||||
"DarkenWebsitesCheckboxInThemesSetting";
|
||||
public static final String DATA_SHARING = "DataSharing";
|
||||
public static final String DATA_SHARING_ENABLE_UPDATE_CHROME_UI =
|
||||
"DataSharingEnableUpdateChromeUI";
|
||||
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 DESKTOP_UA_ON_CONNECTED_DISPLAY = "DesktopUAOnConnectedDisplay";
|
||||
public static final String DETAILED_LANGUAGE_SETTINGS = "DetailedLanguageSettings";
|
||||
public static final String DEVICE_AUTHENTICATOR_ANDROIDX = "DeviceAuthenticatorAndroidx";
|
||||
public static final String DISABLE_INSTANCE_LIMIT = "DisableInstanceLimit";
|
||||
@@ -390,7 +399,6 @@ public abstract class ChromeFeatureList {
|
||||
public static final String DRAW_CHROME_PAGES_EDGE_TO_EDGE = "DrawChromePagesEdgeToEdge";
|
||||
public static final String DRAW_CUTOUT_EDGE_TO_EDGE = "DrawCutoutEdgeToEdge";
|
||||
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";
|
||||
@@ -408,11 +416,11 @@ public abstract class ChromeFeatureList {
|
||||
public static final String ENABLE_EXCLUSIVE_ACCESS_MANAGER = "EnableExclusiveAccessManager";
|
||||
public static final String ENABLE_FULLSCREEN_TO_ANY_SCREEN_ANDROID =
|
||||
"EnableFullscreenToAnyScreenAndroid";
|
||||
public static final String FACILITATED_PAYMENTS_ENABLE_A2A_PAYMENT =
|
||||
"FacilitatedPaymentsEnableA2APayment";
|
||||
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 FACILITATED_PAYMENTS_ENABLE_A2A_PAYMENT =
|
||||
"FacilitatedPaymentsEnableA2APayment";
|
||||
public static final String FEED_AUDIO_OVERVIEWS = "FeedAudioOverviews";
|
||||
public static final String FEED_CONTAINMENT = "FeedContainment";
|
||||
public static final String FEED_FOLLOW_UI_UPDATE = "FeedFollowUiUpdate";
|
||||
@@ -449,6 +457,7 @@ public abstract class ChromeFeatureList {
|
||||
public static final String HUB_BACK_BUTTON = "HubBackButton";
|
||||
public static final String HUB_SLIDE_ANIMATION = "HubSlideAnimation";
|
||||
public static final String INCOGNITO_SCREENSHOT = "IncognitoScreenshot";
|
||||
public static final String INCOGNITO_THEME_OVERLAY_TESTING = "IncognitoThemeOverlayTesting";
|
||||
public static final String INSTANCE_SWITCHER_V2 = "InstanceSwitcherV2";
|
||||
public static final String IP_PROTECTION_UX = "IpProtectionUx";
|
||||
public static final String KEYBOARD_ESC_BACK_NAVIGATION = "KeyboardEscBackNavigation";
|
||||
@@ -457,8 +466,10 @@ 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 LOAD_NATIVE_EARLY = "LoadNativeEarly";
|
||||
public static final String LOCAL_NETWORK_ACCESS = "LocalNetworkAccessChecks";
|
||||
public static final String LOCK_BACK_PRESS_HANDLER_AT_START = "LockBackPressHandlerAtStart";
|
||||
public static final String LOCK_TOP_CONTROLS_ON_LARGE_TABLETS = "LockTopControlsOnLargeTablets";
|
||||
public static final String LOOKALIKE_NAVIGATION_URL_SUGGESTIONS_UI =
|
||||
"LookalikeUrlNavigationSuggestionsUI";
|
||||
public static final String MAGIC_STACK_ANDROID = "MagicStackAndroid";
|
||||
@@ -477,8 +488,6 @@ public abstract class ChromeFeatureList {
|
||||
public static final String NATIVE_PAGE_TRANSITION_HARDWARE_CAPTURE =
|
||||
"NativePageTransitionHardwareCapture";
|
||||
public static final String NAV_BAR_COLOR_ANIMATION = "NavBarColorAnimation";
|
||||
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 =
|
||||
@@ -501,6 +510,7 @@ public abstract class ChromeFeatureList {
|
||||
public static final String PARTNER_CUSTOMIZATIONS_UMA = "PartnerCustomizationsUma";
|
||||
public static final String PASSWORD_FORM_GROUPED_AFFILIATIONS =
|
||||
"PasswordFormGroupedAffiliations";
|
||||
public static final String PCCT_MINIMUM_HEIGHT = "PCCTMinimumHeight";
|
||||
public static final String PERMISSION_DEDICATED_CPSS_SETTING_ANDROID =
|
||||
"PermissionDedicatedCpssSettingAndroid";
|
||||
public static final String PERMISSION_SITE_SETTING_RADIO_BUTTON =
|
||||
@@ -513,8 +523,6 @@ public abstract class ChromeFeatureList {
|
||||
public static final String POWER_SAVING_MODE_BROADCAST_RECEIVER_IN_BACKGROUND =
|
||||
"PowerSavingModeBroadcastReceiverInBackground";
|
||||
public static final String PRECONNECT_ON_TAB_CREATION = "PreconnectOnTabCreation";
|
||||
public static final String PREFETCH_BROWSER_INITIATED_TRIGGERS =
|
||||
"PrefetchBrowserInitiatedTriggers";
|
||||
public static final String PRERENDER2 = "Prerender2";
|
||||
public static final String PRICE_ANNOTATIONS = "PriceAnnotations";
|
||||
public static final String PRICE_CHANGE_MODULE = "PriceChangeModule";
|
||||
@@ -525,11 +533,11 @@ 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_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";
|
||||
// Do not access directly, use SupervisedUserService::IsLocallySupervised() or
|
||||
// supervised_user::UseLocalSupervision() instead. Exposed only for testing.
|
||||
public static final String PROPAGATE_DEVICE_CONTENT_FILTERS_TO_SUPERVISED_USER =
|
||||
"PropagateDeviceContentFiltersToSupervisedUser";
|
||||
public static final String PUSH_MESSAGING_DISALLOW_SENDER_IDS =
|
||||
@@ -556,6 +564,7 @@ public abstract class ChromeFeatureList {
|
||||
public static final String REENGAGEMENT_NOTIFICATION = "ReengagementNotification";
|
||||
public static final String RELATED_SEARCHES_ALL_LANGUAGE = "RelatedSearchesAllLanguage";
|
||||
public static final String RELATED_SEARCHES_SWITCH = "RelatedSearchesSwitch";
|
||||
public static final String RELATED_WEBSITE_SETS_UI = "RelatedWebsiteSetsUi";
|
||||
public static final String REMOVE_TAB_FOCUS_ON_SHOWING_AND_SELECT =
|
||||
"RemoveTabFocusOnShowingAndSelect";
|
||||
public static final String RENAME_JOURNEYS = "RenameJourneys";
|
||||
@@ -564,6 +573,8 @@ public abstract class ChromeFeatureList {
|
||||
public static final String RIGHT_EDGE_GOES_FORWARD_GESTURE_NAV =
|
||||
"RightEdgeGoesForwardGestureNav";
|
||||
public static final String ROBUST_WINDOW_MANAGEMENT = "RobustWindowManagement";
|
||||
public static final String ROBUST_WINDOW_MANAGEMENT_EXPERIMENTAL =
|
||||
"RobustWindowManagementExperimental";
|
||||
public static final String SAFETY_HUB = "SafetyHub";
|
||||
public static final String SAFETY_HUB_ANDROID_ORGANIC_SURVEY = "SafetyHubAndroidOrganicSurvey";
|
||||
public static final String SAFETY_HUB_ANDROID_SURVEY = "SafetyHubAndroidSurvey";
|
||||
@@ -583,10 +594,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_IN_CCT_IF_ENABLED_BY_EMBEDDER =
|
||||
"SearchInCCTIfEnabledByEmbedder";
|
||||
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 =
|
||||
@@ -599,6 +610,7 @@ public abstract class ChromeFeatureList {
|
||||
public static final String SENSITIVE_CONTENT_WHILE_SWITCHING_TABS =
|
||||
"SensitiveContentWhileSwitchingTabs";
|
||||
public static final String SETTINGS_SINGLE_ACTIVITY = "SettingsSingleActivity";
|
||||
public static final String SHARED_DATA_TYPES_KILL_SWITCH = "SharedDataTypesKillSwitch";
|
||||
public static final String SHARE_CUSTOM_ACTIONS_IN_CCT = "ShareCustomActionsInCCT";
|
||||
public static final String SHOW_CLOSE_ALL_INCOGNITO_TABS_BUTTON =
|
||||
"ShowCloseAllIncognitoTabsButton";
|
||||
@@ -619,8 +631,6 @@ public abstract class ChromeFeatureList {
|
||||
public static final String SUGGESTION_ANSWERS_COLOR_REVERSE = "SuggestionAnswersColorReverse";
|
||||
public static final String SUPPRESS_TOOLBAR_CAPTURES_AT_GESTURE_END =
|
||||
"SuppressToolbarCapturesAtGestureEnd";
|
||||
public static final String SWAP_NEW_TAB_AND_NEW_TAB_IN_GROUP_ANDROID =
|
||||
"SwapNewTabAndNewTabInGroupAndroid";
|
||||
public static final String SYNC_ENABLE_PASSWORDS_SYNC_ERROR_MESSAGE_ALTERNATIVE =
|
||||
"SyncEnablePasswordsSyncErrorMessageAlternative";
|
||||
public static final String TABLET_TAB_STRIP_ANIMATION = "TabletTabStripAnimation";
|
||||
@@ -629,6 +639,8 @@ public abstract class ChromeFeatureList {
|
||||
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_ANDROID_VISUAL_DATA_CLEANUP =
|
||||
"TabGroupAndroidVisualDataCleanup";
|
||||
public static final String TAB_GROUP_ENTRY_POINTS_ANDROID = "TabGroupEntryPointsAndroid";
|
||||
public static final String TAB_GROUP_PARITY_BOTTOM_SHEET_ANDROID =
|
||||
"TabGroupParityBottomSheetAndroid";
|
||||
@@ -659,9 +671,9 @@ public abstract class ChromeFeatureList {
|
||||
"ThirdPartyDisableChromeAutofillSettingsScreen";
|
||||
public static final String TINKER_TANK_BOTTOM_SHEET = "TinkerTankBottomSheet";
|
||||
public static final String TOOLBAR_PHONE_ANIMATION_REFACTOR = "ToolbarPhoneAnimationRefactor";
|
||||
public static final String TOOLBAR_TABLET_RESIZE_REFACTOR = "ToolbarTabletResizeRefactor";
|
||||
public static final String TOOLBAR_SCROLL_ABLATION = "AndroidToolbarScrollAblation";
|
||||
public static final String TOOLBAR_SNAPSHOT_REFACTOR = "ToolbarSnapshotRefactor";
|
||||
public static final String TOOLBAR_TABLET_RESIZE_REFACTOR = "ToolbarTabletResizeRefactor";
|
||||
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";
|
||||
@@ -672,6 +684,7 @@ public abstract class ChromeFeatureList {
|
||||
"TrackingProtectionUserBypassPwaTrigger";
|
||||
public static final String TRANSLATE_MESSAGE_UI = "TranslateMessageUI";
|
||||
public static final String TRANSLATE_TFLITE = "TFLiteLanguageDetectionEnabled";
|
||||
public static final String UMA_SESSION_CORRECTNESS_FIXES = "UmaSessionCorrectnessFixes";
|
||||
public static final String UNO_PHASE_2_FOLLOW_UP = "UnoPhase2FollowUp";
|
||||
public static final String UPDATE_COMPOSTIROR_FOR_SURFACE_CONTROL =
|
||||
"UpdateCompositorForSurfaceControl";
|
||||
@@ -694,8 +707,9 @@ public abstract class ChromeFeatureList {
|
||||
public static final String WEB_FEED_SORT = "WebFeedSort";
|
||||
public static final String WEB_OTP_CROSS_DEVICE_SIMPLE_STRING = "WebOtpCrossDeviceSimpleString";
|
||||
public static final String XSURFACE_METRICS_REPORTING = "XsurfaceMetricsReporting";
|
||||
// keep-sorted end
|
||||
|
||||
/* Alphabetical: */
|
||||
// keep-sorted start group_prefixes=["public static final CachedFlag"]
|
||||
public static final CachedFlag sAccountForSuppressedKeyboardInsets =
|
||||
newCachedFlag(ACCOUNT_FOR_SUPPRESSED_KEYBOARD_INSETS, /* defaultValue= */ true);
|
||||
public static final CachedFlag sAllowTabClosingUponMinimization =
|
||||
@@ -703,6 +717,10 @@ public abstract class ChromeFeatureList {
|
||||
ALLOW_TAB_CLOSING_UPON_MINIMIZATION,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sAndroidAnimatedProgressBarInBrowser =
|
||||
newCachedFlag(ANDROID_ANIMATED_PROGRESS_BAR_IN_BROWSER, false);
|
||||
public static final CachedFlag sAndroidAnimatedProgressBarInViz =
|
||||
newCachedFlag(ANDROID_ANIMATED_PROGRESS_BAR_IN_VIZ, false);
|
||||
public static final CachedFlag sAndroidAppIntegration =
|
||||
newCachedFlag(ANDROID_APP_INTEGRATION, true);
|
||||
public static final CachedFlag sAndroidAppIntegrationModule =
|
||||
@@ -721,6 +739,8 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(ANDROID_COMPOSEPLATE, false, true);
|
||||
public static final CachedFlag sAndroidDataImporterService =
|
||||
newCachedFlag(ANDROID_DATA_IMPORTER_SERVICE, true);
|
||||
public static final CachedFlag sAndroidDesktopDensity =
|
||||
newCachedFlag(ANDROID_DESKTOP_DENSITY, false);
|
||||
public static final CachedFlag sAndroidElegantTextHeight =
|
||||
newCachedFlag(ANDROID_ELEGANT_TEXT_HEIGHT, true);
|
||||
public static final CachedFlag sAndroidMinimalUiLargeScreen =
|
||||
@@ -732,11 +752,13 @@ public abstract class ChromeFeatureList {
|
||||
ANDROID_PROGRESS_BAR_VISUAL_UPDATE,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sAndroidSettingsContainment =
|
||||
newCachedFlag(ANDROID_SETTINGS_CONTAINMENT, false);
|
||||
public static final CachedFlag sAndroidSurfaceColorUpdate =
|
||||
newCachedFlag(
|
||||
ANDROID_SURFACE_COLOR_UPDATE,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
/* defaultValueInTests= */ false);
|
||||
public static final CachedFlag sAndroidTabDeclutterDedupeTabIdsKillSwitch =
|
||||
newCachedFlag(ANDROID_TAB_DECLUTTER_DEDUPE_TAB_IDS_KILL_SWITCH, true);
|
||||
public static final CachedFlag sAndroidTabGroupsColorUpdateGm3 =
|
||||
@@ -746,6 +768,8 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(ANDROID_TAB_SKIP_SAVE_TABS_TASK_KILLSWITCH, true, true);
|
||||
public static final CachedFlag sAndroidThemeModule =
|
||||
newCachedFlag(ANDROID_THEME_MODULE, false, /* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sAndroidThemeResourceProvider =
|
||||
newCachedFlag(ANDROID_THEME_RESOURCE_PROVIDER, false, /* defaultValueInTests= */ false);
|
||||
public static final CachedFlag sAndroidUseAdminsForEnterpriseInfo =
|
||||
newCachedFlag(
|
||||
ANDROID_USE_ADMINS_FOR_ENTERPRISE_INFO,
|
||||
@@ -753,8 +777,12 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sAndroidWebAppLaunchHandler =
|
||||
newCachedFlag(ANDROID_WEB_APP_LAUNCH_HANDLER, false, true);
|
||||
public static final CachedFlag sAndroidWindowControlsOverlay =
|
||||
newCachedFlag(ANDROID_WINDOW_CONTROLS_OVERLAY, false);
|
||||
public static final CachedFlag sAndroidWindowPopupLargeScreen =
|
||||
newCachedFlag(ANDROID_WINDOW_POPUP_LARGE_SCREEN, false, true);
|
||||
public static final CachedFlag sAndroidWindowPopupPredictFinalBounds =
|
||||
newCachedFlag(ANDROID_WINDOW_POPUP_PREDICT_FINAL_BOUNDS, false);
|
||||
public static final CachedFlag sAndroidWindowPopupResizeAfterSpawn =
|
||||
newCachedFlag(ANDROID_WINDOW_POPUP_RESIZE_AFTER_SPAWN, false);
|
||||
public static final CachedFlag sAppSpecificHistory = newCachedFlag(APP_SPECIFIC_HISTORY, true);
|
||||
@@ -765,9 +793,15 @@ public abstract class ChromeFeatureList {
|
||||
public static final CachedFlag sAsyncNotificationManagerForDownload =
|
||||
newCachedFlag(ASYNC_NOTIFICATION_MANAGER_FOR_DOWNLOAD, true);
|
||||
public static final CachedFlag sAutomotiveBackButtonBarStreamline =
|
||||
newCachedFlag(AUTOMOTIVE_BACK_BUTTON_BAR_STREAMLINE, false);
|
||||
newCachedFlag(
|
||||
AUTOMOTIVE_BACK_BUTTON_BAR_STREAMLINE,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sBackgroundThreadPoolFieldTrial =
|
||||
newCachedFlag(BACKGROUND_THREAD_POOL_FIELD_TRIAL, false);
|
||||
newCachedFlag(
|
||||
BACKGROUND_THREAD_POOL_FIELD_TRIAL,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sBatchTabRestore = newCachedFlag(BATCH_TAB_RESTORE, true);
|
||||
public static final CachedFlag sBlockIntentsWhileLocked =
|
||||
newCachedFlag(BLOCK_INTENTS_WHILE_LOCKED, false);
|
||||
@@ -792,9 +826,10 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(CCT_BLOCK_TOUCHES_DURING_ENTER_ANIMATION, true);
|
||||
public static final CachedFlag sCctContextualMenuItems =
|
||||
newCachedFlag(CCT_CONTEXTUAL_MENU_ITEMS, false);
|
||||
public static final CachedFlag sCctDestroyTabWhenModelIsEmpty =
|
||||
newCachedFlag(CCT_DESTROY_TAB_WHEN_MODEL_IS_EMPTY, true);
|
||||
public static final CachedFlag sCctFixWarmup =
|
||||
newCachedFlag(
|
||||
CCT_FIX_WARMUP, /* defaultValue= */ false, /* defaultValueInTests= */ true);
|
||||
newCachedFlag(CCT_FIX_WARMUP, /* defaultValue= */ true);
|
||||
public static final CachedFlag sCctFreInSameTask = newCachedFlag(CCT_FRE_IN_SAME_TASK, true);
|
||||
public static final CachedFlag sCctGoogleBottomBar =
|
||||
newCachedFlag(
|
||||
@@ -822,22 +857,25 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sCctRealtimeEngagementEventsInBackground =
|
||||
newCachedFlag(
|
||||
CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
newCachedFlag(CCT_REALTIME_ENGAGEMENT_EVENTS_IN_BACKGROUND, true);
|
||||
public static final CachedFlag sCctResetTimeoutEnabled =
|
||||
newCachedFlag(CCT_RESET_TIMEOUT_ENABLED, false);
|
||||
public static final CachedFlag sCctResizableForThirdParties =
|
||||
newCachedFlag(CCT_RESIZABLE_FOR_THIRD_PARTIES, true);
|
||||
public static final CachedFlag sCctRevampedBranding =
|
||||
newCachedFlag(CCT_REVAMPED_BRANDING, true);
|
||||
public static final CachedFlag sCctTabModalDialog = newCachedFlag(CCT_TAB_MODAL_DIALOG, true);
|
||||
public static final CachedFlag sCctToolbarRefactor = newCachedFlag(CCT_TOOLBAR_REFACTOR, false);
|
||||
public static final CachedFlag sCctResetTimeoutEnabled =
|
||||
newCachedFlag(CCT_RESET_TIMEOUT_ENABLED, false);
|
||||
public static final CachedFlag sCctToolbarRefactor =
|
||||
newCachedFlag(CCT_TOOLBAR_REFACTOR, false, true);
|
||||
public static final CachedFlag sClampAutomotiveScaling =
|
||||
newCachedFlag(CLAMP_AUTOMOTIVE_SCALING, true);
|
||||
public static final CachedFlag sClankStartupLatencyInjection =
|
||||
newCachedFlag(CLANK_STARTUP_LATENCY_INJECTION, false);
|
||||
public static final CachedFlag sCleanupLegacyTabState =
|
||||
newCachedFlag(
|
||||
CLEANUP_LEGACY_TABSTATE,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sCollectAndroidFrameTimelineMetrics =
|
||||
newCachedFlag(
|
||||
COLLECT_ANDROID_FRAME_TIMELINE_METRICS,
|
||||
@@ -845,6 +883,8 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sCommandLineOnNonRooted =
|
||||
newCachedFlag(COMMAND_LINE_ON_NON_ROOTED, false);
|
||||
public static final CachedFlag sContextMenuPictureInPictureAndroid =
|
||||
newCachedFlag(CONTEXT_MENU_PICTURE_IN_PICTURE_ANDROID, false);
|
||||
public static final CachedFlag sCpaSpecUpdate =
|
||||
newCachedFlag(
|
||||
CPA_SPEC_UPDATE, /* defaultValue= */ false, /* defaultValueInTests= */ true);
|
||||
@@ -855,6 +895,11 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sCrossDeviceTabPaneAndroid =
|
||||
newCachedFlag(CROSS_DEVICE_TAB_PANE_ANDROID, false);
|
||||
public static final CachedFlag sDesktopUAOnConnectedDisplay =
|
||||
newCachedFlag(
|
||||
DESKTOP_UA_ON_CONNECTED_DISPLAY,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ false);
|
||||
public static final CachedFlag sDisableInstanceLimit =
|
||||
newCachedFlag(
|
||||
DISABLE_INSTANCE_LIMIT,
|
||||
@@ -866,8 +911,6 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(DRAW_CHROME_PAGES_EDGE_TO_EDGE, /* defaultValue= */ true);
|
||||
public static final CachedFlag sEdgeToEdgeBottomChin =
|
||||
newCachedFlag(EDGE_TO_EDGE_BOTTOM_CHIN, /* defaultValue= */ true);
|
||||
public static final CachedFlag sEdgeToEdgeDebugging =
|
||||
newCachedFlag(EDGE_TO_EDGE_DEBUGGING, /* defaultValue= */ false);
|
||||
public static final CachedFlag sEdgeToEdgeEverywhere =
|
||||
newCachedFlag(
|
||||
EDGE_TO_EDGE_EVERYWHERE,
|
||||
@@ -886,8 +929,6 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(EDUCATIONAL_TIP_DEFAULT_BROWSER_PROMO_CARD, false);
|
||||
public static final CachedFlag sEducationalTipModule =
|
||||
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 sEnableFullscreenToAnyScreenAndroid =
|
||||
@@ -905,7 +946,7 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(
|
||||
GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
/* defaultValueInTests= */ false);
|
||||
public static final CachedFlag sGridTabSwitcherUpdate =
|
||||
newCachedFlag(GRID_TAB_SWITCHER_UPDATE, false, /* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sHistoryPaneAndroid =
|
||||
@@ -914,16 +955,23 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sHomepageIsNewTabPagePolicyAndroid =
|
||||
newCachedFlag(HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_ANDROID, false);
|
||||
newCachedFlag(HOMEPAGE_IS_NEW_TAB_PAGE_POLICY_ANDROID, true);
|
||||
public static final CachedFlag sIncognitoThemeOverlayTesting =
|
||||
newCachedFlag(INCOGNITO_THEME_OVERLAY_TESTING, false);
|
||||
public static final CachedFlag sKeyboardEscBackNavigation =
|
||||
newCachedFlag(KEYBOARD_ESC_BACK_NAVIGATION, true);
|
||||
public static final CachedFlag sLegacyTabStateDeprecation =
|
||||
newCachedFlag(
|
||||
LEGACY_TAB_STATE_DEPRECATION,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValue= */ true,
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sLoadNativeEarly =
|
||||
newCachedFlag(
|
||||
LOAD_NATIVE_EARLY, /* defaultValue= */ false, /* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sLockBackPressHandlerAtStart =
|
||||
newCachedFlag(LOCK_BACK_PRESS_HANDLER_AT_START, true);
|
||||
public static final CachedFlag sLockTopControlsOnLargeTablets =
|
||||
newCachedFlag(LOCK_TOP_CONTROLS_ON_LARGE_TABLETS, false);
|
||||
public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true);
|
||||
public static final CachedFlag sMaliciousApkDownloadCheck =
|
||||
newCachedFlag(
|
||||
@@ -949,10 +997,8 @@ public abstract class ChromeFeatureList {
|
||||
/* defaultValueInTests= */ true);
|
||||
public static final CachedFlag sNavBarColorAnimation =
|
||||
newCachedFlag(NAV_BAR_COLOR_ANIMATION, /* defaultValue= */ 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);
|
||||
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION, true);
|
||||
public static final CachedFlag sNewTabPageCustomizationForMvt =
|
||||
newCachedFlag(NEW_TAB_PAGE_CUSTOMIZATION_FOR_MVT, false, true);
|
||||
public static final CachedFlag sNewTabPageCustomizationToolbarButton =
|
||||
@@ -963,13 +1009,12 @@ public abstract class ChromeFeatureList {
|
||||
newCachedFlag(NOTIFICATION_TRAMPOLINE, false);
|
||||
public static final CachedFlag sOptimizationGuidePushNotifications =
|
||||
newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true);
|
||||
public static final CachedFlag sPCctMinimumHeight = newCachedFlag(PCCT_MINIMUM_HEIGHT, true);
|
||||
public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false);
|
||||
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, true);
|
||||
public static final CachedFlag sPrefetchBrowserInitiatedTriggers =
|
||||
newCachedFlag(PREFETCH_BROWSER_INITIATED_TRIGGERS, true);
|
||||
public static final CachedFlag sPriceChangeModule = newCachedFlag(PRICE_CHANGE_MODULE, true);
|
||||
public static final CachedFlag sReportNotificationContentDetectionData =
|
||||
newCachedFlag(
|
||||
@@ -987,10 +1032,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 sSearchInCCTIfEnabledByEmbedder =
|
||||
newCachedFlag(SEARCH_IN_CCT_IF_ENABLED_BY_EMBEDDER, true);
|
||||
public static final CachedFlag sSettingsSingleActivity =
|
||||
newCachedFlag(
|
||||
SETTINGS_SINGLE_ACTIVITY,
|
||||
@@ -1031,6 +1076,11 @@ public abstract class ChromeFeatureList {
|
||||
public static final CachedFlag sTestDefaultDisabled =
|
||||
newCachedFlag(TEST_DEFAULT_DISABLED, false);
|
||||
public static final CachedFlag sTestDefaultEnabled = newCachedFlag(TEST_DEFAULT_ENABLED, true);
|
||||
public static final CachedFlag sToolbarPhoneAnimationRefactor =
|
||||
newCachedFlag(
|
||||
TOOLBAR_PHONE_ANIMATION_REFACTOR,
|
||||
/* defaultValue= */ false,
|
||||
/* defaultValueInTests= */ false);
|
||||
public static final CachedFlag sToolbarSnapshotRefactor =
|
||||
newCachedFlag(
|
||||
TOOLBAR_SNAPSHOT_REFACTOR,
|
||||
@@ -1054,19 +1104,20 @@ public abstract class ChromeFeatureList {
|
||||
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);
|
||||
newCachedFlag(USE_INITIAL_NETWORK_STATE_AT_STARTUP, true);
|
||||
public static final CachedFlag sUseLibunwindstackNativeUnwinderAndroid =
|
||||
newCachedFlag(USE_LIBUNWINDSTACK_NATIVE_UNWINDER_ANDROID, true);
|
||||
public static final CachedFlag sWebApkMinShellApkVersion =
|
||||
newCachedFlag(WEB_APK_MIN_SHELL_APK_VERSION, true);
|
||||
// keep-sorted end
|
||||
|
||||
public static final List<CachedFlag> sFlagsCachedFullBrowser =
|
||||
List.of(
|
||||
// keep-sorted start
|
||||
sAccountForSuppressedKeyboardInsets,
|
||||
sAllowTabClosingUponMinimization,
|
||||
sAndroidAnimatedProgressBarInBrowser,
|
||||
sAndroidAnimatedProgressBarInViz,
|
||||
sAndroidAppIntegration,
|
||||
sAndroidAppIntegrationModule,
|
||||
sAndroidAppIntegrationMultiDataSource,
|
||||
@@ -1076,18 +1127,23 @@ public abstract class ChromeFeatureList {
|
||||
sAndroidBottomToolbarV2,
|
||||
sAndroidComposeplate,
|
||||
sAndroidDataImporterService,
|
||||
sAndroidDesktopDensity,
|
||||
sAndroidElegantTextHeight,
|
||||
sAndroidMinimalUiLargeScreen,
|
||||
sAndroidOpenIncognitoAsWindow,
|
||||
sAndroidProgressBarVisualUpdate,
|
||||
sAndroidSettingsContainment,
|
||||
sAndroidSurfaceColorUpdate,
|
||||
sAndroidTabDeclutterDedupeTabIdsKillSwitch,
|
||||
sAndroidTabGroupsColorUpdateGm3,
|
||||
sAndroidTabSkipSaveTabsKillswitch,
|
||||
sAndroidThemeModule,
|
||||
sAndroidThemeResourceProvider,
|
||||
sAndroidUseAdminsForEnterpriseInfo,
|
||||
sAndroidWebAppLaunchHandler,
|
||||
sAndroidWindowControlsOverlay,
|
||||
sAndroidWindowPopupLargeScreen,
|
||||
sAndroidWindowPopupPredictFinalBounds,
|
||||
sAndroidWindowPopupResizeAfterSpawn,
|
||||
sAppSpecificHistory,
|
||||
sAppSpecificHistoryViewIntent,
|
||||
@@ -1106,6 +1162,7 @@ public abstract class ChromeFeatureList {
|
||||
sCctAutoTranslate,
|
||||
sCctBlockTouchesDuringEnterAnimation,
|
||||
sCctContextualMenuItems,
|
||||
sCctDestroyTabWhenModelIsEmpty,
|
||||
sCctFixWarmup,
|
||||
sCctFreInSameTask,
|
||||
sCctGoogleBottomBar,
|
||||
@@ -1117,30 +1174,31 @@ public abstract class ChromeFeatureList {
|
||||
sCctOpenInBrowserButtonIfEnabledByEmbedder,
|
||||
sCctPredictiveBackGesture,
|
||||
sCctRealtimeEngagementEventsInBackground,
|
||||
sCctResetTimeoutEnabled,
|
||||
sCctResizableForThirdParties,
|
||||
sCctRevampedBranding,
|
||||
sCctTabModalDialog,
|
||||
sCctToolbarRefactor,
|
||||
sCctResetTimeoutEnabled,
|
||||
sClampAutomotiveScaling,
|
||||
sClankStartupLatencyInjection,
|
||||
sCleanupLegacyTabState,
|
||||
sCollectAndroidFrameTimelineMetrics,
|
||||
sCommandLineOnNonRooted,
|
||||
sContextMenuPictureInPictureAndroid,
|
||||
sCpaSpecUpdate,
|
||||
sCpaTabGroupingButton,
|
||||
sCrossDeviceTabPaneAndroid,
|
||||
sDesktopUAOnConnectedDisplay,
|
||||
sDisableInstanceLimit,
|
||||
sDisplayEdgeToEdgeFullscreen,
|
||||
sDrawChromePagesEdgeToEdge,
|
||||
sEdgeToEdgeBottomChin,
|
||||
sEdgeToEdgeDebugging,
|
||||
sEdgeToEdgeEverywhere,
|
||||
sEdgeToEdgeMonitorConfigurations,
|
||||
sEdgeToEdgeTablet,
|
||||
sEdgeToEdgeUseBackupNavbarInsets,
|
||||
sEducationalTipDefaultBrowserPromoCard,
|
||||
sEducationalTipModule,
|
||||
sEnableDiscountInfoApi,
|
||||
sEnableExclusiveAccessManager,
|
||||
sEnableFullscreenToAnyScreenAndroid,
|
||||
sEnableXAxisActivityTransition,
|
||||
@@ -1152,9 +1210,12 @@ public abstract class ChromeFeatureList {
|
||||
sGridTabSwitcherUpdate,
|
||||
sHistoryPaneAndroid,
|
||||
sHomepageIsNewTabPagePolicyAndroid,
|
||||
sIncognitoThemeOverlayTesting,
|
||||
sKeyboardEscBackNavigation,
|
||||
sLegacyTabStateDeprecation,
|
||||
sLoadNativeEarly,
|
||||
sLockBackPressHandlerAtStart,
|
||||
sLockTopControlsOnLargeTablets,
|
||||
sMagicStackAndroid,
|
||||
sMaliciousApkDownloadCheck,
|
||||
sMiniOriginBar,
|
||||
@@ -1164,17 +1225,16 @@ public abstract class ChromeFeatureList {
|
||||
sMultiInstanceApplicationStatusCleanup,
|
||||
sMvcUpdateViewWhenModelChanged,
|
||||
sNavBarColorAnimation,
|
||||
sNewTabPageAndroidTriggerForPrerender2,
|
||||
sNewTabPageCustomization,
|
||||
sNewTabPageCustomizationForMvt,
|
||||
sNewTabPageCustomizationToolbarButton,
|
||||
sNewTabPageCustomizationV2,
|
||||
sNotificationTrampoline,
|
||||
sOptimizationGuidePushNotifications,
|
||||
sPCctMinimumHeight,
|
||||
sPaintPreviewDemo,
|
||||
sPostGetMyMemoryStateToBackground,
|
||||
sPowerSavingModeBroadcastReceiverInBackground,
|
||||
sPrefetchBrowserInitiatedTriggers,
|
||||
sPriceChangeModule,
|
||||
sReportNotificationContentDetectionData,
|
||||
sRightEdgeGoesForwardGestureNav,
|
||||
@@ -1182,8 +1242,8 @@ public abstract class ChromeFeatureList {
|
||||
sSafetyHubWeakAndReusedPasswords,
|
||||
sSearchInCCT,
|
||||
sSearchInCCTAlternateTapHandling,
|
||||
sSearchInCCTIfEnabledByEmbedder,
|
||||
sSearchInCCTAlternateTapHandlingIfEnabledByEmbedder,
|
||||
sSearchInCCTIfEnabledByEmbedder,
|
||||
sSettingsSingleActivity,
|
||||
sShowHomeButtonPolicyAndroid,
|
||||
sSmallerTabStripTitleLimit,
|
||||
@@ -1195,6 +1255,7 @@ public abstract class ChromeFeatureList {
|
||||
sTabStripLayoutOptimization,
|
||||
sTabWindowManagerReportIndicesMismatch,
|
||||
sTabletTabStripAnimation,
|
||||
sToolbarPhoneAnimationRefactor,
|
||||
sToolbarSnapshotRefactor,
|
||||
sTopControlsRefactor,
|
||||
sTouchToSearchCallout,
|
||||
@@ -1203,7 +1264,9 @@ public abstract class ChromeFeatureList {
|
||||
sUseChimeAndroidSdk,
|
||||
sUseInitialNetworkStateAtStartup,
|
||||
sUseLibunwindstackNativeUnwinderAndroid,
|
||||
sWebApkMinShellApkVersion);
|
||||
sWebApkMinShellApkVersion
|
||||
// keep-sorted end
|
||||
);
|
||||
|
||||
public static final List<CachedFlag> sFlagsCachedInMinimalBrowser =
|
||||
List.of(sAsyncNotificationManagerForDownload);
|
||||
@@ -1219,7 +1282,7 @@ public abstract class ChromeFeatureList {
|
||||
sTestCachedFlags));
|
||||
|
||||
// MutableFlagWithSafeDefault instances.
|
||||
/* Alphabetical: */
|
||||
// keep-sorted start group_prefixes=["public static final MutableFlagWithSafeDefault"]
|
||||
public static final MutableFlagWithSafeDefault sAdaptiveButtonInTopToolbarCustomizationV2 =
|
||||
newMutableFlagWithSafeDefault(ADAPTIVE_BUTTON_IN_TOP_TOOLBAR_CUSTOMIZATION_V2, false);
|
||||
public static final MutableFlagWithSafeDefault sAndroidAppearanceSettings =
|
||||
@@ -1248,6 +1311,8 @@ public abstract class ChromeFeatureList {
|
||||
newMutableFlagWithSafeDefault(ANDROID_TAB_DECLUTTER_RESCUE_KILLSWITCH, true);
|
||||
public static final MutableFlagWithSafeDefault sAndroidTabHighlighting =
|
||||
newMutableFlagWithSafeDefault(ANDROID_TAB_HIGHLIGHTING, false);
|
||||
public static final MutableFlagWithSafeDefault sAndroidTipsNotifications =
|
||||
newMutableFlagWithSafeDefault(ANDROID_TIPS_NOTIFICATIONS, false);
|
||||
public static final MutableFlagWithSafeDefault sBcivBottomControls =
|
||||
newMutableFlagWithSafeDefault(BCIV_BOTTOM_CONTROLS, true);
|
||||
public static final MutableFlagWithSafeDefault sBrowserControlsEarlyResize =
|
||||
@@ -1282,8 +1347,6 @@ public abstract class ChromeFeatureList {
|
||||
newMutableFlagWithSafeDefault(READALOUD_TAP_TO_SEEK, false);
|
||||
public static final MutableFlagWithSafeDefault sRecordSuppressionMetrics =
|
||||
newMutableFlagWithSafeDefault(RECORD_SUPPRESSION_METRICS, true);
|
||||
public static final MutableFlagWithSafeDefault sSafetyHub =
|
||||
newMutableFlagWithSafeDefault(SAFETY_HUB, true);
|
||||
public static final MutableFlagWithSafeDefault sSafetyHubAndroidOrganicSurvey =
|
||||
newMutableFlagWithSafeDefault(SAFETY_HUB_ANDROID_ORGANIC_SURVEY, false);
|
||||
public static final MutableFlagWithSafeDefault sSafetyHubAndroidSurvey =
|
||||
@@ -1298,8 +1361,6 @@ public abstract class ChromeFeatureList {
|
||||
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 =
|
||||
@@ -1307,30 +1368,34 @@ public abstract class ChromeFeatureList {
|
||||
// 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 sTabGroupAndroidVisualDataCleanup =
|
||||
newMutableFlagWithSafeDefault(TAB_GROUP_ANDROID_VISUAL_DATA_CLEANUP, false);
|
||||
public static final MutableFlagWithSafeDefault sTabGroupEntryPointsAndroid =
|
||||
newMutableFlagWithSafeDefault(TAB_GROUP_ENTRY_POINTS_ANDROID, false);
|
||||
newMutableFlagWithSafeDefault(TAB_GROUP_ENTRY_POINTS_ANDROID, true);
|
||||
public static final MutableFlagWithSafeDefault sTabGroupParityBottomSheetAndroid =
|
||||
newMutableFlagWithSafeDefault(TAB_GROUP_PARITY_BOTTOM_SHEET_ANDROID, false);
|
||||
newMutableFlagWithSafeDefault(TAB_GROUP_PARITY_BOTTOM_SHEET_ANDROID, true);
|
||||
public static final MutableFlagWithSafeDefault sTabStorageSqlitePrototype =
|
||||
newMutableFlagWithSafeDefault(TAB_STORAGE_SQLITE_PROTOTYPE, false);
|
||||
public static final MutableFlagWithSafeDefault sTabSwitcherForeignFaviconSupport =
|
||||
newMutableFlagWithSafeDefault(TAB_SWITCHER_FOREIGN_FAVICON_SUPPORT, 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 sToolbarTabletResizeRefactor =
|
||||
newMutableFlagWithSafeDefault(TOOLBAR_TABLET_RESIZE_REFACTOR, false);
|
||||
public static final MutableFlagWithSafeDefault sToolbarScrollAblation =
|
||||
newMutableFlagWithSafeDefault(TOOLBAR_SCROLL_ABLATION, false);
|
||||
public static final MutableFlagWithSafeDefault sToolbarTabletResizeRefactor =
|
||||
newMutableFlagWithSafeDefault(TOOLBAR_TABLET_RESIZE_REFACTOR, false);
|
||||
// keep-sorted end
|
||||
|
||||
// CachedFeatureParam instances.
|
||||
/* Alphabetical order by feature name, arbitrary order by param name: */
|
||||
public static final BooleanCachedFeatureParam sAndroidThemeModuleForceDependencies =
|
||||
newBooleanCachedFeatureParam(
|
||||
ANDROID_THEME_MODULE, "force_theme_module_dependencies", false);
|
||||
public static final BooleanCachedFeatureParam sAndroidThemeResourceProviderForceLight =
|
||||
newBooleanCachedFeatureParam(
|
||||
ANDROID_THEME_RESOURCE_PROVIDER, "force_light_theme", false);
|
||||
public static final BooleanCachedFeatureParam sCctAdaptiveButtonEnableOpenInBrowser =
|
||||
newBooleanCachedFeatureParam(CCT_ADAPTIVE_BUTTON, "open_in_browser", false);
|
||||
public static final BooleanCachedFeatureParam sCctAdaptiveButtonEnableVoice =
|
||||
@@ -1393,11 +1458,13 @@ public abstract class ChromeFeatureList {
|
||||
public static final BooleanCachedFeatureParam sAndroidComposeplateHideIncognitoButton =
|
||||
newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "hide_incognito_button", false);
|
||||
|
||||
public static final BooleanCachedFeatureParam sAndroidComposeplateV2Enabled =
|
||||
newBooleanCachedFeatureParam(ANDROID_COMPOSEPLATE, "v2_enabled", 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);
|
||||
newIntCachedFeatureParam(BACKGROUND_THREAD_POOL_FIELD_TRIAL, "config", 4);
|
||||
|
||||
public static final IntCachedFeatureParam sBatchTabRestoreBatchSize =
|
||||
newIntCachedFeatureParam(BATCH_TAB_RESTORE, "batch_tab_restore_batch_size", 5);
|
||||
@@ -1516,24 +1583,16 @@ public abstract class ChromeFeatureList {
|
||||
newIntCachedFeatureParam(
|
||||
COLLECT_ANDROID_FRAME_TIMELINE_METRICS, "delayed_start_ms", 3000);
|
||||
|
||||
/***
|
||||
* Feature parameter for TabState deprecation which indicates that legacy TabState
|
||||
* files should be deleted after restore if they have been migrated to FlatBuffer.
|
||||
*/
|
||||
public static final BooleanCachedFeatureParam sDeleteMigratedLegacyTabStateFilesAfterRestore =
|
||||
newBooleanCachedFeatureParam(
|
||||
LEGACY_TAB_STATE_DEPRECATION, "delete_migrated_files_after_restore", false);
|
||||
|
||||
/** Batch size for number of legacy TabState files that should be deleted in a batch. */
|
||||
public static final IntCachedFeatureParam sDeleteLegacyTabStateFilesBatchSize =
|
||||
public static final IntCachedFeatureParam sCleanupLegacyTabStateBatchSize =
|
||||
newIntCachedFeatureParam(
|
||||
LEGACY_TAB_STATE_DEPRECATION, "delete_legacy_tabstate_files_batch_size", 5);
|
||||
CLEANUP_LEGACY_TABSTATE, "cleanup_legacy_tab_state_batch_size", 5);
|
||||
|
||||
/** Maximum number of legacy TabState files that can be deleted per session. */
|
||||
public static final IntCachedFeatureParam sMaxLegacyTabStateFilesDeletedPerSession =
|
||||
public static final IntCachedFeatureParam sMaxLegacyTabStateFilesCleanedUpPerSession =
|
||||
newIntCachedFeatureParam(
|
||||
LEGACY_TAB_STATE_DEPRECATION,
|
||||
"max_legacy_tab_state_files_deleted_per_session",
|
||||
CLEANUP_LEGACY_TABSTATE,
|
||||
"max_legacy_tab_state_files_cleaned_up_per_session",
|
||||
100);
|
||||
|
||||
public static final IntCachedFeatureParam sDisableInstanceLimitMemoryThresholdMb =
|
||||
@@ -1603,9 +1662,6 @@ public abstract class ChromeFeatureList {
|
||||
newBooleanCachedFeatureParam(
|
||||
EDGE_TO_EDGE_USE_BACKUP_NAVBAR_INSETS, "use_gesture_insets", true);
|
||||
|
||||
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);
|
||||
@@ -1613,6 +1669,9 @@ public abstract class ChromeFeatureList {
|
||||
public static final IntCachedFeatureParam sEdgeToEdgeTabletMinWidthThreshold =
|
||||
newIntCachedFeatureParam(EDGE_TO_EDGE_TABLET, "e2e_tablet_width_threshold", -1);
|
||||
|
||||
public static final BooleanCachedFeatureParam sLoadNativeEarlyConcurrentLoad =
|
||||
newBooleanCachedFeatureParam(LOAD_NATIVE_EARLY, "concurrent_load", true);
|
||||
|
||||
public static final BooleanCachedFeatureParam sTabGroupListContainment =
|
||||
newBooleanCachedFeatureParam(
|
||||
GRID_TAB_SWITCHER_SURFACE_COLOR_UPDATE, "tab_group_list_containment", true);
|
||||
@@ -1646,6 +1705,9 @@ public abstract class ChromeFeatureList {
|
||||
public static final IntCachedFeatureParam sOptimizationGuidePushNotificationsMaxCacheSize =
|
||||
newIntCachedFeatureParam(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, "max_cache_size", 100);
|
||||
|
||||
public static final DoubleCachedFeatureParam sPCctMinimumHeightRatio =
|
||||
newDoubleCachedFeatureParam(PCCT_MINIMUM_HEIGHT, "pcct_minimum_height_ratio", 0.3);
|
||||
|
||||
public static final BooleanCachedFeatureParam
|
||||
sPriceChangeModuleSkipShoppingPersistedTabDataDelayedInit =
|
||||
newBooleanCachedFeatureParam(
|
||||
@@ -1726,6 +1788,7 @@ public abstract class ChromeFeatureList {
|
||||
/** All {@link CachedFeatureParam}s of features in this FeatureList */
|
||||
public static final List<CachedFeatureParam<?>> sParamsCached =
|
||||
List.of(
|
||||
// keep-sorted start
|
||||
sAndroidAppIntegrationModuleForceCardShow,
|
||||
sAndroidAppIntegrationModuleShowThirdPartyCard,
|
||||
sAndroidAppIntegrationMultiDataSourceHistoryContentTtlHours,
|
||||
@@ -1738,9 +1801,11 @@ public abstract class ChromeFeatureList {
|
||||
sAndroidAppIntegrationWithFaviconUseLargeFavicon,
|
||||
sAndroidAppIntegrationWithFaviconZeroStateFaviconNumber,
|
||||
sAndroidBottomToolbarDefaultToTop,
|
||||
sAndroidComposeplateSkipLocaleCheck,
|
||||
sAndroidComposeplateHideIncognitoButton,
|
||||
sAndroidComposeplateSkipLocaleCheck,
|
||||
sAndroidComposeplateV2Enabled,
|
||||
sAndroidThemeModuleForceDependencies,
|
||||
sAndroidThemeResourceProviderForceLight,
|
||||
sBackgroundThreadPoolFieldTrialConfig,
|
||||
sBatchTabRestoreBatchSize,
|
||||
sCctAdaptiveButtonContextualOnly,
|
||||
@@ -1762,25 +1827,24 @@ public abstract class ChromeFeatureList {
|
||||
sCctResizableForThirdPartiesDenylistEntries,
|
||||
sClampAutomotiveScalingMaxScalingPercentage,
|
||||
sClankStartupLatencyInjectionAmountMs,
|
||||
sCleanupLegacyTabStateBatchSize,
|
||||
sCollectAndroidFrameTimelineMetricsJankTrackerDelayedStartMs,
|
||||
sDeleteLegacyTabStateFilesBatchSize,
|
||||
sDeleteMigratedLegacyTabStateFilesAfterRestore,
|
||||
sDisableInstanceLimitMaxCount,
|
||||
sDisableInstanceLimitMemoryThresholdMb,
|
||||
sEdgeToEdgeBottomChinOemList,
|
||||
sEdgeToEdgeBottomChinOemMinVersions,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsOemMinVersions,
|
||||
sEdgeToEdgeEverywhereIsDebugging,
|
||||
sEdgeToEdgeEverywhereOemList,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsOemList,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsUseTappable,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsUseGestures,
|
||||
sEdgeToEdgeEverywhereOemMinVersions,
|
||||
sEdgeToEdgeTabletInvisibleBottomChinMinWidth,
|
||||
sEdgeToEdgeTabletMinWidthThreshold,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsOemList,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsOemMinVersions,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsUseGestures,
|
||||
sEdgeToEdgeUseBackupNavbarInsetsUseTappable,
|
||||
sLoadNativeEarlyConcurrentLoad,
|
||||
sMagicStackAndroidShowAllModules,
|
||||
sMaliciousApkDownloadCheckTelemetryOnly,
|
||||
sMaxLegacyTabStateFilesDeletedPerSession,
|
||||
sMaxLegacyTabStateFilesCleanedUpPerSession,
|
||||
sMostVisitedTilesReselectLaxPath,
|
||||
sMostVisitedTilesReselectLaxQuery,
|
||||
sMostVisitedTilesReselectLaxRef,
|
||||
@@ -1793,6 +1857,7 @@ public abstract class ChromeFeatureList {
|
||||
sNotificationTrampolineTimeoutPriorNativeInitMs,
|
||||
sOmahaMinSdkVersionMinSdkVersion,
|
||||
sOptimizationGuidePushNotificationsMaxCacheSize,
|
||||
sPCctMinimumHeightRatio,
|
||||
sPriceChangeModuleSkipShoppingPersistedTabDataDelayedInit,
|
||||
sReadAloudAudioOverviewsSpeedAdditionPercentage,
|
||||
sSearchinCctApplyReferrerId,
|
||||
@@ -1808,7 +1873,9 @@ public abstract class ChromeFeatureList {
|
||||
sTouchToSearchCalloutIph,
|
||||
sTouchToSearchCalloutSnippetAsSubtitle,
|
||||
sUseChimeAndroidSdkAlwaysRegister,
|
||||
sWebApkMinShellApkVersionValue);
|
||||
sWebApkMinShellApkVersionValue
|
||||
// keep-sorted end
|
||||
);
|
||||
|
||||
// Mutable*ParamWithSafeDefault instances.
|
||||
/* Alphabetical: */
|
||||
@@ -1841,4 +1908,9 @@ public abstract class ChromeFeatureList {
|
||||
sShowNewTabAnimations.newBooleanParam("logs", false);
|
||||
public static final MutableBooleanParamWithSafeDefault sShowNewTabAnimationsListeners =
|
||||
sShowNewTabAnimations.newBooleanParam("listeners", false);
|
||||
|
||||
public static final MutableBooleanParamWithSafeDefault sAndroidTabHighlightingForceCtrlClick =
|
||||
sAndroidTabHighlighting.newBooleanParam("force_ctrl_click", false);
|
||||
public static final MutableBooleanParamWithSafeDefault sAndroidTabHighlightingForceShiftClick =
|
||||
sAndroidTabHighlighting.newBooleanParam("force_shift_click", false);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include "chrome/browser/about_flags.h"
|
||||
#include "chrome/browser/accessibility/accessibility_labels_service.h"
|
||||
#include "chrome/browser/accessibility/invert_bubble_prefs.h"
|
||||
#include "chrome/browser/accessibility/page_colors.h"
|
||||
#include "chrome/browser/accessibility/page_colors_controller.h"
|
||||
#include "chrome/browser/accessibility/prefers_default_scrollbar_styles_prefs.h"
|
||||
#include "chrome/browser/actor/ui/actor_ui_state_manager_prefs.h"
|
||||
#include "chrome/browser/browser_process_impl.h"
|
||||
@@ -95,7 +95,6 @@
|
||||
#include "chrome/browser/ui/webui/policy/policy_ui.h"
|
||||
#include "chrome/browser/ui/webui/print_preview/policy_settings.h"
|
||||
#include "chrome/browser/updates/announcement_notification/announcement_notification_service.h"
|
||||
#include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h"
|
||||
#include "chrome/browser/webauthn/webauthn_pref_names.h"
|
||||
#include "chrome/common/buildflags.h"
|
||||
#include "chrome/common/pref_names.h"
|
||||
@@ -132,6 +131,7 @@
|
||||
#include "components/metrics/metrics_pref_names.h"
|
||||
#include "components/network_time/network_time_tracker.h"
|
||||
#include "components/ntp_tiles/custom_links_manager_impl.h"
|
||||
#include "components/ntp_tiles/enterprise/enterprise_shortcuts_manager_impl.h"
|
||||
#include "components/ntp_tiles/most_visited_sites.h"
|
||||
#include "components/offline_pages/buildflags/buildflags.h"
|
||||
#include "components/omnibox/browser/aim_eligibility_service.h"
|
||||
@@ -146,7 +146,7 @@
|
||||
#include "components/performance_manager/public/user_tuning/prefs.h"
|
||||
#include "components/permissions/permission_hats_trigger_helper.h"
|
||||
#include "components/permissions/pref_names.h"
|
||||
#include "components/plus_addresses/plus_address_prefs.h"
|
||||
#include "components/plus_addresses/core/common/plus_address_prefs.h"
|
||||
#include "components/policy/core/browser/browser_policy_connector.h"
|
||||
#include "components/policy/core/browser/url_blocklist_manager.h"
|
||||
#include "components/policy/core/common/local_test_policy_provider.h"
|
||||
@@ -289,6 +289,7 @@
|
||||
#include "chrome/browser/new_tab_page/modules/v2/calendar/google_calendar_page_handler.h"
|
||||
#include "chrome/browser/new_tab_page/modules/v2/calendar/outlook_calendar_page_handler.h"
|
||||
#include "chrome/browser/new_tab_page/modules/v2/most_relevant_tab_resumption/most_relevant_tab_resumption_page_handler.h"
|
||||
#include "chrome/browser/new_tab_page/modules/v2/tab_groups/tab_groups_page_handler.h"
|
||||
#include "chrome/browser/new_tab_page/promos/promo_service.h"
|
||||
#include "chrome/browser/promos/promos_utils.h" // nogncheck crbug.com/1125897
|
||||
#include "chrome/browser/screen_ai/pref_names.h"
|
||||
@@ -311,11 +312,13 @@
|
||||
#include "chrome/browser/ui/webui/new_tab_footer/new_tab_footer_ui.h"
|
||||
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.h"
|
||||
#include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
|
||||
#include "chrome/browser/ui/webui/new_tab_page/ntp_pref_names.h"
|
||||
#include "chrome/browser/ui/webui/settings/settings_ui.h"
|
||||
#include "chrome/browser/ui/webui/side_panel/read_anything/read_anything_prefs.h"
|
||||
#include "chrome/browser/ui/webui/tab_search/tab_search_prefs.h"
|
||||
#include "chrome/browser/upgrade_detector/upgrade_detector.h"
|
||||
#include "chrome/browser/user_education/browser_user_education_storage_service.h"
|
||||
#include "chrome/browser/webauthn/chrome_authenticator_request_delegate.h"
|
||||
#include "components/headless/policy/headless_mode_prefs.h"
|
||||
#include "components/lens/lens_overlay_permission_utils.h"
|
||||
#include "components/live_caption/live_caption_controller.h"
|
||||
@@ -384,6 +387,7 @@
|
||||
#include "chrome/browser/ash/login/session/user_session_manager.h"
|
||||
#include "chrome/browser/ash/login/signin/legacy_token_handle_fetcher.h"
|
||||
#include "chrome/browser/ash/login/signin/signin_error_notifier.h"
|
||||
#include "chrome/browser/ash/login/signin/token_handle_store_impl.h"
|
||||
#include "chrome/browser/ash/login/startup_utils.h"
|
||||
#include "chrome/browser/ash/login/users/avatar/user_image_manager_impl.h"
|
||||
#include "chrome/browser/ash/login/users/avatar/user_image_prefs.h"
|
||||
@@ -396,7 +400,6 @@
|
||||
#include "chrome/browser/ash/policy/core/device_cloud_policy_manager_ash.h"
|
||||
#include "chrome/browser/ash/policy/enrollment/enrollment_requisition_manager.h"
|
||||
#include "chrome/browser/ash/policy/enrollment/enrollment_state_fetcher.h"
|
||||
#include "chrome/browser/ash/policy/external_data/handlers/device_wallpaper_image_external_data_handler.h"
|
||||
#include "chrome/browser/ash/policy/handlers/adb_sideloading_allowance_mode_policy_handler.h"
|
||||
#include "chrome/browser/ash/policy/handlers/minimum_version_policy_handler.h"
|
||||
#include "chrome/browser/ash/policy/handlers/tpm_auto_update_mode_policy_handler.h"
|
||||
@@ -406,7 +409,6 @@
|
||||
#include "chrome/browser/ash/policy/scheduled_task_handler/reboot_notifications_scheduler.h"
|
||||
#include "chrome/browser/ash/policy/status_collector/device_status_collector.h"
|
||||
#include "chrome/browser/ash/policy/status_collector/status_collector.h"
|
||||
#include "chrome/browser/ash/power/auto_screen_brightness/metrics_reporter.h"
|
||||
#include "chrome/browser/ash/power/power_metrics_reporter.h"
|
||||
#include "chrome/browser/ash/preferences/preferences.h"
|
||||
#include "chrome/browser/ash/printing/cups_printers_manager.h"
|
||||
@@ -1105,6 +1107,42 @@ inline constexpr char kInvalidationClientIDCache[] =
|
||||
inline constexpr char kInvalidationTopicsToHandler[] =
|
||||
"invalidation.per_sender_topics_to_handler";
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
constexpr char kObsoleteAccountStorageNoticeShown[] =
|
||||
"password_manager.account_storage_notice_shown";
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
constexpr char kObsoleteAutofillableCredentialsProfileStoreLoginDatabase[] =
|
||||
"password_manager.autofillable_credentials_profile_store_login_database";
|
||||
constexpr char kObsoleteAutofillableCredentialsAccountStoreLoginDatabase[] =
|
||||
"password_manager.autofillable_credentials_account_store_login_database";
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
// Deprecated 08/2025.
|
||||
constexpr char kAutoScreenBrightnessMetricsDailySample[] =
|
||||
"auto_screen_brightness.metrics.daily_sample";
|
||||
constexpr char kAutoScreenBrightnessMetricsAtlasUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.atlas_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsEveUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.eve_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsNocturneUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.nocturne_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsKohakuUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.kohaku_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsNoAlsUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.no_als_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsSupportedAlsUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.supported_als_user_adjustment_count";
|
||||
constexpr char kAutoScreenBrightnessMetricsUnsupportedAlsUserAdjustmentCount[] =
|
||||
"auto_screen_brightness.metrics.unsupported_als_user_adjustment_count";
|
||||
constexpr char kDesksLacrosProfileIdList[] =
|
||||
"ash.desks.desks_lacros_profile_id_list";
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
// Register local state used only for migration (clearing or moving to a new
|
||||
// key).
|
||||
void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
|
||||
@@ -1210,6 +1248,25 @@ void RegisterLocalStatePrefsForMigration(PrefRegistrySimple* registry) {
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterDictionaryPref(kInvalidationClientIDCache);
|
||||
registry->RegisterDictionaryPref(kInvalidationTopicsToHandler);
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterDictionaryPref(kAutoScreenBrightnessMetricsDailySample);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsAtlasUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsEveUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsNocturneUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsKohakuUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsNoAlsUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsSupportedAlsUserAdjustmentCount, 0);
|
||||
registry->RegisterIntegerPref(
|
||||
kAutoScreenBrightnessMetricsUnsupportedAlsUserAdjustmentCount, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Register prefs used only for migration (clearing or moving to a new key).
|
||||
@@ -1568,6 +1625,29 @@ void RegisterProfilePrefsForMigration(
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterDictionaryPref(kInvalidationClientIDCache);
|
||||
registry->RegisterDictionaryPref(kInvalidationTopicsToHandler);
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterBooleanPref(kObsoleteAccountStorageNoticeShown, false);
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterBooleanPref(
|
||||
kObsoleteAutofillableCredentialsProfileStoreLoginDatabase, false);
|
||||
registry->RegisterBooleanPref(
|
||||
kObsoleteAutofillableCredentialsAccountStoreLoginDatabase, false);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterBooleanPref(ntp_prefs::kNtpUseMostVisitedTiles, false);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
// Deprecated 08/2025.
|
||||
registry->RegisterListPref(kDesksLacrosProfileIdList);
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -1751,8 +1831,6 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
|
||||
ash::PowerMetricsReporter::RegisterLocalStatePrefs(registry);
|
||||
ash::platform_keys::KeyPermissionsManagerImpl::RegisterLocalStatePrefs(
|
||||
registry);
|
||||
ash::power::auto_screen_brightness::MetricsReporter::RegisterLocalStatePrefs(
|
||||
registry);
|
||||
ash::Preferences::RegisterPrefs(registry);
|
||||
ash::ResetScreen::RegisterPrefs(registry);
|
||||
ash::SchedulerConfigurationManager::RegisterLocalStatePrefs(registry);
|
||||
@@ -1777,7 +1855,6 @@ void RegisterLocalState(PrefRegistrySimple* registry) {
|
||||
policy::DeviceRestrictionScheduleController::RegisterLocalStatePrefs(
|
||||
registry);
|
||||
policy::DeviceStatusCollector::RegisterPrefs(registry);
|
||||
policy::DeviceWallpaperImageExternalDataHandler::RegisterPrefs(registry);
|
||||
policy::EnrollmentRequisitionManager::RegisterPrefs(registry);
|
||||
policy::EnrollmentStateFetcher::RegisterPrefs(registry);
|
||||
policy::EuiccStatusUploader::RegisterLocalStatePrefs(registry);
|
||||
@@ -1940,7 +2017,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
ntp_tiles::MostVisitedSites::RegisterProfilePrefs(registry);
|
||||
optimization_guide::prefs::RegisterProfilePrefs(registry);
|
||||
optimization_guide::model_execution::prefs::RegisterProfilePrefs(registry);
|
||||
PageColors::RegisterProfilePrefs(registry);
|
||||
PageColorsController::RegisterProfilePrefs(registry);
|
||||
password_manager::PasswordManager::RegisterProfilePrefs(registry);
|
||||
payments::RegisterProfilePrefs(registry);
|
||||
performance_manager::user_tuning::prefs::RegisterProfilePrefs(registry);
|
||||
@@ -2097,6 +2174,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
signin::RegisterProfilePrefs(registry);
|
||||
StartupBrowserCreator::RegisterProfilePrefs(registry);
|
||||
MostRelevantTabResumptionPageHandler::RegisterProfilePrefs(registry);
|
||||
TabGroupsPageHandler::RegisterProfilePrefs(registry);
|
||||
tab_groups::saved_tab_groups::prefs::RegisterProfilePrefs(registry);
|
||||
tab_organization_prefs::RegisterProfilePrefs(registry);
|
||||
tab_search_prefs::RegisterProfilePrefs(registry);
|
||||
@@ -2119,6 +2197,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
chromeos::cloud_upload::RegisterProfilePrefs(registry);
|
||||
policy::NetworkAnnotationBlocklistHandler::RegisterPrefs(registry);
|
||||
quickoffice::RegisterProfilePrefs(registry);
|
||||
registry->RegisterBooleanPref(prefs::kAutoSignOutEnabled, false);
|
||||
registry->RegisterBooleanPref(prefs::kDeskAPIThirdPartyAccessEnabled, false);
|
||||
registry->RegisterBooleanPref(prefs::kDeskAPIDeskSaveAndShareEnabled, false);
|
||||
registry->RegisterListPref(prefs::kDeskAPIThirdPartyAllowlist);
|
||||
@@ -2233,6 +2312,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
|
||||
BUILDFLAG(IS_CHROMEOS)
|
||||
device_signals::RegisterProfilePrefs(registry);
|
||||
ntp_tiles::EnterpriseShortcutsManagerImpl::RegisterProfilePrefs(registry);
|
||||
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) ||
|
||||
// BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
@@ -2327,6 +2407,12 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
registry->RegisterDictionaryPref(prefs::kReportingEndpoints);
|
||||
|
||||
registry->RegisterBooleanPref(prefs::kViewSourceLineWrappingEnabled, false);
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
registry->RegisterBooleanPref(
|
||||
omnibox::kIsOmniboxInBottomPosition, false,
|
||||
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
|
||||
#endif
|
||||
}
|
||||
|
||||
void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
|
||||
@@ -2343,6 +2429,7 @@ void RegisterUserProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
ash::RegisterUserProfilePrefs(registry, locale);
|
||||
ash::LegacyTokenHandleFetcher::RegisterPrefs(registry);
|
||||
ash::TokenHandleStoreImpl::RegisterPrefs(registry);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2483,6 +2570,21 @@ void MigrateObsoleteLocalStatePrefs(PrefService* local_state) {
|
||||
local_state->ClearPref(kInvalidationClientIDCache);
|
||||
local_state->ClearPref(kInvalidationTopicsToHandler);
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
// Added 08/2025.
|
||||
local_state->ClearPref(kAutoScreenBrightnessMetricsDailySample);
|
||||
local_state->ClearPref(kAutoScreenBrightnessMetricsNoAlsUserAdjustmentCount);
|
||||
local_state->ClearPref(
|
||||
kAutoScreenBrightnessMetricsSupportedAlsUserAdjustmentCount);
|
||||
local_state->ClearPref(
|
||||
kAutoScreenBrightnessMetricsUnsupportedAlsUserAdjustmentCount);
|
||||
local_state->ClearPref(kAutoScreenBrightnessMetricsAtlasUserAdjustmentCount);
|
||||
local_state->ClearPref(kAutoScreenBrightnessMetricsEveUserAdjustmentCount);
|
||||
local_state->ClearPref(
|
||||
kAutoScreenBrightnessMetricsNocturneUserAdjustmentCount);
|
||||
local_state->ClearPref(kAutoScreenBrightnessMetricsKohakuUserAdjustmentCount);
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
// Please don't delete the following line. It is used by PRESUBMIT.py.
|
||||
// END_MIGRATE_OBSOLETE_LOCAL_STATE_PREFS
|
||||
|
||||
@@ -2868,6 +2970,29 @@ void MigrateObsoleteProfilePrefs(PrefService* profile_prefs,
|
||||
profile_prefs->ClearPref(kInvalidationClientIDCache);
|
||||
profile_prefs->ClearPref(kInvalidationTopicsToHandler);
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
// Added 08/2025.
|
||||
profile_prefs->ClearPref(kObsoleteAccountStorageNoticeShown);
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Deprecated 08/2025.
|
||||
profile_prefs->ClearPref(
|
||||
kObsoleteAutofillableCredentialsProfileStoreLoginDatabase);
|
||||
profile_prefs->ClearPref(
|
||||
kObsoleteAutofillableCredentialsAccountStoreLoginDatabase);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Added 08/2025.
|
||||
NewTabPageUI::MigrateDeprecatedUseMostVisitedTilesPref(profile_prefs);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
// Added 08/2025.
|
||||
profile_prefs->ClearPref(kDesksLacrosProfileIdList);
|
||||
#endif // BUILDFLAG(IS_CHROMEOS)
|
||||
|
||||
// Please don't delete the following line. It is used by PRESUBMIT.py.
|
||||
// END_MIGRATE_OBSOLETE_PROFILE_PREFS
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "chrome/browser/page_load_metrics/page_load_metrics_initialize.h"
|
||||
#include "chrome/browser/password_manager/chrome_password_manager_client.h"
|
||||
#include "chrome/browser/permissions/one_time_permissions_tracker_helper.h"
|
||||
#include "chrome/browser/picture_in_picture/auto_picture_in_picture_tab_helper.h"
|
||||
#include "chrome/browser/predictors/loading_predictor_factory.h"
|
||||
#include "chrome/browser/predictors/loading_predictor_tab_helper.h"
|
||||
#include "chrome/browser/preloading/prefetch/no_state_prefetch/no_state_prefetch_manager_factory.h"
|
||||
@@ -95,6 +96,8 @@
|
||||
#include "chrome/browser/ui/tab_contents/core_tab_helper.h"
|
||||
#include "chrome/browser/ui/tab_dialogs.h"
|
||||
#include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h"
|
||||
#include "chrome/browser/ui/views/tab_sharing/tab_capture_contents_border_helper.h"
|
||||
#include "chrome/browser/ui/webui_browser/webui_browser.h"
|
||||
#include "chrome/browser/v8_compile_hints/v8_compile_hints_tab_helper.h"
|
||||
#include "chrome/browser/vr/vr_tab_helper.h"
|
||||
#include "chrome/common/buildflags.h"
|
||||
@@ -118,8 +121,6 @@
|
||||
#include "components/download/content/factory/navigation_monitor_factory.h"
|
||||
#include "components/download/content/public/download_navigation_observer.h"
|
||||
#include "components/enterprise/buildflags/buildflags.h"
|
||||
#include "components/fingerprinting_protection_filter/interventions/browser/interventions_web_contents_helper.h"
|
||||
#include "components/fingerprinting_protection_filter/interventions/common/interventions_features.h"
|
||||
#include "components/history/content/browser/web_contents_top_sites_observer.h"
|
||||
#include "components/history/core/browser/top_sites.h"
|
||||
#include "components/infobars/content/content_infobar_manager.h"
|
||||
@@ -143,6 +144,7 @@
|
||||
#include "components/search/ntp_features.h"
|
||||
#include "components/site_engagement/content/site_engagement_helper.h"
|
||||
#include "components/site_engagement/content/site_engagement_service.h"
|
||||
#include "components/tabs/public/tab_interface.h"
|
||||
#include "components/tracing/common/tracing_switches.h"
|
||||
#include "components/ukm/content/source_url_recorder.h"
|
||||
#include "components/webapps/browser/installable/installable_manager.h"
|
||||
@@ -159,7 +161,7 @@
|
||||
#include "ui/accessibility/accessibility_features.h"
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/build_info.h"
|
||||
#include "base/android/android_info.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/memory/ptr_util.h"
|
||||
#include "chrome/browser/android/oom_intervention/oom_intervention_tab_helper.h"
|
||||
@@ -186,7 +188,6 @@
|
||||
#include "content/public/common/content_features.h"
|
||||
#else
|
||||
#include "chrome/browser/banners/app_banner_manager_desktop.h"
|
||||
#include "chrome/browser/picture_in_picture/auto_picture_in_picture_tab_helper.h"
|
||||
#include "chrome/browser/preloading/prefetch/zero_suggest_prefetch/zero_suggest_prefetch_tab_helper.h"
|
||||
#include "chrome/browser/tab_contents/form_interaction_tab_helper.h"
|
||||
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
|
||||
@@ -208,6 +209,7 @@
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
#include "chrome/browser/ash/boot_times_recorder/boot_times_recorder_tab_helper.h"
|
||||
#include "chrome/browser/ash/child_accounts/time_limits/web_time_navigation_observer.h"
|
||||
#include "chrome/browser/ash/growth/campaigns_manager_session_tab_helper.h"
|
||||
#include "chrome/browser/ash/mahi/web_contents/mahi_tab_helper.h"
|
||||
#include "chrome/browser/chromeos/cros_apps/cros_apps_tab_helper.h"
|
||||
@@ -344,12 +346,23 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
autofill::AutofillClientProvider& autofill_client_provider =
|
||||
autofill::AutofillClientProviderFactory::GetForProfile(profile);
|
||||
autofill_client_provider.CreateClientForWebContents(web_contents);
|
||||
|
||||
if (base::FeatureList::IsEnabled(
|
||||
blink::features::kMediaSessionEnterPictureInPicture)) {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
if (base::FeatureList::IsEnabled(media::kAutoPictureInPictureAndroid)) {
|
||||
AutoPictureInPictureTabHelper::CreateForWebContents(web_contents);
|
||||
}
|
||||
#else
|
||||
AutoPictureInPictureTabHelper::CreateForWebContents(web_contents);
|
||||
#endif
|
||||
}
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
// The sensitive content client has to be instantiated after the autofill
|
||||
// client, because the sensitive content client starts a flow which uses
|
||||
// `ScopedAutofillManagersObservation`.
|
||||
if (base::android::BuildInfo::GetInstance()->sdk_int() >=
|
||||
base::android::SdkVersion::SDK_VERSION_V &&
|
||||
if (base::android::android_info::sdk_int() >=
|
||||
base::android::android_info::SdkVersion::SDK_VERSION_V &&
|
||||
base::FeatureList::IsEnabled(
|
||||
sensitive_content::features::kSensitiveContent)) {
|
||||
sensitive_content::AndroidSensitiveContentClient::CreateForWebContents(
|
||||
@@ -366,13 +379,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
profile->IsIncognitoProfile());
|
||||
}
|
||||
|
||||
if (fingerprinting_protection_interventions::features::
|
||||
IsCanvasInterventionsEnabledForIncognitoState(
|
||||
profile->IsIncognitoProfile())) {
|
||||
fingerprinting_protection_interventions::InterventionsWebContentsHelper::
|
||||
CreateForWebContents(web_contents, profile->IsIncognitoProfile());
|
||||
}
|
||||
|
||||
// Only create the IpProtectionStatus if the User Bypass feature is enabled.
|
||||
if (net::features::kIpPrivacyEnableUserBypass.Get()) {
|
||||
ip_protection::IpProtectionStatus::CreateForWebContents(web_contents);
|
||||
@@ -487,7 +493,17 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
performance_manager::PerformanceManagerRegistry::GetInstance()) {
|
||||
pm_registry->SetPageType(web_contents, performance_manager::PageType::kTab);
|
||||
}
|
||||
permissions::PermissionRequestManager::CreateForWebContents(web_contents);
|
||||
// The tab interface is only needed on Desktop to support Split View.
|
||||
tabs::TabInterface* desktop_tab_interface =
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
nullptr;
|
||||
#else
|
||||
base::FeatureList::IsEnabled(features::kSideBySide)
|
||||
? tabs::TabInterface::MaybeGetFromContents(web_contents)
|
||||
: nullptr;
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
permissions::PermissionRequestManager::CreateForWebContents(
|
||||
web_contents, desktop_tab_interface);
|
||||
permissions::PermissionRecoverySuccessRateTracker::CreateForWebContents(
|
||||
web_contents);
|
||||
// The PopupBlockerTabHelper has an implicit dependency on
|
||||
@@ -571,22 +587,15 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
tpcd::metadata::TpcdMetadataDevtoolsObserver::CreateForWebContents(
|
||||
web_contents);
|
||||
tpcd::trial::ValidityService::MaybeCreateForWebContents(web_contents);
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
TabCaptureContentsBorderHelper::CreateForWebContents(web_contents);
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
TrustedVaultEncryptionKeysTabHelper::CreateForWebContents(web_contents);
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
if (base::FeatureList::IsEnabled(features::kSafetyHub)) {
|
||||
auto* service = RevokedPermissionsServiceFactory::GetForProfile(profile);
|
||||
if (service) {
|
||||
RevokedPermissionsService::TabHelper::CreateForWebContents(web_contents,
|
||||
service);
|
||||
}
|
||||
}
|
||||
#else // BUILDFLAG(IS_ANDROID)
|
||||
auto* service = RevokedPermissionsServiceFactory::GetForProfile(profile);
|
||||
if (service) {
|
||||
RevokedPermissionsService::TabHelper::CreateForWebContents(web_contents,
|
||||
service);
|
||||
}
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
ukm::InitializeSourceUrlRecorderForWebContents(web_contents);
|
||||
v8_compile_hints::V8CompileHintsTabHelper::MaybeCreateForWebContents(
|
||||
web_contents);
|
||||
@@ -637,10 +646,6 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
webapps::MLInstallabilityPromoter::CreateForWebContents(web_contents);
|
||||
webapps::AppBannerManagerDesktop::CreateForWebContents(web_contents);
|
||||
}
|
||||
if (base::FeatureList::IsEnabled(
|
||||
blink::features::kMediaSessionEnterPictureInPicture)) {
|
||||
AutoPictureInPictureTabHelper::CreateForWebContents(web_contents);
|
||||
}
|
||||
BookmarkTabHelper::CreateForWebContents(web_contents);
|
||||
BrowserSyncedTabDelegate::CreateForWebContents(web_contents);
|
||||
FocusTabAfterNavigationHelper::CreateForWebContents(web_contents);
|
||||
@@ -660,7 +665,9 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
SearchEngineChoiceTabHelper::CreateForWebContents(web_contents);
|
||||
}
|
||||
|
||||
SadTabHelper::CreateForWebContents(web_contents);
|
||||
if (!webui_browser::IsWebUIBrowserEnabled()) {
|
||||
SadTabHelper::CreateForWebContents(web_contents);
|
||||
}
|
||||
SearchTabHelper::CreateForWebContents(web_contents);
|
||||
TabDialogs::CreateForWebContents(web_contents);
|
||||
if (base::FeatureList::IsEnabled(features::kTabHoverCardImages) ||
|
||||
@@ -696,6 +703,8 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
|
||||
GeminiAppTabHelper::MaybeCreateForWebContents(web_contents);
|
||||
mahi::MahiTabHelper::MaybeCreateForWebContents(web_contents);
|
||||
policy::DlpContentTabHelper::MaybeCreateForWebContents(web_contents);
|
||||
ash::app_time::WebTimeNavigationObserver::MaybeCreateForWebContents(
|
||||
web_contents);
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(ENABLE_EXTENSIONS)
|
||||
|
||||
+1
@@ -8,6 +8,7 @@
|
||||
#include "chrome/common/pref_names.h"
|
||||
#include "chrome/common/webui_url_constants.h"
|
||||
#include "components/prefs/pref_service.h"
|
||||
#include "content/public/browser/navigation_controller.h"
|
||||
#include "content/public/browser/navigation_entry.h"
|
||||
#include "content/public/browser/web_contents.h"
|
||||
#include "extensions/common/constants.h"
|
||||
|
||||
@@ -124,7 +124,6 @@ namespace autofillPrivate {
|
||||
ADDRESS_HOME_APT_TYPE,
|
||||
ADDRESS_HOME_HOUSE_NUMBER_AND_APT,
|
||||
SINGLE_USERNAME_WITH_INTERMEDIATE_VALUES,
|
||||
PASSPORT_NAME_TAG,
|
||||
PASSPORT_NUMBER,
|
||||
PASSPORT_ISSUING_COUNTRY,
|
||||
PASSPORT_EXPIRATION_DATE,
|
||||
@@ -132,12 +131,10 @@ namespace autofillPrivate {
|
||||
LOYALTY_MEMBERSHIP_PROGRAM,
|
||||
LOYALTY_MEMBERSHIP_PROVIDER,
|
||||
LOYALTY_MEMBERSHIP_ID,
|
||||
VEHICLE_OWNER_TAG,
|
||||
VEHICLE_LICENSE_PLATE,
|
||||
VEHICLE_VIN,
|
||||
VEHICLE_MAKE,
|
||||
VEHICLE_MODEL,
|
||||
DRIVERS_LICENSE_NAME_TAG,
|
||||
DRIVERS_LICENSE_REGION,
|
||||
DRIVERS_LICENSE_NUMBER,
|
||||
DRIVERS_LICENSE_EXPIRATION_DATE,
|
||||
|
||||
@@ -115,6 +115,7 @@ namespace developerPrivate {
|
||||
long renderViewId;
|
||||
long renderProcessId;
|
||||
boolean canInspect;
|
||||
boolean isServiceWorker;
|
||||
StackFrame[] stackTrace;
|
||||
};
|
||||
|
||||
|
||||
@@ -90,7 +90,8 @@ enum MountError {
|
||||
unsupported_filesystem,
|
||||
need_password,
|
||||
cancelled,
|
||||
busy
|
||||
busy,
|
||||
corrupted
|
||||
};
|
||||
|
||||
// Filesystem to format to.
|
||||
@@ -1357,15 +1358,6 @@ dictionary BulkPinProgress {
|
||||
boolean emptiedQueue;
|
||||
};
|
||||
|
||||
// Represents a custom view of files to be displayed.
|
||||
dictionary MaterializedView {
|
||||
// Unique indentifier for the view.
|
||||
long viewId;
|
||||
|
||||
// Name of the view displayed to the user.
|
||||
DOMString name;
|
||||
};
|
||||
|
||||
// Used by EntryData to store the file system of the entry.
|
||||
dictionary FileSystemData {
|
||||
// Name of the file system. Will be unique.
|
||||
@@ -1537,10 +1529,6 @@ callback ParseTrashInfoFilesCallback = void(ParsedTrashInfoFile[] files);
|
||||
|
||||
callback GetBulkPinProgressCallback = void(BulkPinProgress progress);
|
||||
|
||||
callback GetMaterializedViewsCallback = void(MaterializedView[] views);
|
||||
|
||||
callback ReadMaterializedViewCallback = void(EntryData[] files);
|
||||
|
||||
interface Functions {
|
||||
// Cancels file selection.
|
||||
static void cancelDialog();
|
||||
@@ -2082,13 +2070,6 @@ interface Functions {
|
||||
// drive.
|
||||
[doesNotSupportPromises]
|
||||
static void calculateBulkPinRequiredSpace(SimpleCallback callback);
|
||||
|
||||
// Returns a list of views that can be displayed to the user.
|
||||
static void getMaterializedViews(GetMaterializedViewsCallback callback);
|
||||
|
||||
// Returns the list of entries contained in the view identified by `viewId`.
|
||||
static void readMaterializedView(long viewId,
|
||||
ReadMaterializedViewCallback callback);
|
||||
};
|
||||
|
||||
// Events supported by fileManagerPrivate API. These events are broadcasted.
|
||||
|
||||
@@ -61,6 +61,9 @@ namespace pdfViewerPrivate {
|
||||
|
||||
// The number of bytes that have been uploaded.
|
||||
long? uploadedBytes;
|
||||
|
||||
// The localized metadata and progress of the file.
|
||||
DOMString? fileMetadata;
|
||||
};
|
||||
|
||||
// Nearly identical to mimeHandlerPrivate.StreamInfo, but without a mime type
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
// Copyright 2023 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.readingList</code> API to read from and modify
|
||||
// the items in the
|
||||
// <a href="https://support.google.com/chrome/answer/7343019">Reading List</a>.
|
||||
namespace readingList{
|
||||
dictionary ReadingListEntry {
|
||||
// The url of the entry.
|
||||
DOMString url;
|
||||
|
||||
// The title of the entry.
|
||||
DOMString title;
|
||||
|
||||
// Will be <code>true</code> if the entry has been read.
|
||||
boolean hasBeenRead;
|
||||
|
||||
// The last time the entry was updated.
|
||||
// This value is in milliseconds since Jan 1, 1970.
|
||||
double lastUpdateTime;
|
||||
|
||||
// The time the entry was created.
|
||||
// Recorded in milliseconds since Jan 1, 1970.
|
||||
double creationTime;
|
||||
};
|
||||
|
||||
dictionary AddEntryOptions {
|
||||
// The url of the entry.
|
||||
DOMString url;
|
||||
|
||||
// The title of the entry.
|
||||
DOMString title;
|
||||
|
||||
// Will be <code>true</code> if the entry has been read.
|
||||
boolean hasBeenRead;
|
||||
};
|
||||
|
||||
dictionary RemoveOptions {
|
||||
// The url to remove.
|
||||
DOMString url;
|
||||
};
|
||||
|
||||
dictionary UpdateEntryOptions {
|
||||
// The url that will be updated.
|
||||
DOMString url;
|
||||
|
||||
// The new title. The existing tile remains if a value isn't provided.
|
||||
DOMString? title;
|
||||
|
||||
// The updated read status. The existing status remains if a value
|
||||
// isn't provided.
|
||||
boolean? hasBeenRead;
|
||||
};
|
||||
|
||||
dictionary QueryInfo {
|
||||
// A url to search for.
|
||||
DOMString? url;
|
||||
|
||||
// A title to search for.
|
||||
DOMString? title;
|
||||
|
||||
// Indicates whether to search for read (<code>true</code>) or unread
|
||||
// (<code>false</code>) items.
|
||||
boolean? hasBeenRead;
|
||||
};
|
||||
|
||||
callback AddEntryCallback = void ();
|
||||
callback RemoveEntryCallback = void();
|
||||
callback UpdateEntryCallback = void();
|
||||
callback QueryCallback = void(ReadingListEntry[] entries);
|
||||
|
||||
interface Functions {
|
||||
// Adds an entry to the reading list if it does not exist.
|
||||
// |entry|: The entry to add to the reading list.
|
||||
// |callback|: Invoked once the entry has been added.
|
||||
static void addEntry(
|
||||
AddEntryOptions entry,
|
||||
optional AddEntryCallback callback);
|
||||
|
||||
// Removes an entry from the reading list if it exists.
|
||||
// |info|: The entry to remove from the reading list.
|
||||
// |callback|: Invoked once the entry has been removed.
|
||||
static void removeEntry(
|
||||
RemoveOptions info,
|
||||
optional RemoveEntryCallback callback);
|
||||
|
||||
// Updates a reading list entry if it exists.
|
||||
// |info|: The entry to update.
|
||||
// |callback|: Invoked once the matched entries have been updated.
|
||||
static void updateEntry(
|
||||
UpdateEntryOptions info,
|
||||
optional UpdateEntryCallback callback);
|
||||
|
||||
// Retrieves all entries that match the <code>QueryInfo</code> properties.
|
||||
// Properties that are not provided will not be matched.
|
||||
// |info|: The properties to search for.
|
||||
// |callback|: Invoked once the entries have been matched.
|
||||
static void query(
|
||||
QueryInfo info,
|
||||
QueryCallback callback);
|
||||
};
|
||||
|
||||
interface Events {
|
||||
// Triggered when a <code>ReadingListEntry</code> is added to the reading list.
|
||||
// |entry|: The entry that was added.
|
||||
static void onEntryAdded(ReadingListEntry entry);
|
||||
|
||||
// Triggered when a <code>ReadingListEntry</code> is removed from the reading list.
|
||||
// |entry|: The entry that was removed.
|
||||
static void onEntryRemoved(ReadingListEntry entry);
|
||||
|
||||
// Triggered when a <code>ReadingListEntry</code> is updated in the reading list.
|
||||
// |entry|: The entry that was updated.
|
||||
static void onEntryUpdated(ReadingListEntry entry);
|
||||
};
|
||||
};
|
||||
@@ -77,6 +77,37 @@ namespace sidePanel {
|
||||
long? tabId;
|
||||
};
|
||||
|
||||
// Options for closing the side panel.
|
||||
// At least one of `tabId` or `windowId` must be specified.
|
||||
dictionary CloseOptions {
|
||||
// The window in which to close the side panel. If a global side panel is
|
||||
// open in the specified window, it will be closed for all tabs in that
|
||||
// window where no tab-specific panel is active. At least one of this or
|
||||
// <code>tabId</code> must be provided.
|
||||
long? windowId;
|
||||
|
||||
// The tab in which to close the side panel. If a tab-specific side panel
|
||||
// is open in the specified tab, it will be closed for that tab.
|
||||
// At least one of this or <code>windowId</code> must be provided.
|
||||
long? tabId;
|
||||
};
|
||||
|
||||
// Information about the opened side panel. It is fired when the extension's
|
||||
// side panel is opened.
|
||||
dictionary PanelOpenedInfo {
|
||||
// The ID of the window where the side panel is opened. This is available
|
||||
// for both global and tab-specific panels.
|
||||
long windowId;
|
||||
|
||||
// The optional ID of the tab where the side panel is opened. This is
|
||||
// provided only when the panel is tab-specific.
|
||||
long? tabId;
|
||||
|
||||
// The path of the local resource within the extension package whose content
|
||||
// is displayed in the panel.
|
||||
DOMString path;
|
||||
};
|
||||
|
||||
callback VoidCallback = void();
|
||||
callback PanelOptionsCallback = void(PanelOptions options);
|
||||
callback PanelBehaviorCallback = void(PanelBehavior behavior);
|
||||
@@ -121,5 +152,18 @@ namespace sidePanel {
|
||||
// Returns the side panel's current layout.
|
||||
// |callback|: Called with a $(ref:PanelLayout) containing the side value.
|
||||
static void getLayout(PanelLayoutCallback callback);
|
||||
|
||||
// Closes the extension's side panel.
|
||||
// This is a no-op if the panel is already closed.
|
||||
// |options|: Specifies the context in which to close the side panel.
|
||||
// |callback|: Called when the side panel has been closed.
|
||||
[nodoc] static void close(
|
||||
CloseOptions options,
|
||||
VoidCallback callback);
|
||||
};
|
||||
|
||||
interface Events {
|
||||
// Fired when the extension's side panel is opened.
|
||||
static void onOpened(PanelOpenedInfo info);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
// Copyright 2021 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// The <code>chrome.webAuthenticationProxy</code> API lets remote desktop
|
||||
// software running on a remote host intercept Web Authentication API
|
||||
// (WebAuthn) requests in order to handle them on a local client.
|
||||
namespace webAuthenticationProxy {
|
||||
// An object representing a
|
||||
// <code>PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()</code>
|
||||
// call.
|
||||
dictionary IsUvpaaRequest {
|
||||
// An opaque identifier for the request.
|
||||
long requestId;
|
||||
};
|
||||
|
||||
// An object representing a WebAuthn
|
||||
// <code>navigator.credentials.create()</code> call.
|
||||
dictionary CreateRequest {
|
||||
// An opaque identifier for the request.
|
||||
long requestId;
|
||||
|
||||
// The <code>PublicKeyCredentialCreationOptions</code> passed to
|
||||
// <code>navigator.credentials.create()</code>, serialized as a JSON
|
||||
// string. The serialization format is compatible with <a
|
||||
// href="https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON">
|
||||
// <code>PublicKeyCredential.parseCreationOptionsFromJSON()</code></a>.
|
||||
DOMString requestDetailsJson;
|
||||
};
|
||||
|
||||
// An object representing a WebAuthn <code>navigator.credentials.get()</code>
|
||||
// call.
|
||||
dictionary GetRequest {
|
||||
// An opaque identifier for the request.
|
||||
long requestId;
|
||||
|
||||
// The <code>PublicKeyCredentialRequestOptions</code> passed to
|
||||
// <code>navigator.credentials.get()</code>, serialized as a JSON string.
|
||||
// The serialization format is compatible with <a
|
||||
// href="https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON">
|
||||
// <code>PublicKeyCredential.parseRequestOptionsFromJSON()</code></a>.
|
||||
DOMString requestDetailsJson;
|
||||
};
|
||||
|
||||
// This interface defines Events that fire when any website makes a WebAuthn
|
||||
// request. Regular processing of WebAuthn requests in the local Chrome
|
||||
// instance is disabled when these events are subscribed to.
|
||||
interface Events {
|
||||
// A native application associated with this extension can cause this
|
||||
// event to be fired by writing to a file with a name equal to the
|
||||
// extension's ID in a directory named
|
||||
// <code>WebAuthenticationProxyRemoteSessionStateChange</code> inside the
|
||||
// <a
|
||||
// href="https://chromium.googlesource.com/chromium/src/+/main/docs/user_data_dir.md#default-location">default
|
||||
// user data directory</a>
|
||||
//
|
||||
// The contents of the file should be empty. I.e., it is not necessary to
|
||||
// change the contents of the file in order to trigger this event.
|
||||
//
|
||||
// The native host application may use this event mechanism to signal a
|
||||
// possible remote session state change (i.e. from detached to attached, or
|
||||
// vice versa) while the extension service worker is possibly suspended. In
|
||||
// the handler for this event, the extension can call the
|
||||
// <code>attach()</code> or <code>detach()</code> API methods accordingly.
|
||||
//
|
||||
// The event listener must be registered synchronously at load time.
|
||||
static void onRemoteSessionStateChange();
|
||||
|
||||
// Fires when a WebAuthn <code>navigator.credentials.create()</code> call
|
||||
// occurs. The extension must supply a response by calling
|
||||
// <code>completeCreateRequest()</code> with the <code>requestId</code> from
|
||||
// <code>requestInfo</code>.
|
||||
static void onCreateRequest(CreateRequest requestInfo);
|
||||
|
||||
// Fires when a WebAuthn navigator.credentials.get() call occurs. The
|
||||
// extension must supply a response by calling
|
||||
// <code>completeGetRequest()</code> with the <code>requestId</code> from
|
||||
// <code>requestInfo</code>
|
||||
static void onGetRequest(GetRequest requestInfo);
|
||||
|
||||
// Fires when a
|
||||
// <code>PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()</code>
|
||||
// call occurs. The extension must supply a response by calling
|
||||
// <code>completeIsUvpaaRequest()</code> with the <code>requestId</code>
|
||||
// from <code>requestInfo</code>
|
||||
static void onIsUvpaaRequest(IsUvpaaRequest requestInfo);
|
||||
|
||||
// Fires when a <code>onCreateRequest</code> or <code>onGetRequest</code>
|
||||
// event is canceled (because the WebAuthn request was aborted by the
|
||||
// caller, or because it timed out). When receiving this event, the
|
||||
// extension should cancel processing of the corresponding request on the
|
||||
// client side. Extensions cannot complete a request once it has been
|
||||
// canceled.
|
||||
static void onRequestCanceled(long requestId);
|
||||
};
|
||||
|
||||
callback ErrorCallback = void(optional DOMString error);
|
||||
callback VoidCallback = void();
|
||||
|
||||
dictionary DOMExceptionDetails {
|
||||
DOMString name;
|
||||
DOMString message;
|
||||
};
|
||||
|
||||
dictionary CreateResponseDetails {
|
||||
// The <code>requestId</code> of the <code>CreateRequest</code>.
|
||||
long requestId;
|
||||
|
||||
// The <code>DOMException</code> yielded by the remote request, if any.
|
||||
DOMExceptionDetails? error;
|
||||
|
||||
// The <code>PublicKeyCredential</code>, yielded by the remote request, if
|
||||
// any, serialized as a JSON string by calling
|
||||
// href="https://w3c.github.io/webauthn/#dom-publickeycredential-tojson">
|
||||
// <code>PublicKeyCredential.toJSON()</code></a>.
|
||||
DOMString? responseJson;
|
||||
};
|
||||
|
||||
dictionary GetResponseDetails {
|
||||
// The <code>requestId</code> of the <code>CreateRequest</code>.
|
||||
long requestId;
|
||||
|
||||
// The <code>DOMException</code> yielded by the remote request, if any.
|
||||
DOMExceptionDetails? error;
|
||||
|
||||
// The <code>PublicKeyCredential</code>, yielded by the remote request, if
|
||||
// any, serialized as a JSON string by calling
|
||||
// href="https://w3c.github.io/webauthn/#dom-publickeycredential-tojson">
|
||||
// <code>PublicKeyCredential.toJSON()</code></a>.
|
||||
DOMString? responseJson;
|
||||
};
|
||||
|
||||
dictionary IsUvpaaResponseDetails {
|
||||
long requestId;
|
||||
boolean isUvpaa;
|
||||
};
|
||||
|
||||
interface Functions {
|
||||
// Reports the result of a <code>navigator.credentials.create()</code>
|
||||
// call. The extension must call this for every
|
||||
// <code>onCreateRequest</code> event it has received, unless the request
|
||||
// was canceled (in which case, an <code>onRequestCanceled</code> event is
|
||||
// fired).
|
||||
static void completeCreateRequest(
|
||||
CreateResponseDetails details,
|
||||
VoidCallback callback);
|
||||
|
||||
// Reports the result of a <code>navigator.credentials.get()</code> call.
|
||||
// The extension must call this for every <code>onGetRequest</code> event
|
||||
// it has received, unless the request was canceled (in which case, an
|
||||
// <code>onRequestCanceled</code> event is fired).
|
||||
static void completeGetRequest(
|
||||
GetResponseDetails details,
|
||||
VoidCallback callback);
|
||||
|
||||
// Reports the result of a
|
||||
// <code>PublicKeyCredential.isUserVerifyingPlatformAuthenticator()</code>
|
||||
// call. The extension must call this for every
|
||||
// <code>onIsUvpaaRequest</code> event it has received.
|
||||
static void completeIsUvpaaRequest(
|
||||
IsUvpaaResponseDetails details,
|
||||
VoidCallback callback);
|
||||
|
||||
// Makes this extension the active Web Authentication API request proxy.
|
||||
//
|
||||
// Remote desktop extensions typically call this method after detecting
|
||||
// attachment of a remote session to this host. Once this method returns
|
||||
// without error, regular processing of WebAuthn requests is suspended, and
|
||||
// events from this extension API are raised.
|
||||
//
|
||||
// This method fails with an error if a different extension is already
|
||||
// attached.
|
||||
//
|
||||
// The attached extension must call <code>detach()</code> once the remote
|
||||
// desktop session has ended in order to resume regular WebAuthn request
|
||||
// processing. Extensions automatically become detached if they are
|
||||
// unloaded.
|
||||
//
|
||||
// Refer to the <code>onRemoteSessionStateChange</code> event for signaling
|
||||
// a change of remote session attachment from a native application to to
|
||||
// the (possibly suspended) extension.
|
||||
static void attach(ErrorCallback callback);
|
||||
|
||||
// Removes this extension from being the active Web Authentication API
|
||||
// request proxy.
|
||||
//
|
||||
// This method is typically called when the extension detects that a remote
|
||||
// desktop session was terminated. Once this method returns, the extension
|
||||
// ceases to be the active Web Authentication API request proxy.
|
||||
//
|
||||
// Refer to the <code>onRemoteSessionStateChange</code> event for signaling
|
||||
// a change of remote session attachment from a native application to to
|
||||
// the (possibly suspended) extension.
|
||||
static void detach(ErrorCallback callback);
|
||||
};
|
||||
};
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "base/check_op.h"
|
||||
#include "base/command_line.h"
|
||||
#include "base/debug/crash_logging.h"
|
||||
#include "base/debug/dump_without_crashing.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/functional/bind.h"
|
||||
#include "base/metrics/histogram_functions.h"
|
||||
@@ -26,6 +27,7 @@
|
||||
#include "base/strings/string_util.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/task/single_thread_task_runner.h"
|
||||
#include "base/threading/thread_restrictions.h"
|
||||
#include "base/time/time.h"
|
||||
#include "base/values.h"
|
||||
#include "build/build_config.h"
|
||||
@@ -62,12 +64,14 @@
|
||||
#include "chrome/renderer/net_benchmarking_extension.h"
|
||||
#include "chrome/renderer/plugins/non_loadable_plugin_placeholder.h"
|
||||
#include "chrome/renderer/plugins/pdf_plugin_placeholder.h"
|
||||
#include "chrome/renderer/process_state.h"
|
||||
#include "chrome/renderer/supervised_user/supervised_user_error_page_controller_delegate_impl.h"
|
||||
#include "chrome/renderer/trusted_vault_encryption_keys_extension.h"
|
||||
#include "chrome/renderer/url_loader_throttle_provider_impl.h"
|
||||
#include "chrome/renderer/v8_unwinder.h"
|
||||
#include "chrome/renderer/web_link_preview_triggerer_impl.h"
|
||||
#include "chrome/renderer/websocket_handshake_throttle_provider_impl.h"
|
||||
#include "chrome/renderer/webui_browser/webui_browser_renderer_extension.h"
|
||||
#include "chrome/renderer/worker_content_settings_client.h"
|
||||
#include "chrome/services/speech/buildflags/buildflags.h"
|
||||
#include "components/autofill/content/renderer/autofill_agent.h"
|
||||
@@ -502,10 +506,27 @@ void ChromeContentRendererClient::RenderThreadStarted() {
|
||||
isolated_app_scheme);
|
||||
}
|
||||
|
||||
// The Instant process can only display the content but not read it. Other
|
||||
// processes can't display it or read it.
|
||||
if (!command_line->HasSwitch(switches::kInstantProcess))
|
||||
// The Instant process can only display the content but not read it. Other
|
||||
// processes can't display it or read it. (see http://crbug.com/40309067 for
|
||||
// more context on why chrome-search scheme registration is skipped for the
|
||||
// instant process).
|
||||
bool should_restrict_chrome_search_scheme =
|
||||
!command_line->HasSwitch(switches::kInstantProcess);
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// If the feature is enabled, the `kInstantProcess` command line switch is
|
||||
// replaced by the `is_instant_process` flag, which is set later. As a result,
|
||||
// we cannot perform chrome-search scheme registration at this stage. This
|
||||
// registration will instead be handled in
|
||||
// `SetConfigurationOnProcessLockUpdate()` where the instant process flag
|
||||
// has been set.
|
||||
if (base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) {
|
||||
should_restrict_chrome_search_scheme = false;
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
if (should_restrict_chrome_search_scheme) {
|
||||
WebSecurityPolicy::RegisterURLSchemeAsDisplayIsolated(chrome_search_scheme);
|
||||
}
|
||||
|
||||
WebString dom_distiller_scheme(
|
||||
WebString::FromASCII(dom_distiller::kDomDistillerScheme));
|
||||
@@ -702,9 +723,7 @@ void ChromeContentRendererClient::RenderFrameCreated(
|
||||
}
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
||||
if (command_line->HasSwitch(switches::kInstantProcess) &&
|
||||
render_frame->IsMainFrame()) {
|
||||
if (process_state::IsInstantProcess() && render_frame->IsMainFrame()) {
|
||||
new SearchBox(render_frame);
|
||||
}
|
||||
#endif
|
||||
@@ -743,6 +762,12 @@ void ChromeContentRendererClient::RenderFrameCreated(
|
||||
new wallet::BoardingPassExtractor(render_frame, registry);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
if (base::FeatureList::IsEnabled(features::kWebium)) {
|
||||
WebUIBrowserRendererExtension::Create(render_frame);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChromeContentRendererClient::WebViewCreated(
|
||||
@@ -1201,6 +1226,44 @@ ChromeContentRendererClient::GetProtocolHandlerSecurityLevel(
|
||||
#endif
|
||||
}
|
||||
|
||||
void ChromeContentRendererClient::WaitForProcessReady() {
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
if (!base::FeatureList::IsEnabled(features::kInstantUsesSpareRenderer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool process_was_ready = chrome_observer_->IsProcessReady();
|
||||
bool is_extension = IsStandaloneContentExtensionProcess();
|
||||
base::UmaHistogramBoolean(
|
||||
is_extension ? "Renderer.ProcessReadyWaitRequired.ExtensionProcess"
|
||||
: "Renderer.ProcessReadyWaitRequired.RegularProcess",
|
||||
!process_was_ready);
|
||||
if (process_was_ready) {
|
||||
return;
|
||||
}
|
||||
|
||||
base::TimeTicks start_time = base::TimeTicks::Now();
|
||||
base::ScopedAllowBaseSyncPrimitivesOutsideBlockingScope allow_wait;
|
||||
bool ready_within_timeout =
|
||||
chrome_observer_->WaitForProcessReady(base::Seconds(5));
|
||||
// Add DumpWithoutCrashing() if the process did not become ready after 5
|
||||
// seconds. After the timeout, the wait is skipped and execution continues.
|
||||
// TODO(http://crbug.com/434977609): Determine whether a crash should be
|
||||
// triggered after a timeout, as this may pose a security risk.
|
||||
if (!ready_within_timeout) {
|
||||
SCOPED_CRASH_KEY_BOOL("WaitForProcessReady", "IsExtensionProcess",
|
||||
is_extension);
|
||||
base::debug::DumpWithoutCrashing();
|
||||
}
|
||||
|
||||
base::TimeDelta wait_duration = base::TimeTicks::Now() - start_time;
|
||||
base::UmaHistogramTimes(
|
||||
is_extension ? "Renderer.WaitTimeForProcessReady.ExtensionProcess"
|
||||
: "Renderer.WaitTimeForProcessReady.RegularProcess",
|
||||
wait_duration);
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
}
|
||||
|
||||
void ChromeContentRendererClient::WillSendRequest(
|
||||
WebLocalFrame* frame,
|
||||
ui::PageTransition transition_type,
|
||||
|
||||
@@ -1386,6 +1386,9 @@ policies:
|
||||
1385: DeviceLoginScreenSecurityKeyPermitAttestation
|
||||
1386: RestrictCoreSharingOnRenderer
|
||||
1387: OriginKeyedProcessesEnabled
|
||||
1388: NTPShortcuts
|
||||
1389: AutoSignOutEnabled
|
||||
1390: ExtensionInstallCloudPolicyChecksEnabled
|
||||
atomic_groups:
|
||||
1: Homepage
|
||||
2: RemoteAccess
|
||||
|
||||
+1
@@ -26,6 +26,7 @@ features:
|
||||
per_profile: true
|
||||
future_on:
|
||||
- fuchsia
|
||||
- android
|
||||
owners:
|
||||
- chromeos-commercial-networking-team@google.com
|
||||
- miersh@google.com
|
||||
|
||||
+11
-7
@@ -1,21 +1,25 @@
|
||||
caption: Number of milestones rollback is allowed
|
||||
caption: Number of milestones kernel key increments are held back
|
||||
default: 4
|
||||
desc: |-
|
||||
Specifies the minimum number of <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> milestones rollback should be allowed starting from the stable version at any time.
|
||||
Depending on the board and critical vulnerability patches, <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> milestones may include kernel key increments that are incompatible with earlier milestones.
|
||||
|
||||
Default is 0 for consumer, 4 (approx. half a year) for enterprise enrolled devices.
|
||||
On consumer devices, these increments are applied as soon as a release with the increment is installed. In verified mode, this prevents rollback to older versions that do not have the increment.
|
||||
|
||||
Setting this policy prevents rollback protection to apply for at least this number of milestones.
|
||||
On enrolled devices, this policy controls when the increment is applied: the increment can be held back for up to 4 milestones (approximately 4 months) after the first milestone with the increment was released on the Stable channel. This allows enterprises to postpone rollback protection for this duration.
|
||||
|
||||
Setting this policy to a lower value has a permanent effect: the device MAY not be able to roll back to earlier versions even after the policy is reset to a larger value.
|
||||
Default is 4 for enrolled devices.
|
||||
|
||||
Actual rollback possibilities may also depend on the board and critical vulnerability patches.
|
||||
Setting the value to 0 enforces the same behavior as in consumer devices.
|
||||
|
||||
Setting this policy to a lower value can have a permanent effect: Once the increment is applied on the device, the device cannot rollback to milestone with lower kernel key version.
|
||||
|
||||
This cannot be undone by setting the policy to a larger value afterwards.
|
||||
device_only: true
|
||||
example_value: 4
|
||||
features:
|
||||
dynamic_refresh: true
|
||||
owners:
|
||||
- mpolzer@google.com
|
||||
- rbock@google.com
|
||||
- chromeos-commercial-remote-management@google.com
|
||||
schema:
|
||||
maximum: 4
|
||||
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
caption: Enables additional cloud policy checks to allow/block installation of extensions.
|
||||
default: false
|
||||
desc: |-
|
||||
This policy incidates to browsers that they need to perform additional checks for extensions such as checking if an extension is in a category blocked by administrator.
|
||||
|
||||
This policy will automatically be set to Enabled if any rules are configured in the <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME">$1<ex>Google Admin console</ex></ph>,
|
||||
and will be Disabled otherwise.
|
||||
|
||||
When this policy is set to Enabled, it signals to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> that it needs to consult the Cloud service to determine if an extension should be blocked.
|
||||
This policy check is performed for new installations and on all currently installed extensions, both at startup and periodically.
|
||||
|
||||
When this policy is set to Disabled, this signals to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> that it does not need to perform any additional checks
|
||||
to determine if an extension should be blocked based on enterprise rules defined in the <ph name="GOOGLE_ADMIN_CONSOLE_PRODUCT_NAME">$1<ex>Google Admin console</ex></ph>.
|
||||
|
||||
If the extension is not allowed, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will block the installation. For already installed extensions, <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will disable them.
|
||||
|
||||
Chrome policies will take precedence over this policy such as if the extension is in <ph name="EXTENSION_INSTALL_ALLOWLIST_POLICY_NAME">ExtensionInstallAllowlist</ph>, <ph name="EXTENSION_INSTALL_BLOCKLIST_POLICY_NAME">ExtensionInstallBlocklist</ph>,
|
||||
or <ph name="EXTENSION_INSTALL_FORCED_POLICY_NAME">ExtensionInstallForced</ph>.
|
||||
|
||||
example_value: true
|
||||
features:
|
||||
cloud_only: true
|
||||
dynamic_refresh: true
|
||||
per_profile: true
|
||||
items:
|
||||
- caption: Validate whether an extension can be installed or not with a cloud service.
|
||||
value: true
|
||||
- caption: Do not validate whether an extension can be installed or not with a cloud service.
|
||||
value: false
|
||||
owners:
|
||||
- macourteau@chromium.org
|
||||
- pmoench@google.com
|
||||
- file://extensions/OWNERS
|
||||
schema:
|
||||
type: boolean
|
||||
future_on:
|
||||
- chrome.*
|
||||
- chrome_os
|
||||
type: main
|
||||
tags: []
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
caption: Enable Automatic Sign-out Service
|
||||
default: false
|
||||
desc: |-
|
||||
This policy controls whether a user is automatically signed out of their previous session when they sign in to a new <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> device.
|
||||
|
||||
Setting the policy to Enabled will sign out the user from their previous session upon a successful sign-in to a new <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> device.
|
||||
|
||||
Setting the policy to Disabled or not set will sign out the user from their previous session only if either <ph name="FLOATING_SSO_ENABLED_POLICY_NAME">FloatingSsoEnabled</ph> or <ph name="FLOATING_WORKSPACE_V2_ENABLED_POLICY_NAME">FloatingWorkspaceV2Enabled</ph> policies are Enabled.
|
||||
example_value: true
|
||||
features:
|
||||
dynamic_refresh: true
|
||||
per_profile: true
|
||||
future_on:
|
||||
- chrome_os
|
||||
items:
|
||||
- caption: Sign out user from previous session upon sign-in to a new device
|
||||
value: true
|
||||
- caption: Sign out user from previous session upon sign-in to new device only if windows or cookies are synced
|
||||
value: false
|
||||
owners:
|
||||
- andreydav@google.com
|
||||
- mpetrisor@chromium.org
|
||||
- chromeos-commercial-identity@google.com
|
||||
schema:
|
||||
type: boolean
|
||||
tags: []
|
||||
type: main
|
||||
+1
-1
@@ -4,4 +4,4 @@ FloatingSso:
|
||||
- FloatingSsoEnabled
|
||||
- FloatingSsoDomainBlocklist
|
||||
- FloatingSsoDomainBlocklistExceptions
|
||||
- FloatingSsoSessionCookiesIncluded
|
||||
- FloatingSsoSessionCookiesIncluded
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
caption: Settings for GenAI local foundational model
|
||||
|
||||
desc: |-
|
||||
Configure how <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> downloads the foundational GenAI model and uses for inference locally.
|
||||
Configure how <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> downloads the foundational GenAI model and uses for inference locally.
|
||||
|
||||
When the policy is set to Allowed (0) or not set, the model is downloaded automatically, and used for inference.
|
||||
|
||||
@@ -12,7 +12,7 @@ desc: |-
|
||||
default: 0
|
||||
example_value: 1
|
||||
features:
|
||||
dynamic_refresh: false
|
||||
dynamic_refresh: true
|
||||
per_profile: false
|
||||
future_on:
|
||||
- chrome_os
|
||||
|
||||
+2
@@ -1,6 +1,8 @@
|
||||
caption: Settings for Tab Organizer
|
||||
deprecated: true
|
||||
desc: |-
|
||||
This policy is deprecated since tab organizer has been sunset as a feature.
|
||||
|
||||
Tab Organizer is an AI-based tool that automatically creates tab groups based on a user's open tabs. Suggestions are based on open tabs (but not page content).
|
||||
|
||||
0 = Allow the feature to be used, while allowing Google to use relevant data to improve its AI models. Relevant data may include prompts, inputs, outputs, source materials, and written feedback, depending on the feature. It may also be reviewed by humans to improve AI models. 0 is the default value, except when noted below.
|
||||
|
||||
+2
-2
@@ -20,6 +20,6 @@ items:
|
||||
- caption: Disable Kiosk application logs
|
||||
value: false
|
||||
example_value: false
|
||||
future_on:
|
||||
- chrome_os
|
||||
supported_on:
|
||||
- chrome_os:141-
|
||||
tags: []
|
||||
|
||||
+1
@@ -12,6 +12,7 @@ features:
|
||||
per_profile: true
|
||||
future_on:
|
||||
- fuchsia
|
||||
- ios
|
||||
owners:
|
||||
- igorruvinov@google.com
|
||||
- ydago@google.com
|
||||
|
||||
+2
-1
@@ -2,7 +2,7 @@ caption: Enable globally scoped HTTP auth cache
|
||||
desc: |-
|
||||
This policy configures a single global per profile cache with HTTP server authentication credentials.
|
||||
|
||||
If this policy is unset or disabled, the browser will use the default behavior of cross-site auth, which as of version 80, will be to scope HTTP server authentication credentials by top-level site, so if two sites use resources from the same authenticating domain, credentials will need to be provided independently in the context of both sites. Cached proxy credentials will be reused across sites.
|
||||
If this policy is unset or disabled, the browser will use the default behavior of cross-site auth, this behavior will be to scope HTTP server authentication credentials by top-level site, so if two sites use resources from the same authenticating domain, credentials will need to be provided independently in the context of both sites. Cached proxy credentials will be reused across sites.
|
||||
|
||||
If the policy is enabled, HTTP auth credentials entered in the context of one site will automatically be used in the context of another.
|
||||
|
||||
@@ -29,5 +29,6 @@ schema:
|
||||
supported_on:
|
||||
- chrome.*:80-
|
||||
- chrome_os:80-
|
||||
- android:141-
|
||||
tags: []
|
||||
type: main
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ features:
|
||||
per_profile: true
|
||||
future_on:
|
||||
- fuchsia
|
||||
- ios
|
||||
items:
|
||||
- caption: Users can customize the New Tab page background
|
||||
value: true
|
||||
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
caption: Setting shortcuts on the New Tab Page (Beta)
|
||||
desc: |-
|
||||
In development: for early preview only.
|
||||
|
||||
Setting the policy pre-configures up to 10 custom shortcuts on the <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> New Tab page.
|
||||
|
||||
If set, users will see these shortcuts by default and users can toggle between “My shortcuts," "Most visited sites" or "My organization's shortcuts" on the "Customize Chrome" panel. If empty or unset, the user will only be able to toggle between “My shortcuts" or "Most visited sites" on the "Customize Chrome" panel.
|
||||
|
||||
Shortcut URLs must be unique.
|
||||
|
||||
If <ph name="NTP_SHORTCUTS_ALLOW_USER_EDIT_NAME">allow_user_edit</ph> is set to true, users can change the name of the shortcut. If set to false or unset, users cannot edit the name.
|
||||
|
||||
If <ph name="NTP_SHORTCUTS_ALLOW_USER_DELETE_NAME">allow_user_delete</ph> is set to true, users can remove the shortcut. If set to false or unset, users cannot remove the shortcut.
|
||||
example_value:
|
||||
- name: Google
|
||||
url: https://www.google.com
|
||||
- name: YouTube
|
||||
url: https://www.youtube.com
|
||||
- name: Google Drive
|
||||
url: https://www.drive.google.com
|
||||
allow_user_edit: true
|
||||
allow_user_delete: true
|
||||
features:
|
||||
dynamic_refresh: true
|
||||
per_profile: true
|
||||
owners:
|
||||
- alexwchen@chromium.org
|
||||
- rtatum@google.com
|
||||
- tiborg@chromium.org
|
||||
- chrome-desktop-ntp@google.com
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
url:
|
||||
type: string
|
||||
allow_user_edit:
|
||||
type: boolean
|
||||
allow_user_delete:
|
||||
type: boolean
|
||||
required:
|
||||
- name
|
||||
- url
|
||||
supported_on:
|
||||
- chrome.*:141-
|
||||
- chrome_os:141-
|
||||
tags: []
|
||||
type: dict
|
||||
+2
@@ -10,6 +10,8 @@ desc: |-
|
||||
|
||||
supported_on:
|
||||
- chrome.*:136-
|
||||
future_on:
|
||||
- android
|
||||
features:
|
||||
dynamic_refresh: true
|
||||
per_profile: false
|
||||
|
||||
+2
@@ -11,6 +11,8 @@ supported_on:
|
||||
- chrome.win:126-
|
||||
- chrome.mac:126-
|
||||
- chrome.linux:128-
|
||||
future_on:
|
||||
- android
|
||||
features:
|
||||
dynamic_refresh: true
|
||||
per_profile: true
|
||||
|
||||
+2
@@ -17,6 +17,8 @@ desc: |-
|
||||
|
||||
This policy has no effect when set on a machine level.
|
||||
|
||||
This policy does not apply to or function within Incognito mode.
|
||||
|
||||
supported_on:
|
||||
- chrome.*:119-
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@
|
||||
#include "cc/input/browser_controls_offset_tag_modifications.h"
|
||||
#include "components/attribution_reporting/features.h"
|
||||
#include "components/download/public/common/download_stats.h"
|
||||
#include "components/fingerprinting_protection_filter/interventions/common/interventions_features.h"
|
||||
#include "components/input/cursor_manager.h"
|
||||
#include "components/input/features.h"
|
||||
#include "components/input/render_widget_host_input_event_router.h"
|
||||
@@ -87,7 +86,6 @@
|
||||
#include "content/browser/download/save_package.h"
|
||||
#include "content/browser/fenced_frame/fenced_frame.h"
|
||||
#include "content/browser/find_request_manager.h"
|
||||
#include "content/browser/fingerprinting_protection/canvas_noise_token_data.h"
|
||||
#include "content/browser/gpu/gpu_data_manager_impl.h"
|
||||
#include "content/browser/guest_page_holder_impl.h"
|
||||
#include "content/browser/host_zoom_map_impl.h"
|
||||
@@ -96,6 +94,7 @@
|
||||
#include "content/browser/permissions/permission_controller_impl.h"
|
||||
#include "content/browser/permissions/permission_util.h"
|
||||
#include "content/browser/preloading/prefetch/prefetch_service.h"
|
||||
#include "content/browser/preloading/prefetch/prefetch_type.h"
|
||||
#include "content/browser/preloading/preloading.h"
|
||||
#include "content/browser/preloading/prerender/prerender_final_status.h"
|
||||
#include "content/browser/preloading/prerender/prerender_host_registry.h"
|
||||
@@ -212,6 +211,7 @@
|
||||
#include "ui/accessibility/ax_tree_combiner.h"
|
||||
#include "ui/accessibility/platform/browser_accessibility.h"
|
||||
#include "ui/accessibility/platform/browser_accessibility_manager.h"
|
||||
#include "ui/base/clipboard/clipboard_metadata.h"
|
||||
#include "ui/base/ime/mojom/virtual_keyboard_types.mojom.h"
|
||||
#include "ui/base/mojom/window_show_state.mojom.h"
|
||||
#include "ui/base/pointer/pointer_device.h"
|
||||
@@ -234,14 +234,16 @@
|
||||
#endif // BUILDFLAG(IS_WIN)
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/build_info.h"
|
||||
#include "base/android/device_info.h"
|
||||
#include "base/check.h"
|
||||
#include "content/browser/android/java_interfaces_impl.h"
|
||||
#include "content/browser/android/nfc_host.h"
|
||||
#include "content/browser/android/selection/selection_popup_controller.h"
|
||||
#include "content/browser/navigation_transitions/back_forward_transition_animation_manager_android.h"
|
||||
#include "content/browser/web_contents/web_contents_android.h"
|
||||
#include "content/browser/web_contents/web_contents_view_android.h"
|
||||
#include "content/public/browser/android/child_process_importance.h"
|
||||
#include "content/public/browser/android/selection_popup_delegate.h"
|
||||
#include "services/device/public/mojom/nfc.mojom.h"
|
||||
#include "services/service_manager/public/cpp/interface_provider.h"
|
||||
#include "ui/android/event_forwarder.h"
|
||||
@@ -294,8 +296,7 @@ enum class CrashRepHandlingOutcome {
|
||||
constexpr auto kUpdateLoadStatesInterval = base::Milliseconds(250);
|
||||
|
||||
// Kill switch for inner WebContents visibility updates.
|
||||
BASE_FEATURE(kUpdateInnerWebContentsVisibility,
|
||||
"UpdateInnerWebContentsVisibility",
|
||||
BASE_FEATURE(UpdateInnerWebContentsVisibility,
|
||||
base::FEATURE_ENABLED_BY_DEFAULT);
|
||||
|
||||
using LifecycleState = RenderFrameHost::LifecycleState;
|
||||
@@ -561,7 +562,7 @@ bool IsAutomaticFullscreenGranted(RenderFrameHost* host) {
|
||||
// enforced later should resolve most inaccuracies, but this early enforcement
|
||||
// is needed to ensure bounds indicate the appropriate display.
|
||||
int64_t AdjustWindowRectForDisplay(gfx::Rect* rect, RenderFrameHost* host) {
|
||||
auto* screen = display::Screen::GetScreen();
|
||||
auto* screen = display::Screen::Get();
|
||||
auto display = screen->GetDisplayMatching(*rect);
|
||||
|
||||
// Check, but do not prompt, for permission to place windows on other screens.
|
||||
@@ -1192,8 +1193,18 @@ void WebContentsImpl::WebContentsTreeNode::OnFrameTreeNodeDestroyed(
|
||||
"FrameTreeNode in its outer WebContents that hosts it.";
|
||||
|
||||
node->RemoveObserver(this);
|
||||
// Deletes |this| too.
|
||||
outer_web_contents_->node_.DetachInnerWebContents(current_web_contents_);
|
||||
|
||||
if (outer_web_contents_->node_.IsUnownedInnerWebContents(
|
||||
current_web_contents_)) {
|
||||
// Detach at all levels (WebContentsTreeNode and FrameTreeNode,
|
||||
// RenderFrameProxyHost, etc.). This will not delete `this` (the inner
|
||||
// WebContents).
|
||||
outer_web_contents_->DetachUnownedInnerWebContents(current_web_contents_);
|
||||
} else {
|
||||
// Detach only at the WebContentsTreeNode level. This will delete `this` (
|
||||
// the inner WebContents).
|
||||
outer_web_contents_->node_.DetachInnerWebContents(current_web_contents_);
|
||||
}
|
||||
}
|
||||
|
||||
FrameTree* WebContentsImpl::WebContentsTreeNode::focused_frame_tree() {
|
||||
@@ -1412,16 +1423,10 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context)
|
||||
safe_area_insets_host_ = SafeAreaInsetsHost::Create(this);
|
||||
#endif
|
||||
|
||||
ui::NativeTheme* native_theme = ui::NativeTheme::GetInstanceForWeb();
|
||||
auto* const native_theme = ui::NativeTheme::GetInstanceForWeb();
|
||||
native_theme_observation_.Observe(native_theme);
|
||||
slow_web_preference_cache_observation_.Observe(
|
||||
SlowWebPreferenceCache::GetInstance());
|
||||
using_dark_colors_ = native_theme->ShouldUseDarkColors();
|
||||
in_forced_colors_ = native_theme->InForcedColorsMode();
|
||||
preferred_color_scheme_ = native_theme->GetPreferredColorScheme();
|
||||
preferred_contrast_ = native_theme->GetPreferredContrast();
|
||||
prefers_reduced_transparency_ = native_theme->GetPrefersReducedTransparency();
|
||||
inverted_colors_ = native_theme->GetInvertedColors();
|
||||
renderer_preferences_.caret_blink_interval =
|
||||
native_theme->GetCaretBlinkInterval();
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
@@ -1436,12 +1441,6 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context)
|
||||
if (base::FeatureList::IsEnabled(network::features::kSharedStorageAPI)) {
|
||||
SharedStorageBudgetCharger::CreateForWebContents(this);
|
||||
}
|
||||
|
||||
if (base::FeatureList::IsEnabled(
|
||||
fingerprinting_protection_interventions::features::kCanvasNoise)) {
|
||||
renderer_preferences_.canvas_noise_token =
|
||||
CanvasNoiseTokenData::GetToken(browser_context);
|
||||
}
|
||||
}
|
||||
|
||||
WebContentsImpl::~WebContentsImpl() {
|
||||
@@ -2502,14 +2501,6 @@ void WebContentsImpl::SetUserAgentOverride(
|
||||
ua_override);
|
||||
}
|
||||
|
||||
void WebContentsImpl::SetRendererInitiatedUserAgentOverrideOption(
|
||||
NavigationController::UserAgentOverrideOption option) {
|
||||
OPTIONAL_TRACE_EVENT0(
|
||||
"content",
|
||||
"WebContentsImpl::SetRendererInitiatedUserAgentOverrideOption");
|
||||
renderer_initiated_user_agent_override_option_ = option;
|
||||
}
|
||||
|
||||
const blink::UserAgentOverride& WebContentsImpl::GetUserAgentOverride() {
|
||||
return renderer_preferences_.user_agent_override;
|
||||
}
|
||||
@@ -2524,22 +2515,14 @@ const blink::UserAgentOverride& WebContentsImpl::GetUserAgentOverride(
|
||||
}
|
||||
|
||||
bool WebContentsImpl::ShouldOverrideUserAgentForRendererInitiatedNavigation() {
|
||||
// Inherits the current entry setting if it exists and not initial.
|
||||
NavigationEntryImpl* current_entry = GetController().GetLastCommittedEntry();
|
||||
if (!current_entry || current_entry->IsInitialEntry()) {
|
||||
return should_override_user_agent_in_new_tabs_;
|
||||
if (current_entry && !current_entry->IsInitialEntry()) {
|
||||
return current_entry->GetIsOverridingUserAgent();
|
||||
}
|
||||
|
||||
switch (renderer_initiated_user_agent_override_option_) {
|
||||
case NavigationController::UA_OVERRIDE_INHERIT:
|
||||
return current_entry->GetIsOverridingUserAgent();
|
||||
case NavigationController::UA_OVERRIDE_TRUE:
|
||||
return true;
|
||||
case NavigationController::UA_OVERRIDE_FALSE:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
// Otherwise, follows the setting from the last user-agent override. See
|
||||
// `override_in_new_tabs` in `SetUserAgentOverride()`.
|
||||
return should_override_user_agent_in_new_tabs_;
|
||||
}
|
||||
|
||||
bool WebContentsImpl::IsWebContentsOnlyAccessibilityModeForTesting() {
|
||||
@@ -3032,6 +3015,10 @@ bool WebContentsImpl::HasRecentInteraction() {
|
||||
return delta <= kMaxInterval;
|
||||
}
|
||||
|
||||
base::TimeTicks WebContentsImpl::GetLastInteractionTimeTicks() {
|
||||
return last_interaction_time_;
|
||||
}
|
||||
|
||||
WebContents::ScopedIgnoreInputEvents WebContentsImpl::IgnoreInputEvents(
|
||||
std::optional<WebInputEventAuditCallback> audit_callback) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::IgnoreInputEvents");
|
||||
@@ -3404,10 +3391,15 @@ void WebContentsImpl::DetachUnownedInnerWebContents(
|
||||
inner_web_contents_impl->GetPrimaryFrameTree().ForEachRenderViewHost(
|
||||
[&list_of_rvh_with_rwhv](RenderViewHostImpl* rvh) {
|
||||
if (rvh->GetWidget() && rvh->GetWidget()->GetView()) {
|
||||
CHECK(
|
||||
rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame());
|
||||
// While in theory only child frame RWHVs should exist at this stage,
|
||||
// in practice, a race with navigation cleanup could result in a main
|
||||
// frame RWHV that is pending deletion still existing here.
|
||||
// This might happen when a WebContents is destroyed immediately
|
||||
// after it navigates and then attaches to an outer WebContents.
|
||||
if (rvh->GetWidget()->GetView()->IsRenderWidgetHostViewChildFrame()) {
|
||||
list_of_rvh_with_rwhv.push_back(rvh);
|
||||
}
|
||||
rvh->GetWidget()->GetView()->Destroy();
|
||||
list_of_rvh_with_rwhv.push_back(rvh);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3706,6 +3698,10 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences(
|
||||
gfx::Animation::ScrollAnimationsEnabledBySystem());
|
||||
|
||||
prefs.prefers_reduced_motion = gfx::Animation::PrefersReducedMotion();
|
||||
|
||||
const auto* const theme = ui::NativeTheme::GetInstanceForWeb();
|
||||
prefers_reduced_transparency_ = theme->GetPrefersReducedTransparency();
|
||||
inverted_colors_ = theme->GetInvertedColors();
|
||||
prefs.prefers_reduced_transparency = prefers_reduced_transparency_;
|
||||
prefs.inverted_colors = inverted_colors_;
|
||||
|
||||
@@ -3721,7 +3717,7 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences(
|
||||
// TODO(crbug.com/40925473): GetPrimaryDisplay() won't be correct for
|
||||
// externally connected displays. Get the display where Chrome is opened
|
||||
// instead.
|
||||
display::Display display = display::Screen::GetScreen()->GetPrimaryDisplay();
|
||||
display::Display display = display::Screen::Get()->GetPrimaryDisplay();
|
||||
gfx::Size size = display.GetSizeInPixel();
|
||||
int min_width = size.width() < size.height() ? size.width() : size.height();
|
||||
int min_width_in_dp =
|
||||
@@ -3832,7 +3828,7 @@ const blink::web_pref::WebPreferences WebContentsImpl::ComputeWebPreferences(
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
if (base::FeatureList::IsEnabled(features::kWebauthnDisabledOnAuto) &&
|
||||
base::android::BuildInfo::GetInstance()->is_automotive()) {
|
||||
base::android::device_info::is_automotive()) {
|
||||
prefs.disable_webauthn = true;
|
||||
}
|
||||
#endif // BUILDFLAG(IS_ANDROID)
|
||||
@@ -4426,12 +4422,6 @@ void WebContentsImpl::RenderWidgetWasResized(
|
||||
width_changed);
|
||||
}
|
||||
|
||||
bool WebContentsImpl::PreHandleMouseEvent(const blink::WebMouseEvent& event) {
|
||||
OPTIONAL_TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("content.verbose"),
|
||||
"WebContentsImpl::PreHandleMouseEvent");
|
||||
return delegate_ ? delegate_->PreHandleMouseEvent(this, event) : false;
|
||||
}
|
||||
|
||||
void WebContentsImpl::PreHandleDragUpdate(const DropData& drop_data,
|
||||
const gfx::PointF& client_pt) {
|
||||
if (delegate_) {
|
||||
@@ -4623,16 +4613,12 @@ void WebContentsImpl::EnterFullscreenMode(
|
||||
DCHECK(CanEnterFullscreenMode(requesting_frame));
|
||||
DCHECK(requesting_frame->IsActive());
|
||||
DCHECK(ContainsOrIsFocusedWebContents());
|
||||
if (base::FeatureList::IsEnabled(
|
||||
features::kAutomaticFullscreenContentSetting)) {
|
||||
// Ensure the window is made active to take input focus. The user may have
|
||||
// activated another window between making a gesture and the site handling
|
||||
// that gesture to request fullscreen. The experimental automatic fullscreen
|
||||
// feature also enables allowlisted sites to request fullscreen without any
|
||||
// gesture, even if the window was inactive. Note: requests from inactive
|
||||
// tabs of multi-tab windows should be rejected before reaching this code.
|
||||
Activate();
|
||||
}
|
||||
// Ensure the window is made active to take input focus. The window may be
|
||||
// inactive when sites request fullscreen via capability delegation, consume
|
||||
// transient activation from a gesture made before another window was focused,
|
||||
// or if the site has been granted the Automatic Fullscreen content setting.
|
||||
// Note: requests by inactive tabs of multi-tab windows are rejected earlier.
|
||||
Activate();
|
||||
|
||||
// When WebView is the `delegate_` we can end up with VisualProperties changes
|
||||
// synchronously. Notify the view ahead so it can handle the transition.
|
||||
@@ -6785,21 +6771,6 @@ void WebContentsImpl::GenerateMHTML(
|
||||
const MHTMLGenerationParams& params,
|
||||
base::OnceCallback<void(int64_t)> callback) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::GenerateMHTML");
|
||||
base::OnceCallback<void(const MHTMLGenerationResult&)> wrapper_callback =
|
||||
base::BindOnce(
|
||||
[](base::OnceCallback<void(int64_t)> size_callback,
|
||||
const MHTMLGenerationResult& result) {
|
||||
std::move(size_callback).Run(result.file_size);
|
||||
},
|
||||
std::move(callback));
|
||||
MHTMLGenerationManager::GetInstance()->SaveMHTML(this, params,
|
||||
std::move(wrapper_callback));
|
||||
}
|
||||
|
||||
void WebContentsImpl::GenerateMHTMLWithResult(
|
||||
const MHTMLGenerationParams& params,
|
||||
MHTMLGenerationResult::GenerateMHTMLCallback callback) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::GenerateMHTMLWithResult");
|
||||
MHTMLGenerationManager::GetInstance()->SaveMHTML(this, params,
|
||||
std::move(callback));
|
||||
}
|
||||
@@ -7045,9 +7016,10 @@ int WebContentsImpl::DownloadImageFromAxNode(const ui::AXTreeID tree_id,
|
||||
tree_id.ToString() + "," + base::ToString(node_id));
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
const int download_id = GetNextDownloadId();
|
||||
// Always use the main frame when downloading via A11y ids.
|
||||
RenderFrameHostImpl* main_frame = GetPrimaryMainFrame();
|
||||
if (!main_frame->IsRenderFrameLive()) {
|
||||
|
||||
RenderFrameHostImpl* target_frame =
|
||||
RenderFrameHostImpl::FromAXTreeID(tree_id);
|
||||
if (!target_frame || !target_frame->IsRenderFrameLive()) {
|
||||
// If the renderer process is dead (i.e. crash, or memory pressure on
|
||||
// Android), the downloader service will be invalid. Pre-Mojo, this would
|
||||
// hang the callback indefinitely since the IPC would be dropped. Now,
|
||||
@@ -7057,19 +7029,21 @@ int WebContentsImpl::DownloadImageFromAxNode(const ui::AXTreeID tree_id,
|
||||
GetUIThreadTaskRunner({})->PostTask(
|
||||
FROM_HERE,
|
||||
base::BindOnce(&WebContentsImpl::OnDidDownloadImage,
|
||||
weak_factory_.GetWeakPtr(), main_frame->GetWeakPtr(),
|
||||
weak_factory_.GetWeakPtr(),
|
||||
target_frame ? target_frame->GetWeakPtr() : nullptr,
|
||||
std::move(callback), download_id, GURL(), 400,
|
||||
std::vector<SkBitmap>(), std::vector<gfx::Size>()));
|
||||
return download_id;
|
||||
}
|
||||
CHECK_EQ(main_frame->GetAXTreeID(), tree_id);
|
||||
main_frame->GetMojoImageDownloader()->DownloadImageFromAxNode(
|
||||
CHECK_EQ(target_frame->GetAXTreeID(), tree_id);
|
||||
target_frame->GetMojoImageDownloader()->DownloadImageFromAxNode(
|
||||
node_id, preferred_size, max_bitmap_size, bypass_cache,
|
||||
base::BindOnce(&WebContentsImpl::OnDidDownloadImage,
|
||||
weak_factory_.GetWeakPtr(), main_frame->GetWeakPtr(),
|
||||
weak_factory_.GetWeakPtr(), target_frame->GetWeakPtr(),
|
||||
std::move(callback), download_id, GURL()));
|
||||
return download_id;
|
||||
}
|
||||
|
||||
int WebContentsImpl::DownloadImage(
|
||||
const GURL& url,
|
||||
bool is_favicon,
|
||||
@@ -8960,6 +8934,10 @@ void WebContentsImpl::RunFileChooser(
|
||||
// Do not allow background tab to open file chooser.
|
||||
return;
|
||||
}
|
||||
if (!delegate_->IsContentsActive(this)) {
|
||||
// Do not allow inactive tabs to open file chooser.
|
||||
return;
|
||||
}
|
||||
if (active_file_chooser_) {
|
||||
// Only allow one active file chooser at one time.
|
||||
return;
|
||||
@@ -9097,11 +9075,6 @@ const blink::RendererPreferences& WebContentsImpl::GetRendererPrefs(
|
||||
*render_view_host->frame_tree()->GetMainFrame())) {
|
||||
return guest->GetRendererPrefs();
|
||||
}
|
||||
if (base::FeatureList::IsEnabled(
|
||||
fingerprinting_protection_interventions::features::kCanvasNoise)) {
|
||||
renderer_preferences_.canvas_noise_token =
|
||||
CanvasNoiseTokenData::GetToken(GetBrowserContext());
|
||||
}
|
||||
RenderViewHostImpl::GetPlatformSpecificPrefs(&renderer_preferences_);
|
||||
return renderer_preferences_;
|
||||
}
|
||||
@@ -9195,7 +9168,7 @@ void WebContentsImpl::InnerWebContentsCreated(WebContents* inner_web_contents) {
|
||||
|
||||
void WebContentsImpl::InnerWebContentsAttached(
|
||||
WebContents* inner_web_contents) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::InnerWebContentsDetached");
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::InnerWebContentsAttached");
|
||||
if (inner_web_contents->IsCurrentlyAudible()) {
|
||||
OnAudioStateChanged();
|
||||
}
|
||||
@@ -9203,7 +9176,7 @@ void WebContentsImpl::InnerWebContentsAttached(
|
||||
|
||||
void WebContentsImpl::InnerWebContentsDetached(
|
||||
WebContents* inner_web_contents) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::InnerWebContentsCreated");
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::InnerWebContentsDetached");
|
||||
if (!IsBeingDestroyed()) {
|
||||
OnAudioStateChanged();
|
||||
}
|
||||
@@ -9427,10 +9400,10 @@ void WebContentsImpl::DidStartLoading(FrameTreeNode* frame_tree_node) {
|
||||
OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::DidStartLoading",
|
||||
"frame_tree_node", frame_tree_node);
|
||||
|
||||
TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(
|
||||
"browser,navigation", "WebContentsImpl Loading", this, "URL", "NULL",
|
||||
"Primary Main FrameTreeNode id",
|
||||
GetPrimaryFrameTree().root()->frame_tree_node_id());
|
||||
TRACE_EVENT_BEGIN("browser,navigation", "WebContentsImpl Loading",
|
||||
perfetto::Track::FromPointer(this), "URL", "NULL",
|
||||
"Primary Main FrameTreeNode id",
|
||||
GetPrimaryFrameTree().root()->frame_tree_node_id());
|
||||
SCOPED_UMA_HISTOGRAM_TIMER("WebContentsObserver.DidStartLoading");
|
||||
observers_.NotifyObservers(&WebContentsObserver::DidStartLoading);
|
||||
|
||||
@@ -9463,8 +9436,9 @@ void WebContentsImpl::DidStopLoading() {
|
||||
std::string url =
|
||||
(entry ? entry->GetVirtualURL().possibly_invalid_spec() : "NULL");
|
||||
|
||||
TRACE_EVENT_NESTABLE_ASYNC_END1("browser,navigation",
|
||||
"WebContentsImpl Loading", this, "URL", url);
|
||||
// WebContentsImpl Loading
|
||||
TRACE_EVENT_END("browser,navigation", perfetto::Track::FromPointer(this),
|
||||
"URL", url);
|
||||
SCOPED_UMA_HISTOGRAM_TIMER("WebContentsObserver.DidStopLoading");
|
||||
observers_.NotifyObservers(&WebContentsObserver::DidStopLoading);
|
||||
|
||||
@@ -10568,6 +10542,12 @@ service_manager::InterfaceProvider* WebContentsImpl::GetJavaInterfaces() {
|
||||
return java_interfaces_.get();
|
||||
}
|
||||
|
||||
void WebContentsImpl::SetSelectionPopupDelegate(
|
||||
std::unique_ptr<SelectionPopupDelegate> delegate) {
|
||||
SelectionPopupController::FromWebContents(*this)->SetDelegate(
|
||||
std::move(delegate));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
bool WebContentsImpl::CompletedFirstVisuallyNonEmptyPaint() {
|
||||
@@ -11410,7 +11390,7 @@ std::vector<FrameTreeNode*> WebContentsImpl::GetUnattachedOwnedNodes(
|
||||
void WebContentsImpl::IsClipboardPasteAllowedByPolicy(
|
||||
const ClipboardEndpoint& source,
|
||||
const ClipboardEndpoint& destination,
|
||||
const ClipboardMetadata& metadata,
|
||||
const ui::ClipboardMetadata& metadata,
|
||||
ClipboardPasteData clipboard_paste_data,
|
||||
IsClipboardPasteAllowedCallback callback) {
|
||||
++suppress_unresponsive_renderer_count_;
|
||||
@@ -11623,59 +11603,39 @@ void WebContentsImpl::SetVisibilityForChildViews(bool visible) {
|
||||
GetPrimaryMainFrame()->SetVisibilityForChildViews(visible);
|
||||
}
|
||||
|
||||
void WebContentsImpl::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::OnNativeThemeUpdated");
|
||||
DCHECK(native_theme_observation_.IsObservingSource(observed_theme));
|
||||
|
||||
const bool using_dark_colors = observed_theme->ShouldUseDarkColors();
|
||||
const bool in_forced_colors = observed_theme->InForcedColorsMode();
|
||||
const ui::NativeTheme::PreferredColorScheme preferred_color_scheme =
|
||||
observed_theme->GetPreferredColorScheme();
|
||||
const ui::NativeTheme::PreferredContrast preferred_contrast =
|
||||
observed_theme->GetPreferredContrast();
|
||||
const bool prefers_reduced_transparency =
|
||||
observed_theme->GetPrefersReducedTransparency();
|
||||
const bool inverted_colors = observed_theme->GetInvertedColors();
|
||||
const base::TimeDelta caret_blink_interval =
|
||||
observed_theme->GetCaretBlinkInterval();
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
const bool use_overlay_scrollbar = observed_theme->use_overlay_scrollbar();
|
||||
#endif
|
||||
bool preferences_changed = false;
|
||||
|
||||
if (using_dark_colors_ != using_dark_colors) {
|
||||
using_dark_colors_ = using_dark_colors;
|
||||
preferences_changed = true;
|
||||
}
|
||||
if (in_forced_colors_ != in_forced_colors) {
|
||||
in_forced_colors_ = in_forced_colors;
|
||||
preferences_changed = true;
|
||||
}
|
||||
if (preferred_color_scheme_ != preferred_color_scheme) {
|
||||
preferred_color_scheme_ = preferred_color_scheme;
|
||||
preferences_changed = true;
|
||||
}
|
||||
if (preferred_contrast_ != preferred_contrast) {
|
||||
preferred_contrast_ = preferred_contrast;
|
||||
preferences_changed = true;
|
||||
}
|
||||
if (prefers_reduced_transparency_ != prefers_reduced_transparency) {
|
||||
prefers_reduced_transparency_ = prefers_reduced_transparency;
|
||||
preferences_changed = true;
|
||||
}
|
||||
if (inverted_colors_ != inverted_colors) {
|
||||
inverted_colors_ = inverted_colors;
|
||||
preferences_changed = true;
|
||||
void WebContentsImpl::HandleColorRelatedStateChanges() {
|
||||
if (blink::ColorProviderColorMaps color_maps = GetColorProviderColorMaps();
|
||||
color_maps_ != color_maps) {
|
||||
color_maps_.swap(color_maps);
|
||||
ExecutePageBroadcastMethodForAllPages([this](RenderViewHostImpl* rvh) {
|
||||
if (auto& broadcast = rvh->GetAssociatedPageBroadcast()) {
|
||||
broadcast->UpdateColorProviders(color_maps_);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (preferences_changed) {
|
||||
if (const auto* const theme = ui::NativeTheme::GetInstanceForWeb();
|
||||
prefers_reduced_transparency_ != theme->GetPrefersReducedTransparency() ||
|
||||
inverted_colors_ != theme->GetInvertedColors() ||
|
||||
GetContentClient()
|
||||
->browser()
|
||||
->WebPreferencesNeedUpdateForColorRelatedStateChanges(
|
||||
*this, *GetPrimaryMainFrame()->GetSiteInstance())) {
|
||||
NotifyPreferencesChanged();
|
||||
}
|
||||
}
|
||||
|
||||
void WebContentsImpl::OnNativeThemeUpdated(ui::NativeTheme* observed_theme) {
|
||||
OPTIONAL_TRACE_EVENT0("content", "WebContentsImpl::OnNativeThemeUpdated");
|
||||
DCHECK_EQ(observed_theme, ui::NativeTheme::GetInstanceForWeb());
|
||||
|
||||
HandleColorRelatedStateChanges();
|
||||
|
||||
const auto caret_blink_interval = observed_theme->GetCaretBlinkInterval();
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
const auto use_overlay_scrollbar = observed_theme->use_overlay_scrollbar();
|
||||
#endif
|
||||
bool renderer_preference_changed = false;
|
||||
// Only caret blink interval from NativeTheme impacts
|
||||
// blink::RendererPreferences, which are not synced in
|
||||
// NotifyPreferencesChanged(). Sync these if the interval has changed.
|
||||
if (renderer_preferences_.caret_blink_interval != caret_blink_interval) {
|
||||
renderer_preferences_.caret_blink_interval = caret_blink_interval;
|
||||
renderer_preference_changed = true;
|
||||
@@ -11701,32 +11661,14 @@ void WebContentsImpl::OnColorProviderChanged() {
|
||||
// observed source being reset. If this is the case fallback to the default
|
||||
// source.
|
||||
if (!GetColorProviderSource()) {
|
||||
// This will synchronously call `OnColorProviderChanged()` again.
|
||||
SetColorProviderSource(DefaultColorProviderSource::GetInstance());
|
||||
return;
|
||||
}
|
||||
|
||||
blink::ColorProviderColorMaps color_map = GetColorProviderColorMaps();
|
||||
ExecutePageBroadcastMethodForAllPages([&color_map](RenderViewHostImpl* rvh) {
|
||||
if (auto& broadcast = rvh->GetAssociatedPageBroadcast()) {
|
||||
broadcast->UpdateColorProviders(color_map);
|
||||
}
|
||||
});
|
||||
|
||||
observers_.NotifyObservers(&WebContentsObserver::OnColorProviderChanged);
|
||||
|
||||
// Web preferences may change in response to events such as
|
||||
// OnNativeThemeUpdated(). However web preferences may also depend on
|
||||
// ColorProvider state and the associated ColorProvider may change
|
||||
// independently of the native theme. Ensure we propagate web preferences here
|
||||
// to cover this case.
|
||||
// OnColorProviderChanged() can be emitted during the WebContentsImpl's
|
||||
// constructor in response to setting the ColorProviderSource. In this case
|
||||
// Init() will not yet have been called and the current frame host will not be
|
||||
// defined, so we must guard against this here.
|
||||
// TODO(tluk): There may be a more appropriate way to identify this condition.
|
||||
if (GetRenderManager()->current_frame_host()) {
|
||||
NotifyPreferencesChanged();
|
||||
}
|
||||
HandleColorRelatedStateChanges();
|
||||
}
|
||||
|
||||
const ui::ColorProvider& WebContentsImpl::GetColorProvider() const {
|
||||
@@ -12041,11 +11983,6 @@ std::unique_ptr<PrefetchHandle> WebContentsImpl::StartPrefetch(
|
||||
base::WeakPtr<PreloadingAttempt> attempt,
|
||||
std::optional<PreloadingHoldbackStatus> holdback_status_override,
|
||||
std::optional<base::TimeDelta> ttl) {
|
||||
if (!base::FeatureList::IsEnabled(
|
||||
features::kPrefetchBrowserInitiatedTriggers)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
PrefetchService* prefetch_service =
|
||||
BrowserContextImpl::From(GetBrowserContext())->GetPrefetchService();
|
||||
if (!prefetch_service) {
|
||||
@@ -12242,6 +12179,19 @@ void WebContentsImpl::SetLongPressLinkSelectText(bool enabled) {
|
||||
long_press_link_select_text_ = enabled;
|
||||
NotifyPreferencesChanged();
|
||||
}
|
||||
|
||||
void WebContentsImpl::SetCanAcceptLoadDrops(bool enabled) {
|
||||
if (renderer_preferences_.can_accept_load_drops == enabled) {
|
||||
return;
|
||||
}
|
||||
renderer_preferences_.can_accept_load_drops = enabled;
|
||||
SyncRendererPrefs();
|
||||
}
|
||||
|
||||
bool WebContentsImpl::GetCanAcceptLoadDropsForTesting() {
|
||||
return renderer_preferences_.can_accept_load_drops;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
net::handles::NetworkHandle WebContentsImpl::GetTargetNetwork() {
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#include "ui/native_theme/native_theme_utils.h"
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "base/android/build_info.h"
|
||||
#include "base/android/android_info.h"
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(ENABLE_VR)
|
||||
@@ -106,8 +106,8 @@ void SetRuntimeFeatureDefaultsForPlatform(
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
if (base::android::BuildInfo::GetInstance()->sdk_int() >=
|
||||
base::android::SDK_VERSION_P) {
|
||||
if (base::android::android_info::sdk_int() >=
|
||||
base::android::android_info::SDK_VERSION_P) {
|
||||
// Display Cutout is limited to Android P+.
|
||||
WebRuntimeFeatures::EnableDisplayCutoutAPI(true);
|
||||
}
|
||||
@@ -196,6 +196,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
{wf::EnableAudioOutputDevices,
|
||||
raw_ref(features::kAAudioPerStreamDeviceSelection)},
|
||||
#endif
|
||||
{wf::EnableAuthenticatorPasswordsOnlyImmediateRequests,
|
||||
raw_ref(device::kAuthenticatorPasswordsOnlyImmediateRequests)},
|
||||
{wf::EnableBackgroundFetch, raw_ref(features::kBackgroundFetch)},
|
||||
{wf::EnableBoundaryEventDispatchTracksNodeRemoval,
|
||||
raw_ref(blink::features::kBoundaryEventDispatchTracksNodeRemoval)},
|
||||
@@ -223,9 +225,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
kSetOnlyIfOverridden},
|
||||
{wf::EnableSharedStorageAPI,
|
||||
raw_ref(features::kPrivacySandboxAdsAPIsM1Override)},
|
||||
{wf::EnableFedCmMultipleIdentityProviders,
|
||||
raw_ref(features::kFedCmMultipleIdentityProviders),
|
||||
kSetOnlyIfOverridden},
|
||||
|
||||
{wf::EnableFencedFrames,
|
||||
raw_ref(features::kPrivacySandboxAdsAPIsOverride),
|
||||
kSetOnlyIfOverridden},
|
||||
@@ -239,6 +239,11 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
{wf::EnableGetDisplayMedia,
|
||||
raw_ref(features::kUserMediaScreenCapturing)},
|
||||
{wf::EnableRegionCapture,
|
||||
raw_ref(features::kUserMediaScreenCapturing)},
|
||||
{wf::EnableElementCapture,
|
||||
raw_ref(features::kUserMediaScreenCapturing)},
|
||||
|
||||
#endif
|
||||
{wf::EnableInstalledApp, raw_ref(features::kInstalledApp)},
|
||||
{wf::EnableIntegrityPolicyScript,
|
||||
@@ -284,7 +289,7 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
kSetOnlyIfOverridden},
|
||||
{wf::EnableWebIdentityDigitalCredentials,
|
||||
raw_ref(features::kWebIdentityDigitalCredentials),
|
||||
kSetOnlyIfOverridden},
|
||||
kDefault},
|
||||
{wf::EnableWebIdentityDigitalCredentialsCreation,
|
||||
raw_ref(features::kWebIdentityDigitalCredentialsCreation),
|
||||
kSetOnlyIfOverridden},
|
||||
@@ -355,7 +360,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
raw_ref(network::features::kCompressionDictionaryTransportBackend)},
|
||||
{"CookieDeprecationFacilitatedTesting",
|
||||
raw_ref(features::kCookieDeprecationFacilitatedTesting)},
|
||||
{"CSPHashesV1", raw_ref(network::features::kCSPScriptSrcHashesInV1)},
|
||||
{"DocumentPolicyIncludeJSCallStacksInCrashReports",
|
||||
raw_ref(blink::features::
|
||||
kDocumentPolicyIncludeJSCallStacksInCrashReports),
|
||||
@@ -378,12 +382,13 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
raw_ref(network::features::kReduceAcceptLanguage)},
|
||||
{"RelatedWebsitePartitionAPI",
|
||||
raw_ref(net::features::kRelatedWebsitePartitionAPI)},
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
{"Serial", raw_ref(device::features::kBluetoothRfcommAndroid)},
|
||||
#endif
|
||||
{"SerialPortConnected", raw_ref(features::kSerialPortConnected)},
|
||||
{"SignatureBasedIntegrity",
|
||||
raw_ref(network::features::kSRIMessageSignatureEnforcement)},
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
{"SystemDefaultAccentColors",
|
||||
raw_ref(features::kUseSystemDefaultAccentColors)},
|
||||
#endif
|
||||
{"TopicsAPI", raw_ref(features::kPrivacySandboxAdsAPIsOverride),
|
||||
kSetOnlyIfOverridden},
|
||||
{"TopicsAPI", raw_ref(features::kPrivacySandboxAdsAPIsM1Override)},
|
||||
@@ -408,8 +413,6 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
{"WebAppLaunchQueue", raw_ref(features::kAndroidWebAppLaunchHandler)},
|
||||
#endif
|
||||
{"WebAuthenticationNewBfCacheHandlingBlink",
|
||||
raw_ref(device::kWebAuthnNewBfCacheHandling)},
|
||||
{"LocalNetworkAccessPermissionPolicy",
|
||||
raw_ref(network::features::kLocalNetworkAccessChecks)}};
|
||||
for (const auto& mapping : runtimeFeatureNameToChromiumFeatureMapping) {
|
||||
@@ -639,6 +642,13 @@ void ResolveInvalidConfigurations() {
|
||||
<< blink::features::kPermissionElement.name << " instead.";
|
||||
WebRuntimeFeatures::EnablePermissionElement(false);
|
||||
}
|
||||
|
||||
// CSP Hashes in V1 cannot be enabled without the support of the network
|
||||
// service.
|
||||
if (!base::FeatureList::IsEnabled(
|
||||
network::features::kCSPScriptSrcHashesInV1)) {
|
||||
WebRuntimeFeatures::EnableCSPHashesV1(false);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
#include "third_party/blink/public/mojom/file_system_access/file_system_access_error.mojom.h"
|
||||
#include "third_party/blink/public/mojom/origin_trials/origin_trials_settings.mojom.h"
|
||||
#include "third_party/blink/public/mojom/payments/secure_payment_confirmation_service.mojom.h"
|
||||
#include "ui/base/clipboard/clipboard_metadata.h"
|
||||
#include "ui/gfx/image/image_skia.h"
|
||||
#include "ui/shell_dialogs/select_file_policy.h"
|
||||
#include "url/gurl.h"
|
||||
@@ -167,6 +168,10 @@ bool ContentBrowserClient::ShouldCompareEffectiveURLsForSiteInstanceSelection(
|
||||
return true;
|
||||
}
|
||||
|
||||
void ContentBrowserClient::OnRendererProcessLockedStateUpdated(
|
||||
RenderProcessHost* host,
|
||||
const GURL& site_url) {}
|
||||
|
||||
bool ContentBrowserClient::IsExplicitNavigation(ui::PageTransition transition) {
|
||||
return transition & ui::PAGE_TRANSITION_FROM_ADDRESS_BAR;
|
||||
}
|
||||
@@ -179,7 +184,7 @@ bool ContentBrowserClient::ShouldUseProcessPerSite(
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::
|
||||
ShouldReuseExistingProcessForNewMainFrameSiteInstance(
|
||||
ShouldReuseAnyExistingProcessForNewMainFrameSiteInstance(
|
||||
BrowserContext* browser_context,
|
||||
const GURL& site_instance_original_url) {
|
||||
DCHECK(browser_context);
|
||||
@@ -254,6 +259,13 @@ void ContentBrowserClient::OverrideURLLoaderFactoryParams(
|
||||
bool is_for_service_worker,
|
||||
network::mojom::URLLoaderFactoryParams* factory_params) {}
|
||||
|
||||
// Returns true if the given URL is in any of the NavigationEntries for the
|
||||
// given |browser_context|. This is used to determine if a URL is already
|
||||
// in the navigation history of any of the tabs in a given browser context.
|
||||
bool ContentBrowserClient::IsURLAccessibleByHistoryNavigation(const GURL& url) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void ContentBrowserClient::GetAdditionalViewSourceSchemes(
|
||||
std::vector<std::string>* additional_schemes) {
|
||||
GetAdditionalWebUISchemes(additional_schemes);
|
||||
@@ -413,10 +425,9 @@ bool ContentBrowserClient::IsIsolatedContextAllowedForUrl(
|
||||
return false;
|
||||
}
|
||||
|
||||
void ContentBrowserClient::CheckGetAllScreensMediaAllowed(
|
||||
content::RenderFrameHost* render_frame_host,
|
||||
base::OnceCallback<void(bool)> callback) {
|
||||
std::move(callback).Run(false);
|
||||
bool ContentBrowserClient::IsMultiCaptureAllowed(
|
||||
content::RenderFrameHost* render_frame_host) {
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t ContentBrowserClient::GetMaxRendererProcessCountOverride() {
|
||||
@@ -538,6 +549,12 @@ bool ContentBrowserClient::OverrideWebPreferencesAfterNavigation(
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::WebPreferencesNeedUpdateForColorRelatedStateChanges(
|
||||
WebContents& web_contents,
|
||||
const SiteInstance& main_frame_site) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::IsDataSaverEnabled(BrowserContext* context) {
|
||||
DCHECK(context);
|
||||
return false;
|
||||
@@ -1353,6 +1370,12 @@ ContentBrowserClient::CreateWindowForVideoPictureInPicture(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
base::ScopedClosureRunner
|
||||
ContentBrowserClient::MaybeGetScopedPictureInPictureTucker(
|
||||
WebContents* web_contents) {
|
||||
return base::ScopedClosureRunner();
|
||||
}
|
||||
|
||||
media::PictureInPictureEventsInfo::AutoPipInfo
|
||||
ContentBrowserClient::GetAutoPipInfo(const WebContents& web_contents) const {
|
||||
return media::PictureInPictureEventsInfo::AutoPipInfo();
|
||||
@@ -1530,7 +1553,7 @@ bool ContentBrowserClient::IsClipboardPasteAllowed(
|
||||
void ContentBrowserClient::IsClipboardPasteAllowedByPolicy(
|
||||
const ClipboardEndpoint& source,
|
||||
const ClipboardEndpoint& destination,
|
||||
const ClipboardMetadata& metadata,
|
||||
const ui::ClipboardMetadata& metadata,
|
||||
ClipboardPasteData clipboard_paste_data,
|
||||
IsClipboardPasteAllowedCallback callback) {
|
||||
std::move(callback).Run(std::move(clipboard_paste_data));
|
||||
@@ -1538,7 +1561,7 @@ void ContentBrowserClient::IsClipboardPasteAllowedByPolicy(
|
||||
|
||||
void ContentBrowserClient::IsClipboardCopyAllowedByPolicy(
|
||||
const ClipboardEndpoint& source,
|
||||
const ClipboardMetadata& metadata,
|
||||
const ui::ClipboardMetadata& metadata,
|
||||
const ClipboardPasteData& data,
|
||||
IsClipboardCopyAllowedCallback callback) {
|
||||
std::move(callback).Run(metadata.format_type, data, std::nullopt);
|
||||
@@ -1920,11 +1943,6 @@ void ContentBrowserClient::QueryInstalledWebAppsByManifestId(
|
||||
}
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
bool ContentBrowserClient::IsSaveableNavigation(
|
||||
NavigationHandle* navigation_handle) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
void ContentBrowserClient::OnUiaProviderRequested(bool uia_provider_enabled) {}
|
||||
void ContentBrowserClient::OnUiaProviderDisabled() {}
|
||||
@@ -1975,4 +1993,18 @@ ContentBrowserClient::GetClipboardTypesIfPolicyApplied(
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::ShouldEnableCanvasNoise(
|
||||
BrowserContext* browser_context,
|
||||
const GURL& origin) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::UsePrefetchPrerenderIntegration() {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ContentBrowserClient::UsePreloadServingMetrics() {
|
||||
return false;
|
||||
}
|
||||
|
||||
} // namespace content
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
// Copyright 2013 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// The <code>chrome.audio</code> API is provided to allow users to
|
||||
// get information about and control the audio devices attached to the
|
||||
// system.
|
||||
// This API is currently only available in kiosk mode for ChromeOS.
|
||||
namespace audio {
|
||||
|
||||
// Type of stream an audio device provides.
|
||||
enum StreamType {
|
||||
INPUT,
|
||||
OUTPUT
|
||||
};
|
||||
|
||||
// Available audio device types.
|
||||
enum DeviceType {
|
||||
HEADPHONE,
|
||||
MIC,
|
||||
USB,
|
||||
BLUETOOTH,
|
||||
HDMI,
|
||||
INTERNAL_SPEAKER,
|
||||
INTERNAL_MIC,
|
||||
FRONT_MIC,
|
||||
REAR_MIC,
|
||||
KEYBOARD_MIC,
|
||||
HOTWORD,
|
||||
LINEOUT,
|
||||
POST_MIX_LOOPBACK,
|
||||
POST_DSP_LOOPBACK,
|
||||
ALSA_LOOPBACK,
|
||||
OTHER
|
||||
};
|
||||
|
||||
dictionary AudioDeviceInfo {
|
||||
// The unique identifier of the audio device.
|
||||
DOMString id;
|
||||
// Stream type associated with this device.
|
||||
StreamType streamType;
|
||||
// Type of the device.
|
||||
DeviceType deviceType;
|
||||
// The user-friendly name (e.g. "USB Microphone").
|
||||
DOMString displayName;
|
||||
// Device name.
|
||||
DOMString deviceName;
|
||||
// True if this is the current active device.
|
||||
boolean isActive;
|
||||
// The sound level of the device, volume for output, gain for input.
|
||||
long level;
|
||||
// The stable/persisted device id string when available.
|
||||
DOMString? stableDeviceId;
|
||||
};
|
||||
|
||||
dictionary DeviceFilter {
|
||||
// If set, only audio devices whose stream type is included in this list
|
||||
// will satisfy the filter.
|
||||
StreamType[]? streamTypes;
|
||||
|
||||
// If set, only audio devices whose active state matches this value will
|
||||
// satisfy the filter.
|
||||
boolean? isActive;
|
||||
};
|
||||
|
||||
dictionary DeviceProperties {
|
||||
// <p>
|
||||
// The audio device's desired sound level. Defaults to the device's
|
||||
// current sound level.
|
||||
// </p>
|
||||
// <p>If used with audio input device, represents audio device gain.</p>
|
||||
// <p>If used with audio output device, represents audio device volume.</p>
|
||||
long? level;
|
||||
};
|
||||
|
||||
dictionary DeviceIdLists {
|
||||
// <p>List of input devices specified by their ID.</p>
|
||||
// <p>To indicate input devices should be unaffected, leave this property
|
||||
// unset.</p>
|
||||
DOMString[]? input;
|
||||
|
||||
// <p>List of output devices specified by their ID.</p>
|
||||
// <p>To indicate output devices should be unaffected, leave this property
|
||||
// unset.</p>
|
||||
DOMString[]? output;
|
||||
};
|
||||
|
||||
dictionary MuteChangedEvent {
|
||||
// The type of the stream for which the mute value changed. The updated mute
|
||||
// value applies to all devices with this stream type.
|
||||
StreamType streamType;
|
||||
|
||||
// Whether or not the stream is now muted.
|
||||
boolean isMuted;
|
||||
};
|
||||
|
||||
dictionary LevelChangedEvent {
|
||||
// ID of device whose sound level has changed.
|
||||
DOMString deviceId;
|
||||
|
||||
// The device's new sound level.
|
||||
long level;
|
||||
};
|
||||
|
||||
callback GetDevicesCallback = void(AudioDeviceInfo[] devices);
|
||||
callback GetMuteCallback = void(boolean value);
|
||||
callback EmptyCallback = void();
|
||||
|
||||
interface Functions {
|
||||
// Gets a list of audio devices filtered based on |filter|.
|
||||
// |filter|: Device properties by which to filter the list of returned
|
||||
// audio devices. If the filter is not set or set to <code>{}</code>,
|
||||
// returned device list will contain all available audio devices.
|
||||
// |callback|: Reports the requested list of audio devices.
|
||||
static void getDevices(
|
||||
optional DeviceFilter filter,
|
||||
GetDevicesCallback callback);
|
||||
|
||||
// Sets lists of active input and/or output devices.
|
||||
// |ids|: <p>Specifies IDs of devices that should be active. If either the
|
||||
// input or output list is not set, devices in that category are
|
||||
// unaffected.
|
||||
// </p>
|
||||
// <p>It is an error to pass in a non-existent device ID.</p>
|
||||
static void setActiveDevices(
|
||||
DeviceIdLists ids,
|
||||
EmptyCallback callback);
|
||||
|
||||
// Sets the properties for the input or output device.
|
||||
static void setProperties(
|
||||
DOMString id,
|
||||
DeviceProperties properties,
|
||||
EmptyCallback callback);
|
||||
|
||||
// Gets the system-wide mute state for the specified stream type.
|
||||
// |streamType|: Stream type for which mute state should be fetched.
|
||||
// |callback|: Callback reporting whether mute is set or not for specified
|
||||
// stream type.
|
||||
static void getMute(
|
||||
StreamType streamType,
|
||||
GetMuteCallback callback);
|
||||
|
||||
// Sets mute state for a stream type. The mute state will apply to all audio
|
||||
// devices with the specified audio stream type.
|
||||
// |streamType|: Stream type for which mute state should be set.
|
||||
// |isMuted|: New mute value.
|
||||
static void setMute(
|
||||
StreamType streamType,
|
||||
boolean isMuted,
|
||||
optional EmptyCallback callback);
|
||||
};
|
||||
|
||||
interface Events {
|
||||
// Fired when sound level changes for an active audio device.
|
||||
static void onLevelChanged(LevelChangedEvent event);
|
||||
|
||||
// Fired when the mute state of the audio input or output changes.
|
||||
// Note that mute state is system-wide and the new value applies to every
|
||||
// audio device with specified stream type.
|
||||
static void onMuteChanged(MuteChangedEvent event);
|
||||
|
||||
// Fired when audio devices change, either new devices being added, or
|
||||
// existing devices being removed.
|
||||
// |devices|: List of all present audio devices after the change.
|
||||
static void onDeviceListChanged(AudioDeviceInfo[] devices);
|
||||
};
|
||||
};
|
||||
@@ -296,6 +296,7 @@
|
||||
menuItem,
|
||||
menuItemCheckBox,
|
||||
menuItemRadio,
|
||||
menuItemSeparator,
|
||||
menuListOption,
|
||||
menuListPopup,
|
||||
meter,
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
// Copyright 2012 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.bluetooth</code> API to connect to a Bluetooth
|
||||
// device. All functions report failures via chrome.runtime.lastError.
|
||||
namespace bluetooth {
|
||||
// Allocation authorities for Vendor IDs.
|
||||
enum VendorIdSource {bluetooth, usb};
|
||||
|
||||
// Common device types recognized by Chrome.
|
||||
enum DeviceType {computer, phone, modem, audio, carAudio, video, peripheral,
|
||||
joystick, gamepad, keyboard, mouse, tablet,
|
||||
keyboardMouseCombo};
|
||||
|
||||
// Types for filtering bluetooth devices.
|
||||
enum FilterType {all, known};
|
||||
|
||||
// Transport type of the bluetooth device.
|
||||
enum Transport {invalid, classic, le, dual};
|
||||
|
||||
// Information about the state of the Bluetooth adapter.
|
||||
dictionary AdapterState {
|
||||
// The address of the adapter, in the format 'XX:XX:XX:XX:XX:XX'.
|
||||
DOMString address;
|
||||
|
||||
// The human-readable name of the adapter.
|
||||
DOMString name;
|
||||
|
||||
// Indicates whether or not the adapter has power.
|
||||
boolean powered;
|
||||
|
||||
// Indicates whether or not the adapter is available (i.e. enabled).
|
||||
boolean available;
|
||||
|
||||
// Indicates whether or not the adapter is currently discovering.
|
||||
boolean discovering;
|
||||
};
|
||||
|
||||
// Callback from the <code>getAdapterState</code> method.
|
||||
// |adapterInfo| : Object containing the adapter information.
|
||||
callback AdapterStateCallback = void(AdapterState adapterInfo);
|
||||
|
||||
// Information about the state of a known Bluetooth device. Note: this
|
||||
// dictionary is also used in bluetooth_private.idl
|
||||
dictionary Device {
|
||||
// The address of the device, in the format 'XX:XX:XX:XX:XX:XX'.
|
||||
DOMString address;
|
||||
|
||||
// The human-readable name of the device.
|
||||
DOMString? name;
|
||||
|
||||
// The class of the device, a bit-field defined by
|
||||
// http://www.bluetooth.org/en-us/specification/assigned-numbers/baseband.
|
||||
long? deviceClass;
|
||||
|
||||
// The Device ID record of the device, where available.
|
||||
VendorIdSource? vendorIdSource;
|
||||
long? vendorId;
|
||||
long? productId;
|
||||
long? deviceId;
|
||||
|
||||
// The type of the device, if recognized by Chrome. This is obtained from
|
||||
// the |deviceClass| field and only represents a small fraction of the
|
||||
// possible device types. When in doubt you should use the |deviceClass|
|
||||
// field directly.
|
||||
DeviceType? type;
|
||||
|
||||
// Indicates whether or not the device is paired with the system.
|
||||
boolean? paired;
|
||||
|
||||
// Indicates whether the device is currently connected to the system.
|
||||
boolean? connected;
|
||||
|
||||
// Indicates whether the device is currently connecting to the system.
|
||||
boolean? connecting;
|
||||
|
||||
// Indicates whether the device is connectable.
|
||||
boolean? connectable;
|
||||
|
||||
// UUIDs of protocols, profiles and services advertised by the device.
|
||||
// For classic Bluetooth devices, this list is obtained from EIR data and
|
||||
// SDP tables. For Low Energy devices, this list is obtained from AD and
|
||||
// GATT primary services. For dual mode devices this may be obtained from
|
||||
// both.
|
||||
DOMString[]? uuids;
|
||||
|
||||
// The received signal strength, in dBm. This field is avaliable and valid
|
||||
// only during discovery. Outside of discovery it's value is not specified.
|
||||
long? inquiryRssi;
|
||||
|
||||
// The transmitted power level. This field is avaliable only for LE devices
|
||||
// that include this field in AD. It is avaliable and valid only during
|
||||
// discovery.
|
||||
long? inquiryTxPower;
|
||||
|
||||
// The transport type of the bluetooth device.
|
||||
Transport? transport;
|
||||
|
||||
// The remaining battery of the device.
|
||||
long? batteryPercentage;
|
||||
};
|
||||
|
||||
dictionary BluetoothFilter {
|
||||
// Type of filter to apply to the device list. Default is all.
|
||||
FilterType? filterType;
|
||||
|
||||
// Maximum number of bluetooth devices to return. Default is 0 (no limit)
|
||||
// if unspecified.
|
||||
long? limit;
|
||||
};
|
||||
|
||||
// Callback from the <code>getDevice</code> method.
|
||||
// |deviceInfo| : Object containing the device information.
|
||||
callback GetDeviceCallback = void(Device deviceInfo);
|
||||
|
||||
// Callback from the <code>getDevices</code> method.
|
||||
// |deviceInfos| : Array of object containing device information.
|
||||
callback GetDevicesCallback = void(Device[] deviceInfos);
|
||||
|
||||
// Callback from the <code>startDiscovery</code> method.
|
||||
callback StartDiscoveryCallback = void();
|
||||
|
||||
// Callback from the <code>stopDiscovery</code> method.
|
||||
callback StopDiscoveryCallback = void();
|
||||
|
||||
// These functions all report failures via chrome.runtime.lastError.
|
||||
interface Functions {
|
||||
// Get information about the Bluetooth adapter.
|
||||
// |callback| : Called with an AdapterState object describing the adapter
|
||||
// state.
|
||||
static void getAdapterState(
|
||||
AdapterStateCallback callback);
|
||||
|
||||
// Get information about a Bluetooth device known to the system.
|
||||
// |deviceAddress| : Address of device to get.
|
||||
// |callback| : Called with the Device object describing the device.
|
||||
static void getDevice(
|
||||
DOMString deviceAddress,
|
||||
GetDeviceCallback callback);
|
||||
|
||||
// Get a list of Bluetooth devices known to the system, including paired
|
||||
// and recently discovered devices.
|
||||
// |filter|: Some criteria to filter the list of returned bluetooth devices.
|
||||
// If the filter is not set or set to <code>{}</code>, returned device list
|
||||
// will contain all bluetooth devices. Right now this is only supported in
|
||||
// ChromeOS, for other platforms, a full list is returned.
|
||||
// |callback| : Called when the search is completed.
|
||||
static void getDevices(
|
||||
optional BluetoothFilter filter,
|
||||
GetDevicesCallback callback);
|
||||
|
||||
// Start discovery. Newly discovered devices will be returned via the
|
||||
// onDeviceAdded event. Previously discovered devices already known to
|
||||
// the adapter must be obtained using getDevices and will only be updated
|
||||
// using the |onDeviceChanged| event if information about them changes.
|
||||
//
|
||||
// Discovery will fail to start if this application has already called
|
||||
// startDiscovery. Discovery can be resource intensive: stopDiscovery
|
||||
// should be called as soon as possible.
|
||||
// |callback| : Called to indicate success or failure.
|
||||
static void startDiscovery(
|
||||
optional StartDiscoveryCallback callback);
|
||||
|
||||
// Stop discovery.
|
||||
// |callback| : Called to indicate success or failure.
|
||||
static void stopDiscovery(
|
||||
optional StopDiscoveryCallback callback);
|
||||
};
|
||||
|
||||
interface Events {
|
||||
// Fired when the state of the Bluetooth adapter changes.
|
||||
// |state| : The new state of the adapter.
|
||||
static void onAdapterStateChanged(AdapterState state);
|
||||
|
||||
// Fired when information about a new Bluetooth device is available.
|
||||
static void onDeviceAdded(Device device);
|
||||
|
||||
// Fired when information about a known Bluetooth device has changed.
|
||||
static void onDeviceChanged(Device device);
|
||||
|
||||
// Fired when a Bluetooth device that was previously discovered has been
|
||||
// out of range for long enough to be considered unavailable again, and
|
||||
// when a paired device is removed.
|
||||
static void onDeviceRemoved(Device device);
|
||||
};
|
||||
};
|
||||
@@ -305,6 +305,41 @@ namespace declarativeNetRequest {
|
||||
// </ul>
|
||||
DOMString[]? excludedRequestDomains;
|
||||
|
||||
// The rule will only match network requests when the associated top-level
|
||||
// frame's domain matches one from the list of <code>topDomains</code>. If
|
||||
// the list is omitted, the rule is applied to requests associated with all
|
||||
// top-level frame domains. An empty list is not allowed.
|
||||
//
|
||||
// Notes:
|
||||
// <ul>
|
||||
// <li>Sub-domains like "a.example.com" are also allowed.</li>
|
||||
// <li>The entries must consist of only ascii characters.</li>
|
||||
// <li>Use punycode encoding for internationalized domains.</li>
|
||||
// <li>Sub-domains of the listed domains are also matched.</li>
|
||||
// <li>For requests with no associated top-level frame (e.g. ServiceWorker
|
||||
// initiated requests, the request initiator's domain is considered
|
||||
// instead.</li>
|
||||
// </ul>
|
||||
[nodoc] DOMString[]? topDomains;
|
||||
|
||||
// The rule will not match network requests when the associated top-level
|
||||
// frame's domain matches one from the list of
|
||||
// <code>excludedTopDomains</code>. If the list is empty or omitted, no
|
||||
// domains are excluded. This takes precedence over
|
||||
// <code>topDomains</code>.
|
||||
//
|
||||
// Notes:
|
||||
// <ul>
|
||||
// <li>Sub-domains like "a.example.com" are also allowed.</li>
|
||||
// <li>The entries must consist of only ascii characters.</li>
|
||||
// <li>Use punycode encoding for internationalized domains.</li>
|
||||
// <li>Sub-domains of the listed domains are also excluded.</li>
|
||||
// <li>For requests with no associated top-level frame (e.g. ServiceWorker
|
||||
// initiated requests, the request initiator's domain is considered
|
||||
// instead.</li>
|
||||
// </ul>
|
||||
[nodoc] DOMString[]? excludedTopDomains;
|
||||
|
||||
// The rule will only match network requests originating from the list of
|
||||
// <code>domains</code>.
|
||||
[deprecated="Use $(ref:initiatorDomains) instead"]
|
||||
@@ -550,6 +585,9 @@ namespace declarativeNetRequest {
|
||||
// the request isn't related to a tab.
|
||||
long? tabId;
|
||||
|
||||
// The associated top-level frame URL (if any) for the request.
|
||||
[nodoc] DOMString? topUrl;
|
||||
|
||||
// The headers provided by a hypothetical response if the request does not
|
||||
// get blocked or redirected before it is sent. Represented as an object
|
||||
// which maps a header name to a list of string values. If not specified,
|
||||
|
||||
@@ -419,6 +419,9 @@ void SetFeatureFlags() {
|
||||
SetV8FlagsIfOverridden(features::kV8IdleGcOnContextDisposal,
|
||||
"--idle-gc-on-context-disposal",
|
||||
"--no-idle-gc-on-context-disposal");
|
||||
SetV8FlagsIfOverridden(features::kV8MemoryPoolReleaseOnMallocFailures,
|
||||
"--memory-pool-release-on-malloc-failures",
|
||||
"--no-memory-pool-release-on-malloc-failures");
|
||||
SetV8FlagsIfOverridden(features::kV8MinorMS, "--minor-ms", "--no-minor-ms");
|
||||
if (base::FeatureList::IsEnabled(features::kV8ScavengerHigherCapacity)) {
|
||||
SetV8FlagsFormatted("--scavenger-max-new-space-capacity-mb=%i",
|
||||
@@ -490,8 +493,6 @@ void SetFeatureFlags() {
|
||||
bool any_slow_histograms_alias =
|
||||
base::FeatureList::IsEnabled(
|
||||
features::kV8SlowHistogramsCodeMemoryWriteProtection) ||
|
||||
base::FeatureList::IsEnabled(
|
||||
features::kV8SlowHistogramsIntelJCCErratumMitigation) ||
|
||||
base::FeatureList::IsEnabled(features::kV8SlowHistogramsSparkplug) ||
|
||||
base::FeatureList::IsEnabled(
|
||||
features::kV8SlowHistogramsSparkplugAndroid) ||
|
||||
@@ -507,10 +508,6 @@ void SetFeatureFlags() {
|
||||
"--ignition-elide-redundant-tdz-checks",
|
||||
"--no-ignition-elide-redundant-tdz-checks");
|
||||
|
||||
SetV8FlagsIfOverridden(features::kV8IntelJCCErratumMitigation,
|
||||
"--intel-jcc-erratum-mitigation",
|
||||
"--no-intel-jcc-erratum-mitigation");
|
||||
|
||||
SetV8FlagsIfOverridden(features::kV8UseLibmTrigFunctions,
|
||||
"--use-libm-trig-functions",
|
||||
"--no-use-libm-trig-functions");
|
||||
|
||||
@@ -108,6 +108,7 @@
|
||||
#include "services/network/cookie_manager.h"
|
||||
#include "services/network/data_remover_util.h"
|
||||
#include "services/network/device_bound_session_manager.h"
|
||||
#include "services/network/devtools_durable_msg_collector.h"
|
||||
#include "services/network/disk_cache/mojo_backend_file_operations_factory.h"
|
||||
#include "services/network/host_resolver.h"
|
||||
#include "services/network/http_auth_cache_copier.h"
|
||||
@@ -793,9 +794,6 @@ NetworkContext::NetworkContext(
|
||||
|
||||
InitializeCorsParams();
|
||||
|
||||
SetSplitAuthCacheByNetworkAnonymizationKey(
|
||||
params_->split_auth_cache_by_network_anonymization_key);
|
||||
|
||||
#if BUILDFLAG(IS_CT_SUPPORTED)
|
||||
if (params_->ct_policy) {
|
||||
SetCTPolicy(std::move(params_->ct_policy));
|
||||
@@ -1755,6 +1753,28 @@ void NetworkContext::SetNetworkConditions(
|
||||
std::move(network_conditions));
|
||||
}
|
||||
|
||||
void NetworkContext::OnDevToolsDurableMessageClientsDisconnected(
|
||||
const base::UnguessableToken& throttling_profile_id) {
|
||||
devtools_profile_to_durable_message_collectors_.erase(throttling_profile_id);
|
||||
}
|
||||
|
||||
void NetworkContext::EnableDurableMessageCollector(
|
||||
const base::UnguessableToken& throttling_profile_id,
|
||||
mojo::PendingReceiver<network::mojom::DurableMessageCollector> receiver) {
|
||||
auto [it, inserted] =
|
||||
devtools_profile_to_durable_message_collectors_.try_emplace(
|
||||
throttling_profile_id);
|
||||
if (inserted) {
|
||||
auto disconnect_callback = base::BindOnce(
|
||||
&NetworkContext::OnDevToolsDurableMessageClientsDisconnected,
|
||||
base::Unretained(this), throttling_profile_id);
|
||||
it->second = std::make_unique<DevtoolsDurableMessageCollector>(
|
||||
std::move(disconnect_callback));
|
||||
}
|
||||
|
||||
it->second->AddReceiver(std::move(receiver));
|
||||
}
|
||||
|
||||
void NetworkContext::SetAcceptLanguage(const std::string& new_accept_language) {
|
||||
// This may only be called on NetworkContexts created with the constructor
|
||||
// that calls MakeURLRequestContext().
|
||||
@@ -2497,24 +2517,6 @@ void NetworkContext::SetCorsNonWildcardRequestHeadersSupport(bool value) {
|
||||
cors::NonWildcardRequestHeadersSupport(value);
|
||||
}
|
||||
|
||||
void NetworkContext::LookupServerBasicAuthCredentials(
|
||||
const GURL& url,
|
||||
const net::NetworkAnonymizationKey& network_anonymization_key,
|
||||
LookupServerBasicAuthCredentialsCallback callback) {
|
||||
net::HttpAuthCache* http_auth_cache =
|
||||
url_request_context_->http_transaction_factory()
|
||||
->GetSession()
|
||||
->http_auth_cache();
|
||||
net::HttpAuthCache::Entry* entry = http_auth_cache->LookupByPath(
|
||||
url::SchemeHostPort(url), net::HttpAuth::AUTH_SERVER,
|
||||
network_anonymization_key, url.path());
|
||||
if (entry && entry->scheme() == net::HttpAuth::AUTH_SCHEME_BASIC) {
|
||||
std::move(callback).Run(entry->credentials());
|
||||
} else {
|
||||
std::move(callback).Run(std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_CHROMEOS)
|
||||
void NetworkContext::LookupProxyAuthCredentials(
|
||||
const net::ProxyServer& proxy_server,
|
||||
@@ -2965,14 +2967,8 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
|
||||
session_params.disable_idle_sockets_close_on_memory_pressure =
|
||||
params_->disable_idle_sockets_close_on_memory_pressure;
|
||||
|
||||
if (network_service_) {
|
||||
session_params.key_auth_cache_server_entries_by_network_anonymization_key =
|
||||
network_service_->split_auth_cache_by_network_isolation_key();
|
||||
}
|
||||
|
||||
session_params.key_auth_cache_server_entries_by_network_anonymization_key =
|
||||
base::FeatureList::IsEnabled(
|
||||
features::kSplitAuthCacheByNetworkIsolationKey);
|
||||
params_->split_auth_cache_by_network_anonymization_key;
|
||||
|
||||
builder.set_http_network_session_params(session_params);
|
||||
builder.set_quic_context(std::move(quic_context));
|
||||
@@ -2989,8 +2985,25 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
|
||||
std::move(network_layer));
|
||||
}));
|
||||
|
||||
builder.set_host_mapping_rules(
|
||||
command_line->GetSwitchValueASCII(switches::kHostResolverRules));
|
||||
if (command_line->HasSwitch(switches::kHostResolverRules)) {
|
||||
builder.set_host_mapping_rules(
|
||||
command_line->GetSwitchValueASCII(switches::kHostResolverRules));
|
||||
} else if (command_line->HasSwitch(switches::kHostRules)) {
|
||||
LOG(WARNING)
|
||||
<< "The --" << switches::kHostRules
|
||||
<< " command line switch is deprecated, and now has the same behavior "
|
||||
"as --"
|
||||
<< switches::kHostResolverRules << ". Use --"
|
||||
<< switches::kHostResolverRules
|
||||
<< " directly to avoid this LOG message. If you get certificate error "
|
||||
"where --"
|
||||
<< switches::kHostRules
|
||||
<< " previously did not give one, you need to ensure the server has a "
|
||||
"valid certificate for the mapped hostname, not the destination "
|
||||
"hostname.";
|
||||
builder.set_host_mapping_rules(
|
||||
command_line->GetSwitchValueASCII(switches::kHostRules));
|
||||
}
|
||||
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
if (params_->socket_brokers) {
|
||||
@@ -3515,6 +3528,31 @@ void NetworkContext::GetDeviceBoundSessionManager(
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkContext::GetIpProxyStatus(GetIpProxyStatusCallback callback) {
|
||||
ip_protection::IpProxyStatus status =
|
||||
ip_protection::IpProxyStatus::kUnavailable;
|
||||
|
||||
if (!base::FeatureList::IsEnabled(net::features::kEnableIpProtectionProxy)) {
|
||||
status = ip_protection::IpProxyStatus::kFeatureNotEnabled;
|
||||
std::move(callback).Run(status);
|
||||
return;
|
||||
}
|
||||
if (!base::FeatureList::IsEnabled(features::kMaskedDomainList)) {
|
||||
status = ip_protection::IpProxyStatus::kMaskedDomainListNotEnabled;
|
||||
std::move(callback).Run(status);
|
||||
return;
|
||||
}
|
||||
if (ip_protection_core()) {
|
||||
// ip_protection_core() should be null if either of the above features are
|
||||
// disabled, so check beforehand
|
||||
status = ip_protection_core()->GetIpProxyStatus();
|
||||
std::move(callback).Run(status);
|
||||
return;
|
||||
}
|
||||
|
||||
std::move(callback).Run(status);
|
||||
}
|
||||
|
||||
bool NetworkContext::IsNetworkForNonceAndUrlAllowed(
|
||||
const base::UnguessableToken& nonce,
|
||||
const GURL& url) const {
|
||||
@@ -3540,4 +3578,21 @@ void NetworkContext::InitializePrefetchURLLoaderFactory() {
|
||||
CreateURLLoaderFactoryParamsForPrefetch());
|
||||
}
|
||||
|
||||
base::WeakPtr<DevtoolsDurableMessage> NetworkContext::MaybeCreateDurableMessage(
|
||||
const std::optional<base::UnguessableToken>& throttling_profile_id,
|
||||
const std::optional<std::string>& devtools_request_id) {
|
||||
if (!throttling_profile_id.has_value() || !devtools_request_id.has_value()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto collector_it = devtools_profile_to_durable_message_collectors_.find(
|
||||
throttling_profile_id.value());
|
||||
if (collector_it == devtools_profile_to_durable_message_collectors_.end()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return collector_it->second->CreateDurableMessage(
|
||||
devtools_request_id.value());
|
||||
}
|
||||
|
||||
} // namespace network
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Vendored
+32
-7
@@ -3216,7 +3216,7 @@ enum WebFeature {
|
||||
kSameSiteNoneIncludedBySamePartyAncestors = 3955,
|
||||
kSameSiteNoneIncludedBySameSiteLax = 3956,
|
||||
kSameSiteNoneIncludedBySameSiteStrict = 3957,
|
||||
kPrivateNetworkAccessNonSecureContextsAllowedDeprecationTrial = 3958,
|
||||
kOBSOLETE_PrivateNetworkAccessNonSecureContextsAllowedDeprecationTrial = 3958,
|
||||
kV8URLPattern_Constructor = 3959,
|
||||
kV8URLPattern_Test_Method = 3960,
|
||||
kV8URLPattern_Exec_Method = 3961,
|
||||
@@ -3580,7 +3580,7 @@ enum WebFeature {
|
||||
kSendBeaconWithURLSearchParams = 4309,
|
||||
kSendBeaconWithUSVString = 4310,
|
||||
kReplacedElementPaintedWithOverflow = 4311,
|
||||
kImageAd = 4312,
|
||||
kOBSOLETE_kImageAd = 4312,
|
||||
kLinkRelPrefetchAsDocumentSameOrigin = 4313,
|
||||
kLinkRelPrefetchAsDocumentCrossOrigin = 4314,
|
||||
kPersistentQuotaType = 4315,
|
||||
@@ -3623,7 +3623,7 @@ enum WebFeature {
|
||||
kAudioContextSetSinkId = 4350,
|
||||
kViewportDependentLazyLoadedImageWithSizesAttribute = 4351,
|
||||
kXRWebGLBindingGetCameraImage = 4352,
|
||||
kSelectiveInOrderScript = 4353,
|
||||
kOBSOLETE_SelectiveInOrderScript = 4353,
|
||||
kV8AsyncStackTaggingCreateTaskCall = 4354,
|
||||
kWebkitBoxWithoutWebkitLineClamp = 4355,
|
||||
kDataUrlInSvgUse = 4356,
|
||||
@@ -4520,7 +4520,7 @@ enum WebFeature {
|
||||
kV8AuthenticatorAttestationResponse_GetPublicKey_Method = 5214,
|
||||
kCloseWatcherScriptConstructor = 5215,
|
||||
kCanvas2DImageSmoothingQuality2 = 5216,
|
||||
kNonNoneTouchActionWouldLoseEditableHandwriting = 5217,
|
||||
kOBSOLETENonNoneTouchActionWouldLoseEditableHandwriting = 5217,
|
||||
kCSSEnvironmentVariable_SafeAreaInsetBottom_FastPath = 5218,
|
||||
kSrcSetUsedHigherDensityImageFromCache = 5219,
|
||||
kHTMLElementWritingSuggestions = 5220,
|
||||
@@ -4639,8 +4639,8 @@ enum WebFeature {
|
||||
kWebAppManifestUpdate = 5331,
|
||||
kCSSEnvironmentVariable_PreferredTextScale = 5332,
|
||||
kButtonTypeAttrInvalidWithCommandOrCommandfor = 5333,
|
||||
kCSSVarFallbackCycle = 5334,
|
||||
kCSSAttrFallbackCycle = 5335,
|
||||
kOBSOLETE_CSSVarFallbackCycle = 5334,
|
||||
kOBSOLETE_CSSAttrFallbackCycle = 5335,
|
||||
// The items above roughly this point are available in the M135 branch.
|
||||
kCSSRainbowGradientPattern = 5336,
|
||||
kWebAppManifestStartUrl = 5337,
|
||||
@@ -4697,7 +4697,7 @@ enum WebFeature {
|
||||
kOBSOLETE_V8AILanguageModel_MeasureInputUsage_Method = 5388,
|
||||
kCredentialsGetImmediateMediationWithWebAuthnOnly = 5389,
|
||||
kCredentialsGetImmediateMediationWithWebAuthnAndPasswords = 5390,
|
||||
kNonNoneTouchActionWouldLoseEditableHandwritingRestoredByScroller = 5391,
|
||||
kOBSOLETENonNoneTouchActionWouldLoseEditableHandwritingRestoredByScroller = 5391,
|
||||
kTranslator_Create = 5392,
|
||||
kTranslator_Availability = 5393,
|
||||
kTranslator_SourceLanguage = 5394,
|
||||
@@ -4937,6 +4937,31 @@ enum WebFeature {
|
||||
kSharedWorkerStartOnAndroid = 5626,
|
||||
kLocalNetworkAccessWithinSharedWorker = 5627,
|
||||
kLocalNetworkAccessWithinDedicatedWorker = 5628,
|
||||
kCSSPseudoParentInScope = 5629,
|
||||
kInterestHintPseudoElement = 5630,
|
||||
kCookieStoreEmptyPath = 5631,
|
||||
kV8CookieListItem_Domain_AttributeGetter = 5632,
|
||||
kV8CookieListItem_Path_AttributeGetter = 5633,
|
||||
kV8CookieListItem_Expires_AttributeGetter = 5634,
|
||||
kV8CookieListItem_Secure_AttributeGetter = 5635,
|
||||
kV8CookieListItem_SameSite_AttributeGetter = 5636,
|
||||
kV8CookieListItem_Partitioned_AttributeGetter = 5637,
|
||||
kWebkitLineClampWithHeight = 5638,
|
||||
kLineClampAuto = 5639,
|
||||
kLineClampByLinesAndHeight = 5640,
|
||||
kV8RegExpStaticPropertiesWithLastMatch = 5641,
|
||||
kGetStatusForPolicyCrossOriginIframe = 5642,
|
||||
kComputedBorderTopWidthWithNoneOrHiddenStyle = 5643,
|
||||
kComputedBorderRightWidthWithNoneOrHiddenStyle = 5644,
|
||||
kComputedBorderBottomWidthWithNoneOrHiddenStyle = 5645,
|
||||
kComputedBorderLeftWidthWithNoneOrHiddenStyle = 5646,
|
||||
kComputedBorderWidthWithNoneOrHiddenStyle = 5647,
|
||||
kComputedColumnRuleWidthWithNoneOrHiddenStyle = 5648,
|
||||
kComputedOutlineWidthWithNoneOrHiddenStyle = 5649,
|
||||
kNavigationNavigateJavaScriptURL = 5650,
|
||||
kV8WasmCustomDescriptors = 5651,
|
||||
kSRIIntegrityAttributeOnInlineScript = 5652,
|
||||
kCredentialsGetImmediateMediationWithPasswordsOnly = 5653,
|
||||
|
||||
// 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
|
||||
|
||||
Vendored
+3
@@ -509,4 +509,7 @@ struct WebPreferences {
|
||||
bool api_based_fingerprinting_interventions_enabled = false;
|
||||
|
||||
bool content_based_fingerprinting_protection_enabled = false;
|
||||
|
||||
[EnableIf=is_android]
|
||||
bool increment_local_surface_id_for_mainframe_same_doc_navigation = true;
|
||||
};
|
||||
|
||||
-6
@@ -10,13 +10,7 @@ enum AnimationTriggerBehavior { "once", "repeat", "alternate", "state" };
|
||||
Exposed=Window,
|
||||
RuntimeEnabled=AnimationTrigger
|
||||
] interface AnimationTrigger {
|
||||
[CallWith=ExecutionContext, Measure, RaisesException] constructor(optional AnimationTriggerOptions options = {});
|
||||
readonly attribute AnimationTimeline? timeline;
|
||||
readonly attribute AnimationTriggerBehavior behavior;
|
||||
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeStart;
|
||||
[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);
|
||||
};
|
||||
|
||||
Vendored
Executable
+17
@@ -0,0 +1,17 @@
|
||||
// Copyright 2025 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// https://drafts.csswg.org/web-animations-2/#the-animationtrigger-interface
|
||||
|
||||
[
|
||||
Exposed=Window,
|
||||
RuntimeEnabled=AnimationTrigger
|
||||
] interface TimelineTrigger : AnimationTrigger {
|
||||
[CallWith=ExecutionContext, MeasureAs=V8AnimationTrigger_Constructor, RaisesException] constructor(optional TimelineTriggerOptions options = {});
|
||||
readonly attribute AnimationTimeline? timeline;
|
||||
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeStart;
|
||||
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) rangeEnd;
|
||||
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeStart;
|
||||
[CallWith=ExecutionContext] readonly attribute (TimelineRangeOffset or DOMString) exitRangeEnd;
|
||||
};
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
|
||||
// https://drafts.csswg.org/web-animations-2/#the-animationtriggeroptions-dictionary
|
||||
|
||||
dictionary AnimationTriggerOptions {
|
||||
dictionary TimelineTriggerOptions {
|
||||
AnimationTriggerBehavior behavior = "once";
|
||||
AnimationTimeline? timeline;
|
||||
(DOMString or TimelineRangeOffset) rangeStart = "normal";
|
||||
Vendored
Executable
+8
@@ -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.
|
||||
|
||||
[Exposed=Window, RuntimeEnabled=CSSMixins]
|
||||
interface CSSApplyMixinRule : CSSRule {
|
||||
readonly attribute CSSOMString name;
|
||||
};
|
||||
Vendored
Executable
+7
@@ -0,0 +1,7 @@
|
||||
// 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.
|
||||
|
||||
[Exposed=Window, RuntimeEnabled=CSSMixins]
|
||||
interface CSSContentsMixinRule : CSSRule {
|
||||
};
|
||||
+8
@@ -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.
|
||||
|
||||
[Exposed=Window, RuntimeEnabled=CSSMixins]
|
||||
interface CSSMixinRule : CSSGroupingRule {
|
||||
readonly attribute CSSOMString name;
|
||||
};
|
||||
-1
@@ -7,7 +7,6 @@ typedef (ArrayBuffer or ArrayBufferView) BufferSource;
|
||||
typedef unsigned long long DOMTimeStamp;
|
||||
|
||||
// https://webidl.spec.whatwg.org/#Function
|
||||
[SupportsTaskAttribution]
|
||||
callback Function = any (any... arguments);
|
||||
|
||||
// Blink-specific forEach iterator's callback
|
||||
|
||||
@@ -192,9 +192,6 @@ typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement;
|
||||
// https://wicg.github.io/nav-speculation/prerendering.html#dom-document-prerendering
|
||||
[Measure] readonly attribute boolean prerendering;
|
||||
|
||||
// Non-exposed API, used to evaluate and test soft navigation heuristics
|
||||
[RuntimeEnabled=SoftNavigationHeuristics] readonly attribute unsigned long softNavigations;
|
||||
|
||||
// Non-standard APIs
|
||||
[MeasureAs=DocumentCaretRangeFromPoint] Range caretRangeFromPoint(optional long x = 0, optional long y = 0);
|
||||
|
||||
|
||||
@@ -174,6 +174,7 @@ dictionary SetHTMLUnsafeOptions {
|
||||
[CEReactions, Reflect=elementtiming] attribute DOMString elementTiming;
|
||||
[RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming] attribute DOMString containerTiming;
|
||||
[RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-ignore] attribute boolean containerTimingIgnore;
|
||||
[RuntimeEnabled=ContainerTiming, CEReactions, Reflect=containertiming-nesting] attribute DOMString containerTimingNesting;
|
||||
|
||||
// Heading Offset
|
||||
[CEReactions, RuntimeEnabled=HeadingOffset] attribute unsigned long headingOffset;
|
||||
@@ -183,7 +184,7 @@ dictionary SetHTMLUnsafeOptions {
|
||||
[RuntimeEnabled=ScopedCustomElementRegistry] readonly attribute CustomElementRegistry? customElementRegistry;
|
||||
|
||||
// Declarative document updates
|
||||
[RuntimeEnabled=DocumentPatching] readonly attribute PatchStatus? currentPatch;
|
||||
[RuntimeEnabled=DocumentPatching] readonly attribute Patch? currentPatch;
|
||||
};
|
||||
|
||||
Element includes ParentNode;
|
||||
|
||||
Vendored
Executable
+10
@@ -0,0 +1,10 @@
|
||||
// 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.
|
||||
|
||||
[
|
||||
Exposed=Window,
|
||||
RuntimeEnabled=FormControlRange
|
||||
] interface FormControlRange : AbstractRange {
|
||||
[CallWith=Document] constructor();
|
||||
};
|
||||
+1
-1
@@ -42,7 +42,7 @@ interface mixin ParentNode {
|
||||
|
||||
[Affects=Nothing, RaisesException] Element? querySelector(DOMString selectors);
|
||||
[Affects=Nothing, NewObject, RaisesException] NodeList querySelectorAll(DOMString selectors);
|
||||
[RuntimeEnabled=DocumentPatching, CallWith=ScriptState] WritableStream patchSelf();
|
||||
[RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream patchSelf();
|
||||
[RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream patchBetween(Node prev_child, Node next_child);
|
||||
[RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream patchAfter(Node ref);
|
||||
[RuntimeEnabled=DocumentPatching, CallWith=ScriptState, RaisesException] WritableStream patchBefore(Node ref);
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
interface mixin PopoverInvokerElement {
|
||||
interface mixin PopoverTargetAttributes {
|
||||
[CEReactions,Reflect=popovertarget] attribute Element? popoverTargetElement;
|
||||
[CEReactions,Reflect,ReflectOnly=("toggle","show","hide"),ReflectEmpty="toggle",ReflectInvalid="toggle",ReflectMissing="toggle"] attribute DOMString popoverTargetAction;
|
||||
};
|
||||
@@ -3,5 +3,4 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
// https://webidl.spec.whatwg.org/#VoidFunction
|
||||
[SupportsTaskAttribution]
|
||||
callback VoidFunction = undefined ();
|
||||
|
||||
+2
-2
@@ -58,8 +58,8 @@
|
||||
[MeasureAs=SelectionContainsNode] boolean containsNode(Node node, optional boolean allowPartialContainment = false);
|
||||
[MeasureAs=SelectionDOMString] stringifier;
|
||||
|
||||
[MeasureAs=SelectionDirection, RuntimeEnabled=SelectionAcrossShadowDOM] readonly attribute DOMString direction;
|
||||
[MeasureAs=SelectionGetComposedRanges, RuntimeEnabled=SelectionAcrossShadowDOM] sequence<StaticRange> getComposedRanges(optional GetComposedRangesOptions options = {});
|
||||
[MeasureAs=SelectionDirection] readonly attribute DOMString direction;
|
||||
[MeasureAs=SelectionGetComposedRanges] sequence<StaticRange> getComposedRanges(optional GetComposedRangesOptions options = {});
|
||||
|
||||
// Non-standard APIs
|
||||
|
||||
|
||||
+39
-16
@@ -477,7 +477,7 @@ void MaybePreloadSystemFonts(Page* page) {
|
||||
is_first_run = false;
|
||||
|
||||
page->GetAgentGroupScheduler().DefaultTaskRunner()->PostTask(
|
||||
FROM_HERE, WTF::BindOnce([]() { FontCache::MaybePreloadSystemFonts(); }));
|
||||
FROM_HERE, BindOnce([]() { FontCache::MaybePreloadSystemFonts(); }));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -502,7 +502,8 @@ WebView* WebView::Create(
|
||||
const ColorProviderColorMaps* color_provider_colors,
|
||||
blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params,
|
||||
int32_t history_index,
|
||||
int32_t history_length) {
|
||||
int32_t history_length,
|
||||
const std::optional<uint64_t>& canvas_noise_token) {
|
||||
return WebViewImpl::Create(
|
||||
client,
|
||||
is_hidden ? mojom::blink::PageVisibilityState::kHidden
|
||||
@@ -512,7 +513,7 @@ WebView* WebView::Create(
|
||||
agent_group_scheduler, session_storage_namespace_id,
|
||||
std::move(page_base_background_color), browsing_context_group_token,
|
||||
color_provider_colors, std::move(partitioned_popin_params), history_index,
|
||||
history_length);
|
||||
history_length, canvas_noise_token);
|
||||
}
|
||||
|
||||
WebViewImpl* WebViewImpl::Create(
|
||||
@@ -532,14 +533,16 @@ WebViewImpl* WebViewImpl::Create(
|
||||
const ColorProviderColorMaps* color_provider_colors,
|
||||
blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params,
|
||||
int32_t history_index,
|
||||
int32_t history_length) {
|
||||
int32_t history_length,
|
||||
const std::optional<uint64_t>& canvas_noise_token) {
|
||||
return new WebViewImpl(
|
||||
client, visibility, std::move(prerender_param), fenced_frame_mode,
|
||||
compositing_enabled, widgets_never_composited, opener,
|
||||
std::move(page_handle), agent_group_scheduler,
|
||||
session_storage_namespace_id, std::move(page_base_background_color),
|
||||
browsing_context_group_token, color_provider_colors,
|
||||
std::move(partitioned_popin_params), history_index, history_length);
|
||||
std::move(partitioned_popin_params), history_index, history_length,
|
||||
canvas_noise_token);
|
||||
}
|
||||
|
||||
size_t WebView::GetWebViewCount() {
|
||||
@@ -606,7 +609,8 @@ WebViewImpl::WebViewImpl(
|
||||
const ColorProviderColorMaps* color_provider_colors,
|
||||
blink::mojom::PartitionedPopinParamsPtr partitioned_popin_params,
|
||||
int32_t history_index,
|
||||
int32_t history_length)
|
||||
int32_t history_length,
|
||||
const std::optional<uint64_t>& canvas_noise_token)
|
||||
: widgets_never_composited_(widgets_never_composited),
|
||||
web_view_client_(client),
|
||||
chrome_client_(MakeGarbageCollected<ChromeClientImpl>(this)),
|
||||
@@ -632,7 +636,7 @@ WebViewImpl::WebViewImpl(
|
||||
// corresponding browser-side `RenderViewHostImpl` (e.g. tests or
|
||||
// printing), call `Close()` directly instead to delete `this`.
|
||||
receiver_.set_disconnect_handler(
|
||||
WTF::BindOnce(&WebViewImpl::MojoDisconnected, WTF::Unretained(this)));
|
||||
BindOnce(&WebViewImpl::MojoDisconnected, Unretained(this)));
|
||||
}
|
||||
if (!web_view_client_)
|
||||
DCHECK(!does_composite_);
|
||||
@@ -640,7 +644,7 @@ WebViewImpl::WebViewImpl(
|
||||
*chrome_client_, opener ? opener->GetPage() : nullptr,
|
||||
agent_group_scheduler.GetAgentGroupScheduler(),
|
||||
browsing_context_group_token, color_provider_colors,
|
||||
std::move(partitioned_popin_params));
|
||||
std::move(partitioned_popin_params), canvas_noise_token);
|
||||
CoreInitializer::GetInstance().ProvideModulesToPage(
|
||||
*page_, session_storage_namespace_id_);
|
||||
|
||||
@@ -1343,6 +1347,16 @@ void WebViewImpl::DidUpdateBrowserControls() {
|
||||
}
|
||||
}
|
||||
|
||||
void WebViewImpl::DidUpdateLoadProgress(float progress) {
|
||||
WebLocalFrameImpl* main_frame = MainFrameImpl();
|
||||
if (!main_frame) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebFrameWidgetImpl* widget = main_frame->LocalRootFrameWidget();
|
||||
widget->SetLoadProgress(progress);
|
||||
}
|
||||
|
||||
void WebViewImpl::DidUpdateMaxSafeAreaInsets(
|
||||
const gfx::InsetsF& max_safe_area_insets) {
|
||||
WebLocalFrameImpl* main_frame = MainFrameImpl();
|
||||
@@ -1918,6 +1932,7 @@ void WebView::ApplyWebPreferences(const web_pref::WebPreferences& prefs,
|
||||
prefs.payment_request_enabled);
|
||||
|
||||
if (prefs.api_based_fingerprinting_interventions_enabled) {
|
||||
RuntimeEnabledFeatures::SetReduceDeviceMemoryEnabled(true);
|
||||
RuntimeEnabledFeatures::SetReduceHardwareConcurrencyEnabled(true);
|
||||
RuntimeEnabledFeatures::SetReduceScreenSizeEnabled(true);
|
||||
}
|
||||
@@ -3111,7 +3126,7 @@ void WebViewImpl::Show(const LocalFrameToken& opener_frame_token,
|
||||
local_main_frame_host_remote_->ShowCreatedWindow(
|
||||
opener_frame_token, NavigationPolicyToDisposition(policy),
|
||||
std::move(window_features), opened_by_user_gesture,
|
||||
WTF::BindOnce(&WebViewImpl::DidShowCreatedWindow, WTF::Unretained(this)));
|
||||
BindOnce(&WebViewImpl::DidShowCreatedWindow, Unretained(this)));
|
||||
}
|
||||
|
||||
void WebViewImpl::DidShowCreatedWindow() {
|
||||
@@ -3176,18 +3191,18 @@ void WebViewImpl::UpdateTargetURL(const WebURL& url,
|
||||
}
|
||||
|
||||
void WebViewImpl::SendUpdatedTargetURLToBrowser(const KURL& target_url) {
|
||||
// Note: WTF::Unretained() usage below is safe, since `this` owns both
|
||||
// Note: blink::Unretained() usage below is safe, since `this` owns both
|
||||
// `mojo::Remote` objects.
|
||||
if (GetPage()->MainFrame()->IsLocalFrame()) {
|
||||
DCHECK(local_main_frame_host_remote_);
|
||||
local_main_frame_host_remote_->UpdateTargetURL(
|
||||
target_url, WTF::BindOnce(&WebViewImpl::TargetURLUpdatedInBrowser,
|
||||
WTF::Unretained(this)));
|
||||
target_url,
|
||||
BindOnce(&WebViewImpl::TargetURLUpdatedInBrowser, Unretained(this)));
|
||||
} else {
|
||||
DCHECK(remote_main_frame_host_remote_);
|
||||
remote_main_frame_host_remote_->UpdateTargetURL(
|
||||
target_url, WTF::BindOnce(&WebViewImpl::TargetURLUpdatedInBrowser,
|
||||
WTF::Unretained(this)));
|
||||
target_url,
|
||||
BindOnce(&WebViewImpl::TargetURLUpdatedInBrowser, Unretained(this)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3461,6 +3476,15 @@ void WebViewImpl::UpdateUseOverlayScrollbar(bool use_overlay_scrollbar) {
|
||||
}
|
||||
#endif
|
||||
|
||||
void WebViewImpl::UpdateCanvasNoiseToken(
|
||||
std::optional<uint64_t> canvas_noise_token) {
|
||||
GetPage()->SetCanvasNoiseToken(canvas_noise_token);
|
||||
}
|
||||
|
||||
std::optional<uint64_t> WebViewImpl::CanvasNoiseTokenForTesting() {
|
||||
return GetPage()->CanvasNoiseToken();
|
||||
}
|
||||
|
||||
void WebViewImpl::ActivatePrerenderedPage(
|
||||
mojom::blink::PrerenderPageActivationParamsPtr
|
||||
prerender_page_activation_params,
|
||||
@@ -3591,7 +3615,6 @@ void WebViewImpl::UpdateRendererPreferences(
|
||||
}
|
||||
#endif
|
||||
|
||||
CanvasNoiseToken::Set(renderer_preferences_.canvas_noise_token);
|
||||
ViewSourceLineWrappingPreference::Set(
|
||||
renderer_preferences_.view_source_line_wrap_enabled);
|
||||
|
||||
@@ -4131,7 +4154,7 @@ void WebViewImpl::MojoDisconnected() {
|
||||
// process, and is used to release ownership of the corresponding
|
||||
// RenderViewImpl instance. https://crbug.com/1000035.
|
||||
GetPage()->GetAgentGroupScheduler().DefaultTaskRunner()->PostNonNestableTask(
|
||||
FROM_HERE, WTF::BindOnce(&WebViewImpl::Close, WTF::Unretained(this)));
|
||||
FROM_HERE, BindOnce(&WebViewImpl::Close, Unretained(this)));
|
||||
}
|
||||
|
||||
void WebViewImpl::CreateRemoteMainFrame(
|
||||
|
||||
@@ -39,9 +39,17 @@ typedef (ArrayBuffer or ArrayBufferView or Blob or USVString) BlobPart;
|
||||
readonly attribute unsigned long long size;
|
||||
readonly attribute DOMString type;
|
||||
|
||||
// TODO(jsbell): start and end arguments should be [Clamp]
|
||||
[RaisesException] Blob slice(optional long long start, optional long long end, optional DOMString contentType);
|
||||
// NOTE: According to the File API spec, the `end` argument should
|
||||
// be treated as the Blob's size when `undefined`. However, our
|
||||
// binding layer converts `undefined` to `0`, making it impossible
|
||||
// for the C++ implementation to distinguish an explicitly passed
|
||||
// `0` from an omitted argument. To workaround the binding issue, we
|
||||
// provide a default value here, similar to WebKit's approach.
|
||||
// This is slightly different from the spec but matches the expected
|
||||
// behavior.
|
||||
[RaisesException] Blob slice(optional [Clamp] long long start = 0, optional [Clamp] long long end = 0x7FFFFFFFFFFFFFFF, optional DOMString contentType = "");
|
||||
[CallWith=ScriptState] ReadableStream stream();
|
||||
[CallWith=ScriptState] Promise<USVString> text();
|
||||
[CallWith=ScriptState] Promise<ArrayBuffer> arrayBuffer();
|
||||
[RuntimeEnabled=BlobBytes, CallWith=ScriptState] Promise<Uint8Array> bytes();
|
||||
};
|
||||
|
||||
+5
-5
@@ -37,12 +37,12 @@
|
||||
] interface FileReader : EventTarget {
|
||||
[CallWith=ExecutionContext] constructor();
|
||||
// async read methods
|
||||
[RaisesException] void readAsArrayBuffer(Blob blob);
|
||||
[RaisesException] void readAsBinaryString(Blob blob);
|
||||
[RaisesException] void readAsText(Blob blob, optional DOMString label);
|
||||
[RaisesException] void readAsDataURL(Blob blob);
|
||||
[RaisesException] undefined readAsArrayBuffer(Blob blob);
|
||||
[RaisesException] undefined readAsBinaryString(Blob blob);
|
||||
[RaisesException] undefined readAsText(Blob blob, optional DOMString encoding);
|
||||
[RaisesException] undefined readAsDataURL(Blob blob);
|
||||
|
||||
void abort();
|
||||
undefined abort();
|
||||
|
||||
// states
|
||||
const unsigned short EMPTY = 0;
|
||||
|
||||
+4
-3
@@ -4,8 +4,9 @@
|
||||
|
||||
// https://w3c.github.io/FileAPI/#creating-revoking
|
||||
[
|
||||
ImplementedAs=URLFileAPI
|
||||
ImplementedAs=URLFileAPI,
|
||||
Exposed=(Window,DedicatedWorker,SharedWorker)
|
||||
] partial interface URL {
|
||||
[Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState, RaisesException] static DOMString createObjectURL(Blob blob);
|
||||
[Exposed=(Window,DedicatedWorker,SharedWorker), CallWith=ScriptState] static void revokeObjectURL(DOMString url);
|
||||
[CallWith=ScriptState, RaisesException] static DOMString createObjectURL(Blob blob);
|
||||
[CallWith=ScriptState] static undefined revokeObjectURL(DOMString url);
|
||||
};
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
|
||||
[Exposed=Window, RuntimeEnabled=CrashReportingStorageAPI]
|
||||
interface CrashReportStorage {
|
||||
[CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kCrashReportStorageAPIInitialize"] Promise<undefined> initialize(unsigned long long length);
|
||||
[CallWith=ScriptState, RaisesException, MeasureAs="WebDXFeature::kDRAFT_CrashReportStorageAPIInitialize"] Promise<undefined> initialize(unsigned long long length);
|
||||
[RaisesException] void set(DOMString key, DOMString value);
|
||||
[RaisesException] void remove(DOMString key);
|
||||
// Promise<undefined> clear();
|
||||
|
||||
+1
-1
@@ -43,5 +43,5 @@
|
||||
|
||||
attribute EventHandler onresize;
|
||||
attribute EventHandler onscroll;
|
||||
[RuntimeEnabled=VisualViewportOnScrollEnd] attribute EventHandler onscrollend;
|
||||
attribute EventHandler onscrollend;
|
||||
};
|
||||
|
||||
Vendored
+1
@@ -9,6 +9,7 @@ enum PredefinedColorSpace {
|
||||
"rec2100-hlg", // Enabled only in CanvasHDR
|
||||
"rec2100-pq", // Enabled only in CanvasHDR
|
||||
"srgb-linear", // Enabled only in CanvasHDR
|
||||
"rec2100-linear", // Enabled in ColorSpaceRec2100Linear
|
||||
};
|
||||
|
||||
enum ImageDataPixelFormat {
|
||||
|
||||
Vendored
+1
-1
@@ -13,7 +13,7 @@ interface CustomElementRegistry {
|
||||
[CallWith=ScriptState,RaisesException] Promise<CustomElementConstructor> whenDefined(DOMString name);
|
||||
[CEReactions] void upgrade(Node root);
|
||||
|
||||
[RuntimeEnabled=ScopedCustomElementRegistry] void initialize((Element or ShadowRoot) root);
|
||||
[RuntimeEnabled=ScopedCustomElementRegistry, RaisesException] void initialize(Node root);
|
||||
};
|
||||
|
||||
callback CustomElementConstructor = any ();
|
||||
|
||||
+1
-1
@@ -51,5 +51,5 @@
|
||||
readonly attribute NodeList labels;
|
||||
};
|
||||
|
||||
HTMLButtonElement includes PopoverInvokerElement;
|
||||
HTMLButtonElement includes PopoverTargetAttributes;
|
||||
HTMLButtonElement includes InterestInvokerElement;
|
||||
|
||||
+1
-1
@@ -114,4 +114,4 @@ enum SelectionMode { "select", "start", "end", "preserve" };
|
||||
[Reflect, MeasureAs=IncrementalAttribute] attribute boolean incremental;
|
||||
};
|
||||
|
||||
HTMLInputElement includes PopoverInvokerElement;
|
||||
HTMLInputElement includes PopoverTargetAttributes;
|
||||
|
||||
tools/under-control/src/third_party/blink/renderer/core/html/forms/html_selected_content_element.idl
Vendored
+1
-2
@@ -4,6 +4,5 @@
|
||||
|
||||
[
|
||||
Exposed=Window,
|
||||
HTMLConstructor,
|
||||
RuntimeEnabled=CustomizableSelect
|
||||
HTMLConstructor
|
||||
] interface HTMLSelectedContentElement : HTMLElement {};
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@
|
||||
[CEReactions, Reflect] attribute DOMString type;
|
||||
[CEReactions, Reflect] attribute DOMString width;
|
||||
[CEReactions, Reflect] attribute DOMString height;
|
||||
[CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
|
||||
[CheckSecurity=ReturnValue] Document? getSVGDocument();
|
||||
|
||||
// obsolete members
|
||||
// https://html.spec.whatwg.org/C/#HTMLEmbedElement-partial
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
|
||||
[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
|
||||
readonly attribute Window? contentWindow;
|
||||
[CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
|
||||
[CheckSecurity=ReturnValue] Document? getSVGDocument();
|
||||
[CEReactions, Reflect, ReflectOnly=("","no-referrer","origin","no-referrer-when-downgrade","origin-when-cross-origin","unsafe-url"), ReflectMissing="", ReflectInvalid=""] attribute DOMString referrerPolicy;
|
||||
// https://w3c.github.io/webappsec-csp/embedded/#dom-htmliframeelement-csp
|
||||
[CEReactions, Reflect] attribute DOMString csp;
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@
|
||||
[CheckSecurity=ReturnValue] readonly attribute Document? contentDocument;
|
||||
// TODO(shanmuga.m): The spec uses the WindowProxy type for this attribute.
|
||||
readonly attribute Window? contentWindow;
|
||||
[CheckSecurity=ReturnValue, RaisesException] Document? getSVGDocument();
|
||||
[CheckSecurity=ReturnValue] Document? getSVGDocument();
|
||||
|
||||
readonly attribute boolean willValidate;
|
||||
readonly attribute ValidityState validity;
|
||||
|
||||
Vendored
+3
@@ -575,6 +575,9 @@ bool OriginTrialContext::CanEnableTrialFromName(const StringView& trial_name) {
|
||||
#endif
|
||||
}
|
||||
|
||||
if (trial_name == "AIProofreadingAPI") {
|
||||
return base::FeatureList::IsEnabled(features::kAIProofreadingAPI);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
[Exposed=Window, RuntimeEnabled=DocumentPatching, ImplementedAs=DOMPatchStatus]
|
||||
interface PatchStatus {
|
||||
[Exposed=Window, RuntimeEnabled=DocumentPatching]
|
||||
interface Patch {
|
||||
[SameObject, CallWith=ScriptState] readonly attribute Promise<undefined> finished;
|
||||
[SameObject] readonly attribute HTMLTemplateElement source;
|
||||
};
|
||||
};
|
||||
+1
-1
@@ -7,5 +7,5 @@
|
||||
RuntimeEnabled=DocumentPatching
|
||||
] interface PatchEvent : Event {
|
||||
constructor(DOMString type, PatchEventInit init);
|
||||
[SameObject] readonly attribute PatchStatus patch;
|
||||
[SameObject] readonly attribute Patch patch;
|
||||
};
|
||||
|
||||
+1
-1
@@ -3,6 +3,6 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
dictionary PatchEventInit : EventInit {
|
||||
PatchStatus patch;
|
||||
Patch patch;
|
||||
};
|
||||
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ enum ReadableStreamType { "bytes" };
|
||||
[
|
||||
Exposed=*
|
||||
] interface ReadableStream {
|
||||
[HasAsyncIteratorReturnAlgorithm] async iterable<any>(optional ReadableStreamIteratorOptions options = {});
|
||||
[HasAsyncIteratorReturnAlgorithm] async_iterable<any>(optional ReadableStreamIteratorOptions options = {});
|
||||
|
||||
[CallWith=ScriptState, RaisesException] constructor(optional any underlyingSource, optional any strategy);
|
||||
readonly attribute boolean locked;
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
[Exposed=Window]
|
||||
interface SVGAElement : SVGGraphicsElement {
|
||||
[ImplementedAs=svgTarget, Measure] readonly attribute SVGAnimatedString target;
|
||||
[RuntimeEnabled=SvgAnchorElementDownloadAttribute, Reflect] attribute DOMString download;
|
||||
|
||||
[RuntimeEnabled=SvgAnchorElementRelAttributes, Reflect] attribute DOMString rel;
|
||||
[RuntimeEnabled=SvgAnchorElementRelAttributes, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
|
||||
|
||||
@@ -200,6 +200,8 @@ interface Internals {
|
||||
|
||||
[RaisesException] DOMString layerTreeAsText(Document document, optional unsigned short flags);
|
||||
|
||||
[RaisesException] DOMString dumpContentNodeTree(Document document);
|
||||
|
||||
[RaisesException] DOMString mainThreadScrollingReasons(Document document);
|
||||
|
||||
void evictAllResources();
|
||||
|
||||
+2
@@ -31,8 +31,10 @@ interface TypeConversions {
|
||||
|
||||
attribute long long testLongLong;
|
||||
[ImplementedAs=testLongLong] attribute [EnforceRange] long long testEnforceRangeLongLong;
|
||||
[ImplementedAs=testLongLong] attribute [Clamp] long long testClampLongLong;
|
||||
attribute unsigned long long testUnsignedLongLong;
|
||||
[ImplementedAs=testUnsignedLongLong] attribute [EnforceRange] unsigned long long testEnforceRangeUnsignedLongLong;
|
||||
[ImplementedAs=testUnsignedLongLong] attribute [Clamp] unsigned long long testClampUnsignedLongLong;
|
||||
|
||||
attribute byte testByte;
|
||||
[ImplementedAs=testByte] attribute [EnforceRange] byte testEnforceRangeByte;
|
||||
|
||||
+2
@@ -8,4 +8,6 @@
|
||||
[MeasureAs=ViewTransition, CallWith=ScriptState, RaisesException] ViewTransition startViewTransition();
|
||||
[MeasureAs=ViewTransition, CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionCallback update);
|
||||
[MeasureAs=ViewTransition, CallWith=ScriptState, RaisesException] ViewTransition startViewTransition(ViewTransitionOptions opts);
|
||||
|
||||
[MeasureAs=ViewTransition, RuntimeEnabled=DocumentActiveViewTransition] readonly attribute ViewTransition? activeViewTransition;
|
||||
};
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
// their interface definition remains the closest thing to a spec:
|
||||
// https://hg.mozilla.org/mozilla-central/file/012853bd80b7/dom/webidl/XSLTProcessor.webidl
|
||||
|
||||
[ Exposed=Window ] interface XSLTProcessor {
|
||||
[ Exposed=Window, RuntimeEnabled=XSLT ] interface XSLTProcessor {
|
||||
[CallWith=Document, MeasureAs=XSLTProcessor] constructor();
|
||||
|
||||
void importStylesheet(Node style);
|
||||
|
||||
Vendored
-4
@@ -58,10 +58,6 @@ dictionary LanguageModelCreateOptions : LanguageModelCreateCoreOptions {
|
||||
CreateMonitorCallback monitor;
|
||||
|
||||
sequence<LanguageModelMessage> initialPrompts;
|
||||
|
||||
// DEPRECATED: Use `initialPrompts: [{role: 'system', content: ... }, ...]`.
|
||||
// TODO(crbug.com/381974893): Remove this along with the console warning.
|
||||
DOMString systemPrompt;
|
||||
};
|
||||
|
||||
dictionary LanguageModelExpected {
|
||||
|
||||
+6
-1
@@ -29,6 +29,10 @@ dictionary ProofreaderCreateOptions : ProofreaderCreateCoreOptions {
|
||||
CreateMonitorCallback monitor;
|
||||
};
|
||||
|
||||
dictionary ProofreaderProofreadOptions {
|
||||
AbortSignal signal;
|
||||
};
|
||||
|
||||
dictionary ProofreadResult {
|
||||
DOMString correctedInput;
|
||||
sequence<ProofreadCorrection> corrections;
|
||||
@@ -70,7 +74,8 @@ interface Proofreader {
|
||||
RaisesException
|
||||
]
|
||||
Promise<ProofreadResult> proofread(
|
||||
DOMString input
|
||||
DOMString input,
|
||||
optional ProofreaderProofreadOptions options = {}
|
||||
);
|
||||
|
||||
[
|
||||
|
||||
Vendored
+1
-1
@@ -24,6 +24,6 @@
|
||||
|
||||
[CallWith=ScriptState] attribute double playbackRate;
|
||||
[RaisesException] void play();
|
||||
[RaisesException] void pause();
|
||||
void pause();
|
||||
void cancel();
|
||||
};
|
||||
|
||||
Vendored
+1
-1
@@ -8,7 +8,7 @@
|
||||
Exposed=(Window,Worker),
|
||||
ActiveScriptWrappable
|
||||
] interface BroadcastChannel : EventTarget {
|
||||
[CallWith=ExecutionContext, RaisesException, Measure] constructor(DOMString name);
|
||||
[CallWith=ExecutionContext, Measure] constructor(DOMString name);
|
||||
readonly attribute DOMString name;
|
||||
|
||||
[RaisesException, Measure] void postMessage(any message);
|
||||
|
||||
+2
-1
@@ -2,7 +2,8 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// Used by method `drawElement` as defined in canvas_rendering_context_2d.idl
|
||||
// Used by method `drawHTMLElement` as defined in
|
||||
// canvas_rendering_context_2d.idl
|
||||
dictionary Canvas2DDrawElementOption {
|
||||
// The element should be drawn in a way that allows readback in
|
||||
// `getImageData`.
|
||||
|
||||
+11
@@ -65,6 +65,17 @@ interface CanvasRenderingContext2D {
|
||||
unrestricted double dwidth, unrestricted double dheight,
|
||||
optional Canvas2DDrawElementOption options = {});
|
||||
|
||||
[RuntimeEnabled=CanvasDrawElement, RaisesException]
|
||||
void drawHTMLElement(Element element,
|
||||
unrestricted double x, unrestricted double y,
|
||||
optional Canvas2DDrawElementOption options = {});
|
||||
|
||||
[RuntimeEnabled=CanvasDrawElement, RaisesException]
|
||||
void drawHTMLElement(Element element,
|
||||
unrestricted double x, unrestricted double y,
|
||||
unrestricted double dwidth, unrestricted double dheight,
|
||||
optional Canvas2DDrawElementOption options = {});
|
||||
|
||||
[RuntimeEnabled=CanvasDrawElement, RaisesException]
|
||||
void setHitTestRegions(sequence<CanvasElementHitTestRegion> hitTestRegions);
|
||||
|
||||
|
||||
Vendored
+6
-6
@@ -7,12 +7,12 @@
|
||||
dictionary CookieListItem {
|
||||
USVString name;
|
||||
USVString value;
|
||||
USVString? domain;
|
||||
USVString path;
|
||||
DOMHighResTimeStamp? expires;
|
||||
boolean secure;
|
||||
CookieSameSite sameSite;
|
||||
boolean partitioned;
|
||||
[Measure] USVString? domain;
|
||||
[Measure] USVString path;
|
||||
[Measure] DOMHighResTimeStamp? expires;
|
||||
[Measure] boolean secure;
|
||||
[Measure] CookieSameSite sameSite;
|
||||
[Measure] boolean partitioned;
|
||||
};
|
||||
|
||||
typedef sequence<CookieListItem> CookieList;
|
||||
|
||||
+1
@@ -24,6 +24,7 @@ dictionary IdentityProviderField {
|
||||
};
|
||||
|
||||
dictionary IdentityProviderRequestOptions : IdentityProviderConfig {
|
||||
// TODO(crbug.com/441895082): Remove nonce field when FedCmNonceInParams is enabled by default.
|
||||
USVString nonce;
|
||||
DOMString loginHint;
|
||||
DOMString domainHint;
|
||||
|
||||
+6
-1
@@ -9,11 +9,16 @@ enum DialogButton {
|
||||
"ErrorMoreDetails",
|
||||
};
|
||||
|
||||
dictionary FedCmTitleAndSubtitle {
|
||||
required DOMString title;
|
||||
DOMString subtitle;
|
||||
};
|
||||
|
||||
[
|
||||
ImplementedAs=InternalsFedCm
|
||||
] partial interface Internals {
|
||||
[CallWith=ScriptState] Promise<DOMString> getFedCmDialogType();
|
||||
[CallWith=ScriptState] Promise<DOMString> getFedCmTitle();
|
||||
[CallWith=ScriptState] Promise<FedCmTitleAndSubtitle> getFedCmTitleAndSubtitle();
|
||||
[CallWith=ScriptState, RaisesException] Promise<undefined> selectFedCmAccount(long accountIndex);
|
||||
[CallWith=ScriptState] Promise<undefined> dismissFedCmDialog();
|
||||
[CallWith=ScriptState] Promise<undefined> clickFedCmDialogButton(DialogButton dialogButton);
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
Serializable,
|
||||
RuntimeEnabled=FileSystemAccess
|
||||
] interface FileSystemDirectoryHandle : FileSystemHandle {
|
||||
async iterable<USVString, FileSystemHandle>;
|
||||
async_iterable<USVString, FileSystemHandle>;
|
||||
|
||||
[
|
||||
CallWith=ScriptState,
|
||||
|
||||
@@ -200,6 +200,8 @@ dictionary MLOpSupportLimits {
|
||||
MLBinarySupportLimits logicalOr;
|
||||
MLBinarySupportLimits logicalXor;
|
||||
MLLogicalNotSupportLimits logicalNot;
|
||||
MLLogicalNotSupportLimits isNaN;
|
||||
MLLogicalNotSupportLimits isInfinite;
|
||||
|
||||
// Element-wise unary ops.
|
||||
MLSingleInputSupportLimits abs;
|
||||
@@ -212,6 +214,7 @@ dictionary MLOpSupportLimits {
|
||||
MLSingleInputSupportLimits log;
|
||||
MLSingleInputSupportLimits neg;
|
||||
MLSingleInputSupportLimits reciprocal;
|
||||
MLSingleInputSupportLimits roundEven;
|
||||
MLSingleInputSupportLimits sign;
|
||||
MLSingleInputSupportLimits sin;
|
||||
MLSingleInputSupportLimits sqrt;
|
||||
|
||||
+3
@@ -287,11 +287,14 @@ dictionary MLTriangularOptions : MLOperatorOptions {
|
||||
[RaisesException] MLOperand floor(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand log(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand neg(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand roundEven(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand sign(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand sin(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand tan(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand erf(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand identity(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand isNaN(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand isInfinite(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand logicalNot(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand reciprocal(MLOperand x, optional MLOperatorOptions options = {});
|
||||
[RaisesException] MLOperand sqrt(MLOperand x, optional MLOperatorOptions options = {});
|
||||
|
||||
+3
-12
@@ -2,18 +2,9 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// https://github.com/alvestrand/webrtc-media-streams/blob/master/explainer.md#api
|
||||
// TODO(guidou): Add standards link when available.
|
||||
// https://www.w3.org/TR/webrtc-encoded-transform/#RTCEncodedAudioFrameMetadata
|
||||
|
||||
dictionary RTCEncodedAudioFrameMetadata {
|
||||
unsigned long synchronizationSource;
|
||||
sequence<unsigned long> contributingSources;
|
||||
octet payloadType;
|
||||
DOMString mimeType;
|
||||
unsigned short? sequenceNumber;
|
||||
unsigned long rtpTimestamp;
|
||||
[RuntimeEnabled=RTCEncodedFrameTimestamps] DOMHighResTimeStamp receiveTime;
|
||||
[RuntimeEnabled=RTCEncodedFrameTimestamps] DOMHighResTimeStamp captureTime;
|
||||
[RuntimeEnabled=RTCEncodedFrameTimestamps] DOMHighResTimeStamp senderCaptureTimeOffset;
|
||||
dictionary RTCEncodedAudioFrameMetadata : RTCEncodedFrameMetadata {
|
||||
unsigned short sequenceNumber;
|
||||
[RuntimeEnabled=RTCEncodedFrameAudioLevel] double audioLevel;
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user