diff --git a/DEPS b/DEPS index 4d0617c..d53d22c 100644 --- a/DEPS +++ b/DEPS
@@ -246,11 +246,11 @@ 'reclient_version': 're_client_version:0.172.0.3cf60ba5-gomaip', # screen-ai CIPD packages - 'screen_ai_linux': 'version:127.8', - 'screen_ai_macos_amd64': 'version:127.8', - 'screen_ai_macos_arm64': 'version:127.8', - 'screen_ai_windows_amd64': 'version:127.8', - 'screen_ai_windows_386': 'version:127.8', + 'screen_ai_linux': 'version:127.9', + 'screen_ai_macos_amd64': 'version:127.9', + 'screen_ai_macos_arm64': 'version:127.9', + 'screen_ai_windows_amd64': 'version:127.9', + 'screen_ai_windows_386': 'version:127.9', # siso CIPD package version. 'siso_version': 'git_revision:f9bfa081826a4ffb6f2a96b640d009cef900e69f', @@ -280,7 +280,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '5310fc642c7565a68e2727a8cad9d8aaf40aaff1', + 'skia_revision': 'e71ab89812e144ccfc4c2aa32feae6320669297a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -288,7 +288,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '53ec86ab118cb7892a8d310a0ce6576109a211ec', + 'angle_revision': '853087b79259af4a2893ab7bb3f1004eaf189d4f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -300,7 +300,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. - 'boringssl_revision': '029914cf3df9d8cf5250c3a1d6cda178ad8ed0ec', + 'boringssl_revision': 'd777ea2a7004ff7ef40ef983b41a5125f316f898', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. @@ -348,11 +348,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'b3934f5a9aa01f3a1a1421db86ba0da90b601020', + 'catapult_revision': '8e5d239c953a309d4bf8aa70481bafa921834cc3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling chromium_variations # and whatever else without interference from each other. - 'chromium_variations_revision': '0fcd7c5b11aca584c5c03b2af870c9f3af6c631c', + 'chromium_variations_revision': '59f30bf1d20ecefceec9e39837ab78c113b9ffb5', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling CrossBench # and whatever else without interference from each other. @@ -372,7 +372,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '361959bf72992029360ea51c6842bc9a474f08d4', + 'devtools_frontend_revision': '08c452a7caccf0ca80340e1e4ebe6d7d591c0db9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -396,7 +396,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '68ff61cfd4c1384a7a305e0c30c608aedaba95d3', + 'dawn_revision': '3989b426db4499d4af5f6afffb5eb804c7563323', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -1081,7 +1081,7 @@ 'packages': [ { 'package': 'chromium/third_party/cronet_android_mainline_clang/linux-amd64', - 'version': 'YBJ6tRxent4zFvyGNyAxWQ160dRHZ6vj7in9Al3VeGAC', + 'version': 'V0dPF9Cc6TYEaE6vsPyJoFO6xD2_NglmR7Gbqrp7d-sC', }, ], 'condition': 'checkout_android and host_os == "linux"', @@ -1439,12 +1439,12 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'fd6b11c819ca76fb830452f1dc7b7021013b1a58', + '8ee7d533635c5f34802d39076064a0cb7cf8d03f', 'condition': 'checkout_android and checkout_src_internal', }, 'src/docs/website': { - 'url': Var('chromium_git') + '/website.git' + '@' + '4d214097ba7305ec2b3f2dfcf0aa4fd2104c960a', + 'url': Var('chromium_git') + '/website.git' + '@' + 'bee1494dcbf575cee5e4fe5b55712241e8417fef', }, 'src/ios/third_party/earl_grey2/src': { @@ -1934,7 +1934,7 @@ 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1dd73cd467bb8526d6fdebfadf9a379a9e50bf34', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '423f1e1914ab4aa7b2bdf804e216d4c097853ba2', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -2436,7 +2436,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '2473cc95bc0d2d0c3c240be49ce4c2d0dc48edd4', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f83d7ea5ed4d1c25eb7026f50fac7d8e04d00b49', 'src/base/tracing/test/data': { 'bucket': 'perfetto', @@ -2618,7 +2618,7 @@ 'packages': [ { 'package': 'chromium/third_party/r8', - 'version': 'U3Jf_ewWOZyxa6vyO3wjNIgm8XIz1yFk-4k3-wqDL44C', + 'version': 'zzsW6sllgOhMp73iLSaG0dTW_A8IvWreBT1vBH6JKAIC', }, ], 'condition': 'checkout_android and non_git_source', @@ -2662,7 +2662,7 @@ Var('skia_git') + '/skia.git' + '@' + Var('skia_revision'), 'src/third_party/smhasher/src': - Var('chromium_git') + '/external/smhasher.git' + '@' + 'e87738e57558e0ec472b2fc3a643b838e5b6e88f', + Var('chromium_git') + '/external/smhasher.git' + '@' + '3e1f0d1d8340cfe136d33fd27c75eb7694148214', 'src/third_party/snappy/src': Var('chromium_git') + '/external/github.com/google/snappy.git' + '@' + '32ded457c0b1fe78ceb8397632c416568d6714a0', @@ -2800,13 +2800,13 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '450cceb587613ac1469c5a131fac15935c99e0e7', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'e99550b44ea9eedb364beb553d1a48549d0da115', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '10b66cd2ff469e53ee5068a3348c4979b05b3123', 'src/third_party/webpagereplay': Var('chromium_git') + '/webpagereplay.git' + '@' + Var('webpagereplay_revision'), 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + 'cbe304455fe0ae24622252ef8a0707a555fa5caf', + Var('webrtc_git') + '/src.git' + '@' + '4b96bfde967983e1ca9781c7b11496a76f081f5f', # Wuffs' canonical repository is at github.com/google/wuffs, but we use # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file. @@ -2921,7 +2921,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/eche_app/app', - 'version': 'tmSVEIDae--T6Earl0vynO4iSn4H2S9I8lnym0Q3pFYC', + 'version': 'Kdms-EK9XVmquV6I0yPrHsDBj38kBX6ZhyDByrWC1KMC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2932,7 +2932,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/boca_app/app', - 'version': 'okOgx37R1rbAupH4AYFbA2eAhvMANqaNoTCPGpI43_0C', + 'version': 'cK6ZfANmMhdaFpnzS9iYDhPxN_cnYE58PjaHBeftM5wC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -2987,7 +2987,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/projector_app/app', - 'version': 'sGvMIWo8sGY8C2QjlEL-HhFUMoXsRSWgUbUj8p5ZPtYC', + 'version': 'X01DaOcyNEq7G9cC2ch2rGnYAYqXfY6O-90ZkUS-KzsC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -4634,7 +4634,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - 'f0847b93cd608b74dcc2e37591097df607d035e6', + 'd36652422aa84dc3f7c2b0c386d10bfe42e2b824', 'condition': 'checkout_ios and checkout_src_internal', },
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java index 490a6d6..8a77e33 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java +++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserContext.java
@@ -37,9 +37,12 @@ import org.chromium.content_public.browser.ContentViewStatics; import org.chromium.url.Origin; +import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.Executor; +import java.util.regex.Pattern; /** * Java side of the Browser Context: contains all the java side objects needed to host one browsing @@ -54,6 +57,10 @@ public class AwBrowserContext implements BrowserContextHandle { private static final String BASE_PREFERENCES = "WebViewProfilePrefs"; + /* package */ static final Pattern BAD_HEADER_CHAR = Pattern.compile("[\u0000\r\n]"); + /* package */ static final String BAD_HEADER_MSG = + "HTTP headers must not contain null, CR, or NL characters. "; + /** * Cache storing already-initialized Play providers for the Media Integrity Blink renderer * extension. This cache speeds up calls for new providers from a similar context. @@ -284,6 +291,39 @@ } } + /** + * Check if additional HTTP headers sent along with loadUrl, prefetchUrl, or prerenderUrl + * contains invalid characters. + * + * @param headers The additional HTTP headers to be sent along with loadUrl, prefetchUrl, or + * prerenderUrl. + * @return An exception if validation fails. Otherwise, an empty Optional. + */ + public static Optional<IllegalArgumentException> validateAdditionalHeaders( + Map<String, String> headers) { + if (headers == null) return Optional.empty(); + for (Map.Entry<String, String> header : headers.entrySet()) { + String headerName = header.getKey(); + String headerValue = header.getValue(); + if (headerName != null && BAD_HEADER_CHAR.matcher(headerName).find()) { + return Optional.of( + new IllegalArgumentException( + BAD_HEADER_MSG + "Invalid header name '" + headerName + "'.")); + } + if (headerValue != null && BAD_HEADER_CHAR.matcher(headerValue).find()) { + return Optional.of( + new IllegalArgumentException( + BAD_HEADER_MSG + + "Header '" + + headerName + + "' has invalid value '" + + headerValue + + "'")); + } + } + return Optional.empty(); + } + @UiThread public void startPrefetchRequest( @NonNull String url, @@ -309,6 +349,14 @@ + " enabled."))); } + if (prefetchParameters != null) { + Optional<IllegalArgumentException> exception = + validateAdditionalHeaders(prefetchParameters.getAdditionalHeaders()); + if (exception.isPresent()) { + callbackExecutor.execute(() -> callback.onError(exception.get())); + } + } + AwBrowserContextJni.get() .startPrefetchRequest( mNativeAwBrowserContext,
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 938ee22..ee8e3a4 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -147,6 +147,7 @@ import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.WeakHashMap; import java.util.concurrent.Callable; import java.util.function.BiFunction; @@ -1886,7 +1887,12 @@ @Nullable Callback<Void> activationCallback) { if (isDestroyed(NO_WARN)) return; if (prefetchParameters != null) { - validateHeaders(prefetchParameters.getAdditionalHeaders()); + Optional<IllegalArgumentException> exception = + AwBrowserContext.validateAdditionalHeaders( + prefetchParameters.getAdditionalHeaders()); + if (exception.isPresent()) { + throw exception.get(); + } } AwContentsJni.get() .startPrerendering( @@ -2230,10 +2236,6 @@ mContentsClient.getVisitedHistory(callback); } - /* package */ static final Pattern BAD_HEADER_CHAR = Pattern.compile("[\u0000\r\n]"); - /* package */ static final String BAD_HEADER_MSG = - "HTTP headers must not contain null, CR, or NL characters. "; - /** WebView.loadUrl. */ public void loadUrl(String url, Map<String, String> additionalHttpHeaders) { if (TRACE) Log.i(TAG, "%s loadUrl(extra headers)=%s", this, url); @@ -2257,7 +2259,11 @@ LoadUrlParams params = new LoadUrlParams(url, PageTransition.TYPED); if (additionalHttpHeaders != null) { - validateHeaders(additionalHttpHeaders); + Optional<IllegalArgumentException> exception = + AwBrowserContext.validateAdditionalHeaders(additionalHttpHeaders); + if (exception.isPresent()) { + throw exception.get(); + } params.setExtraHeaders(new HashMap<String, String>(additionalHttpHeaders)); } @@ -4294,28 +4300,6 @@ sLastCollectionTime = -MEMORY_COLLECTION_INTERVAL_MS; } - // Check if the headers contains invalid characters. - private static void validateHeaders(Map<String, String> headers) { - if (headers == null) return; - for (Map.Entry<String, String> header : headers.entrySet()) { - String headerName = header.getKey(); - String headerValue = header.getValue(); - if (headerName != null && BAD_HEADER_CHAR.matcher(headerName).find()) { - throw new IllegalArgumentException( - BAD_HEADER_MSG + "Invalid header name '" + headerName + "'."); - } - if (headerValue != null && BAD_HEADER_CHAR.matcher(headerValue).find()) { - throw new IllegalArgumentException( - BAD_HEADER_MSG - + "Header '" - + headerName - + "' has invalid value '" - + headerValue - + "'"); - } - } - } - // -------------------------------------------------------------------------------------------- // This is the AwViewMethods implementation that does real work. The AwViewMethodsImpl is // hooked up to the WebView in embedded mode and to the FullScreenView in fullscreen mode,
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java index 1e97d19..eba30487 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -787,9 +787,9 @@ if (!oldUserAgent.equals(mUserAgent)) { if (ua != null && ua.length() > 0 - && AwContents.BAD_HEADER_CHAR.matcher(ua).find()) { + && AwBrowserContext.BAD_HEADER_CHAR.matcher(ua).find()) { throw new IllegalArgumentException( - AwContents.BAD_HEADER_MSG + "Invalid User-Agent '" + ua + "'"); + AwBrowserContext.BAD_HEADER_MSG + "Invalid User-Agent '" + ua + "'"); } mEventHandler.runOnUiThreadBlockingAndLocked( () -> updateUserAgentOnUiThreadLocked());
diff --git a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java index 0cb62a2..61ca076 100644 --- a/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java +++ b/android_webview/java/src/org/chromium/android_webview/common/ProductionSupportedFlagList.java
@@ -1017,6 +1017,10 @@ Flag.baseFeature( "CSSReadingFlow", "Enables new CSS reading-flow property for focus navigation in visual order."), + Flag.baseFeature( + "SimpleCachePrioritizedCaching", + "When enabled, main frame navigation resources will be prioritized in Simple" + + " Cache."), // Add new commandline switches and features above. The final entry should have a // trailing comma for cleaner diffs. };
diff --git a/ash/capture_mode/capture_mode_controller.cc b/ash/capture_mode/capture_mode_controller.cc index d218eae..91ac330 100644 --- a/ash/capture_mode/capture_mode_controller.cc +++ b/ash/capture_mode/capture_mode_controller.cc
@@ -59,6 +59,7 @@ #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/notreached.h" +#include "base/strings/strcat.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "base/task/current_thread.h" @@ -109,11 +110,11 @@ constexpr char kScreenRecordingNotificationType[] = "screen_recording_notification_type"; -// The format strings of the file names of captured images. +// The base file names of captured images. // TODO(afakhry): Discuss with UX localizing "Screenshot" and "Screen // recording". -constexpr char kScreenshotFileNameFmtStr[] = "Screenshot %s %s"; -constexpr char kVideoFileNameFmtStr[] = "Screen recording %s %s"; +constexpr char kScreenshotFileName[] = "Screenshot"; +constexpr char kVideoFileName[] = "Screen recording"; // Duration to clear the capture region selection from the previous session. constexpr base::TimeDelta kResetCaptureRegionDuration = base::Minutes(8); @@ -2209,36 +2210,32 @@ } base::FilePath CaptureModeController::BuildImagePath() const { - return BuildPathNoExtension(kScreenshotFileNameFmtStr, base::Time::Now()) + return BuildPathNoExtension(kScreenshotFileName, base::Time::Now()) .AddExtension("png"); } base::FilePath CaptureModeController::BuildVideoPath() const { - return BuildPathNoExtension(kVideoFileNameFmtStr, base::Time::Now()) + return BuildPathNoExtension(kVideoFileName, base::Time::Now()) .AddExtension(GetVideoExtension(recording_type_, source_)); } base::FilePath CaptureModeController::BuildImagePathForDisplay( int display_index) const { auto path_str = - BuildPathNoExtension(kScreenshotFileNameFmtStr, base::Time::Now()) - .value(); + BuildPathNoExtension(kScreenshotFileName, base::Time::Now()).value(); auto full_path = base::StringPrintf("%s - Display %d.png", path_str.c_str(), display_index); return base::FilePath(full_path); } base::FilePath CaptureModeController::BuildPathNoExtension( - const char* const format_string, + std::string_view base_name, base::Time timestamp) const { - return GetCurrentCaptureFolder().path.AppendASCII( - base::StringPrintfNonConstexpr( - format_string, - base::UnlocalizedTimeFormatWithPattern(timestamp, "y-MM-dd").c_str(), - base::UnlocalizedTimeFormatWithPattern( - timestamp, - delegate_->Uses24HourFormat() ? "HH.mm.ss" : "h.mm.ss a") - .c_str())); + return GetCurrentCaptureFolder().path.AppendASCII(base::StrCat( + {base_name, base::UnlocalizedTimeFormatWithPattern(timestamp, " y-MM-dd"), + base::UnlocalizedTimeFormatWithPattern( + timestamp, + delegate_->Uses24HourFormat() ? " HH.mm.ss" : " h.mm.ss a")})); } base::FilePath CaptureModeController::GetFallbackFilePathFromFile(
diff --git a/ash/capture_mode/capture_mode_controller.h b/ash/capture_mode/capture_mode_controller.h index 89863b72..3e5cb9e 100644 --- a/ash/capture_mode/capture_mode_controller.h +++ b/ash/capture_mode/capture_mode_controller.h
@@ -608,10 +608,10 @@ base::FilePath BuildVideoPath() const; base::FilePath BuildImagePathForDisplay(int display_index) const; // Used by the above three functions by providing the corresponding file name - // |format_string| to a capture type (image or video). The returned file path + // |base_name| to a capture type (image or video). The returned file path // excludes the file extension. The above functions are responsible for adding // it. - base::FilePath BuildPathNoExtension(const char* const format_string, + base::FilePath BuildPathNoExtension(std::string_view base_name, base::Time timestamp) const; // Returns a fallback path concatenating the default `Downloads` folder and
diff --git a/ash/components/kcer/DIR_METADATA b/ash/components/kcer/DIR_METADATA deleted file mode 100644 index 05b456a..0000000 --- a/ash/components/kcer/DIR_METADATA +++ /dev/null
@@ -1 +0,0 @@ -mixins: "//ash/components/kcer/COMMON_METADATA"
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 5cf6289f7..2efef80 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -1617,7 +1617,7 @@ // Enables Kiosk sessions with Isolated Web Apps. BASE_FEATURE(kIsolatedWebAppKiosk, "IsolatedWebAppKiosk", - base::FEATURE_DISABLED_BY_DEFAULT); + base::FEATURE_ENABLED_BY_DEFAULT); // Enables correct handling of the function key row in Japanese. BASE_FEATURE(kJapaneseFunctionRow,
diff --git a/ash/constants/ash_switches.cc b/ash/constants/ash_switches.cc index 91d7941..1ddf300 100644 --- a/ash/constants/ash_switches.cc +++ b/ash/constants/ash_switches.cc
@@ -35,10 +35,6 @@ "\x7c\x8c\x82\x6f\x3e\xcd\x16\xf0\xfb\xfe\xfc\x9c\x2a\x48\x07\x75\x7e\xea" "\x46\xf2"; -// The hash value for the secret key of the sparky feature. -constexpr char kSparkyHashKey[] = - "\x3b\xcc\x52\x86\xf0\x4d\xfd\xd2\xcf\xd7\x05\xe0\xcc\x97\x95\xfd\x8a\x78" - "\x44\x77"; } // namespace @@ -789,12 +785,6 @@ // Specifies the user which is already logged in. const char kLoginUser[] = "login-user"; -// Supply secret key for the sparky feature. -const char kSparkyFeatureKey[] = "sparky-feature-key"; - -// Supply server url for the sparky feature. -const char kSparkyServerUrl[] = "sparky-server-url"; - // Specifies the user that the browser data migration should happen for. const char kBrowserDataMigrationForUser[] = "browser-data-migration-for-user"; @@ -1298,33 +1288,4 @@ return key_matched; } -bool IsSparkySecretKeyMatched() { - // Commandline looks like: - // out/Default/chrome --user-data-dir=/tmp/tmp123 - // --sparky-feature-key="INSERT KEY HERE" --enable-features=Sparky - const std::string provided_key_hash = base::SHA1HashString( - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - kSparkyFeatureKey)); - - bool sparky_key_matched = (provided_key_hash == kSparkyHashKey); - if (!sparky_key_matched) { - LOG(ERROR) << "Provided secret key does not match with the expected one."; - } - - return sparky_key_matched; -} - -std::optional<std::string> ObtainSparkyServerUrl() { - // Commandline looks like: - // out/Default/chrome --user-data-dir=/tmp/tmp123 - // --sparky-server-url="INSERT KEY HERE" - // --enable-features=Sparky - if (base::CommandLine::ForCurrentProcess()->HasSwitch(kSparkyServerUrl)) { - return std::make_optional( - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - kSparkyServerUrl)); - } - return std::nullopt; -} - } // namespace ash::switches
diff --git a/ash/constants/ash_switches.h b/ash/constants/ash_switches.h index 09d6bc61..4a51dea 100644 --- a/ash/constants/ash_switches.h +++ b/ash/constants/ash_switches.h
@@ -256,8 +256,6 @@ COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kLoginManager[]; COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kLoginProfile[]; COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kLoginUser[]; -COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kSparkyFeatureKey[]; -COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kSparkyServerUrl[]; COMPONENT_EXPORT(ASH_CONSTANTS) extern const char kBrowserDataMigrationForUser[]; COMPONENT_EXPORT(ASH_CONSTANTS) @@ -495,15 +493,6 @@ bool IsMantisSecretKeyMatched(); COMPONENT_EXPORT(ASH_CONSTANTS) -bool IsSparkySecretKeyMatched(); - -COMPONENT_EXPORT(ASH_CONSTANTS) -base::AutoReset<bool> SetIgnoreSparkySecretKeyForTest(); - -COMPONENT_EXPORT(ASH_CONSTANTS) -std::optional<std::string> ObtainSparkyServerUrl(); - -COMPONENT_EXPORT(ASH_CONSTANTS) bool IsScannerUpdateSecretKeyMatched(); COMPONENT_EXPORT(ASH_CONSTANTS)
diff --git a/ash/public/cpp/shelf_model_unittest.cc b/ash/public/cpp/shelf_model_unittest.cc index 15f496bc..4d40218 100644 --- a/ash/public/cpp/shelf_model_unittest.cc +++ b/ash/public/cpp/shelf_model_unittest.cc
@@ -7,10 +7,12 @@ #include <memory> #include <set> #include <string> +#include <string_view> #include "ash/public/cpp/shelf_model_observer.h" #include "ash/public/cpp/test/test_shelf_item_delegate.h" -#include "base/strings/stringprintf.h" +#include "base/strings/strcat.h" +#include "base/strings/string_number_conversions.h" #include "testing/gtest/include/gtest/gtest.h" namespace ash { @@ -29,11 +31,11 @@ // was last invoked. Resets state to initial state. std::string StateStringAndClear() { std::string result; - AddToResult("added=%d", added_count_, &result); - AddToResult("removed=%d", removed_count_, &result); - AddToResult("changed=%d", changed_count_, &result); - AddToResult("moved=%d", moved_count_, &result); - AddToResult("delegate_changed=%d", delegate_changed_count_, &result); + AddToResult("added", added_count_, &result); + AddToResult("removed", removed_count_, &result); + AddToResult("changed", changed_count_, &result); + AddToResult("moved", moved_count_, &result); + AddToResult("delegate_changed", delegate_changed_count_, &result); added_count_ = removed_count_ = changed_count_ = moved_count_ = delegate_changed_count_ = 0; return result; @@ -51,12 +53,12 @@ } private: - void AddToResult(const std::string& format, int count, std::string* result) { + void AddToResult(std::string_view type, int count, std::string* result) { if (!count) return; if (!result->empty()) *result += " "; - *result += base::StringPrintfNonConstexpr(format.c_str(), count); + *result += base::StrCat({type, "=", base::NumberToString(count)}); } int added_count_ = 0;
diff --git a/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h b/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h index a7c7a47..4f38bdd0 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h +++ b/base/allocator/partition_allocator/src/partition_alloc/page_allocator_constants.h
@@ -70,9 +70,30 @@ // Ability to name anonymous VMAs is available on some, but not all Linux-based // systems. -#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) +#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) || \ + PA_BUILDFLAG(IS_CHROMEOS) #include <sys/prctl.h> +#if (PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)) && \ + !(defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME)) + +// The PR_SET_VMA* symbols are originally from +// https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/private/bionic_prctl.h +// and were subsequently added to mainline Linux in Jan 2022, see +// https://github.com/torvalds/linux/commit/9a10064f5625d5572c3626c1516e0bebc6c9fe9b. +// +// Define them to support compiling with older headers. +#if !defined(PR_SET_VMA) +#define PR_SET_VMA 0x53564d41 +#endif + +#if !defined(PR_SET_VMA_ANON_NAME) +#define PR_SET_VMA_ANON_NAME 0 +#endif + +#endif // (PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS)) && + // !(defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME)) + #if defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) #define LINUX_NAME_REGION 1 #endif
diff --git a/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc b/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc index 8511f72..05d1a44 100644 --- a/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/page_allocator_internals_posix.cc
@@ -150,7 +150,7 @@ PA_NOTREACHED(); } - // No error checking on purpose, testing only. + // No error checking on purpose, used for debugging only. prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, start, length, name); }
diff --git a/base/android/java/src/org/chromium/base/Log.java b/base/android/java/src/org/chromium/base/Log.java index 8a8c06f..da4b5e1 100644 --- a/base/android/java/src/org/chromium/base/Log.java +++ b/base/android/java/src/org/chromium/base/Log.java
@@ -46,7 +46,7 @@ /** Returns a formatted log message, using the supplied format and arguments. */ private static String formatLog( - String messageTemplate, @Nullable Throwable tr, @Nullable Object @Nullable [] params) { + String messageTemplate, @Nullable Throwable tr, @Nullable Object... params) { if ((params != null) && ((tr == null && params.length > 0) || params.length > 1)) { messageTemplate = String.format(Locale.US, messageTemplate, params); } @@ -88,7 +88,7 @@ * @param args Arguments referenced by the format specifiers in the format string. If the last * one is a {@link Throwable}, its trace will be printed. */ - public static void v(String tag, String messageTemplate, @Nullable Object @Nullable ... args) { + public static void v(String tag, String messageTemplate, Object... args) { if (!isLoggable(tag, VERBOSE)) return; Throwable tr = getThrowableToLog(args); @@ -111,7 +111,7 @@ * @param args Arguments referenced by the format specifiers in the format string. If the last * one is a {@link Throwable}, its trace will be printed. */ - public static void d(String tag, String messageTemplate, @Nullable Object @Nullable ... args) { + public static void d(String tag, String messageTemplate, Object... args) { if (!isLoggable(tag, DEBUG)) return; Throwable tr = getThrowableToLog(args); @@ -134,7 +134,7 @@ * @param args Arguments referenced by the format specifiers in the format string. If the last * one is a {@link Throwable}, its trace will be printed. */ - public static void i(String tag, String messageTemplate, @Nullable Object... args) { + public static void i(String tag, String messageTemplate, Object... args) { Throwable tr = getThrowableToLog(args); String message = formatLog(messageTemplate, tr, args); tag = normalizeTag(tag); @@ -901,7 +901,7 @@ return android.util.Log.getStackTraceString(tr); } - private static @Nullable Throwable getThrowableToLog(@Nullable Object @Nullable [] args) { + private static @Nullable Throwable getThrowableToLog(Object[] args) { if (args == null || args.length == 0) return null; Object lastArg = args[args.length - 1];
diff --git a/base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java b/base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java index e233378..b6089206 100644 --- a/base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java +++ b/base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java
@@ -87,7 +87,7 @@ // Runnable which will be called when allocator wants to allocate a new connection, but does // not have any more free slots. May be null. - private final @Nullable Runnable mFreeSlotCallback; + private final Runnable mFreeSlotCallback; private final Queue<Runnable> mPendingAllocations = new ArrayDeque<>(); @@ -129,7 +129,7 @@ public static ChildConnectionAllocator create( Context context, Handler launcherHandler, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, String numChildServicesManifestKey, @@ -224,7 +224,7 @@ * instead of being retrieved from the AndroidManifest.xml. */ public static FixedSizeAllocatorImpl createFixedForTesting( - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, int serviceCount, @@ -245,7 +245,7 @@ public static VariableSizeAllocatorImpl createVariableSizeForTesting( Handler launcherHandler, String packageName, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String serviceClassName, boolean bindToCaller, boolean bindAsExternalService, @@ -266,7 +266,7 @@ public static Android10WorkaroundAllocatorImpl createWorkaroundForTesting( Handler launcherHandler, String packageName, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String serviceClassName, boolean bindToCaller, boolean bindAsExternalService, @@ -285,7 +285,7 @@ private ChildConnectionAllocator( Handler launcherHandler, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, @Nullable String fallbackServiceClassName, @@ -440,7 +440,7 @@ private FixedSizeAllocatorImpl( Handler launcherHandler, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, boolean bindToCaller, @@ -554,7 +554,7 @@ // Note |serviceClassName| includes the service suffix. private VariableSizeAllocatorImpl( Handler launcherHandler, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, @Nullable String fallbackServiceClassName, @@ -668,7 +668,7 @@ private Android10WorkaroundAllocatorImpl( Handler launcherHandler, - @Nullable Runnable freeSlotCallback, + Runnable freeSlotCallback, String packageName, String serviceClassName, boolean bindToCaller,
diff --git a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java index 6327a9c..86b41ad 100644 --- a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java +++ b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java
@@ -101,10 +101,10 @@ private final ChildConnectionAllocator mConnectionAllocator; // The IBinder interfaces provided to the created service. - private final @Nullable List<IBinder> mClientInterfaces; + private final List<IBinder> mClientInterfaces; - // A binder box which can be used by the child to unpack additional binders. - private final @Nullable IBinder mBinderBox; + // A binder box which can be used by the child to unpack additional binders. May be null. + private final IBinder mBinderBox; // The actual service connection. Set once we have connected to the service. Volatile as it is // accessed from threads other than the Launcher thread. @@ -128,8 +128,8 @@ String[] commandLine, FileDescriptorInfo[] filesToBeMapped, ChildConnectionAllocator connectionAllocator, - @Nullable List<IBinder> clientInterfaces, - @Nullable IBinder binderBox) { + List<IBinder> clientInterfaces, + IBinder binderBox) { assert connectionAllocator != null; mLauncherHandler = launcherHandler; isRunningOnLauncherThread(); @@ -294,11 +294,11 @@ return connection == null ? NULL_PROCESS_HANDLE : connection.getPid(); } - public @Nullable List<IBinder> getClientInterfaces() { + public List<IBinder> getClientInterfaces() { return mClientInterfaces; } - public @Nullable IBinder getBinderBox() { + public IBinder getBinderBox() { return mBinderBox; }
diff --git a/build/config/unsafe_buffers_paths.txt b/build/config/unsafe_buffers_paths.txt index fc702d0..208a10c 100644 --- a/build/config/unsafe_buffers_paths.txt +++ b/build/config/unsafe_buffers_paths.txt
@@ -55,15 +55,7 @@ -base/third_party/ -chrome/browser/platform_experience/win/ -chrome/chrome_elf/third_party_dlls/ --chrome/common/profiler/ --chrome/credential_provider/ --chrome/elevation_service/ --chrome/services/cups_proxy/ --chrome/services/ipp_parser/public/cpp/ --chrome/services/sharing/nearby/decoder/ --chrome/test/ --chrome/tools/service_discovery_sniffer/ --chrome/updater/net/ +-chrome/elevation_service/internal/ -chromecast/ -clank/ -components/optimization_guide/internal/
diff --git a/chrome/MAJOR_BRANCH_DATE b/chrome/MAJOR_BRANCH_DATE index 889ed00..4fa5e33 100644 --- a/chrome/MAJOR_BRANCH_DATE +++ b/chrome/MAJOR_BRANCH_DATE
@@ -1 +1 @@ -MAJOR_BRANCH_DATE=2024-11-12 +MAJOR_BRANCH_DATE=2025-01-07
diff --git a/chrome/VERSION b/chrome/VERSION index 790e795..781342a 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ -MAJOR=133 +MAJOR=134 MINOR=0 -BUILD=6943 +BUILD=6944 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ActionConfirmationManager.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ActionConfirmationManager.java index 60040d1..889c0a6 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ActionConfirmationManager.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/ActionConfirmationManager.java
@@ -89,7 +89,7 @@ public void processDeleteSharedGroupAttempt(String groupTitle, Callback<Integer> onResult) { processGroupNameAction( DELETE_SHARED_GROUP_USER_ACTION, - R.string.delete_tab_group_dialog_title, + R.string.delete_shared_tab_group_dialog_title, R.string.delete_shared_tab_group_description, groupTitle, R.string.delete_tab_group_menu_item, @@ -103,7 +103,7 @@ R.string.leave_tab_group_dialog_title, R.string.leave_tab_group_description, groupTitle, - R.string.leave_tab_group_menu_item, + R.string.keep_tab_group_dialog_leave_action, onResult); }
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd index e668001..c40ce80 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings.grd
@@ -717,17 +717,20 @@ <message name="IDS_DELETE_TAB_GROUP_MENU_ITEM" desc="Menu item text which will prompt a confirmation dialog to delete a tab group."> Delete </message> + <message name="IDS_DELETE_SHARED_TAB_GROUP_DIALOG_TITLE" desc="Title of a dialog asking if the user really wants to delete a tab group that is shared with other users."> + Delete group? + </message> <message name="IDS_DELETE_SHARED_TAB_GROUP_DESCRIPTION" desc="Menu item text which will prompt a confirmation dialog to delete a tab group that is shared with other users."> - Everyone will immediately lose access to the <ph name="GROUP_NAME">%1$s<ex>Vacation</ex></ph> tab group, and it will be deleted from all devices + Everyone will immediately lose access to the "<ph name="GROUP_NAME">%1$s<ex>Vacation</ex></ph>" tab group, and it will be deleted from all devices </message> <message name="IDS_LEAVE_TAB_GROUP_MENU_ITEM" desc="Menu item text for an item which will leave a group the user does not own."> Leave </message> <message name="IDS_LEAVE_TAB_GROUP_DIALOG_TITLE" desc="Title of a dialog asking if the user really wants to leave a shared tab group."> - Leave tab group? + Leave group? </message> <message name="IDS_LEAVE_TAB_GROUP_DESCRIPTION" desc="Description of the action of leaving a shared tab group, shown in a confirmation dialog."> - You’ll immediately lose access to the <ph name="GROUP_NAME">%1$s<ex>Vacation</ex></ph> tab group + You’ll immediately lose access to the "<ph name="GROUP_NAME">%1$s<ex>Vacation</ex></ph>" tab group, and it will be deleted from all your devices </message> <message name="IDS_UNGROUP_TAB_GROUP_DIALOG_TITLE" desc="Title of a dialog asking if the user really wants to ungroup all tabs in a group."> Ungroup tab group? @@ -783,13 +786,13 @@ Close tab and delete group? </message> <message name="IDS_KEEP_TAB_GROUP_DIALOG_TITLE" desc="Title of a dialog asking the user if they want to keep the tab group."> - Keep tab group? + Keep group? </message> <message name="IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_OWNER" desc="Main text content of a dialog asking the owner of a shared group if they want to keep it. The is a newline character to force formatting."> Keep this group to add tabs later, or delete it if you no longer need it. If you delete it, everyone will immediately lose access to the "<ph name="TITLE_OF_GROUP">%1$s<ex>Shopping cart</ex></ph>" tab group, and it will be deleted from all devices. </message> - <message name="IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER" desc="Main text content of a dialog asking a member of a shared group if they want to keep it or leave. The is a newline character to force formatting."> - Keep this group to add tabs later, or leave. If you leave, you will immediately lose access to the "<ph name="TITLE_OF_GROUP">%1$s<ex>Shopping cart</ex></ph>" tab group. + <message name="IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER" desc="Main text content of a dialog asking a member of a shared group if they want to keep it or leave."> + Keep this group to add tabs later, or leave it if you no longer want access to it </message> <message name="IDS_KEEP_TAB_GROUP_DIALOG_KEEP_ACTION" desc="Action button to keep the tab group in the keep group dialog."> Keep group
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DESCRIPTION.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DESCRIPTION.png.sha1 index ffb976f9..b861220 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DESCRIPTION.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DESCRIPTION.png.sha1
@@ -1 +1 @@ -5772a9230f916f30dbfe0b34a6ee84520c49e2a6 \ No newline at end of file +8ad16e9b3064ff2a4e97fba89f5be22ffbbce02e \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DIALOG_TITLE.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DIALOG_TITLE.png.sha1 new file mode 100644 index 0000000..b861220 --- /dev/null +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_DELETE_SHARED_TAB_GROUP_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@ +8ad16e9b3064ff2a4e97fba89f5be22ffbbce02e \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER.png.sha1 index e265d8aa..b3e0738 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_MEMBER.png.sha1
@@ -1 +1 @@ -aea67e6e1236f6ccc3c6332a3e866f3d792730ec \ No newline at end of file +421856f5207dc9b8d312250fc785336092d93b46 \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_OWNER.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_OWNER.png.sha1 index 5187e47c..647eb42 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_OWNER.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_DESCRIPTION_OWNER.png.sha1
@@ -1 +1 @@ -fab9e33ec17da93aade0857e3a325b9448165647 \ No newline at end of file +3c7d3567e8c08b8a9ca82f3fd4f244e1591d81d2 \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_TITLE.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_TITLE.png.sha1 index 5187e47c..647eb42 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_TITLE.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_KEEP_TAB_GROUP_DIALOG_TITLE.png.sha1
@@ -1 +1 @@ -fab9e33ec17da93aade0857e3a325b9448165647 \ No newline at end of file +3c7d3567e8c08b8a9ca82f3fd4f244e1591d81d2 \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DESCRIPTION.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DESCRIPTION.png.sha1 index 4e716e8..720c952 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DESCRIPTION.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DESCRIPTION.png.sha1
@@ -1 +1 @@ -4cd77b60f5ddc9f85fab8392a51ad1301a603413 \ No newline at end of file +c151069a354e39019ed721c1a7e2aa6d817f97da \ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DIALOG_TITLE.png.sha1 b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DIALOG_TITLE.png.sha1 index 4e716e8..720c952 100644 --- a/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DIALOG_TITLE.png.sha1 +++ b/chrome/android/features/tab_ui/java/strings/android_chrome_tab_ui_strings_grd/IDS_LEAVE_TAB_GROUP_DIALOG_TITLE.png.sha1
@@ -1 +1 @@ -4cd77b60f5ddc9f85fab8392a51ad1301a603413 \ No newline at end of file +c151069a354e39019ed721c1a7e2aa6d817f97da \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSource.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSource.java index e0317e1..edcedfc5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSource.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSource.java
@@ -325,7 +325,8 @@ private boolean onDragStart(float xPx, float yPx, ClipDescription clipDescription) { if (clipDescription == null - || clipDescription.filterMimeTypes(MimeTypeUtils.CHROME_MIMETYPE_TAB) == null) { + || clipDescription.filterMimeTypes(MimeTypeUtils.CHROME_MIMETYPE_TAB) == null + || DragDropGlobalState.getState(sDragTrackerToken) == null) { return false; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabInputMethodWrapper.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabInputMethodWrapper.java index 3ece6a5..55860a6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabInputMethodWrapper.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/partialcustomtab/PartialCustomTabInputMethodWrapper.java
@@ -11,7 +11,6 @@ import android.view.inputmethod.CursorAnchorInfo; import org.chromium.base.Callback; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ImeAdapter; import org.chromium.content_public.browser.InputMethodManagerWrapper; import org.chromium.ui.base.WindowAndroid; @@ -70,7 +69,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { mWrapper.onWindowAndroidChanged(newWindowAndroid); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabGestureStateListener.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabGestureStateListener.java index 634a28d2..782a47c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabGestureStateListener.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabGestureStateListener.java
@@ -4,8 +4,6 @@ package org.chromium.chrome.browser.tab; -import static org.chromium.build.NullUtil.assumeNonNull; - import org.chromium.base.ObserverList.RewindableIterator; import org.chromium.content_public.browser.GestureListenerManager; import org.chromium.content_public.browser.GestureStateListener; @@ -45,7 +43,6 @@ @Override public void initWebContents(WebContents webContents) { GestureListenerManager manager = GestureListenerManager.fromWebContents(webContents); - assumeNonNull(manager); mGestureListener = new GestureStateListener() { @Override @@ -89,7 +86,7 @@ } private void onScrollingStateChanged() { - boolean scrolling = manager.isScrollInProgress(); + boolean scrolling = manager != null ? manager.isScrollInProgress() : false; RewindableIterator<TabObserver> observers = ((TabImpl) mTab).getTabObservers(); while (observers.hasNext()) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java index 7f3b179..3baf301 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
@@ -94,7 +94,7 @@ @MediumTest @Feature("RenderTest") public void testAccountManagementFragmentView() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndSignInForTesting(); mSettingsActivityTestRule.startSettingsActivity(); View view = mSettingsActivityTestRule.getFragment().getView(); onViewWaiting(allOf(is(view), isDisplayed())); @@ -105,8 +105,8 @@ @MediumTest @Feature("RenderTest") public void testSignedInAccountShownOnTop() throws Exception { - mSyncTestRule.addAccount("testSecondary@gmail.com"); - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.getSigninTestRule().addAccount(TestAccounts.ACCOUNT1); + mSyncTestRule.getSigninTestRule().addAccountThenSignin(TestAccounts.ACCOUNT2); mSettingsActivityTestRule.startSettingsActivity(); View view = mSettingsActivityTestRule.getFragment().getView(); onViewWaiting(allOf(is(view), isDisplayed())); @@ -243,18 +243,6 @@ @Test @SmallTest - public void showSignOutDialogBeforeSigningUserOut() { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); - mSettingsActivityTestRule.startSettingsActivity(); - - onView(withText(R.string.sign_out_and_turn_off_sync)).perform(click()); - onView(withText(R.string.turn_off_sync_and_signout_title)) - .inRoot(isDialog()) - .check(matches(isDisplayed())); - } - - @Test - @SmallTest public void testIdentityErrorCardNotShown() { // Fake an identity error. overrideSyncService().setRequiresClientUpgrade(true);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ExplicitPassphrasePlatformClientTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ExplicitPassphrasePlatformClientTest.java index 9848a585..83ec7b1 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ExplicitPassphrasePlatformClientTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/ExplicitPassphrasePlatformClientTest.java
@@ -22,6 +22,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DoNotBatch; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; @@ -56,9 +57,10 @@ @Test @MediumTest + @DisabledTest(message = "crbug.com/386744084") public void testInvokeIfCorrectDecryptionPassphraseSet() throws Exception { mSyncTestRule.getFakeServerHelper().setCustomPassphraseNigori("passphrase"); - CoreAccountInfo account = mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + CoreAccountInfo account = mSyncTestRule.setUpAccountAndSignInForTesting(); SyncService syncService = mSyncTestRule.getSyncService(); CriteriaHelper.pollUiThread(() -> syncService.isPassphraseRequiredForPreferredDataTypes()); @@ -72,9 +74,10 @@ // wrong. @Test @MediumTest + @DisabledTest(message = "crbug.com/386744084") public void testInvokeIfWrongDecryptionPassphraseSet() throws Exception { mSyncTestRule.getFakeServerHelper().setCustomPassphraseNigori("correctPassphrase"); - CoreAccountInfo account = mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + CoreAccountInfo account = mSyncTestRule.setUpAccountAndSignInForTesting(); SyncService syncService = mSyncTestRule.getSyncService(); CriteriaHelper.pollUiThread(() -> syncService.isPassphraseRequiredForPreferredDataTypes());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/OpenTabsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/OpenTabsTest.java index 7be5394e..1a372da 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/OpenTabsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/OpenTabsTest.java
@@ -93,7 +93,7 @@ @Before public void setUp() throws Exception { - mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndEnableHistorySync(); mClientName = getClientName(); mSessionTagCounter = 0; }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java index 1f85a6f..946d485 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/UkmTest.java
@@ -19,7 +19,6 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; -import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.ui.base.PageTransition; @@ -85,7 +84,7 @@ Assert.assertFalse("UKM Enabled:", isUkmEnabled(normalTab)); // Finally, sync and UKM is enabled. - CoreAccountInfo account = mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndEnableHistorySync(); Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab)); } @@ -102,7 +101,7 @@ () -> UmaSessionStats.updateMetricsAndCrashReportingForTesting(true)); // Enable a Syncing account. - CoreAccountInfo account = mSyncTestRule.setUpAccountAndEnableSyncForTesting(); + mSyncTestRule.setUpAccountAndEnableHistorySync(); Tab normalTab = mSyncTestRule.getActivity().getActivityTab(); Assert.assertTrue("UKM Enabled:", isUkmEnabled(normalTab));
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSourceTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSourceTest.java index ebb28e1..4321af21 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSourceTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/compositor/overlays/strip/TabDragSourceTest.java
@@ -1183,6 +1183,19 @@ mSourceInstance.onDrag(mTabsToolbarView, event)); } + /** + * Tests fix for crash reported in crbug.com/379842187 when dropping tabs from a different + * channel. + */ + @Test + public void test_onDrag_tabFromDifferentChannel() { + assertFalse( + "#onDragStart should return false when no global tab state exists.", + mSourceInstance.onDrag( + mTabsToolbarView, + mockDragEvent(DragEvent.ACTION_DRAG_STARTED, POS_X, mPosY))); + } + private void invokeDropInDestinationStrip(boolean dragEndRes) { new DragEventInvoker() .dragExit(mSourceInstance)
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index 4381378..e80694bf 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -1181,7 +1181,7 @@ Sign out of Chromium? </message> <message name="IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY" desc="This is the subtitle of a confirmation dialog that asks the user to confirm that they want to sign out of Chromium. It appears when the user opens the Chromium Profile Menu and chooses 'Sign out of Chromium'. This subtitle is after the 'Sign out of Chromium?' string. The tone should be calm, because we want to explain to the user that their data is saved; however, we want to set expectations by clarifying that the data will be removed from the device. This string provides a path to resolution because it explains how the user can see their data again (by signing back in)."> - Your passwords and other Chromium data are saved in your Google Account, and will be removed from this device. To use them in the future, sign back in to Chromium. + Your passwords, payment methods, and addresses that you saved in your Google Account will be removed from this device. To use them again in Chromium, sign back in. </message> <message name="IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_VERIFY_BODY" desc="This is the subtitle of an error message dialog that appears when the user opens the Chromium Profile Menu and chooses 'Sign out of Chromium'. The error message appears when the user has saved some data (like a password or payment method) to Chromium, but Chromium wasn't able to save the data to the user's Google Account due to a sign-in error; but, the data has been saved locally to Chromium. This subtitle is after the 'Some data isn’t saved yet' string. The tone should be cautionary, because we want to explain to the user that their data is not saved to their Google Account. This string provides a path to resolution because it explains how the user can properly save their data before they sign out of Chromium."> Chromium needs to verify it’s you before some data can be saved in your Google Account and used on all your devices. If you sign out, this data will stay on this device. @@ -2074,20 +2074,6 @@ Your organization can see and manage browsing data, such as your bookmarks, history, and passwords. It can't see browsing data in personal Chromium profiles. </message> <!-- Profile Picker --> - <if expr="chromeos_lacros"> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS" desc="Profile picker main view subtitle"> - With Chromium profiles you can separate all of your Chromium stuff. This makes it easier to split between work and fun. - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS" desc="Profile picker profile type choice subtitle"> - To access your Chromium browser stuff across all your devices, sign in, then turn on sync - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE" desc="Profile picker, account selection screen subtitle"> - Sign in to Chromium - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST" desc="Profile picker, account selection screen subtitle"> - Sign in to Chromium. If you want to sign in an account one-time only, you can <ph name="GUEST_LINK_BEGIN"><a id="guestModeLink" href="#"></ph>use the device as guest<ph name="GUEST_LINK_END"></a></ph>. - </message> - </if> <if expr="not chromeos_lacros"> <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> Welcome to Chromium profiles
diff --git a/chrome/app/chromium_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 b/chrome/app/chromium_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 index 59837146..e096294 100644 --- a/chrome/app/chromium_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 +++ b/chrome/app/chromium_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1
@@ -1 +1 @@ -83db6d472afe3acde9041a72fe704615233061b9 \ No newline at end of file +6994c2bb17362f84fba3a8fe5b05198621ec4d2a \ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 deleted file mode 100644 index 1a9802f..0000000 --- a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -016ac9b424db1570fa8e7c6549aca5a059564d88 \ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 deleted file mode 100644 index 3ca7669..0000000 --- a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -484512579029384cb85df01bacfb97f8cfe31e37 \ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 deleted file mode 100644 index ae3a589..0000000 --- a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa5fb0a2593865f41d36b11029a4be79a85ca3f2 \ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 deleted file mode 100644 index ec52cc0..0000000 --- a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8bdada0527b543f262d0336322e5f1580ed8e15c \ No newline at end of file
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index 5571529..ebe2e35 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -10662,9 +10662,6 @@ <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Save button text for password manager"> Save </message> - <message name="IDS_PASSWORD_MANAGER_SAVE_BUBBLE_OPT_IN_BUTTON" desc="Text for action button in the save bubble that leads the user to opt in to the account-scoped password storage."> - Next - </message> <message name="IDS_PASSWORD_MANAGER_MOVE_BUBBLE_CANCEL_BUTTON" desc="Text for the cancel button in the password manager move bubble."> No thanks </message> @@ -13877,11 +13874,6 @@ <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE" desc="This string appears as a subheading on a screen, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting."> Back up your stuff and use it on any device </message> - <if expr="chromeos_lacros"> - <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS" desc="This string appears as a subheading on a screen, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome browser data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting. Please keep translations consistent with TC 7137558043921529662 (Windows, Mac, Linux) and TC 3833960754549650885 (iOS)."> - Back up your browser stuff and use it on any device - </message> - </if> <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_SIGNIN_INTERCEPT_V2" desc="This string appears as a subheading on a pop-up dialog, and it asks users if they want to turn on sync. This string explains to users that they can back up their Chrome data and use it on all their computers, phones, and other devices; a user's Chrome data includes their bookmarks, passwords, history, settings, and more. If there is no natural translation for the word 'stuff' in your language, the word can be translated as 'data' or similar. Maintain the level of formality that your language generally uses in the Chrome app. The tone should be informative and inviting."> Turn on sync to back up your stuff and use it on any device </message> @@ -13904,12 +13896,6 @@ You can always choose what to sync in settings. Google may personalize Search and other services based on your history. </message> - <if expr="chromeos_lacros"> - <message name="IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC_WITH_ASH_SETTINGS_LINK" desc="This string appears in the footer on a screen that asks users if they want to turn on browser sync. It lets the user know that browser data is controlled in Chrome settings. If Apps data type sync is enabled, it lets the user know that app sync is controlled in ChromeOS device settings. We use the same message IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC at the end."> - You can always choose what browser data to sync in Chrome settings. In <ph name="LINK_BEGIN"><a href='#'></ph>device settings<ph name="LINK_END"></a></ph>, you can control sync for web apps installed from Chrome browser. Google may personalize Search and other services based on your history. - </message> - </if> - <!-- Sync Confirmation section of the Signin Intercept first run experience flow --> <message name="IDS_SYNC_CONFIRMATION_WELCOME_TITLE_SIGNIN_INTERCEPT" desc="This string appears as a heading on a pop-up dialog that shows up after users create a new profile. It welcomes users. The tone should be friendly and inviting."> Welcome, <ph name="USERNAME">$1<ex>Bob</ex></ph>
diff --git a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_BUBBLE_OPT_IN_BUTTON.png.sha1 b/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_BUBBLE_OPT_IN_BUTTON.png.sha1 deleted file mode 100644 index d40b5c86..0000000 --- a/chrome/app/generated_resources_grd/IDS_PASSWORD_MANAGER_SAVE_BUBBLE_OPT_IN_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e7d99b469be750abbe29eb5d63c326fb0f037d23 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC_WITH_ASH_SETTINGS_LINK.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC_WITH_ASH_SETTINGS_LINK.png.sha1 deleted file mode 100644 index 1fd7875..0000000 --- a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC_WITH_ASH_SETTINGS_LINK.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5f47f81348b3b595b3b22a1f7630d3e4fbf461a1 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1 b/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1 deleted file mode 100644 index 37558a88..0000000 --- a/chrome/app/generated_resources_grd/IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -1a41249452914cb2109f7b289fa512f289f2fcce \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index c9d9ba2d..9520d89 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -1135,7 +1135,7 @@ Sign out of Chrome? </message> <message name="IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY" desc="This is the subtitle of a confirmation dialog that asks the user to confirm that they want to sign out of Chrome. It appears when the user opens the Chrome Profile Menu and chooses 'Sign out of Chrome'. This subtitle is after the 'Sign out of Chrome?' string. The tone should be calm, because we want to explain to the user that their data is saved; however, we want to set expectations by clarifying that the data will be removed from the device. This string provides a path to resolution because it explains how the user can see their data again (by signing back in)."> - Your passwords and other Chrome data are saved in your Google Account, and will be removed from this device. To use them in the future, sign back in to Chrome. + Your passwords, payment methods, and addresses that you saved in your Google Account will be removed from this device. To use them again in Chrome, sign back in. </message> <message name="IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_VERIFY_BODY" desc="This is the subtitle of an error message dialog that appears when the user opens the Chrome Profile Menu and chooses 'Sign out of Chrome'. The error message appears when the user has saved some data (like a password or payment method) to Chrome, but Chrome wasn't able to save the data to the user's Google Account due to a sign-in error; but, the data has been saved locally to Chrome. This subtitle is after the 'Some data isn’t saved yet' string. The tone should be cautionary, because we want to explain to the user that their data is not saved to their Google Account. This string provides a path to resolution because it explains how the user can properly save their data before they sign out of Chrome."> Chrome needs to verify it’s you before some data can be saved in your Google Account and used on all your devices. If you sign out, this data will stay on this device. @@ -2255,20 +2255,6 @@ Your organization can see and manage browsing data, such as your bookmarks, history, and passwords. It can't see browsing data in personal Chrome profiles. </message> <!-- Profile Picker --> - <if expr="chromeos_lacros"> - <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS" desc="Profile picker main view subtitle"> - With Chrome profiles you can separate all of your Chrome stuff. This makes it easier to split between work and fun. - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS" desc="Profile picker profile type choice subtitle"> - To access your Chrome browser stuff across all your devices, sign in, then turn on sync - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE" desc="Profile picker, account selection screen subtitle"> - Sign in to Chrome - </message> - <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST" desc="Profile picker, account selection screen subtitle"> - Sign in to Chrome. If you want to sign in an account one-time only, you can <ph name="GUEST_LINK_BEGIN"><a id="guestModeLink" href="#"></ph>use the device as guest<ph name="GUEST_LINK_END"></a></ph>. - </message> - </if> <if expr="not chromeos_lacros"> <message name="IDS_PROFILE_PICKER_MAIN_VIEW_TITLE" desc="Profile picker main view title"> Welcome to Chrome profiles
diff --git a/chrome/app/google_chrome_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 index 59837146..e096294 100644 --- a/chrome/app/google_chrome_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1 +++ b/chrome/app/google_chrome_strings_grd/IDS_CHROME_SIGNOUT_CONFIRMATION_PROMPT_NO_UNSYNCED_BODY.png.sha1
@@ -1 +1 @@ -83db6d472afe3acde9041a72fe704615233061b9 \ No newline at end of file +6994c2bb17362f84fba3a8fe5b05198621ec4d2a \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 deleted file mode 100644 index 1a9802f..0000000 --- a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -016ac9b424db1570fa8e7c6549aca5a059564d88 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 deleted file mode 100644 index 3ca7669..0000000 --- a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -484512579029384cb85df01bacfb97f8cfe31e37 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 deleted file mode 100644 index ae3a589..0000000 --- a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -fa5fb0a2593865f41d36b11029a4be79a85ca3f2 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 deleted file mode 100644 index ec52cc0..0000000 --- a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8bdada0527b543f262d0336322e5f1580ed8e15c \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 968f2f9..cc5f4b7 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -4847,7 +4847,6 @@ "//ash/components/arc/intent_helper", "//ash/components/arc/intent_helper:arc_intent_helper_constants", "//ash/components/arc/mojom", - "//ash/components/kcer", "//ash/constants", "//ash/public/cpp/external_arc", "//ash/webui/annotator", @@ -5291,6 +5290,7 @@ "//chromeos/ash/components/geolocation", "//chromeos/ash/components/growth:config_provider", "//chromeos/ash/components/install_attributes", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/kiosk/vision:vision_prefs", "//chromeos/ash/components/kiosk/vision/webui", "//chromeos/ash/components/local_search_service",
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS index 6daf49c..f5345987 100644 --- a/chrome/browser/DEPS +++ b/chrome/browser/DEPS
@@ -656,9 +656,9 @@ "+components/services/storage/shared_storage/shared_storage_manager.h", ], "certificate_manager_model.cc": [ - "+ash/components/kcer", + "+chromeos/ash/components/kcer", ], "certificate_manager_model_unittest.cc": [ - "+ash/components/kcer/extra_instances.h", + "+chromeos/ash/components/kcer/extra_instances.h", ], }
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 844165cb..7f00e707 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3630,30 +3630,15 @@ #if BUILDFLAG(IS_ANDROID) -const char kReplaceSyncPromosWithSignInPromosFeatures[] = - "ReplaceSyncPromosWithSignInPromos," - "SyncEnableContactInfoDataTypeInTransportMode," - "SyncEnableContactInfoDataTypeForCustomPassphraseUsers," - "SyncEnableWalletMetadataInTransportMode," - "SyncEnableWalletOfferInTransportMode," - "EnableBatchUploadFromSettings"; - -// The ones above + UnoPhase2FollowUp. +// UnoPhase2FollowUp flags. const char kFastFollowFeatures[] = - "ReplaceSyncPromosWithSignInPromos," - "SyncEnableContactInfoDataTypeInTransportMode," - "SyncEnableContactInfoDataTypeForCustomPassphraseUsers," - "SyncEnableWalletMetadataInTransportMode," - "SyncEnableWalletOfferInTransportMode," - "EnableBatchUploadFromSettings," - "UnoPhase2FollowUp"; + "UnoPhase2FollowUp," + "UseHostedDomainForManagementCheckOnSignin"; const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosChoices[] = { {"Default", "", ""}, - {"Disabled", "disable-features", - kReplaceSyncPromosWithSignInPromosFeatures}, - {"Enabled", "enable-features", kReplaceSyncPromosWithSignInPromosFeatures}, - {"Enabled with follow-ups", "enable-features", kFastFollowFeatures}, + {"Follow-ups disabled", "disable-features", kFastFollowFeatures}, + {"Follow-ups enabled", "enable-features", kFastFollowFeatures}, }; #endif // BUILDFLAG(IS_ANDROID) @@ -10487,18 +10472,6 @@ flag_descriptions::kNotificationWidthIncreaseDescription, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kNotificationWidthIncrease)}, - {"sparky", flag_descriptions::kSparkyName, - flag_descriptions::kSparkyDescription, kOsCrOS, - FEATURE_VALUE_TYPE(chromeos::features::kSparky)}, - - {"sparky-feature-key", flag_descriptions::kSparkyFeatureKeyName, - flag_descriptions::kSparkyFeatureKeyDescription, kOsCrOS, - STRING_VALUE_TYPE(ash::switches::kSparkyFeatureKey, "")}, - - {"sparky-server-url", flag_descriptions::kSparkyServerUrlName, - flag_descriptions::kSparkyServerUrlDescription, kOsCrOS, - STRING_VALUE_TYPE(ash::switches::kSparkyServerUrl, "")}, - {"pompano", flag_descriptions::kPompanoName, flag_descriptions::kPompanoDescritpion, kOsCrOS, FEATURE_VALUE_TYPE(chromeos::features::kPompano)}, @@ -10973,6 +10946,13 @@ flag_descriptions::kStorageAccessHeadersDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kStorageAccessHeaders)}, + {"storage-access-api-follows-same-origin-policy", + flag_descriptions::kStorageAccessApiFollowsSameOriginPolicyName, + flag_descriptions::kStorageAccessApiFollowsSameOriginPolicyDescription, + kOsAll, + FEATURE_VALUE_TYPE( + net::features::kStorageAccessApiFollowsSameOriginPolicy)}, + {"canvas-2d-hibernation", flag_descriptions::kCanvasHibernationName, flag_descriptions::kCanvasHibernationDescription, kOsAll, FEATURE_VALUE_TYPE(blink::features::kCanvas2DHibernation)},
diff --git a/chrome/browser/ai/ai_language_model.cc b/chrome/browser/ai/ai_language_model.cc index 7881008..01c34c4c 100644 --- a/chrome/browser/ai/ai_language_model.cc +++ b/chrome/browser/ai/ai_language_model.cc
@@ -142,16 +142,36 @@ AILanguageModel::Context::~Context() = default; -bool AILanguageModel::Context::AddContextItem(ContextItem context_item) { - bool is_overflow = false; - context_items_.emplace_back(context_item); - current_tokens_ += context_item.tokens; - while (current_tokens_ > max_tokens_) { - is_overflow = true; +AILanguageModel::Context::SpaceReservationResult +AILanguageModel::Context::ReserveSpace(uint32_t num_tokens) { + // If there is no enough space to hold the `initial_prompts_` as well as the + // newly requested `num_tokens`, return `kInsufficientSpace`. + if (num_tokens + initial_prompts_.tokens > max_tokens_) { + return AILanguageModel::Context::SpaceReservationResult::kInsufficientSpace; + } + + if (current_tokens_ + num_tokens <= max_tokens_) { + return AILanguageModel::Context::SpaceReservationResult::kSufficientSpace; + } + + CHECK(!context_items_.empty()); + do { current_tokens_ -= context_items_.begin()->tokens; context_items_.pop_front(); + } while (current_tokens_ + num_tokens > max_tokens_); + + return AILanguageModel::Context::SpaceReservationResult::kSpaceMadeAvailable; +} + +AILanguageModel::Context::SpaceReservationResult +AILanguageModel::Context::AddContextItem(ContextItem context_item) { + auto result = ReserveSpace(context_item.tokens); + if (result != SpaceReservationResult::kInsufficientSpace) { + context_items_.emplace_back(context_item); + current_tokens_ += context_item.tokens; } - return is_overflow; + + return result; } std::unique_ptr<google::protobuf::MessageLite> @@ -276,15 +296,17 @@ // If the on device model service fails to get the size, it will be 0. // TODO(crbug.com/351935691): make sure the error is explicitly returned and // handled accordingly. - bool did_overflow = false; if (size) { auto item = Context::ContextItem(); item.tokens = size; item.prompts = history_request.prompt_history(); - did_overflow = context_->AddContextItem(std::move(item)); + if (context_->AddContextItem(std::move(item)) == + Context::SpaceReservationResult::kSpaceMadeAvailable) { + responder->OnContextOverflow(); + } } - responder->OnCompletion(blink::mojom::ModelExecutionContextInfo::New( - context_->current_tokens(), did_overflow)); + responder->OnCompletion( + blink::mojom::ModelExecutionContextInfo::New(context_->current_tokens())); } void AILanguageModel::ModelExecutionCallback( @@ -294,6 +316,8 @@ blink::mojom::ModelStreamingResponder* responder = responder_set_.Get(responder_id); if (!responder) { + // It might be possible for the responder mojo connection to be closed + // before this callback is invoked, in this case, we can't do anything. return; } @@ -341,6 +365,36 @@ } } +void AILanguageModel::PromptGetInputSizeCompletion( + mojo::RemoteSetElementId responder_id, + PromptApiRequest request, + uint32_t number_of_tokens) { + blink::mojom::ModelStreamingResponder* responder = + responder_set_.Get(responder_id); + if (!responder) { + // It might be possible for the responder mojo connection to be closed + // before this callback is invoked, in this case, we can't do anything. + return; + } + + auto result = context_->ReserveSpace(number_of_tokens); + if (result == Context::SpaceReservationResult::kInsufficientSpace) { + responder->OnError(blink::mojom::ModelStreamingResponseStatus:: + kErrorPromptRequestTooLarge); + return; + } + + if (result == Context::SpaceReservationResult::kSpaceMadeAvailable) { + responder->OnContextOverflow(); + } + + session_->ExecuteModel( + *context_->MaybeFormatRequest(request), + base::BindRepeating(&AILanguageModel::ModelExecutionCallback, + weak_ptr_factory_.GetWeakPtr(), request, + responder_id)); +} + void AILanguageModel::Prompt( const std::string& input, mojo::PendingRemote<blink::mojom::ModelStreamingResponder> @@ -357,18 +411,18 @@ session_->AddContext(*context_->MakeRequest()); } + // Clear the response from the previous execution. + current_response_ = ""; mojo::RemoteSetElementId responder_id = responder_set_.Add(std::move(pending_responder)); PromptApiRequest request; *request.add_current_prompts() = MakePrompt(PromptApiRole::PROMPT_API_ROLE_USER, input); - // Clear the response from the previous execution. - current_response_ = ""; - session_->ExecuteModel( + + session_->GetExecutionInputSizeInTokens( *context_->MaybeFormatRequest(request), - base::BindRepeating(&AILanguageModel::ModelExecutionCallback, - weak_ptr_factory_.GetWeakPtr(), request, - responder_id)); + base::BindOnce(&AILanguageModel::PromptGetInputSizeCompletion, + weak_ptr_factory_.GetWeakPtr(), responder_id, request)); } void AILanguageModel::Fork(
diff --git a/chrome/browser/ai/ai_language_model.h b/chrome/browser/ai/ai_language_model.h index 80c43942..0960427 100644 --- a/chrome/browser/ai/ai_language_model.h +++ b/chrome/browser/ai/ai_language_model.h
@@ -71,11 +71,26 @@ Context(const Context&); ~Context(); + // The status of the result returned from `ReserveSpace()`. + enum class SpaceReservationResult { + // There remaining space is enough for the required tokens. + kSufficientSpace = 0, + // There remaining space is not enough for the required tokens, but after + // evicting some of the oldest `ContextItem`s, it has enough space now. + kSpaceMadeAvailable, + // Even after evicting all the `ContextItem`s, it's not possible to make + // enough space. In this case, no eviction will happen. + kInsufficientSpace + }; + + // Make sure the context has at least `number_of_tokens` available, if there + // is no enough space, the oldest `ContextItem`s will be evicted. + SpaceReservationResult ReserveSpace(uint32_t num_tokens); + // Insert a new context item, this may evict some oldest items to ensure the - // total number of tokens in the context is below the limit. - // It returns whether the context overflows and some existing item gets - // evicted. - bool AddContextItem(ContextItem context_item); + // total number of tokens in the context is below the limit. It returns the + // result from the space reservation. + SpaceReservationResult AddContextItem(ContextItem context_item); // Combines the initial prompts and all current items into a request. // The type of request produced is either PromptApiRequest or StringValue, @@ -142,6 +157,9 @@ mojo::PendingRemote<blink::mojom::AILanguageModel> TakePendingRemote(); private: + void PromptGetInputSizeCompletion(mojo::RemoteSetElementId responder_id, + PromptApiRequest request, + uint32_t number_of_tokens); void ModelExecutionCallback( const PromptApiRequest& input, mojo::RemoteSetElementId responder_id,
diff --git a/chrome/browser/ai/ai_language_model_unittest.cc b/chrome/browser/ai/ai_language_model_unittest.cc index ead7393..5b90e4ac 100644 --- a/chrome/browser/ai/ai_language_model_unittest.cc +++ b/chrome/browser/ai/ai_language_model_unittest.cc
@@ -666,7 +666,8 @@ // Tests `GetContextString()` and `HasContextItem()` when some items are added // to the context. TEST_P(AILanguageModelContextTest, TestContextOperation_NonEmpty) { - context_.AddContextItem(SimpleContextItem("test", 1u)); + EXPECT_EQ(context_.AddContextItem(SimpleContextItem("test", 1u)), + AILanguageModel::Context::SpaceReservationResult::kSufficientSpace); EXPECT_EQ(GetContextString(context_), GetInitialPromptsPrefix() + "test\n"); EXPECT_TRUE(context_.HasContextItem()); @@ -678,14 +679,17 @@ // Tests `GetContextString()` and `HasContextItem()` when the items overflow. TEST_P(AILanguageModelContextTest, TestContextOperation_Overflow) { - context_.AddContextItem(SimpleContextItem("test", 1u)); + EXPECT_EQ(context_.AddContextItem(SimpleContextItem("test", 1u)), + AILanguageModel::Context::SpaceReservationResult::kSufficientSpace); EXPECT_EQ(GetContextString(context_), GetInitialPromptsPrefix() + "test\n"); EXPECT_TRUE(context_.HasContextItem()); // Since the total number of tokens will exceed `kTestMaxContextToken`, the // old item will be evicted. - context_.AddContextItem( - SimpleContextItem("test long token", GetMaxContextToken())); + EXPECT_EQ( + context_.AddContextItem( + SimpleContextItem("test long token", GetMaxContextToken())), + AILanguageModel::Context::SpaceReservationResult::kSpaceMadeAvailable); EXPECT_EQ(GetContextString(context_), GetInitialPromptsPrefix() + "test long token\n"); EXPECT_TRUE(context_.HasContextItem()); @@ -694,8 +698,10 @@ // Tests `GetContextString()` and `HasContextItem()` when the items overflow on // the first insertion. TEST_P(AILanguageModelContextTest, TestContextOperation_OverflowOnFirstItem) { - context_.AddContextItem( - SimpleContextItem("test very long token", GetMaxContextToken() + 1u)); + EXPECT_EQ( + context_.AddContextItem( + SimpleContextItem("test very long token", GetMaxContextToken() + 1u)), + AILanguageModel::Context::SpaceReservationResult::kInsufficientSpace); EXPECT_EQ(GetContextString(context_), GetInitialPromptsPrefix()); if (IsInitializedWithInitialPrompts()) { EXPECT_TRUE(context_.HasContextItem());
diff --git a/chrome/browser/ai/ai_summarizer_unittest.cc b/chrome/browser/ai/ai_summarizer_unittest.cc index 4eb22d7..e966802 100644 --- a/chrome/browser/ai/ai_summarizer_unittest.cc +++ b/chrome/browser/ai/ai_summarizer_unittest.cc
@@ -30,47 +30,6 @@ using optimization_guide::proto::SummarizerOutputLength; using optimization_guide::proto::SummarizerOutputType; -class MockStreamingResponder : public blink::mojom::ModelStreamingResponder { - public: - MockStreamingResponder() = default; - ~MockStreamingResponder() override = default; - MockStreamingResponder(const MockStreamingResponder&) = delete; - MockStreamingResponder& operator=(const MockStreamingResponder&) = delete; - - void OnStreaming(const std::string& text) override { - status_ = blink::mojom::ModelStreamingResponseStatus::kOngoing; - result_ += text; - } - - void OnError(blink::mojom::ModelStreamingResponseStatus status) override { - status_ = status; - run_loop_.Quit(); - } - void OnCompletion( - blink::mojom::ModelExecutionContextInfoPtr context_info) override { - status_ = blink::mojom::ModelStreamingResponseStatus::kComplete; - run_loop_.Quit(); - } - - mojo::PendingRemote<blink::mojom::ModelStreamingResponder> - BindNewPipeAndPassRemote() { - return responder_.BindNewPipeAndPassRemote(); - } - - blink::mojom::ModelStreamingResponseStatus status() { return status_; } - - std::string result() { return result_; } - - void WaitForResponseComplete() { run_loop_.Run(); } - - private: - mojo::Receiver<blink::mojom::ModelStreamingResponder> responder_{this}; - - blink::mojom::ModelStreamingResponseStatus status_; - std::string result_; - base::RunLoop run_loop_; -}; - class AISummarizerUnitTest : public AITestUtils::AITestBase { public: AISummarizerUnitTest() = default; @@ -212,12 +171,22 @@ EXPECT_TRUE(summarizer); ASSERT_EQ(1u, GetAIManagerContextBoundObjectSetSize()); - MockStreamingResponder responder; - summarizer->Summarize("Test input", "", responder.BindNewPipeAndPassRemote()); - responder.WaitForResponseComplete(); - EXPECT_EQ(responder.status(), - blink::mojom::ModelStreamingResponseStatus::kComplete); - EXPECT_EQ(responder.result(), "Test output"); + AITestUtils::MockModelStreamingResponder mock_responder; + + base::RunLoop run_loop; + EXPECT_CALL(mock_responder, OnStreaming(_)) + .WillOnce(testing::Invoke( + [&](const std::string& text) { EXPECT_THAT(text, "Test output"); })); + + EXPECT_CALL(mock_responder, OnCompletion(_)) + .WillOnce(testing::Invoke( + [&](blink::mojom::ModelExecutionContextInfoPtr context_info) { + run_loop.Quit(); + })); + + summarizer->Summarize("Test input", "", + mock_responder.BindNewPipeAndPassRemote()); + run_loop.Run(); summarizer.reset(); ASSERT_TRUE(base::test::RunUntil( @@ -246,9 +215,9 @@ EXPECT_TRUE(summarizer); ASSERT_EQ(1u, GetAIManagerContextBoundObjectSetSize()); - MockStreamingResponder responder; + AITestUtils::MockModelStreamingResponder mock_responder; summarizer->Summarize("Test input", /*context=*/"", - responder.BindNewPipeAndPassRemote()); + mock_responder.BindNewPipeAndPassRemote()); summarizer.reset(); ASSERT_TRUE(base::test::RunUntil( @@ -282,13 +251,23 @@ ASSERT_EQ(1u, GetAIManagerContextBoundObjectSetSize()); { - MockStreamingResponder responder; + AITestUtils::MockModelStreamingResponder mock_responder; + + base::RunLoop run_loop; + EXPECT_CALL(mock_responder, OnStreaming(_)) + .WillOnce(testing::Invoke([&](const std::string& text) { + EXPECT_THAT(text, "Test output1"); + })); + + EXPECT_CALL(mock_responder, OnCompletion(_)) + .WillOnce(testing::Invoke( + [&](blink::mojom::ModelExecutionContextInfoPtr context_info) { + run_loop.Quit(); + })); + summarizer->Summarize("Test input1", /*context=*/"", - responder.BindNewPipeAndPassRemote()); - responder.WaitForResponseComplete(); - EXPECT_EQ(responder.status(), - blink::mojom::ModelStreamingResponseStatus::kComplete); - EXPECT_EQ(responder.result(), "Test output1"); + mock_responder.BindNewPipeAndPassRemote()); + run_loop.Run(); } EXPECT_CALL(session_, ExecuteModel(testing::_, testing::_)) @@ -299,13 +278,23 @@ SummarizerOutputLength::SUMMARIZER_OUTPUT_LENGTH_LONG, "Test output2")); { - MockStreamingResponder responder; + AITestUtils::MockModelStreamingResponder mock_responder; + + base::RunLoop run_loop; + EXPECT_CALL(mock_responder, OnStreaming(_)) + .WillOnce(testing::Invoke([&](const std::string& text) { + EXPECT_THAT(text, "Test output2"); + })); + + EXPECT_CALL(mock_responder, OnCompletion(_)) + .WillOnce(testing::Invoke( + [&](blink::mojom::ModelExecutionContextInfoPtr context_info) { + run_loop.Quit(); + })); + summarizer->Summarize("Test input2", "New context.", - responder.BindNewPipeAndPassRemote()); - responder.WaitForResponseComplete(); - EXPECT_EQ(responder.status(), - blink::mojom::ModelStreamingResponseStatus::kComplete); - EXPECT_EQ(responder.result(), "Test output2"); + mock_responder.BindNewPipeAndPassRemote()); + run_loop.Run(); } summarizer.reset();
diff --git a/chrome/browser/ai/ai_test_utils.h b/chrome/browser/ai/ai_test_utils.h index 3ef6679..27ce3a2 100644 --- a/chrome/browser/ai/ai_test_utils.h +++ b/chrome/browser/ai/ai_test_utils.h
@@ -41,6 +41,7 @@ OnCompletion, (blink::mojom::ModelExecutionContextInfoPtr context_info), (override)); + MOCK_METHOD(void, OnContextOverflow, (), (override)); private: mojo::Receiver<blink::mojom::ModelStreamingResponder> receiver_{this};
diff --git a/chrome/browser/apps/app_service/instance_registry_updater.cc b/chrome/browser/apps/app_service/instance_registry_updater.cc index b41fc6ac..f3f2d8b 100644 --- a/chrome/browser/apps/app_service/instance_registry_updater.cc +++ b/chrome/browser/apps/app_service/instance_registry_updater.cc
@@ -4,7 +4,6 @@ #include "chrome/browser/apps/app_service/instance_registry_updater.h" -#include "chrome/browser/ash/crosapi/browser_util.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" #include "components/services/app_service/public/cpp/instance_registry.h" @@ -97,8 +96,7 @@ void InstanceRegistryUpdater::OnWindowVisibilityChanged(aura::Window* window, bool visible) { - if (!crosapi::browser_util::IsLacrosWindow(window) && - !IsAshBrowserWindow(window)) { + if (!IsAshBrowserWindow(window)) { return; } for (const BrowserAppInstance* instance :
diff --git a/chrome/browser/apps/app_service/instance_registry_updater.h b/chrome/browser/apps/app_service/instance_registry_updater.h index 1831e89..b97d24c 100644 --- a/chrome/browser/apps/app_service/instance_registry_updater.h +++ b/chrome/browser/apps/app_service/instance_registry_updater.h
@@ -11,6 +11,8 @@ #include "chrome/browser/apps/browser_instance/browser_app_instance_observer.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_registry.h" #include "components/services/app_service/public/cpp/instance.h" +#include "ui/aura/env.h" +#include "ui/aura/env_observer.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h"
diff --git a/chrome/browser/apps/browser_instance/BUILD.gn b/chrome/browser/apps/browser_instance/BUILD.gn index 86725e5b..41fc2cad 100644 --- a/chrome/browser/apps/browser_instance/BUILD.gn +++ b/chrome/browser/apps/browser_instance/BUILD.gn
@@ -2,8 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/chromeos/ui_mode.gni") - assert(is_chromeos) source_set("browser_instance") { @@ -13,6 +11,8 @@ "browser_app_instance_map.h", "browser_app_instance_observer.cc", "browser_app_instance_observer.h", + "browser_app_instance_registry.cc", + "browser_app_instance_registry.h", "browser_app_instance_tracker.cc", "browser_app_instance_tracker.h", "web_contents_instance_id_utils.cc", @@ -26,9 +26,11 @@ "//chrome/browser/extensions", "//chrome/browser/profiles", "//chrome/browser/profiles:profile", + "//chrome/browser/ui/ash/shelf", "//chrome/browser/ui/tabs:tab_enums", "//chrome/browser/web_applications", "//components/app_constants", + "//components/exo", "//components/webapps/common", "//extensions/browser", "//extensions/common", @@ -36,28 +38,8 @@ "//ui/wm", ] - if (is_chromeos_ash) { - sources += [ - "browser_app_instance_registry.cc", - "browser_app_instance_registry.h", - ] - - # TODO(crbug.com/1402145): Remove circular dependencies. - allow_circular_includes_from = [ "//chrome/browser/ui/ash/shelf" ] - - deps += [ - "//chrome/browser/ash/crosapi:browser_util", - "//chrome/browser/ui/ash/shelf", - "//components/exo", - ] - } - - if (is_chromeos_lacros) { - sources += [ - "browser_app_instance_forwarder.cc", - "browser_app_instance_forwarder.h", - ] - } + # TODO(crbug.com/1402145): Remove circular dependencies. + allow_circular_includes_from = [ "//chrome/browser/ui/ash/shelf" ] } source_set("browser_tests") { @@ -65,25 +47,23 @@ defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] - if (is_chromeos_ash) { - sources = [ "browser_app_instance_tracker_browsertest.cc" ] + sources = [ "browser_app_instance_tracker_browsertest.cc" ] - deps = [ - "//base", - "//chrome/browser/apps/app_service", - "//chrome/browser/apps/browser_instance", - "//chrome/browser/ash/system_web_apps", - "//chrome/browser/ash/system_web_apps/apps", - "//chrome/browser/devtools:test_support", - "//chrome/browser/profiles", - "//chrome/browser/profiles:profile", - "//chrome/browser/ui/tabs:tab_enums", - "//chrome/browser/web_applications", - "//chrome/browser/web_applications:web_applications_test_support", - "//chrome/test:test_support", - "//components/webapps/common", - "//content/public/common", - "//extensions/common", - ] - } + deps = [ + "//base", + "//chrome/browser/apps/app_service", + "//chrome/browser/apps/browser_instance", + "//chrome/browser/ash/system_web_apps", + "//chrome/browser/ash/system_web_apps/apps", + "//chrome/browser/devtools:test_support", + "//chrome/browser/profiles", + "//chrome/browser/profiles:profile", + "//chrome/browser/ui/tabs:tab_enums", + "//chrome/browser/web_applications", + "//chrome/browser/web_applications:web_applications_test_support", + "//chrome/test:test_support", + "//components/webapps/common", + "//content/public/common", + "//extensions/common", + ] }
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance.cc b/chrome/browser/apps/browser_instance/browser_app_instance.cc index 1e9eb21..87e7746 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance.cc +++ b/chrome/browser/apps/browser_instance/browser_app_instance.cc
@@ -6,27 +6,17 @@ #include <utility> -#include "ui/wm/core/window_util.h" - -#if BUILDFLAG(IS_CHROMEOS_ASH) -#include "chrome/browser/ash/crosapi/browser_util.h" #include "components/app_constants/constants.h" #include "components/exo/shell_surface_util.h" -#elif BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/ui/lacros/window_utility.h" -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#include "ui/wm/core/window_util.h" namespace apps { namespace { std::string GetWindowUniqueId(aura::Window* window) { -#if BUILDFLAG(IS_CHROMEOS_ASH) const std::string* id = exo::GetShellApplicationId(window); return id ? *id : ""; -#elif BUILDFLAG(IS_CHROMEOS_LACROS) - return lacros_window_utility::GetRootWindowUniqueId(window); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) } } // namespace @@ -50,18 +40,6 @@ browser_session_id(browser_session_id), restored_browser_session_id(restored_browser_session_id) {} -BrowserAppInstance::BrowserAppInstance(BrowserAppInstanceUpdate update, - aura::Window* window) - : id(update.id), - type(update.type), - app_id(update.app_id), - window(window), - title(update.title), - is_browser_active_deprecated(update.is_browser_active), - is_web_contents_active(update.is_web_contents_active), - browser_session_id(update.browser_session_id), - restored_browser_session_id(update.restored_browser_session_id) {} - BrowserAppInstance::~BrowserAppInstance() = default; bool BrowserAppInstance::MaybeUpdate(aura::Window* new_window, @@ -110,14 +88,12 @@ uint32_t browser_session_id, uint32_t restored_browser_session_id, bool is_incognito, - uint64_t lacros_profile_id, bool is_active) : id(id), window(window), browser_session_id(browser_session_id), restored_browser_session_id(restored_browser_session_id), is_incognito(is_incognito), - lacros_profile_id(lacros_profile_id), is_active_deprecated(is_active) {} BrowserWindowInstance::BrowserWindowInstance(BrowserWindowInstanceUpdate update, @@ -127,7 +103,6 @@ browser_session_id(update.browser_session_id), restored_browser_session_id(update.restored_browser_session_id), is_incognito(update.is_incognito), - lacros_profile_id(update.lacros_profile_id), is_active_deprecated(update.is_active) {} BrowserWindowInstance::~BrowserWindowInstance() = default; @@ -146,17 +121,14 @@ is_active_deprecated, browser_session_id, restored_browser_session_id, - is_incognito, - lacros_profile_id}; + is_incognito}; } -#if BUILDFLAG(IS_CHROMEOS_ASH) +// TODO(crbug.com/373972275): This function is now constant and could be +// removed. std::string BrowserWindowInstance::GetAppId() const { - return crosapi::browser_util::IsLacrosWindow(window) - ? app_constants::kLacrosAppId - : app_constants::kChromeAppId; + return app_constants::kChromeAppId; } -#endif bool BrowserWindowInstance::is_active() const { return wm::IsActiveWindow(window);
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance.h b/chrome/browser/apps/browser_instance/browser_app_instance.h index aebbb87..41defc2 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance.h +++ b/chrome/browser/apps/browser_instance/browser_app_instance.h
@@ -9,7 +9,6 @@ #include "base/memory/raw_ptr.h" #include "base/unguessable_token.h" -#include "build/chromeos_buildflags.h" #include "components/services/app_service/public/cpp/browser_app_instance_update.h" #include "components/services/app_service/public/cpp/browser_window_instance_update.h" @@ -28,8 +27,6 @@ struct BrowserAppInstance { using Type = BrowserAppInstanceUpdate::Type; - // Update message from Lacros. - BrowserAppInstance(base::UnguessableToken id, Type type, std::string app_id, @@ -39,7 +36,6 @@ bool is_web_contents_active, uint32_t browser_session_id, uint32_t restored_browser_session_id); - BrowserAppInstance(BrowserAppInstanceUpdate update, aura::Window* window); ~BrowserAppInstance(); BrowserAppInstance(const BrowserAppInstance&) = delete; BrowserAppInstance& operator=(const BrowserAppInstance&) = delete; @@ -54,7 +50,6 @@ BrowserAppInstanceUpdate ToUpdate() const; - // TODO(b/332628771): Hide this behind BUILDFLAG(IS_CHROMEOS_ASH) in M127. // Checks if `window` is the active window. bool is_browser_active() const; @@ -83,7 +78,6 @@ uint32_t browser_session_id, uint32_t restored_browser_session_id, bool is_incognito, - uint64_t lacros_profile_id, bool is_active); BrowserWindowInstance(BrowserWindowInstanceUpdate update, aura::Window* window); @@ -95,11 +89,8 @@ BrowserWindowInstanceUpdate ToUpdate() const; -#if BUILDFLAG(IS_CHROMEOS_ASH) std::string GetAppId() const; -#endif - // TODO(b/332628771): Hide this behind BUILDFLAG(IS_CHROMEOS_ASH) in M127. // Checks if `window` is the active window. bool is_active() const; @@ -108,8 +99,6 @@ const uint32_t browser_session_id; const uint32_t restored_browser_session_id; const bool is_incognito; - // This value will only be non-zero when refer to a lacros browser instance. - const uint64_t lacros_profile_id; // TODO(b/332628771): Remove this in M127. // Do not add code which uses this state but use `is_active()` instead.
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.cc b/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.cc deleted file mode 100644 index 7dcb779..0000000 --- a/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.cc +++ /dev/null
@@ -1,66 +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. - -#include "chrome/browser/apps/browser_instance/browser_app_instance_forwarder.h" - -#include <utility> - -#include "base/unguessable_token.h" -#include "chrome/browser/apps/browser_instance/browser_app_instance.h" -#include "chrome/browser/apps/browser_instance/browser_app_instance_tracker.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/lacros/window_utility.h" -#include "chromeos/crosapi/mojom/app_service.mojom.h" -#include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h" - -namespace apps { - -BrowserAppInstanceForwarder::BrowserAppInstanceForwarder( - BrowserAppInstanceTracker& tracker, - mojo::Remote<crosapi::mojom::BrowserAppInstanceRegistry>& registry) - : registry_(registry), tracker_(tracker) { - tracker_observation_.Observe(&tracker); - (*registry_) - ->RegisterController( - controller_receiver_.BindNewPipeAndPassRemoteWithVersion()); -} -BrowserAppInstanceForwarder::~BrowserAppInstanceForwarder() = default; - -void BrowserAppInstanceForwarder::OnBrowserWindowAdded( - const apps::BrowserWindowInstance& instance) { - (*registry_)->OnBrowserWindowAdded(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::OnBrowserWindowUpdated( - const apps::BrowserWindowInstance& instance) { - (*registry_)->OnBrowserWindowUpdated(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::OnBrowserWindowRemoved( - const apps::BrowserWindowInstance& instance) { - (*registry_)->OnBrowserWindowRemoved(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::OnBrowserAppAdded( - const apps::BrowserAppInstance& instance) { - (*registry_)->OnBrowserAppAdded(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::OnBrowserAppUpdated( - const apps::BrowserAppInstance& instance) { - (*registry_)->OnBrowserAppUpdated(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::OnBrowserAppRemoved( - const apps::BrowserAppInstance& instance) { - (*registry_)->OnBrowserAppRemoved(instance.ToUpdate()); -} - -void BrowserAppInstanceForwarder::ActivateTabInstance( - const base::UnguessableToken& id) { - tracker_->ActivateTabInstance(id); -} - -} // namespace apps
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.h b/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.h deleted file mode 100644 index 1ae76e9..0000000 --- a/chrome/browser/apps/browser_instance/browser_app_instance_forwarder.h +++ /dev/null
@@ -1,68 +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. - -#ifndef CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_FORWARDER_H_ -#define CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_FORWARDER_H_ - -#include "base/memory/raw_ref.h" -#include "base/scoped_observation.h" -#include "chrome/browser/apps/browser_instance/browser_app_instance_observer.h" -#include "chrome/browser/apps/browser_instance/browser_app_instance_tracker.h" -#include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" - -namespace apps { - -class BrowserAppInstanceTracker; - -// Observes the Lacros browser apps tracker and forwards events to Ash. It -// implements the BrowserAppInstanceController crosapi, allowing Ash to perform -// certain operations on instances. -class BrowserAppInstanceForwarder - : public apps::BrowserAppInstanceObserver, - public crosapi::mojom::BrowserAppInstanceController { - public: - BrowserAppInstanceForwarder( - BrowserAppInstanceTracker& tracker, - mojo::Remote<crosapi::mojom::BrowserAppInstanceRegistry>& registry); - ~BrowserAppInstanceForwarder() override; - - BrowserAppInstanceForwarder(const BrowserAppInstanceForwarder&) = delete; - BrowserAppInstanceForwarder(BrowserAppInstanceForwarder&&) = delete; - BrowserAppInstanceForwarder& operator=(const BrowserAppInstanceForwarder&) = - delete; - BrowserAppInstanceForwarder& operator=(BrowserAppInstanceForwarder&&) = - delete; - - private: - void OnBrowserWindowAdded( - const apps::BrowserWindowInstance& instance) override; - void OnBrowserWindowUpdated( - const apps::BrowserWindowInstance& instance) override; - void OnBrowserWindowRemoved( - const apps::BrowserWindowInstance& instance) override; - void OnBrowserAppAdded(const apps::BrowserAppInstance& instance) override; - void OnBrowserAppUpdated(const apps::BrowserAppInstance& instance) override; - void OnBrowserAppRemoved(const apps::BrowserAppInstance& instance) override; - - // crosapi::mojom::BrowserAppInstanceController overrides. - void ActivateTabInstance(const base::UnguessableToken& instance_id) override; - - private: - const raw_ref<mojo::Remote<crosapi::mojom::BrowserAppInstanceRegistry>> - registry_; - - const raw_ref<BrowserAppInstanceTracker> tracker_; - - base::ScopedObservation<BrowserAppInstanceTracker, BrowserAppInstanceObserver> - tracker_observation_{this}; - - mojo::Receiver<crosapi::mojom::BrowserAppInstanceController> - controller_receiver_{this}; -}; - -} // namespace apps - -#endif // CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_FORWARDER_H_
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_registry.cc b/chrome/browser/apps/browser_instance/browser_app_instance_registry.cc index c53b19b..b947eca 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance_registry.cc +++ b/chrome/browser/apps/browser_instance/browser_app_instance_registry.cc
@@ -9,8 +9,6 @@ #include "base/memory/raw_ptr.h" #include "chrome/browser/apps/browser_instance/browser_app_instance.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_map.h" -#include "chrome/browser/ash/crosapi/browser_util.h" -#include "chrome/browser/ui/browser_window.h" #include "components/exo/shell_surface_util.h" #include "ui/views/widget/widget.h" #include "ui/wm/public/activation_change_observer.h" @@ -31,16 +29,10 @@ } // namespace -struct BrowserAppInstanceRegistry::WindowEventList { - raw_ptr<aura::Window> window{nullptr}; - std::vector<base::OnceCallback<void(aura::Window*)>> events; -}; - BrowserAppInstanceRegistry::BrowserAppInstanceRegistry( BrowserAppInstanceTracker& ash_instance_tracker) : ash_instance_tracker_(ash_instance_tracker) { tracker_observation_.Observe(&*ash_instance_tracker_); - aura_env_observation_.Observe(aura::Env::GetInstance()); } BrowserAppInstanceRegistry::~BrowserAppInstanceRegistry() = default; @@ -89,15 +81,6 @@ return nullptr; } -std::set<const BrowserWindowInstance*> -BrowserAppInstanceRegistry::GetLacrosBrowserWindowInstances() const { - std::set<const BrowserWindowInstance*> result; - for (const auto& pair : lacros_window_instances_) { - result.insert(pair.second.get()); - } - return result; -} - bool BrowserAppInstanceRegistry::IsAppRunning(const std::string& app_id) const { return FindAppInstanceIf([&app_id](const BrowserAppInstance& instance) { return instance.app_id == app_id; @@ -108,19 +91,9 @@ return ash_instance_tracker_->window_instances_.size() > 0; } -bool BrowserAppInstanceRegistry::IsLacrosBrowserRunning() const { - return lacros_window_instances_.size() > 0; -} - void BrowserAppInstanceRegistry::ActivateTabInstance( const base::UnguessableToken& id) { - if (lacros_app_instances_.find(id) != lacros_app_instances_.end()) { - if (controller_.is_bound()) { - controller_->ActivateTabInstance(id); - } - } else { - ash_instance_tracker_->ActivateTabInstance(id); - } + ash_instance_tracker_->ActivateTabInstance(id); } void BrowserAppInstanceRegistry::ActivateInstance( @@ -168,12 +141,6 @@ for (const auto& pair : ash_instance_tracker_->app_window_instances_) { observer->OnBrowserAppAdded(*pair.second); } - for (const auto& pair : lacros_window_instances_) { - observer->OnBrowserWindowAdded(*pair.second); - } - for (const auto& pair : lacros_app_instances_) { - observer->OnBrowserAppAdded(*pair.second); - } } void BrowserAppInstanceRegistry::MaybeStartActivationObservation( @@ -195,13 +162,6 @@ activation_client->AddObserver(this); } -void BrowserAppInstanceRegistry::BindReceiver( - crosapi::CrosapiId id, - mojo::PendingReceiver<crosapi::mojom::BrowserAppInstanceRegistry> - receiver) { - receiver_set_.Add(this, std::move(receiver), id); -} - void BrowserAppInstanceRegistry::OnBrowserWindowAdded( const apps::BrowserWindowInstance& instance) { MaybeStartActivationObservation(instance.window); @@ -246,137 +206,6 @@ } } -void BrowserAppInstanceRegistry::RegisterController( - mojo::PendingRemote<crosapi::mojom::BrowserAppInstanceController> - controller) { - // At the moment only a single controller is supported. - // TODO(crbug.com/40167449): Support SxS lacros. - if (controller_.is_bound()) { - return; - } - controller_.Bind(std::move(controller)); - controller_.set_disconnect_handler( - base::BindOnce(&BrowserAppInstanceRegistry::OnControllerDisconnected, - base::Unretained(this))); -} - -void BrowserAppInstanceRegistry::OnBrowserWindowAdded( - apps::BrowserWindowInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceAdded, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnBrowserWindowUpdated( - apps::BrowserWindowInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceUpdated, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnBrowserWindowRemoved( - apps::BrowserWindowInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce(&BrowserAppInstanceRegistry::LacrosWindowInstanceRemoved, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnBrowserAppAdded( - apps::BrowserAppInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce( - &BrowserAppInstanceRegistry::LacrosAppInstanceAddedOrUpdated, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnBrowserAppUpdated( - apps::BrowserAppInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce( - &BrowserAppInstanceRegistry::LacrosAppInstanceAddedOrUpdated, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnBrowserAppRemoved( - apps::BrowserAppInstanceUpdate update) { - auto window_id = update.window_id; - RunOrEnqueueEventForWindow( - window_id, - base::BindOnce(&BrowserAppInstanceRegistry::LacrosAppInstanceRemoved, - weak_ptr_factory_.GetWeakPtr(), std::move(update))); -} - -void BrowserAppInstanceRegistry::OnWindowInitialized(aura::Window* window) { - if (!crosapi::browser_util::IsLacrosWindow(window)) { - return; - } - lacros_window_observations_.AddObservation(window); - const std::string* id = exo::GetShellApplicationId(window); - DCHECK(id); - auto& event_list = window_id_to_event_list_[*id]; - event_list.window = window; - // Flush any pending events for the new window. - for (auto& callback : event_list.events) { - std::move(callback).Run(window); - } - event_list.events.clear(); -} - -void BrowserAppInstanceRegistry::OnWindowVisibilityChanged(aura::Window* window, - bool visible) { - if (visible) { - // When `LacrosWindowInstanceAdded()` or - // `LacrosAppInstanceAddedOrUpdated()` is called, the `window` is not - // attached to the tree yet and will not be able to get `ActivationClient` - // from it. For this reason, for Lacros window, we delay the start of - // activation to when it becomes visible. - MaybeStartActivationObservation(window); - } -} - -void BrowserAppInstanceRegistry::OnWindowDestroying(aura::Window* window) { - lacros_window_observations_.RemoveObservation(window); - const std::string* id = exo::GetShellApplicationId(window); - DCHECK(id); - DCHECK(base::Contains(window_id_to_event_list_, *id)); - window_id_to_event_list_.erase(*id); - - for (auto it = std::begin(lacros_app_instances_); - it != std::end(lacros_app_instances_);) { - if (it->second->window == window) { - auto instance = std::move(it->second); - it = lacros_app_instances_.erase(it); - for (auto& observer : observers_) { - observer.OnBrowserAppRemoved(*instance); - } - } else { - it++; - } - } - for (auto it = std::begin(lacros_window_instances_); - it != std::end(lacros_window_instances_);) { - if (it->second->window == window) { - auto instance = std::move(it->second); - it = lacros_window_instances_.erase(it); - for (auto& observer : observers_) { - observer.OnBrowserWindowRemoved(*instance); - } - } else { - it++; - } - } -} - void BrowserAppInstanceRegistry::OnWindowActivated(ActivationReason reason, aura::Window* gained_active, aura::Window* lost_active) { @@ -402,110 +231,4 @@ } } -// Run the action immediately if the window matching |window_id| is -// available, otherwise buffer the event until it is. -void BrowserAppInstanceRegistry::RunOrEnqueueEventForWindow( - const std::string& window_id, - base::OnceCallback<void(aura::Window*)> event) { - auto& event_list = window_id_to_event_list_[window_id]; - if (event_list.window) { - std::move(event).Run(event_list.window.get()); - } else { - event_list.events.push_back(std::move(event)); - } -} - -void BrowserAppInstanceRegistry::LacrosWindowInstanceAdded( - apps::BrowserWindowInstanceUpdate update, - aura::Window* window) { - DCHECK(window); - auto instance_id = update.id; - auto& instance = AddInstance( - lacros_window_instances_, instance_id, - std::make_unique<BrowserWindowInstance>(std::move(update), window)); - for (auto& observer : observers_) { - observer.OnBrowserWindowAdded(instance); - } -} - -void BrowserAppInstanceRegistry::LacrosWindowInstanceUpdated( - apps::BrowserWindowInstanceUpdate update, - aura::Window* window) { - DCHECK(window); - auto* instance = GetInstance(lacros_window_instances_, update.id); - if (instance && instance->MaybeUpdate(update.is_active)) { - for (auto& observer : observers_) { - observer.OnBrowserWindowUpdated(*instance); - } - } -} - -void BrowserAppInstanceRegistry::LacrosWindowInstanceRemoved( - apps::BrowserWindowInstanceUpdate update, - aura::Window* window) { - DCHECK(window); - auto instance = PopInstanceIfExists(lacros_window_instances_, update.id); - if (instance) { - for (auto& observer : observers_) { - observer.OnBrowserWindowRemoved(*instance); - } - } -} - -void BrowserAppInstanceRegistry::LacrosAppInstanceAddedOrUpdated( - apps::BrowserAppInstanceUpdate update, - aura::Window* window) { - DCHECK(window); - // Create instance if it does not already eixsts, update it if exists. - // - // In some cases this may result in the removal of an instance and then - // immediate recreation of it with the same ID, but it's necessary to maintain - // app instances with a valid window. - // - // For example, if the last tab is dragged from browser A into browser B, the - // tab will get reparented into a different window and browser A's window is - // destroyed. However app instance messages and window destruction events may - // arrive out of order because they originate from different sources now - // (crosapi and wayland). If a window is destroyed first, it leaves the app - // instance with an invalid window for a fraction of time. Rather than making - // the window pointer nullable, we remove the instance and then re-add it when - // an instance update message reparenting the instance into a new window - // arrives. - BrowserAppInstance* instance = GetInstance(lacros_app_instances_, update.id); - if (instance) { - if (instance->MaybeUpdate(window, update.title, update.is_browser_active, - update.is_web_contents_active, - update.browser_session_id, - update.restored_browser_session_id)) { - for (auto& observer : observers_) { - observer.OnBrowserAppUpdated(*instance); - } - } - } else { - auto id = update.id; - auto& new_instance = AddInstance( - lacros_app_instances_, id, - std::make_unique<BrowserAppInstance>(std::move(update), window)); - for (auto& observer : observers_) { - observer.OnBrowserAppAdded(new_instance); - } - } -} - -void BrowserAppInstanceRegistry::LacrosAppInstanceRemoved( - apps::BrowserAppInstanceUpdate update, - aura::Window* window) { - DCHECK(window); - auto instance = PopInstanceIfExists(lacros_app_instances_, update.id); - if (instance) { - for (auto& observer : observers_) { - observer.OnBrowserAppRemoved(*instance); - } - } -} - -void BrowserAppInstanceRegistry::OnControllerDisconnected() { - controller_.reset(); -} - } // namespace apps
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_registry.h b/chrome/browser/apps/browser_instance/browser_app_instance_registry.h index 847f074..38d6518 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance_registry.h +++ b/chrome/browser/apps/browser_instance/browser_app_instance_registry.h
@@ -5,86 +5,55 @@ #ifndef CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_REGISTRY_H_ #define CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_REGISTRY_H_ -#include <map> #include <memory> #include <set> #include <string> -#include <vector> -#include "base/callback_list.h" -#include "base/functional/callback.h" #include "base/memory/raw_ref.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" -#include "base/scoped_multi_source_observation.h" #include "base/scoped_observation.h" #include "chrome/browser/apps/browser_instance/browser_app_instance.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_map.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_observer.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_tracker.h" -#include "chrome/browser/ash/crosapi/crosapi_id.h" -#include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "ui/aura/env.h" -#include "ui/aura/env_observer.h" #include "ui/aura/window.h" -#include "ui/aura/window_observer.h" #include "ui/wm/public/activation_change_observer.h" #include "ui/wm/public/activation_client.h" -namespace aura { -class Window; -} - namespace apps { -// Hosted in ash-chrome. Aggregates app events received from two -// |BrowserAppInstanceTracker| objects: one in ash-chrome for SWAs, one in -// lacros-chrome for PWAs (via |BrowserAppInstanceForwarder|). +// Aggregates app events for SWAs received from the |BrowserAppInstanceTracker|. class BrowserAppInstanceRegistry : public BrowserAppInstanceObserver, - public crosapi::mojom::BrowserAppInstanceRegistry, - public aura::EnvObserver, - public aura::WindowObserver, public wm::ActivationChangeObserver { public: explicit BrowserAppInstanceRegistry( BrowserAppInstanceTracker& ash_instance_tracker); ~BrowserAppInstanceRegistry() override; - // Get a single app instance by ID (Ash or Lacros). + // Get a single app instance by ID. const BrowserAppInstance* GetAppInstanceById(base::UnguessableToken id) const; - // Get a single browser window instance by ID (Ash or Lacros). + // Get a single browser window instance by ID. const BrowserWindowInstance* GetBrowserWindowInstanceById( base::UnguessableToken id) const; - // Get all instances of apps that are hosted on |window| (Ash or Lacros). + // Get all instances of apps that are hosted on |window|. const std::set<const BrowserAppInstance*> GetBrowserAppInstancesByWindow( const aura::Window* window) const; - // Get a single instance that corresponds to |window| (Ash or Lacros). + // Get a single instance that corresponds to |window|. const BrowserWindowInstance* GetBrowserWindowInstanceByWindow( const aura::Window* window) const; - // Get a single window by instance ID (Ash or Lacros). Returns a nullptr if - // instance identified by |id| does not exist. + // Get a single window by instance ID. + // Returns a nullptr if instance identified by |id| does not exist. aura::Window* GetWindowByInstanceId(const base::UnguessableToken& id) const; - // Get all instances of lacros browser window instances. - std::set<const BrowserWindowInstance*> GetLacrosBrowserWindowInstances() - const; - template <typename PredicateT> const BrowserAppInstance* FindAppInstanceIf(PredicateT predicate) const { const BrowserAppInstance* instance = - FindInstanceIf(lacros_app_instances_, predicate); - if (instance) { - return instance; - } - instance = FindInstanceIf(ash_instance_tracker_->app_tab_instances_, predicate); if (instance) { return instance; @@ -97,7 +66,6 @@ std::set<const BrowserAppInstance*> SelectAppInstances( PredicateT predicate) const { std::set<const BrowserAppInstance*> result; - SelectInstances(result, lacros_app_instances_, predicate); SelectInstances(result, ash_instance_tracker_->app_tab_instances_, predicate); SelectInstances(result, ash_instance_tracker_->app_window_instances_, @@ -108,11 +76,6 @@ template <typename PredicateT> const BrowserWindowInstance* FindWindowInstanceIf( PredicateT predicate) const { - const BrowserWindowInstance* instance = - FindInstanceIf(lacros_window_instances_, predicate); - if (instance) { - return instance; - } return FindInstanceIf(ash_instance_tracker_->window_instances_, predicate); } @@ -120,7 +83,6 @@ std::set<const BrowserWindowInstance*> SelectWindowInstances( PredicateT predicate) const { std::set<const BrowserWindowInstance*> result; - SelectInstances(result, lacros_window_instances_, predicate); SelectInstances(result, ash_instance_tracker_->window_instances_, predicate); return result; @@ -128,21 +90,20 @@ bool IsAppRunning(const std::string& app_id) const; bool IsAshBrowserRunning() const; - bool IsLacrosBrowserRunning() const; - // Activate the given instance within its tabstrip (in Ash or Lacros). If the - // instance lives in its own window, this will have no effect. + // Activate the given instance within its tabstrip. + // If the instance lives in its own window, this will have no effect. void ActivateTabInstance(const base::UnguessableToken& id); - // Activate an app or a browser window instance (Ash or Lacros). Does nothing - // if the instance identified by |id| does not exist. + // Activate an app or a browser window instance. + // Does nothing if the instance identified by |id| does not exist. void ActivateInstance(const base::UnguessableToken& id); - // Minimize the window of an app or a browser window instance (Ash or Lacros). + // Minimize the window of an app or a browser window instance. // Does nothing if the instance identified by |id| does not exist. void MinimizeInstance(const base::UnguessableToken& id); - // Check if an app or a browser window instance is active (Ash or Lacros). + // Check if an app or a browser window instance is active. // Returns false if the instance identified by |id| does not exist. bool IsInstanceActive(const base::UnguessableToken& id) const; @@ -157,12 +118,7 @@ // Runs notifications for all existing instances. void NotifyExistingInstances(BrowserAppInstanceObserver* observer); - void BindReceiver( - crosapi::CrosapiId id, - mojo::PendingReceiver<crosapi::mojom::BrowserAppInstanceRegistry> - receiver); - - // BrowserAppInstanceObserver overrides (events from Ash): + // BrowserAppInstanceObserver overrides: void OnBrowserWindowAdded( const apps::BrowserWindowInstance& instance) override; void OnBrowserWindowUpdated( @@ -172,26 +128,6 @@ void OnBrowserAppAdded(const apps::BrowserAppInstance& instance) override; void OnBrowserAppUpdated(const apps::BrowserAppInstance& instance) override; void OnBrowserAppRemoved(const apps::BrowserAppInstance& instance) override; - void RegisterController( - mojo::PendingRemote<crosapi::mojom::BrowserAppInstanceController> - controller) override; - - // crosapi::mojom::BrowserAppInstanceRegistry overrides (events from Lacros): - void OnBrowserWindowAdded(apps::BrowserWindowInstanceUpdate update) override; - void OnBrowserWindowUpdated( - apps::BrowserWindowInstanceUpdate update) override; - void OnBrowserWindowRemoved( - apps::BrowserWindowInstanceUpdate update) override; - void OnBrowserAppAdded(apps::BrowserAppInstanceUpdate update) override; - void OnBrowserAppUpdated(apps::BrowserAppInstanceUpdate update) override; - void OnBrowserAppRemoved(apps::BrowserAppInstanceUpdate update) override; - - // aura::EnvObserver overrides: - void OnWindowInitialized(aura::Window* window) override; - - // aura::WindowObserver overrides: - void OnWindowVisibilityChanged(aura::Window* window, bool visible) override; - void OnWindowDestroying(aura::Window* window) override; // wm::ActivationChangeObserver overrides: void OnWindowActivated(ActivationReason reason, @@ -199,63 +135,17 @@ aura::Window* lost_active) override; private: - // Buffered Lacros instance events for windows that weren't available yet - // when events arrived. - struct WindowEventList; - - // Run the action immediately if the window matching |window_id| is - // available, otherwise buffer the event until it is. - void RunOrEnqueueEventForWindow( - const std::string& window_id, - base::OnceCallback<void(aura::Window*)> event); - - // Helpers processing of buffered lacros instance events. - void LacrosWindowInstanceAdded(apps::BrowserWindowInstanceUpdate update, - aura::Window* window); - void LacrosWindowInstanceUpdated(apps::BrowserWindowInstanceUpdate update, - aura::Window* window); - void LacrosWindowInstanceRemoved(apps::BrowserWindowInstanceUpdate update, - aura::Window* window); - void LacrosAppInstanceAddedOrUpdated(apps::BrowserAppInstanceUpdate update, - aura::Window* window); - void LacrosAppInstanceRemoved(apps::BrowserAppInstanceUpdate update, - aura::Window* window); - - void OnControllerDisconnected(); - void MaybeStartActivationObservation(aura::Window* window); const raw_ref<BrowserAppInstanceTracker> ash_instance_tracker_; - // Lacros app instances. - BrowserAppInstanceMap<base::UnguessableToken, BrowserAppInstance> - lacros_app_instances_; - - // Lacros browser window instances. - BrowserAppInstanceMap<base::UnguessableToken, BrowserWindowInstance> - lacros_window_instances_; - bool is_activation_observed_ = false; - // Track all Aura windows belonging to Lacros. This is necessary to - // synchronise crosapi events and Aura windows matching these events being - // available. - std::map<std::string, WindowEventList> window_id_to_event_list_; - - mojo::ReceiverSet<crosapi::mojom::BrowserAppInstanceRegistry, - crosapi::CrosapiId> - receiver_set_; - mojo::Remote<crosapi::mojom::BrowserAppInstanceController> controller_; - base::ObserverList<BrowserAppInstanceObserver, true>::Unchecked observers_{ base::ObserverListPolicy::EXISTING_ONLY}; base::ScopedObservation<BrowserAppInstanceTracker, BrowserAppInstanceObserver> tracker_observation_{this}; - base::ScopedObservation<aura::Env, aura::EnvObserver> aura_env_observation_{ - this}; - base::ScopedMultiSourceObservation<aura::Window, aura::WindowObserver> - lacros_window_observations_{this}; base::WeakPtrFactory<BrowserAppInstanceRegistry> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_tracker.cc b/chrome/browser/apps/browser_instance/browser_app_instance_tracker.cc index 16687246..64520d6 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance_tracker.cc +++ b/chrome/browser/apps/browser_instance/browser_app_instance_tracker.cc
@@ -10,7 +10,6 @@ #include "base/memory/raw_ptr.h" #include "base/process/process.h" #include "base/strings/utf_string_conversions.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_map.h" #include "chrome/browser/apps/browser_instance/browser_app_instance_observer.h" #include "chrome/browser/apps/browser_instance/web_contents_instance_id_utils.h" @@ -31,13 +30,7 @@ #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" #include "ui/aura/window.h" - -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/lacros/lacros_extensions_util.h" -#include "chrome/browser/lacros/profile_util.h" -#else #include "ui/wm/core/window_util.h" -#endif namespace apps { @@ -52,18 +45,6 @@ return nullptr; } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -Browser* GetBrowserWithAuraWindow(aura::Window* aura_window) { - for (Browser* browser : *BrowserList::GetInstance()) { - BrowserWindow* window = browser->window(); - if (window && window->GetNativeWindow() == aura_window) { - return browser; - } - } - return nullptr; -} -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - aura::Window* AuraWindowForBrowser(Browser* browser) { BrowserWindow* window = browser->window(); DCHECK(window && window->GetNativeWindow()); @@ -72,15 +53,6 @@ return aura_window; } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -wm::ActivationClient* ActivationClientForBrowser(Browser* browser) { - aura::Window* window = AuraWindowForBrowser(browser)->GetRootWindow(); - wm::ActivationClient* client = wm::GetActivationClient(window); - DCHECK(client); - return client; -} -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - bool IsBrowserActive(Browser* browser) { auto* aura_window = AuraWindowForBrowser(browser); return wm::IsActiveWindow(aura_window); @@ -589,17 +561,12 @@ } void BrowserAppInstanceTracker::CreateBrowserWindowInstance(Browser* browser) { - uint64_t lacros_profile_id = 0; -#if BUILDFLAG(IS_CHROMEOS_LACROS) - lacros_profile_id = HashProfilePathToProfileId(browser->profile()->GetPath()); -#endif auto& instance = AddInstance( window_instances_, browser, std::make_unique<BrowserWindowInstance>( GenerateId(), browser->window()->GetNativeWindow(), browser->session_id().id(), browser->create_params().restore_id, - browser->profile()->IsIncognitoProfile(), lacros_profile_id, - IsBrowserActive(browser))); + browser->profile()->IsIncognitoProfile(), IsBrowserActive(browser))); for (auto& observer : observers_) { observer.OnBrowserWindowAdded(instance); } @@ -623,95 +590,4 @@ return base::Contains(tracked_browsers_, browser); } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -BrowserAppInstanceTrackerLacros::BrowserAppInstanceTrackerLacros( - Profile* profile, - AppRegistryCache& app_registry_cache) - : BrowserAppInstanceTracker(profile, app_registry_cache) {} - -BrowserAppInstanceTrackerLacros::~BrowserAppInstanceTrackerLacros() { - DCHECK_EQ(activation_client_observations_.GetSourcesCount(), 0u); -} - -void BrowserAppInstanceTrackerLacros::OnWindowActivated( - ActivationReason reason, - aura::Window* gained_active, - aura::Window* lost_active) { - if (Browser* browser = GetBrowserWithAuraWindow(lost_active)) { - OnBrowserWindowUpdated(browser); - } - if (Browser* browser = GetBrowserWithAuraWindow(gained_active)) { - OnBrowserWindowUpdated(browser); - } -} - -void BrowserAppInstanceTrackerLacros::OnBrowserWindowUpdated(Browser* browser) { - // We only want to send window events for the browsers we track to avoid - // sending window events before a "browser added" event. - if (!IsBrowserTracked(browser)) { - return; - } - BrowserWindowInstance* instance = GetInstance(window_instances_, browser); - if (instance) { - MaybeUpdateBrowserWindowInstance(*instance, browser); - } - - TabStripModel* tab_strip_model = browser->tab_strip_model(); - for (int i = 0; i < tab_strip_model->count(); i++) { - content::WebContents* contents = tab_strip_model->GetWebContentsAt(i); - OnTabUpdated(browser, contents); - } -} - -void BrowserAppInstanceTrackerLacros::MaybeUpdateBrowserWindowInstance( - BrowserWindowInstance& instance, - Browser* browser) { - if (instance.MaybeUpdate(IsBrowserActive(browser))) { - for (auto& observer : observers_) { - observer.OnBrowserWindowUpdated(instance); - } - } -} - -bool BrowserAppInstanceTrackerLacros::IsActivationClientTracked( - wm::ActivationClient* client) const { - // Iterate over the full list of browsers instead of tracked_browsers_ in case - // tracked_browsers_ is out of date with global state - // TODO(crbug.com/40782702): This can be changed to iterate tracked_browsers_ - // when confident it doesn't get out of sync. - for (Browser* browser : *BrowserList::GetInstance()) { - if (IsBrowserTracked(browser) && - ActivationClientForBrowser(browser) == client) { - return true; - } - } - return false; -} - -void BrowserAppInstanceTrackerLacros::OnBrowserFirstTabAttached( - Browser* browser) { - // Observe the activation client of the root window of - // the browser's aura - // window if this is the first browser matching it (there is no other tracked - // browser matching it). - wm::ActivationClient* activation_client = ActivationClientForBrowser(browser); - if (!IsActivationClientTracked(activation_client)) { - activation_client_observations_.AddObservation(activation_client); - } - BrowserAppInstanceTracker::OnBrowserFirstTabAttached(browser); -} - -void BrowserAppInstanceTrackerLacros::OnBrowserLastTabDetached( - Browser* browser) { - BrowserAppInstanceTracker::OnBrowserLastTabDetached(browser); - - // Unobserve the activation client of the root window of the browser's aura - // window if the last browser using it was just removed. - wm::ActivationClient* activation_client = ActivationClientForBrowser(browser); - if (!IsActivationClientTracked(activation_client)) { - activation_client_observations_.RemoveObservation(activation_client); - } -} -#endif // #BUILDFLAG(IS_CHROMEOS_LACROS) - } // namespace apps
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_tracker.h b/chrome/browser/apps/browser_instance/browser_app_instance_tracker.h index 7ba2742..87ac8ff5 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance_tracker.h +++ b/chrome/browser/apps/browser_instance/browser_app_instance_tracker.h
@@ -26,18 +26,9 @@ #include "components/services/app_service/public/cpp/app_registry_cache.h" #include "content/public/browser/web_contents.h" -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "ui/wm/public/activation_change_observer.h" -#include "ui/wm/public/activation_client.h" -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - class Browser; class Profile; -namespace aura { -class Window; -} - namespace apps { class BrowserAppInstanceObserver; @@ -112,7 +103,6 @@ private: class WebContentsObserver; friend class BrowserAppInstanceRegistry; - friend class BrowserAppInstanceTrackerLacros; // Called by TabStripModelChanged(). void OnTabStripModelChangeInsert(Browser* browser, @@ -208,55 +198,6 @@ base::ObserverList<BrowserAppInstanceObserver, true>::Unchecked observers_; }; -#if BUILDFLAG(IS_CHROMEOS_LACROS) -// TODO(b/332628771): Remove this class 2 mile stones from this patch. -// Now that activation is observed by Ash even for Lacros windows, -// |BrowserAppInstanceTracker| no longer needs to observe activation changes. -// However to support older Ash, |BrowserAppInstanceTrackerLacros| adds -// |ActivationChangeObserver| functionality to |BrowserAppInstanceTracker| and -// notifies Ash. -class BrowserAppInstanceTrackerLacros : public BrowserAppInstanceTracker, - public wm::ActivationChangeObserver { - public: - BrowserAppInstanceTrackerLacros(Profile* profile, - AppRegistryCache& app_registry_cache); - ~BrowserAppInstanceTrackerLacros() override; - BrowserAppInstanceTrackerLacros(const BrowserAppInstanceTrackerLacros&) = - delete; - BrowserAppInstanceTrackerLacros& operator=( - const BrowserAppInstanceTrackerLacros&) = delete; - - // wm::ActivationChangeObserver overrides: - void OnWindowActivated(ActivationReason reason, - aura::Window* gained_active, - aura::Window* lost_active) override; - - private: - // Updates the browser instance with the new attributes and notifies - // observers, if it was updated. - void MaybeUpdateBrowserWindowInstance(BrowserWindowInstance& instance, - Browser* browser); - // Called on browser window changes. Sends update events for all open tabs. - void OnBrowserWindowUpdated(Browser* browser); - - bool IsActivationClientTracked(wm::ActivationClient* client) const; - - // In addition to calling - // |BrowserAppInstanceTracker::OnBrowserFirstTabAttached| starts observing - // |ActivationClient| corresponding to |browser|. - void OnBrowserFirstTabAttached(Browser* browser) override; - // In addition to calling - // |BrowserAppInstanceTracker::OnBrowserLastTabDetached| stops observing - // |ActivationClient| corresponding to |browser|. - void OnBrowserLastTabDetached(Browser* browser) override; - - // A set of observed activation clients for all browser's windows. - base::ScopedMultiSourceObservation<wm::ActivationClient, - wm::ActivationChangeObserver> - activation_client_observations_{this}; -}; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) - } // namespace apps #endif // CHROME_BROWSER_APPS_BROWSER_INSTANCE_BROWSER_APP_INSTANCE_TRACKER_H_
diff --git a/chrome/browser/apps/browser_instance/browser_app_instance_tracker_browsertest.cc b/chrome/browser/apps/browser_instance/browser_app_instance_tracker_browsertest.cc index 9096150..dadceac 100644 --- a/chrome/browser/apps/browser_instance/browser_app_instance_tracker_browsertest.cc +++ b/chrome/browser/apps/browser_instance/browser_app_instance_tracker_browsertest.cc
@@ -500,13 +500,9 @@ }); } } -// Broken on ChromeOS <https://crbug.com/1493240> -#if BUILDFLAG(IS_CHROMEOS) -#define MAYBE_DevtoolsWindow DISABLED_DevtoolsWindow -#else -#define MAYBE_DevtoolsWindow DevtoolsWindow -#endif -IN_PROC_BROWSER_TEST_F(BrowserAppInstanceTrackerTest, MAYBE_DevtoolsWindow) { + +// Disabled due to https://crbug.com/1493240. +IN_PROC_BROWSER_TEST_F(BrowserAppInstanceTrackerTest, DISABLED_DevtoolsWindow) { Browser* browser = CreateBrowser(); InsertForegroundTab(browser, "https://c.example.org"); aura::Window* window1 = browser->window()->GetNativeWindow();
diff --git a/chrome/browser/ash/crosapi/BUILD.gn b/chrome/browser/ash/crosapi/BUILD.gn index 71320c1..9d6d0aa 100644 --- a/chrome/browser/ash/crosapi/BUILD.gn +++ b/chrome/browser/ash/crosapi/BUILD.gn
@@ -237,7 +237,6 @@ "//chrome/browser/apps/app_service", "//chrome/browser/apps/app_service/app_icon", "//chrome/browser/apps/app_service/app_install:implementation", - "//chrome/browser/apps/browser_instance", "//chrome/browser/apps/platform_apps/api", "//chrome/browser/ash/accessibility", "//chrome/browser/ash/app_list", @@ -330,12 +329,12 @@ "//chrome/browser/ui/ash/holding_space", "//chrome/browser/ui/ash/keyboard", "//chrome/browser/ui/ash/login", + "//chrome/browser/ui/ash/magic_boost", "//chrome/browser/ui/ash/session", "//chrome/browser/ui/ash/shelf", "//chrome/browser/ui/ash/shelf/app_service", "//chrome/browser/ui/ash/shell_delegate", "//chrome/browser/ui/ash/system_web_apps", - "//chrome/browser/ui/chromeos/magic_boost", "//chrome/browser/ui/views/select_file_dialog_extension", "//chrome/browser/ui/webui/ash/cloud_upload", "//chrome/browser/ui/webui/ash/kerberos", @@ -515,11 +514,11 @@ "//chrome/browser/ui/ash/capture_mode", "//chrome/browser/ui/ash/desks", "//chrome/browser/ui/ash/global_media_controls", + "//chrome/browser/ui/ash/magic_boost", "//chrome/browser/ui/ash/session", "//chrome/browser/ui/ash/shelf", "//chrome/browser/ui/ash/shelf/app_service", "//chrome/browser/ui/ash/shell_delegate", - "//chrome/browser/ui/chromeos/magic_boost", "//chrome/browser/ui/webui/ash/cloud_upload", "//chrome/browser/ui/webui/signin/ash", "//chrome/browser/web_applications/app_service",
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc index bb7fc8c..1ad18a5 100644 --- a/chrome/browser/ash/crosapi/crosapi_ash.cc +++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/apps/app_service/subscriber_crosapi.h" #include "chrome/browser/apps/app_service/subscriber_crosapi_factory.h" -#include "chrome/browser/apps/browser_instance/browser_app_instance_registry.h" #include "chrome/browser/apps/digital_goods/digital_goods_ash.h" #include "chrome/browser/ash/crosapi/arc_ash.h" #include "chrome/browser/ash/crosapi/audio_service_ash.h"
diff --git a/chrome/browser/ash/crosapi/crosapi_util.cc b/chrome/browser/ash/crosapi/crosapi_util.cc index 7c4adf6..ba58529 100644 --- a/chrome/browser/ash/crosapi/crosapi_util.cc +++ b/chrome/browser/ash/crosapi/crosapi_util.cc
@@ -63,7 +63,6 @@ #include "chromeos/crosapi/mojom/audio_service.mojom.h" #include "chromeos/crosapi/mojom/authentication.mojom.h" #include "chromeos/crosapi/mojom/automation.mojom.h" -#include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h" #include "chromeos/crosapi/mojom/cec_private.mojom.h" #include "chromeos/crosapi/mojom/cert_database.mojom.h" #include "chromeos/crosapi/mojom/cert_provisioning.mojom.h" @@ -299,7 +298,6 @@ MakeInterfaceVersionEntry<crosapi::mojom::AutomationFactory>(), MakeInterfaceVersionEntry<crosapi::mojom::AccountManager>(), MakeInterfaceVersionEntry<crosapi::mojom::AppServiceProxy>(), - MakeInterfaceVersionEntry<crosapi::mojom::BrowserAppInstanceRegistry>(), MakeInterfaceVersionEntry<crosapi::mojom::CecPrivate>(), MakeInterfaceVersionEntry<crosapi::mojom::CertDatabase>(), MakeInterfaceVersionEntry<crosapi::mojom::CertProvisioning>(),
diff --git a/chrome/browser/ash/file_manager/BUILD.gn b/chrome/browser/ash/file_manager/BUILD.gn index e1d26bae..dbf60a2 100644 --- a/chrome/browser/ash/file_manager/BUILD.gn +++ b/chrome/browser/ash/file_manager/BUILD.gn
@@ -12,6 +12,8 @@ "app_service_file_tasks.h", "cloud_upload_prefs_watcher.cc", "cloud_upload_prefs_watcher.h", + "cloud_upload_prompt_prefs_handler.cc", + "cloud_upload_prompt_prefs_handler.h", "copy_or_move_encrypted_hook_delegate.cc", "copy_or_move_encrypted_hook_delegate.h", "copy_or_move_io_task.cc", @@ -389,6 +391,7 @@ defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ + "cloud_upload_prompt_prefs_handler_browsertest.cc", "external_filesystem_apitest.cc", "file_manager_browsertest.cc", "file_manager_browsertest_base.cc", @@ -459,6 +462,7 @@ "//chrome/browser/chromeos/upload_office_to_cloud", "//chrome/browser/enterprise/connectors/test:test_support", "//chrome/browser/extensions", + "//chrome/browser/policy:test_support", "//chrome/browser/profiles:profile", "//chrome/browser/ui", "//chrome/browser/ui/ash/cast_config",
diff --git a/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.cc b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.cc new file mode 100644 index 0000000..5da5af7 --- /dev/null +++ b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.cc
@@ -0,0 +1,199 @@ +// 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. + +#include "chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h" + +#include <memory> + +#include "base/memory/ptr_util.h" +#include "chrome/browser/chromeos/upload_office_to_cloud/upload_office_to_cloud.h" +#include "chrome/browser/policy/profile_policy_connector.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/pref_names.h" +#include "chromeos/constants/chromeos_features.h" +#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_change_registrar.h" +#include "components/prefs/pref_service.h" + +namespace chromeos::cloud_upload { + +namespace { + +bool IsProfileEnterpriseManaged(Profile* profile) { + return profile->GetProfilePolicyConnector()->IsManaged() && + !profile->IsChild(); +} + +class CloudUploadPromptPrefsHandler : public KeyedService { + public: + static std::unique_ptr<CloudUploadPromptPrefsHandler> Create( + Profile* profile); + + CloudUploadPromptPrefsHandler(const CloudUploadPromptPrefsHandler&) = delete; + CloudUploadPromptPrefsHandler& operator=( + const CloudUploadPromptPrefsHandler&) = delete; + + ~CloudUploadPromptPrefsHandler() override; + + // Registers preferences related to enterprise cloud upload flows. + static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + + // KeyedService: + void Shutdown() override; + + private: + explicit CloudUploadPromptPrefsHandler(Profile* profile); + + // Callbacks for pref changes. Synchronize local and syncable prefs, if + // needed. + void OnOfficeFilesAlwaysMoveToDriveChanged(); + void OnOfficeFilesAlwaysMoveToDriveSyncableChanged(); + void OnOfficeFilesAlwaysMoveToOneDriveChanged(); + void OnOfficeFilesAlwaysMoveToOneDriveSyncableChanged(); + + raw_ptr<Profile> profile_ = nullptr; + + std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_; +}; + +// static +std::unique_ptr<CloudUploadPromptPrefsHandler> +CloudUploadPromptPrefsHandler::Create(Profile* profile) { + return base::WrapUnique(new CloudUploadPromptPrefsHandler(profile)); +} + +CloudUploadPromptPrefsHandler::~CloudUploadPromptPrefsHandler() = default; + +// static +void CloudUploadPromptPrefsHandler::RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) { + registry->RegisterBooleanPref( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); + registry->RegisterBooleanPref( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, false, + user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); +} + +// KeyedService: +void CloudUploadPromptPrefsHandler::Shutdown() { + pref_change_registrar_.reset(); + profile_ = nullptr; +} + +CloudUploadPromptPrefsHandler::CloudUploadPromptPrefsHandler(Profile* profile) + : profile_(profile), + pref_change_registrar_(std::make_unique<PrefChangeRegistrar>()) { + pref_change_registrar_->Init(profile_->GetPrefs()); + pref_change_registrar_->Add( + prefs::kOfficeFilesAlwaysMoveToDrive, + base::BindRepeating( + &CloudUploadPromptPrefsHandler::OnOfficeFilesAlwaysMoveToDriveChanged, + base::Unretained(this))); + pref_change_registrar_->Add( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable, + base::BindRepeating(&CloudUploadPromptPrefsHandler:: + OnOfficeFilesAlwaysMoveToDriveSyncableChanged, + base::Unretained(this))); + pref_change_registrar_->Add( + prefs::kOfficeFilesAlwaysMoveToOneDrive, + base::BindRepeating(&CloudUploadPromptPrefsHandler:: + OnOfficeFilesAlwaysMoveToOneDriveChanged, + base::Unretained(this))); + pref_change_registrar_->Add( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, + base::BindRepeating(&CloudUploadPromptPrefsHandler:: + OnOfficeFilesAlwaysMoveToOneDriveSyncableChanged, + base::Unretained(this))); + // TODO(387268733): Initial sync to syncable prefs if needed. + // TODO(387268733): Observe CloudUpload policies changes. +} + +void CloudUploadPromptPrefsHandler::OnOfficeFilesAlwaysMoveToDriveChanged() { + if (!IsProfileEnterpriseManaged(profile_)) { + return; + } + + bool always_move = + profile_->GetPrefs()->GetBoolean(prefs::kOfficeFilesAlwaysMoveToDrive); + profile_->GetPrefs()->SetBoolean(prefs::kOfficeFilesAlwaysMoveToDriveSyncable, + always_move); +} + +void CloudUploadPromptPrefsHandler:: + OnOfficeFilesAlwaysMoveToDriveSyncableChanged() { + if (!IsProfileEnterpriseManaged(profile_)) { + return; + } + if (!cloud_upload::IsGoogleWorkspaceCloudUploadAutomated(profile_)) { + return; + } + + bool always_move_syncable = profile_->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable); + profile_->GetPrefs()->SetBoolean(prefs::kOfficeFilesAlwaysMoveToDrive, + always_move_syncable); +} + +void CloudUploadPromptPrefsHandler::OnOfficeFilesAlwaysMoveToOneDriveChanged() { + if (!IsProfileEnterpriseManaged(profile_)) { + return; + } + + bool always_move = + profile_->GetPrefs()->GetBoolean(prefs::kOfficeFilesAlwaysMoveToOneDrive); + profile_->GetPrefs()->SetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, always_move); +} + +void CloudUploadPromptPrefsHandler:: + OnOfficeFilesAlwaysMoveToOneDriveSyncableChanged() { + if (!IsProfileEnterpriseManaged(profile_)) { + return; + } + if (!cloud_upload::IsMicrosoftOfficeCloudUploadAutomated(profile_)) { + return; + } + + bool always_move_syncable = profile_->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable); + profile_->GetPrefs()->SetBoolean(prefs::kOfficeFilesAlwaysMoveToOneDrive, + always_move_syncable); +} + +} // namespace + +// static +CloudUploadPromptPrefsHandlerFactory* +CloudUploadPromptPrefsHandlerFactory::GetInstance() { + static base::NoDestructor<CloudUploadPromptPrefsHandlerFactory> instance; + return instance.get(); +} + +CloudUploadPromptPrefsHandlerFactory::CloudUploadPromptPrefsHandlerFactory() + : ProfileKeyedServiceFactory("CloudUploadPromptPrefsHandlerFactory") {} + +CloudUploadPromptPrefsHandlerFactory::~CloudUploadPromptPrefsHandlerFactory() = + default; + +void CloudUploadPromptPrefsHandlerFactory::RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) { + CloudUploadPromptPrefsHandler::RegisterProfilePrefs(registry); +} + +std::unique_ptr<KeyedService> +CloudUploadPromptPrefsHandlerFactory::BuildServiceInstanceForBrowserContext( + content::BrowserContext* context) const { + CHECK(features::IsUploadOfficeToCloudForEnterpriseEnabled() && + features::IsUploadOfficeToCloudSyncEnabled()); + return CloudUploadPromptPrefsHandler::Create( + Profile::FromBrowserContext(context)); +} + +bool CloudUploadPromptPrefsHandlerFactory::ServiceIsCreatedWithBrowserContext() + const { + return true; +} + +} // namespace chromeos::cloud_upload
diff --git a/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h new file mode 100644 index 0000000..7e58947f --- /dev/null +++ b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h
@@ -0,0 +1,46 @@ +// 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. + +#ifndef CHROME_BROWSER_ASH_FILE_MANAGER_CLOUD_UPLOAD_PROMPT_PREFS_HANDLER_H_ +#define CHROME_BROWSER_ASH_FILE_MANAGER_CLOUD_UPLOAD_PROMPT_PREFS_HANDLER_H_ + +#include "base/no_destructor.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "components/keyed_service/core/keyed_service.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace chromeos::cloud_upload { + +// This factory reacts to profile creation and instantiates profile-keyed +// services that set up handlers for prefs related to Cloud Upload move +// confirmation prompts. +class CloudUploadPromptPrefsHandlerFactory : public ProfileKeyedServiceFactory { + public: + CloudUploadPromptPrefsHandlerFactory( + const CloudUploadPromptPrefsHandlerFactory&) = delete; + CloudUploadPromptPrefsHandlerFactory& operator=( + const CloudUploadPromptPrefsHandlerFactory&) = delete; + + static CloudUploadPromptPrefsHandlerFactory* GetInstance(); + + private: + friend base::NoDestructor<CloudUploadPromptPrefsHandlerFactory>; + + CloudUploadPromptPrefsHandlerFactory(); + ~CloudUploadPromptPrefsHandlerFactory() override; + + // BrowserContextKeyedServiceFactory: + void RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) override; + std::unique_ptr<KeyedService> BuildServiceInstanceForBrowserContext( + content::BrowserContext* context) const override; + bool ServiceIsCreatedWithBrowserContext() const override; +}; + +} // namespace chromeos::cloud_upload + +#endif // CHROME_BROWSER_ASH_FILE_MANAGER_CLOUD_UPLOAD_PROMPT_PREFS_HANDLER_H_
diff --git a/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler_browsertest.cc b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler_browsertest.cc new file mode 100644 index 0000000..3253fca --- /dev/null +++ b/chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler_browsertest.cc
@@ -0,0 +1,216 @@ +// 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. + +#include "chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h" + +#include "chrome/browser/chromeos/upload_office_to_cloud/upload_office_to_cloud.h" +#include "chrome/browser/policy/policy_test_utils.h" +#include "chrome/browser/policy/profile_policy_connector.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/common/pref_names.h" +#include "chromeos/constants/chromeos_features.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/policy/policy_constants.h" +#include "components/prefs/pref_service.h" +#include "content/public/test/browser_test.h" + +namespace chromeos::cloud_upload { + +class CloudUploadPromptPrefsHandlerTest : public policy::PolicyTest { + public: + CloudUploadPromptPrefsHandlerTest() { + feature_list_.InitWithFeatures( + {chromeos::features::kUploadOfficeToCloud, + chromeos::features::kUploadOfficeToCloudForEnterprise, + chromeos::features::kUploadOfficeToCloudSync}, + {}); + } + ~CloudUploadPromptPrefsHandlerTest() override = default; + + void SetUpOnMainThread() override { + policy::PolicyTest::SetUpOnMainThread(); + profile_policy_connector()->OverrideIsManagedForTesting(true); + } + + // Sets the Microsoft Office cloud upload policy to `value` (should be one of + // kAutomated, kAllowed, kDisallowed). + void SetMicrosoftOfficeCloudUpload(const std::string& value) { + policy::PolicyMap policies; + policy::PolicyTest::SetPolicy(&policies, + policy::key::kMicrosoftOfficeCloudUpload, + base::Value(value)); + provider_.UpdateChromePolicy(policies); + } + + // Sets the Microsoft Office cloud upload policy to `value` (should be one of + // kAutomated, kAllowed, kDisallowed). + void SetGoogleWorkspaceCloudUpload(const std::string& value) { + policy::PolicyMap policies; + policy::PolicyTest::SetPolicy(&policies, + policy::key::kGoogleWorkspaceCloudUpload, + base::Value(value)); + provider_.UpdateChromePolicy(policies); + } + + // Verifies the syncing behavior of two preferences: `syncable_pref` and + // `local_pref`. It sets `syncable_pref` to `true` and checks whether + // `local_pref` is updated or not, depending on the `should_update` parameter. + // The test assumes that both preferences are initially set to `false`. + void TestPrefSyncing(const std::string& syncable_pref, + const std::string& local_pref, + bool should_update) { + // Simulate a pref change from another device. + profile()->GetPrefs()->SetBoolean(syncable_pref, true); + EXPECT_EQ(should_update, profile()->GetPrefs()->GetBoolean(local_pref)); + } + + Profile* profile() { return browser()->profile(); } + + policy::ProfilePolicyConnector* profile_policy_connector() { + return browser()->profile()->GetProfilePolicyConnector(); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + KeyedServiceRegistered) { + std::vector<raw_ptr<DependencyNode, VectorExperimental>> nodes; + const bool success = BrowserContextDependencyManager::GetInstance() + ->GetDependencyGraphForTesting() + .GetConstructionOrder(&nodes); + EXPECT_TRUE(success); + base::Contains( + nodes, "CloudUploadPromptPrefsHandlerFactory", + [](const DependencyNode* node) -> std::string_view { + return static_cast<const KeyedServiceBaseFactory*>(node)->name(); + }); +} + +// Tests that the kOfficeFilesAlwaysMoveToDrive pref is synced when the +// Google Workspace cloud upload policy is set to "automated". +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + PrefsSyncedIfAutomated_GoogleDrive) { + SetGoogleWorkspaceCloudUpload(kCloudUploadPolicyAutomated); + + ASSERT_FALSE( + profile()->GetPrefs()->GetBoolean(prefs::kOfficeFilesAlwaysMoveToDrive)); + ASSERT_FALSE(profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable)); + + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToDrive, + /*should_update=*/true); +} + +// Tests that the kOfficeFilesAlwaysMoveToOneDrive pref is synced when the +// Microsoft Office cloud upload policy is set to "automated". +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + PrefsUpdatedIfAutomated_OneDrive) { + SetMicrosoftOfficeCloudUpload(kCloudUploadPolicyAutomated); + + ASSERT_FALSE(profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDrive)); + ASSERT_FALSE(profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable)); + + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDrive, + /*should_update=*/true); +} + +// Tests that kOfficeFilesAlwaysMoveToDriveSyncable is updated to reflect +// changes in kOfficeFilesAlwaysMoveToDrive, regardless of the cloud upload +// policy. +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + SyncablePrefsUpdatedIfLocalPrefsChange_GoogleDrive) { + for (const std::string& cloud_upload_policy : + {kCloudUploadPolicyAutomated, kCloudUploadPolicyAllowed, + kCloudUploadPolicyDisallowed}) { + SetGoogleWorkspaceCloudUpload(cloud_upload_policy); + + bool current_local_value = + profile()->GetPrefs()->GetBoolean(prefs::kOfficeFilesAlwaysMoveToDrive); + ASSERT_EQ(current_local_value, + profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable)); + // Change the local pref. + profile()->GetPrefs()->SetBoolean(prefs::kOfficeFilesAlwaysMoveToDrive, + !current_local_value); + ASSERT_EQ(!current_local_value, + profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToDriveSyncable)); + } +} + +// Tests that kOfficeFilesAlwaysMoveToOneDriveSyncable is updated to reflect +// changes in kOfficeFilesAlwaysMoveToOneDrive, regardless of the cloud upload +// policy. +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + SyncablePrefsUpdatedIfLocalPrefsChange_OneDrive) { + for (const std::string& cloud_upload_policy : + {kCloudUploadPolicyAutomated, kCloudUploadPolicyAllowed, + kCloudUploadPolicyDisallowed}) { + SetMicrosoftOfficeCloudUpload(cloud_upload_policy); + + bool current_local_value = profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDrive); + ASSERT_EQ(current_local_value, + profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable)); + // Change the local pref. + profile()->GetPrefs()->SetBoolean(prefs::kOfficeFilesAlwaysMoveToOneDrive, + !current_local_value); + ASSERT_EQ(!current_local_value, + profile()->GetPrefs()->GetBoolean( + prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable)); + } +} + +// Tests that the kOfficeFilesAlwaysMoveToDrive and +// kOfficeFilesAlwaysMoveToOneDrive prefs aren't synced when the profile isn't +// enterprise managed. +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + PrefsNotSyncedIfProfileNotEnterpriseManaged) { + profile_policy_connector()->OverrideIsManagedForTesting(false); + + SetMicrosoftOfficeCloudUpload(kCloudUploadPolicyAutomated); + SetGoogleWorkspaceCloudUpload(kCloudUploadPolicyAutomated); + + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToDrive, + /*should_update=*/false); + + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDrive, + /*should_update=*/false); + ; +} + +// Tests that the kOfficeFilesAlwaysMoveToDrive and +// kOfficeFilesAlwaysMoveToOneDrive prefs aren't synced if their respective +// Cloud Upload policies aren't set to "automated". +IN_PROC_BROWSER_TEST_F(CloudUploadPromptPrefsHandlerTest, + PrefsNotSyncedIfCloudUploadNotAutomated) { + SetGoogleWorkspaceCloudUpload(kCloudUploadPolicyAllowed); + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToDrive, + /*should_update=*/false); + + SetMicrosoftOfficeCloudUpload(kCloudUploadPolicyDisallowed); + TestPrefSyncing( + /*syncable_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, + /*local_pref=*/prefs::kOfficeFilesAlwaysMoveToOneDrive, + /*should_update=*/false); + ; +} + +} // namespace chromeos::cloud_upload
diff --git a/chrome/browser/ash/file_manager/office_file_tasks.cc b/chrome/browser/ash/file_manager/office_file_tasks.cc index 31d59158..0bb9b38 100644 --- a/chrome/browser/ash/file_manager/office_file_tasks.cc +++ b/chrome/browser/ash/file_manager/office_file_tasks.cc
@@ -27,7 +27,6 @@ #include "chrome/common/extensions/api/file_manager_private.h" #include "chrome/common/pref_names.h" #include "chromeos/ash/components/file_manager/app_id.h" -#include "chromeos/constants/chromeos_features.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/prefs/pref_service.h" #include "components/services/app_service/public/cpp/types_util.h" @@ -123,15 +122,6 @@ void RegisterOfficeProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kOfficeFilesAlwaysMoveToDrive, false); registry->RegisterBooleanPref(prefs::kOfficeFilesAlwaysMoveToOneDrive, false); - if (chromeos::features::IsUploadOfficeToCloudSyncEnabled()) { - registry->RegisterBooleanPref( - prefs::kOfficeFilesAlwaysMoveToDriveSyncable, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); - registry->RegisterBooleanPref( - prefs::kOfficeFilesAlwaysMoveToOneDriveSyncable, false, - user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); - } - registry->RegisterBooleanPref(prefs::kOfficeMoveConfirmationShownForDrive, false); registry->RegisterBooleanPref(prefs::kOfficeMoveConfirmationShownForOneDrive,
diff --git a/chrome/browser/ash/kcer/BUILD.gn b/chrome/browser/ash/kcer/BUILD.gn index b3bc93d..4022b1a 100644 --- a/chrome/browser/ash/kcer/BUILD.gn +++ b/chrome/browser/ash/kcer/BUILD.gn
@@ -16,7 +16,6 @@ deps = [ "//ash", - "//ash/components/kcer", "//ash/constants", "//ash/public/cpp", "//base", @@ -26,6 +25,7 @@ "//chrome/browser/profiles:profile", "//chrome/common", "//chromeos/ash/components/browser_context_helper", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/network", "//chromeos/ash/components/tpm", "//components/account_id", @@ -51,7 +51,6 @@ deps = [ ":kcer", - "//ash/components/kcer", "//ash/constants", "//base", "//base/test:test_support", @@ -62,6 +61,7 @@ "//chrome/browser/profiles:profile", "//chrome/test:test_support", "//chromeos/ash/components/browser_context_helper", + "//chromeos/ash/components/kcer", "//components/user_manager", "//content/test:test_support", "//crypto:test_support",
diff --git a/chrome/browser/ash/kcer/DIR_METADATA b/chrome/browser/ash/kcer/DIR_METADATA index 05b456a..d26e002 100644 --- a/chrome/browser/ash/kcer/DIR_METADATA +++ b/chrome/browser/ash/kcer/DIR_METADATA
@@ -1 +1 @@ -mixins: "//ash/components/kcer/COMMON_METADATA" +mixins: "//chromeos/ash/components/kcer/COMMON_METADATA"
diff --git a/chrome/browser/ash/kcer/OWNERS b/chrome/browser/ash/kcer/OWNERS index f1165233..4194e2ae 100644 --- a/chrome/browser/ash/kcer/OWNERS +++ b/chrome/browser/ash/kcer/OWNERS
@@ -1 +1 @@ -file://ash/components/kcer/OWNERS +file://chromeos/ash/components/kcer/OWNERS
diff --git a/chrome/browser/ash/kcer/kcer_factory_ash.cc b/chrome/browser/ash/kcer/kcer_factory_ash.cc index f08cbfcb..b3e974b2 100644 --- a/chrome/browser/ash/kcer/kcer_factory_ash.cc +++ b/chrome/browser/ash/kcer/kcer_factory_ash.cc
@@ -4,10 +4,6 @@ #include "chrome/browser/ash/kcer/kcer_factory_ash.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/extra_instances.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_token.h" #include "ash/constants/ash_switches.h" #include "ash/session/session_controller_impl.h" #include "ash/shell.h" @@ -20,6 +16,10 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" #include "chromeos/ash/components/browser_context_helper/browser_context_types.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/extra_instances.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_token.h" #include "chromeos/ash/components/network/system_token_cert_db_storage.h" #include "chromeos/ash/components/tpm/tpm_token_info_getter.h" #include "components/pref_registry/pref_registry_syncable.h"
diff --git a/chrome/browser/ash/kcer/kcer_factory_ash.h b/chrome/browser/ash/kcer/kcer_factory_ash.h index 371d80e..43699b9 100644 --- a/chrome/browser/ash/kcer/kcer_factory_ash.h +++ b/chrome/browser/ash/kcer/kcer_factory_ash.h
@@ -5,14 +5,14 @@ #ifndef CHROME_BROWSER_ASH_KCER_KCER_FACTORY_ASH_H_ #define CHROME_BROWSER_ASH_KCER_KCER_FACTORY_ASH_H_ -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_token.h" #include "ash/public/cpp/session/session_observer.h" #include "base/feature_list.h" #include "base/no_destructor.h" #include "chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_token.h" #include "chromeos/ash/components/tpm/tpm_token_info_getter.h" class Profile;
diff --git a/chrome/browser/ash/kcer/kcer_factory_ash_no_nss_browsertest.cc b/chrome/browser/ash/kcer/kcer_factory_ash_no_nss_browsertest.cc index 3bebc92..a11d328 100644 --- a/chrome/browser/ash/kcer/kcer_factory_ash_no_nss_browsertest.cc +++ b/chrome/browser/ash/kcer/kcer_factory_ash_no_nss_browsertest.cc
@@ -4,8 +4,6 @@ #include <memory> -#include "ash/components/kcer/extra_instances.h" -#include "ash/components/kcer/kcer.h" #include "ash/constants/ash_switches.h" #include "base/memory/weak_ptr.h" #include "base/test/test_future.h" @@ -20,6 +18,8 @@ #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" +#include "chromeos/ash/components/kcer/extra_instances.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/kcer/kcer_factory_ash_nss_browsertest.cc b/chrome/browser/ash/kcer/kcer_factory_ash_nss_browsertest.cc index b8fe19a..dd8dd16 100644 --- a/chrome/browser/ash/kcer/kcer_factory_ash_nss_browsertest.cc +++ b/chrome/browser/ash/kcer/kcer_factory_ash_nss_browsertest.cc
@@ -2,7 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/extra_instances.h" #include "base/test/scoped_feature_list.h" #include "base/test/test_future.h" #include "chrome/browser/ash/kcer/kcer_factory_ash.h" @@ -11,6 +10,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/testing_profile.h" +#include "chromeos/ash/components/kcer/extra_instances.h" #include "content/public/test/browser_test.h" #include "crypto/scoped_test_system_nss_key_slot.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/kcer/nssdb_migration/BUILD.gn b/chrome/browser/ash/kcer/nssdb_migration/BUILD.gn index f4981d3..2f21694 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/BUILD.gn +++ b/chrome/browser/ash/kcer/nssdb_migration/BUILD.gn
@@ -17,12 +17,12 @@ public_deps = [ "//chrome/browser:browser_public_dependencies" ] deps = [ - "//ash/components/kcer", "//ash/constants", "//base", "//chrome/browser/ash/profiles", "//chrome/browser/profiles:profile", "//chrome/common", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/network", "//chromeos/ash/components/tpm", "//chromeos/constants", @@ -45,8 +45,6 @@ deps = [ ":nssdb_migration", - "//ash/components/kcer", - "//ash/components/kcer:test_support", "//ash/constants", "//base", "//base/test:test_support", @@ -54,6 +52,8 @@ "//chrome/browser/ash/login/users:test_support", "//chrome/test:test_support", "//chromeos/ash/components/browser_context_helper", + "//chromeos/ash/components/kcer", + "//chromeos/ash/components/kcer:test_support", "//chromeos/constants", "//components/prefs", "//components/sync_preferences",
diff --git a/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper.h b/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper.h index 19045f5..273a19e 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper.h +++ b/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_ASH_KCER_NSSDB_MIGRATION_KCER_ROLLBACK_HELPER_H_ #define CHROME_BROWSER_ASH_KCER_NSSDB_MIGRATION_KCER_ROLLBACK_HELPER_H_ -#include "ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" #include "chromeos/ash/components/tpm/tpm_token_info_getter.h" #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper_unittest.cc b/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper_unittest.cc index 57d8928..030ec0e 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper_unittest.cc +++ b/chrome/browser/ash/kcer/nssdb_migration/kcer_rollback_helper_unittest.cc
@@ -12,7 +12,6 @@ #include <memory> -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" #include "ash/constants/ash_features.h" #include "base/test/gmock_callback_support.h" #include "base/test/gmock_move_support.h" @@ -21,6 +20,7 @@ #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_browser_process.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/dbus/tpm_manager/tpm_manager_client.h" #include "components/prefs/pref_registry_simple.h"
diff --git a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.cc b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.cc index 6e834c6..9d48e5ef 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.cc +++ b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.cc
@@ -16,7 +16,6 @@ #include <utility> #include <vector> -#include "ash/components/kcer/cert_cache.h" #include "ash/constants/ash_features.h" #include "base/metrics/histogram_functions.h" #include "base/task/bind_post_task.h" @@ -26,6 +25,7 @@ #include "chrome/browser/net/nss_service.h" #include "chrome/browser/net/nss_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chromeos/ash/components/kcer/cert_cache.h" #include "chromeos/ash/components/network/certificate_helper.h" #include "content/public/browser/browser_thread.h" #include "net/cert/nss_cert_database.h"
diff --git a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.h b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.h index 3953247..da7653e 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.h +++ b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator.h
@@ -7,9 +7,9 @@ #include <memory> -#include "ash/components/kcer/kcer.h" #include "base/no_destructor.h" #include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "components/keyed_service/core/keyed_service.h" #include "net/cert/scoped_nss_types.h"
diff --git a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator_unittest.cc b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator_unittest.cc index 7ffce9e..7a8a3b0 100644 --- a/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator_unittest.cc +++ b/chrome/browser/ash/kcer/nssdb_migration/pkcs12_migrator_unittest.cc
@@ -6,10 +6,6 @@ #include <memory> -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_impl.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/test/gmock_callback_support.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/test_future.h" @@ -18,6 +14,10 @@ #include "chrome/browser/net/fake_nss_service.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "components/user_manager/scoped_user_manager.h" #include "content/public/test/browser_task_environment.h" #include "net/cert/scoped_nss_types.h"
diff --git a/chrome/browser/ash/keyed_service/DEPS b/chrome/browser/ash/keyed_service/DEPS index 2311322..1a7bfdc 100644 --- a/chrome/browser/ash/keyed_service/DEPS +++ b/chrome/browser/ash/keyed_service/DEPS
@@ -51,7 +51,6 @@ "+chrome/browser/ash/scanning", "+chrome/browser/ash/secure_channel", "+chrome/browser/ash/smb_client", - "+chrome/browser/ash/sparky", "+chrome/browser/ash/sync", "+chrome/browser/ash/system_web_apps", "+chrome/browser/ash/tether",
diff --git a/chrome/browser/ash/login/screens/consolidated_consent_screen.cc b/chrome/browser/ash/login/screens/consolidated_consent_screen.cc index f4c4a93..6c75de2 100644 --- a/chrome/browser/ash/login/screens/consolidated_consent_screen.cc +++ b/chrome/browser/ash/login/screens/consolidated_consent_screen.cc
@@ -86,12 +86,17 @@ ash_switch); } - const char* url_path = kTermsTypeToUrlAndSwitch.at(terms_type).first; - if (terms_type == ToS::GOOGLE_EULA || terms_type == ToS::CROS_EULA) { - return base::StringPrintfNonConstexpr( - url_path, g_browser_process->GetApplicationLocale().c_str()); + if (terms_type == ToS::GOOGLE_EULA) { + return base::StringPrintf( + chrome::kGoogleEulaOnlineURLPath, + g_browser_process->GetApplicationLocale().c_str()); } - return url_path; + if (terms_type == ToS::CROS_EULA) { + return base::StringPrintf( + chrome::kCrosEulaOnlineURLPath, + g_browser_process->GetApplicationLocale().c_str()); + } + return kTermsTypeToUrlAndSwitch.at(terms_type).first; } ConsolidatedConsentScreen::RecoveryOptInResult GetRecoveryOptInResult(
diff --git a/chrome/browser/ash/login/session/DEPS b/chrome/browser/ash/login/session/DEPS index 37a3ee5..ccb622f 100644 --- a/chrome/browser/ash/login/session/DEPS +++ b/chrome/browser/ash/login/session/DEPS
@@ -50,7 +50,6 @@ "+chrome/browser/ash/release_notes", "+chrome/browser/ash/session_length_limiter.h", "+chrome/browser/ash/settings", - "+chrome/browser/ash/sparky/sparky_manager_service_factory.h", "+chrome/browser/ash/system_web_apps/apps/help_app", "+chrome/browser/ash/tether", "+chrome/browser/ash/tpm",
diff --git a/chrome/browser/ash/magic_boost/BUILD.gn b/chrome/browser/ash/magic_boost/BUILD.gn index 8c467eb..efb442c 100644 --- a/chrome/browser/ash/magic_boost/BUILD.gn +++ b/chrome/browser/ash/magic_boost/BUILD.gn
@@ -95,14 +95,14 @@ "//ash/constants", "//base", "//base/test:test_support", - "//chrome/browser/ash/input_method:input_method", + "//chrome/browser/ash/input_method", "//chrome/browser/ash/mahi:test_util", - "//chrome/browser/ui/chromeos/magic_boost:magic_boost", - "//chrome/browser/ui/chromeos/magic_boost:magic_boost_constants", - "//chrome/browser/ui/views/mahi:mahi", + "//chrome/browser/ui/ash/magic_boost", + "//chrome/browser/ui/ash/magic_boost:magic_boost_constants", + "//chrome/browser/ui/views/mahi", "//chrome/browser/ui/webui/ash/mako", "//chrome/test:test_support", - "//chromeos/components/magic_boost/public/cpp:cpp", + "//chromeos/components/magic_boost/public/cpp", "//chromeos/components/mahi/public/cpp", "//chromeos/constants", "//content/public/browser",
diff --git a/chrome/browser/ash/magic_boost/DEPS b/chrome/browser/ash/magic_boost/DEPS index 72780b9..f74dc7b 100644 --- a/chrome/browser/ash/magic_boost/DEPS +++ b/chrome/browser/ash/magic_boost/DEPS
@@ -31,8 +31,8 @@ "magic_boost_browsertest.cc": [ "+chrome/browser/ash/mahi/mahi_test_util.h", "+chrome/browser/ash/mahi/mahi_ui_browser_test_base.h", + "+chrome/browser/ui/ash/magic_boost", "+chrome/browser/ui/browser.h", - "+chrome/browser/ui/chromeos/magic_boost", "+chrome/browser/ui/views/mahi/mahi_menu_view.h", "+chrome/browser/ui/webui/ash/mako", "+chrome/test/base",
diff --git a/chrome/browser/ash/magic_boost/magic_boost_browsertest.cc b/chrome/browser/ash/magic_boost/magic_boost_browsertest.cc index fe3ab7e93..fdf6734 100644 --- a/chrome/browser/ash/magic_boost/magic_boost_browsertest.cc +++ b/chrome/browser/ash/magic_boost/magic_boost_browsertest.cc
@@ -21,9 +21,9 @@ #include "chrome/browser/ash/mahi/mahi_test_util.h" #include "chrome/browser/ash/mahi/mahi_ui_browser_test_base.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h" #include "chrome/browser/ui/views/mahi/mahi_menu_view.h" #include "chrome/browser/ui/webui/ash/mako/mako_bubble_coordinator.h" #include "chrome/test/base/chrome_test_utils.h"
diff --git a/chrome/browser/ash/net/BUILD.gn b/chrome/browser/ash/net/BUILD.gn index 4eb1c98cc..7f265c8 100644 --- a/chrome/browser/ash/net/BUILD.gn +++ b/chrome/browser/ash/net/BUILD.gn
@@ -50,7 +50,6 @@ deps = [ "//ash/components/arc", - "//ash/components/kcer", "//ash/public/cpp", "//base", "//chrome/browser:browser_process", @@ -72,6 +71,7 @@ "//chromeos/ash/components/dbus/system_proxy", "//chromeos/ash/components/dbus/system_proxy:system_proxy_proto", "//chromeos/ash/components/install_attributes", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/login/login_state", "//chromeos/ash/components/mojo_service_manager", "//chromeos/ash/components/nearby/common/connections_manager", @@ -137,7 +137,6 @@ deps = [ ":net", ":test_support", - "//ash/components/kcer:test_support", "//ash/constants", "//base", "//base/test:test_support", @@ -153,6 +152,7 @@ "//chromeos/ash/components/dbus/shill", "//chromeos/ash/components/dbus/system_proxy", "//chromeos/ash/components/dbus/system_proxy:system_proxy_proto", + "//chromeos/ash/components/kcer:test_support", "//chromeos/ash/components/login/login_state", "//chromeos/ash/components/network", "//chromeos/ash/components/network:test_support",
diff --git a/chrome/browser/ash/net/DEPS b/chrome/browser/ash/net/DEPS index c95897c5..0cf56ce4 100644 --- a/chrome/browser/ash/net/DEPS +++ b/chrome/browser/ash/net/DEPS
@@ -3,7 +3,7 @@ # details. "-chrome", - "+ash/components/kcer", + "+chromeos/ash/components/kcer", # This directory is in //chrome, which violates the rule above. Allow this # directory to #include its own files.
diff --git a/chrome/browser/ash/net/client_cert_store_kcer.cc b/chrome/browser/ash/net/client_cert_store_kcer.cc index 082ecd5..63312c62 100644 --- a/chrome/browser/ash/net/client_cert_store_kcer.cc +++ b/chrome/browser/ash/net/client_cert_store_kcer.cc
@@ -8,8 +8,6 @@ #include <iterator> #include <utility> -#include "ash/components/kcer/client_cert_identity_kcer.h" -#include "ash/components/kcer/kcer.h" #include "ash/constants/ash_features.h" #include "base/functional/bind.h" #include "base/functional/callback.h" @@ -20,6 +18,8 @@ #include "base/threading/scoped_blocking_call.h" #include "chrome/browser/ash/net/client_cert_filter.h" #include "chrome/browser/certificate_provider/certificate_provider.h" +#include "chromeos/ash/components/kcer/client_cert_identity_kcer.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/base/features.h" #include "net/ssl/client_cert_matcher.h" #include "net/ssl/client_cert_store_nss.h"
diff --git a/chrome/browser/ash/net/client_cert_store_kcer.h b/chrome/browser/ash/net/client_cert_store_kcer.h index 6001447..22a4b291 100644 --- a/chrome/browser/ash/net/client_cert_store_kcer.h +++ b/chrome/browser/ash/net/client_cert_store_kcer.h
@@ -9,10 +9,10 @@ #include <string> #include <vector> -#include "ash/components/kcer/kcer.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/ssl/client_cert_matcher.h" #include "net/ssl/client_cert_store.h"
diff --git a/chrome/browser/ash/net/client_cert_store_kcer_unittest.cc b/chrome/browser/ash/net/client_cert_store_kcer_unittest.cc index f42d25a2d..e8e6271 100644 --- a/chrome/browser/ash/net/client_cert_store_kcer_unittest.cc +++ b/chrome/browser/ash/net/client_cert_store_kcer_unittest.cc
@@ -8,7 +8,6 @@ #include <optional> #include <string> -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/functional/bind.h" @@ -21,6 +20,7 @@ #include "base/run_loop.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/certificate_provider/certificate_provider.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "content/public/test/browser_task_environment.h" #include "crypto/nss_util.h" #include "crypto/nss_util_internal.h"
diff --git a/chrome/browser/ash/platform_keys/BUILD.gn b/chrome/browser/ash/platform_keys/BUILD.gn index 128d1db..9961c997 100644 --- a/chrome/browser/ash/platform_keys/BUILD.gn +++ b/chrome/browser/ash/platform_keys/BUILD.gn
@@ -18,7 +18,6 @@ public_deps = [ "//chrome/browser:browser_public_dependencies" ] deps = [ - "//ash/components/kcer", "//ash/constants:constants", "//base", "//chrome/browser:browser_process", @@ -27,6 +26,7 @@ "//chrome/browser/chromeos/platform_keys", "//chrome/browser/profiles:profile", "//chromeos/ash/components/chaps_util", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/network", "//components/keyed_service/core", "//components/policy/core/common", @@ -76,7 +76,6 @@ deps = [ ":platform_keys", ":test_support", - "//ash/components/kcer:chaps_proto", "//base", "//chrome/browser/chromeos/platform_keys", "//chrome/browser/policy:test_support", @@ -84,6 +83,7 @@ "//chrome/browser/ui", "//chrome/test:test_support", "//chromeos/ash/components/chaps_util:test_support", + "//chromeos/ash/components/kcer:chaps_proto", "//components/policy/core/common", "//crypto", "//net",
diff --git a/chrome/browser/ash/platform_keys/key_permissions/BUILD.gn b/chrome/browser/ash/platform_keys/key_permissions/BUILD.gn index 80c98d1c..f4b2c18 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/BUILD.gn +++ b/chrome/browser/ash/platform_keys/key_permissions/BUILD.gn
@@ -30,7 +30,6 @@ public_deps = [ "//chrome/browser:browser_public_dependencies" ] deps = [ - "//ash/components/kcer:chaps_proto", "//base", "//chrome/browser:browser_process", "//chrome/browser/ash/app_list/arc", @@ -40,6 +39,7 @@ "//chrome/browser/chromeos/platform_keys", "//chrome/browser/profiles:profile", "//chrome/common", + "//chromeos/ash/components/kcer:chaps_proto", "//components/keyed_service/content", "//components/keyed_service/core", "//components/policy/core/browser", @@ -82,7 +82,6 @@ deps = [ ":key_permissions", - "//ash/components/kcer:chaps_proto", "//base/test:test_support", "//chrome/browser:browser_process", "//chrome/browser/ash/platform_keys", @@ -91,6 +90,7 @@ "//chrome/browser/profiles:profile", "//chrome/common", "//chrome/test:test_support", + "//chromeos/ash/components/kcer:chaps_proto", "//components/prefs", "//content/test:test_support", "//testing/gtest", @@ -111,13 +111,13 @@ ":test_support", "//ash/components/arc", "//ash/components/arc:arc_test_support", - "//ash/components/kcer:chaps_proto", "//base/test:test_support", "//chrome/browser/ash/app_list/arc:test_support", "//chrome/browser/ash/platform_keys", "//chrome/browser/ash/platform_keys:test_support", "//chrome/browser/chromeos/platform_keys", "//chrome/test:test_support", + "//chromeos/ash/components/kcer:chaps_proto", "//components/policy/core/common", "//content/test:test_support", "//testing/gmock",
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc index f5420a3a..d8bbb01 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc +++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_browsertest.cc
@@ -10,7 +10,6 @@ #include <utility> #include <vector> -#include "ash/components/kcer/key_permissions.pb.h" #include "base/test/test_future.h" #include "base/values.h" #include "chrome/browser/ash/login/test/device_state_mixin.h" @@ -28,6 +27,7 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/ash/scoped_test_system_nss_key_slot_mixin.h" #include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "chromeos/ash/components/login/auth/public/user_context.h" #include "components/prefs/pref_test_utils.h" #include "components/signin/public/identity_manager/identity_test_utils.h"
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc index 5852efc..67a86f3 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc +++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.cc
@@ -11,7 +11,6 @@ #include <string> #include <vector> -#include "ash/components/kcer/key_permissions.pb.h" #include "base/containers/contains.h" #include "base/containers/queue.h" #include "base/functional/bind.h" @@ -30,6 +29,7 @@ #include "chrome/browser/chromeos/platform_keys/platform_keys.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/policy/core/common/policy_namespace.h" #include "components/policy/core/common/policy_service.h"
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_unittest.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_unittest.cc index 9f00e6bb..971da268 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_unittest.cc +++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_unittest.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/key_permissions.pb.h" #include "base/test/gmock_callback_support.h" #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/ash/platform_keys/key_permissions/key_permissions_manager_impl.h" #include "chrome/browser/ash/platform_keys/key_permissions/key_permissions_util.h" #include "chrome/browser/ash/platform_keys/mock_platform_keys_service.h" #include "chrome/common/pref_names.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/testing_pref_service.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_util.cc b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_util.cc index 21631c5..a34d8d6 100644 --- a/chrome/browser/ash/platform_keys/key_permissions/key_permissions_util.cc +++ b/chrome/browser/ash/platform_keys/key_permissions/key_permissions_util.cc
@@ -11,10 +11,10 @@ #include <utility> #include <vector> -#include "ash/components/kcer/key_permissions.pb.h" #include "base/base64.h" #include "base/values.h" #include "chrome/common/pref_names.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h"
diff --git a/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc b/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc index b2da4a4..f917338 100644 --- a/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc +++ b/chrome/browser/ash/platform_keys/platform_keys_service_factory.cc
@@ -6,7 +6,6 @@ #include <utility> -#include "ash/components/kcer/extra_instances.h" #include "ash/constants/ash_features.h" #include "base/functional/bind.h" #include "base/functional/callback.h" @@ -28,6 +27,7 @@ #include "chrome/browser/net/profile_network_context_service.h" #include "chrome/browser/net/profile_network_context_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chromeos/ash/components/kcer/extra_instances.h" #include "chromeos/ash/components/network/system_token_cert_db_storage.h" #include "components/user_manager/user.h" #include "content/public/browser/browser_task_traits.h"
diff --git a/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.cc b/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.cc index e3beb26c..02e3b262 100644 --- a/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.cc +++ b/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.cc
@@ -28,7 +28,8 @@ void CrdUmaLogger::LogSessionLaunchResult( ExtendedStartCrdSessionResultCode result_code) { base::UmaHistogramEnumeration( - GetUmaHistogramName(kMetricDeviceRemoteCommandCrdResultTemplate), + base::StringPrintf(kMetricDeviceRemoteCommandCrdResultTemplate, + FormatCrdSessionType(), FormatUserSessionType()), result_code); } @@ -36,19 +37,15 @@ // Warning: changing the number of buckets logged will make it impossible to // compare UMA logs recorded before and after the change! base::UmaHistogramCustomTimes( - /*name=*/GetUmaHistogramName( - kMetricDeviceRemoteCommandCrdSessionDurationTemplate), + /*name=*/base::StringPrintf( + kMetricDeviceRemoteCommandCrdSessionDurationTemplate, + FormatCrdSessionType(), FormatUserSessionType()), /*sample=*/duration, /*min=*/kMinDuration, /*max=*/kMaxDuration, /*buckets=*/kMaxDuration / kBucketSize); } -std::string CrdUmaLogger::GetUmaHistogramName(const char* name_template) const { - return base::StringPrintfNonConstexpr(name_template, FormatCrdSessionType(), - FormatUserSessionType()); -} - // Created a separate method to have fixed values for UMA logs. // The returned strings should not be changed, as they are logged as part of the // UMA keys.
diff --git a/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.h b/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.h index cb64548..816d0b5 100644 --- a/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.h +++ b/chrome/browser/ash/policy/remote_commands/crd/crd_uma_logger.h
@@ -5,8 +5,6 @@ #ifndef CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_CRD_UMA_LOGGER_H_ #define CHROME_BROWSER_ASH_POLICY_REMOTE_COMMANDS_CRD_CRD_UMA_LOGGER_H_ -#include <string> - #include "base/time/time.h" #include "chrome/browser/ash/policy/remote_commands/crd/crd_remote_command_utils.h" @@ -26,7 +24,6 @@ void LogSessionDuration(base::TimeDelta duration); private: - std::string GetUmaHistogramName(const char* name_template) const; const char* FormatCrdSessionType() const; const char* FormatUserSessionType() const;
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc index 27f058d..bd36d43c 100644 --- a/chrome/browser/certificate_manager_model.cc +++ b/chrome/browser/certificate_manager_model.cc
@@ -51,10 +51,10 @@ #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_histograms.h" #include "chrome/browser/ash/kcer/kcer_factory_ash.h" #include "chrome/browser/policy/networking/user_network_configuration_updater_ash.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" #include "chromeos/components/onc/certificate_scope.h" #endif // BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/certificate_manager_model_unittest.cc b/chrome/browser/certificate_manager_model_unittest.cc index 2e33830..c9667d7 100644 --- a/chrome/browser/certificate_manager_model_unittest.cc +++ b/chrome/browser/certificate_manager_model_unittest.cc
@@ -30,7 +30,7 @@ #endif // BUILDFLAG(IS_CHROMEOS) #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/components/kcer/extra_instances.h" +#include "chromeos/ash/components/kcer/extra_instances.h" #endif namespace {
diff --git a/chrome/browser/chromeos/policy/dlp/test/dlp_files_test_base.cc b/chrome/browser/chromeos/policy/dlp/test/dlp_files_test_base.cc index 798144c..20fde36 100644 --- a/chrome/browser/chromeos/policy/dlp/test/dlp_files_test_base.cc +++ b/chrome/browser/chromeos/policy/dlp/test/dlp_files_test_base.cc
@@ -8,6 +8,7 @@ #include "chrome/test/base/testing_profile.h" namespace policy { +#include "google_apis/gaia/gaia_id.h" DlpFilesTestBase::DlpFilesTestBase() : task_environment_(std::make_unique<content::BrowserTaskEnvironment>()) {} @@ -18,7 +19,7 @@ void DlpFilesTestBase::SetUp() { AccountId account_id = - AccountId::FromUserEmailGaiaId("test@example.com", "12345"); + AccountId::FromUserEmailGaiaId("test@example.com", GaiaId("12345")); auto user_manager = std::make_unique<ash::FakeChromeUserManager>(); {
diff --git a/chrome/browser/chromeos/tablet_mode/BUILD.gn b/chrome/browser/chromeos/tablet_mode/BUILD.gn index 7c7d9ff..45dc738 100644 --- a/chrome/browser/chromeos/tablet_mode/BUILD.gn +++ b/chrome/browser/chromeos/tablet_mode/BUILD.gn
@@ -68,8 +68,8 @@ "//chrome/browser/ash/system_web_apps", "//chrome/browser/profiles:profile", "//chrome/browser/ui", + "//chrome/browser/ui/ash:test_support", "//chrome/browser/ui/ash/system_web_apps", - "//chrome/browser/ui/chromeos:test_support", "//chrome/common", "//chrome/common:constants", "//chrome/test:test_support",
diff --git a/chrome/browser/chromeos/tablet_mode/DEPS b/chrome/browser/chromeos/tablet_mode/DEPS index 576298d..6fbab10 100644 --- a/chrome/browser/chromeos/tablet_mode/DEPS +++ b/chrome/browser/chromeos/tablet_mode/DEPS
@@ -16,13 +16,13 @@ "+chrome/browser/chromeos/arc", "+chrome/browser/profiles/profile.h", "+chrome/browser/search/search.h", + "+chrome/browser/ui/ash/test_util.h", "+chrome/browser/ui/browser_finder.h", "+chrome/browser/ui/browser.h", "+chrome/browser/ui/browser_list.h", "+chrome/browser/ui/browser_tab_strip_tracker_delegate.h", "+chrome/browser/ui/browser_tab_strip_tracker.h", "+chrome/browser/ui/browser_window.h", - "+chrome/browser/ui/chromeos/test_util.h", "+chrome/browser/ui/settings_window_manager_chromeos.h", "+chrome/browser/ui/tabs/tab_strip_model.h", "+chrome/browser/ui/tabs/tab_strip_model_observer.h",
diff --git a/chrome/browser/chromeos/tablet_mode/tablet_mode_page_behavior_browsertest.cc b/chrome/browser/chromeos/tablet_mode/tablet_mode_page_behavior_browsertest.cc index 62ae4a68..f0b34ca5 100644 --- a/chrome/browser/chromeos/tablet_mode/tablet_mode_page_behavior_browsertest.cc +++ b/chrome/browser/chromeos/tablet_mode/tablet_mode_page_behavior_browsertest.cc
@@ -3,9 +3,9 @@ // found in the LICENSE file. #include "chrome/browser/browser_features.h" +#include "chrome/browser/ui/ash/test_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/chromeos/test_util.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/url_constants.h" #include "chrome/common/webui_url_constants.h"
diff --git a/chrome/browser/companion/text_finder/text_highlighter_manager.h b/chrome/browser/companion/text_finder/text_highlighter_manager.h index 4bb40d5..017bb14a 100644 --- a/chrome/browser/companion/text_finder/text_highlighter_manager.h +++ b/chrome/browser/companion/text_finder/text_highlighter_manager.h
@@ -38,6 +38,11 @@ void CreateTextHighlighterAndRemoveExistingInstance( const std::string& text_directive); + // Returns the text highlighter for testing. + internal::TextHighlighter* get_text_highlighter_for_testing() { + return text_highlighter_.get(); + } + private: friend class content::PageUserData<TextHighlighterManager>; FRIEND_TEST_ALL_PREFIXES(TextHighlighterManagerTest, TextHighlighterTest);
diff --git a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc index d91196d..68c9192 100644 --- a/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc +++ b/chrome/browser/extensions/api/autofill_private/autofill_private_api.cc
@@ -115,6 +115,30 @@ return re2::RE2::PartialMatch(name, autofill::kCjkNameSeperatorsRe); } +// Logs whether the alternative name in a new/updated profile contains a +// separator. +void RecordAlternativeNameSeparatorUsage( + const autofill::AutofillProfile& profile, + const autofill::AutofillProfile* existing_profile) { + const std::u16string existing_alternative_name = + existing_profile + ? existing_profile->GetInfo(autofill::ALTERNATIVE_FULL_NAME, + extensions::ExtensionsBrowserClient::Get() + ->GetApplicationLocale()) + : std::u16string(); + + const std::u16string saved_alternative_name = profile.GetInfo( + autofill::ALTERNATIVE_FULL_NAME, + extensions::ExtensionsBrowserClient::Get()->GetApplicationLocale()); + + if (!saved_alternative_name.empty() && + saved_alternative_name != existing_alternative_name) { + base::UmaHistogramBoolean( + "Autofill.Settings.EditedAlternativeNameContainsASeparator", + HasNameSeparator(base::UTF16ToUTF8(saved_alternative_name))); + } +} + autofill::BrowserAutofillManager* GetBrowserAutofillManager( content::WebContents* web_contents) { if (!web_contents) { @@ -244,23 +268,7 @@ } profile.FinalizeAfterImport(); - const std::u16string existing_alternative_name = - existing_profile - ? existing_profile->GetInfo( - autofill::ALTERNATIVE_FULL_NAME, - ExtensionsBrowserClient::Get()->GetApplicationLocale()) - : std::u16string(); - - const std::u16string saved_alternative_name = - profile.GetInfo(autofill::ALTERNATIVE_FULL_NAME, - ExtensionsBrowserClient::Get()->GetApplicationLocale()); - - if (!saved_alternative_name.empty() && - saved_alternative_name != existing_alternative_name) { - base::UmaHistogramBoolean( - "Autofill.Settings.EditedAlternativeNameContainsASeparator", - HasNameSeparator(base::UTF16ToUTF8(saved_alternative_name))); - } + RecordAlternativeNameSeparatorUsage(profile, existing_profile); if (address->language_code) { profile.set_language_code(*address->language_code);
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index b1c5833..a8807888 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
@@ -864,15 +864,7 @@ return; } - if (!password_manager::features_util::AreAccountStorageOptInPromosAllowed()) { - // No need to show a reauth dialog in this case, just enable directly. - client->GetPasswordFeatureManager()->OptInToAccountStorage(); - return; - } - - // The enabled pref is automatically set upon successful reauth. - client->TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSettings, base::DoNothing()); + client->GetPasswordFeatureManager()->OptInToAccountStorage(); } std::vector<api::passwords_private::PasswordUiEntry>
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc index 7062d86..184531ba 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl_unittest.cc
@@ -231,11 +231,6 @@ ~MockPasswordManagerClient() override = default; // ChromePasswordManagerClient overrides. - MOCK_METHOD(void, - TriggerReauthForPrimaryAccount, - (signin_metrics::ReauthAccessPoint, - base::OnceCallback<void(ReauthSucceeded)>), - (override)); const password_manager::MockPasswordFeatureManager* GetPasswordFeatureManager() const override { return &mock_password_feature_manager_; @@ -1037,34 +1032,20 @@ 1); } -TEST_F(PasswordsPrivateDelegateImplTest, - TestShouldNotReauthForOptInIfExplicitSigninUIEnabled) { - base::test::ScopedFeatureList scoped_feature_list( - switches::kExplicitBrowserSigninUIOnDesktop); - profile()->GetPrefs()->SetBoolean(prefs::kExplicitBrowserSignin, false); - +TEST_F(PasswordsPrivateDelegateImplTest, TestShouldOptInToAccountStorage) { std::unique_ptr<content::WebContents> web_contents = CreateWebContents(); auto* client = MockPasswordManagerClient::CreateForWebContentsAndGet(web_contents.get()); ON_CALL(*(client->GetPasswordFeatureManager()), IsOptedInForAccountStorage) .WillByDefault(Return(false)); - EXPECT_CALL(*client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSettings, _)) - .Times(0); + EXPECT_CALL(*client->GetPasswordFeatureManager(), OptInToAccountStorage); auto delegate = CreateDelegate(); delegate->SetAccountStorageEnabled(true, web_contents.get()); - - profile()->GetPrefs()->SetBoolean(prefs::kExplicitBrowserSignin, true); - - // Implicit and explicit sign-ins are treated alike. - delegate->SetAccountStorageEnabled(true, web_contents.get()); } -TEST_F(PasswordsPrivateDelegateImplTest, - TestShouldNotReauthForOptOutAndShouldSetPref) { +TEST_F(PasswordsPrivateDelegateImplTest, TestShouldOptOutOfAccountStorage) { std::unique_ptr<content::WebContents> web_contents = CreateWebContents(); auto* client = MockPasswordManagerClient::CreateForWebContentsAndGet(web_contents.get()); @@ -1073,10 +1054,6 @@ ON_CALL(*feature_manager, IsOptedInForAccountStorage) .WillByDefault(Return(true)); - EXPECT_CALL(*client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSettings, _)) - .Times(0); EXPECT_CALL(*feature_manager, OptOutOfAccountStorage); auto delegate = CreateDelegate();
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index dba233f..55ed202 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -5454,6 +5454,11 @@ "expiry_milestone": 135 }, { + "name": "ios-youtube-incognito", + "owners": ["erahmaoui@google.com", "olivierrobin@google.com", "bling-flags@google.com"], + "expiry_milestone": 138 + }, + { "name": "ip-protection-proxy-opt-out", "owners": [ "awillia@chromium.org", "//chrome/browser/ip_protection/OWNERS" ], "expiry_milestone": 136 @@ -7553,7 +7558,7 @@ { "name": "replace-sync-promos-with-sign-in-promos", "owners": [ "mastiz@chromium.org", "bsazonov@chromium.org", "chrome-sync-dev@google.com", "chrome-signin-team@google.com" ], - "expiry_milestone": 131 + "expiry_milestone": 135 }, { "name": "reset-audio-selection-improvement-pref", @@ -8143,30 +8148,6 @@ "expiry_milestone": 160 }, { - "name": "sparky", - "owners": [ - "laurencom@chromium.org", - "tby@chromium.org" - ], - "expiry_milestone": 140 - }, - { - "name": "sparky-feature-key", - "owners": [ - "laurencom@chromium.org", - "tby@chromium.org" - ], - "expiry_milestone": 142 - }, - { - "name": "sparky-server-url", - "owners": [ - "laurencom@chromium.org", - "tby@chromium.org" - ], - "expiry_milestone": 144 - }, - { "name": "spectre-v2-mitigation", "owners": [ "chromeos-security@google.com" @@ -8195,6 +8176,11 @@ "expiry_milestone": 94 }, { + "name": "storage-access-api-follows-same-origin-policy", + "owners": [ "cfredric@chromium.org", "potassium-auth-embeds@google.com" ], + "expiry_milestone": 145 + }, + { "name": "storage-access-headers", "owners": [ "cfredric@chromium.org", "potassium-auth-embeds@google.com" ], "expiry_milestone": 140
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 5b0b6d8..e3e67a2 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3304,7 +3304,8 @@ const char kReplaceSyncPromosWithSignInPromosName[] = "Replace all sync-related UI with sign-in ones"; const char kReplaceSyncPromosWithSignInPromosDescription[] = - "When enabled, all sync-related promos will be replaced by sign-in ones."; + "Follow-ups to the project that replaced sync-related UIs with sign-in " + "ones."; #endif // BUILDFLAG(IS_ANDROID) const char kResetShortcutCustomizationsName[] = @@ -3603,6 +3604,12 @@ const char kSmoothScrollingDescription[] = "Animate smoothly when scrolling page content."; +const char kStorageAccessApiFollowsSameOriginPolicyName[] = + "Storage Access API follows Same Origin Policy"; +const char kStorageAccessApiFollowsSameOriginPolicyDescription[] = + "Modifies the Storage Access API to follow the Same Origin Policy with " + "respect to security."; + const char kStorageAccessHeadersName[] = "Storage Access Headers"; const char kStorageAccessHeadersDescription[] = "Enables HTTP headers related to the Storage Access API."; @@ -7223,17 +7230,6 @@ "the transition into Overview as the gesture is done. Allows for the user " "to scrub (move forward and backward) through Overview."; -const char kSparkyName[] = "Sparky feature"; -const char kSparkyDescription[] = "Enable Sparky feature on ChromeOS."; - -const char kSparkyFeatureKeyName[] = "Feature key for Sparky feature"; -const char kSparkyFeatureKeyDescription[] = - "Feature key to use the Sparky feature on ChromeOS."; - -const char kSparkyServerUrlName[] = "Server Url for Sparky feature"; -const char kSparkyServerUrlDescription[] = - "The Url of the server which the Sparky feature will call on ChromeOS."; - const char kSpectreVariant2MitigationName[] = "Spectre variant 2 mitigation"; const char kSpectreVariant2MitigationDescription[] = "Controls whether Spectre variant 2 mitigation is enabled when "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 5c65da68..5d186545 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2070,6 +2070,9 @@ extern const char kSmoothScrollingName[]; extern const char kSmoothScrollingDescription[]; +extern const char kStorageAccessApiFollowsSameOriginPolicyName[]; +extern const char kStorageAccessApiFollowsSameOriginPolicyDescription[]; + extern const char kStorageAccessHeadersName[]; extern const char kStorageAccessHeadersDescription[]; @@ -4222,15 +4225,6 @@ extern const char kContinuousOverviewScrollAnimationName[]; extern const char kContinuousOverviewScrollAnimationDescription[]; -extern const char kSparkyName[]; -extern const char kSparkyDescription[]; - -extern const char kSparkyFeatureKeyName[]; -extern const char kSparkyFeatureKeyDescription[]; - -extern const char kSparkyServerUrlName[]; -extern const char kSparkyServerUrlDescription[]; - extern const char kSpectreVariant2MitigationName[]; extern const char kSpectreVariant2MitigationDescription[];
diff --git a/chrome/browser/password_manager/android/login_db_deprecation_runner_factory.cc b/chrome/browser/password_manager/android/login_db_deprecation_runner_factory.cc index 4fe59496..2a046fb5 100644 --- a/chrome/browser/password_manager/android/login_db_deprecation_runner_factory.cc +++ b/chrome/browser/password_manager/android/login_db_deprecation_runner_factory.cc
@@ -9,6 +9,7 @@ #include "build/build_config.h" #include "chrome/browser/password_manager/android/password_manager_util_bridge.h" #include "chrome/browser/profiles/profile.h" +#include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h" #include "components/password_manager/core/browser/export/login_db_deprecation_runner.h" #include "components/password_manager/core/browser/features/password_features.h" #include "components/password_manager/core/browser/password_manager_buildflags.h" @@ -61,5 +62,6 @@ } return std::make_unique<password_manager::LoginDbDeprecationRunner>( - profile->GetPrefs(), profile->GetPath()); + std::make_unique<password_manager::LoginDbDeprecationPasswordExporter>( + profile->GetPrefs(), profile->GetPath())); }
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.cc b/chrome/browser/password_manager/chrome_password_manager_client.cc index 768b738..fb1ca2a 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client.cc
@@ -903,24 +903,6 @@ #endif } -void ChromePasswordManagerClient::TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback<void(ReauthSucceeded)> reauth_callback) { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - account_storage_auth_helper_.TriggerOptInReauth(access_point, - std::move(reauth_callback)); -#else - std::move(reauth_callback).Run(ReauthSucceeded(false)); -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) -} - -void ChromePasswordManagerClient::TriggerSignIn( - signin_metrics::AccessPoint access_point) { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - account_storage_auth_helper_.TriggerSignIn(access_point); -#endif -} - PrefService* ChromePasswordManagerClient::GetPrefs() const { return profile_->GetPrefs(); } @@ -1798,18 +1780,6 @@ #else credentials_filter_(this), #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - account_storage_auth_helper_( - profile_, - IdentityManagerFactory::GetForProfile(profile_), - &password_feature_manager_, - base::BindRepeating( - [](content::WebContents* web_contents) { - Browser* browser = chrome::FindBrowserWithTab(web_contents); - return browser ? browser->signin_view_controller() : nullptr; - }, - web_contents)), -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) log_router_(password_manager::PasswordManagerLogRouterFactory:: GetForBrowserContext(profile_)), helper_(this) {
diff --git a/chrome/browser/password_manager/chrome_password_manager_client.h b/chrome/browser/password_manager/chrome_password_manager_client.h index 3c3b4f2..a027dd6 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client.h +++ b/chrome/browser/password_manager/chrome_password_manager_client.h
@@ -67,10 +67,6 @@ #include "components/password_manager/core/browser/sync_credentials_filter.h" #endif -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/ui/passwords/account_storage_auth_helper.h" -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - class PasswordGenerationPopupObserver; class PasswordGenerationPopupControllerImpl; class Profile; @@ -215,10 +211,6 @@ void NotifyUserCredentialsWereLeaked( password_manager::LeakedPasswordDetails details) override; void NotifyKeychainError() override; - void TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback<void(ReauthSucceeded)> reauth_callback) override; - void TriggerSignIn(signin_metrics::AccessPoint access_point) override; PrefService* GetPrefs() const override; PrefService* GetLocalStatePrefs() const override; const syncer::SyncService* GetSyncService() const override; @@ -520,10 +512,6 @@ const password_manager::SyncCredentialsFilter credentials_filter_; #endif -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - AccountStorageAuthHelper account_storage_auth_helper_; -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) - const raw_ptr<autofill::LogRouter> log_router_; mutable std::unique_ptr<autofill::RoutingLogManager> log_manager_;
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc index 6f1d2abb..021b494 100644 --- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc +++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -278,8 +278,7 @@ const std::u16string& username, const std::u16string& password) override {} - void InformNoSavedCredentials( - bool should_show_popup_without_passwords) override {} + void InformNoSavedCredentials() override {} void FillIntoFocusedField(bool is_password, const std::u16string& credential) override {}
diff --git a/chrome/browser/password_manager/profile_password_store_factory.cc b/chrome/browser/password_manager/profile_password_store_factory.cc index 03c6e51b..9eae0a5 100644 --- a/chrome/browser/password_manager/profile_password_store_factory.cc +++ b/chrome/browser/password_manager/profile_password_store_factory.cc
@@ -106,7 +106,7 @@ password_manager::LoginDbDeprecationRunner* login_db_deprecation_runner = LoginDbDeprecationRunnerFactory::GetForProfile(profile); if (login_db_deprecation_runner) { - login_db_deprecation_runner->StartExport(ps); + login_db_deprecation_runner->StartExportWithDelay(ps); } #endif DelayReportingPasswordStoreMetrics(profile);
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index 34ccb4a1..d3ca898 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -321,6 +321,7 @@ #include "chrome/browser/apps/app_service/subscriber_crosapi_factory.h" #include "chrome/browser/ash/app_list/app_list_syncable_service_factory.h" #include "chrome/browser/ash/file_manager/cloud_upload_prefs_watcher.h" +#include "chrome/browser/ash/file_manager/cloud_upload_prompt_prefs_handler.h" #include "chrome/browser/ash/floating_sso/floating_sso_service_factory.h" #include "chrome/browser/ash/input_method/editor_mediator_factory.h" #include "chrome/browser/ash/keyed_service/browser_context_keyed_service_factories.h" @@ -764,6 +765,11 @@ if (chromeos::features::IsUploadOfficeToCloudForEnterpriseEnabled()) { chromeos::cloud_upload::CloudUploadPrefsWatcherFactory::GetInstance(); } + if (chromeos::features::IsUploadOfficeToCloudForEnterpriseEnabled() && + chromeos::features::IsUploadOfficeToCloudSyncEnabled()) { + chromeos::cloud_upload::CloudUploadPromptPrefsHandlerFactory::GetInstance(); + } + #endif ChromeSigninClientFactory::GetInstance(); #if BUILDFLAG(ENTERPRISE_CLIENT_CERTIFICATES)
diff --git a/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.html b/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.html index 2f9c4eb..6ed1cbf5 100644 --- a/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.html +++ b/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.html
@@ -45,12 +45,58 @@ on-change="saveWord_"></cr-input> <div class="category-div" > <div class="cr-form-field-label category-label">Category</div> - <!-- TODO(b/340393256): Make these options match actual POS values --> - <select class="md-select" class="entry-input"> - <option>ENTRY ROW ELEM POS Type 1</option> - <option>POS Type 2</option> - <option>POS Type 3</option> - <option selected>POS Type 4</option> + <!-- + These Japanese terms are not translated on purpose since they are technical linguistic terms + The option values needs to corresponds to the int value of the mojo enum JpPosType. + --> + <select id="posDropdownMenu" class="md-select" class="entry-input" on-change="onOptionChanged_"> + <!-- LINT.IfChange(JpPosType) --> + <option value="0" selected>品詞なし</option> + <option value="1">名詞</option> + <option value="2">短縮よみ</option> + <option value="3">サジェストのみ</option> + <option value="4">固有名詞</option> + <option value="5">人名</option> + <option value="6">姓</option> + <option value="7">名</option> + <option value="8">組織</option> + <option value="9">地名</option> + <option value="10">名詞サ変</option> + <option value="11">名詞形動</option> + <option value="12">数</option> + <option value="13">アルファベット</option> + <option value="14">記号</option> + <option value="15">顔文字</option> + <option value="16">副詞</option> + <option value="17">連体詞</option> + <option value="18">接続詞</option> + <option value="19">感動詞</option> + <option value="20">接頭語</option> + <option value="21">助数詞</option> + <option value="22">接尾一般</option> + <option value="23">接尾人名</option> + <option value="24">接尾地名</option> + <option value="25">動詞ワ行五段</option> + <option value="26">動詞カ行五段</option> + <option value="27">動詞サ行五段</option> + <option value="28">動詞タ行五段</option> + <option value="29">動詞ナ行五段</option> + <option value="30">動詞マ行五段</option> + <option value="31">動詞ラ行五段</option> + <option value="32">動詞ガ行五段</option> + <option value="33">動詞バ行五段</option> + <option value="34">動詞ハ行四段</option> + <option value="35">動詞一段</option> + <option value="36">動詞カ変</option> + <option value="37">動詞サ変</option> + <option value="38">動詞ザ変</option> + <option value="39">動詞ラ変</option> + <option value="40">形容詞</option> + <option value="41">終助詞</option> + <option value="42">句読点</option> + <option value="43">独立語</option> + <option value="44">抑制単語</option> + <!-- LINT.ThenChange(//chromeos/ash/services/ime/public/mojom/user_data_japanese_dictionary.mojom:JpPosType) --> </select> </div> <cr-input value="[[entry.comment]]"
diff --git a/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.ts b/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.ts index ddd68be..9c1eaee4 100644 --- a/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.ts +++ b/chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.ts
@@ -16,6 +16,13 @@ import {getTemplate} from './os_japanese_dictionary_entry_row.html.js'; import {UserDataServiceProvider} from './user_data_service_provider.js'; + +interface OsJapaneseDictionaryEntryRowElement { + $: { + posDropdownMenu: HTMLSelectElement, + }; +} + class OsJapaneseDictionaryEntryRowElement extends PolymerElement { static get is() { return 'os-japanese-dictionary-entry-row' as const; @@ -71,6 +78,13 @@ this.saveEntryToDictionary_(); } + private onOptionChanged_(): void { + const selected = this.$.posDropdownMenu.value; + + this.entry.pos = Number(selected); + this.saveEntryToDictionary_(); + } + private async deleteEntry_(): Promise<void> { const dictionarySaved = (await UserDataServiceProvider.getRemote()
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc index db6ec9e..97e11a5 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_browsertest.cc
@@ -1078,8 +1078,8 @@ pref_service, sync_service)); // Opt out of account storage. - password_manager::features_util::OptOutOfAccountStorageAndClearSettings( - pref_service, sync_service); + password_manager::features_util::OptOutOfAccountStorage(pref_service, + sync_service); // Check that the password account storage is disabled. EXPECT_FALSE(password_manager::features_util::IsOptedInForAccountStorage(
diff --git a/chrome/browser/supervised_user/classify_url_navigation_throttle.cc b/chrome/browser/supervised_user/classify_url_navigation_throttle.cc index 64a1fe3..85bda2e 100644 --- a/chrome/browser/supervised_user/classify_url_navigation_throttle.cc +++ b/chrome/browser/supervised_user/classify_url_navigation_throttle.cc
@@ -270,6 +270,29 @@ base::UmaHistogramEnumeration(kClassifyUrlThrottleStatusHistogramName, status); + // Final states: Proceed/Resume, CancelDeferredNavigation + switch (status) { + case ClassifyUrlThrottleStatus::kProceed: + case ClassifyUrlThrottleStatus::kResume: + base::UmaHistogramEnumeration( + kClassifyUrlThrottleFinalStatusHistogramName, + ClassifyUrlThrottleFinalStatus::kAllowed); + break; + case ClassifyUrlThrottleStatus::kCancelDeferredNavigation: + base::UmaHistogramEnumeration( + kClassifyUrlThrottleFinalStatusHistogramName, + ClassifyUrlThrottleFinalStatus::kBlocked); + break; + case ClassifyUrlThrottleStatus::kContinue: + case ClassifyUrlThrottleStatus::kDefer: + case ClassifyUrlThrottleStatus::kDeferAndScheduleInterstitial: + // Don't handle intermediate states. + case ClassifyUrlThrottleStatus::kCancel: + // Currently, Cancel is not reachable: the + // SupervisedUserGoogleAuthNavigationThrottle class is handling it first. + break; + } + switch (status) { case ClassifyUrlThrottleStatus::kContinue: case ClassifyUrlThrottleStatus::kProceed: @@ -279,6 +302,8 @@ deferred_ = true; return NavigationThrottle::DEFER; case ClassifyUrlThrottleStatus::kCancel: + // Currently, Cancel is not reachable: the + // SupervisedUserGoogleAuthNavigationThrottle class is handling it first. return NavigationThrottle::CANCEL; case ClassifyUrlThrottleStatus::kResume: Resume(); @@ -287,6 +312,7 @@ return std::nullopt; } } + ClassifyUrlNavigationThrottle::ThrottleCheckResult ClassifyUrlNavigationThrottle::DeferAndScheduleInterstitial( SupervisedUserURLFilter::Result result) {
diff --git a/chrome/browser/supervised_user/classify_url_navigation_throttle.h b/chrome/browser/supervised_user/classify_url_navigation_throttle.h index 5294294c..e75f4d1 100644 --- a/chrome/browser/supervised_user/classify_url_navigation_throttle.h +++ b/chrome/browser/supervised_user/classify_url_navigation_throttle.h
@@ -20,6 +20,14 @@ namespace supervised_user { +// LINT.IfChange(ClassifyUrlThrottleFinalStatus) +enum class ClassifyUrlThrottleFinalStatus : int { + kAllowed = 0, + kBlocked = 1, + kMaxValue = kBlocked, +}; +// LINT.ThenChange(//tools/metrics/histograms/metadata/families/enums.xml:ClassifyUrlThrottleFinalStatus) + // LINT.IfChange(ClassifyUrlThrottleStatus) enum class ClassifyUrlThrottleStatus : int { kContinue = 0,
diff --git a/chrome/browser/supervised_user/classify_url_navigation_throttle_browsertest.cc b/chrome/browser/supervised_user/classify_url_navigation_throttle_browsertest.cc new file mode 100644 index 0000000..bec0b524 --- /dev/null +++ b/chrome/browser/supervised_user/classify_url_navigation_throttle_browsertest.cc
@@ -0,0 +1,113 @@ +// Copyright 2024 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/supervised_user/classify_url_navigation_throttle.h" + +#include "base/functional/bind.h" +#include "base/test/metrics/histogram_tester.h" +#include "chrome/browser/supervised_user/supervised_user_test_util.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "chrome/test/supervised_user/supervision_mixin.h" +#include "components/supervised_user/core/common/features.h" +#include "components/supervised_user/test_support/kids_management_api_server_mock.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/prerender_test_util.h" +#include "url/gurl.h" + +namespace supervised_user { +namespace { + +static const char* kExampleHost = "www.example.com"; + +class ClassifyUrlNavigationThrottleTest + : public MixinBasedInProcessBrowserTest { + public: + void SetUp() override { + prerender_helper_.RegisterServerRequestMonitor(embedded_test_server()); + MixinBasedInProcessBrowserTest::SetUp(); + } + + protected: + content::WebContents* web_contents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + content::test::PrerenderTestHelper& prerender_helper() { + return prerender_helper_; + } + supervised_user::KidsManagementApiServerMock& kids_management_api_mock() { + return supervision_mixin_.api_mock_setup_mixin().api_mock(); + } + + base::HistogramTester histogram_tester_; + + private: + supervised_user::SupervisionMixin supervision_mixin_{ + mixin_host_, + this, + embedded_test_server(), + {.sign_in_mode = + supervised_user::SupervisionMixin::SignInMode::kSupervised, + .embedded_test_server_options = {.resolver_rules_map_host_list = + "*.example.com"}}}; + base::test::ScopedFeatureList feature_list_{ + kClassifyUrlOnProcessResponseEvent}; + content::test::PrerenderTestHelper prerender_helper_{ + base::BindRepeating(&ClassifyUrlNavigationThrottleTest::web_contents, + base::Unretained(this))}; +}; + +IN_PROC_BROWSER_TEST_F(ClassifyUrlNavigationThrottleTest, + RecordsAllowedOnManualList) { + GURL allowed_url = embedded_test_server()->GetURL(kExampleHost, "/"); + supervised_user_test_util::SetManualFilterForHost(browser()->profile(), + kExampleHost, + /*allowlist=*/true); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), allowed_url)); + + histogram_tester_.ExpectBucketCount( + kClassifyUrlThrottleFinalStatusHistogramName, + static_cast<int>(ClassifyUrlThrottleFinalStatus::kAllowed), 1); +} + +IN_PROC_BROWSER_TEST_F(ClassifyUrlNavigationThrottleTest, + RecordsThrottledFromManualBlocklist) { + GURL throttled_url = embedded_test_server()->GetURL(kExampleHost, "/"); + supervised_user_test_util::SetManualFilterForHost(browser()->profile(), + kExampleHost, + /*allowlist=*/false); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), throttled_url)); + + histogram_tester_.ExpectBucketCount( + kClassifyUrlThrottleFinalStatusHistogramName, + static_cast<int>(ClassifyUrlThrottleFinalStatus::kBlocked), 1); +} + +IN_PROC_BROWSER_TEST_F(ClassifyUrlNavigationThrottleTest, RecordsAllowedAsync) { + GURL allowed_url = embedded_test_server()->GetURL(kExampleHost, "/"); + kids_management_api_mock().AllowSubsequentClassifyUrl(); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), allowed_url)); + + histogram_tester_.ExpectBucketCount( + kClassifyUrlThrottleFinalStatusHistogramName, + static_cast<int>(ClassifyUrlThrottleFinalStatus::kAllowed), 1); +} + +IN_PROC_BROWSER_TEST_F(ClassifyUrlNavigationThrottleTest, + RecordsThrottledAsync) { + GURL throttled_url = embedded_test_server()->GetURL(kExampleHost, "/"); + kids_management_api_mock().RestrictSubsequentClassifyUrl(); + + ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), throttled_url)); + + histogram_tester_.ExpectBucketCount( + kClassifyUrlThrottleFinalStatusHistogramName, + static_cast<int>(ClassifyUrlThrottleFinalStatus::kBlocked), 1); +} +} // namespace +} // namespace supervised_user
diff --git a/chrome/browser/sync/test/integration/password_manager_sync_test.cc b/chrome/browser/sync/test/integration/password_manager_sync_test.cc index ba348b5a..b8c2fc7f 100644 --- a/chrome/browser/sync/test/integration/password_manager_sync_test.cc +++ b/chrome/browser/sync/test/integration/password_manager_sync_test.cc
@@ -423,17 +423,6 @@ AccountInfo signed_in_account_; }; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -class PasswordManagerSyncExplicitParamTest - : public PasswordManagerSyncTest, - public base::test::WithFeatureOverride { - public: - PasswordManagerSyncExplicitParamTest() - : base::test::WithFeatureOverride( - switches::kExplicitBrowserSigninUIOnDesktop) {} -}; -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) - #if !BUILDFLAG(IS_CHROMEOS_ASH) #if !BUILDFLAG(IS_CHROMEOS_LACROS) IN_PROC_BROWSER_TEST_F(PasswordManagerSyncTest, ChooseDestinationStore) { @@ -931,64 +920,6 @@ PasswordSyncInactiveChecker(GetSyncService(0)).Wait(); } -IN_PROC_BROWSER_TEST_P(PasswordManagerSyncExplicitParamTest, Resignin) { - ASSERT_TRUE(SetupClients()) << "SetupClients() failed."; - // Re-signin should be offered if the user is signed out now but in the past - // some account opted in. No opt-in yet, so no re-signin. - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), GURL())); - - SignIn(kTestUserEmail); - - // Still no opt-in. Plus, the user is signed-in already. - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), GURL())); - - // If the user isn't already opted-in, do it. - password_manager::features_util::OptInToAccountStorage( - GetProfile(0)->GetPrefs(), GetSyncService(0)); - - // Now there's an opt-in but the user is signed-in already. - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), GURL())); - - SignOut(); - - // If kExplicitBrowserSigninUIOnDesktop is enabled, re-signin should never be - // offered. Otherwise, the preconditions are now met and re-signin should be - // offered for all pages, except the Gaia sign-in page where it's useless. - // Native UI can offer re-signin too, in that case the GURL is empty. - EXPECT_EQ(password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), - GURL("http://www.example.com")), - !IsParamFeatureEnabled()); - EXPECT_EQ(password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), - GURL("https://www.example.com")), - !IsParamFeatureEnabled()); - EXPECT_EQ(password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), GURL()), - !IsParamFeatureEnabled()); - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), - GaiaUrls::GetInstance()->gaia_url())); - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), - GaiaUrls::GetInstance()->gaia_url().Resolve("path"))); - - SignIn(kTestUserEmail); - - // Once the user signs in, no re-signin offered anymore. - EXPECT_FALSE( - password_manager::features_util::ShouldShowAccountStorageReSignin( - GetProfile(0)->GetPrefs(), GetSyncService(0), GURL())); -} - IN_PROC_BROWSER_TEST_F(PasswordManagerSyncTest, KeepOptInAccountStorageSettingsOnlyForUsers) { ASSERT_TRUE(SetupClients()); @@ -1041,8 +972,6 @@ GetProfile(0)->GetPrefs(), GetSyncService(0))); } -INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE(PasswordManagerSyncExplicitParamTest); - #endif // BUILDFLAG(ENABLE_DICE_SUPPORT) // This test verifies that if such users delete passwords along with cookies, @@ -1253,7 +1182,7 @@ waiter.Wait(); } - password_manager::features_util::OptOutOfAccountStorageAndClearSettings( + password_manager::features_util::OptOutOfAccountStorage( GetProfile(0)->GetPrefs(), GetSyncService(0)); {
diff --git a/chrome/browser/sync/test/integration/single_client_incoming_password_sharing_invitation_test.cc b/chrome/browser/sync/test/integration/single_client_incoming_password_sharing_invitation_test.cc index 0ec97f94..a9934f2 100644 --- a/chrome/browser/sync/test/integration/single_client_incoming_password_sharing_invitation_test.cc +++ b/chrome/browser/sync/test/integration/single_client_incoming_password_sharing_invitation_test.cc
@@ -459,7 +459,7 @@ ASSERT_TRUE(GetSyncService(0)->GetActiveDataTypes().Has( syncer::INCOMING_PASSWORD_SHARING_INVITATION)); - password_manager::features_util::OptOutOfAccountStorageAndClearSettings( + password_manager::features_util::OptOutOfAccountStorage( GetProfile(0)->GetPrefs(), GetSyncService(0)); EXPECT_TRUE( IncomingPasswordSharingInvitationInactiveChecker(GetSyncService(0))
diff --git a/chrome/browser/sync/test/integration/single_client_webauthn_credentials_sync_test.cc b/chrome/browser/sync/test/integration/single_client_webauthn_credentials_sync_test.cc index 6fc640b9..cac8bd00 100644 --- a/chrome/browser/sync/test/integration/single_client_webauthn_credentials_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_webauthn_credentials_sync_test.cc
@@ -1063,7 +1063,7 @@ .Wait()); // Opt out. The passkey should be removed. - password_manager::features_util::OptOutOfAccountStorageAndClearSettings( + password_manager::features_util::OptOutOfAccountStorage( GetProfile(0)->GetPrefs(), GetSyncService(0)); EXPECT_TRUE(LocalPasskeysMatchChecker(kSingleProfile, IsEmpty()).Wait()); }
diff --git a/chrome/browser/touch_to_fill/autofill/android/touch_to_fill_payment_method_quality_metrics_unittest.cc b/chrome/browser/touch_to_fill/autofill/android/touch_to_fill_payment_method_quality_metrics_unittest.cc index 8fec255..629c9b26 100644 --- a/chrome/browser/touch_to_fill/autofill/android/touch_to_fill_payment_method_quality_metrics_unittest.cc +++ b/chrome/browser/touch_to_fill/autofill/android/touch_to_fill_payment_method_quality_metrics_unittest.cc
@@ -141,7 +141,7 @@ test_case.field_types); // Simulate user made change to autofilled field. if (!test_case.is_all_accepted) { - SimulateUserChangedTextField(form, form.fields()[0]); + SimulateUserChangedField(form, form.fields()[0]); } SubmitForm(form);
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index c8b65faa..ea53aea 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2083,7 +2083,6 @@ "//ash/components/arc/touch_selection_menu", "//ash/components/arc/vector_icons:vector_icons", "//ash/components/arc/video_accelerator:protected_native_pixmap_query_client", - "//ash/components/kcer", "//ash/constants", "//ash/keyboard/ui", "//ash/public/cpp", @@ -2505,6 +2504,7 @@ "//chromeos/ash/components/heatmap", "//chromeos/ash/components/human_presence", "//chromeos/ash/components/install_attributes", + "//chromeos/ash/components/kcer", "//chromeos/ash/components/kiosk/vision", "//chromeos/ash/components/kiosk/vision/webui", "//chromeos/ash/components/language_packs", @@ -3112,8 +3112,6 @@ if (is_win || is_mac || is_linux) { sources += [ - "passwords/account_storage_auth_helper.cc", - "passwords/account_storage_auth_helper.h", "profiles/profile_customization_bubble_sync_controller.h", "profiles/profile_customization_synced_theme_waiter.cc", "profiles/profile_customization_synced_theme_waiter.h",
diff --git a/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfPageTest.java b/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfPageTest.java index 930617e..46f146c 100644 --- a/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfPageTest.java +++ b/chrome/browser/ui/android/pdf/java/src/org/chromium/chrome/browser/pdf/PdfPageTest.java
@@ -16,6 +16,7 @@ import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CriteriaHelper; +import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.chrome.browser.flags.ChromeSwitches; @@ -45,6 +46,7 @@ @Test @MediumTest + @DisabledTest(message = "crbug.com/388185951") public void testLoadPdfUrl() { EmbeddedTestServer testServer = mActivityTestRule.getTestServer(); final String url = testServer.getURL("/pdf/test/data/hello_world2.pdf");
diff --git a/chrome/browser/ui/ash/BUILD.gn b/chrome/browser/ui/ash/BUILD.gn index 2de6ea4..b7f9c555 100644 --- a/chrome/browser/ui/ash/BUILD.gn +++ b/chrome/browser/ui/ash/BUILD.gn
@@ -6,7 +6,7 @@ import("//build/config/chromeos/ui_mode.gni") import("//chromeos/ash/components/assistant/assistant.gni") -assert(is_chromeos_ash) +assert(is_chromeos) static_library("ash") { sources = [ @@ -256,6 +256,36 @@ ] } +static_library("test_support") { + testonly = true + + sources = [ + "test_util.cc", + "test_util.h", + ] + + deps = [ + "//ash", + "//ash/constants", + "//ash/public/cpp", + "//base/test:test_support", + "//chrome/browser", + "//chrome/browser/ash/crosapi:test_support", + "//chrome/browser/ui", + "//chrome/browser/ui/exclusive_access", + "//chrome/browser/ui/exclusive_access:test_support", + "//chrome/test:test_support", + "//chrome/test:test_support_ui", + "//chromeos/ui/base", + "//content/public/browser", + "//ui/aura", + "//ui/display", + "//ui/views:test_support", + ] + + allow_circular_includes_from = [ "//chrome/test:test_support" ] +} + # Gather unit tests from subdirectories. group("unit_tests") { testonly = true
diff --git a/chrome/browser/ui/ash/DEPS b/chrome/browser/ui/ash/DEPS index 86103268..18a3f99 100644 --- a/chrome/browser/ui/ash/DEPS +++ b/chrome/browser/ui/ash/DEPS
@@ -14,11 +14,22 @@ ], ".*test.*": [ - "+chrome/test/base", + "+chrome/test", "+chrome/browser/ui/views/tabs", "+components/user_education/views", "+components/viz/test", "+media", "+ui/message_center", ], + + "test_util\.*": [ + "+ash", + "+chrome/browser/ash/crosapi", + "+chrome/browser/ui/ash", + "+chrome/browser/ui/browser_commands.h", + "+chrome/browser/ui/browser.h", + "+chrome/browser/ui/exclusive_access", + "+chrome/browser/ui/views", + "+chrome/test/base", + ], }
diff --git a/chrome/browser/ui/chromeos/magic_boost/BUILD.gn b/chrome/browser/ui/ash/magic_boost/BUILD.gn similarity index 96% rename from chrome/browser/ui/chromeos/magic_boost/BUILD.gn rename to chrome/browser/ui/ash/magic_boost/BUILD.gn index 1cd9b542..a151970 100644 --- a/chrome/browser/ui/chromeos/magic_boost/BUILD.gn +++ b/chrome/browser/ui/ash/magic_boost/BUILD.gn
@@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/chromeos/ui_mode.gni") import("//chrome/browser/buildflags.gni") assert(is_chromeos)
diff --git a/chrome/browser/ui/chromeos/magic_boost/DEPS b/chrome/browser/ui/ash/magic_boost/DEPS similarity index 99% rename from chrome/browser/ui/chromeos/magic_boost/DEPS rename to chrome/browser/ui/ash/magic_boost/DEPS index 07b06b64..651e79c 100644 --- a/chrome/browser/ui/chromeos/magic_boost/DEPS +++ b/chrome/browser/ui/ash/magic_boost/DEPS
@@ -1,8 +1,8 @@ include_rules = [ "+chrome/browser/ash/crosapi", "+chrome/browser/ash/magic_boost", - "+chrome/browser/ui/ash/read_write_cards", "+chrome/browser/ui/ash/editor_menu/utils", + "+chrome/browser/ui/ash/read_write_cards", ] specific_include_rules = {
diff --git a/chrome/browser/ui/chromeos/magic_boost/OWNERS b/chrome/browser/ui/ash/magic_boost/OWNERS similarity index 100% rename from chrome/browser/ui/chromeos/magic_boost/OWNERS rename to chrome/browser/ui/ash/magic_boost/OWNERS
diff --git a/chrome/browser/ui/chromeos/magic_boost/README.md b/chrome/browser/ui/ash/magic_boost/README.md similarity index 100% rename from chrome/browser/ui/chromeos/magic_boost/README.md rename to chrome/browser/ui/ash/magic_boost/README.md
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.cc b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.cc similarity index 94% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.cc rename to chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.cc index d14310b2..947bb31 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.cc +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" #include "base/check_deref.h" #include "base/functional/bind.h" @@ -11,9 +11,9 @@ #include "chrome/browser/ash/crosapi/crosapi_ash.h" #include "chrome/browser/ash/crosapi/crosapi_manager.h" #include "chrome/browser/ash/magic_boost/magic_boost_controller_ash.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h" #include "chromeos/components/magic_boost/public/cpp/magic_boost_state.h" #include "chromeos/components/mahi/public/cpp/mahi_media_app_events_proxy.h" #include "chromeos/crosapi/mojom/magic_boost.mojom.h"
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h similarity index 88% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h rename to chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h index b54fea98..7b788d3 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_ -#define CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_ +#ifndef CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_ +#define CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_ #include <cstdint> #include <memory> @@ -11,8 +11,8 @@ #include "base/memory/weak_ptr.h" #include "base/no_destructor.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" #include "chrome/browser/ui/ash/read_write_cards/read_write_card_controller.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" #include "chromeos/components/mahi/public/cpp/mahi_media_app_events_proxy.h" #include "chromeos/crosapi/mojom/magic_boost.mojom.h" #include "ui/views/widget/unique_widget_ptr.h" @@ -25,10 +25,6 @@ class Widget; } // namespace views -namespace mahi { -class MahiPrefsController; -} // namespace mahi - class Profile; namespace chromeos { @@ -96,4 +92,4 @@ } // namespace chromeos -#endif // CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_ +#endif // CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CARD_CONTROLLER_H_
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller_unittest.cc b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller_unittest.cc similarity index 96% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller_unittest.cc rename to chrome/browser/ui/ash/magic_boost/magic_boost_card_controller_unittest.cc index cadd4bf..ab643c69 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller_unittest.cc +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_card_controller_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" #include <memory> @@ -11,9 +11,9 @@ #include "chrome/browser/ash/magic_boost/magic_boost_state_ash.h" #include "chrome/browser/ash/magic_boost/mock_editor_panel_manager.h" #include "chrome/browser/ash/magic_boost/mock_magic_boost_state.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h" -#include "chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h" +#include "chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h" #include "chrome/test/views/chrome_views_test_base.h" #include "chromeos/components/magic_boost/public/cpp/magic_boost_state.h" #include "chromeos/components/mahi/public/cpp/mahi_media_app_events_proxy.h"
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h b/chrome/browser/ui/ash/magic_boost/magic_boost_constants.h similarity index 63% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h rename to chrome/browser/ui/ash/magic_boost/magic_boost_constants.h index b480f048..5abce31 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_constants.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_ -#define CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_ +#ifndef CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_ +#define CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_ namespace chromeos::magic_boost { @@ -17,4 +17,4 @@ } // namespace chromeos::magic_boost -#endif // CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_ +#endif // CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_CONSTANTS_H_
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.cc b/chrome/browser/ui/ash/magic_boost/magic_boost_metrics.cc similarity index 93% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.cc rename to chrome/browser/ui/ash/magic_boost/magic_boost_metrics.cc index d337c71e..a67d40f 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.cc +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_metrics.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h" #include <string>
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h b/chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h similarity index 87% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h rename to chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h index 48641884..a5c24e7 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_ -#define CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_ +#ifndef CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_ +#define CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_ #include "chromeos/crosapi/mojom/magic_boost.mojom.h" @@ -39,4 +39,4 @@ } // namespace chromeos::magic_boost -#endif // CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_ +#endif // CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_METRICS_H_
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.cc b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.cc similarity index 97% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.cc rename to chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.cc index 6cc875b..e2c9003 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.cc +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.cc
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h" #include <string> #include "chrome/browser/ui/ash/editor_menu/utils/utils.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h" #include "chromeos/components/magic_boost/public/cpp/magic_boost_state.h" #include "chromeos/crosapi/mojom/magic_boost.mojom.h" #include "chromeos/strings/grit/chromeos_strings.h"
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h similarity index 89% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h rename to chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h index 1054038..a033d62 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_ -#define CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_ +#ifndef CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_ +#define CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" @@ -66,4 +66,4 @@ } // namespace chromeos -#endif // CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_ +#endif // CHROME_BROWSER_UI_ASH_MAGIC_BOOST_MAGIC_BOOST_OPT_IN_CARD_H_
diff --git a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card_unittest.cc b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card_unittest.cc similarity index 95% rename from chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card_unittest.cc rename to chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card_unittest.cc index b9581ff..24056bc 100644 --- a/chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card_unittest.cc +++ b/chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card_unittest.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_opt_in_card.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_opt_in_card.h" #include <memory> #include "base/test/metrics/histogram_tester.h" #include "chrome/browser/ash/magic_boost/mock_magic_boost_state.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_metrics.h" -#include "chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_metrics.h" +#include "chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h" #include "chrome/test/views/chrome_views_test_base.h" #include "chromeos/components/magic_boost/public/cpp/magic_boost_state.h" #include "chromeos/strings/grit/chromeos_strings.h"
diff --git a/chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.cc b/chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.cc similarity index 78% rename from chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.cc rename to chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.cc index 4ae50f1..2ccd4f04 100644 --- a/chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.cc +++ b/chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h" +#include "chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h" namespace chromeos {
diff --git a/chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h b/chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h similarity index 73% rename from chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h rename to chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h index cfeb9bd8..16fc2078 100644 --- a/chrome/browser/ui/chromeos/magic_boost/test/mock_magic_boost_controller_crosapi.h +++ b/chrome/browser/ui/ash/magic_boost/test/mock_magic_boost_controller_crosapi.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_ -#define CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_ +#ifndef CHROME_BROWSER_UI_ASH_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_ +#define CHROME_BROWSER_UI_ASH_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_ #include "chromeos/crosapi/mojom/magic_boost.mojom.h" #include "testing/gmock/include/gmock/gmock.h" @@ -27,4 +27,4 @@ } // namespace chromeos -#endif // CHROME_BROWSER_UI_CHROMEOS_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_ +#endif // CHROME_BROWSER_UI_ASH_MAGIC_BOOST_TEST_MOCK_MAGIC_BOOST_CONTROLLER_CROSAPI_H_
diff --git a/chrome/browser/ui/ash/read_write_cards/BUILD.gn b/chrome/browser/ui/ash/read_write_cards/BUILD.gn index 838246ac..150cfca1 100644 --- a/chrome/browser/ui/ash/read_write_cards/BUILD.gn +++ b/chrome/browser/ui/ash/read_write_cards/BUILD.gn
@@ -36,8 +36,8 @@ "//chrome/browser:browser_process", "//chrome/browser/ui/ash/editor_menu", "//chrome/browser/ui/ash/editor_menu:utils", + "//chrome/browser/ui/ash/magic_boost", "//chrome/browser/ui/ash/quick_answers", - "//chrome/browser/ui/chromeos/magic_boost", "//chrome/browser/ui/views/mahi", "//chromeos/components/magic_boost/public/cpp:cpp", "//chromeos/components/quick_answers", @@ -67,8 +67,8 @@ "//chrome/browser/ash/magic_boost", "//chrome/browser/ui/ash/editor_menu", "//chrome/browser/ui/ash/editor_menu:utils", + "//chrome/browser/ui/ash/magic_boost", "//chrome/browser/ui/ash/quick_answers", - "//chrome/browser/ui/chromeos/magic_boost", "//chrome/browser/ui/views/mahi", "//chrome/common:non_code_constants", "//chrome/test:test_support",
diff --git a/chrome/browser/ui/ash/read_write_cards/DEPS b/chrome/browser/ui/ash/read_write_cards/DEPS index e1fbdb8..5eec5173 100644 --- a/chrome/browser/ui/ash/read_write_cards/DEPS +++ b/chrome/browser/ui/ash/read_write_cards/DEPS
@@ -1,8 +1,8 @@ include_rules = [ "+chrome/browser/browser_process.h", "+chrome/browser/ui/ash/quick_answers", - "+chrome/browser/ui/chromeos/magic_boost", "+chrome/browser/ui/ash/editor_menu", + "+chrome/browser/ui/ash/magic_boost", "+chrome/browser/ui/views/mahi", ]
diff --git a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.cc b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.cc index 5cbab2a1..fda1e75 100644 --- a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.cc +++ b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.cc
@@ -17,8 +17,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/ui/ash/editor_menu/editor_menu_controller_impl.h" #include "chrome/browser/ui/ash/editor_menu/utils/editor_types.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/ash/quick_answers/quick_answers_controller_impl.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/views/mahi/mahi_menu_controller.h" #include "chromeos/components/magic_boost/public/cpp/magic_boost_state.h" #include "chromeos/components/quick_answers/public/cpp/quick_answers_state.h"
diff --git a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.h b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.h index 7cec539..1c8681b 100644 --- a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.h +++ b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl.h
@@ -11,9 +11,9 @@ #include "base/functional/callback_forward.h" #include "chrome/browser/ui/ash/editor_menu/utils/editor_types.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/ash/read_write_cards/read_write_cards_manager.h" #include "chrome/browser/ui/ash/read_write_cards/read_write_cards_ui_controller.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/views/mahi/mahi_menu_controller.h" class QuickAnswersControllerImpl;
diff --git a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl_unittest.cc b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl_unittest.cc index 4f66a9f..ebadf89 100644 --- a/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl_unittest.cc +++ b/chrome/browser/ui/ash/read_write_cards/read_write_cards_manager_impl_unittest.cc
@@ -13,9 +13,9 @@ #include "chrome/browser/ash/magic_boost/magic_boost_state_ash.h" #include "chrome/browser/ui/ash/editor_menu/editor_menu_controller_impl.h" #include "chrome/browser/ui/ash/editor_menu/utils/editor_types.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/ash/quick_answers/quick_answers_controller_impl.h" #include "chrome/browser/ui/ash/read_write_cards/read_write_cards_manager.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_card_controller.h" #include "chrome/browser/ui/views/mahi/mahi_menu_controller.h" #include "chrome/test/base/chrome_ash_test_base.h" #include "chrome/test/base/testing_profile.h"
diff --git a/chrome/browser/ui/chromeos/test_util.cc b/chrome/browser/ui/ash/test_util.cc similarity index 98% rename from chrome/browser/ui/chromeos/test_util.cc rename to chrome/browser/ui/ash/test_util.cc index f85f3d68..f4a6ee6 100644 --- a/chrome/browser/ui/chromeos/test_util.cc +++ b/chrome/browser/ui/ash/test_util.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/chromeos/test_util.h" +#include "chrome/browser/ui/ash/test_util.h" #include "ash/constants/ash_switches.h" #include "ash/public/cpp/shelf_test_api.h"
diff --git a/chrome/browser/ui/chromeos/test_util.h b/chrome/browser/ui/ash/test_util.h similarity index 95% rename from chrome/browser/ui/chromeos/test_util.h rename to chrome/browser/ui/ash/test_util.h index 4609f27..911809f8 100644 --- a/chrome/browser/ui/chromeos/test_util.h +++ b/chrome/browser/ui/ash/test_util.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_UI_CHROMEOS_TEST_UTIL_H_ -#define CHROME_BROWSER_UI_CHROMEOS_TEST_UTIL_H_ +#ifndef CHROME_BROWSER_UI_ASH_TEST_UTIL_H_ +#define CHROME_BROWSER_UI_ASH_TEST_UTIL_H_ #include "ash/wm/splitview/split_view_types.h" #include "base/test/test_future.h" @@ -85,4 +85,4 @@ static void SetOverviewMode(bool enabled); }; -#endif // CHROME_BROWSER_UI_CHROMEOS_TEST_UTIL_H_ +#endif // CHROME_BROWSER_UI_ASH_TEST_UTIL_H_
diff --git a/chrome/browser/ui/autofill/autofill_suggestion_controller_utils.cc b/chrome/browser/ui/autofill/autofill_suggestion_controller_utils.cc index 64b5305..7673db1 100644 --- a/chrome/browser/ui/autofill/autofill_suggestion_controller_utils.cc +++ b/chrome/browser/ui/autofill/autofill_suggestion_controller_utils.cc
@@ -46,10 +46,6 @@ case SuggestionType::kManageCreditCard: case SuggestionType::kManageIban: case SuggestionType::kManagePlusAddress: - case SuggestionType::kPasswordAccountStorageEmpty: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - case SuggestionType::kPasswordAccountStorageReSignin: case SuggestionType::kScanCreditCard: case SuggestionType::kSeePromoCodeDetails: case SuggestionType::kShowAccountCards:
diff --git a/chrome/browser/ui/chromeos/BUILD.gn b/chrome/browser/ui/chromeos/BUILD.gn deleted file mode 100644 index c9e114d..0000000 --- a/chrome/browser/ui/chromeos/BUILD.gn +++ /dev/null
@@ -1,35 +0,0 @@ -# Copyright 2024 The Chromium Authors -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -assert(is_chromeos) - -static_library("test_support") { - testonly = true - - sources = [ - "test_util.cc", - "test_util.h", - ] - - deps = [ - "//ash", - "//ash/constants", - "//ash/public/cpp", - "//base/test:test_support", - "//chrome/browser", - "//chrome/browser/ash/crosapi:test_support", - "//chrome/browser/ui", - "//chrome/browser/ui/exclusive_access", - "//chrome/browser/ui/exclusive_access:test_support", - "//chrome/test:test_support", - "//chrome/test:test_support_ui", - "//chromeos/ui/base", - "//content/public/browser", - "//ui/aura", - "//ui/display", - "//ui/views:test_support", - ] - - allow_circular_includes_from = [ "//chrome/test:test_support" ] -}
diff --git a/chrome/browser/ui/chromeos/DEPS b/chrome/browser/ui/chromeos/DEPS deleted file mode 100644 index 1ddb1ab0c..0000000 --- a/chrome/browser/ui/chromeos/DEPS +++ /dev/null
@@ -1,22 +0,0 @@ -include_rules = [ - # ChromeOS should not depend on //chrome. See //docs/chromeos/code.md for - # details. - "-chrome", -] - -specific_include_rules = { - "test_util\.*": [ - "+ash", - "+chrome/browser/ash/crosapi", - "+chrome/browser/ui/views", - "+chrome/browser/ui/browser_commands.h", - "+chrome/browser/ui/browser.h", - "+chrome/browser/ui/chromeos", - "+chrome/browser/ui/exclusive_access", - "+chrome/test/base", - ], - - ".*test.*": [ - "+chrome/test", - ], -}
diff --git a/chrome/browser/ui/chromeos/README.md b/chrome/browser/ui/chromeos/README.md index 237c59c..0bc848265 100644 --- a/chrome/browser/ui/chromeos/README.md +++ b/chrome/browser/ui/chromeos/README.md
@@ -1,9 +1,5 @@ -TODO(crbug.com/374890766): Remove references to `lacros` in the text below, -or remove the file altogether if its sub-directories get moved to c/b/ui/ash. +# chrome/browser/ui/chromeos -This holder contains code that is used for both Lacros and Ash UI but not on -other platforms. This should only include the common interface or -implementation between Lacros and Ash. Platform-specific implementation should -live in chrome/browser/ui/lacros for Lacros and chrome/browser/ui/ash for Ash. - -Non-UI code belongs in chrome/browser/chromeos. +Ths directory contains code that is used to implement UI aspects of browser +functionality on ChromeOS. UI code for ChromeOS non-browser functionality (e.g. +shelf) belongs in chrome/browser/ui/ash instead.
diff --git a/chrome/browser/ui/lens/BUILD.gn b/chrome/browser/ui/lens/BUILD.gn index 523df21..a87c526 100644 --- a/chrome/browser/ui/lens/BUILD.gn +++ b/chrome/browser/ui/lens/BUILD.gn
@@ -47,6 +47,7 @@ public_deps = [ "//base", + "//chrome/browser/companion/text_finder", "//chrome/browser/content_extraction", "//chrome/browser/lens/core/mojom:mojo_bindings", "//chrome/browser/search_engines:search_engines",
diff --git a/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc b/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc index 33a633e..6ebc8ab 100644 --- a/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc +++ b/chrome/browser/ui/lens/lens_overlay_controller_browsertest.cc
@@ -20,6 +20,8 @@ #include "base/test/with_feature_override.h" #include "base/threading/thread_restrictions.h" #include "build/build_config.h" +#include "chrome/browser/companion/text_finder/text_highlighter.h" +#include "chrome/browser/companion/text_finder/text_highlighter_manager.h" #include "chrome/browser/lens/core/mojom/geometry.mojom.h" #include "chrome/browser/lens/core/mojom/lens.mojom.h" #include "chrome/browser/lens/core/mojom/lens_side_panel.mojom.h" @@ -2245,6 +2247,88 @@ EXPECT_EQ(fake_controller->is_side_panel_loading_set_to_false_, 0); } +IN_PROC_BROWSER_TEST_F( + LensOverlayControllerBrowserTest, + SidePanel_SameTabCrossOriginLinkClick_WithTextDirective) { + WaitForPaint(); + + // State should start in off. + auto* controller = GetLensOverlayController(); + EXPECT_EQ(controller->state(), State::kOff); + + // Showing UI should change the state to screenshot and eventually to overlay. + controller->ShowUI(LensOverlayInvocationSource::kAppMenu); + ASSERT_EQ(controller->state(), State::kScreenshot); + EXPECT_TRUE(base::test::RunUntil( + [&]() { return controller->state() == State::kOverlay; })); + EXPECT_TRUE(content::WaitForLoadStop(GetOverlayWebContents())); + EXPECT_TRUE(controller->GetOverlayViewForTesting()->GetVisible()); + + // Loading a url in the side panel should show the results page. This needs to + // be done to set up the WebContentsObserver. + const GURL search_url("https://www.google.com/search"); + controller->LoadURLInResultsFrame(search_url); + int tabs = browser()->tab_strip_model()->count(); + + // Expect the Lens Overlay results panel to open. + auto* coordinator = browser()->GetFeatures().side_panel_coordinator(); + EXPECT_TRUE(coordinator->IsSidePanelShowing()); + EXPECT_EQ(coordinator->GetCurrentEntryId(), + SidePanelEntry::Id::kLensOverlayResults); + EXPECT_TRUE(content::WaitForLoadStop( + controller->GetSidePanelWebContentsForTesting())); + + // The results frame should be the only child frame of the side panel web + // contents. + content::RenderFrameHost* results_frame = content::ChildFrameAt( + controller->GetSidePanelWebContentsForTesting()->GetPrimaryMainFrame(), + 0); + EXPECT_TRUE(results_frame); + + // Verify the fake controller exists and reset any loading that was done + // before as part of setup. + auto* fake_controller = static_cast<LensOverlayControllerFake*>(controller); + ASSERT_TRUE(fake_controller); + fake_controller->ResetSidePanelTracking(); + + ui_test_utils::AllBrowserTabAddedWaiter add_tab; + std::string relative_url = + std::string(kDocumentWithNamedElement) + "#:~:text=select"; + const GURL nav_url = embedded_test_server()->GetURL(relative_url); + + // There should be no text highlighter manager for the main web contents at + // this point. + companion::TextHighlighterManager* manager = + companion::TextHighlighterManager::GetForPage(browser() + ->tab_strip_model() + ->GetActiveTab() + ->GetContents() + ->GetPrimaryPage()); + EXPECT_FALSE(manager); + + // Simulate a cross-origin navigation on the results frame. + EXPECT_TRUE(content::ExecJs( + results_frame, content::JsReplace(kSameTabLinkClickScript, nav_url), + content::EvalJsOptions::EXECUTE_SCRIPT_NO_RESOLVE_PROMISES)); + + // Wait for the TextHighlighterManager to be created. + EXPECT_TRUE(base::test::RunUntil([&]() { + manager = + companion::TextHighlighterManager::GetForPage(browser() + ->tab_strip_model() + ->GetActiveTab() + ->GetContents() + ->GetPrimaryPage()); + return manager; + })); + + // It should not open a new tab as this only renders text highlights. + EXPECT_EQ(tabs, browser()->tab_strip_model()->count()); + EXPECT_TRUE(manager); + EXPECT_THAT(manager->get_text_highlighter_for_testing()->GetTextDirective(), + "select"); +} + IN_PROC_BROWSER_TEST_F(LensOverlayControllerBrowserTest, SidePanel_TopLevelSameOriginLinkClick) { WaitForPaint();
diff --git a/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.cc b/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.cc index da0cbab..18341578 100644 --- a/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.cc +++ b/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.cc
@@ -5,6 +5,8 @@ #include "chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h" #include "chrome/app/vector_icons/vector_icons.h" +#include "chrome/browser/companion/text_finder/text_finder_manager.h" +#include "chrome/browser/companion/text_finder/text_highlighter_manager.h" #include "chrome/browser/ui/browser_window/public/browser_window_features.h" #include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/lens/lens_overlay_controller.h" @@ -25,6 +27,7 @@ #include "components/lens/lens_overlay_dismissal_source.h" #include "components/lens/lens_overlay_invocation_source.h" #include "components/lens/lens_overlay_side_panel_result.h" +#include "components/shared_highlighting/core/common/fragment_directives_utils.h" #include "components/vector_icons/vector_icons.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/render_frame_host.h" @@ -222,6 +225,15 @@ lens::GetSearchResultsUrlFromRedirectUrl(navigation_handle->GetURL()) .is_empty()) { navigation_handle->SetSilentlyIgnoreErrors(); + + // If the contextual search box is enabled, cross-origin navigations could + // be a citation that should be rendered as text highlights in the current + // tab. + const GURL& nav_url = navigation_handle->GetURL(); + if (MaybeHandleTextDirectives(nav_url)) { + return; + } + lens_overlay_controller_->GetTabInterface() ->GetBrowserWindowInterface() ->OpenGURL(navigation_handle->GetURL(), @@ -257,6 +269,89 @@ ->GetWebContentsModalDialogHostForWindow(); } +bool LensOverlaySidePanelCoordinator::MaybeHandleTextDirectives( + const GURL& nav_url) { + if (lens::features::IsLensOverlayContextualSearchboxEnabled() && + lens::features::HandleSidePanelTextDirectivesEnabled() && + ShouldHandleTextDirectives(nav_url)) { + // Nav url should have a text fragment. + auto text_fragments = + shared_highlighting::ExtractTextFragments(nav_url.ref()); + + // TODO(crbug.com/383575917): PDFs will likely need a different function + // call to PDFDocumentHelper to render these text highlights. Create and + // attach a `TextFinderManager` to the primary page. + content::Page& page = lens_overlay_controller_->GetTabInterface() + ->GetContents() + ->GetPrimaryPage(); + companion::TextFinderManager* text_finder_manager = + companion::TextFinderManager::GetOrCreateForPage(page); + text_finder_manager->CreateTextFinders( + text_fragments, + base::BindOnce( + &LensOverlaySidePanelCoordinator::OnTextFinderLookupComplete, + weak_ptr_factory_.GetWeakPtr(), nav_url)); + return true; + } + return false; +} + +bool LensOverlaySidePanelCoordinator::ShouldHandleTextDirectives( + const GURL& nav_url) { + const GURL& page_url = lens_overlay_controller_->GetTabInterface() + ->GetContents() + ->GetLastCommittedURL(); + // Only handle text directives when the page URL and the URL being navigated + // to have the same host and path. This ignores the ref and query attributes. + if (page_url.host() != nav_url.host() || page_url.path() != nav_url.path()) { + return false; + } + + auto text_fragments = + shared_highlighting::ExtractTextFragments(nav_url.ref()); + // If the url that is being navigated to does not have a text directive, then + // it cannot be handled. + return !text_fragments.empty(); +} + +void LensOverlaySidePanelCoordinator::OnTextFinderLookupComplete( + const GURL& nav_url, + const std::vector<std::pair<std::string, bool>>& lookup_results) { + if (lookup_results.empty()) { + lens_overlay_controller_->GetTabInterface() + ->GetBrowserWindowInterface() + ->OpenGURL(nav_url, WindowOpenDisposition::NEW_FOREGROUND_TAB); + return; + } + + for (auto pair : lookup_results) { + // If any of the text fragments are not found, then open in a new tab. + if (!pair.second) { + lens_overlay_controller_->GetTabInterface() + ->GetBrowserWindowInterface() + ->OpenGURL(nav_url, WindowOpenDisposition::NEW_FOREGROUND_TAB); + return; + } + } + + // Delete any existing `TextHighlighterManager` on the page. Without this, any + // text highlights after the first to be rendered on the page will not render. + auto& page = lens_overlay_controller_->GetTabInterface() + ->GetContents() + ->GetPrimaryPage(); + if (companion::TextHighlighterManager::GetForPage(page)) { + companion::TextHighlighterManager::DeleteForPage(page); + } + + // TODO(crbug.com/387318456): Add support for multiple text directives to + // TextHighlighterManager. If every text fragment was found, then + // create a text highlighter manager to render the text highlights. + companion::TextHighlighterManager* text_highlighter_manager = + companion::TextHighlighterManager::GetOrCreateForPage(page); + text_highlighter_manager->CreateTextHighlighterAndRemoveExistingInstance( + lookup_results[0].first); +} + void LensOverlaySidePanelCoordinator::OpenURLInBrowser( const content::OpenURLParams& params) { lens_overlay_controller_->GetTabInterface()
diff --git a/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h b/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h index cb2d93d..0500ad4c 100644 --- a/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h +++ b/chrome/browser/ui/lens/lens_overlay_side_panel_coordinator.h
@@ -105,6 +105,26 @@ web_modal::WebContentsModalDialogHost* GetWebContentsModalDialogHost() override; + // Handles rendering text highlights on the main browser window based on + // navigations from the side panel. Returns true if handled, false otherwise. + // `nav_url` refers to the URL that the side panel was set to navigate to. It + // is compared to the URL of the current open tab. + bool MaybeHandleTextDirectives(const GURL& nav_url); + + // Whether the side panel should handle the URL differently since it has a + // text directive and a URL that matches the current page. `nav_url` refers to + // the URL that the side panel was set to navigate to. It is compared to the + // URL of the current open tab. + bool ShouldHandleTextDirectives(const GURL& nav_url); + + // Callback for when the `text_finder` identifies the provided text directives + // on the page. If all the directives were found, then this function will + // create highlights on the page for each. Otherwise, it will open the + // `nav_url` in a new tab. + void OnTextFinderLookupComplete( + const GURL& nav_url, + const std::vector<std::pair<std::string, bool>>& lookup_results); + // Opens the provided url params in the main browser as a new tab. void OpenURLInBrowser(const content::OpenURLParams& params);
diff --git a/chrome/browser/ui/passwords/account_storage_auth_helper.cc b/chrome/browser/ui/passwords/account_storage_auth_helper.cc deleted file mode 100644 index d23f6985..0000000 --- a/chrome/browser/ui/passwords/account_storage_auth_helper.cc +++ /dev/null
@@ -1,95 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/passwords/account_storage_auth_helper.h" - -#include <string> -#include <utility> - -#include "base/functional/bind.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/signin/reauth_result.h" -#include "chrome/browser/signin/signin_ui_util.h" -#include "components/password_manager/core/browser/features/password_manager_features_util.h" -#include "components/password_manager/core/browser/password_feature_manager.h" -#include "components/signin/public/base/consent_level.h" -#include "components/signin/public/base/signin_buildflags.h" -#include "components/signin/public/identity_manager/identity_manager.h" -#include "google_apis/gaia/core_account_id.h" - -namespace { -using ReauthSucceeded = - password_manager::PasswordManagerClient::ReauthSucceeded; -} - -AccountStorageAuthHelper::AccountStorageAuthHelper( - Profile* profile, - signin::IdentityManager* identity_manager, - password_manager::PasswordFeatureManager* password_feature_manager, - base::RepeatingCallback<SigninViewController*()> - signin_view_controller_getter) - : profile_(profile), - identity_manager_(identity_manager), - password_feature_manager_(password_feature_manager), - signin_view_controller_getter_(std::move(signin_view_controller_getter)) { - DCHECK(password_feature_manager_); - DCHECK(signin_view_controller_getter_); -} - -AccountStorageAuthHelper::~AccountStorageAuthHelper() = default; - -void AccountStorageAuthHelper::TriggerOptInReauth( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback<void(ReauthSucceeded)> reauth_callback) { - // Reauth is only required if promos are allowed, see the predicate docs. - CHECK(password_manager::features_util::AreAccountStorageOptInPromosAllowed()); - - SigninViewController* signin_view_controller = - signin_view_controller_getter_.Run(); - if (!signin_view_controller) { - std::move(reauth_callback).Run(ReauthSucceeded(false)); - return; - } - - if (!identity_manager_) { - std::move(reauth_callback).Run(ReauthSucceeded(false)); - return; - } - - CoreAccountId unconsented_account_id = - identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); - if (unconsented_account_id.empty()) { - std::move(reauth_callback).Run(ReauthSucceeded(false)); - return; - } - - // In the rare case of concurrent requests, only consider the first one. - if (reauth_abort_handle_) { - std::move(reauth_callback).Run(ReauthSucceeded(false)); - return; - } - - reauth_abort_handle_ = signin_view_controller->ShowReauthPrompt( - unconsented_account_id, access_point, - base::BindOnce(&AccountStorageAuthHelper::OnOptInReauthCompleted, - weak_ptr_factory_.GetWeakPtr(), - std::move(reauth_callback))); -} - -void AccountStorageAuthHelper::TriggerSignIn( - signin_metrics::AccessPoint access_point) { - signin_ui_util::ShowSigninPromptFromPromo(profile_, access_point); -} - -void AccountStorageAuthHelper::OnOptInReauthCompleted( - base::OnceCallback<void(ReauthSucceeded)> reauth_callback, - signin::ReauthResult result) { - reauth_abort_handle_.reset(); - - bool succeeded = result == signin::ReauthResult::kSuccess; - if (succeeded) { - password_feature_manager_->OptInToAccountStorage(); - } - std::move(reauth_callback).Run(ReauthSucceeded(succeeded)); -}
diff --git a/chrome/browser/ui/passwords/account_storage_auth_helper.h b/chrome/browser/ui/passwords/account_storage_auth_helper.h deleted file mode 100644 index 3afa344..0000000 --- a/chrome/browser/ui/passwords/account_storage_auth_helper.h +++ /dev/null
@@ -1,88 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_PASSWORDS_ACCOUNT_STORAGE_AUTH_HELPER_H_ -#define CHROME_BROWSER_UI_PASSWORDS_ACCOUNT_STORAGE_AUTH_HELPER_H_ - -#include "base/functional/callback.h" -#include "base/memory/raw_ptr.h" -#include "base/memory/weak_ptr.h" -#include "chrome/browser/ui/signin/signin_view_controller.h" -#include "components/password_manager/core/browser/password_manager_client.h" -#include "components/signin/public/base/signin_buildflags.h" - -namespace password_manager { -class PasswordFeatureManager; -} - -namespace signin { -enum class ReauthResult; -class IdentityManager; -} // namespace signin - -namespace signin_metrics { -enum class ReauthAccessPoint; -} - -class SigninViewController; -class Profile; - -// Responsible for triggering authentication flows related to the passwords -// account storage. Used only by desktop. -class AccountStorageAuthHelper { - public: - // |identity_manager| can be null (e.g. in incognito). - // |password_feature_manager| must be non-null and outlive this object. - // |signin_view_controller_getter| is passed rather than SigninViewController - // because the controller is per window, while this helper is per tab. It - // may return null. - AccountStorageAuthHelper( - Profile* profile, - signin::IdentityManager* identity_manager, - password_manager::PasswordFeatureManager* password_feature_manager, - base::RepeatingCallback<SigninViewController*()> - signin_view_controller_getter); - ~AccountStorageAuthHelper(); - - AccountStorageAuthHelper(const AccountStorageAuthHelper&) = delete; - AccountStorageAuthHelper& operator=(const AccountStorageAuthHelper&) = delete; - - // Requests a reauth for the primary account. In case of success, sets the - // opt in preference for account storage. |reauth_callback| is then called - // passing whether the reauth succeeded or not. - // |access_point| represents where the reauth was triggered. - void TriggerOptInReauth( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback< - void(password_manager::PasswordManagerClient::ReauthSucceeded)> - reauth_callback); - - // Shows a sign-in prompt to the user. |access_point| is used for metrics - // recording and represents where the sign-in was triggered. - void TriggerSignIn(signin_metrics::AccessPoint access_point); - - private: - void OnOptInReauthCompleted( - base::OnceCallback< - void(password_manager::PasswordManagerClient::ReauthSucceeded)> - reauth_callback, - signin::ReauthResult result); - - const raw_ptr<Profile> profile_; - - const raw_ptr<signin::IdentityManager> identity_manager_; - - const raw_ptr<password_manager::PasswordFeatureManager> - password_feature_manager_; - - const base::RepeatingCallback<SigninViewController*()> - signin_view_controller_getter_; - - // Aborts ongoing reauths if AccountStorageAuthHelper gets destroyed. - std::unique_ptr<SigninViewController::ReauthAbortHandle> reauth_abort_handle_; - - base::WeakPtrFactory<AccountStorageAuthHelper> weak_ptr_factory_{this}; -}; - -#endif // CHROME_BROWSER_UI_PASSWORDS_ACCOUNT_STORAGE_AUTH_HELPER_H_
diff --git a/chrome/browser/ui/passwords/account_storage_auth_helper_unittest.cc b/chrome/browser/ui/passwords/account_storage_auth_helper_unittest.cc deleted file mode 100644 index 8b8145d..0000000 --- a/chrome/browser/ui/passwords/account_storage_auth_helper_unittest.cc +++ /dev/null
@@ -1,170 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/passwords/account_storage_auth_helper.h" - -#include <string> - -#include "base/functional/callback.h" -#include "base/functional/callback_helpers.h" -#include "base/test/bind.h" -#include "base/test/scoped_feature_list.h" -#include "base/test/task_environment.h" -#include "build/build_config.h" -#include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" -#include "chrome/browser/signin/reauth_result.h" -#include "chrome/browser/signin/signin_ui_delegate.h" -#include "chrome/browser/signin/signin_ui_util.h" -#include "chrome/browser/ui/signin/signin_view_controller.h" -#include "chrome/test/base/testing_profile.h" -#include "components/password_manager/core/browser/mock_password_feature_manager.h" -#include "components/signin/public/base/signin_buildflags.h" -#include "components/signin/public/base/signin_metrics.h" -#include "components/signin/public/base/signin_switches.h" -#include "components/signin/public/identity_manager/identity_test_environment.h" -#include "content/public/test/browser_task_environment.h" -#include "google_apis/gaia/core_account_id.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace { - -using testing::_; - -const signin_metrics::ReauthAccessPoint kReauthAccessPoint = - signin_metrics::ReauthAccessPoint::kAutofillDropdown; - -class MockSigninViewController : public SigninViewController { - public: - MockSigninViewController() : SigninViewController(/*browser=*/nullptr) {} - ~MockSigninViewController() override = default; - - MOCK_METHOD(std::unique_ptr<ReauthAbortHandle>, - ShowReauthPrompt, - (const CoreAccountId&, - signin_metrics::ReauthAccessPoint, - base::OnceCallback<void(signin::ReauthResult)>), - (override)); -}; - -class MockSigninUiDelegate : public signin_ui_util::SigninUiDelegate { - public: - MOCK_METHOD(void, - ShowSigninUI, - (Profile*, - bool, - signin_metrics::AccessPoint, - signin_metrics::PromoAction), - (override)); - MOCK_METHOD(void, - ShowReauthUI, - (Profile*, - const std::string&, - bool, - signin_metrics::AccessPoint, - signin_metrics::PromoAction), - (override)); -}; - -} // namespace - -class AccountStorageAuthHelperTest : public ::testing::Test { - public: - AccountStorageAuthHelperTest() - : profile_(IdentityTestEnvironmentProfileAdaptor:: - CreateProfileForIdentityTestEnvironment()), - identity_env_adaptor_(profile_.get()), - auth_helper_( - profile_.get(), - identity_test_env()->identity_manager(), - &mock_password_feature_manager_, - base::BindLambdaForTesting([this]() -> SigninViewController* { - return &mock_signin_view_controller_; - })) {} - ~AccountStorageAuthHelperTest() override = default; - - CoreAccountId MakeUnconsentedAccountAvailable() { - return identity_test_env() - ->MakePrimaryAccountAvailable("alice@gmail.com", - signin::ConsentLevel::kSignin) - .account_id; - } - - signin::IdentityTestEnvironment* identity_test_env() { - return identity_env_adaptor_.identity_test_env(); - } - - protected: - content::BrowserTaskEnvironment task_environment_; - std::unique_ptr<TestingProfile> profile_; - IdentityTestEnvironmentProfileAdaptor identity_env_adaptor_; - password_manager::MockPasswordFeatureManager mock_password_feature_manager_; - MockSigninViewController mock_signin_view_controller_; - AccountStorageAuthHelper auth_helper_; -}; - -TEST_F(AccountStorageAuthHelperTest, ShouldTriggerReauthForPrimaryAccount) { - // Opt-in reauth is disabled with explicit signin. - base::test::ScopedFeatureList feature_list; - feature_list.InitAndDisableFeature( - switches::kExplicitBrowserSigninUIOnDesktop); - - CoreAccountId account_id = MakeUnconsentedAccountAvailable(); - EXPECT_CALL(mock_signin_view_controller_, - ShowReauthPrompt(account_id, kReauthAccessPoint, _)); - - auth_helper_.TriggerOptInReauth(kReauthAccessPoint, base::DoNothing()); -} - -TEST_F(AccountStorageAuthHelperTest, ShouldSetOptInOnSucessfulReauth) { - // Opt-in reauth is disabled with explicit signin. - base::test::ScopedFeatureList feature_list; - feature_list.InitAndDisableFeature( - switches::kExplicitBrowserSigninUIOnDesktop); - - CoreAccountId account_id = MakeUnconsentedAccountAvailable(); - EXPECT_CALL(mock_signin_view_controller_, - ShowReauthPrompt(account_id, kReauthAccessPoint, _)) - .WillOnce([](auto, auto, - base::OnceCallback<void(signin::ReauthResult)> callback) { - std::move(callback).Run(signin::ReauthResult::kSuccess); - return nullptr; - }); - EXPECT_CALL(mock_password_feature_manager_, OptInToAccountStorage); - - auth_helper_.TriggerOptInReauth(kReauthAccessPoint, base::DoNothing()); -} - -TEST_F(AccountStorageAuthHelperTest, ShouldNotSetOptInOnFailedReauth) { - // Opt-in reauth is disabled with explicit signin. - base::test::ScopedFeatureList feature_list; - feature_list.InitAndDisableFeature( - switches::kExplicitBrowserSigninUIOnDesktop); - - CoreAccountId account_id = MakeUnconsentedAccountAvailable(); - EXPECT_CALL(mock_signin_view_controller_, - ShowReauthPrompt(account_id, kReauthAccessPoint, _)) - .WillOnce([](auto, auto, - base::OnceCallback<void(signin::ReauthResult)> callback) { - std::move(callback).Run(signin::ReauthResult::kCancelled); - return nullptr; - }); - EXPECT_CALL(mock_password_feature_manager_, OptInToAccountStorage).Times(0); - - auth_helper_.TriggerOptInReauth(kReauthAccessPoint, base::DoNothing()); -} - -TEST_F(AccountStorageAuthHelperTest, ShouldTriggerSignin) { - testing::StrictMock<MockSigninUiDelegate> mock_signin_ui_delegate; - base::AutoReset<signin_ui_util::SigninUiDelegate*> delegate_auto_reset = - signin_ui_util::SetSigninUiDelegateForTesting(&mock_signin_ui_delegate); - const signin_metrics::AccessPoint kAccessPoint = - signin_metrics::AccessPoint::ACCESS_POINT_AUTOFILL_DROPDOWN; - EXPECT_CALL(mock_signin_ui_delegate, - ShowSigninUI(profile_.get(), /*enable_sync=*/false, kAccessPoint, - signin_metrics::PromoAction:: - PROMO_ACTION_NEW_ACCOUNT_NO_EXISTING_ACCOUNT)); - - auth_helper_.TriggerSignIn(kAccessPoint); -}
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc index eb47edc..77686bed 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.cc
@@ -136,22 +136,9 @@ SetDismissalReason(metrics_util::CLICKED_ACCEPT); if (delegate_) { CleanStatisticsForSite(GetProfile(), GetOrigin()); - if (IsAccountStorageOptInRequiredBeforeSave()) { - delegate_->AuthenticateUserForAccountStoreOptInAndSavePassword( - GetPendingPassword().username_value, - GetPendingPassword().password_value); - } else { - delegate_->SavePassword(GetPendingPassword().username_value, - GetPendingPassword().password_value); - if (!IsCurrentStateUpdate() && - delegate_->GetPasswordFeatureManager() - ->ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally()) { - delegate_ - ->AuthenticateUserForAccountStoreOptInAfterSavingLocallyAndMovePassword(); - } else { - delegate_->MaybeShowIOSPasswordPromo(); - } - } + delegate_->SavePassword(GetPendingPassword().username_value, + GetPendingPassword().password_value); + delegate_->MaybeShowIOSPasswordPromo(); } } @@ -253,26 +240,6 @@ Store::kAccountStore; } -bool SaveUpdateBubbleController::IsAccountStorageOptInRequiredBeforeSave() { - // If this is an update, either a) the password only exists in the profile - // store, so the opt-in shouldn't be offered because the account storage won't - // be used, or b) there is a copy in the account store, which means the user - // already opted in. Either way, the opt-in shouldn't be offered. - if (IsCurrentStateUpdate()) { - return false; - } - // If saving to the profile store, then no need to ask for opt-in. - if (!IsUsingAccountStore()) { - return false; - } - // If already opted in, no need to ask again. - if (delegate_->GetPasswordFeatureManager()->IsOptedInForAccountStorage()) { - return false; - } - - return true; -} - std::u16string SaveUpdateBubbleController::GetTitle() const { PasswordTitleType type = IsCurrentStateUpdate() ? PasswordTitleType::UPDATE_PASSWORD
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h index beb481d..1c2376e 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h +++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller.h
@@ -51,10 +51,6 @@ // Returns true iff the password account store is used. bool IsUsingAccountStore(); - // Returns true if the user must opt-in to the account-scoped password storage - // before the save bubble action can be concluded. - bool IsAccountStorageOptInRequiredBeforeSave(); - // PasswordBubbleControllerBase methods: std::u16string GetTitle() const override;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller_unittest.cc index ec323710..b546e35 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller_unittest.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_bubble_controller_unittest.cc
@@ -315,8 +315,6 @@ pending_password().password_value)); EXPECT_CALL(*delegate(), NeverSavePassword()).Times(0); EXPECT_CALL(*delegate(), OnNopeUpdateClicked()).Times(0); - EXPECT_CALL(*delegate(), AuthenticateUserForAccountStoreOptInAndSavePassword) - .Times(0); controller()->OnSaveClicked(); DestroyModelExpectReason(password_manager::metrics_util::CLICKED_ACCEPT); } @@ -330,7 +328,6 @@ PretendPasswordWaiting(); EXPECT_FALSE(controller()->IsCurrentStateUpdate()); - EXPECT_FALSE(controller()->IsAccountStorageOptInRequiredBeforeSave()); EXPECT_CALL(*mock_smart_bubble_stats_store(), RemoveSiteStats(GURL(kSiteOrigin).DeprecatedGetOriginAsURL())); @@ -339,31 +336,6 @@ pending_password().password_value)); EXPECT_CALL(*delegate(), NeverSavePassword()).Times(0); EXPECT_CALL(*delegate(), OnNopeUpdateClicked()).Times(0); - EXPECT_CALL(*delegate(), AuthenticateUserForAccountStoreOptInAndSavePassword) - .Times(0); - controller()->OnSaveClicked(); - DestroyModelExpectReason(password_manager::metrics_util::CLICKED_ACCEPT); -} - -TEST_F(SaveUpdateBubbleControllerTest, ClickSaveInAccountStoreWhileNotOptedIn) { - ON_CALL(*password_feature_manager(), GetDefaultPasswordStore) - .WillByDefault( - Return(password_manager::PasswordForm::Store::kAccountStore)); - ON_CALL(*password_feature_manager(), IsOptedInForAccountStorage) - .WillByDefault(Return(false)); - PretendPasswordWaiting(); - - EXPECT_FALSE(controller()->IsCurrentStateUpdate()); - EXPECT_TRUE(controller()->IsAccountStorageOptInRequiredBeforeSave()); - - EXPECT_CALL(*mock_smart_bubble_stats_store(), - RemoveSiteStats(GURL(kSiteOrigin).DeprecatedGetOriginAsURL())); - EXPECT_CALL(*delegate(), SavePassword).Times(0); - EXPECT_CALL(*delegate(), NeverSavePassword()).Times(0); - EXPECT_CALL(*delegate(), OnNopeUpdateClicked()).Times(0); - EXPECT_CALL(*delegate(), AuthenticateUserForAccountStoreOptInAndSavePassword( - pending_password().username_value, - pending_password().password_value)); controller()->OnSaveClicked(); DestroyModelExpectReason(password_manager::metrics_util::CLICKED_ACCEPT); } @@ -379,7 +351,6 @@ PretendUpdatePasswordWaiting(); EXPECT_TRUE(controller()->IsCurrentStateUpdate()); - EXPECT_FALSE(controller()->IsAccountStorageOptInRequiredBeforeSave()); EXPECT_CALL(*mock_smart_bubble_stats_store(), RemoveSiteStats(GURL(kSiteOrigin).DeprecatedGetOriginAsURL())); @@ -387,8 +358,6 @@ pending_password().password_value)); EXPECT_CALL(*delegate(), NeverSavePassword()).Times(0); EXPECT_CALL(*delegate(), OnNopeUpdateClicked()).Times(0); - EXPECT_CALL(*delegate(), AuthenticateUserForAccountStoreOptInAndSavePassword) - .Times(0); controller()->OnSaveClicked(); DestroyModelExpectReason(password_manager::metrics_util::CLICKED_ACCEPT); }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index c06450b3..6ed03fee 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -1110,33 +1110,6 @@ #endif // !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN) } -void ManagePasswordsUIController:: - AuthenticateUserForAccountStoreOptInAndSavePassword( - const std::u16string& username, - const std::u16string& password) { - password_manager::PasswordManagerClient* client = passwords_data_.client(); - client->TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSaveBubble, - base::BindOnce(&ManagePasswordsUIController:: - FinishSavingPasswordAfterAccountStoreOptInAuth, - weak_ptr_factory_.GetWeakPtr(), passwords_data_.origin(), - passwords_data_.form_manager(), username, password)); -} - -void ManagePasswordsUIController:: - AuthenticateUserForAccountStoreOptInAfterSavingLocallyAndMovePassword() { - DCHECK(GetState() == password_manager::ui::MANAGE_STATE) << GetState(); - // Note: While saving the password locally earlier, the FormManager has been - // updated with any edits the user made in the Save bubble. So at this point, - // just using GetPendingCredentials() is safe. - passwords_data_.client()->TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSaveLocallyBubble, - base::BindOnce(&ManagePasswordsUIController:: - MoveJustSavedPasswordAfterAccountStoreOptIn, - weak_ptr_factory_.GetWeakPtr(), - passwords_data_.form_manager()->GetPendingCredentials())); -} - void ManagePasswordsUIController::MaybeShowIOSPasswordPromo() { #if BUILDFLAG(GOOGLE_CHROME_BRANDING) Browser* browser = chrome::FindBrowserWithTab(web_contents()); @@ -1226,10 +1199,9 @@ auto helper_it = move_to_account_store_helpers_.insert( move_to_account_store_helpers_.begin(), nullptr); // This class owns and thus outlives the helper so base::Unretained is safe. - auto on_move_finished = - base::BindOnce(&ManagePasswordsUIController:: - OnMoveJustSavedPasswordAfterAccountStoreOptInCompleted, - base::Unretained(this), helper_it); + auto on_move_finished = base::BindOnce( + &ManagePasswordsUIController::OnMovePasswordToAccountStoreComplete, + base::Unretained(this), helper_it); *helper_it = CreateMovePasswordToAccountStoreHelper( form, trigger, std::move(on_move_finished)); } @@ -1317,36 +1289,6 @@ // `this` is now destroyed - do not add code here. } -void ManagePasswordsUIController:: - FinishSavingPasswordAfterAccountStoreOptInAuth( - const url::Origin& origin, - password_manager::PasswordFormManagerForUI* form_manager, - const std::u16string& username, - const std::u16string& password, - password_manager::PasswordManagerClient::ReauthSucceeded - reauth_succeeded) { - if (reauth_succeeded) { - // Save the password only if it is the same origin and same form manager. - // Otherwise it can be dangerous (e.g. saving the credentials against - // another origin). - if (passwords_data_.origin() == origin && - passwords_data_.form_manager() == form_manager) { - SavePassword(username, password); - } - return; - } - // If reauth wasn't successful, explicitly opt out, change to local store and - // reopen the bubble if the state didn't change. - GetPasswordFeatureManager()->OptOutOfAccountStorageAndClearSettings(); - GetPasswordFeatureManager()->SetDefaultPasswordStore( - password_manager::PasswordForm::Store::kProfileStore); - if (passwords_data_.state() != password_manager::ui::PENDING_PASSWORD_STATE) { - return; - } - bubble_status_ = BubbleStatus::SHOULD_POP_UP; - UpdateBubbleAndIconVisibility(); -} - void ManagePasswordsUIController::OnTriggerPostSaveCompromisedBubble( password_manager::PostSaveCompromisedHelper::BubbleType type, size_t count_compromised_passwords_) { @@ -1374,33 +1316,9 @@ UpdateBubbleAndIconVisibility(); } -void ManagePasswordsUIController::MoveJustSavedPasswordAfterAccountStoreOptIn( - const password_manager::PasswordForm& form, - password_manager::PasswordManagerClient::ReauthSucceeded reauth_succeeded) { - // Successful opt-in means that the just-saved password should be moved to the - // account. - if (reauth_succeeded) { - MovePendingPasswordToAccountStoreUsingHelper( - form, password_manager::metrics_util::MoveToAccountStoreTrigger:: - kUserOptedInAfterSavingLocally); - } else { - // Failed or canceled opt-in means the user has (implicitly) chosen to save - // locally. This is already the default value, but setting it explicitly - // makes sure the user won't be asked to opt in again (since "store not set" - // gets interpreted as "first-time save"). - // Similarly, opting out explicitly has special handling in - // SyncUserSettings::GetSelectedTypes(), and thus in - // IsOptedInForAccountStorage(). - GetPasswordFeatureManager()->OptOutOfAccountStorageAndClearSettings(); - GetPasswordFeatureManager()->SetDefaultPasswordStore( - password_manager::PasswordForm::Store::kProfileStore); - } -} - -void ManagePasswordsUIController:: - OnMoveJustSavedPasswordAfterAccountStoreOptInCompleted( - std::list<std::unique_ptr<MovePasswordToAccountStoreHelper>>::iterator - done_helper_it) { +void ManagePasswordsUIController::OnMovePasswordToAccountStoreComplete( + std::list<std::unique_ptr<MovePasswordToAccountStoreHelper>>::iterator + done_helper_it) { move_to_account_store_helpers_.erase(done_helper_it); }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h index f014e039..8451556 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -204,11 +204,6 @@ void OnDialogHidden() override; void AuthenticateUserWithMessage(const std::u16string& message, AvailabilityCallback callback) override; - void AuthenticateUserForAccountStoreOptInAndSavePassword( - const std::u16string& username, - const std::u16string& password) override; - void AuthenticateUserForAccountStoreOptInAfterSavingLocallyAndMovePassword() - override; void MaybeShowIOSPasswordPromo() override; void RelaunchChrome() override; // Skips user os level authentication during the life time of the returned @@ -320,32 +315,11 @@ // content::WebContentsObserver: void WebContentsDestroyed() override; - // Gets invoked gaia reauth flow is finished. If the reauth was successful, - // and the |form_manager| is still the same, |username| and |password| are - // saved against the current origin. If the reauth was unsuccessful, it - // changes the default destination to profle store and reopens the save - // bubble. - void FinishSavingPasswordAfterAccountStoreOptInAuth( - const url::Origin& origin, - password_manager::PasswordFormManagerForUI* form_manager, - const std::u16string& username, - const std::u16string& password, - password_manager::PasswordManagerClient::ReauthSucceeded - reauth_succeeded); - void OnTriggerPostSaveCompromisedBubble( password_manager::PostSaveCompromisedHelper::BubbleType type, size_t count_compromised_passwords_); - // Called from an opt-in/reauth flow that was triggered after a new - // account-storage-eligible user saved a password locally. If the opt-in was - // successful, this moves the just-saved password into the account store. - void MoveJustSavedPasswordAfterAccountStoreOptIn( - const password_manager::PasswordForm& form, - password_manager::PasswordManagerClient::ReauthSucceeded - reauth_succeeded); - - void OnMoveJustSavedPasswordAfterAccountStoreOptInCompleted( + void OnMovePasswordToAccountStoreComplete( std::list<std::unique_ptr< password_manager::MovePasswordToAccountStoreHelper>>::iterator done_helper_it);
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc index b403002..f652193c3 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller_unittest.cc
@@ -137,12 +137,6 @@ TestPasswordManagerClient() : mock_profile_store_(new MockPasswordStoreInterface()) {} - MOCK_METHOD(void, - TriggerReauthForPrimaryAccount, - (signin_metrics::ReauthAccessPoint, - base::OnceCallback<void(ReauthSucceeded)>), - (override)); - #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) MOCK_METHOD(std::unique_ptr<device_reauth::DeviceAuthenticator>, GetDeviceAuthenticator, @@ -698,86 +692,6 @@ } } -TEST_F(ManagePasswordsUIControllerTest, - PasswordSavedInAccountStoreWhenReauthSucceeds) { - std::vector<PasswordForm> best_matches; - auto test_form_manager = - CreateFormManagerWithBestMatches(best_matches, &submitted_form()); - MockPasswordFormManagerForUI* test_form_manager_ptr = test_form_manager.get(); - - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - controller()->OnPasswordSubmitted(std::move(test_form_manager)); - - // The user hasn't opted in, so a reauth flow will be triggered. - base::OnceCallback<void(ReauthSucceeded)> reauth_callback; - EXPECT_CALL(client(), - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSaveBubble, _)) - .WillOnce(MoveArg<1>(&reauth_callback)); - - // The user clicks save which will invoke the reauth flow. - controller()->AuthenticateUserForAccountStoreOptInAndSavePassword( - submitted_form().username_value, submitted_form().password_value); - - // The bubble gets hidden after the user clicks on save. - controller()->OnBubbleHidden(); - - // Simulate a successful reauth which will cause the password to be saved. - EXPECT_CALL(*test_form_manager_ptr, Save()); - std::move(reauth_callback).Run(ReauthSucceeded(true)); - - // We should be now in the manage state and no other bubble should be opened - // automatically. - ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); -} - -TEST_F(ManagePasswordsUIControllerTest, - PasswordNotSavedInAccountStoreWhenReauthFails) { - std::vector<PasswordForm> best_matches; - auto test_form_manager = - CreateFormManagerWithBestMatches(best_matches, &submitted_form()); - - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - EXPECT_CALL(*test_form_manager, Save()).Times(0); - - controller()->OnPasswordSubmitted(std::move(test_form_manager)); - - // The user hasn't opted in, so a reauth flow will be triggered. - base::OnceCallback<void(ReauthSucceeded)> reauth_callback; - EXPECT_CALL(client(), - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kPasswordSaveBubble, _)) - .WillOnce(MoveArg<1>(&reauth_callback)); - - { - // Unsuccessful reauth should change the default store to profile store and - // opt out of account storage. OptOutOfAccountStorageAndClearSettings() - // clears the store pref, so SetDefaultPasswordStore() should come second. - testing::InSequence in_sequence; - EXPECT_CALL(*client().GetPasswordFeatureManager(), - OptOutOfAccountStorageAndClearSettings()); - EXPECT_CALL(*client().GetPasswordFeatureManager(), - SetDefaultPasswordStore( - password_manager::PasswordForm::Store::kProfileStore)); - } - - // The user clicks save which will invoke the reauth flow. - controller()->AuthenticateUserForAccountStoreOptInAndSavePassword( - submitted_form().username_value, submitted_form().password_value); - - // The bubble gets hidden after the user clicks on save. - controller()->OnBubbleHidden(); - - // Simulate an unsuccessful reauth which will cause the bubble to be open - // again. - EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); - std::move(reauth_callback).Run(ReauthSucceeded(false)); - - // The bubble should have been opened again. - ExpectIconAndControllerStateIs(password_manager::ui::PENDING_PASSWORD_STATE); - EXPECT_TRUE(controller()->opened_automatic_bubble()); -} - TEST_F(ManagePasswordsUIControllerTest, PasswordBlocklisted) { std::vector<PasswordForm> best_matches; auto test_form_manager =
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h index c382ec7..ead9e8c 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -188,21 +188,6 @@ virtual void AuthenticateUserWithMessage(const std::u16string& message, AvailabilityCallback callback) = 0; - // Called from the Save/Update bubble controller when gaia re-auth is needed - // to save passwords. This method triggers the reauth flow. Upon successful - // reauth, it saves the password if it's still relevant. Otherwise, it changes - // the default destination to local and reopens the save bubble. - virtual void AuthenticateUserForAccountStoreOptInAndSavePassword( - const std::u16string& username, - const std::u16string& password) = 0; - - // Called from the Save/Update bubble controller when a "new" user (i.e. who - // hasn't chosen whether to use the account-scoped storage yet) saves a - // password (locally). If the reauth is successful, this moves the just-saved - // password into the account store. - virtual void - AuthenticateUserForAccountStoreOptInAfterSavingLocallyAndMovePassword() = 0; - // Called from Biometric Authentication promo dialog when the feature is // enabled. virtual void ShowBiometricActivationConfirmation() = 0;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h index a1125054..04843be 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -115,15 +115,6 @@ AuthenticateUserWithMessage, (const std::u16string& message, AvailabilityCallback callback), (override)); - MOCK_METHOD(void, - AuthenticateUserForAccountStoreOptInAndSavePassword, - (const std::u16string&, const std::u16string&), - (override)); - MOCK_METHOD( - void, - AuthenticateUserForAccountStoreOptInAfterSavingLocallyAndMovePassword, - (), - (override)); MOCK_METHOD(void, ShowBiometricActivationConfirmation, (), (override)); MOCK_METHOD(void, ShowMovePasswordBubble,
diff --git a/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc index 95bd221..c14a754 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_cell_utils.cc
@@ -126,7 +126,6 @@ case Suggestion::Icon::kDevice: case Suggestion::Icon::kEdit: case Suggestion::Icon::kEmail: - case Suggestion::Icon::kEmpty: case Suggestion::Icon::kError: case Suggestion::Icon::kGlobe: case Suggestion::Icon::kGoogle: @@ -270,8 +269,6 @@ case Suggestion::Icon::kEmail: return ImageModelFromVectorIcon(vector_icons::kEmailOutlineIcon, kIconSize); - case Suggestion::Icon::kEmpty: - return ImageModelFromVectorIcon(omnibox::kHttpIcon, kIconSize); case Suggestion::Icon::kError: return ui::ImageModel::FromVectorIcon(vector_icons::kErrorIcon, ui::kColorSysError, kIconSize);
diff --git a/chrome/browser/ui/views/autofill/popup/popup_row_factory_utils.cc b/chrome/browser/ui/views/autofill/popup/popup_row_factory_utils.cc index e6553c0..9dbe9eb 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_row_factory_utils.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_row_factory_utils.cc
@@ -91,10 +91,6 @@ {SuggestionType::kAllSavedPasswordsEntry, SuggestionType::kManageAddress, SuggestionType::kManageCreditCard, SuggestionType::kManageIban, SuggestionType::kManagePlusAddress, - SuggestionType::kPasswordAccountStorageEmpty, - SuggestionType::kPasswordAccountStorageOptIn, - SuggestionType::kPasswordAccountStorageOptInAndGenerate, - SuggestionType::kPasswordAccountStorageReSignin, SuggestionType::kShowAccountCards, SuggestionType::kUndoOrClear, SuggestionType::kViewPasswordDetails, SuggestionType::kRetrieveAutofillAi});
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc b/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc index 61f2288e..d7634e9 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_view_utils.cc
@@ -484,10 +484,6 @@ case SuggestionType::kInsecureContextPaymentDisabledMessage: case SuggestionType::kMerchantPromoCodeEntry: case SuggestionType::kMixedFormMessage: - case SuggestionType::kPasswordAccountStorageEmpty: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - case SuggestionType::kPasswordAccountStorageReSignin: case SuggestionType::kPasswordFieldByFieldFilling: case SuggestionType::kPlusAddressError: case SuggestionType::kAutofillAiFeedback:
diff --git a/chrome/browser/ui/views/autofill/popup/popup_view_views_unittest.cc b/chrome/browser/ui/views/autofill/popup/popup_view_views_unittest.cc index 379ed5f6a..7346023 100644 --- a/chrome/browser/ui/views/autofill/popup/popup_view_views_unittest.cc +++ b/chrome/browser/ui/views/autofill/popup/popup_view_views_unittest.cc
@@ -101,10 +101,6 @@ SuggestionType::kDatalistEntry, SuggestionType::kScanCreditCard, SuggestionType::kAllSavedPasswordsEntry, - SuggestionType::kPasswordAccountStorageOptIn, - SuggestionType::kPasswordAccountStorageReSignin, - SuggestionType::kPasswordAccountStorageOptInAndGenerate, - SuggestionType::kPasswordAccountStorageEmpty, SuggestionType::kVirtualCreditCardEntry, }; @@ -576,7 +572,7 @@ TEST_F(PopupViewViewsTest, ClickDisabledEntry) { Suggestion opt_int_suggestion("dummy_main_text", "", Suggestion::Icon::kNoIcon, - SuggestionType::kPasswordAccountStorageOptIn); + SuggestionType::kWebauthnCredential); opt_int_suggestion.is_loading = Suggestion::IsLoading(true); controller().set_suggestions({opt_int_suggestion}); CreateAndShowView();
diff --git a/chrome/browser/ui/views/download/bubble/download_bubble_interactive_uitest.cc b/chrome/browser/ui/views/download/bubble/download_bubble_interactive_uitest.cc index 9f0ba2b4..9a1ac05 100644 --- a/chrome/browser/ui/views/download/bubble/download_bubble_interactive_uitest.cc +++ b/chrome/browser/ui/views/download/bubble/download_bubble_interactive_uitest.cc
@@ -37,7 +37,7 @@ #include "url/gurl.h" #if BUILDFLAG(IS_CHROMEOS) -#include "chrome/browser/ui/chromeos/test_util.h" +#include "chrome/browser/ui/ash/test_util.h" #endif #if BUILDFLAG(IS_MAC)
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc index 74c0482..85f256ca 100644 --- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc +++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
@@ -34,6 +34,7 @@ #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_helper.h" #include "chrome/browser/ui/ash/multi_user/test_multi_user_window_manager.h" #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" +#include "chrome/browser/ui/ash/test_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" @@ -41,7 +42,6 @@ #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/chromeos/test_util.h" #include "chrome/browser/ui/passwords/passwords_client_ui_delegate.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
diff --git a/chrome/browser/ui/views/frame/immersive_mode_browser_view_test.cc b/chrome/browser/ui/views/frame/immersive_mode_browser_view_test.cc index c65a85a..8575990 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_browser_view_test.cc +++ b/chrome/browser/ui/views/frame/immersive_mode_browser_view_test.cc
@@ -5,9 +5,9 @@ #include <memory> #include "chrome/app/chrome_command_ids.h" +#include "chrome/browser/ui/ash/test_util.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" -#include "chrome/browser/ui/chromeos/test_util.h" #include "chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h" #include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc index bbbb083..af37cf9 100644 --- a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc +++ b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos_unittest.cc
@@ -9,8 +9,8 @@ #include "base/memory/raw_ptr.h" #include "base/test/scoped_feature_list.h" #include "chrome/app/chrome_command_ids.h" +#include "chrome/browser/ui/ash/test_util.h" #include "chrome/browser/ui/browser_commands.h" -#include "chrome/browser/ui/chromeos/test_util.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
diff --git a/chrome/browser/ui/views/mahi/BUILD.gn b/chrome/browser/ui/views/mahi/BUILD.gn index 77e8ccbc..a739b338 100644 --- a/chrome/browser/ui/views/mahi/BUILD.gn +++ b/chrome/browser/ui/views/mahi/BUILD.gn
@@ -20,9 +20,9 @@ deps = [ "//base", "//chrome/browser/ui/ash/editor_menu:utils", + "//chrome/browser/ui/ash/magic_boost", + "//chrome/browser/ui/ash/magic_boost:magic_boost_constants", "//chrome/browser/ui/ash/read_write_cards", - "//chrome/browser/ui/chromeos/magic_boost", - "//chrome/browser/ui/chromeos/magic_boost:magic_boost_constants", "//chromeos/components/magic_boost/public/cpp", "//chromeos/components/magic_boost/public/cpp/views", "//chromeos/components/mahi/public/cpp",
diff --git a/chrome/browser/ui/views/mahi/mahi_menu_view.cc b/chrome/browser/ui/views/mahi/mahi_menu_view.cc index 08ff8c95..318ca5d 100644 --- a/chrome/browser/ui/views/mahi/mahi_menu_view.cc +++ b/chrome/browser/ui/views/mahi/mahi_menu_view.cc
@@ -16,7 +16,7 @@ #include "chrome/browser/ui/ash/editor_menu/utils/pre_target_handler.h" #include "chrome/browser/ui/ash/editor_menu/utils/pre_target_handler_view.h" #include "chrome/browser/ui/ash/editor_menu/utils/utils.h" -#include "chrome/browser/ui/chromeos/magic_boost/magic_boost_constants.h" +#include "chrome/browser/ui/ash/magic_boost/magic_boost_constants.h" #include "chrome/browser/ui/views/mahi/mahi_menu_constants.h" #include "chromeos/components/magic_boost/public/cpp/views/experiment_badge.h" #include "chromeos/components/mahi/public/cpp/mahi_browser_util.h" @@ -148,8 +148,8 @@ public: explicit MahiMenuWidget(views::Widget::InitParams init_params) : views::Widget(std::move(init_params)) {} - MahiMenuWidget(const Widget&) = delete; - MahiMenuWidget& operator=(const Widget&) = delete; + MahiMenuWidget(const MahiMenuWidget&) = delete; + MahiMenuWidget& operator=(const MahiMenuWidget&) = delete; ~MahiMenuWidget() override = default; protected:
diff --git a/chrome/browser/ui/views/passwords/password_save_update_view.cc b/chrome/browser/ui/views/passwords/password_save_update_view.cc index f09fd8b..0cd3f671 100644 --- a/chrome/browser/ui/views/passwords/password_save_update_view.cc +++ b/chrome/browser/ui/views/passwords/password_save_update_view.cc
@@ -278,15 +278,9 @@ void PasswordSaveUpdateView::UpdateBubbleUIElements() { SetButtons(static_cast<int>(ui::mojom::DialogButton::kOk) | static_cast<int>(ui::mojom::DialogButton::kCancel)); - std::u16string ok_button_text; - if (controller_.IsAccountStorageOptInRequiredBeforeSave()) { - ok_button_text = l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_SAVE_BUBBLE_OPT_IN_BUTTON); - } else { - ok_button_text = l10n_util::GetStringUTF16( - controller_.IsCurrentStateUpdate() ? IDS_PASSWORD_MANAGER_UPDATE_BUTTON - : IDS_PASSWORD_MANAGER_SAVE_BUTTON); - } + std::u16string ok_button_text = l10n_util::GetStringUTF16( + controller_.IsCurrentStateUpdate() ? IDS_PASSWORD_MANAGER_UPDATE_BUTTON + : IDS_PASSWORD_MANAGER_SAVE_BUTTON); SetButtonLabel(ui::mojom::DialogButton::kOk, ok_button_text); SetButtonLabel( ui::mojom::DialogButton::kCancel,
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index 06f2c90..74b01532 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -1101,13 +1101,37 @@ IDS_GUEST_PROFILE_MENU_CLOSE_BUTTON, window_count), std::move(callback), vector_icons::kCloseChromeRefreshIcon); - } else if (switches::IsExplicitBrowserSigninUIOnDesktopEnabled() && - window_count > 0) { + return; + } + + if (switches::IsImprovedSigninUIOnDesktopEnabled()) { + // Show the button only if there are multiple profiles open. + bool other_profile_open = false; + for (Profile* loaded_profile : + g_browser_process->profile_manager()->GetLoadedProfiles()) { + if (loaded_profile == profile) { + continue; + } + if (CountBrowsersFor(loaded_profile) > 0) { + other_profile_open = true; + break; + } + } + if (!other_profile_open) { + return; + } + } + + if (switches::IsExplicitBrowserSigninUIOnDesktopEnabled() && + window_count > 0) { AddFeatureButton( l10n_util::GetPluralStringFUTF16( IDS_PROFILE_MENU_CLOSE_PROFILE_X_WINDOWS_BUTTON, window_count), std::move(callback), vector_icons::kCloseChromeRefreshIcon); - } else if (window_count > 1) { + return; + } + + if (window_count > 1) { AddFeatureButton(l10n_util::GetPluralStringFUTF16( IDS_PROFILES_CLOSE_X_WINDOWS_BUTTON, window_count), std::move(callback),
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc index a3a1071..7f6b2e7 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -1029,7 +1029,6 @@ ProfileMenuViewBase::ActionableItem::kSigninButton, ProfileMenuViewBase::ActionableItem::kAutofillSettingsButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, ProfileMenuViewBase::ActionableItem::kManageProfilesButton, @@ -1164,10 +1163,11 @@ switches::kImprovedSigninUIOnDesktop}), /*disabled_features=*/{}) { // Add two additional profiles. + Profile* other_profile = CreateAdditionalProfile(); CreateAdditionalProfile(); - CreateAdditionalProfile(); - // Open a second browser window for the current profile, so the - // ExitProfileButton is shown. + // Open a browser for another profile, and a second browser for the current + // profile, so the kExitProfileButton is shown. + Browser::Create(Browser::CreateParams(other_profile, /*user_gesture=*/true)); SetTargetBrowser(CreateBrowser(browser()->profile())); RunTest(); } @@ -1240,7 +1240,6 @@ ProfileMenuViewBase::ActionableItem::kManageGoogleAccountButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, ProfileMenuViewBase::ActionableItem::kManageProfilesButton, @@ -1340,7 +1339,6 @@ ProfileMenuViewBase::ActionableItem::kManageGoogleAccountButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, ProfileMenuViewBase::ActionableItem::kManageProfilesButton, @@ -1454,7 +1452,6 @@ ProfileMenuViewBase::ActionableItem::kAutofillSettingsButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, ProfileMenuViewBase::ActionableItem::kManageProfilesButton, @@ -1561,7 +1558,6 @@ ProfileMenuViewBase::ActionableItem::kAutofillSettingsButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, ProfileMenuViewBase::ActionableItem::kManageProfilesButton, @@ -1670,7 +1666,6 @@ ProfileMenuViewBase::ActionableItem::kManageGoogleAccountButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kSignoutButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton, @@ -1761,7 +1756,6 @@ ProfileMenuViewBase::ActionableItem::kAutofillSettingsButton, ProfileMenuViewBase::ActionableItem::kEditProfileButton, ProfileMenuViewBase::ActionableItem::kSyncSettingsButton, - ProfileMenuViewBase::ActionableItem::kExitProfileButton, ProfileMenuViewBase::ActionableItem::kSignoutButton, ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, ProfileMenuViewBase::ActionableItem::kGuestProfileButton,
diff --git a/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_interactive_uitest.cc b/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_interactive_uitest.cc index 1e8c5a0b..1001984 100644 --- a/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_interactive_uitest.cc +++ b/chrome/browser/ui/views/promos/autofill_bubble_signin_promo_interactive_uitest.cc
@@ -526,16 +526,8 @@ EXPECT_TRUE(IsSignedIn()); } -#if BUILDFLAG(IS_MAC) -#define MAYBE_AddressSignInPromoWithAccountSignInPending \ - DISABLED_AddressSignInPromoWithAccountSignInPending -#else -#define MAYBE_AddressSignInPromoWithAccountSignInPending \ - AddressSignInPromoWithAccountSignInPending -#endif - IN_PROC_BROWSER_TEST_F(AutofillBubbleSignInPromoInteractiveUITest, - MAYBE_AddressSignInPromoWithAccountSignInPending) { + AddressSignInPromoWithAccountSignInPending) { // Sign in with an account, and put its refresh token into an error // state. This simulates the "sign in pending" state. AccountInfo info = signin::MakePrimaryAccountAvailable(
diff --git a/chrome/browser/ui/web_applications/sub_apps_admin_policy_browsertest.cc b/chrome/browser/ui/web_applications/sub_apps_admin_policy_browsertest.cc index 92b6191..2026465 100644 --- a/chrome/browser/ui/web_applications/sub_apps_admin_policy_browsertest.cc +++ b/chrome/browser/ui/web_applications/sub_apps_admin_policy_browsertest.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/ui/web_applications/sub_apps_service_impl.h" #include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/pref_names.h" @@ -66,11 +67,12 @@ } IsolatedWebAppUrlInfo InstallIwaParentApp() { - iwa_dev_server_ = CreateAndStartDevServer( - FILE_PATH_LITERAL("web_apps/subapps_isolated_app")); - IsolatedWebAppUrlInfo parent_app = - web_app::InstallDevModeProxyIsolatedWebApp( - browser()->profile(), iwa_dev_server_->GetOrigin()); + std::unique_ptr<ScopedBundledIsolatedWebApp> app = + IsolatedWebAppBuilder(ManifestBuilder()) + .AddFolderFromDisk("/", "web_apps/subapps_isolated_app") + .BuildBundle(); + app->TrustSigningKey(); + IsolatedWebAppUrlInfo parent_app = app->InstallChecked(profile()); parent_app_id_ = parent_app.app_id(); EXPECT_EQ(provider().registrar_unsafe().GetInstallState(parent_app_id_),
diff --git a/chrome/browser/ui/web_applications/sub_apps_install_dialog_controller_browsertest.cc b/chrome/browser/ui/web_applications/sub_apps_install_dialog_controller_browsertest.cc index 7dd18747..3cbd9da1 100644 --- a/chrome/browser/ui/web_applications/sub_apps_install_dialog_controller_browsertest.cc +++ b/chrome/browser/ui/web_applications/sub_apps_install_dialog_controller_browsertest.cc
@@ -6,12 +6,14 @@ #include "base/containers/contains.h" #include "base/containers/to_vector.h" +#include "base/test/gmock_expected_support.h" #include "base/test/run_until.h" #include "base/types/cxx23_to_underlying.h" #include "chrome/browser/ash/system_web_apps/system_web_app_manager.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" @@ -34,12 +36,10 @@ ash::SystemWebAppManager::Get(browser()->profile()) ->InstallSystemAppsForTesting(); - std::unique_ptr<net::EmbeddedTestServer> iwa_dev_server = - CreateAndStartDevServer( - FILE_PATH_LITERAL("web_apps/subapps_isolated_app")); - - IsolatedWebAppUrlInfo parent_app = web_app::InstallDevModeProxyIsolatedWebApp( - browser()->profile(), iwa_dev_server->GetOrigin()); + std::unique_ptr<ScopedBundledIsolatedWebApp> app = + IsolatedWebAppBuilder(ManifestBuilder()).BuildBundle(); + ASSERT_OK_AND_ASSIGN(IsolatedWebAppUrlInfo parent_app, + app->TrustBundleAndInstall(profile())); const webapps::AppId parent_app_id = parent_app.app_id(); auto controller = std::make_unique<SubAppsInstallDialogController>();
diff --git a/chrome/browser/ui/web_applications/sub_apps_service_impl_browsertest.cc b/chrome/browser/ui/web_applications/sub_apps_service_impl_browsertest.cc index 6ec64879..87c8993 100644 --- a/chrome/browser/ui/web_applications/sub_apps_service_impl_browsertest.cc +++ b/chrome/browser/ui/web_applications/sub_apps_service_impl_browsertest.cc
@@ -10,9 +10,11 @@ #include <vector> #include "base/test/bind.h" +#include "base/test/gmock_expected_support.h" #include "base/test/scoped_feature_list.h" #include "base/test/simple_test_clock.h" #include "base/test/test_future.h" +#include "base/values.h" #include "chrome/browser/notifications/notification_display_service_tester.h" #include "chrome/browser/permissions/permission_decision_auto_blocker_factory.h" #include "chrome/browser/profiles/profile.h" @@ -22,6 +24,7 @@ #include "chrome/browser/ui/web_applications/test/isolated_web_app_test_utils.h" #include "chrome/browser/ui/web_applications/web_app_browsertest_base.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "chrome/browser/web_applications/proto/web_app_install_state.pb.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/web_app.h" @@ -100,6 +103,7 @@ SubAppsInstallDialogController::SetAutomaticActionForTesting( SubAppsInstallDialogController::DialogActionForTesting:: kAccept)) {} + void SetUpOnMainThread() override { IsolatedWebAppBrowserTestHarness::SetUpOnMainThread(); notification_display_service_ = @@ -151,11 +155,15 @@ } IsolatedWebAppUrlInfo InstallIwaParentApp() { - iwa_dev_server_ = CreateAndStartDevServer( - FILE_PATH_LITERAL("web_apps/subapps_isolated_app")); - IsolatedWebAppUrlInfo parent_app = - web_app::InstallDevModeProxyIsolatedWebApp( - browser()->profile(), iwa_dev_server_->GetOrigin()); + std::unique_ptr<ScopedBundledIsolatedWebApp> app = + IsolatedWebAppBuilder( + ManifestBuilder().AddPermissionsPolicy( + blink::mojom::PermissionsPolicyFeature::kSubApps, /*self=*/true, + /*origins=*/{})) + .AddFolderFromDisk("/", "web_apps/subapps_isolated_app") + .BuildBundle(); + app->TrustSigningKey(); + IsolatedWebAppUrlInfo parent_app = app->InstallChecked(profile()); parent_app_id_ = parent_app.app_id(); EXPECT_EQ(proto::InstallState::INSTALLED_WITH_OS_INTEGRATION, @@ -167,8 +175,9 @@ } // sub_app_paths should contain paths, not full URLs. - bool AddSubAppsJS(content::RenderFrameHost* frame, - const std::vector<std::string>& sub_app_paths) const { + content::EvalJsResult AddSubAppsJS( + content::RenderFrameHost* frame, + const std::vector<std::string>& sub_app_paths) const { std::string script = "navigator.subApps.add({"; for (std::string path : sub_app_paths) { base::StringAppendF(&script, R"("%s": {"installURL": "%s"},)", &path[0], @@ -176,7 +185,7 @@ } script += " })"; - return content::ExecJs(frame, script); + return content::EvalJs(frame, script); } content::EvalJsResult ListSubAppsJS(content::RenderFrameHost* frame) const { @@ -308,7 +317,10 @@ IN_PROC_BROWSER_TEST_F(SubAppsServiceImplBrowserTest, EndToEndAdd) { content::RenderFrameHost* iwa_frame = InstallAndOpenParentIwaApp(); - EXPECT_TRUE(AddSubAppsJS(iwa_frame, {kSub1, kSub2})); + EXPECT_EQ( + AddSubAppsJS(iwa_frame, {kSub1, kSub2}), + base::Value( + base::Value::Dict().Set(kSub1, "success").Set(kSub2, "success"))); EXPECT_EQ(2ul, GetAllSubAppIds(parent_app_id_).size()); } @@ -1052,12 +1064,14 @@ ListReturnsOnlyAppsInstalledByTheCurrentParent) { content::RenderFrameHost* iwa_frame_1 = InstallAndOpenParentIwaApp(); - // Install the parent app a second time. InstallDevModeProxyIsolatedWebApp - // generates a new random app id, making the 2 installs effectively 2 - // different apps. - IsolatedWebAppUrlInfo parent_app_2 = - web_app::InstallDevModeProxyIsolatedWebApp(browser()->profile(), - iwa_dev_server_->GetOrigin()); + // Install a second IWA. + ASSERT_OK_AND_ASSIGN( + IsolatedWebAppUrlInfo parent_app_2, + IsolatedWebAppBuilder( + ManifestBuilder().AddPermissionsPolicy( + blink::mojom::PermissionsPolicyFeature::kSubApps, true, {})) + .BuildBundle() + ->TrustBundleAndInstall(profile())); content::RenderFrameHost* iwa_frame_2 = OpenApp(parent_app_2.app_id()); EXPECT_EQ(proto::InstallState::INSTALLED_WITH_OS_INTEGRATION, @@ -1068,9 +1082,15 @@ EXPECT_NE(parent_app_id_, parent_app_2.app_id()); // Call Add for both IWAs. - EXPECT_TRUE(AddSubAppsJS(iwa_frame_1, {kSubAppPath, kSubAppPath2})); - EXPECT_TRUE(AddSubAppsJS(iwa_frame_2, {})); - EXPECT_TRUE(AddSubAppsJS(iwa_frame_1, {kSubAppPath, kSubAppPath3})); + EXPECT_EQ(AddSubAppsJS(iwa_frame_1, {kSubAppPath, kSubAppPath2}), + base::Value(base::Value::Dict() + .Set(kSubAppPath, "success") + .Set(kSubAppPath2, "success"))); + EXPECT_EQ(AddSubAppsJS(iwa_frame_2, {}), base::Value(base::Value::Dict())); + EXPECT_EQ(AddSubAppsJS(iwa_frame_1, {kSubAppPath, kSubAppPath3}), + base::Value(base::Value::Dict() + .Set(kSubAppPath, "success") + .Set(kSubAppPath3, "success"))); // Check List results for the main app contains 3 sub-apps. auto list_result_1 = ListSubAppsJS(iwa_frame_1); @@ -1196,26 +1216,28 @@ // Remove fails for a sub-app with a different parent_app_id. IN_PROC_BROWSER_TEST_F(SubAppsServiceImplBrowserTest, RemoveFailWrongParent) { - content::RenderFrameHost* iwa_frame = InstallAndOpenParentIwaApp(); - BindRemote(iwa_frame); + content::RenderFrameHost* iwa_frame_1 = InstallAndOpenParentIwaApp(); + BindRemote(iwa_frame_1); ExpectCallAdd( {{GetURLFromPath(kSubAppPath), SubAppsServiceResultCode::kSuccess}}, {{kSubAppPath, kSubAppPath}}); // Install a second IWA. - auto iwa_dev_server_2 = CreateAndStartDevServer( - FILE_PATH_LITERAL("web_apps/simple_isolated_app")); - IsolatedWebAppUrlInfo parent_app_2 = - web_app::InstallDevModeProxyIsolatedWebApp(browser()->profile(), - iwa_dev_server_->GetOrigin()); + ASSERT_OK_AND_ASSIGN( + IsolatedWebAppUrlInfo parent_app_2, + IsolatedWebAppBuilder( + ManifestBuilder().AddPermissionsPolicy( + blink::mojom::PermissionsPolicyFeature::kSubApps, true, {})) + .BuildBundle() + ->TrustBundleAndInstall(profile())); content::RenderFrameHost* iwa_frame_2 = OpenApp(parent_app_2.app_id()); remote_.reset(); BindRemote(iwa_frame_2); EXPECT_EQ( - SingleRemoveResultMojo(kSubAppPath2, SubAppsServiceResultCode::kFailure), - CallRemove({kSubAppPath2})); + SingleRemoveResultMojo(kSubAppPath, SubAppsServiceResultCode::kFailure), + CallRemove({kSubAppPath})); EXPECT_FALSE(UninstallNotificationShown()); }
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest_base.h b/chrome/browser/ui/web_applications/web_app_browsertest_base.h index d59482c..7c49c140 100644 --- a/chrome/browser/ui/web_applications/web_app_browsertest_base.h +++ b/chrome/browser/ui/web_applications/web_app_browsertest_base.h
@@ -20,7 +20,7 @@ #include "url/gurl.h" #if BUILDFLAG(IS_CHROMEOS) -#include "chrome/browser/ui/chromeos/test_util.h" +#include "chrome/browser/ui/ash/test_util.h" #endif class Profile;
diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc index 4693833..9e86098 100644 --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc
@@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/accessibility/accessibility_ui.h" +#include <map> #include <memory> #include <optional> #include <string> @@ -15,7 +16,9 @@ #include "base/functional/bind.h" #include "base/functional/callback_helpers.h" #include "base/json/json_writer.h" +#include "base/memory/raw_ref.h" #include "base/notreached.h" +#include "base/ranges/algorithm.h" #include "base/strings/escape.h" #include "base/strings/pattern.h" #include "base/strings/string_number_conversions.h" @@ -42,6 +45,8 @@ #include "content/public/browser/scoped_accessibility_mode.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" +#include "content/public/browser/web_contents_observer.h" +#include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_ui_data_source.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/ax_updates_and_events.h" @@ -346,6 +351,192 @@ return *str; } +// A holder for process-wide and per-tab accessibility state. An instance of +// this class is attached to the WebContents hosting chrome://accessibility. +// This state is not attached to AccessibilityUIMessageHandler, as it does not +// survive page reload in some situations; see https://crbug.com/355190669. An +// instance of this class monitors its WebContents's primary page and +// saves/restores accessibility state as the user navigates away from and back +// to chrome://accessibility. +class AccessibilityUiModes + : public content::WebContentsUserData<AccessibilityUiModes>, + public content::WebContentsObserver { + public: + ~AccessibilityUiModes() override = default; + + // Returns the instance for the WebContents hosting chrome://accessibility. + static AccessibilityUiModes& GetInstance(content::WebContents* web_contents) { + CreateForWebContents(web_contents); + return *FromWebContents(web_contents); + } + + // Sets or clears `flags` (as per `enabled`) for all tabs in the browser + // process for the lifetime of the accessibility UI page. + void SetModeForProcess(uint32_t flags, bool enabled) { + if (process_accessibility_mode_) { + ui::AXMode mode = process_accessibility_mode_->mode(); + mode.set_mode(flags, enabled); + process_accessibility_mode_ = + content::BrowserAccessibilityState::GetInstance() + ->CreateScopedModeForProcess(mode); + } + } + + // Applies `mode` to `web_contents` for the lifetime of the accessibility + // UI page. + void SetModeForWebContents(content::WebContents* web_contents, + ui::AXMode mode) { + // Create/replace a ScopedAccessibilityMode targeting `web_contents`. + auto scoped_mode = content::BrowserAccessibilityState::GetInstance() + ->CreateScopedModeForWebContents(web_contents, mode); + auto [iter, inserted] = page_accessibility_modes_.try_emplace( + web_contents, *this, *web_contents, std::move(scoped_mode)); + if (!inserted) { + iter->second.SetMode(std::move(scoped_mode)); + } + } + + // content::WebContentsObserver: + void PrimaryPageChanged(content::Page& page) override { + const GURL& new_page_url = GetWebContents().GetLastCommittedURL(); + if (new_page_url != page_url_) { + if (process_accessibility_mode_) { + // Navigating away from chrome://accessibility. Save the process mode. + SaveAccessibilityState(); + } + } else if (!process_accessibility_mode_) { + // Navigating back to chrome://accessibility. Restore the process mode. + RestoreAccessibilityState(); + } + } + + private: + friend content::WebContentsUserData<AccessibilityUiModes>; + WEB_CONTENTS_USER_DATA_KEY_DECL(); + + explicit AccessibilityUiModes(content::WebContents* web_contents) + : WebContentsUserData(*web_contents), + WebContentsObserver(web_contents), + page_url_(web_contents->GetLastCommittedURL()), + process_accessibility_mode_( + content::BrowserAccessibilityState::GetInstance() + ->CreateScopedModeForProcess(ui::AXMode())) {} + + // Saves the process-wide and per-tab accessibility mode flags and clears + // all ScopedAccessibilityMode instances managed for this instance of the + // accessibility UI page. + void SaveAccessibilityState() { + saved_process_mode_ = process_accessibility_mode_->mode(); + process_accessibility_mode_.reset(); + + base::ranges::for_each( + page_accessibility_modes_, + [](PageAccessibilityMode& page_mode) { page_mode.Save(); }, + &std::map<void*, PageAccessibilityMode>::value_type::second); + } + + // Restores the process-wide and per-tab accessibility mode flags and clears + // all ScopedAccessibilityMode instances managed for this instance of the + // accessibility UI page. + void RestoreAccessibilityState() { + auto& browser_accessibility_state = + *content::BrowserAccessibilityState::GetInstance(); + process_accessibility_mode_ = + browser_accessibility_state.CreateScopedModeForProcess( + std::exchange(saved_process_mode_, ui::AXMode())); + + base::ranges::for_each( + page_accessibility_modes_, + [&browser_accessibility_state](PageAccessibilityMode& page_mode) { + page_mode.Restore(browser_accessibility_state); + }, + &std::map<void*, PageAccessibilityMode>::value_type::second); + } + + void OnPageDestroyed(content::WebContents& page_web_contents) { + page_accessibility_modes_.erase(&page_web_contents); + } + + // A ScopedAccessibilityMode for a page hosted in a WebContents. + class PageAccessibilityMode : public content::WebContentsObserver { + public: + PageAccessibilityMode( + AccessibilityUiModes& parent, + content::WebContents& web_contents, + std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode); + PageAccessibilityMode(const PageAccessibilityMode&) = delete; + PageAccessibilityMode& operator=(const PageAccessibilityMode&) = delete; + ~PageAccessibilityMode() override; + + void SetMode( + std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode); + void Save(); + void Restore( + content::BrowserAccessibilityState& browser_accessibility_state); + + // content::WebContentsObserver: + void WebContentsDestroyed() override; + + private: + const raw_ref<AccessibilityUiModes> parent_; + std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode_; + + // The accessibility mode for this WebContents when the accessibility UI + // page is no longer the primary page in its WebContents. + ui::AXMode saved_mode_; + }; + + // The URL of the chrome://accessibility page visible in the WebContents. + const GURL page_url_; + + // Accessibility modes for pages in WebContentses. The map's key is a pointer + // to a WebContents. + std::map<void*, PageAccessibilityMode> page_accessibility_modes_; + + // A ScopedAccessibilityMode that holds the process-wide ("global") mode flags + // modified via the `setGlobalFlag` callback from the page. Holds at least an + // instance with no mode flags set while the chrome://accessibility page is + // the primary page in its WebContents. + std::unique_ptr<content::ScopedAccessibilityMode> process_accessibility_mode_; + + // The process-wide accessibility mode when the accessibility UI page is no + // longer the primary page in its WebContents. + ui::AXMode saved_process_mode_; +}; + +WEB_CONTENTS_USER_DATA_KEY_IMPL(AccessibilityUiModes); + +AccessibilityUiModes::PageAccessibilityMode::PageAccessibilityMode( + AccessibilityUiModes& parent, + content::WebContents& web_contents, + std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode) + : content::WebContentsObserver(&web_contents), + parent_(parent), + accessibility_mode_(std::move(accessibility_mode)) {} + +AccessibilityUiModes::PageAccessibilityMode::~PageAccessibilityMode() = default; + +void AccessibilityUiModes::PageAccessibilityMode::SetMode( + std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode) { + accessibility_mode_ = std::move(accessibility_mode); +} + +void AccessibilityUiModes::PageAccessibilityMode::Save() { + saved_mode_ = accessibility_mode_->mode(); + accessibility_mode_.reset(); +} + +void AccessibilityUiModes::PageAccessibilityMode::Restore( + content::BrowserAccessibilityState& browser_accessibility_state) { + accessibility_mode_ = + browser_accessibility_state.CreateScopedModeForWebContents( + web_contents(), std::exchange(saved_mode_, ui::AXMode())); +} + +void AccessibilityUiModes::PageAccessibilityMode::WebContentsDestroyed() { + parent_->OnPageDestroyed(*web_contents()); +} + } // namespace AccessibilityUIConfig::AccessibilityUIConfig() @@ -393,22 +584,7 @@ } } -AccessibilityUIMessageHandler::PageAccessibilityMode::PageAccessibilityMode( - base::WeakPtr<content::WebContents> web_contents, - std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode) - : web_contents(std::move(web_contents)), - accessibility_mode(std::move(accessibility_mode)) {} - -AccessibilityUIMessageHandler::PageAccessibilityMode::PageAccessibilityMode( - PageAccessibilityMode&& other) noexcept = default; - -AccessibilityUIMessageHandler::PageAccessibilityMode::~PageAccessibilityMode() = - default; - -AccessibilityUIMessageHandler::AccessibilityUIMessageHandler() - : process_accessibility_mode_( - content::BrowserAccessibilityState::GetInstance() - ->CreateScopedModeForProcess(ui::AXMode())) {} +AccessibilityUIMessageHandler::AccessibilityUIMessageHandler() = default; AccessibilityUIMessageHandler::~AccessibilityUIMessageHandler() { if (!observer_) { @@ -461,24 +637,6 @@ base::Unretained(this))); } -void AccessibilityUIMessageHandler::SetAccessibilityModeForWebContents( - content::WebContents* web_contents, - ui::AXMode mode) { - // Erase any items in the container for WebContentses that have since been - // destroyed. - std::erase_if(page_accessibility_modes_, [](const auto& item) { - return item.second.web_contents.WasInvalidated(); - }); - - // Create/replace a ScopedAccessibilityMode targeting `web_contents`. - page_accessibility_modes_.insert_or_assign( - web_contents, - PageAccessibilityMode( - web_contents->GetWeakPtr(), - content::BrowserAccessibilityState::GetInstance() - ->CreateScopedModeForWebContents(web_contents, mode))); -} - void AccessibilityUIMessageHandler::ToggleAccessibilityForWebContents( const base::Value::List& args) { const base::Value::Dict& data = args[0].GetDict(); @@ -518,7 +676,8 @@ current_mode.set_mode(ui::AXMode::kHTML, true); } - SetAccessibilityModeForWebContents(web_contents, current_mode); + AccessibilityUiModes::GetInstance(web_ui()->GetWebContents()) + .SetModeForWebContents(web_contents, current_mode); if (should_request_tree) { base::Value::Dict request_data; @@ -581,11 +740,8 @@ new_mode.set_mode(ui::AXMode::kHTML, true); } - ui::AXMode mode = process_accessibility_mode_->mode(); - mode.set_mode(new_mode.flags(), enabled); - process_accessibility_mode_ = - content::BrowserAccessibilityState::GetInstance() - ->CreateScopedModeForProcess(mode); + AccessibilityUiModes::GetInstance(web_ui()->GetWebContents()) + .SetModeForProcess(new_mode.flags(), enabled); // It's possible that the user is trying to remove a global flag that was set // outside of chrome://accessibility. Modify the process-wide state @@ -651,7 +807,8 @@ content::WebContents::FromRenderViewHost(rvh); // No matter the state of the current web_contents, we want to force the mode // because we are about to show the accessibility tree - SetAccessibilityModeForWebContents(web_contents, ui::kAXModeComplete); + AccessibilityUiModes::GetInstance(web_ui()->GetWebContents()) + .SetModeForWebContents(web_contents, ui::kAXModeComplete); std::vector<AXPropertyFilter> property_filters; AddPropertyFilters(property_filters, allow, AXPropertyFilter::ALLOW);
diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.h b/chrome/browser/ui/webui/accessibility/accessibility_ui.h index d9ae654c..b171afc9 100644 --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.h +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.h
@@ -5,7 +5,6 @@ #ifndef CHROME_BROWSER_UI_WEBUI_ACCESSIBILITY_ACCESSIBILITY_UI_H_ #define CHROME_BROWSER_UI_WEBUI_ACCESSIBILITY_ACCESSIBILITY_UI_H_ -#include <map> #include <memory> #include <string> #include <vector> @@ -18,7 +17,6 @@ #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" #include "content/public/browser/webui_config.h" -#include "ui/accessibility/ax_mode.h" #include "ui/accessibility/platform/inspect/ax_api_type.h" namespace ui { @@ -26,7 +24,6 @@ } namespace content { -class ScopedAccessibilityMode; class WebContents; } // namespace content @@ -80,11 +77,6 @@ static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); private: - // Applies `mode` to `web_contents` for the lifetime of the accessibility - // UI page. - void SetAccessibilityModeForWebContents(content::WebContents* web_contents, - ui::AXMode mode); - void ToggleAccessibilityForWebContents(const base::Value::List& args); void SetGlobalFlag(const base::Value::List& args); void SetGlobalString(const base::Value::List& args); @@ -105,34 +97,6 @@ // the user-set type is not supported. ui::AXApiType::Type GetRecordingApiType(); - // A ScopedAccessibilityMode for a page hosted in a WebContents. - struct PageAccessibilityMode { - base::WeakPtr<content::WebContents> web_contents; - std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode; - - PageAccessibilityMode() = delete; - PageAccessibilityMode( - base::WeakPtr<content::WebContents> web_contents, - std::unique_ptr<content::ScopedAccessibilityMode> accessibility_mode); - PageAccessibilityMode(PageAccessibilityMode&& other) noexcept; - PageAccessibilityMode& operator=(PageAccessibilityMode&& other) noexcept = - default; - ~PageAccessibilityMode(); - }; - - // Accessibility modes for pages in WebContentses. The map's key is a pointer - // to a WebContents. AccessibilityUIMessageHandler does not observe the - // lifecycle of these WebContentses, so any additions or modifications to the - // data for a WebContents in this mapping MUST be preceded by a sweep to erase - // any entries for which the value's WeakPtr<WebContents> has been - // invalidated. - std::map<void*, PageAccessibilityMode> page_accessibility_modes_; - - // A ScopedAccessibilityMode that holds the process-wide ("global") mode flags - // modified via the `setGlobalFlag` callback from the page. Guaranteed to hold - // at least an instance with no mode flags set. - std::unique_ptr<content::ScopedAccessibilityMode> process_accessibility_mode_; - std::vector<std::string> event_logs_; std::unique_ptr<AccessibilityUIObserver> observer_;
diff --git a/chrome/browser/ui/webui/certificate_manager/DEPS b/chrome/browser/ui/webui/certificate_manager/DEPS index 7b70e55..8bf5ea656 100644 --- a/chrome/browser/ui/webui/certificate_manager/DEPS +++ b/chrome/browser/ui/webui/certificate_manager/DEPS
@@ -1,3 +1,3 @@ include_rules = [ - "+ash/components/kcer" + "+chromeos/ash/components/kcer" ]
diff --git a/chrome/browser/ui/webui/certificate_manager/client_cert_sources.cc b/chrome/browser/ui/webui/certificate_manager/client_cert_sources.cc index 8d7cd306..dee7733 100644 --- a/chrome/browser/ui/webui/certificate_manager/client_cert_sources.cc +++ b/chrome/browser/ui/webui/certificate_manager/client_cert_sources.cc
@@ -68,13 +68,13 @@ #endif #if BUILDFLAG(IS_CHROMEOS_ASH) -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_histograms.h" #include "ash/constants/ash_features.h" #include "chrome/browser/ash/kcer/kcer_factory_ash.h" #include "chrome/browser/ash/net/client_cert_store_ash.h" #include "chrome/browser/ash/net/client_cert_store_kcer.h" #include "chrome/browser/ash/profiles/profile_helper.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" #include "chromeos/constants/chromeos_features.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h"
diff --git a/chrome/browser/ui/webui/intro/intro_handler.cc b/chrome/browser/ui/webui/intro/intro_handler.cc index 33ff080..825205d 100644 --- a/chrome/browser/ui/webui/intro/intro_handler.cc +++ b/chrome/browser/ui/webui/intro/intro_handler.cc
@@ -37,7 +37,6 @@ using signin::constants::kNoHostedDomainFound; namespace { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) policy::CloudPolicyStore* GetCloudPolicyStore() { auto* machine_level_manager = g_browser_process->browser_policy_connector() ->machine_level_user_cloud_policy_manager(); @@ -161,106 +160,7 @@ base::CancelableOnceCallback<void()> on_organization_fetch_timeout_; base::TimeTicks start_time_; }; -#endif -#if BUILDFLAG(IS_CHROMEOS_LACROS) -class IdentityManagerObserver : public signin::IdentityManager::Observer { - public: - explicit IdentityManagerObserver( - base::RepeatingCallback<void()> handle_identity_manager_change, - signin::IdentityManager& identity_manager) - : account_id_(identity_manager - .GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) - .account_id) { - DCHECK(handle_identity_manager_change); - - identity_manager_observation_.Observe(&identity_manager); - handle_identity_manager_change_ = std::move(handle_identity_manager_change); - } - - void OnExtendedAccountInfoUpdated(const AccountInfo& account_info) override { - if (account_info.account_id != account_id_) { - return; - } - - handle_identity_manager_change_.Run(); - if (!account_info.account_image.IsEmpty() && account_info.IsValid()) { - identity_manager_observation_.Reset(); - } - } - - private: - base::ScopedObservation<signin::IdentityManager, - signin::IdentityManager::Observer> - identity_manager_observation_{this}; - base::RepeatingCallback<void()> handle_identity_manager_change_; - const CoreAccountId account_id_; -}; - -std::string GetPictureUrl(content::WebUI& web_ui, - const AccountInfo& account_info) { - const int avatar_size = 100; - const int avatar_icon_size = avatar_size * web_ui.GetDeviceScaleFactor(); - - DCHECK(!account_info.IsEmpty()); - gfx::Image icon = account_info.account_image.IsEmpty() - ? ui::ResourceBundle::GetSharedInstance().GetImageNamed( - profiles::GetPlaceholderAvatarIconResourceID()) - : account_info.account_image; - - return webui::GetBitmapDataUrl( - profiles::GetSizedAvatarIcon(icon, avatar_icon_size, avatar_icon_size) - .AsBitmap()); -} - -std::string GetLacrosIntroWelcomeTitle(const AccountInfo& account_info) { - const bool has_given_name = !account_info.given_name.empty(); - return has_given_name ? l10n_util::GetStringFUTF8( - IDS_PRIMARY_PROFILE_FIRST_RUN_TITLE, - base::UTF8ToUTF16(account_info.given_name)) - : l10n_util::GetStringUTF8( - IDS_PRIMARY_PROFILE_FIRST_RUN_NO_NAME_TITLE); -} - -std::string GetLacrosIntroManagementDisclaimer( - const Profile& profile, - const std::string& account_domain_name) { - // TODO(crbug.com/40256886): Fix logic mismatch in device/account management - // between Lacros and DICE. - const bool is_managed_account = - profile.GetProfilePolicyConnector()->IsManaged(); - if (!is_managed_account || account_domain_name == kNoHostedDomainFound) { - return std::string(); - } - return l10n_util::GetStringFUTF8( - IDS_PRIMARY_PROFILE_FIRST_RUN_SESSION_MANAGED_BY_DESCRIPTION, - base::UTF8ToUTF16(account_domain_name)); -} - -base::Value::Dict GetProfileInfoValue(content::WebUI& web_ui) { - auto* profile = Profile::FromWebUI(&web_ui); - - const auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); - const CoreAccountInfo core_account_info = - identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); - AccountInfo account_info = - identity_manager->FindExtendedAccountInfoByAccountId( - core_account_info.account_id); - - if (account_info.email.empty()) { - return base::Value::Dict(); - } - - return base::Value::Dict() - .Set("pictureUrl", GetPictureUrl(web_ui, account_info)) - .Set("managementDisclaimer", GetLacrosIntroManagementDisclaimer( - *profile, account_info.hosted_domain)) - .Set("title", GetLacrosIntroWelcomeTitle(account_info)) - .Set("subtitle", - l10n_util::GetStringFUTF8(IDS_PRIMARY_PROFILE_FIRST_RUN_SUBTITLE, - base::UTF8ToUTF16(account_info.email))); -} -#endif } // namespace IntroHandler::IntroHandler( @@ -277,12 +177,10 @@ IntroHandler::~IntroHandler() = default; void IntroHandler::RegisterMessages() { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) web_ui()->RegisterMessageCallback( "continueWithoutAccount", base::BindRepeating(&IntroHandler::HandleContinueWithoutAccount, base::Unretained(this))); -#endif web_ui()->RegisterMessageCallback( "continueWithAccount", base::BindRepeating(&IntroHandler::HandleContinueWithAccount, @@ -302,21 +200,11 @@ } void IntroHandler::OnJavascriptAllowed() { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) if (!is_device_managed_) { return; } policy_store_observer_ = std::make_unique<PolicyStoreObserver>(base::BindOnce( &IntroHandler::FireManagedDisclaimerUpdate, base::Unretained(this))); -#endif -#if BUILDFLAG(IS_CHROMEOS_LACROS) - identity_manager_observer_ = std::make_unique<IdentityManagerObserver>( - base::BindRepeating(&IntroHandler::UpdateProfileInfo, - base::Unretained(this)), - *IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()))); - - UpdateProfileInfo(); -#endif } void IntroHandler::HandleContinueWithAccount(const base::Value::List& args) { @@ -324,7 +212,6 @@ intro_callback_.Run(IntroChoice::kContinueWithAccount); } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) void IntroHandler::HandleContinueWithoutAccount(const base::Value::List& args) { CHECK(args.empty()); intro_callback_.Run(IntroChoice::kContinueWithoutAccount); @@ -335,7 +222,6 @@ FireWebUIListener("reset-intro-buttons"); } } -#endif void IntroHandler::HandleInitializeMainView(const base::Value::List& args) { CHECK(args.empty()); @@ -363,13 +249,6 @@ } } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -void IntroHandler::UpdateProfileInfo() { - DCHECK(IsJavascriptAllowed()); - FireWebUIListener("on-profile-info-changed", GetProfileInfoValue(*web_ui())); -} -#endif - void IntroHandler::FireManagedDisclaimerUpdate(std::string disclaimer) { DCHECK(is_device_managed_); if (IsJavascriptAllowed()) {
diff --git a/chrome/browser/ui/webui/intro/intro_handler.h b/chrome/browser/ui/webui/intro/intro_handler.h index 25b8fb24..9506e5d 100644 --- a/chrome/browser/ui/webui/intro/intro_handler.h +++ b/chrome/browser/ui/webui/intro/intro_handler.h
@@ -11,6 +11,10 @@ #include "components/signin/public/identity_manager/identity_manager.h" #include "content/public/browser/web_ui_message_handler.h" +#if !BUILDFLAG(ENABLE_DICE_SUPPORT) +#error "This file should only be included if DICE support." +#endif + enum class IntroChoice; enum class DefaultBrowserChoice; @@ -29,9 +33,7 @@ // content::WebUIMessageHandler: void RegisterMessages() override; void OnJavascriptAllowed() override; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) void ResetIntroButtons(); -#endif void ResetDefaultBrowserButtons(); private: @@ -40,11 +42,9 @@ // Chrome. void HandleContinueWithAccount(const base::Value::List& args); -#if BUILDFLAG(ENABLE_DICE_SUPPORT) // Handles "continueWithoutAccount" message from the page. No arguments. // This message is sent when the user declines signing in to Chrome. void HandleContinueWithoutAccount(const base::Value::List& args); -#endif // Handles "initializeMainView" message from the page. No arguments. // This message is sent when the view is created. @@ -60,11 +60,6 @@ // default browser. void HandleSkipDefaultBrowser(const base::Value::List& args); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // Sends an updated profile info (avatar, domain etc..) to the WebUI. - void UpdateProfileInfo(); -#endif - // Fires the `managed-device-disclaimer-updated` event with the disclaimer // that will be caught and handled in the ts file. void FireManagedDisclaimerUpdate(std::string disclaimer); @@ -72,12 +67,7 @@ const base::RepeatingCallback<void(IntroChoice)> intro_callback_; base::OnceCallback<void(DefaultBrowserChoice)> default_browser_callback_; const bool is_device_managed_ = false; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) std::unique_ptr<policy::CloudPolicyStore::Observer> policy_store_observer_; -#endif -#if BUILDFLAG(IS_CHROMEOS_LACROS) - std::unique_ptr<signin::IdentityManager::Observer> identity_manager_observer_; -#endif }; #endif // CHROME_BROWSER_UI_WEBUI_INTRO_INTRO_HANDLER_H_
diff --git a/chrome/browser/ui/webui/intro/intro_ui.h b/chrome/browser/ui/webui/intro/intro_ui.h index effa6c4b..0ac1c1a 100644 --- a/chrome/browser/ui/webui/intro/intro_ui.h +++ b/chrome/browser/ui/webui/intro/intro_ui.h
@@ -74,8 +74,6 @@ void SetDefaultBrowserCallback(DefaultBrowserCallback callback); private: - friend class ProfilePickerLacrosFirstRunBrowserTestBase; - void HandleSigninChoice(IntroChoice choice); void HandleDefaultBrowserChoice(DefaultBrowserChoice choice);
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc index e6461f6..443a2293 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.cc
@@ -444,10 +444,6 @@ }; source->AddLocalizedStrings(kStrings); - source->AddBoolean( - "modulesOverflowScrollbarEnabled", - base::FeatureList::IsEnabled(ntp_features::kNtpModulesOverflowScrollbar)); - source->AddString( "calendarModuleDismissHours", base::NumberToString(
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 1392c6e..fa3d55d 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -66,6 +66,7 @@ #include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context_factory.h" #include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" @@ -2998,43 +2999,43 @@ public: void SetUp() override { web_app::test::AwaitStartWebAppProviderAndSubsystems(profile()); - InstallIsolatedWebApp(iwa_url(), "IWA Name"); + iwa_url_info_ = InstallIsolatedWebApp("IWA Name"); SiteSettingsHandlerBaseTest::SetUp(); } protected: - GURL iwa_url() { - return GURL( - "isolated-app://" - "aerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic"); + std::optional<web_app::IsolatedWebAppUrlInfo> iwa_url_info_; + + web_app::IsolatedWebAppUrlInfo InstallIsolatedWebApp( + const std::string& name) { + const std::unique_ptr<web_app::ScopedBundledIsolatedWebApp> bundle = + web_app::IsolatedWebAppBuilder(web_app::ManifestBuilder().SetName(name)) + .BuildBundle(); + bundle->FakeInstallPageState(profile()); + bundle->TrustSigningKey(); + return bundle->InstallChecked(profile()); } - webapps::AppId InstallIsolatedWebApp(const GURL& iwa_url, - const std::string& name) { - webapps::AppId app_id = - web_app::AddDummyIsolatedAppToRegistry(profile(), iwa_url, name); - RegisterWebApp(profile(), MakeApp(app_id, apps::AppType::kWeb, - iwa_url.spec(), apps::Readiness::kReady, - apps::InstallReason::kUser)); - return app_id; - } - - content::HostZoomMap* GetIwaHostZoomMap(const GURL& url) { - auto url_info = *web_app::IsolatedWebAppUrlInfo::Create(url); + content::HostZoomMap* GetIwaHostZoomMap( + const web_app::IsolatedWebAppUrlInfo& url_info) { content::StoragePartition* iwa_partition = profile()->GetStoragePartition( url_info.storage_partition_config(profile())); return content::HostZoomMap::GetForStoragePartition(iwa_partition); } + + private: + data_decoder::test::InProcessDataDecoder in_process_data_decoder_; }; TEST_F(SiteSettingsHandlerIsolatedWebAppTest, AllSitesDisplaysAppName) { - GURL https_url("https://" + iwa_url().host()); + GURL https_url("https://" + iwa_url_info_->origin().host()); + GURL iwa_origin_url = iwa_url_info_->origin().GetURL(); - SetupModelWithIsolatedWebAppData({{iwa_url().spec(), 50}}); + SetupModelWithIsolatedWebAppData({{iwa_url_info_->origin().Serialize(), 50}}); HostContentSettingsMap* map = HostContentSettingsMapFactory::GetForProfile(profile()); - map->SetContentSettingDefaultScope(iwa_url(), iwa_url(), + map->SetContentSettingDefaultScope(iwa_origin_url, iwa_origin_url, ContentSettingsType::NOTIFICATIONS, CONTENT_SETTING_BLOCK); map->SetContentSettingDefaultScope(https_url, https_url, @@ -3048,28 +3049,30 @@ const base::Value::Dict& origin1 = CHECK_DEREF(group1.FindList("origins"))[0].GetDict(); EXPECT_THAT(CHECK_DEREF(group1.FindString("groupingKey")), - IsOrigin(iwa_url())); + IsOrigin(iwa_origin_url)); EXPECT_EQ(group1.FindString("etldPlus1"), nullptr); EXPECT_EQ(CHECK_DEREF(group1.FindString("displayName")), "IWA Name"); - EXPECT_EQ(CHECK_DEREF(origin1.FindString("origin")), iwa_url()); + EXPECT_EQ(CHECK_DEREF(origin1.FindString("origin")), iwa_origin_url); EXPECT_EQ(origin1.FindDouble("usage").value(), 50.0); const base::Value::Dict& group2 = site_groups[1].GetDict(); const base::Value::Dict& origin2 = CHECK_DEREF(group2.FindList("origins"))[0].GetDict(); EXPECT_THAT(CHECK_DEREF(group2.FindString("groupingKey")), - IsEtldPlus1(iwa_url().host())); - EXPECT_EQ(CHECK_DEREF(group2.FindString("etldPlus1")), iwa_url().host()); - EXPECT_EQ(CHECK_DEREF(group2.FindString("displayName")), iwa_url().host()); + IsEtldPlus1(iwa_url_info_->origin().host())); + EXPECT_EQ(CHECK_DEREF(group2.FindString("etldPlus1")), + iwa_url_info_->origin().host()); + EXPECT_EQ(CHECK_DEREF(group2.FindString("displayName")), + iwa_url_info_->origin().host()); EXPECT_EQ(CHECK_DEREF(origin2.FindString("origin")), https_url); EXPECT_EQ(origin2.FindDouble("usage").value(), 0.0); } TEST_F(SiteSettingsHandlerIsolatedWebAppTest, ZoomLevel) { - content::HostZoomMap* iwa_host_zoom_map = GetIwaHostZoomMap(iwa_url()); + content::HostZoomMap* iwa_host_zoom_map = GetIwaHostZoomMap(*iwa_url_info_); - std::string host_or_spec = url::Origin::Create(iwa_url()).Serialize(); - iwa_host_zoom_map->SetZoomLevelForHost(iwa_url().host(), 1.1); + std::string host_or_spec = iwa_url_info_->origin().Serialize(); + iwa_host_zoom_map->SetZoomLevelForHost(iwa_url_info_->origin().host(), 1.1); ValidateZoom({{host_or_spec, "IWA Name", "122%"}}, 1U); base::Value::List args; @@ -3082,40 +3085,35 @@ double default_level = iwa_host_zoom_map->GetDefaultZoomLevel(); double level = iwa_host_zoom_map->GetZoomLevelForHostAndScheme( - "isolated-app", iwa_url().host()); + "isolated-app", iwa_url_info_->origin().host()); EXPECT_EQ(default_level, level); } TEST_F(SiteSettingsHandlerIsolatedWebAppTest, ZoomLevelsSortedByAppName) { - GetIwaHostZoomMap(iwa_url())->SetZoomLevelForHost(iwa_url().host(), 1.1); + GetIwaHostZoomMap(*iwa_url_info_) + ->SetZoomLevelForHost(iwa_url_info_->origin().host(), 1.1); // Install 3 more IWAs. - GURL iwa3_url( - "isolated-app://" - "cerugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic"); - InstallIsolatedWebApp(iwa3_url, "IWA Name 3"); - GetIwaHostZoomMap(iwa3_url)->SetZoomLevelForHost(iwa3_url.host(), 1.1); + web_app::IsolatedWebAppUrlInfo iwa3_url_info = + InstallIsolatedWebApp("IWA Name 3"); + GetIwaHostZoomMap(iwa3_url_info) + ->SetZoomLevelForHost(iwa3_url_info.origin().host(), 1.1); - GURL iwa2_url( - "isolated-app://" - "berugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic"); - InstallIsolatedWebApp(iwa2_url, "IWA Name 2"); - GetIwaHostZoomMap(iwa2_url)->SetZoomLevelForHost(iwa2_url.host(), 1.1); + web_app::IsolatedWebAppUrlInfo iwa2_url_info = + InstallIsolatedWebApp("IWA Name 2"); + GetIwaHostZoomMap(iwa2_url_info) + ->SetZoomLevelForHost(iwa2_url_info.origin().host(), 1.1); // Don't set a zoom for this app to make sure it's not in the list. - GURL iwa4_url( - "isolated-app://" - "derugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic"); - InstallIsolatedWebApp(iwa4_url, "IWA Name 4"); + web_app::IsolatedWebAppUrlInfo iwa4_url = InstallIsolatedWebApp("IWA Name 4"); base::Value::List args; handler()->HandleFetchZoomLevels(args); - ValidateZoom( - {{url::Origin::Create(iwa_url()).Serialize(), "IWA Name", "122%"}, - {url::Origin::Create(iwa2_url).Serialize(), "IWA Name 2", "122%"}, - {url::Origin::Create(iwa3_url).Serialize(), "IWA Name 3", "122%"}}, - 2U); + ValidateZoom({{iwa_url_info_->origin().Serialize(), "IWA Name", "122%"}, + {iwa2_url_info.origin().Serialize(), "IWA Name 2", "122%"}, + {iwa3_url_info.origin().Serialize(), "IWA Name 3", "122%"}}, + 2U); } class SiteSettingsHandlerInfobarTest : public BrowserWithTestWindowTest {
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc index 6fa6deb..eb37d9184 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc
@@ -60,9 +60,12 @@ #include "chrome/browser/extensions/chrome_test_extension_loader.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service_test_base.h" +#include "chrome/browser/web_applications/isolated_web_apps/isolated_web_app_url_info.h" +#include "chrome/browser/web_applications/isolated_web_apps/test/isolated_web_app_builder.h" #include "extensions/browser/extension_system.h" #include "extensions/browser/unloaded_extension_reason.h" #include "extensions/test/test_extension_dir.h" +#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) namespace site_settings { @@ -1557,20 +1560,27 @@ class SiteSettingsHelperIsolatedWebAppTest : public testing::Test { protected: - void InstallIsolatedWebApp(const GURL& url, const std::string& name) { + void SetUp() override { web_app::test::AwaitStartWebAppProviderAndSubsystems(&testing_profile_); - web_app::AddDummyIsolatedAppToRegistry(&testing_profile_, url, name); + } + + web_app::IsolatedWebAppUrlInfo InstallIsolatedWebApp( + const std::string& name) { + const std::unique_ptr<web_app::ScopedBundledIsolatedWebApp> bundle = + web_app::IsolatedWebAppBuilder(web_app::ManifestBuilder().SetName(name)) + .BuildBundle(); + bundle->FakeInstallPageState(profile()); + bundle->TrustSigningKey(); + return bundle->InstallChecked(profile()); } Profile* profile() { return &testing_profile_; } - const GURL kAppUrl{ - "isolated-app://" - "berugqztij5biqquuk3mfwpsaibuegaqcitgfchwuosuofdjabzqaaic"}; const std::string kAppName = "test IWA Name"; private: content::BrowserTaskEnvironment task_environment_; + data_decoder::test::InProcessDataDecoder in_process_data_decoder_; TestingProfile testing_profile_; }; @@ -1581,16 +1591,16 @@ auto kPreferenceSource = SiteSettingSource::kPreference; const std::u16string& kObjectName = u"Gadget"; - InstallIsolatedWebApp(kAppUrl, kAppName); + web_app::IsolatedWebAppUrlInfo app_url_info = InstallIsolatedWebApp(kAppName); // Create a chooser object for testing. base::Value::Dict chooser_object; chooser_object.Set("name", kObjectName); - // Add a user permission for an origin of |kAppUrl|. + // Add a user permission for an origin of `app_url_info`. ChooserExceptionDetails exception_details; - exception_details.insert({kAppUrl.DeprecatedGetOriginAsURL(), - kPreferenceSource, /*incognito=*/false}); + exception_details.insert( + {app_url_info.origin().GetURL(), kPreferenceSource, /*incognito=*/false}); { auto exception = CreateChooserExceptionObject( /*display_name=*/kObjectName, @@ -1606,7 +1616,7 @@ ExpectValidSiteExceptionObject( /*actual_site_object=*/sites_list[0], /*display_name=*/kAppName, - /*origin=*/kAppUrl, + /*origin=*/app_url_info.origin().GetURL(), /*source=*/kPreferenceSource, /*incognito=*/false); } @@ -1616,16 +1626,17 @@ base::test::ScopedFeatureList feature_list{ features::kAutomaticFullscreenContentSetting}; const ContentSettingsType type = ContentSettingsType::AUTOMATIC_FULLSCREEN; - InstallIsolatedWebApp(kAppUrl, kAppName); + web_app::IsolatedWebAppUrlInfo app_url_info = InstallIsolatedWebApp(kAppName); // Automatic Fullscreen is visible for IWAs, even with default BLOCK values. SiteSettingSource source; auto* map = HostContentSettingsMapFactory::GetForProfile(profile()); - ContentSetting content_setting = - GetContentSettingForOrigin(profile(), map, kAppUrl, type, &source); + ContentSetting content_setting = GetContentSettingForOrigin( + profile(), map, app_url_info.origin().GetURL(), type, &source); EXPECT_EQ(SiteSettingSource::kDefault, source); EXPECT_EQ(CONTENT_SETTING_BLOCK, content_setting); - const auto types = GetVisiblePermissionCategories(kAppUrl.spec(), profile()); + const auto types = GetVisiblePermissionCategories( + app_url_info.origin().GetURL().spec(), profile()); EXPECT_TRUE(base::ranges::any_of(types, [](auto& t) { return t == type; })); }
diff --git a/chrome/browser/ui/webui/signin/BUILD.gn b/chrome/browser/ui/webui/signin/BUILD.gn index 156f07ba..67e6faf1 100644 --- a/chrome/browser/ui/webui/signin/BUILD.gn +++ b/chrome/browser/ui/webui/signin/BUILD.gn
@@ -38,7 +38,6 @@ public_deps = [ "//base", - "//build:chromeos_buildflags", "//components/signin/public/base", "//components/signin/public/base:signin_buildflags", "//components/signin/public/identity_manager:identity_manager", @@ -200,7 +199,6 @@ public_deps = [ "//base", - "//build:chromeos_buildflags", "//chrome/browser/profiles:profile", "//components/keyed_service/core", "//content/public/browser", @@ -237,7 +235,6 @@ deps = [ ":login", "//base", - "//build:chromeos_buildflags", "//chrome/browser:browser_process", "//chrome/browser/profiles:profile", "//chrome/browser/ui:browser_navigator_params_headers", @@ -309,7 +306,6 @@ ":signin_utils", "//base", "//build:buildflag_header_h", - "//build:chromeos_buildflags", "//chrome/browser/profiles:profile", "//chrome/browser/profiles:profile_util", "//chrome/browser/ui:browser_list", @@ -346,7 +342,6 @@ ":signin_utils", "//base", "//build:buildflag_header_h", - "//build:chromeos_buildflags", "//chrome/app:branded_strings", "//chrome/app:generated_resources", "//chrome/browser:browser_process", @@ -406,7 +401,6 @@ "//base", "//base/test:test_support", "//build:buildflag_header_h", - "//build:chromeos_buildflags", "//chrome/browser", "//chrome/browser:browser_process", "//chrome/browser/extensions", @@ -467,7 +461,6 @@ ":login", ":signin_utils", "//base/test:test_support", - "//build:chromeos_buildflags", "//chrome/browser", "//chrome/browser/profiles:profile", "//chrome/browser/ui",
diff --git a/chrome/browser/ui/webui/signin/ash/BUILD.gn b/chrome/browser/ui/webui/signin/ash/BUILD.gn index 671cd7f..2b69a260 100644 --- a/chrome/browser/ui/webui/signin/ash/BUILD.gn +++ b/chrome/browser/ui/webui/signin/ash/BUILD.gn
@@ -4,7 +4,7 @@ import("//build/config/chromeos/ui_mode.gni") -assert(is_chromeos_ash) +assert(is_chromeos) static_library("ash") { sources = [
diff --git a/chrome/browser/ui/webui/signin/ash/DEPS b/chrome/browser/ui/webui/signin/ash/DEPS index 811fd4d5..f1541b7 100644 --- a/chrome/browser/ui/webui/signin/ash/DEPS +++ b/chrome/browser/ui/webui/signin/ash/DEPS
@@ -1,7 +1,5 @@ include_rules = [ - # //chrome/browser/ui/webui/signin/ash is conceptually part of "ash". See the - # "Lacros: ChromeOS source code directory migration" design doc at - # https://docs.google.com/document/d/1g-98HpzA8XcoGBWUv1gQNr4rbnD5yfvbtYZyPDDbkaE + # //chrome/browser/ui/webui/signin/ash is conceptually part of "ash". "+ash/system/session", "+ash/style",
diff --git a/chrome/browser/ui/webui/signin/ash/signin_helper.h b/chrome/browser/ui/webui/signin/ash/signin_helper.h index 0760dd3..448bd18 100644 --- a/chrome/browser/ui/webui/signin/ash/signin_helper.h +++ b/chrome/browser/ui/webui/signin/ash/signin_helper.h
@@ -119,11 +119,6 @@ scoped_refptr<network::SharedURLLoaderFactory> GetUrlLoaderFactory(); private: - // Returns the account that must be auto-signed-in to the Main Profile in - // Lacros. This is, when available, the account used to sign into the Chrome - // OS session. This may be a Gaia account or a Microsoft Active Directory - // account. This field will be null for Guest sessions, Managed Guest - // sessions, Demo mode, and Kiosks. bool IsInitialPrimaryAccount(); // Fetcher to get SecondaryGoogleAccountUsage policy value. std::unique_ptr<UserCloudSigninRestrictionPolicyFetcher> restriction_fetcher_;
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chrome/browser/ui/webui/signin/inline_login_handler.cc index bcdc314..9215f92 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler.cc
@@ -17,7 +17,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/signin_promo.h"
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc index 169120ad..705e54b 100644 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc +++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc
@@ -12,7 +12,6 @@ #include "base/strings/utf_string_conversions.h" #include "build/branding_buildflags.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_tab_helper_factory.h" @@ -36,7 +35,7 @@ #include "ui/base/webui/web_ui_util.h" #include "ui/webui/webui_util.h" -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) #include "ash/constants/ash_features.h" #include "ash/constants/ash_pref_names.h" #include "ash/webui/settings/public/constants/routes.mojom.h" @@ -65,11 +64,11 @@ #include "ui/strings/grit/ui_strings.h" #else #include "chrome/browser/ui/webui/signin/inline_login_handler_impl.h" -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) namespace { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) void AddEduStrings(content::WebUIDataSource* source, const std::u16string& username) { source->AddLocalizedString("okButton", IDS_APP_OK); @@ -113,7 +112,7 @@ "addSchoolAccountLabel", IDS_ACCOUNT_MANAGER_DIALOG_ADD_SCHOOL_ACCOUNT_LABEL); } -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) void CreateAndAddWebUIDataSource(Profile* profile) { content::WebUIDataSource* source = content::WebUIDataSource::CreateAndAdd( @@ -129,12 +128,12 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ConnectSrc, "connect-src *;"); -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) source->AddResourcePaths(kArcAccountPickerResources); source->AddResourcePaths(kGaiaActionButtonsResources); source->AddResourcePaths(kEduCoexistenceResources); source->AddResourcePaths(kSupervisionResources); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) // Only add a filter when runing as test. base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); @@ -145,7 +144,7 @@ test::GetTestFilesRequestFilter()); } -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) static constexpr webui::ResourcePath kResources[] = { {"account_manager_shared.css.js", IDR_ACCOUNT_MANAGER_SHARED_CSS_JS}, {"error_screen.html.js", @@ -164,12 +163,12 @@ #endif }; source->AddResourcePaths(kResources); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) static constexpr webui::LocalizedString kLocalizedStrings[] = { {"accessibleCloseButtonLabel", IDS_SIGNIN_ACCESSIBLE_CLOSE_BUTTON}, {"accessibleBackButtonLabel", IDS_SIGNIN_ACCESSIBLE_BACK_BUTTON}, -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) {"title", IDS_ACCOUNT_MANAGER_DIALOG_TITLE}, {"ok", IDS_APP_OK}, {"nextButtonLabel", IDS_ACCOUNT_MANAGER_DIALOG_NEXT_BUTTON}, @@ -208,7 +207,7 @@ }; source->AddLocalizedStrings(kLocalizedStrings); -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) source->AddBoolean( "secondaryGoogleAccountSigninAllowed", profile->GetPrefs()->GetBoolean( @@ -311,13 +310,13 @@ std::u16string username = ash::ProfileHelper::Get()->GetUserByProfile(profile)->GetGivenName(); AddEduStrings(source, username); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) } // Returns whether |url| can be displayed in a chrome://chrome-signin web // contents, depending on the signin reason that is encoded in the url. bool IsValidChromeSigninReason(const GURL& url) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) return true; #else signin_metrics::Reason reason = @@ -341,7 +340,7 @@ return false; } NOTREACHED(); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) } } // namespace @@ -356,7 +355,7 @@ return; } -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) web_ui->AddMessageHandler( std::make_unique<ash::InlineLoginHandlerImpl>(base::BindRepeating( &WebDialogUIBase::CloseDialog, weak_factory_.GetWeakPtr(), @@ -370,7 +369,7 @@ #else web_ui->AddMessageHandler(std::make_unique<InlineLoginHandlerImpl>()); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) +#endif // BUILDFLAG(IS_CHROMEOS) web_ui->AddMessageHandler(std::make_unique<MetricsHandler>());
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.h b/chrome/browser/ui/webui/signin/inline_login_ui.h index c9bb282..b0e7228f 100644 --- a/chrome/browser/ui/webui/signin/inline_login_ui.h +++ b/chrome/browser/ui/webui/signin/inline_login_ui.h
@@ -13,7 +13,7 @@ class InlineLoginUI; -// Inline login UI is available on all platforms except Android and Lacros. +// Inline login UI is available on all platforms except Android class InlineLoginUIConfig : public content::DefaultWebUIConfig<InlineLoginUI> { public: InlineLoginUIConfig()
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.cc b/chrome/browser/ui/webui/signin/login_ui_service.cc index 255337e..8b2375f 100644 --- a/chrome/browser/ui/webui/signin/login_ui_service.cc +++ b/chrome/browser/ui/webui/signin/login_ui_service.cc
@@ -6,19 +6,18 @@ #include "base/observer_list.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/signin_promo.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/common/url_constants.h" -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/ui/profiles/profile_picker.h" -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) +#endif // !BUILDFLAG(IS_CHROMEOS) LoginUIService::LoginUIService(Profile* profile) -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) : profile_(profile) #endif { @@ -57,7 +56,7 @@ void LoginUIService::DisplayLoginResult(Browser* browser, const SigninUIError& error, bool from_profile_picker) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) // ChromeOS doesn't have the avatar bubble so it never calls this function. NOTREACHED(); #else @@ -74,14 +73,14 @@ } void LoginUIService::SetProfileBlockingErrorMessage() { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else last_login_error_ = SigninUIError::ProfileIsBlocked(); #endif } -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) const SigninUIError& LoginUIService::GetLastLoginError() const { return last_login_error_; }
diff --git a/chrome/browser/ui/webui/signin/login_ui_service.h b/chrome/browser/ui/webui/signin/login_ui_service.h index f9b21693..2cce74c57 100644 --- a/chrome/browser/ui/webui/signin/login_ui_service.h +++ b/chrome/browser/ui/webui/signin/login_ui_service.h
@@ -11,7 +11,6 @@ #include "base/memory/raw_ptr.h" #include "base/observer_list.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/ui/webui/signin/signin_ui_error.h" #include "components/keyed_service/core/keyed_service.h" @@ -101,7 +100,7 @@ // Set the profile blocking modal error dialog message. void SetProfileBlockingErrorMessage(); -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) // Gets the last error set through |DisplayLoginResult|. const SigninUIError& GetLastLoginError() const; #endif @@ -109,7 +108,7 @@ private: // Weak pointers to the recently opened UIs, with the most recent in front. std::list<raw_ptr<LoginUI, CtnExperimental>> ui_list_; -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) raw_ptr<Profile> profile_; SigninUIError last_login_error_ = SigninUIError::Ok(); #endif
diff --git a/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc b/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc index 089ef16..a287174c0 100644 --- a/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc +++ b/chrome/browser/ui/webui/signin/login_ui_service_unittest.cc
@@ -11,7 +11,6 @@ #include "base/strings/string_util.h" #include "build/build_config.h" #include "build/buildflag.h" -#include "build/chromeos_buildflags.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" @@ -20,7 +19,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) #include "chrome/browser/browser_process.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/test_extension_system.h" @@ -100,7 +99,7 @@ EXPECT_EQ(nullptr, service.current_login_ui()); } -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) TEST_F(LoginUIServiceTest, SetProfileBlockingErrorMessage) { LoginUIService service(profile_);
diff --git a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc index a200a48..a28d9f6 100644 --- a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc +++ b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
@@ -15,7 +15,6 @@ #include "base/time/time.h" #include "base/timer/timer.h" #include "build/build_config.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" @@ -196,7 +195,7 @@ enum class ReauthDialogAction { kConfirm, kCancel }; -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) std::string GetButtonIdForSyncConfirmationDialogAction( SyncConfirmationDialogAction action) { switch (action) { @@ -264,7 +263,7 @@ element_selector.c_str(), element_selector.c_str()); return content::EvalJs(web_contents, find_element_js).ExtractString() == "Ok"; } -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) +#endif // !BUILDFLAG(IS_CHROMEOS) } // namespace @@ -274,7 +273,7 @@ static bool TryDismissSyncConfirmationDialog( Browser* browser, SyncConfirmationDialogAction action) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else SigninViewController* signin_view_controller = @@ -304,7 +303,7 @@ static bool TryCompleteSigninEmailConfirmationDialog( Browser* browser, SigninEmailConfirmationDialog::Action action) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else SigninViewController* signin_view_controller = @@ -338,7 +337,7 @@ static bool TryCompleteReauthConfirmationDialog(Browser* browser, ReauthDialogAction action) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else SigninViewController* signin_view_controller = @@ -367,7 +366,7 @@ } static bool TryCompleteProfileCustomizationDialog(Browser* browser) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else SigninViewController* signin_view_controller = @@ -394,7 +393,7 @@ } static bool ShowsModalDialog(Browser* browser) { -#if BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_CHROMEOS) NOTREACHED(); #else return browser->signin_view_controller()->ShowsModalDialog();
diff --git a/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.cc b/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.cc index 0da66fe..3abac4a 100644 --- a/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.cc +++ b/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.cc
@@ -11,7 +11,6 @@ #include "base/functional/bind.h" #include "base/metrics/histogram_functions.h" #include "base/strings/utf_string_conversions.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h"
diff --git a/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.h b/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.h index a7b1d8f..d91eaa2 100644 --- a/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.h +++ b/chrome/browser/ui/webui/signin/managed_user_profile_notice_handler.h
@@ -15,7 +15,6 @@ #include "base/scoped_observation.h" #include "base/timer/timer.h" #include "base/values.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/ui/browser_list_observer.h" #include "chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.h"
diff --git a/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.h b/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.h index d810496..015ba26 100644 --- a/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.h +++ b/chrome/browser/ui/webui/signin/managed_user_profile_notice_ui.h
@@ -9,16 +9,15 @@ #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/ui/webui/signin/signin_utils.h" #include "content/public/browser/web_ui_controller.h" #include "third_party/skia/include/core/SkColor.h" -#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) #include "chrome/common/webui_url_constants.h" #include "content/public/browser/webui_config.h" #include "content/public/common/url_constants.h" -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) class Browser; class ManagedUserProfileNoticeHandler; @@ -27,7 +26,7 @@ class WebUI; } -#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) class ManagedUserProfileNoticeUI; class ManagedUserProfileNoticeUIConfig @@ -37,7 +36,7 @@ : DefaultWebUIConfig(content::kChromeUIScheme, chrome::kChromeUIManagedUserProfileNoticeHost) {} }; -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) class ManagedUserProfileNoticeUI : public content::WebUIController { public:
diff --git a/chrome/browser/ui/webui/signin/profile_customization_ui.h b/chrome/browser/ui/webui/signin/profile_customization_ui.h index 903bac7c..7e23f90c 100644 --- a/chrome/browser/ui/webui/signin/profile_customization_ui.h +++ b/chrome/browser/ui/webui/signin/profile_customization_ui.h
@@ -13,11 +13,11 @@ #include "ui/webui/mojo_web_ui_controller.h" #include "ui/webui/resources/cr_components/theme_color_picker/theme_color_picker.mojom.h" -#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) #include "chrome/common/webui_url_constants.h" #include "content/public/browser/webui_config.h" #include "content/public/common/url_constants.h" -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) namespace content { class WebUI; @@ -25,7 +25,7 @@ class ThemeColorPickerHandler; -#if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) class ProfileCustomizationUI; class ProfileCustomizationUIConfig @@ -35,7 +35,7 @@ : DefaultWebUIConfig(content::kChromeUIScheme, chrome::kChromeUIProfileCustomizationHost) {} }; -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) // This WebUI uses mojo for the color picker element. class ProfileCustomizationUI
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.h b/chrome/browser/ui/webui/signin/profile_picker_handler.h index 6c11877..fefe180 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.h +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.h
@@ -16,7 +16,6 @@ #include "base/time/time.h" #include "base/values.h" #include "build/buildflag.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_statistics_common.h"
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc b/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc index f525599..4a2bada0 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler_unittest.cc
@@ -14,7 +14,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/mock_callback.h" #include "build/buildflag.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/signin/identity_manager_factory.h"
diff --git a/chrome/browser/ui/webui/signin/profile_picker_ui.cc b/chrome/browser/ui/webui/signin/profile_picker_ui.cc index 76e6a57..4b4deee 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_ui.cc
@@ -8,7 +8,6 @@ #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" #include "build/buildflag.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/policy/browser_signin_policy_handler.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" @@ -46,11 +45,6 @@ #include "ui/webui/webui_util.h" #include "url/gurl.h" -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chromeos/crosapi/mojom/device_settings_service.mojom.h" -#include "ui/chromeos/devicetype_utils.h" -#endif - namespace { // Miniumum size for the picker UI. @@ -79,19 +73,11 @@ } std::string GetManagedDeviceDisclaimer() { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - std::optional<std::string> manager = chrome::GetSessionManagerIdentity(); - int managed_id = - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_SESSION_MANAGED_DESCRIPTION; - int managed_by_id = - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_SESSION_MANAGED_BY_DESCRIPTION; -#else std::optional<std::string> manager = chrome::GetDeviceManagerIdentity(); int managed_id = IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_DESCRIPTION; int managed_by_id = IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_DEVICE_MANAGED_BY_DESCRIPTION; -#endif if (!manager) { return std::string(); } @@ -102,33 +88,18 @@ } int GetMainViewTitleId() { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - return IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_LACROS; -#else return ProfilePicker::Shown() ? IDS_PROFILE_PICKER_MAIN_VIEW_TITLE_V2 : IDS_PROFILE_PICKER_MAIN_VIEW_TITLE; -#endif } void AddStrings(content::WebUIDataSource* html_source) { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - int profile_type_choice_subtitle = - IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_LACROS; -#else int profile_type_choice_subtitle = base::FeatureList::IsEnabled(switches::kExplicitBrowserSigninUIOnDesktop) ? IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE_UNO : IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE; -#endif static webui::LocalizedString kLocalizedStrings[] = { - {"mainViewSubtitle", -#if BUILDFLAG(IS_CHROMEOS_LACROS) - IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE_LACROS -#else - IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE -#endif - }, + {"mainViewSubtitle", IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE}, {"addSpaceButton", IDS_PROFILE_PICKER_ADD_SPACE_BUTTON}, {"askOnStartupCheckboxText", IDS_PROFILE_PICKER_ASK_ON_STARTUP}, {"browseAsGuestButton", IDS_PROFILE_PICKER_BROWSE_AS_GUEST_BUTTON}, @@ -204,33 +175,6 @@ html_source->AddString("managedDeviceDisclaimer", GetManagedDeviceDisclaimer()); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - std::string remove_warning_profile = l10n_util::GetStringFUTF8( - IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE_LACROS, - ui::GetChromeOSDeviceName(), - l10n_util::GetStringUTF16(IDS_SETTINGS_TITLE), - l10n_util::GetStringUTF16(IDS_OS_SETTINGS_PEOPLE_V2)); - html_source->AddString("removeWarningProfileLacros", remove_warning_profile); - html_source->AddString("deviceType", ui::GetChromeOSDeviceName()); - - bool guest_mode_enabled = true; - // Device settings may be nullptr in tests. - if (crosapi::mojom::DeviceSettings* device_settings = - g_browser_process->browser_policy_connector()->GetDeviceSettings()) { - if (device_settings->device_guest_mode_enabled == - crosapi::mojom::DeviceSettings::OptionalBool::kFalse) { - guest_mode_enabled = false; - } - } - const int account_selection_lacros_subtitle = - guest_mode_enabled - ? IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE_WITH_GUEST - : IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_ACCOUNT_SELECTION_LACROS_SUBTITLE; - html_source->AddLocalizedString("accountSelectionLacrosSubtitle", - account_selection_lacros_subtitle); - -#endif - // Add policies. html_source->AddBoolean("isBrowserSigninAllowed", IsBrowserSigninAllowed()); html_source->AddBoolean("isForceSigninEnabled",
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils.cc b/chrome/browser/ui/webui/signin/signin_url_utils.cc index 641d4fc..f2909a9 100644 --- a/chrome/browser/ui/webui/signin/signin_url_utils.cc +++ b/chrome/browser/ui/webui/signin/signin_url_utils.cc
@@ -88,7 +88,7 @@ return url; } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) ProfileCustomizationStyle GetProfileCustomizationStyle(const GURL& url) { std::string style_str; int style_int; @@ -107,7 +107,7 @@ url, kStyleParamKey, base::NumberToString(static_cast<int>(style))); return url_with_params; } -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) bool HasFromProfilePickerURLParameter(const GURL& url) { std::string from_profile_picker;
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils.h b/chrome/browser/ui/webui/signin/signin_url_utils.h index b048ff31..8641710 100644 --- a/chrome/browser/ui/webui/signin/signin_url_utils.h +++ b/chrome/browser/ui/webui/signin/signin_url_utils.h
@@ -40,7 +40,7 @@ // triggered by |access_point|. GURL GetReauthConfirmationURL(signin_metrics::ReauthAccessPoint access_point); -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) enum class ProfileCustomizationStyle { kDefault = 0, kLocalProfileCreation = 1 @@ -53,7 +53,7 @@ // Adds the `style` URL query parameters to `url` for the profile customization. GURL AppendProfileCustomizationQueryParams(const GURL& url, ProfileCustomizationStyle style); -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) // TODO(crbug.com/381231566): `AddFromProfilePickerURLParameter()` is not called // anymore and is now dead code, it should be removed in upcoming changes along
diff --git a/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc b/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc index baf411c..a024379c 100644 --- a/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc +++ b/chrome/browser/ui/webui/signin/signin_url_utils_unittest.cc
@@ -74,7 +74,7 @@ EXPECT_TRUE(IsSyncConfirmationPromo(url)); } -#if BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(ENABLE_DICE_SUPPORT) TEST(SigninURLUtilsTest, ParseParameterlessProfileCustomizationURL) { GURL url = GURL(chrome::kChromeUIProfileCustomizationURL); EXPECT_EQ(ProfileCustomizationStyle::kDefault, @@ -100,7 +100,7 @@ EXPECT_EQ(ProfileCustomizationStyle::kLocalProfileCreation, GetProfileCustomizationStyle(url)); } -#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) || BUILDFLAG(IS_CHROMEOS_LACROS) +#endif // BUILDFLAG(ENABLE_DICE_SUPPORT) class SigninURLUtilsReauthConfirmationURLTest : public ::testing::TestWithParam<int> {};
diff --git a/chrome/browser/ui/webui/signin/signin_utils.cc b/chrome/browser/ui/webui/signin/signin_utils.cc index 1b9dfabb..3c4f22c 100644 --- a/chrome/browser/ui/webui/signin/signin_utils.cc +++ b/chrome/browser/ui/webui/signin/signin_utils.cc
@@ -24,7 +24,7 @@ namespace signin { namespace { -#if !(BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS)) +#if !BUILDFLAG(IS_CHROMEOS) // Default timeout used to wait for account capabilities fetch. const int kMinorModeRestrictionsFetchDeadlineMs = 1000; #endif @@ -82,8 +82,8 @@ } base::TimeDelta GetMinorModeRestrictionsDeadline() { -#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) - // Not implemented for those platforms. +#if BUILDFLAG(IS_CHROMEOS) + // Not implemented for this platform. NOTREACHED(); #else return base::Milliseconds(kMinorModeRestrictionsFetchDeadlineMs); @@ -102,7 +102,7 @@ static_cast<int>(height)); } -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) void ClearProfileWithManagedAccounts(Profile* profile) { policy::UserPolicySigninServiceFactory::GetForProfile(profile) ->ShutdownCloudPolicyManager();
diff --git a/chrome/browser/ui/webui/signin/signin_utils.h b/chrome/browser/ui/webui/signin/signin_utils.h index c9479e2..3ef2a07c 100644 --- a/chrome/browser/ui/webui/signin/signin_utils.h +++ b/chrome/browser/ui/webui/signin/signin_utils.h
@@ -12,7 +12,6 @@ #include "base/functional/callback_helpers.h" #include "base/time/time.h" #include "base/values.h" -#include "build/chromeos_buildflags.h" #include "components/signin/public/identity_manager/account_info.h" struct AccountInfo; @@ -115,7 +114,7 @@ content::WebUI* web_ui, const base::Value::List& args); -#if !BUILDFLAG(IS_CHROMEOS_ASH) +#if !BUILDFLAG(IS_CHROMEOS) // Helps clear Profile info, mainly for managed accounts. // Idealy this function should not be used much, consider deleting the profile // if possible instead.
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc index 44b572b0..4b56b58 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
@@ -14,7 +14,6 @@ #include "base/metrics/user_metrics.h" #include "base/notreached.h" #include "base/time/time.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/consent_auditor/consent_auditor_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h" @@ -38,13 +37,6 @@ #include "content/public/browser/web_ui.h" #include "url/gurl.h" -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "ash/webui/settings/public/constants/routes.mojom.h" -#include "chrome/browser/lacros/lacros_url_handling.h" -#include "chrome/common/webui_url_constants.h" -#include "components/sync/base/features.h" -#endif - using signin::ConsentLevel; namespace { @@ -53,7 +45,7 @@ // Derives screen mode of sync opt in screen from the // CanShowHistorySyncOptInsWithoutMinorModeRestrictions capability. constexpr bool UseMinorModeRestrictions() { -#if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(IS_CHROMEOS_LACROS) +#if BUILDFLAG(IS_CHROMEOS) // ChromeOS handles minor modes separately. return false; #else @@ -188,13 +180,6 @@ "accountInfoRequest", base::BindRepeating(&SyncConfirmationHandler::HandleAccountInfoRequest, base::Unretained(this))); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - web_ui()->RegisterMessageCallback( - "openDeviceSyncSettings", - base::BindRepeating( - &SyncConfirmationHandler::HandleOpenDeviceSyncSettings, - base::Unretained(this))); -#endif } void SyncConfirmationHandler::HandleConfirm(const base::Value::List& args) { @@ -247,15 +232,6 @@ DispatchAccountInfoUpdate(primary_account_info); } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -void SyncConfirmationHandler::HandleOpenDeviceSyncSettings( - const base::Value::List& args) { - std::string os_sync_settings_url = chrome::kChromeUIOSSettingsURL; - os_sync_settings_url.append(chromeos::settings::mojom::kSyncSubpagePath); - lacros_url_handling::NavigateInAsh(GURL(os_sync_settings_url)); -} -#endif - void SyncConfirmationHandler::RecordConsent( const base::Value::List& consent_description, const std::string& consent_confirmation) {
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h index 3130031..942b584 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
@@ -95,13 +95,6 @@ // `OnAvatarChanged` with the signed-in user's picture url. virtual void HandleAccountInfoRequest(const base::Value::List& args); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // Handles the "openDeviceSyncSettings" message from the page. No arguments. - // This message is sent when the user clicks on the device settings link - // in the sync confirmation dialog, which keep the dialogue open and open - // new window in ash for device sync settings . - virtual void HandleOpenDeviceSyncSettings(const base::Value::List& args); -#endif // Records the user's consent to sync. Called from `HandleConfirm` and // `HandleGoToSettings`, and expects two parameters to be passed through // these methods from the WebUI:
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc index 4d969e1..48332cf 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc
@@ -20,7 +20,6 @@ #include "base/test/task_environment.h" #include "base/time/time.h" #include "base/values.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/consent_auditor/consent_auditor_factory.h" #include "chrome/browser/consent_auditor/consent_auditor_test_utils.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h"
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc index e5cfd04..ae40f4a 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -13,7 +13,6 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "build/buildflag.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" #include "chrome/browser/profiles/profile.h" @@ -50,13 +49,6 @@ #include "ui/native_theme/native_theme.h" #include "ui/webui/webui_util.h" -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "ash/webui/settings/public/constants/routes.mojom.h" -#include "chrome/common/webui_url_constants.h" -#include "components/sync/base/features.h" -#include "components/sync/service/sync_prefs.h" -#endif - namespace { const char kSyncBenefitAutofillStringName[] = "syncConfirmationAutofill"; const char kSyncBenefitBookmarksStringName[] = "syncConfirmationBookmarks"; @@ -80,13 +72,6 @@ return false; } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -bool ShouldShowAppsDisclaimerInLacros(Profile* profile) { - syncer::SyncPrefs prefs_ = syncer::SyncPrefs(profile->GetPrefs()); - return prefs_.IsAppsSyncEnabledByOs() && - base::FeatureList::IsEnabled(syncer::kSyncChromeOSAppsToggleSharing); -} -#endif } // namespace bool SyncConfirmationUIConfig::IsWebUIEnabled( @@ -267,18 +252,6 @@ GetSyncBenefitsListJSON(SyncServiceFactory::GetForProfile(profile_))); // Default overrides without placeholders -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // The sign-in intercept feature isn't enabled on Lacros, so only this title - // will be used. Revisit the title when enabling it. - DCHECK(!is_signin_intercept_promo); - info_title_id = IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_LACROS; - - if (ShouldShowAppsDisclaimerInLacros(profile_)) { - info_desc_id = - IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_DESC_WITH_ASH_SETTINGS_LINK; - use_clickable_sync_info_desc = true; - } -#endif if (is_signin_intercept_promo) { info_title_id = IDS_SYNC_CONFIRMATION_TANGIBLE_SYNC_INFO_TITLE_SIGNIN_INTERCEPT_V2;
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc index 5e244ce..620f92a 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper.cc
@@ -27,6 +27,7 @@ #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" #include "chrome/browser/profiles/profile_metrics.h" #include "chrome/browser/signin/account_reconcilor_factory.h" +#include "chrome/browser/signin/dice_signed_in_profile_creator.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/signin/signin_util.h" @@ -56,17 +57,6 @@ #include "components/sync/service/sync_user_settings.h" #include "components/unified_consent/unified_consent_service.h" -#if BUILDFLAG(ENABLE_DICE_SUPPORT) -#include "chrome/browser/signin/dice_signed_in_profile_creator.h" -#endif - -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/browser_process.h" -#include "chrome/browser/lacros/account_manager/account_profile_mapper.h" -#include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/ui/webui/signin/profile_picker_lacros_sign_in_provider.h" -#endif - namespace { const void* const kCurrentTurnSyncOnHelperKey = &kCurrentTurnSyncOnHelperKey; @@ -416,7 +406,6 @@ &TurnSyncOnHelper::OnNewSignedInProfileCreated, base::Unretained(this), std::move(search_engine_choice_data)); -#if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK(!dice_signed_in_profile_creator_); // Unretained is fine because the profile creator is owned by this. dice_signed_in_profile_creator_ = @@ -424,14 +413,6 @@ profile_, account_info_.account_id, /*local_profile_name=*/std::u16string(), /*icon_index=*/std::nullopt, std::move(profile_created_callback)); -#else - DCHECK(!profile_->IsMainProfile()); - lacros_sign_in_provider_ = - std::make_unique<ProfilePickerLacrosSignInProvider>( - /*hidden_profile=*/false); - lacros_sign_in_provider_->CreateSignedInProfileWithExistingAccount( - account_info_.gaia, std::move(profile_created_callback)); -#endif } syncer::SyncService* TurnSyncOnHelper::GetSyncService() { @@ -443,24 +424,8 @@ void TurnSyncOnHelper::OnNewSignedInProfileCreated( search_engines::ChoiceData search_engine_choice_data, Profile* new_profile) { -#if BUILDFLAG(ENABLE_DICE_SUPPORT) DCHECK(dice_signed_in_profile_creator_); dice_signed_in_profile_creator_.reset(); -#else - DCHECK(lacros_sign_in_provider_); - DCHECK(!profile_->IsMainProfile()); - lacros_sign_in_provider_.reset(); - if (new_profile) { - // The `dice_signed_in_profile_creator_` removes the account from the source - // profile as part of its run, but `lacros_sign_in_provider_` does not. - // Remove the account now. - g_browser_process->profile_manager() - ->GetAccountProfileMapper() - ->RemoveAccount( - profile_->GetPath(), - {account_info_.gaia, account_manager::AccountType::kGaia}); - } -#endif ProfileMetrics::LogProfileAddNewUser(ProfileMetrics::ADD_NEW_USER_SYNC_FLOW); if (!new_profile) {
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper.h b/chrome/browser/ui/webui/signin/turn_sync_on_helper.h index 64e850b..6b0d8929 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper.h +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper.h
@@ -12,7 +12,6 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/timer/elapsed_timer.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engine_choice/search_engine_choice_dialog_service.h" #include "chrome/browser/sync/sync_startup_tracker.h" @@ -32,13 +31,7 @@ class TurnSyncOnHelperPolicyFetchTracker; class AccountSelectionInProgressHandle; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) class DiceSignedInProfileCreator; -#endif - -#if BUILDFLAG(IS_CHROMEOS_LACROS) -class ProfilePickerLacrosSignInProvider; -#endif namespace signin { class IdentityManager; @@ -285,16 +278,11 @@ std::unique_ptr<SyncStartupTracker> sync_startup_tracker_; std::unique_ptr<TurnSyncOnHelperPolicyFetchTracker> policy_fetch_tracker_; -#if BUILDFLAG(ENABLE_DICE_SUPPORT) std::unique_ptr<DiceSignedInProfileCreator> dice_signed_in_profile_creator_; -#endif -#if BUILDFLAG(IS_CHROMEOS_LACROS) - std::unique_ptr<ProfilePickerLacrosSignInProvider> lacros_sign_in_provider_; -#endif // The initial primary account is restored if the flow aborts. This is only - // needed on Lacros or if UNO Desktop is enabled, because the `SigninManager` - // does it automatically on DICE platforms. + // needed if UNO Desktop is enabled, because the `SigninManager` does it + // automatically on DICE platforms. CoreAccountId initial_primary_account_; base::CallbackListSubscription shutdown_subscription_; bool enterprise_account_confirmed_ = false;
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_browsertest.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_browsertest.cc index 99c82d01..eb431fa 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_browsertest.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_browsertest.cc
@@ -298,16 +298,6 @@ break; case TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT: if (should_remove_initial_account()) { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // First account was removed, second account became the primary. - EXPECT_THAT( - identity_manager()->GetAccountsWithRefreshTokens(), - UnorderedElementsAre(second_account_info, third_account_info)); - EXPECT_EQ(signin::ConsentLevel::kSignin, - signin::GetPrimaryAccountConsentLevel(identity_manager())); - EXPECT_EQ(second_account_id, identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kSignin)); -#else // With `switches::kExplicitBrowserSigninUIOnDesktop` enabled, the // primary account isn't set implicitly based on cookies but by explicit // user action, therefore it is also not removed when cookies change. @@ -323,7 +313,6 @@ EXPECT_FALSE(identity_manager()->HasPrimaryAccount( signin::ConsentLevel::kSignin)); } -#endif } else { // First account is still primary, second account was not removed. EXPECT_THAT( @@ -406,12 +395,6 @@ EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSignin)); - // For the scenario in https://crbug.com/1404961, the reconcilor has to be - // triggered by the account removal. -#if BUILDFLAG(IS_CHROMEOS_LACROS) - ASSERT_EQ(reconcilor->GetState(), - signin_metrics::AccountReconcilorState::kRunning); -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) // On Dice platforms with `switches::kExplicitBrowserSigninUIOnDesktop` // enabled and empty primary account, updating cookies is disabled. Therefore // running the reconcilor doesn't require any network requests and might have
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc index a733dca..3309145 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.cc
@@ -12,7 +12,6 @@ #include "base/metrics/user_metrics_action.h" #include "base/notreached.h" #include "base/strings/utf_string_conversions.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/new_tab_page/chrome_colors/selected_colors_info.h" @@ -117,11 +116,6 @@ const AccountInfo& account_info, signin::SigninChoiceCallback callback) { browser_ = EnsureBrowser(browser_, profile_); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // Profile Separation Enforced is not supported on Lacros. - OnProfileCheckComplete(account_info, std::move(callback), - /*prompt_for_new_profile=*/false); -#else account_level_signin_restriction_policy_fetcher_ = std::make_unique<policy::UserCloudSigninRestrictionPolicyFetcher>( g_browser_process->browser_policy_connector(), @@ -134,7 +128,6 @@ base::BindOnce(&TurnSyncOnHelperDelegateImpl::OnProfileCheckComplete, weak_ptr_factory_.GetWeakPtr(), account_info, std::move(callback))); -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) } void TurnSyncOnHelperDelegateImpl::ShowSyncConfirmation( @@ -197,7 +190,6 @@ } } -#if !BUILDFLAG(IS_CHROMEOS_LACROS) void TurnSyncOnHelperDelegateImpl::OnProfileSigninRestrictionsFetched( const AccountInfo& account_info, signin::SigninChoiceCallback callback, @@ -222,7 +214,6 @@ base::BindOnce(&SigninViewController::CloseModalSignin, browser_->signin_view_controller()->AsWeakPtr()))); } -#endif void TurnSyncOnHelperDelegateImpl::OnProfileCheckComplete( const AccountInfo& account_info, @@ -232,7 +223,7 @@ std::move(callback).Run(signin::SIGNIN_CHOICE_CANCEL); return; } -#if !BUILDFLAG(IS_CHROMEOS_LACROS) + if (prompt_for_new_profile) { account_level_signin_restriction_policy_fetcher_ ->GetManagedAccountsSigninRestriction( @@ -253,8 +244,7 @@ : std::string()); return; } -#endif - DCHECK(!prompt_for_new_profile); + browser_->signin_view_controller()->ShowModalManagedUserNoticeDialog( std::make_unique<signin::EnterpriseProfileCreationDialogParams>( account_info, /*is_oidc_account=*/false,
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h index 888c3919..a17ec4b 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_delegate_impl.h
@@ -68,12 +68,10 @@ // BrowserListObserver: void OnBrowserRemoved(Browser* browser) override; -#if !BUILDFLAG(IS_CHROMEOS_LACROS) void OnProfileSigninRestrictionsFetched( const AccountInfo& account_info, signin::SigninChoiceCallback callback, const policy::ProfileSeparationPolicies& profile_separation_policies); -#endif //! BUILDFLAG(IS_CHROMEOS_LACROS) void OnProfileCheckComplete(const AccountInfo& account_info, signin::SigninChoiceCallback callback, @@ -82,13 +80,11 @@ raw_ptr<Browser> browser_; raw_ptr<Profile> profile_; -#if !BUILDFLAG(IS_CHROMEOS_LACROS) // Used to fetch the cloud user level policy value of // ManagedAccountsSigninRestriction. This can only fetch one policy value for // one account at the time. std::unique_ptr<policy::UserCloudSigninRestrictionPolicyFetcher> account_level_signin_restriction_policy_fetcher_; -#endif // !BUILDFLAG(IS_CHROMEOS_LACROS) base::OnceCallback<void(LoginUIService::SyncConfirmationUIClosedResult)> sync_confirmation_callback_; base::ScopedObservation<LoginUIService, LoginUIService::Observer>
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_policy_fetch_tracker.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_policy_fetch_tracker.cc index 7e99efa..27c6de50 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_policy_fetch_tracker.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_policy_fetch_tracker.cc
@@ -151,56 +151,11 @@ base::WeakPtrFactory<PolicyFetchTracker> weak_pointer_factory_{this}; }; -#if BUILDFLAG(IS_CHROMEOS_LACROS) -class LacrosPrimaryProfilePolicyFetchTracker - : public TurnSyncOnHelperPolicyFetchTracker { - public: - explicit LacrosPrimaryProfilePolicyFetchTracker(Profile* profile) - : profile_(profile) {} - ~LacrosPrimaryProfilePolicyFetchTracker() override = default; - - void SwitchToProfile(Profile* new_profile) override { - // Sign in intercept and syncing with a different account are not supported - // use cases for the Lacros primary profile. - NOTREACHED(); - } - - void RegisterForPolicy( - base::OnceCallback<void(bool is_managed)> registered_callback) override { - // Policies for the Lacros main profile are provided by Ash on start, so - // there is no need to register to anything to fetch them. See - // crsrc.org/c/chromeos/crosapi/mojom/crosapi.mojom?q=device_account_policy. - std::move(registered_callback).Run(IsManagedProfile()); - } - - bool FetchPolicy(base::OnceClosure callback) override { - // Policies are populated via Ash at Lacros startup time, nothing to do - // besides running the callback. - // We post it to match the behaviour of other policy fetch trackers and - // because `callback` can trigger the deletion of this object. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, std::move(callback)); - return IsManagedProfile(); - } - - private: - bool IsManagedProfile() { - return profile_->GetProfilePolicyConnector()->IsManaged(); - } - - raw_ptr<Profile> profile_; -}; -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) } // namespace std::unique_ptr<TurnSyncOnHelperPolicyFetchTracker> TurnSyncOnHelperPolicyFetchTracker::CreateInstance( Profile* profile, const AccountInfo& account_info) { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - if (profile->IsMainProfile()) { - return std::make_unique<LacrosPrimaryProfilePolicyFetchTracker>(profile); - } -#endif // BUILDFLAG(IS_CHROMEOS_LACROS) return std::make_unique<PolicyFetchTracker>(profile, account_info); }
diff --git a/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc index a1af01d..1109590 100644 --- a/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc +++ b/chrome/browser/ui/webui/signin/turn_sync_on_helper_unittest.cc
@@ -20,7 +20,6 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_command_line.h" #include "base/test/test_file_util.h" -#include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/enterprise/browser_management/management_service_factory.h" #include "chrome/browser/enterprise/util/managed_browser_utils.h" @@ -74,12 +73,6 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#if BUILDFLAG(IS_CHROMEOS_LACROS) -#include "chrome/browser/lacros/account_manager/account_profile_mapper.h" -#include "components/account_manager_core/account.h" -#include "components/account_manager_core/mock_account_manager_facade.h" -#endif - using ::testing::AtLeast; using ::testing::Invoke; using ::testing::Return; @@ -213,12 +206,6 @@ return profile; } -#if BUILDFLAG(IS_CHROMEOS_LACROS) - void SetAccountProfileMapper(std::unique_ptr<AccountProfileMapper> mapper) { - FakeProfileManager::SetAccountProfileMapperForTests(std::move(mapper)); - } -#endif - private: base::OnceCallback<void(Profile*)> next_profile_created_callback_; ProfileBuilderCallback profile_builder_callback_; @@ -417,44 +404,6 @@ std::make_unique<IdentityTestEnvironmentProfileAdaptor>(profile_); account_id_ = identity_test_env()->MakeAccountAvailable(kEmail).account_id; -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // Lacros expects that the main profile always exists. - auto main_profile = BuildTestingProfile( - temp_user_data_dir.Append(FILE_PATH_LITERAL("Default")), - /*delegate=*/nullptr, Profile::CreateMode::kSynchronous); - profile_manager()->RegisterTestingProfile(std::move(main_profile), - /*add_to_storage=*/true); - - // Configure a mock account manager facade to return two accounts (`kEmail` - // and `kEnterpriseEmail`) with no error. - ON_CALL(mock_account_manager_facade_, GetAccounts(testing::_)) - .WillByDefault( - [](base::OnceCallback<void( - const std::vector<account_manager::Account>&)> callback) { - account_manager::AccountKey key( - signin::GetTestGaiaIdForEmail(kEmail), - account_manager::AccountType::kGaia); - account_manager::AccountKey enterprise_key( - signin::GetTestGaiaIdForEmail(kEnterpriseEmail), - account_manager::AccountType::kGaia); - std::move(callback).Run({{key, kEmail}, - { enterprise_key, - kEnterpriseEmail }}); - }); - ON_CALL(mock_account_manager_facade_, GetPersistentErrorForAccount) - .WillByDefault( - [](const account_manager::AccountKey&, - base::OnceCallback<void(const GoogleServiceAuthError&)> - callback) { - std::move(callback).Run(GoogleServiceAuthError::AuthErrorNone()); - }); - profile_manager()->SetAccountProfileMapper( - std::make_unique<AccountProfileMapper>( - &mock_account_manager_facade_, - &profile_manager()->GetProfileAttributesStorage(), - g_browser_process->local_state())); -#endif - user_policy_signin_service_ = static_cast<FakeUserPolicySigninService*>( policy::UserPolicySigninServiceFactory::GetForProfile(profile())); user_policy_signin_service_->set_account(account_id_, kEmail); @@ -519,9 +468,6 @@ profile_builder.SetDelegate(delegate); profile_builder.SetCreateMode(create_mode); profile_builder.SetPath(path); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - profile_builder.SetIsMainProfile(Profile::IsMainProfilePath(path)); -#endif profile_builder.SetPolicyService(std::make_unique<FakePolicyService>()); return IdentityTestEnvironmentProfileAdaptor:: @@ -799,61 +745,22 @@ auto* new_identity_manager = IdentityManagerFactory::GetForProfile(new_profile); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // On Lacros, the `FakeProfileOAuth2TokenService` is used, and it is not - // connected to the `AccountProfileMapper`. As a result, it does not pick up - // the new account automatically, and the `SigninManager` is not triggered - // to set the primary account. The test only checks that the account mapping - // was updated correctly. - CoreAccountInfo core_account_info = - identity_manager()->FindExtendedAccountInfoByAccountId(account_id()); - EXPECT_TRUE(profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(new_profile->GetPath()) - ->GetGaiaIds() - .contains(core_account_info.gaia)); - EXPECT_FALSE(profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile()->GetPath()) - ->GetGaiaIds() - .contains(core_account_info.gaia)); - // Simulate the token service removing the account in the source profile. - signin::RemoveRefreshTokenForAccount(identity_manager(), account_id()); -#else // The token has been transferred to the new token service, regardless of // SigninAbortedMode. EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(account_id_)); -#endif EXPECT_TRUE(new_identity_manager->HasAccountWithRefreshToken(account_id_)); - // TODO(crbug.com/40201807): Fix device ids on Lacros. -#if !BUILDFLAG(IS_CHROMEOS_LACROS) // The initial device ID is no longer used by any profile. EXPECT_NE(initial_device_id(), GetSigninScopedDeviceIdForProfile(profile())); EXPECT_NE(initial_device_id(), GetSigninScopedDeviceIdForProfile(new_profile)); -#endif new_profile_ = new_profile; switched_to_new_profile_ = true; } -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // The `FakeProfileOAuth2TokenService` is not connected to the account - // mapping. Set the account manually. The mapping is tested in - // `SwitchToProfile()`. - void SimulateAccountAddedToProfileLacros(Profile* profile) { - auto* new_identity_manager = IdentityManagerFactory::GetForProfile(profile); - CoreAccountInfo core_account_info = - identity_manager()->FindExtendedAccountInfoByAccountId(account_id()); - signin::MakeAccountAvailable(new_identity_manager, core_account_info.email); - signin::SetPrimaryAccount(new_identity_manager, core_account_info.email, - signin::ConsentLevel::kSignin); - } -#endif - void OnDelegateDestroyed() { ++delegate_destroyed_; } bool IsProfileCreationRequiredByPolicy() const { @@ -911,11 +818,6 @@ platform_management_; std::unique_ptr<base::HistogramTester> histogram_tester_; -#if BUILDFLAG(IS_CHROMEOS_LACROS) - testing::NiceMock<account_manager::MockAccountManagerFacade> - mock_account_manager_facade_; -#endif - // State of the delegate calls. int delegate_destroyed_ = 0; std::optional<SigninUIError> login_error_; @@ -951,17 +853,6 @@ return {mock_signin_manager->handle_creation_count(), mock_signin_manager->handle_deletion_count()}; } - - static std::optional<signin::ConsentLevel> - GetExpectedPreSyncFlowConsentLevel() { -#if BUILDFLAG(IS_CHROMEOS_LACROS) - // For the primary profile, there is always a primary account set by the - // `SigninManager`. - return signin::ConsentLevel::kSignin; -#else - return std::nullopt; -#endif - } }; TestTurnSyncOnHelperDelegate::TestTurnSyncOnHelperDelegate( @@ -1153,8 +1044,8 @@ SYNC_WITH_DEFAULT_SETTINGS; // Signin flow. - EXPECT_EQ(GetExpectedPreSyncFlowConsentLevel(), - signin::GetPrimaryAccountConsentLevel(identity_manager())); + EXPECT_FALSE( + signin::GetPrimaryAccountConsentLevel(identity_manager()).has_value()); CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); WaitUntilFlowCompletion(); @@ -1166,14 +1057,10 @@ CheckDelegateCalls(); EXPECT_EQ(std::make_pair(/*creations=*/1, /*deletions=*/1), GetSignInManagerHandleState()); - CheckSigninMetrics( - {.sign_in_access_point = - GetExpectedPreSyncFlowConsentLevel().has_value() - ? std::nullopt - : std::optional<signin_metrics::AccessPoint>(kAccessPoint), - .sign_in_recorded = true, - .sync_opt_in_started = true, - .sync_opt_in_completed = true}); + CheckSigninMetrics({.sign_in_access_point = kAccessPoint, + .sign_in_recorded = true, + .sync_opt_in_started = true, + .sync_opt_in_completed = true}); } // Tests that the sync disabled message is displayed and that the account is @@ -1190,8 +1077,8 @@ SYNC_WITH_DEFAULT_SETTINGS; // Signin flow. - EXPECT_EQ(GetExpectedPreSyncFlowConsentLevel(), - signin::GetPrimaryAccountConsentLevel(identity_manager())); + EXPECT_FALSE( + signin::GetPrimaryAccountConsentLevel(identity_manager()).has_value()); CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); WaitUntilFlowCompletion(); @@ -1203,14 +1090,10 @@ CheckDelegateCalls(); EXPECT_EQ(std::make_pair(/*creations=*/1, /*deletions=*/1), GetSignInManagerHandleState()); - CheckSigninMetrics( - {.sign_in_access_point = - GetExpectedPreSyncFlowConsentLevel().has_value() - ? std::nullopt - : std::optional<signin_metrics::AccessPoint>(kAccessPoint), - .sign_in_recorded = true, - .sync_opt_in_started = true, - .sync_opt_in_completed = true}); + CheckSigninMetrics({.sign_in_access_point = kAccessPoint, + .sign_in_recorded = true, + .sync_opt_in_started = true, + .sync_opt_in_completed = true}); } // Tests that the sync aborted before displaying the sync disabled message and @@ -1261,39 +1144,6 @@ .sync_opt_in_started = true}); } -#if BUILDFLAG(IS_CHROMEOS_LACROS) -// Tests that the sync aborted before displaying the sync disabled message and -// there is no crash with a primary profile. -// Regression test for crbug.com/1367078. -TEST_F(TurnSyncOnHelperTest, SyncDisabledAbortWithoutShowingUI_PrimaryProfile) { - profile()->AsTestingProfile()->SetIsMainProfile(true); - profile()->GetProfilePolicyConnector()->OverrideIsManagedForTesting(true); - - // Set expectations. - expected_sync_disabled_confirmation_ = kAbortedBeforeShown; - expected_enterprise_confirmation_email_ = kEnterpriseEmail; - SetExpectationsForSyncDisabled(profile()); - - // Configure the test. - UseEnterpriseAccount(); - enterprise_choice_ = signin::SIGNIN_CHOICE_CONTINUE; - abort_before_show_sync_disabled_confirmation_ = true; - - // Signin flow. - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); - WaitUntilFlowCompletion(); - - // Check expectations. - CheckSyncAborted(/*kept_account=*/true); - CheckDelegateCalls(); - CheckSigninMetrics({.sign_in_access_point = kAccessPoint, - .sign_in_recorded = true, - .sync_opt_in_started = true}); -} -#endif - // Aborts the flow after the cross account dialog. TEST_F(TurnSyncOnHelperTest, CrossAccountAbort) { // Set expectations. @@ -1422,10 +1272,6 @@ CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); Profile* created_profile = profile_waiter.WaitForProfileAdded(); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - SimulateAccountAddedToProfileLacros(created_profile); -#endif - AccountRemovedWaiter account_removed_waiter(identity_manager(), account_id()); account_removed_waiter.Wait(); // Check expectations. @@ -1442,16 +1288,11 @@ EXPECT_FALSE(created_entry->IsEphemeral()); CheckDelegateCalls(); CheckSigninMetrics({ -#if BUILDFLAG(IS_CHROMEOS_LACROS) - .sign_in_access_point = - signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, -#else .sign_in_access_point = switches::IsExplicitBrowserSigninUIOnDesktopEnabled() ? signin_metrics::AccessPoint:: ACCESS_POINT_SIGNIN_INTERCEPT_FIRST_RUN_EXPERIENCE : kAccessPoint, -#endif .sign_in_recorded = true, .sync_opt_in_started = true}); } @@ -1520,9 +1361,6 @@ Profile* created_profile = profile_waiter.WaitForProfileAdded(); EXPECT_TRUE(created_profile); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - SimulateAccountAddedToProfileLacros(created_profile); -#endif policy_service(created_profile)->SimulateCloudPolicyUpdate(); AccountRemovedWaiter account_removed_waiter(identity_manager(), account_id()); @@ -1533,16 +1371,11 @@ EXPECT_FALSE(identity_manager()->HasAccountWithRefreshToken(account_id())); CheckDelegateCalls(); CheckSigninMetrics({ -#if BUILDFLAG(IS_CHROMEOS_LACROS) - .sign_in_access_point = - signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, -#else .sign_in_access_point = switches::IsExplicitBrowserSigninUIOnDesktopEnabled() ? signin_metrics::AccessPoint:: ACCESS_POINT_SIGNIN_INTERCEPT_FIRST_RUN_EXPERIENCE : kAccessPoint, -#endif .sign_in_recorded = true, .sync_opt_in_started = true}); } @@ -1612,9 +1445,6 @@ CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); Profile* created_profile = profile_waiter.WaitForProfileAdded(); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - SimulateAccountAddedToProfileLacros(created_profile); -#endif policy_service(created_profile)->SimulateCloudPolicyUpdate(); // The account is removed from the source profile. @@ -1637,16 +1467,11 @@ signin::GetPrimaryAccountConsentLevel(new_identity_manager)); CheckDelegateCalls(); CheckSigninMetrics({ -#if BUILDFLAG(IS_CHROMEOS_LACROS) - .sign_in_access_point = - signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS, -#else .sign_in_access_point = switches::IsExplicitBrowserSigninUIOnDesktopEnabled() ? signin_metrics::AccessPoint:: ACCESS_POINT_SIGNIN_INTERCEPT_FIRST_RUN_EXPERIENCE : kAccessPoint, -#endif .sign_in_recorded = true, .sync_opt_in_started = true, .profile_signout = @@ -1785,9 +1610,6 @@ ProfileWaiter profile_waiter; CreateTurnOnSyncHelper(TurnSyncOnHelper::SigninAbortedMode::KEEP_ACCOUNT); Profile* created_profile = profile_waiter.WaitForProfileAdded(); -#if BUILDFLAG(IS_CHROMEOS_LACROS) - SimulateAccountAddedToProfileLacros(created_profile); -#endif policy_service(created_profile)->SimulateCloudPolicyUpdate(); // The account is removed from the source profile. AccountRemovedWaiter account_removed_waiter(identity_manager(), account_id()); @@ -1972,8 +1794,8 @@ SetExpectationsForSyncStartupPending(profile()); // Signin flow. - EXPECT_EQ(GetExpectedPreSyncFlowConsentLevel(), - signin::GetPrimaryAccountConsentLevel(identity_manager())); + EXPECT_FALSE( + signin::GetPrimaryAccountConsentLevel(identity_manager()).has_value()); TurnSyncOnHelper* sync_starter = CreateTurnOnSyncHelper( TurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT); base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_command.cc b/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_command.cc index 7bd3423..ea368570 100644 --- a/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_command.cc +++ b/chrome/browser/web_applications/isolated_web_apps/install_isolated_web_app_command.cc
@@ -72,7 +72,7 @@ << base::Value::Dict() .Set("installed_version", success.installed_version.GetString()) - .Set("location", base::ToString(success.location)); + .Set("location", success.location.ToDebugValue()); } std::ostream& operator<<(std::ostream& os,
diff --git a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_unittest.cc b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_unittest.cc index ac06091..0204b74f 100644 --- a/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_unittest.cc +++ b/chrome/browser/web_applications/isolated_web_apps/isolated_web_app_update_manager_unittest.cc
@@ -192,7 +192,9 @@ public: explicit IsolatedWebAppUpdateManagerTest( const base::flat_map<base::test::FeatureRef, bool>& feature_states = - {{features::kIsolatedWebApps, true}}, + { + {features::kIsolatedWebApps, true}, + }, base::test::TaskEnvironment::TimeSource time_source = base::test::TaskEnvironment::TimeSource::DEFAULT) : WebAppTest(WebAppTest::WithTestUrlLoaderFactory(), time_source) { @@ -329,8 +331,10 @@ explicit IsolatedWebAppUpdateManagerUpdateTest( base::test::TaskEnvironment::TimeSource time_source = base::test::TaskEnvironment::TimeSource::DEFAULT) - : IsolatedWebAppUpdateManagerTest({{features::kIsolatedWebApps, true}}, - time_source) {} + : IsolatedWebAppUpdateManagerTest( + {{features::kIsolatedWebApps, true}, + {features::kIsolatedWebAppAutomaticUpdates, true}}, + time_source) {} protected: struct IwaInfo { @@ -462,7 +466,6 @@ virtual void SeedWebAppDatabase() {} -#if BUILDFLAG(IS_CHROMEOS) void SetIwaForceInstallPolicy( std::vector<IwaForceInstallPolicyEntry> entries) { PolicyGenerator policy_generator; @@ -488,7 +491,6 @@ future.GetCallback()); return future.Take(); } -#endif NiceMock<MockCommandScheduler>& mock_command_scheduler() { return static_cast<NiceMock<MockCommandScheduler>&>( @@ -554,7 +556,6 @@ base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} }; -#if BUILDFLAG(IS_CHROMEOS) TEST_F(IsolatedWebAppUpdateManagerUpdateMockTimeTest, DiscoversAndPreparesUpdateOfPolicyInstalledApps) { IsolatedWebAppUrlInfo non_installed_url_info = @@ -907,7 +908,6 @@ ChromeBrowsingDataRemoverDelegateFactory::GetForProfile(profile()) ->Shutdown(); } -#endif // BUILDFLAG(IS_CHROMEOS) TEST_F(IsolatedWebAppUpdateManagerUpdateMockTimeTest, MaybeDiscoverUpdatesForApp) { @@ -937,7 +937,6 @@ iwa_info1_->url_info.app_id()), IsFalse()); -#if BUILDFLAG(IS_CHROMEOS) SetIwaForceInstallPolicy( {{iwa_info1_->url_info, iwa_info1_->update_manifest_url}}); @@ -964,7 +963,6 @@ UnorderedElementsAre(IsDict(DictionaryHasValue( "result", base::Value("Success::kUpdateFoundAndDryRunSuccessful"))))); EXPECT_THAT(UpdateApplyLog(), IsEmpty()); -#endif // BUILDFLAG(IS_CHROMEOS) // TODO(crbug.com/40277668): As a temporary fix to avoid race conditions with // `ScopedProfileKeepAlive`s, manually shutdown `KeyedService`s holding them. @@ -973,7 +971,6 @@ ->Shutdown(); } -#if BUILDFLAG(IS_CHROMEOS) TEST_F(IsolatedWebAppUpdateManagerUpdateMockTimeTest, DiscoverUpdatesNow) { AddDummyIsolatedAppToRegistry( profile(), iwa_info1_->url_info.origin().GetURL(), "installed iwa 1", @@ -1212,6 +1209,13 @@ "app_id", base::Value(iwa_to_keep->url_info.app_id()))))); EXPECT_THAT(UpdateDiscoveryLog(), IsEmpty()); + // TODO(crbug.com/386760496): Temporary fix to ensure temp folder won't be + // used during clean-up. Attempts to delete files that are in use caused + // failures on Windows. +#if BUILDFLAG(IS_WIN) + task_environment()->RunUntilIdle(); +#endif // BUILDFLAG(IS_WIN) + // TODO(crbug.com/40277668): As a temporary fix to avoid race conditions with // `ScopedProfileKeepAlive`s, manually shutdown `KeyedService`s holding them. fake_provider().Shutdown(); @@ -1220,7 +1224,7 @@ } // TODO(b/338380813): The test is flaky on asan ChromeOS builder. -TEST_F(IsolatedWebAppUpdateManagerUpdateTest, StopsWaitingIfIwaIsUninstalled) { +TEST_F(IsolatedWebAppUpdateManagerUpdateTest, DISABLED_StopsWaitingIfIwaIsUninstalled) { AddDummyIsolatedAppToRegistry( profile(), iwa_info1_->url_info.origin().GetURL(), "installed app", IsolationData::Builder(iwa_info1_->installed_location, @@ -1250,6 +1254,15 @@ EXPECT_THAT(UpdateApplyTasks(), IsEmpty()); EXPECT_THAT(UpdateApplyLog(), IsEmpty()); + fake_ui_manager().SetNumWindowsForApp(iwa_info1_->url_info.app_id(), 0); + + // TODO(crbug.com/386760496): Temporary fix to ensure temp folder won't be + // used during clean-up. Attempts to delete files that are in use caused + // failures on Windows. +#if BUILDFLAG(IS_WIN) + task_environment()->RunUntilIdle(); +#endif // BUILDFLAG(IS_WIN) + // TODO(crbug.com/40277668): As a temporary fix to avoid race conditions with // `ScopedProfileKeepAlive`s, manually shutdown `KeyedService`s holding them. fake_provider().Shutdown(); @@ -1329,13 +1342,19 @@ DictionaryHasValue("app_id", base::Value(iwa_to_keep))))); EXPECT_THAT(UpdateApplyLog(), IsEmpty()); + // TODO(crbug.com/386760496): Temporary fix to ensure temp folder won't be + // used during clean-up. Attempts to delete files that are in use caused + // failures on Windows. +#if BUILDFLAG(IS_WIN) + task_environment()->RunUntilIdle(); +#endif // BUILDFLAG(IS_WIN) + // TODO(crbug.com/40277668): As a temporary fix to avoid race conditions with // `ScopedProfileKeepAlive`s, manually shutdown `KeyedService`s holding them. fake_provider().Shutdown(); ChromeBrowsingDataRemoverDelegateFactory::GetForProfile(profile()) ->Shutdown(); } -#endif // BUILDFLAG(IS_CHROMEOS) class IsolatedWebAppUpdateManagerUpdateApplyOnStartupTest : public IsolatedWebAppUpdateManagerUpdateTest { @@ -1539,14 +1558,6 @@ /* no prefix */, IsolatedWebAppUpdateManagerFeatureFlagTest, ::testing::Values( -// TODO: crbug.com/40274058 - Enable automatic updates on other platforms. -#if !BUILDFLAG(IS_CHROMEOS) - FeatureFlagParam{ - .feature_states = {{features::kIsolatedWebApps, false}}, - .expected_result = false}, - FeatureFlagParam{.feature_states = {{features::kIsolatedWebApps, true}}, - .expected_result = false} -#else // BUILDFLAG(IS_CHROMEOS) FeatureFlagParam{ .feature_states = {{features::kIsolatedWebApps, false}, {features::kIsolatedWebAppAutomaticUpdates, @@ -1562,7 +1573,6 @@ {features::kIsolatedWebAppAutomaticUpdates, true}}, .expected_result = true} -#endif // BUILDFLAG(IS_CHROMEOS) )); } // namespace
diff --git a/chrome/build/android-arm32.pgo.txt b/chrome/build/android-arm32.pgo.txt index 00b08f3..010c4bc8 100644 --- a/chrome/build/android-arm32.pgo.txt +++ b/chrome/build/android-arm32.pgo.txt
@@ -1 +1 @@ -chrome-android32-main-1736207974-9403999c51e28672dd9adf462e32c386a1941775-af4ba91a321f05ca255d879c0b3f1d78b123ad44.profdata +chrome-android32-main-1736251087-28bbc04b799abd41fc99a9fa6c8dbbf3013fbc0a-ede71bd9ed020334a5c130c4eb4c12c61f07df8c.profdata
diff --git a/chrome/build/android-arm64.pgo.txt b/chrome/build/android-arm64.pgo.txt index 6127ab4..14cd67b 100644 --- a/chrome/build/android-arm64.pgo.txt +++ b/chrome/build/android-arm64.pgo.txt
@@ -1 +1 @@ -chrome-android64-main-1736206612-8dd6e4a684c843652b19b7d0fd61da9852b5bdec-da5cafc872c73f4f77175c84d00ee67a911779a8.profdata +chrome-android64-main-1736248024-d2bd41ad7c228871d95f7f51212008ace95fbc14-625930782918af8cbb37c068e6fc24c214ab006f.profdata
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index ac98aa8f..1b994b4 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1736186382-aee256fd05601db48ad70d1e42a126f5cb913058-46e5d6b5d02dac49d2d882bd84e288bb640b2429.profdata +chrome-linux-main-1736207974-5ae9f0162c20fff82f1e40f419ea3bfa7e81091b-af4ba91a321f05ca255d879c0b3f1d78b123ad44.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt index 07e98e7..2b50f54c 100644 --- a/chrome/build/mac-arm.pgo.txt +++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@ -chrome-mac-arm-main-1736207974-0c101b1b5bf091f08a622068a780ca8d79297d1f-af4ba91a321f05ca255d879c0b3f1d78b123ad44.profdata +chrome-mac-arm-main-1736251087-e4f7137e90192efae0bd6a3c7b44af4ec2c5f361-ede71bd9ed020334a5c130c4eb4c12c61f07df8c.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 670ee23..4820291 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1736186382-e7562175a8d83e5061e66b31e97fb3828eadf591-46e5d6b5d02dac49d2d882bd84e288bb640b2429.profdata +chrome-mac-main-1736229506-445efff43c22a5681387cd114ebda75b57d05a80-7eff0fa7351dc99b093769807f3d8683d76ec83a.profdata
diff --git a/chrome/build/win-arm64.pgo.txt b/chrome/build/win-arm64.pgo.txt index 97adc10d..d9e8988 100644 --- a/chrome/build/win-arm64.pgo.txt +++ b/chrome/build/win-arm64.pgo.txt
@@ -1 +1 @@ -chrome-win-arm64-main-1736186382-9a4d6a9b398eb1d364bbd2ee51d0c3783b60c984-46e5d6b5d02dac49d2d882bd84e288bb640b2429.profdata +chrome-win-arm64-main-1736229506-2033b4b2a248e0ef8f06410c186a2ac5d3070ab9-7eff0fa7351dc99b093769807f3d8683d76ec83a.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 7b2fe35..93d1458 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1736186382-c652a8233f6bd462334063700ba5acff853071e5-46e5d6b5d02dac49d2d882bd84e288bb640b2429.profdata +chrome-win32-main-1736229506-47846553c8e2e114a12202bd670e64d3fe00d979-7eff0fa7351dc99b093769807f3d8683d76ec83a.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 6b34d548..fcaf1af 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1736186382-9a85148efeee801ccd6079f7d03b1492bf442e35-46e5d6b5d02dac49d2d882bd84e288bb640b2429.profdata +chrome-win64-main-1736240204-e8ac89bac2141f307d91050f7c2a07e53c51901d-583337893a3c92c1c37d234ca5ad5eb2d1212f4e.profdata
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc index f49e297..291cda2 100644 --- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc +++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -2736,42 +2736,18 @@ ClearUsernameAndPasswordFieldValues(); UpdateRendererIDsInFillData(); - // A call to InformNoSavedCredentials(should_show_popup_without_passwords) is - // what informs the agent whether it should show the popup even without - // suggestions. In this test, that call hasn't happened yet, so the popup - // should NOT show up without suggestions. ASSERT_TRUE(SimulateElementClick(kPasswordName)); CheckSuggestionsNotShown(); } -// With butter, passwords fields should always trigger the popup so the user can -// unlock account-stored suggestions from there. -TEST_F(PasswordAutofillAgentTest, ShowPopupOnPasswordFieldWithoutSuggestions) { - ClearUsernameAndPasswordFieldValues(); - UpdateRendererIDsInFillData(); - - // InformNoSavedCredentials(should_show_popup_without_passwords) tells the - // agent to show the popup even without suggestions. - password_autofill_agent_->InformNoSavedCredentials( - /*should_show_popup_without_passwords=*/true); - - EXPECT_CALL(fake_driver_, ShowPasswordSuggestions) - .Times(NumShowSuggestionsCalls()); - ASSERT_TRUE(SimulateElementClick(kPasswordName)); - base::RunLoop().RunUntilIdle(); -} - -// Before butter, passwords fields should never trigger the popup on password -// passwords fields without suggestions since it would not be helpful. +// Passwords fields should never trigger the popup on password passwords fields +// without suggestions since it would not be helpful. TEST_F(PasswordAutofillAgentTest, NoPopupOnPasswordFieldWithoutSuggestions) { ClearUsernameAndPasswordFieldValues(); UpdateRendererIDsInFillData(); - // InformNoSavedCredentials(should_show_popup_without_passwords) tells the - // agent NOT to show the popup without suggestions. - password_autofill_agent_->InformNoSavedCredentials( - /*should_show_popup_without_passwords=*/false); + password_autofill_agent_->InformNoSavedCredentials(); ASSERT_TRUE(SimulateElementClick(kPasswordName));
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index abff6a8..ffb0b4c 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3099,6 +3099,7 @@ "../browser/subresource_filter/subresource_filter_web_socket_browsertest.cc", "../browser/subresource_filter/subresource_filter_worker_browsertest.cc", "../browser/supervised_user/advanced_content_restrictions_interactive_uitest.cc", + "../browser/supervised_user/classify_url_navigation_throttle_browsertest.cc", "../browser/supervised_user/supervised_user_incognito_browsertest.cc", "../browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc", "../browser/supervised_user/supervised_user_regional_url_filter_browsertest.cc", @@ -3508,7 +3509,6 @@ "data/webui/chromeos/async_gen.h", ] deps += [ - "//ash/components/kcer", "//ash/webui/system_apps/public:system_web_app_type", "//chrome/browser/apps/app_service/app_install", "//chrome/browser/apps/app_service/app_install:proto", @@ -3517,6 +3517,7 @@ "//chrome/browser/ash/system_web_apps/types", "//chrome/browser/ui/ash/system_web_apps", "//chrome/test/data/webui/chromeos:web_ui_test_bindings", + "//chromeos/ash/components/kcer", "//chromeos/components/kiosk:test_support", "//chromeos/components/quick_answers/public/cpp:constants", "//components/component_updater/ash:test_support", @@ -3615,7 +3616,7 @@ deps += [ "//chrome/browser/chromeos/cros_apps:all_browser_tests", "//chrome/browser/chromeos/video_conference", - "//chrome/browser/ui/chromeos:test_support", + "//chrome/browser/ui/ash:test_support", "//chrome/browser/web_applications/app_service", "//chrome/browser/web_applications/app_service:test_support", "//chromeos/constants", @@ -4859,7 +4860,6 @@ "//ash/components/arc:arc_test_support", "//ash/components/arc:prefs", "//ash/components/arc/session:arc_base_enums", - "//ash/components/kcer:chaps_proto", "//ash/constants:constants", "//ash/keyboard/ui:test_support", "//ash/public/cpp/external_arc", @@ -5076,6 +5076,7 @@ "//chromeos/ash/components/geolocation", "//chromeos/ash/components/hid_detection", "//chromeos/ash/components/hid_detection:test_support", + "//chromeos/ash/components/kcer:chaps_proto", "//chromeos/ash/components/kiosk/vision:vision", "//chromeos/ash/components/login/auth", "//chromeos/ash/components/login/auth:test_support", @@ -8131,8 +8132,8 @@ "//ash/components/arc/intent_helper:arc_intent_helper_constants", "//chrome/browser/chromeos/reporting", "//chrome/browser/smart_card:smart_card", + "//chrome/browser/ui/ash:test_support", "//chrome/browser/ui/ash/read_write_cards", - "//chrome/browser/ui/chromeos:test_support", "//chromeos/components/disks:prefs", "//chromeos/dbus/power", "//chromeos/dbus/regmon", @@ -8235,13 +8236,13 @@ "../browser/ui/ash/editor_menu/editor_menu_view_unittest.cc", "../browser/ui/ash/editor_menu/utils/pre_target_handler_unittest.cc", "../browser/ui/ash/editor_menu/utils/utils_unittest.cc", + "../browser/ui/ash/magic_boost/magic_boost_card_controller_unittest.cc", + "../browser/ui/ash/magic_boost/magic_boost_opt_in_card_unittest.cc", "../browser/ui/ash/quick_answers/quick_answers_controller_unittest.cc", "../browser/ui/ash/quick_answers/quick_answers_state_ash_unittest.cc", "../browser/ui/ash/quick_answers/quick_answers_ui_controller_unittest.cc", "../browser/ui/ash/quick_answers/ui/quick_answers_view_unittest.cc", "../browser/ui/ash/quick_answers/ui/user_consent_view_unittest.cc", - "../browser/ui/chromeos/magic_boost/magic_boost_card_controller_unittest.cc", - "../browser/ui/chromeos/magic_boost/magic_boost_opt_in_card_unittest.cc", "../browser/ui/views/mahi/mahi_condensed_menu_view_unittest.cc", "../browser/ui/views/mahi/mahi_menu_controller_unittest.cc", "../browser/ui/views/mahi/mahi_menu_view_unittest.cc", @@ -8370,6 +8371,9 @@ "//chrome/browser/ui/ash/holding_space", "//chrome/browser/ui/ash/holding_space:test_support", "//chrome/browser/ui/ash/login:test_support", + "//chrome/browser/ui/ash/magic_boost", + "//chrome/browser/ui/ash/magic_boost:magic_boost_constants", + "//chrome/browser/ui/ash/magic_boost:test_support", "//chrome/browser/ui/ash/multi_user", "//chrome/browser/ui/ash/quick_answers", "//chrome/browser/ui/ash/quick_answers/test:mock_quick_answers_client", @@ -8381,9 +8385,6 @@ "//chrome/browser/ui/ash/system", "//chrome/browser/ui/ash/wallpaper", "//chrome/browser/ui/ash/wallpaper:test_support", - "//chrome/browser/ui/chromeos/magic_boost", - "//chrome/browser/ui/chromeos/magic_boost:magic_boost_constants", - "//chrome/browser/ui/chromeos/magic_boost:test_support", "//chrome/browser/ui/views/crostini", "//chrome/browser/ui/views/mahi", "//chrome/browser/ui/webui/ash/add_supervision", @@ -9974,7 +9975,7 @@ ] } if (is_chromeos_ash) { - deps += [ "//ash/components/kcer" ] + deps += [ "//chromeos/ash/components/kcer" ] } } if (!is_android && use_nss_certs) { @@ -9983,7 +9984,6 @@ if (is_win || is_mac || is_linux) { sources += [ - "../browser/ui/passwords/account_storage_auth_helper_unittest.cc", "../browser/ui/profiles/profile_customization_util_unittest.cc", "../browser/ui/profiles/profile_picker_unittest.cc", ] @@ -11238,9 +11238,9 @@ ":print_preview_test_support", "//chrome/browser/chromeos:interactive_ui_tests", "//chrome/browser/smart_card:interactive_ui_tests", - "//chrome/browser/ui/chromeos:test_support", + "//chrome/browser/ui/ash:test_support", "//chromeos/constants", - "//chromeos/dbus/dlp:dlp", + "//chromeos/dbus/dlp", "//chromeos/ui/base", "//chromeos/ui/frame", "//chromeos/ui/frame:test_support",
diff --git a/chrome/updater/ipc/proxy_impl_base_win.h b/chrome/updater/ipc/proxy_impl_base_win.h index afb3b129..d9ec0ae6 100644 --- a/chrome/updater/ipc/proxy_impl_base_win.h +++ b/chrome/updater/ipc/proxy_impl_base_win.h
@@ -121,6 +121,8 @@ return interface_.value(); } + UpdaterScope scope() const { return scope_; } + HRESULT ConnectToServer() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (interface_.has_value()) {
diff --git a/chrome/updater/ipc/update_service_internal_proxy_win.cc b/chrome/updater/ipc/update_service_internal_proxy_win.cc index ec690e70..e1f68fa 100644 --- a/chrome/updater/ipc/update_service_internal_proxy_win.cc +++ b/chrome/updater/ipc/update_service_internal_proxy_win.cc
@@ -34,8 +34,10 @@ : public DYNAMICIIDSIMPL(IUpdaterInternalCallback) { public: explicit UpdaterInternalCallback( + UpdaterScope scope, base::OnceCallback<void(std::optional<RpcError>)> callback) - : callback_(std::move(callback)) {} + : DYNAMICIIDSIMPL(IUpdaterInternalCallback)(scope), + callback_(std::move(callback)) {} UpdaterInternalCallback(const UpdaterInternalCallback&) = delete; UpdaterInternalCallback& operator=(const UpdaterInternalCallback&) = delete; @@ -110,8 +112,8 @@ std::move(callback).Run(connection); return; } - auto callback_wrapper = - MakeComObjectOrCrash<UpdaterInternalCallback>(std::move(callback)); + auto callback_wrapper = MakeComObjectOrCrash<UpdaterInternalCallback>( + scope(), std::move(callback)); HRESULT hr = get_interface()->Run(callback_wrapper.Get()); if (FAILED(hr)) { VLOG(2) << "Failed to call IUpdaterInternal::Run" << std::hex << hr; @@ -127,8 +129,8 @@ std::move(callback).Run(connection); return; } - auto callback_wrapper = - MakeComObjectOrCrash<UpdaterInternalCallback>(std::move(callback)); + auto callback_wrapper = MakeComObjectOrCrash<UpdaterInternalCallback>( + scope(), std::move(callback)); HRESULT hr = get_interface()->Hello(callback_wrapper.Get()); if (FAILED(hr)) { VLOG(2) << "Failed to call IUpdaterInternal::Hello" << std::hex << hr;
diff --git a/chrome/updater/ipc/update_service_proxy_win.cc b/chrome/updater/ipc/update_service_proxy_win.cc index c2ec09e..2cad453 100644 --- a/chrome/updater/ipc/update_service_proxy_win.cc +++ b/chrome/updater/ipc/update_service_proxy_win.cc
@@ -42,11 +42,13 @@ class UpdaterObserver : public DYNAMICIIDSIMPL(IUpdaterObserver) { public: UpdaterObserver( + UpdaterScope scope, base::RepeatingCallback<void(const UpdateService::UpdateState&)> state_update_callback, base::OnceCallback<void(base::expected<UpdateService::Result, RpcError>)> callback) - : state_update_callback_(state_update_callback), + : DYNAMICIIDSIMPL(IUpdaterObserver)(scope), + state_update_callback_(state_update_callback), callback_(std::move(callback)) {} UpdaterObserver(const UpdaterObserver&) = delete; UpdaterObserver& operator=(const UpdaterObserver&) = delete; @@ -229,11 +231,15 @@ class UpdaterCallback : public DYNAMICIIDSIMPL(IUpdaterCallback) { public: explicit UpdaterCallback( + UpdaterScope scope, base::OnceCallback<void(base::expected<LONG, RpcError>)> callback) - : callback_(std::move(callback)) {} + : DYNAMICIIDSIMPL(IUpdaterCallback)(scope), + callback_(std::move(callback)) {} explicit UpdaterCallback( + UpdaterScope scope, base::OnceCallback<void(base::expected<int, RpcError>)> callback) - : callback_(base::BindOnce( + : DYNAMICIIDSIMPL(IUpdaterCallback)(scope), + callback_(base::BindOnce( [](base::OnceCallback<void(base::expected<int, RpcError>)> callback, base::expected<LONG, RpcError> result) { std::move(callback).Run( @@ -274,10 +280,12 @@ : public DYNAMICIIDSIMPL(IUpdaterAppStatesCallback) { public: explicit UpdaterAppStatesCallback( + UpdaterScope scope, base::OnceCallback< void(base::expected<std::vector<UpdateService::AppState>, RpcError>)> callback) - : callback_(std::move(callback)) {} + : DYNAMICIIDSIMPL(IUpdaterAppStatesCallback)(scope), + callback_(std::move(callback)) {} UpdaterAppStatesCallback(const UpdaterAppStatesCallback&) = delete; UpdaterAppStatesCallback& operator=(const UpdaterAppStatesCallback&) = delete; @@ -592,7 +600,7 @@ return; } auto callback_wrapper = - MakeComObjectOrCrash<UpdaterCallback>(std::move(callback)); + MakeComObjectOrCrash<UpdaterCallback>(scope(), std::move(callback)); if (HRESULT hr = get_interface()->FetchPolicies(callback_wrapper.Get()); FAILED(hr)) { VLOG(2) << "Failed to call IUpdater::FetchPolicies: " << std::hex << hr; @@ -646,7 +654,7 @@ } auto callback_wrapper = - MakeComObjectOrCrash<UpdaterCallback>(std::move(callback)); + MakeComObjectOrCrash<UpdaterCallback>(scope(), std::move(callback)); if (interface2_) { if (HRESULT hr = interface2_->RegisterApp2( app_id_w.c_str(), brand_code_w.c_str(), brand_path_w.c_str(), @@ -679,8 +687,8 @@ std::move(callback).Run(base::unexpected(hr)); return; } - auto callback_wrapper = - MakeComObjectOrCrash<UpdaterAppStatesCallback>(std::move(callback)); + auto callback_wrapper = MakeComObjectOrCrash<UpdaterAppStatesCallback>( + scope(), std::move(callback)); if (HRESULT hr = get_interface()->GetAppStates(callback_wrapper.Get()); FAILED(hr)) { VLOG(2) << "Failed to call IUpdater::GetAppStates: " << std::hex << hr; @@ -697,7 +705,7 @@ return; } auto callback_wrapper = - MakeComObjectOrCrash<UpdaterCallback>(std::move(callback)); + MakeComObjectOrCrash<UpdaterCallback>(scope(), std::move(callback)); if (HRESULT hr = get_interface()->RunPeriodicTasks(callback_wrapper.Get()); FAILED(hr)) { VLOG(2) << "Failed to call IUpdater::RunPeriodicTasks " << std::hex << hr; @@ -732,7 +740,7 @@ return; } - auto observer = MakeComObjectOrCrash<UpdaterObserver>(state_update, + auto observer = MakeComObjectOrCrash<UpdaterObserver>(scope(), state_update, std::move(callback)); if (interface2_) { HRESULT hr = interface2_->CheckForUpdate2( @@ -799,7 +807,7 @@ return; } - auto observer = MakeComObjectOrCrash<UpdaterObserver>(state_update, + auto observer = MakeComObjectOrCrash<UpdaterObserver>(scope(), state_update, std::move(callback)); if (interface2_) { HRESULT hr = interface2_->Update2( @@ -838,7 +846,7 @@ std::move(callback).Run(base::unexpected(hr)); return; } - auto observer = MakeComObjectOrCrash<UpdaterObserver>(state_update, + auto observer = MakeComObjectOrCrash<UpdaterObserver>(scope(), state_update, std::move(callback)); if (HRESULT hr = get_interface()->UpdateAll(observer.Get()); FAILED(hr)) { VLOG(2) << "Failed to call IUpdater::UpdateAll: " << std::hex << hr; @@ -914,7 +922,7 @@ std::move(callback).Run(UpdateService::Result::kServiceFailed); return; } - auto observer = MakeComObjectOrCrash<UpdaterObserver>(state_update, + auto observer = MakeComObjectOrCrash<UpdaterObserver>(scope(), state_update, std::move(callback)); if (interface2_) { HRESULT hr = interface2_->Install2( @@ -1002,7 +1010,7 @@ return; } - auto observer = MakeComObjectOrCrash<UpdaterObserver>(state_update, + auto observer = MakeComObjectOrCrash<UpdaterObserver>(scope(), state_update, std::move(callback)); if (interface2_) { HRESULT hr = interface2_->RunInstaller2(
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc index 456fe9de..fa61965 100644 --- a/chrome/updater/test/integration_tests.cc +++ b/chrome/updater/test/integration_tests.cc
@@ -1715,6 +1715,58 @@ ASSERT_NO_FATAL_FAILURE(Uninstall()); } +TEST_F(IntegrationTest, CreateCorrectAndIncorrectScopeProxies) { + ScopedServer test_server(test_commands_); + ASSERT_NO_FATAL_FAILURE(Install()); + + const std::string kAppId("test"); + const base::Version v1("0.1"); + ASSERT_NO_FATAL_FAILURE(InstallApp(kAppId)); + + ASSERT_NO_FATAL_FAILURE(ExpectAppVersion(kAppId, v1)); + + ASSERT_NO_FATAL_FAILURE(ExpectUpdateCheckSequence( + &test_server, kAppId, UpdateService::Priority::kForeground, + base::Version("0.1"), base::Version("1"))); + + // Proxy created with the correct scope. + { + scoped_refptr<UpdateService> update_service = + CreateUpdateServiceProxy(GetUpdaterScopeForTesting()); + base::RunLoop loop; + update_service->CheckForUpdate( + kAppId, UpdateService::Priority::kForeground, + UpdateService::PolicySameVersionUpdate::kNotAllowed, + /*language=*/{}, base::DoNothing(), + base::BindLambdaForTesting( + [&loop](UpdateService::Result result_unused) { loop.Quit(); })); + loop.Run(); + } + + // Proxy created with the opposite of what `GetUpdaterScopeForTesting` + // returns. + { + scoped_refptr<UpdateService> update_service = CreateUpdateServiceProxy( + IsSystemInstall(GetUpdaterScopeForTesting()) ? UpdaterScope::kUser + : UpdaterScope::kSystem); + base::RunLoop loop; + update_service->CheckForUpdate( + kAppId, UpdateService::Priority::kForeground, + UpdateService::PolicySameVersionUpdate::kNotAllowed, + /*language=*/{}, base::DoNothing(), + base::BindLambdaForTesting([&loop](UpdateService::Result result) { + EXPECT_TRUE(result == UpdateService::Result::kServiceFailed || + result == UpdateService::Result::kIPCConnectionFailed) + << "result == " << result; + loop.Quit(); + })); + loop.Run(); + } + + ASSERT_NO_FATAL_FAILURE(ExpectUninstallPing(&test_server)); + ASSERT_NO_FATAL_FAILURE(Uninstall()); +} + TEST_F(IntegrationTest, UnregisterUninstalledApp) { ASSERT_NO_FATAL_FAILURE(Install()); ASSERT_NO_FATAL_FAILURE(ExpectInstalled());
diff --git a/chrome/updater/util/win_util.h b/chrome/updater/util/win_util.h index 9613bd5..13bd48b 100644 --- a/chrome/updater/util/win_util.h +++ b/chrome/updater/util/win_util.h
@@ -119,20 +119,25 @@ template <typename Interface, REFIID iid_user, REFIID iid_system> class DynamicIIDsImpl : public internal::WrlRuntimeClass<Interface> { public: - DynamicIIDsImpl() { + explicit DynamicIIDsImpl(UpdaterScope scope) : scope_(scope) { VLOG(3) << __func__ << ": Interface: " << typeid(Interface).name() << ": iid_user: " << StringFromGuid(iid_user) << ": iid_system: " << StringFromGuid(iid_system) - << ": IsSystemInstall(): " << IsSystemInstall(); + << ": scope: " << scope; } + DynamicIIDsImpl() : DynamicIIDsImpl(GetUpdaterScope()) {} + IFACEMETHODIMP QueryInterface(REFIID riid, void** object) override { return internal::WrlRuntimeClass<Interface>::QueryInterface( - riid == (IsSystemInstall() ? iid_system : iid_user) + riid == (IsSystemInstall(scope_) ? iid_system : iid_user) ? __uuidof(Interface) : riid, object); } + + private: + const UpdaterScope scope_; }; // Macro that makes it easier to derive from `DynamicIIDsImpl`.
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM index cf4cb4c..3f299f1 100644 --- a/chromeos/CHROMEOS_LKGM +++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@ -16152.0.0-1065916 \ No newline at end of file +16152.0.0-1065920 \ No newline at end of file
diff --git a/chromeos/ash/components/BUILD.gn b/chromeos/ash/components/BUILD.gn index ae46842..3f285eed 100644 --- a/chromeos/ash/components/BUILD.gn +++ b/chromeos/ash/components/BUILD.gn
@@ -36,6 +36,7 @@ "//chromeos/ash/components/hid_detection:unit_tests", "//chromeos/ash/components/human_presence:unit_tests", "//chromeos/ash/components/install_attributes:unit_tests", + "//chromeos/ash/components/kcer:unit_tests", "//chromeos/ash/components/kiosk/vision:unit_tests", "//chromeos/ash/components/language_packs:unit_tests", "//chromeos/ash/components/local_search_service:unit_tests",
diff --git a/ash/components/kcer/BUILD.gn b/chromeos/ash/components/kcer/BUILD.gn similarity index 98% rename from ash/components/kcer/BUILD.gn rename to chromeos/ash/components/kcer/BUILD.gn index 510ab56..ce7829f 100644 --- a/ash/components/kcer/BUILD.gn +++ b/chromeos/ash/components/kcer/BUILD.gn
@@ -74,7 +74,7 @@ ] generate_python = false - proto_out_dir = "ash/components/kcer" + proto_out_dir = "chromeos/ash/components/kcer" } source_set("test_support") {
diff --git a/ash/components/kcer/COMMON_METADATA b/chromeos/ash/components/kcer/COMMON_METADATA similarity index 100% rename from ash/components/kcer/COMMON_METADATA rename to chromeos/ash/components/kcer/COMMON_METADATA
diff --git a/ash/components/kcer/DEPS b/chromeos/ash/components/kcer/DEPS similarity index 80% rename from ash/components/kcer/DEPS rename to chromeos/ash/components/kcer/DEPS index 72b0835..2697cafca 100644 --- a/ash/components/kcer/DEPS +++ b/chromeos/ash/components/kcer/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+chromeos/ash/components/dbus/chaps", "+content/public/browser", "+content/public/test", "+net/cert",
diff --git a/chromeos/ash/components/kcer/DIR_METADATA b/chromeos/ash/components/kcer/DIR_METADATA new file mode 100644 index 0000000..d26e002 --- /dev/null +++ b/chromeos/ash/components/kcer/DIR_METADATA
@@ -0,0 +1 @@ +mixins: "//chromeos/ash/components/kcer/COMMON_METADATA"
diff --git a/ash/components/kcer/OWNERS b/chromeos/ash/components/kcer/OWNERS similarity index 100% rename from ash/components/kcer/OWNERS rename to chromeos/ash/components/kcer/OWNERS
diff --git a/ash/components/kcer/README.md b/chromeos/ash/components/kcer/README.md similarity index 100% rename from ash/components/kcer/README.md rename to chromeos/ash/components/kcer/README.md
diff --git a/ash/components/kcer/cert_cache.cc b/chromeos/ash/components/kcer/cert_cache.cc similarity index 95% rename from ash/components/kcer/cert_cache.cc rename to chromeos/ash/components/kcer/cert_cache.cc index 233b0a1e..0b95e72 100644 --- a/ash/components/kcer/cert_cache.cc +++ b/chromeos/ash/components/kcer/cert_cache.cc
@@ -7,15 +7,15 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/cert_cache.h" #include <stdint.h> #include <vector> -#include "ash/components/kcer/kcer.h" #include "base/containers/span.h" #include "base/memory/raw_span.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/cert/x509_util.h" namespace kcer::internal {
diff --git a/ash/components/kcer/cert_cache.h b/chromeos/ash/components/kcer/cert_cache.h similarity index 91% rename from ash/components/kcer/cert_cache.h rename to chromeos/ash/components/kcer/cert_cache.h index b45a789..e7d6814 100644 --- a/ash/components/kcer/cert_cache.h +++ b/chromeos/ash/components/kcer/cert_cache.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_CERT_CACHE_H_ -#define ASH_COMPONENTS_KCER_CERT_CACHE_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CERT_CACHE_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CERT_CACHE_H_ #include <stdint.h> @@ -61,4 +61,4 @@ } // namespace internal } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CERT_CACHE_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CERT_CACHE_H_
diff --git a/ash/components/kcer/cert_cache_unittest.cc b/chromeos/ash/components/kcer/cert_cache_unittest.cc similarity index 97% rename from ash/components/kcer/cert_cache_unittest.cc rename to chromeos/ash/components/kcer/cert_cache_unittest.cc index d5ef6c49..e4666c9 100644 --- a/ash/components/kcer/cert_cache_unittest.cc +++ b/chromeos/ash/components/kcer/cert_cache_unittest.cc
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/cert_cache.h" #include <memory> -#include "ash/components/kcer/kcer.h" #include "base/containers/span.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/cert/x509_util.h" #include "net/test/cert_builder.h" #include "net/test/test_data_directory.h"
diff --git a/ash/components/kcer/chaps/high_level_chaps_client.cc b/chromeos/ash/components/kcer/chaps/high_level_chaps_client.cc similarity index 98% rename from ash/components/kcer/chaps/high_level_chaps_client.cc rename to chromeos/ash/components/kcer/chaps/high_level_chaps_client.cc index 23063c4..172137d5 100644 --- a/ash/components/kcer/chaps/high_level_chaps_client.cc +++ b/chromeos/ash/components/kcer/chaps/high_level_chaps_client.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/key_permissions.pb.h" #include "base/sequence_checker.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "chromeos/constants/pkcs11_definitions.h" #include "third_party/cros_system_api/dbus/chaps/dbus-constants.h"
diff --git a/ash/components/kcer/chaps/high_level_chaps_client.h b/chromeos/ash/components/kcer/chaps/high_level_chaps_client.h similarity index 96% rename from ash/components/kcer/chaps/high_level_chaps_client.h rename to chromeos/ash/components/kcer/chaps/high_level_chaps_client.h index 5035868..8410c08 100644 --- a/ash/components/kcer/chaps/high_level_chaps_client.h +++ b/chromeos/ash/components/kcer/chaps/high_level_chaps_client.h
@@ -7,18 +7,18 @@ #pragma allow_unsafe_buffers #endif -#ifndef ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_ -#define ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_ #include <stdint.h> #include <vector> -#include "ash/components/kcer/attributes.pb.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/sequence_checker.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" #include "chromeos/constants/pkcs11_definitions.h" #include "third_party/cros_system_api/constants/pkcs11_custom_attributes.h" #include "third_party/cros_system_api/dbus/chaps/dbus-constants.h" @@ -258,4 +258,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_HIGH_LEVEL_CHAPS_CLIENT_H_
diff --git a/ash/components/kcer/chaps/high_level_chaps_client_unittest.cc b/chromeos/ash/components/kcer/chaps/high_level_chaps_client_unittest.cc similarity index 98% rename from ash/components/kcer/chaps/high_level_chaps_client_unittest.cc rename to chromeos/ash/components/kcer/chaps/high_level_chaps_client_unittest.cc index d9662e45..c5c20a3 100644 --- a/ash/components/kcer/chaps/high_level_chaps_client_unittest.cc +++ b/chromeos/ash/components/kcer/chaps/high_level_chaps_client_unittest.cc
@@ -2,15 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/attributes.pb.h" -#include "ash/components/kcer/chaps/mock_session_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" #include "base/containers/contains.h" #include "base/test/gmock_callback_support.h" #include "base/test/gmock_move_support.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" +#include "chromeos/ash/components/kcer/chaps/mock_session_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ash/components/kcer/chaps/mock_high_level_chaps_client.cc b/chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.cc similarity index 80% rename from ash/components/kcer/chaps/mock_high_level_chaps_client.cc rename to chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.cc index cf1cebe..687cbd4 100644 --- a/ash/components/kcer/chaps/mock_high_level_chaps_client.cc +++ b/chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" namespace kcer {
diff --git a/ash/components/kcer/chaps/mock_high_level_chaps_client.h b/chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h similarity index 91% rename from ash/components/kcer/chaps/mock_high_level_chaps_client.h rename to chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h index e130c7ff0..51d1476 100644 --- a/ash/components/kcer/chaps/mock_high_level_chaps_client.h +++ b/chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_ -#define ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_ -#include "ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" #include "testing/gmock/include/gmock/gmock.h" namespace kcer { @@ -88,4 +88,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_HIGH_LEVEL_CHAPS_CLIENT_H_
diff --git a/ash/components/kcer/chaps/mock_session_chaps_client.cc b/chromeos/ash/components/kcer/chaps/mock_session_chaps_client.cc similarity index 80% rename from ash/components/kcer/chaps/mock_session_chaps_client.cc rename to chromeos/ash/components/kcer/chaps/mock_session_chaps_client.cc index 8b94774..152143ce 100644 --- a/ash/components/kcer/chaps/mock_session_chaps_client.cc +++ b/chromeos/ash/components/kcer/chaps/mock_session_chaps_client.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/mock_session_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/mock_session_chaps_client.h" namespace kcer {
diff --git a/ash/components/kcer/chaps/mock_session_chaps_client.h b/chromeos/ash/components/kcer/chaps/mock_session_chaps_client.h similarity index 90% rename from ash/components/kcer/chaps/mock_session_chaps_client.h rename to chromeos/ash/components/kcer/chaps/mock_session_chaps_client.h index 470797b..471224c 100644 --- a/ash/components/kcer/chaps/mock_session_chaps_client.h +++ b/chromeos/ash/components/kcer/chaps/mock_session_chaps_client.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_ -#define ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_ -#include "ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" #include "testing/gmock/include/gmock/gmock.h" namespace kcer { @@ -80,4 +80,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_MOCK_SESSION_CHAPS_CLIENT_H_
diff --git a/ash/components/kcer/chaps/session_chaps_client.cc b/chromeos/ash/components/kcer/chaps/session_chaps_client.cc similarity index 99% rename from ash/components/kcer/chaps/session_chaps_client.cc rename to chromeos/ash/components/kcer/chaps/session_chaps_client.cc index c7167ce..425350d 100644 --- a/ash/components/kcer/chaps/session_chaps_client.cc +++ b/chromeos/ash/components/kcer/chaps/session_chaps_client.cc
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" #include <stdint.h> #include <utility> #include <vector> -#include "ash/components/kcer/attributes.pb.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" #include "chromeos/constants/pkcs11_definitions.h" #include "third_party/cros_system_api/dbus/chaps/dbus-constants.h"
diff --git a/ash/components/kcer/chaps/session_chaps_client.h b/chromeos/ash/components/kcer/chaps/session_chaps_client.h similarity index 97% rename from ash/components/kcer/chaps/session_chaps_client.h rename to chromeos/ash/components/kcer/chaps/session_chaps_client.h index 3fb7f04..5f5d317 100644 --- a/ash/components/kcer/chaps/session_chaps_client.h +++ b/chromeos/ash/components/kcer/chaps/session_chaps_client.h
@@ -2,14 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_ -#define ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_ #include <stdint.h> #include <vector> -#include "ash/components/kcer/attributes.pb.h" #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" @@ -17,6 +16,7 @@ #include "base/sequence_checker.h" #include "base/types/strong_alias.h" #include "chromeos/ash/components/dbus/chaps/chaps_client.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" #include "chromeos/crosapi/mojom/chaps_service.mojom.h" namespace kcer { @@ -242,4 +242,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CHAPS_SESSION_CHAPS_CLIENT_H_
diff --git a/ash/components/kcer/chaps/session_chaps_client_unittest.cc b/chromeos/ash/components/kcer/chaps/session_chaps_client_unittest.cc similarity index 96% rename from ash/components/kcer/chaps/session_chaps_client_unittest.cc rename to chromeos/ash/components/kcer/chaps/session_chaps_client_unittest.cc index d875345..9c20f3da 100644 --- a/ash/components/kcer/chaps/session_chaps_client_unittest.cc +++ b/chromeos/ash/components/kcer/chaps/session_chaps_client_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" #include <stdint.h> @@ -27,7 +27,7 @@ namespace kcer { namespace { -class SessionChapsClientTest : public testing::Test { +class KcerSessionChapsClientTest : public testing::Test { public: void SetUp() override { if (ash::ChapsClient::Get()) { @@ -69,7 +69,7 @@ const std::vector<uint8_t> kFakeQuery{2, 2, 2}; }; -TEST_F(SessionChapsClientTest, CreateAndFetchObject) { +TEST_F(KcerSessionChapsClientTest, CreateAndFetchObject) { // Test that CreateObject() can create an object. base::test::TestFuture<ObjectHandle, uint32_t> create_waiter; client_.CreateObject(SlotId(1), /*attributes=*/kFakeAttrs, @@ -87,7 +87,7 @@ EXPECT_EQ(attr_waiter.Get<std::vector<uint8_t>>(), kFakeAttrs); } -TEST_F(SessionChapsClientTest, CreateFindDestroyObject) { +TEST_F(KcerSessionChapsClientTest, CreateFindDestroyObject) { // Create a test object. ObjectHandle handle = CreateObject(SlotId(1), kFakeAttrs); @@ -116,7 +116,7 @@ // Test that GetAttributeValue correctly forwards the arguments to the mojo // layer and the result back from it. -TEST_F(SessionChapsClientTest, SetGetAttributeValue) { +TEST_F(KcerSessionChapsClientTest, SetGetAttributeValue) { // Create a test object. ObjectHandle handle = CreateObject(SlotId(1), kFakeAttrs); @@ -139,7 +139,7 @@ EXPECT_EQ(get_waiter.Get<std::vector<uint8_t>>(), kFakeAttrs2); } -TEST_F(SessionChapsClientTest, Sign) { +TEST_F(KcerSessionChapsClientTest, Sign) { constexpr uint64_t kFakeMechanismType = 11; const std::vector<uint8_t> kFakeMechanismParams = {2, 2, 2}; const std::vector<uint8_t> kFakeData = {4, 4, 4}; @@ -162,7 +162,7 @@ EXPECT_EQ(waiter.Get<uint32_t>(), chromeos::PKCS11_CKR_OK); } -TEST_F(SessionChapsClientTest, GenerateAndGetKeyPair) { +TEST_F(KcerSessionChapsClientTest, GenerateAndGetKeyPair) { constexpr uint64_t kFakeMechanismType = 11; const std::vector<uint8_t> kFakeMechanismParams = {2, 2, 2}; const std::vector<uint8_t> kFakePublicAttrs = {3, 3, 3}; @@ -199,7 +199,7 @@ } // Test that all methods fail if they need to open a session and fail to do so. -TEST_F(SessionChapsClientTest, CannotOpenSessionThenAllMethodsFail) { +TEST_F(KcerSessionChapsClientTest, CannotOpenSessionThenAllMethodsFail) { fake_chaps_client_->SimulateOpenSessionError( chromeos::PKCS11_CKR_GENERAL_ERROR); @@ -265,7 +265,7 @@ // Test that the first call to each slot opens a session that can be reused by // all the other methods. -TEST_F(SessionChapsClientTest, AllMethodsDontReopenSession) { +TEST_F(KcerSessionChapsClientTest, AllMethodsDontReopenSession) { // Call a method on two different slots that should open new sessions for // them. Also save created objects to use them for other methods. std::vector<ObjectHandle> objects_handles(2); @@ -343,7 +343,7 @@ // Test that all methods try to open a session multiple times when there's no // open session at the beginning of each method. -TEST_F(SessionChapsClientTest, AllMethodsTryReopenSession) { +TEST_F(KcerSessionChapsClientTest, AllMethodsTryReopenSession) { constexpr int kAttempts = 5; fake_chaps_client_->SimulateOpenSessionError( chromeos::PKCS11_CKR_GENERAL_ERROR);
diff --git a/ash/components/kcer/client_cert_identity_kcer.cc b/chromeos/ash/components/kcer/client_cert_identity_kcer.cc similarity index 91% rename from ash/components/kcer/client_cert_identity_kcer.cc rename to chromeos/ash/components/kcer/client_cert_identity_kcer.cc index 1c3432a..2ab61fe 100644 --- a/ash/components/kcer/client_cert_identity_kcer.cc +++ b/chromeos/ash/components/kcer/client_cert_identity_kcer.cc
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/client_cert_identity_kcer.h" +#include "chromeos/ash/components/kcer/client_cert_identity_kcer.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/ssl_private_key_kcer.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/types/expected.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/ssl_private_key_kcer.h" #include "net/ssl/client_cert_identity.h" #include "net/ssl/ssl_private_key.h"
diff --git a/ash/components/kcer/client_cert_identity_kcer.h b/chromeos/ash/components/kcer/client_cert_identity_kcer.h similarity index 82% rename from ash/components/kcer/client_cert_identity_kcer.h rename to chromeos/ash/components/kcer/client_cert_identity_kcer.h index 8263d24..4806a42 100644 --- a/ash/components/kcer/client_cert_identity_kcer.h +++ b/chromeos/ash/components/kcer/client_cert_identity_kcer.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_ -#define ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_ -#include "ash/components/kcer/kcer.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/types/expected.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/ssl/client_cert_identity.h" #include "net/ssl/ssl_private_key.h" @@ -39,4 +39,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_CLIENT_CERT_IDENTITY_KCER_H_
diff --git a/ash/components/kcer/client_cert_identity_kcer_unittest.cc b/chromeos/ash/components/kcer/client_cert_identity_kcer_unittest.cc similarity index 94% rename from ash/components/kcer/client_cert_identity_kcer_unittest.cc rename to chromeos/ash/components/kcer/client_cert_identity_kcer_unittest.cc index 853fd72..ef9abf5 100644 --- a/ash/components/kcer/client_cert_identity_kcer_unittest.cc +++ b/chromeos/ash/components/kcer/client_cert_identity_kcer_unittest.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/client_cert_identity_kcer.h" +#include "chromeos/ash/components/kcer/client_cert_identity_kcer.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "content/public/test/browser_task_environment.h" #include "crypto/scoped_test_nss_db.h" #include "net/test/test_data_directory.h"
diff --git a/ash/components/kcer/extra_instances.cc b/chromeos/ash/components/kcer/extra_instances.cc similarity index 92% rename from ash/components/kcer/extra_instances.cc rename to chromeos/ash/components/kcer/extra_instances.cc index 8577e7f..435f31c 100644 --- a/ash/components/kcer/extra_instances.cc +++ b/chromeos/ash/components/kcer/extra_instances.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/extra_instances.h" +#include "chromeos/ash/components/kcer/extra_instances.h" -#include "ash/components/kcer/kcer_impl.h" -#include "ash/components/kcer/kcer_token.h" #include "base/no_destructor.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_token.h" #include "content/public/browser/browser_thread.h" namespace kcer {
diff --git a/ash/components/kcer/extra_instances.h b/chromeos/ash/components/kcer/extra_instances.h similarity index 90% rename from ash/components/kcer/extra_instances.h rename to chromeos/ash/components/kcer/extra_instances.h index 8ed750b..ee87d03 100644 --- a/ash/components/kcer/extra_instances.h +++ b/chromeos/ash/components/kcer/extra_instances.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_ -#define ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_ -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_impl.h" #include "base/no_destructor.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" namespace kcer { @@ -63,4 +63,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_EXTRA_INSTANCES_H_
diff --git a/ash/components/kcer/helpers/key_helper.cc b/chromeos/ash/components/kcer/helpers/key_helper.cc similarity index 98% rename from ash/components/kcer/helpers/key_helper.cc rename to chromeos/ash/components/kcer/helpers/key_helper.cc index 0756d2eb..e6ffb08a 100644 --- a/ash/components/kcer/helpers/key_helper.cc +++ b/chromeos/ash/components/kcer/helpers/key_helper.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/helpers/key_helper.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" #include <pk11pub.h> #include <stdint.h>
diff --git a/ash/components/kcer/helpers/key_helper.h b/chromeos/ash/components/kcer/helpers/key_helper.h similarity index 90% rename from ash/components/kcer/helpers/key_helper.h rename to chromeos/ash/components/kcer/helpers/key_helper.h index ac1a3c45..060f75d6 100644 --- a/ash/components/kcer/helpers/key_helper.h +++ b/chromeos/ash/components/kcer/helpers/key_helper.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_ -#define ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_ #include <stdint.h> @@ -53,4 +53,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_KEY_HELPER_H_
diff --git a/ash/components/kcer/helpers/key_helper_unittest.cc b/chromeos/ash/components/kcer/helpers/key_helper_unittest.cc similarity index 97% rename from ash/components/kcer/helpers/key_helper_unittest.cc rename to chromeos/ash/components/kcer/helpers/key_helper_unittest.cc index 04ace35..276d2ed 100644 --- a/ash/components/kcer/helpers/key_helper_unittest.cc +++ b/chromeos/ash/components/kcer/helpers/key_helper_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/helpers/key_helper.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" #include <pk11pub.h>
diff --git a/ash/components/kcer/helpers/pkcs12_reader.cc b/chromeos/ash/components/kcer/helpers/pkcs12_reader.cc similarity index 98% rename from ash/components/kcer/helpers/pkcs12_reader.cc rename to chromeos/ash/components/kcer/helpers/pkcs12_reader.cc index d59de9b..a7d9e81 100644 --- a/ash/components/kcer/helpers/pkcs12_reader.cc +++ b/chromeos/ash/components/kcer/helpers/pkcs12_reader.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" #include <stdint.h> @@ -15,9 +15,9 @@ #include <string> #include <vector> -#include "ash/components/kcer/helpers/key_helper.h" #include "base/containers/span.h" #include "base/logging.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" #include "crypto/nss_util.h" #include "crypto/openssl_util.h" #include "net/cert/x509_util_nss.h"
diff --git a/ash/components/kcer/helpers/pkcs12_reader.h b/chromeos/ash/components/kcer/helpers/pkcs12_reader.h similarity index 96% rename from ash/components/kcer/helpers/pkcs12_reader.h rename to chromeos/ash/components/kcer/helpers/pkcs12_reader.h index 036ea9b2..080a7679 100644 --- a/ash/components/kcer/helpers/pkcs12_reader.h +++ b/chromeos/ash/components/kcer/helpers/pkcs12_reader.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_ -#define ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_ #include <nss/certt.h> #include <stdint.h> @@ -11,11 +11,11 @@ #include <string> #include <vector> -#include "ash/components/kcer/kcer.h" #include "base/component_export.h" #include "base/containers/span.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/cert/x509_certificate.h" #include "third_party/boringssl/src/include/openssl/base.h" #include "third_party/boringssl/src/include/openssl/pkcs7.h" @@ -202,4 +202,4 @@ }; } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_READER_H_
diff --git a/ash/components/kcer/helpers/pkcs12_reader_unittest.cc b/chromeos/ash/components/kcer/helpers/pkcs12_reader_unittest.cc similarity index 99% rename from ash/components/kcer/helpers/pkcs12_reader_unittest.cc rename to chromeos/ash/components/kcer/helpers/pkcs12_reader_unittest.cc index b7fdc7b..73b864a 100644 --- a/ash/components/kcer/helpers/pkcs12_reader_unittest.cc +++ b/chromeos/ash/components/kcer/helpers/pkcs12_reader_unittest.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" #include <pk11pub.h> #include <stdint.h> @@ -16,9 +16,9 @@ #include <string> #include <vector> -#include "ash/components/kcer/helpers/key_helper.h" #include "base/base64.h" #include "base/containers/span.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" #include "crypto/scoped_test_nss_db.h" #include "net/cert/x509_certificate.h" #include "net/cert/x509_util_nss.h"
diff --git a/ash/components/kcer/helpers/pkcs12_validator.cc b/chromeos/ash/components/kcer/helpers/pkcs12_validator.cc similarity index 97% rename from ash/components/kcer/helpers/pkcs12_validator.cc rename to chromeos/ash/components/kcer/helpers/pkcs12_validator.cc index 19d3c4f..059f816 100644 --- a/ash/components/kcer/helpers/pkcs12_validator.cc +++ b/chromeos/ash/components/kcer/helpers/pkcs12_validator.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/helpers/pkcs12_validator.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_validator.h" #include <cert.h> #include <stdint.h> @@ -16,14 +16,14 @@ #include <string> #include <vector> -#include "ash/components/kcer/cert_cache.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" -#include "ash/components/kcer/kcer.h" #include "base/containers/contains.h" #include "base/containers/span.h" #include "base/logging.h" #include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" +#include "chromeos/ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "third_party/boringssl/src/include/openssl/base.h" #include "third_party/boringssl/src/include/openssl/mem.h" #include "third_party/boringssl/src/include/openssl/pkcs8.h"
diff --git a/ash/components/kcer/helpers/pkcs12_validator.h b/chromeos/ash/components/kcer/helpers/pkcs12_validator.h similarity index 84% rename from ash/components/kcer/helpers/pkcs12_validator.h rename to chromeos/ash/components/kcer/helpers/pkcs12_validator.h index 5e78eab..804bf36f 100644 --- a/ash/components/kcer/helpers/pkcs12_validator.h +++ b/chromeos/ash/components/kcer/helpers/pkcs12_validator.h
@@ -6,15 +6,15 @@ // validation before data import to chaps. They are used in kcer_chaps_util.cc, // but they are not related to chaps, so they were moved to a separate file. -#ifndef ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_ -#define ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_ #include <string> #include <vector> -#include "ash/components/kcer/cert_cache.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" #include "base/memory/raw_ref.h" +#include "chromeos/ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" #include "third_party/boringssl/src/include/openssl/base.h" #include "third_party/boringssl/src/include/openssl/stack.h" @@ -48,4 +48,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_HELPERS_PKCS12_VALIDATOR_H_
diff --git a/ash/components/kcer/helpers/pkcs12_validator_unittest.cc b/chromeos/ash/components/kcer/helpers/pkcs12_validator_unittest.cc similarity index 98% rename from ash/components/kcer/helpers/pkcs12_validator_unittest.cc rename to chromeos/ash/components/kcer/helpers/pkcs12_validator_unittest.cc index 6ae7f9e..d405a70 100644 --- a/ash/components/kcer/helpers/pkcs12_validator_unittest.cc +++ b/chromeos/ash/components/kcer/helpers/pkcs12_validator_unittest.cc
@@ -7,11 +7,11 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/helpers/pkcs12_validator.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_validator.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/containers/span.h" #include "base/numerics/safe_conversions.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "net/cert/x509_certificate.h" #include "net/test/cert_builder.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/ash/components/kcer/kcer.cc b/chromeos/ash/components/kcer/kcer.cc similarity index 96% rename from ash/components/kcer/kcer.cc rename to chromeos/ash/components/kcer/kcer.cc index 99fa99ae..cb6fd05 100644 --- a/ash/components/kcer/kcer.cc +++ b/chromeos/ash/components/kcer/kcer.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer.h" #include <stdint.h> @@ -10,10 +10,10 @@ #include <utility> #include <vector> -#include "ash/components/kcer/kcer_impl.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/task/single_thread_task_runner.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" #include "net/cert/x509_certificate.h" namespace kcer {
diff --git a/ash/components/kcer/kcer.h b/chromeos/ash/components/kcer/kcer.h similarity index 98% rename from ash/components/kcer/kcer.h rename to chromeos/ash/components/kcer/kcer.h index e7070bb..854ef341 100644 --- a/ash/components/kcer/kcer.h +++ b/chromeos/ash/components/kcer/kcer.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_H_ -#define ASH_COMPONENTS_KCER_KCER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_H_ #include <stdint.h> @@ -11,7 +11,6 @@ #include <string> #include <vector> -#include "ash/components/kcer/key_permissions.pb.h" #include "base/callback_list.h" #include "base/component_export.h" #include "base/containers/flat_map.h" @@ -22,6 +21,7 @@ #include "base/task/task_runner.h" #include "base/types/expected.h" #include "base/types/strong_alias.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "net/cert/x509_certificate.h" #include "third_party/boringssl/src/include/openssl/ssl.h" @@ -472,4 +472,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_KCER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_H_
diff --git a/ash/components/kcer/kcer_histograms.cc b/chromeos/ash/components/kcer/kcer_histograms.cc similarity index 93% rename from ash/components/kcer/kcer_histograms.cc rename to chromeos/ash/components/kcer/kcer_histograms.cc index f23a546..8589df8 100644 --- a/ash/components/kcer/kcer_histograms.cc +++ b/chromeos/ash/components/kcer/kcer_histograms.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer_histograms.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" #include "base/metrics/histogram_functions.h"
diff --git a/ash/components/kcer/kcer_histograms.h b/chromeos/ash/components/kcer/kcer_histograms.h similarity index 87% rename from ash/components/kcer/kcer_histograms.h rename to chromeos/ash/components/kcer/kcer_histograms.h index a4bbbfca..7baae84 100644 --- a/ash/components/kcer/kcer_histograms.h +++ b/chromeos/ash/components/kcer/kcer_histograms.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_ -#define ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_ -#include "ash/components/kcer/kcer.h" #include "base/component_export.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer { @@ -55,4 +55,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_HISTOGRAMS_H_
diff --git a/ash/components/kcer/kcer_impl.cc b/chromeos/ash/components/kcer/kcer_impl.cc similarity index 98% rename from ash/components/kcer/kcer_impl.cc rename to chromeos/ash/components/kcer/kcer_impl.cc index 6cd97439..6bd528b 100644 --- a/ash/components/kcer/kcer_impl.cc +++ b/chromeos/ash/components/kcer/kcer_impl.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" #include <stdint.h> @@ -15,10 +15,6 @@ #include <utility> #include <vector> -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_token.h" -#include "ash/components/kcer/token_key_finder.h" -#include "ash/components/kcer/token_results_merger.h" #include "base/callback_list.h" #include "base/containers/flat_set.h" #include "base/memory/scoped_refptr.h" @@ -26,6 +22,10 @@ #include "base/task/bind_post_task.h" #include "base/task/task_runner.h" #include "base/types/expected.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_token.h" +#include "chromeos/ash/components/kcer/token_key_finder.h" +#include "chromeos/ash/components/kcer/token_results_merger.h" #include "content/public/browser/browser_thread.h" #include "net/cert/x509_certificate.h"
diff --git a/ash/components/kcer/kcer_impl.h b/chromeos/ash/components/kcer/kcer_impl.h similarity index 95% rename from ash/components/kcer/kcer_impl.h rename to chromeos/ash/components/kcer/kcer_impl.h index 2118724..f74d6db 100644 --- a/ash/components/kcer/kcer_impl.h +++ b/chromeos/ash/components/kcer/kcer_impl.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_IMPL_H_ -#define ASH_COMPONENTS_KCER_KCER_IMPL_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_IMPL_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_IMPL_H_ #include <stdint.h> @@ -11,15 +11,15 @@ #include <string> #include <vector> -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_notifier_net.h" -#include "ash/components/kcer/kcer_token.h" #include "base/callback_list.h" #include "base/containers/flat_set.h" #include "base/functional/callback_forward.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/task/task_runner.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_notifier_net.h" +#include "chromeos/ash/components/kcer/kcer_token.h" #include "net/cert/x509_certificate.h" namespace kcer::internal { @@ -194,4 +194,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_IMPL_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_IMPL_H_
diff --git a/ash/components/kcer/kcer_notifier_net.cc b/chromeos/ash/components/kcer/kcer_notifier_net.cc similarity index 91% rename from ash/components/kcer/kcer_notifier_net.cc rename to chromeos/ash/components/kcer/kcer_notifier_net.cc index 4181621..7cadd54e 100644 --- a/ash/components/kcer/kcer_notifier_net.cc +++ b/chromeos/ash/components/kcer/kcer_notifier_net.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer_notifier_net.h" +#include "chromeos/ash/components/kcer/kcer_notifier_net.h" #include "base/callback_list.h"
diff --git a/ash/components/kcer/kcer_notifier_net.h b/chromeos/ash/components/kcer/kcer_notifier_net.h similarity index 85% rename from ash/components/kcer/kcer_notifier_net.h rename to chromeos/ash/components/kcer/kcer_notifier_net.h index c4f033dd..2f310c4 100644 --- a/ash/components/kcer/kcer_notifier_net.h +++ b/chromeos/ash/components/kcer/kcer_notifier_net.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_ -#define ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_ #include "base/callback_list.h" #include "net/cert/cert_database.h" @@ -35,4 +35,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_NOTIFIER_NET_H_
diff --git a/ash/components/kcer/kcer_nss/DEPS b/chromeos/ash/components/kcer/kcer_nss/DEPS similarity index 100% rename from ash/components/kcer/kcer_nss/DEPS rename to chromeos/ash/components/kcer/kcer_nss/DEPS
diff --git a/ash/components/kcer/kcer_nss/README.md b/chromeos/ash/components/kcer/kcer_nss/README.md similarity index 100% rename from ash/components/kcer/kcer_nss/README.md rename to chromeos/ash/components/kcer/kcer_nss/README.md
diff --git a/ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc b/chromeos/ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc similarity index 99% rename from ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc rename to chromeos/ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc index 33d0837..34d1b8f 100644 --- a/ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc +++ b/chromeos/ash/components/kcer/kcer_nss/kcer_nss_fuzzer.cc
@@ -6,10 +6,6 @@ #include <stddef.h> #include <stdint.h> -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_impl.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/base64.h" #include "base/check_is_test.h" #include "base/command_line.h" @@ -22,6 +18,10 @@ #include "base/test/allow_check_is_test_for_testing.h" #include "base/test/test_future.h" #include "base/test/test_timeouts.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h"
diff --git a/ash/components/kcer/kcer_nss/kcer_nss_unittest.cc b/chromeos/ash/components/kcer/kcer_nss/kcer_nss_unittest.cc similarity index 99% rename from ash/components/kcer/kcer_nss/kcer_nss_unittest.cc rename to chromeos/ash/components/kcer/kcer_nss/kcer_nss_unittest.cc index 6b9e8f6f..8f72ea8 100644 --- a/ash/components/kcer/kcer_nss/kcer_nss_unittest.cc +++ b/chromeos/ash/components/kcer/kcer_nss/kcer_nss_unittest.cc
@@ -8,13 +8,6 @@ #include <string> #include <vector> -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_histograms.h" -#include "ash/components/kcer/kcer_impl.h" -#include "ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" -#include "ash/components/kcer/kcer_token_utils.h" #include "base/base64.h" #include "base/files/file_util.h" #include "base/memory/raw_ref.h" @@ -23,6 +16,13 @@ #include "base/test/gmock_move_support.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" +#include "chromeos/ash/components/kcer/kcer_token_utils.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/test/browser_task_environment.h"
diff --git a/ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc b/chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc similarity index 98% rename from ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc rename to chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc index fd943a6..ae191c0 100644 --- a/ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc +++ b/chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" +#include "chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" #include <certdb.h> #include <keythi.h> @@ -21,14 +21,6 @@ #include <string_view> #include <vector> -#include "ash/components/kcer/cert_cache.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/helpers/key_helper.h" -#include "ash/components/kcer/helpers/pkcs12_validator.h" -#include "ash/components/kcer/kcer_histograms.h" -#include "ash/components/kcer/kcer_token.h" -#include "ash/components/kcer/kcer_utils.h" -#include "ash/components/kcer/key_permissions.pb.h" #include "base/check_is_test.h" #include "base/compiler_specific.h" #include "base/functional/callback.h" @@ -38,6 +30,14 @@ #include "base/task/thread_pool.h" #include "build/chromeos_buildflags.h" #include "chromeos/ash/components/chaps_util/chaps_util.h" +#include "chromeos/ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_validator.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" +#include "chromeos/ash/components/kcer/kcer_token.h" +#include "chromeos/ash/components/kcer/kcer_utils.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "crypto/nss_key_util.h"
diff --git a/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h b/chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h similarity index 93% rename from ash/components/kcer/kcer_nss/kcer_token_impl_nss.h rename to chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h index 882da6f..a2439ec4 100644 --- a/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h +++ b/chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_ -#define ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_ #include <stdint.h> @@ -11,14 +11,14 @@ #include <string> #include <vector> -#include "ash/components/kcer/cert_cache.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" -#include "ash/components/kcer/kcer_token.h" -#include "ash/components/kcer/kcer_token_utils.h" #include "base/component_export.h" #include "base/memory/weak_ptr.h" #include "base/types/strong_alias.h" +#include "chromeos/ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/kcer_token.h" +#include "chromeos/ash/components/kcer/kcer_token_utils.h" #include "crypto/scoped_nss_types.h" #include "net/cert/cert_database.h" #include "net/cert/scoped_nss_types.h" @@ -186,4 +186,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_KCER_TOKEN_IMPL_NSS_H_
diff --git a/ash/components/kcer/kcer_nss/test_utils.cc b/chromeos/ash/components/kcer/kcer_nss/test_utils.cc similarity index 98% rename from ash/components/kcer/kcer_nss/test_utils.cc rename to chromeos/ash/components/kcer/kcer_nss/test_utils.cc index 9b157805..583e6d5 100644 --- a/ash/components/kcer/kcer_nss/test_utils.cc +++ b/chromeos/ash/components/kcer/kcer_nss/test_utils.cc
@@ -2,11 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer_nss/test_utils.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include <pk11pub.h> -#include "ash/components/kcer/kcer_token.h" #include "base/files/file_path.h" #include "base/files/file_util.h" #include "base/functional/bind.h" @@ -14,6 +13,7 @@ #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/kcer_token.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "crypto/signature_verifier.h"
diff --git a/ash/components/kcer/kcer_nss/test_utils.h b/chromeos/ash/components/kcer/kcer_nss/test_utils.h similarity index 92% rename from ash/components/kcer/kcer_nss/test_utils.h rename to chromeos/ash/components/kcer/kcer_nss/test_utils.h index fd18ff3..d4af12d8 100644 --- a/ash/components/kcer/kcer_nss/test_utils.h +++ b/chromeos/ash/components/kcer/kcer_nss/test_utils.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_ -#define ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_ #include <stdint.h> @@ -11,13 +11,13 @@ #include <optional> #include <vector> -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_impl.h" -#include "ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" -#include "ash/components/kcer/key_permissions.pb.h" #include "base/containers/span.h" #include "base/files/file_path.h" #include "base/memory/weak_ptr.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_impl.h" +#include "chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "crypto/scoped_test_nss_db.h" #include "net/test/cert_builder.h" @@ -150,4 +150,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_NSS_TEST_UTILS_H_
diff --git a/ash/components/kcer/kcer_token.cc b/chromeos/ash/components/kcer/kcer_token.cc similarity index 69% rename from ash/components/kcer/kcer_token.cc rename to chromeos/ash/components/kcer/kcer_token.cc index 4f53024..ff3ff1ef 100644 --- a/ash/components/kcer/kcer_token.cc +++ b/chromeos/ash/components/kcer/kcer_token.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer_token.h" +#include "chromeos/ash/components/kcer/kcer_token.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" -#include "ash/components/kcer/kcer_token_impl.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer_nss/kcer_token_impl_nss.h" +#include "chromeos/ash/components/kcer/kcer_token_impl.h" namespace kcer::internal {
diff --git a/ash/components/kcer/kcer_token.h b/chromeos/ash/components/kcer/kcer_token.h similarity index 92% rename from ash/components/kcer/kcer_token.h rename to chromeos/ash/components/kcer/kcer_token.h index 3c73ab21..fdce27e 100644 --- a/ash/components/kcer/kcer_token.h +++ b/chromeos/ash/components/kcer/kcer_token.h
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_TOKEN_H_ -#define ASH_COMPONENTS_KCER_KCER_TOKEN_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_H_ #include <string> #include <vector> -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/key_permissions.pb.h" #include "base/functional/callback.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/key_permissions.pb.h" #include "crypto/scoped_nss_types.h" namespace kcer::internal { @@ -114,4 +114,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_TOKEN_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_H_
diff --git a/ash/components/kcer/kcer_token_impl.cc b/chromeos/ash/components/kcer/kcer_token_impl.cc similarity index 99% rename from ash/components/kcer/kcer_token_impl.cc rename to chromeos/ash/components/kcer/kcer_token_impl.cc index 3c716ce..f4deca5 100644 --- a/ash/components/kcer/kcer_token_impl.cc +++ b/chromeos/ash/components/kcer/kcer_token_impl.cc
@@ -7,7 +7,7 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/kcer_token_impl.h" +#include "chromeos/ash/components/kcer/kcer_token_impl.h" #include <stdint.h> @@ -15,17 +15,17 @@ #include <utility> #include <vector> -#include "ash/components/kcer/attributes.pb.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/helpers/key_helper.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" -#include "ash/components/kcer/helpers/pkcs12_validator.h" -#include "ash/components/kcer/kcer_token_utils.h" -#include "ash/components/kcer/kcer_utils.h" #include "base/hash/sha1.h" #include "base/logging.h" #include "base/task/thread_pool.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_validator.h" +#include "chromeos/ash/components/kcer/kcer_token_utils.h" +#include "chromeos/ash/components/kcer/kcer_utils.h" #include "chromeos/constants/pkcs11_definitions.h" #include "content/public/browser/browser_thread.h" #include "crypto/openssl_util.h"
diff --git a/ash/components/kcer/kcer_token_impl.h b/chromeos/ash/components/kcer/kcer_token_impl.h similarity index 96% rename from ash/components/kcer/kcer_token_impl.h rename to chromeos/ash/components/kcer/kcer_token_impl.h index 9504c0a..01f83f4 100644 --- a/ash/components/kcer/kcer_token_impl.h +++ b/chromeos/ash/components/kcer/kcer_token_impl.h
@@ -2,25 +2,25 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_ -#define ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_ #include <stdint.h> #include <deque> #include <string> -#include "ash/components/kcer/attributes.pb.h" -#include "ash/components/kcer/cert_cache.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" -#include "ash/components/kcer/kcer_token.h" -#include "ash/components/kcer/kcer_token_utils.h" #include "base/component_export.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" +#include "chromeos/ash/components/kcer/cert_cache.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/kcer_token.h" +#include "chromeos/ash/components/kcer/kcer_token_utils.h" #include "net/cert/cert_database.h" namespace kcer::internal { @@ -497,4 +497,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_IMPL_H_
diff --git a/ash/components/kcer/kcer_token_impl_unittest.cc b/chromeos/ash/components/kcer/kcer_token_impl_unittest.cc similarity index 99% rename from ash/components/kcer/kcer_token_impl_unittest.cc rename to chromeos/ash/components/kcer/kcer_token_impl_unittest.cc index eb05499..a5cccbcc0 100644 --- a/ash/components/kcer/kcer_token_impl_unittest.cc +++ b/chromeos/ash/components/kcer/kcer_token_impl_unittest.cc
@@ -7,16 +7,16 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/kcer_token_impl.h" +#include "chromeos/ash/components/kcer/kcer_token_impl.h" #include <string_view> -#include "ash/components/kcer/chaps/mock_high_level_chaps_client.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/base64.h" #include "base/test/gmock_callback_support.h" #include "base/test/gmock_move_support.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/chaps/mock_high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "content/public/test/browser_task_environment.h" #include "net/cert/cert_database.h" #include "net/cert/x509_util.h"
diff --git a/ash/components/kcer/kcer_token_utils.cc b/chromeos/ash/components/kcer/kcer_token_utils.cc similarity index 99% rename from ash/components/kcer/kcer_token_utils.cc rename to chromeos/ash/components/kcer/kcer_token_utils.cc index ed168e6..97020ad4 100644 --- a/ash/components/kcer/kcer_token_utils.cc +++ b/chromeos/ash/components/kcer/kcer_token_utils.cc
@@ -7,12 +7,12 @@ #pragma allow_unsafe_buffers #endif -#include "ash/components/kcer/kcer_token_utils.h" +#include "chromeos/ash/components/kcer/kcer_token_utils.h" -#include "ash/components/kcer/helpers/key_helper.h" -#include "ash/components/kcer/kcer_histograms.h" #include "base/functional/callback_helpers.h" #include "base/hash/sha1.h" +#include "chromeos/ash/components/kcer/helpers/key_helper.h" +#include "chromeos/ash/components/kcer/kcer_histograms.h" #include "content/public/browser/browser_thread.h" #include "crypto/openssl_util.h"
diff --git a/ash/components/kcer/kcer_token_utils.h b/chromeos/ash/components/kcer/kcer_token_utils.h similarity index 93% rename from ash/components/kcer/kcer_token_utils.h rename to chromeos/ash/components/kcer/kcer_token_utils.h index e5f75df..5d52d9a 100644 --- a/ash/components/kcer/kcer_token_utils.h +++ b/chromeos/ash/components/kcer/kcer_token_utils.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_ -#define ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_ -#include "ash/components/kcer/attributes.pb.h" -#include "ash/components/kcer/chaps/high_level_chaps_client.h" -#include "ash/components/kcer/chaps/session_chaps_client.h" -#include "ash/components/kcer/helpers/pkcs12_reader.h" -#include "ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/attributes.pb.h" +#include "chromeos/ash/components/kcer/chaps/high_level_chaps_client.h" +#include "chromeos/ash/components/kcer/chaps/session_chaps_client.h" +#include "chromeos/ash/components/kcer/helpers/pkcs12_reader.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer::internal { @@ -181,4 +181,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_TOKEN_UTILS_H_
diff --git a/ash/components/kcer/kcer_utils.cc b/chromeos/ash/components/kcer/kcer_utils.cc similarity index 94% rename from ash/components/kcer/kcer_utils.cc rename to chromeos/ash/components/kcer/kcer_utils.cc index 517a338..7c9efe3 100644 --- a/ash/components/kcer/kcer_utils.cc +++ b/chromeos/ash/components/kcer/kcer_utils.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/kcer_utils.h" +#include "chromeos/ash/components/kcer/kcer_utils.h" -#include "ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer {
diff --git a/ash/components/kcer/kcer_utils.h b/chromeos/ash/components/kcer/kcer_utils.h similarity index 69% rename from ash/components/kcer/kcer_utils.h rename to chromeos/ash/components/kcer/kcer_utils.h index 5a23c1a..9f3e7852 100644 --- a/ash/components/kcer/kcer_utils.h +++ b/chromeos/ash/components/kcer/kcer_utils.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_KCER_UTILS_H_ -#define ASH_COMPONENTS_KCER_KCER_UTILS_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_KCER_UTILS_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_KCER_UTILS_H_ -#include "ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer { @@ -16,4 +16,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_KCER_UTILS_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_KCER_UTILS_H_
diff --git a/ash/components/kcer/ssl_private_key_kcer.cc b/chromeos/ash/components/kcer/ssl_private_key_kcer.cc similarity index 96% rename from ash/components/kcer/ssl_private_key_kcer.cc rename to chromeos/ash/components/kcer/ssl_private_key_kcer.cc index 1eb2000..5f217ff 100644 --- a/ash/components/kcer/ssl_private_key_kcer.cc +++ b/chromeos/ash/components/kcer/ssl_private_key_kcer.cc
@@ -2,19 +2,19 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/ssl_private_key_kcer.h" +#include "chromeos/ash/components/kcer/ssl_private_key_kcer.h" #include <prerror.h> #include <stdint.h> #include <string> -#include "ash/components/kcer/kcer.h" #include "base/containers/flat_set.h" #include "base/containers/span.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/strings/stringprintf.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/ssl/ssl_private_key.h" #include "third_party/boringssl/src/include/openssl/evp.h"
diff --git a/ash/components/kcer/ssl_private_key_kcer.h b/chromeos/ash/components/kcer/ssl_private_key_kcer.h similarity index 86% rename from ash/components/kcer/ssl_private_key_kcer.h rename to chromeos/ash/components/kcer/ssl_private_key_kcer.h index bfc21d8b..16c57da9 100644 --- a/ash/components/kcer/ssl_private_key_kcer.h +++ b/chromeos/ash/components/kcer/ssl_private_key_kcer.h
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_ -#define ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_ #include <stdint.h> #include <string> -#include "ash/components/kcer/kcer.h" #include "base/containers/flat_set.h" #include "base/containers/span.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" +#include "chromeos/ash/components/kcer/kcer.h" #include "net/ssl/ssl_private_key.h" namespace kcer { @@ -51,4 +51,4 @@ } // namespace kcer -#endif // ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_SSL_PRIVATE_KEY_KCER_H_
diff --git a/ash/components/kcer/ssl_private_key_kcer_unittest.cc b/chromeos/ash/components/kcer/ssl_private_key_kcer_unittest.cc similarity index 95% rename from ash/components/kcer/ssl_private_key_kcer_unittest.cc rename to chromeos/ash/components/kcer/ssl_private_key_kcer_unittest.cc index 76a82d50..b34dda7 100644 --- a/ash/components/kcer/ssl_private_key_kcer_unittest.cc +++ b/chromeos/ash/components/kcer/ssl_private_key_kcer_unittest.cc
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/ssl_private_key_kcer.h" +#include "chromeos/ash/components/kcer/ssl_private_key_kcer.h" -#include "ash/components/kcer/kcer.h" -#include "ash/components/kcer/kcer_nss/test_utils.h" #include "base/test/test_future.h" +#include "chromeos/ash/components/kcer/kcer.h" +#include "chromeos/ash/components/kcer/kcer_nss/test_utils.h" #include "content/public/test/browser_task_environment.h" #include "crypto/scoped_test_nss_db.h" #include "net/test/test_data_directory.h"
diff --git a/ash/components/kcer/token_key_finder.cc b/chromeos/ash/components/kcer/token_key_finder.cc similarity index 95% rename from ash/components/kcer/token_key_finder.cc rename to chromeos/ash/components/kcer/token_key_finder.cc index 9f96c96..d9628bb 100644 --- a/ash/components/kcer/token_key_finder.cc +++ b/chromeos/ash/components/kcer/token_key_finder.cc
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/token_key_finder.h" +#include "chromeos/ash/components/kcer/token_key_finder.h" #include <optional> -#include "ash/components/kcer/kcer.h" #include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/types/expected.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer::internal {
diff --git a/ash/components/kcer/token_key_finder.h b/chromeos/ash/components/kcer/token_key_finder.h similarity index 89% rename from ash/components/kcer/token_key_finder.h rename to chromeos/ash/components/kcer/token_key_finder.h index e9348be6..79da6a7 100644 --- a/ash/components/kcer/token_key_finder.h +++ b/chromeos/ash/components/kcer/token_key_finder.h
@@ -2,18 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_ -#define ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_ #include <optional> -#include "ash/components/kcer/kcer.h" #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/types/expected.h" #include "base/types/pass_key.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer::internal { @@ -60,4 +60,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_KEY_FINDER_H_
diff --git a/ash/components/kcer/token_key_finder_unittest.cc b/chromeos/ash/components/kcer/token_key_finder_unittest.cc similarity index 99% rename from ash/components/kcer/token_key_finder_unittest.cc rename to chromeos/ash/components/kcer/token_key_finder_unittest.cc index b00532f..75550434 100644 --- a/ash/components/kcer/token_key_finder_unittest.cc +++ b/chromeos/ash/components/kcer/token_key_finder_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/token_key_finder.h" +#include "chromeos/ash/components/kcer/token_key_finder.h" #include "base/test/task_environment.h" #include "base/test/test_future.h"
diff --git a/ash/components/kcer/token_results_merger.h b/chromeos/ash/components/kcer/token_results_merger.h similarity index 94% rename from ash/components/kcer/token_results_merger.h rename to chromeos/ash/components/kcer/token_results_merger.h index 691710c..7f71a03 100644 --- a/ash/components/kcer/token_results_merger.h +++ b/chromeos/ash/components/kcer/token_results_merger.h
@@ -2,13 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_ -#define ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_ +#ifndef CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_ +#define CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_ #include <type_traits> #include <vector> -#include "ash/components/kcer/kcer.h" #include "base/containers/contains.h" #include "base/containers/flat_map.h" #include "base/functional/callback.h" @@ -16,6 +15,7 @@ #include "base/memory/scoped_refptr.h" #include "base/types/expected.h" #include "base/types/pass_key.h" +#include "chromeos/ash/components/kcer/kcer.h" namespace kcer::internal { @@ -124,4 +124,4 @@ } // namespace kcer::internal -#endif // ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_ +#endif // CHROMEOS_ASH_COMPONENTS_KCER_TOKEN_RESULTS_MERGER_H_
diff --git a/ash/components/kcer/token_results_merger_unittest.cc b/chromeos/ash/components/kcer/token_results_merger_unittest.cc similarity index 98% rename from ash/components/kcer/token_results_merger_unittest.cc rename to chromeos/ash/components/kcer/token_results_merger_unittest.cc index 1137df6..830687d6 100644 --- a/ash/components/kcer/token_results_merger_unittest.cc +++ b/chromeos/ash/components/kcer/token_results_merger_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "ash/components/kcer/token_results_merger.h" +#include "chromeos/ash/components/kcer/token_results_merger.h" #include "base/containers/flat_map.h" #include "base/memory/scoped_refptr.h"
diff --git a/chromeos/ash/services/ime/public/mojom/user_data_japanese_dictionary.mojom b/chromeos/ash/services/ime/public/mojom/user_data_japanese_dictionary.mojom index 0ccc83b..e00b9df 100644 --- a/chromeos/ash/services/ime/public/mojom/user_data_japanese_dictionary.mojom +++ b/chromeos/ash/services/ime/public/mojom/user_data_japanese_dictionary.mojom
@@ -4,6 +4,7 @@ module ash.ime.mojom; +// LINT.IfChange(JpPosType) enum JpPosType { kNoPos = 0, // "品詞なし" kNoun = 1, // "名詞" @@ -51,6 +52,7 @@ kFreeStandingWord = 43, // "独立語" kSuppressionWord = 44, // "抑制単語" }; +// LINT.ThenChange(//chrome/browser/resources/ash/settings/os_languages_page/os_japanese_dictionary_entry_row.html:JpPosType) struct JapaneseDictionaryEntry { // The string tyat is typed in order to display the custom suggestion.
diff --git a/chromeos/components/BUILD.gn b/chromeos/components/BUILD.gn index e954363..96c275b 100644 --- a/chromeos/components/BUILD.gn +++ b/chromeos/components/BUILD.gn
@@ -16,7 +16,6 @@ ] deps = [ - "//ash/components/kcer:unit_tests", "//base", "//base/test:test_support", "//build:chromeos_buildflags",
diff --git a/chromeos/constants/OWNERS b/chromeos/constants/OWNERS index 077e3e0..e1a0f07 100644 --- a/chromeos/constants/OWNERS +++ b/chromeos/constants/OWNERS
@@ -5,4 +5,4 @@ per-file chromeos_features.h=* per-file chromeos_switches.cc=* per-file chromeos_switches.h=* -per-file pkcs11_definitions.h=file://ash/components/kcer/OWNERS +per-file pkcs11_definitions.h=file://chromeos/ash/components/kcer/OWNERS
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index bf6fcc63..b1f21a79 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -171,9 +171,6 @@ BASE_FEATURE(kMahiManaged, "MahiManaged", base::FEATURE_ENABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_CHROMEOS_ASH) -// Controls enabling / disabling the sparky feature. -BASE_FEATURE(kSparky, "Sparky", base::FEATURE_DISABLED_BY_DEFAULT); - // Controls enabling / disabling the mahi debugging. BASE_FEATURE(kMahiDebugging, "MahiDebugging", @@ -458,15 +455,12 @@ return base::FeatureList::IsEnabled(kJelly); } -// Sparkly depends on Mahi, so we turn on Mahi if the sparky flag is enabled. -// Sparky doesn't work on LACROS so that case is ignored. bool IsMahiEnabled() { #if BUILDFLAG(IS_CHROMEOS_LACROS) return chromeos::BrowserParamsProxy::Get()->IsMahiEnabled(); #else - return (base::FeatureList::IsEnabled(kMahi) && - base::FeatureList::IsEnabled(kFeatureManagementMahi)) || - base::FeatureList::IsEnabled(kSparky); + return base::FeatureList::IsEnabled(kMahi) && + base::FeatureList::IsEnabled(kFeatureManagementMahi); #endif } @@ -487,10 +481,6 @@ #endif } -bool IsSparkyEnabled() { - return base::FeatureList::IsEnabled(kSparky); -} - bool IsMahiDebuggingEnabled() { return base::FeatureList::IsEnabled(kMahiDebugging); }
diff --git a/chromeos/constants/chromeos_features.h b/chromeos/constants/chromeos_features.h index c7348bc..a4c36af 100644 --- a/chromeos/constants/chromeos_features.h +++ b/chromeos/constants/chromeos_features.h
@@ -69,7 +69,6 @@ COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kMahiPanelResizable); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kMahiSendingUrl); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kMahiManaged); -COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kSparky); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kPompano); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) BASE_DECLARE_FEATURE(kMahiSummarizeSelected); @@ -188,7 +187,6 @@ bool IsQuickAnswersAlwaysTriggerForSingleWord(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsQuickShareV2Enabled(); -COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsSparkyEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsPkcs12ToChapsDualWriteEnabled(); COMPONENT_EXPORT(CHROMEOS_CONSTANTS) bool IsUploadOfficeToCloudEnabled();
diff --git a/chromeos/crosapi/mojom/BUILD.gn b/chromeos/crosapi/mojom/BUILD.gn index 65e4c14..d12f103 100644 --- a/chromeos/crosapi/mojom/BUILD.gn +++ b/chromeos/crosapi/mojom/BUILD.gn
@@ -15,7 +15,6 @@ "authentication.mojom", "automation.mojom", "bitmap.mojom", - "browser_app_instance_registry.mojom", "cec_private.mojom", "cert_database.mojom", "cert_provisioning.mojom", @@ -284,7 +283,6 @@ ] traits_headers = [ "//chromeos/crosapi/mojom/app_service_types_mojom_traits.h", - "//chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.h", "//chromeos/crosapi/mojom/cert_database_mojom_traits.h", "//chromeos/crosapi/mojom/desk_mojom_traits.h", "//chromeos/crosapi/mojom/desk_template_mojom_traits.h", @@ -303,7 +301,6 @@ ] traits_sources = [ "//chromeos/crosapi/mojom/app_service_types_mojom_traits.cc", - "//chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.cc", "//chromeos/crosapi/mojom/cert_database_mojom_traits.cc", "//chromeos/crosapi/mojom/desk_mojom_traits.cc", "//chromeos/crosapi/mojom/desk_template_mojom_traits.cc",
diff --git a/chromeos/crosapi/mojom/browser_app_instance_registry.mojom b/chromeos/crosapi/mojom/browser_app_instance_registry.mojom deleted file mode 100644 index c8d9338f..0000000 --- a/chromeos/crosapi/mojom/browser_app_instance_registry.mojom +++ /dev/null
@@ -1,125 +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. -// -// Next MinVersion: 4 - -module crosapi.mojom; - -import "mojo/public/mojom/base/unguessable_token.mojom"; - -// Represents an update to an instance of a tabbed Chrome browser window. -struct BrowserWindowInstanceUpdate { - // Instance ID generated in lacros-chrome. - mojo_base.mojom.UnguessableToken id@0; - - // Wayland ID of the browser's Aura window. - string window_id@1; - - // Browser window is currently activated. - bool is_active@2; - - // Unique session id for the browser's window from the current browser - // session. - [MinVersion=2] - uint32 browser_session_id@3; - - // Unique restored session id for the browser's window from the restored - // browser session. - [MinVersion=2] - uint32 restored_browser_session_id@4; - - // Whether the browser window is an incognito window. - [MinVersion=3] - bool is_incognito@5; - - // Unique lacros profile id for the profile browser belongs to. - [MinVersion=4] - uint64 lacros_profile_id@6; -}; - -[Extensible] -enum BrowserAppInstanceType { - kAppTab, - kAppWindow, -}; - -// Represents an update to an instance of an app running in WebContents (either -// an app window or a tab). -struct BrowserAppInstanceUpdate { - // Instance ID generated in lacros-chrome. - mojo_base.mojom.UnguessableToken id@0; - - // Indicates if it's a tab in a browser or a standalone window. - BrowserAppInstanceType type@1; - - // App ID. - string app_id@2; - - // Wayland ID of the browser's Aura window. It may change for apps of type - // kAppTab, and stays the same for instances of type kAppWindow. - string window_id@3; - - // Current title of this instance's WebContents. - string title@4; - - // The browser hosting this instance's WebContents is currently activated. - bool is_browser_active@5; - - // The instance's WebContents is the active tab in the browser's tab strip. - // May change for apps of type kAppTab, stays the same (true) for instances - // of type kAppWindow. - bool is_web_contents_active@6; - - // Unique session id for the browser's window from the current browser - // session. - [MinVersion=2] - uint32 browser_session_id@7; - - // Unique restored session id for the browser's window from the restored - // browser session. - [MinVersion=2] - uint32 restored_browser_session_id@8; -}; - -// Implemented in ash-chrome, and is used to receive browser app instance -// events from lacros-chrome. -[Uuid="c29f078d-8d82-4f65-bce0-18f047b1ea31"] -interface BrowserAppInstanceRegistry { - // Called by lacros-chrome when when a new browser window is created. - OnBrowserWindowAdded@0(BrowserWindowInstanceUpdate update); - - // Called when a browser window is updated. - OnBrowserWindowUpdated@1(BrowserWindowInstanceUpdate update); - - // Called when a browser window is closed. - OnBrowserWindowRemoved@2(BrowserWindowInstanceUpdate update); - - // Called by lacros-chrome when a new browser-based app instance is created - // in Lacros. - OnBrowserAppAdded@3(BrowserAppInstanceUpdate update); - - // Called by lacros-chrome when any attributes in a Lacros browser-based app - // instance are updated. - OnBrowserAppUpdated@4(BrowserAppInstanceUpdate update); - - // Called by lacros-chrome browser-based app instance is terminated. - OnBrowserAppRemoved@5(BrowserAppInstanceUpdate update); - - // Binds the BrowserAppInstanceController interface, which allows the - // BrowserAppInstanceRegistry implemented in ash-chrome to communicate with - // its controller which is implemented in lacros-chrome. - [MinVersion=1] - RegisterController@6( - pending_remote<BrowserAppInstanceController> controller); -}; - -// Implemented in lacros-chrome, and is used to perform actions on instances -// that live in lacros-chrome from ash-chrome. -[Uuid="5058756a-9826-4276-abff-f2a84b9386b9"] -interface BrowserAppInstanceController { - // Activate the tab for the given instance ID in lacros-chrome. If the - // instance being referenced is not a tab instance, does nothing. - [MinVersion=1] - ActivateTabInstance@0(mojo_base.mojom.UnguessableToken id); -}; \ No newline at end of file
diff --git a/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.cc b/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.cc deleted file mode 100644 index 24194a4d..0000000 --- a/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.cc +++ /dev/null
@@ -1,70 +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. - -#include "chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.h" - -namespace mojo { - -bool StructTraits<crosapi::mojom::BrowserWindowInstanceUpdateDataView, - apps::BrowserWindowInstanceUpdate>:: - Read(crosapi::mojom::BrowserWindowInstanceUpdateDataView input, - apps::BrowserWindowInstanceUpdate* output) { - apps::BrowserWindowInstanceUpdate update; - if (input.ReadId(&update.id) && input.ReadWindowId(&update.window_id)) { - update.is_active = input.is_active(); - update.browser_session_id = input.browser_session_id(); - update.restored_browser_session_id = input.restored_browser_session_id(); - update.is_incognito = input.is_incognito(); - update.lacros_profile_id = input.lacros_profile_id(); - *output = std::move(update); - return true; - } - return false; -} - -bool StructTraits<crosapi::mojom::BrowserAppInstanceUpdateDataView, - apps::BrowserAppInstanceUpdate>:: - Read(crosapi::mojom::BrowserAppInstanceUpdateDataView input, - apps::BrowserAppInstanceUpdate* output) { - apps::BrowserAppInstanceUpdate update; - if (input.ReadId(&update.id) && input.ReadType(&update.type) && - input.ReadAppId(&update.app_id) && - input.ReadWindowId(&update.window_id) && input.ReadTitle(&update.title)) { - update.is_browser_active = input.is_browser_active(); - update.is_web_contents_active = input.is_web_contents_active(); - update.browser_session_id = input.browser_session_id(); - update.restored_browser_session_id = input.restored_browser_session_id(); - *output = std::move(update); - return true; - } - return false; -} - -crosapi::mojom::BrowserAppInstanceType -EnumTraits<crosapi::mojom::BrowserAppInstanceType, - apps::BrowserAppInstanceUpdate::Type>:: - ToMojom(apps::BrowserAppInstanceUpdate::Type input) { - switch (input) { - case apps::BrowserAppInstanceUpdate::Type::kAppTab: - return crosapi::mojom::BrowserAppInstanceType::kAppTab; - case apps::BrowserAppInstanceUpdate::Type::kAppWindow: - return crosapi::mojom::BrowserAppInstanceType::kAppWindow; - } -} - -bool EnumTraits<crosapi::mojom::BrowserAppInstanceType, - apps::BrowserAppInstanceUpdate::Type>:: - FromMojom(crosapi::mojom::BrowserAppInstanceType input, - apps::BrowserAppInstanceUpdate::Type* output) { - switch (input) { - case crosapi::mojom::BrowserAppInstanceType::kAppTab: - *output = apps::BrowserAppInstanceUpdate::Type::kAppTab; - return true; - case crosapi::mojom::BrowserAppInstanceType::kAppWindow: - *output = apps::BrowserAppInstanceUpdate::Type::kAppWindow; - return true; - } -} - -} // namespace mojo
diff --git a/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.h b/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.h deleted file mode 100644 index 7c2a17d..0000000 --- a/chromeos/crosapi/mojom/browser_app_instance_registry_mojom_traits.h +++ /dev/null
@@ -1,117 +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. - -#ifndef CHROMEOS_CROSAPI_MOJOM_BROWSER_APP_INSTANCE_REGISTRY_MOJOM_TRAITS_H_ -#define CHROMEOS_CROSAPI_MOJOM_BROWSER_APP_INSTANCE_REGISTRY_MOJOM_TRAITS_H_ - -#include "components/services/app_service/public/cpp/browser_app_instance_update.h" -#include "components/services/app_service/public/cpp/browser_window_instance_update.h" - -#include "chromeos/crosapi/mojom/browser_app_instance_registry.mojom.h" - -namespace mojo { - -template <> -struct StructTraits<crosapi::mojom::BrowserWindowInstanceUpdateDataView, - apps::BrowserWindowInstanceUpdate> { - static bool Read(crosapi::mojom::BrowserWindowInstanceUpdateDataView input, - apps::BrowserWindowInstanceUpdate* output); - - static const base::UnguessableToken& id( - const apps::BrowserWindowInstanceUpdate& update) { - return update.id; - } - - static const std::string& window_id( - const apps::BrowserWindowInstanceUpdate& update) { - return update.window_id; - } - - static bool is_active(const apps::BrowserWindowInstanceUpdate& update) { - return update.is_active; - } - - static uint32_t browser_session_id( - const apps::BrowserWindowInstanceUpdate& update) { - return update.browser_session_id; - } - - static uint32_t restored_browser_session_id( - const apps::BrowserWindowInstanceUpdate& update) { - return update.restored_browser_session_id; - } - - static bool is_incognito(const apps::BrowserWindowInstanceUpdate& update) { - return update.is_incognito; - } - - static uint64_t lacros_profile_id( - const apps::BrowserWindowInstanceUpdate& update) { - return update.lacros_profile_id; - } -}; - -template <> -struct StructTraits<crosapi::mojom::BrowserAppInstanceUpdateDataView, - apps::BrowserAppInstanceUpdate> { - static bool Read(crosapi::mojom::BrowserAppInstanceUpdateDataView input, - apps::BrowserAppInstanceUpdate* output); - - static const base::UnguessableToken& id( - const apps::BrowserAppInstanceUpdate& update) { - return update.id; - } - - static apps::BrowserAppInstanceUpdate::Type type( - const apps::BrowserAppInstanceUpdate& update) { - return update.type; - } - - static const std::string& app_id( - const apps::BrowserAppInstanceUpdate& update) { - return update.app_id; - } - - static const std::string& window_id( - const apps::BrowserAppInstanceUpdate& update) { - return update.window_id; - } - - static const std::string& title( - const apps::BrowserAppInstanceUpdate& update) { - return update.title; - } - - static bool is_browser_active(const apps::BrowserAppInstanceUpdate& update) { - return update.is_browser_active; - } - - static bool is_web_contents_active( - const apps::BrowserAppInstanceUpdate& update) { - return update.is_web_contents_active; - } - - static uint32_t browser_session_id( - const apps::BrowserAppInstanceUpdate& update) { - return update.browser_session_id; - } - - static uint32_t restored_browser_session_id( - const apps::BrowserAppInstanceUpdate& update) { - return update.restored_browser_session_id; - } -}; - -template <> -struct EnumTraits<crosapi::mojom::BrowserAppInstanceType, - apps::BrowserAppInstanceUpdate::Type> { - static crosapi::mojom::BrowserAppInstanceType ToMojom( - apps::BrowserAppInstanceUpdate::Type input); - static bool FromMojom(crosapi::mojom::BrowserAppInstanceType input, - apps::BrowserAppInstanceUpdate::Type* output); -}; - -} // namespace mojo - -#endif // CHROMEOS_CROSAPI_MOJOM_BROWSER_APP_INSTANCE_REGISTRY_MOJOM_TRAITS_H_
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index 23e410bb..ca3c3010 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -14,7 +14,6 @@ import "chromeos/crosapi/mojom/audio_service.mojom"; import "chromeos/crosapi/mojom/authentication.mojom"; import "chromeos/crosapi/mojom/automation.mojom"; -import "chromeos/crosapi/mojom/browser_app_instance_registry.mojom"; import "chromeos/crosapi/mojom/guest_os_sk_forwarder.mojom"; import "chromeos/crosapi/mojom/cec_private.mojom"; import "chromeos/crosapi/mojom/cert_database.mojom";
diff --git a/chromeos/ui/frame/BUILD.gn b/chromeos/ui/frame/BUILD.gn index 71d5095..416c5ff 100644 --- a/chromeos/ui/frame/BUILD.gn +++ b/chromeos/ui/frame/BUILD.gn
@@ -115,7 +115,7 @@ ":frame", "//base", "//services/device/public/cpp:test_support", - "//services/network/public/cpp:cpp", + "//services/network/public/cpp", "//ui/aura", "//ui/aura:test_support", "//ui/gfx", @@ -135,7 +135,7 @@ ":frame", ":test_support", "//base/test:test_support", - "//chrome/browser/ui/chromeos:test_support", + "//chrome/browser/ui/ash:test_support", "//chrome/test:test_support", "//chrome/test:test_support_ui", "//chromeos/crosapi/mojom",
diff --git a/chromeos/ui/frame/DEPS b/chromeos/ui/frame/DEPS index 87eee20..1a6e43eb 100644 --- a/chromeos/ui/frame/DEPS +++ b/chromeos/ui/frame/DEPS
@@ -1,9 +1,6 @@ include_rules = [ - "+chrome/browser/ui/chromeos", - "+chrome/test/base", "+chromeos/strings/grit/chromeos_strings.h", "+components/user_manager", - "+content/public/test", "+third_party/skia", "+ui/aura", "+ui/base", @@ -19,3 +16,12 @@ "+ui/views", "+ui/wm/public", ] + + +specific_include_rules = { + ".*test.*": [ + "+chrome/browser/ui/ash/test_util.h", + "+chrome/test/base", + "+content/public/test", + ] +}
diff --git a/chromeos/ui/frame/non_client_frame_view_interactive_uitest.cc b/chromeos/ui/frame/non_client_frame_view_interactive_uitest.cc index 7ca3d290..6e45818 100644 --- a/chromeos/ui/frame/non_client_frame_view_interactive_uitest.cc +++ b/chromeos/ui/frame/non_client_frame_view_interactive_uitest.cc
@@ -3,7 +3,7 @@ // found in the LICENSE file. #include "base/test/run_until.h" -#include "chrome/browser/ui/chromeos/test_util.h" +#include "chrome/browser/ui/ash/test_util.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "chromeos/ui/base/window_properties.h"
diff --git a/clank b/clank index fd6b11c..8ee7d53 160000 --- a/clank +++ b/clank
@@ -1 +1 @@ -Subproject commit fd6b11c819ca76fb830452f1dc7b7021013b1a58 +Subproject commit 8ee7d533635c5f34802d39076064a0cb7cf8d03f
diff --git a/components/autofill/content/common/mojom/autofill_agent.mojom b/components/autofill/content/common/mojom/autofill_agent.mojom index 02b3f05..58c67ad 100644 --- a/components/autofill/content/common/mojom/autofill_agent.mojom +++ b/components/autofill/content/common/mojom/autofill_agent.mojom
@@ -135,7 +135,7 @@ // Informs that there are no saved credentials for filling. // This is the "no results" equivalent of SetPasswordFillData. - InformNoSavedCredentials(bool should_show_popup_without_passwords); + InformNoSavedCredentials(); // Fills the given `credential` into the last focused text input. FillIntoFocusedField(
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc index c84ba00..f6bc0d2 100644 --- a/components/autofill/content/renderer/password_autofill_agent.cc +++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1687,10 +1687,7 @@ "confirmation_password_element"); } -void PasswordAutofillAgent::InformNoSavedCredentials( - bool should_show_popup_without_passwords) { - should_show_popup_without_passwords_ = should_show_popup_without_passwords; - +void PasswordAutofillAgent::InformNoSavedCredentials() { autofilled_elements_cache_.clear(); // Clear the actual field values. @@ -1838,9 +1835,7 @@ if (!password_info) { MaybeCheckSafeBrowsingReputation(element); - if (!CanShowPopupWithoutPasswords(password_element)) { - return false; - } + return false; } if (!element.IsTextField() || !IsElementEditable(element)) { @@ -1974,7 +1969,6 @@ web_input_to_password_info_.clear(); password_to_username_.clear(); last_supplied_password_info_iter_ = web_input_to_password_info_.end(); - should_show_popup_without_passwords_ = false; field_data_manager().ClearData(); previewed_elements_.clear(); sent_request_to_store_ = false; @@ -2431,12 +2425,6 @@ all_autofilled_elements_.insert(field_id); } -bool PasswordAutofillAgent::CanShowPopupWithoutPasswords( - const WebInputElement& password_element) const { - return should_show_popup_without_passwords_ && password_element && - IsElementEditable(password_element); -} - bool PasswordAutofillAgent::IsPasswordFieldFilledByUser( const WebFormControlElement& element) const { FieldRendererId element_id = form_util::GetFieldRendererId(element);
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h index 295cf44..25ef93a5 100644 --- a/components/autofill/content/renderer/password_autofill_agent.h +++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -147,8 +147,7 @@ FieldRendererId password_element_id, const std::u16string& username, const std::u16string& password) override; - void InformNoSavedCredentials( - bool should_show_popup_without_passwords) override; + void InformNoSavedCredentials() override; void FillIntoFocusedField(bool is_password, const std::u16string& credential) override; void PreviewField(FieldRendererId field_id, @@ -575,9 +574,6 @@ void SetLastUpdatedFormAndField(const blink::WebFormElement& form, const blink::WebFormControlElement& input); - bool CanShowPopupWithoutPasswords( - const blink::WebInputElement& password_element) const; - // Returns true if the element is of type 'password' and has either user typed // input or input autofilled on user trigger. bool IsPasswordFieldFilledByUser( @@ -618,8 +614,6 @@ // Set of fields that are reliably identified as non-credential fields. base::flat_set<FieldRendererId> suggestion_banned_fields_; - bool should_show_popup_without_passwords_ = false; - PasswordValueGatekeeper gatekeeper_; // True indicates that user debug information should be logged.
diff --git a/components/autofill/core/browser/data_model/credit_card.cc b/components/autofill/core/browser/data_model/credit_card.cc index c069187..03d5185e 100644 --- a/components/autofill/core/browser/data_model/credit_card.cc +++ b/components/autofill/core/browser/data_model/credit_card.cc
@@ -301,7 +301,6 @@ case Suggestion::Icon::kDevice: case Suggestion::Icon::kEdit: case Suggestion::Icon::kEmail: - case Suggestion::Icon::kEmpty: case Suggestion::Icon::kError: case Suggestion::Icon::kGlobe: case Suggestion::Icon::kGoogle:
diff --git a/components/autofill/core/browser/filling/filling_product.cc b/components/autofill/core/browser/filling/filling_product.cc index 419993a..00ac1b6 100644 --- a/components/autofill/core/browser/filling/filling_product.cc +++ b/components/autofill/core/browser/filling/filling_product.cc
@@ -67,11 +67,7 @@ case SuggestionType::kPasswordEntry: case SuggestionType::kAllSavedPasswordsEntry: case SuggestionType::kGeneratePasswordEntry: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: case SuggestionType::kAccountStoragePasswordEntry: - case SuggestionType::kPasswordAccountStorageReSignin: - case SuggestionType::kPasswordAccountStorageEmpty: case SuggestionType::kWebauthnCredential: case SuggestionType::kWebauthnSignInWithAnotherDevice: case SuggestionType::kPasswordFieldByFieldFilling:
diff --git a/components/autofill/core/browser/form_import/addresses/address_profile_save_manager_unittest.cc b/components/autofill/core/browser/form_import/addresses/address_profile_save_manager_unittest.cc index 9a143d85..b27fe34d 100644 --- a/components/autofill/core/browser/form_import/addresses/address_profile_save_manager_unittest.cc +++ b/components/autofill/core/browser/form_import/addresses/address_profile_save_manager_unittest.cc
@@ -1454,8 +1454,7 @@ // Runs the suite as if: // - the phone number was (not) removed (relevant for UKM metrics). // - the imported profile contains information from an input with an -// unrecognized autocomplete attribute. Such fields are considered for import -// when `kAutofillImportFromAutocompleteUnrecognized` is active. +// unrecognized autocomplete attribute. This is needed to test some metrics. INSTANTIATE_TEST_SUITE_P(, AddressProfileSaveManagerTest, testing::Combine(testing::Bool(), testing::Bool()));
diff --git a/components/autofill/core/browser/form_import/form_data_importer.cc b/components/autofill/core/browser/form_import/form_data_importer.cc index d8755ca..f5e77d5a 100644 --- a/components/autofill/core/browser/form_import/form_data_importer.cc +++ b/components/autofill/core/browser/form_import/form_data_importer.cc
@@ -502,12 +502,6 @@ plus_address_delegate->MatchesPlusAddressFormat(value))) { continue; } - // Don't import from ac=unrecognized fields. - if (field->ShouldSuppressSuggestionsAndFillingByDefault() && - !base::FeatureList::IsEnabled( - features::kAutofillImportFromAutocompleteUnrecognized)) { - continue; - } FieldType field_type = field->Type().GetStorableType(); // Only address types are relevant in this function, other types are treated
diff --git a/components/autofill/core/browser/form_import/form_data_importer_unittest.cc b/components/autofill/core/browser/form_import/form_data_importer_unittest.cc index 95252eb..893d8b2 100644 --- a/components/autofill/core/browser/form_import/form_data_importer_unittest.cc +++ b/components/autofill/core/browser/form_import/form_data_importer_unittest.cc
@@ -3689,28 +3689,6 @@ EXPECT_FALSE(associations->last_credit_card_form_submitted); } -// Tests that ac=unrecognized fields have a prediction, but are not imported. -TEST_F(FormDataImporterTest, SkipAutocompleteUnrecognizedFields) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndDisableFeature( - features::kAutofillImportFromAutocompleteUnrecognized); - // Create a `form_structure` where the email field has ac=unrecognized. - std::unique_ptr<FormStructure> form_structure = - ConstructDefaultProfileFormStructure(); - AutofillField* email_field = form_structure->field(2); - ASSERT_EQ(email_field->Type().GetStorableType(), EMAIL_ADDRESS); - email_field->SetHtmlType(HtmlFieldType::kUnrecognized, HtmlFieldMode::kNone); - - // Expect that ac=unrecognized doesn't change the prediction. - EXPECT_EQ(email_field->Type().GetStorableType(), EMAIL_ADDRESS); - - // Expect that the email address is not imported. - AutofillProfile expected_profile = ConstructDefaultProfile(); - expected_profile.ClearFields({EMAIL_ADDRESS}); - ExtractAddressProfilesAndVerifyExpectation(*form_structure, - {expected_profile}); -} - #if !BUILDFLAG(IS_IOS) TEST_F(FormDataImporterTest, ProcessIbanImportCandidate_ShouldOfferLocalSave_NewIban) { @@ -4053,25 +4031,11 @@ field.SetHtmlType(HtmlFieldType::kUnrecognized, HtmlFieldMode::kNone); field.SetTypeTo(AutofillType(NAME_FIRST)); field.set_value(u"First"); - { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndDisableFeature( - features::kAutofillImportFromAutocompleteUnrecognized); - base::flat_map<FieldType, std::u16string> observed_field_types = - test_api(form_data_importer()) - .GetObservedFieldValues( - std::to_array<const AutofillField*>({&field})); - EXPECT_TRUE(observed_field_types.empty()); - } - { - base::test::ScopedFeatureList scoped_feature_list{ - features::kAutofillImportFromAutocompleteUnrecognized}; - base::flat_map<FieldType, std::u16string> observed_field_types = - test_api(form_data_importer()) - .GetObservedFieldValues( - std::to_array<const AutofillField*>({&field})); - EXPECT_EQ(observed_field_types.size(), 1u); - } + base::flat_map<FieldType, std::u16string> observed_field_types = + test_api(form_data_importer()) + .GetObservedFieldValues( + std::to_array<const AutofillField*>({&field})); + EXPECT_EQ(observed_field_types.size(), 1u); } // Test case for credit card extraction.
diff --git a/components/autofill/core/browser/foundations/autofill_client.h b/components/autofill/core/browser/foundations/autofill_client.h index 84dd7882..a89dcb79c 100644 --- a/components/autofill/core/browser/foundations/autofill_client.h +++ b/components/autofill/core/browser/foundations/autofill_client.h
@@ -431,6 +431,7 @@ // Informs the client that the suggestion UI needs to be kept alive. Call // before `UpdateAutofillSuggestions` to update the open popup in-place. + // TODO(crbug.com/374293518): Unused, remove. virtual void PinAutofillSuggestions() = 0; // Returns the information of the popup on the screen, if there is one that is
diff --git a/components/autofill/core/browser/foundations/browser_autofill_manager.cc b/components/autofill/core/browser/foundations/browser_autofill_manager.cc index 41fb9455..c28864c 100644 --- a/components/autofill/core/browser/foundations/browser_autofill_manager.cc +++ b/components/autofill/core/browser/foundations/browser_autofill_manager.cc
@@ -260,10 +260,6 @@ case SuggestionType::kGeneratePasswordEntry: case SuggestionType::kInsecureContextPaymentDisabledMessage: case SuggestionType::kMixedFormMessage: - case SuggestionType::kPasswordAccountStorageEmpty: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - case SuggestionType::kPasswordAccountStorageReSignin: case SuggestionType::kPasswordEntry: case SuggestionType::kPasswordFieldByFieldFilling: case SuggestionType::kPlusAddressError: @@ -1036,30 +1032,23 @@ } auto* logger = GetEventFormLogger(*autofill_field); - if (!autofill_field->is_autofilled()) { - if (logger) { - logger->OnTypedIntoNonFilledField(); - } - } - if (autofill_field->is_autofilled()) { autofill_field->set_is_autofilled(false); autofill_field->set_previously_autofilled(true); if (logger) { - logger->OnEditedAutofilledField(); + logger->OnEditedAutofilledField(field.global_id()); } if (AutofillAiDelegate* delegate = client().GetAutofillAiDelegate(); delegate && autofill_field->filling_product() == FillingProduct::kAutofillAi) { delegate->OnEditedAutofilledField(form.global_id()); } + } else { + if (logger) { + logger->OnEditedNonFilledField(field.global_id()); + } } - UpdateInitialInteractionTimestamp(timestamp); - - if (logger) { - logger->OnTextFieldDidChange(autofill_field->global_id()); - } } bool BrowserAutofillManager::IsFormNonSecure(const FormData& form) const { @@ -1893,7 +1882,36 @@ void BrowserAutofillManager::OnSelectControlDidChangeImpl( const FormData& form, const FieldGlobalId& field_id) { - // TODO(crbug.com/40564270): Handle select control change. + if (!base::FeatureList::IsEnabled( + features::kAutofillRecordCorrectionOfSelectElements)) { + return; + } + FormStructure* form_structure = nullptr; + AutofillField* autofill_field = nullptr; + if (!GetCachedFormAndField(form.global_id(), field_id, &form_structure, + &autofill_field)) { + return; + } + + UpdatePendingForm(form); + + auto* logger = GetEventFormLogger(*autofill_field); + if (autofill_field->is_autofilled()) { + autofill_field->set_is_autofilled(false); + autofill_field->set_previously_autofilled(true); + if (logger) { + logger->OnEditedAutofilledField(autofill_field->global_id()); + } + if (AutofillAiDelegate* delegate = client().GetAutofillAiDelegate(); + delegate && + autofill_field->filling_product() == FillingProduct::kAutofillAi) { + delegate->OnEditedAutofilledField(form.global_id()); + } + } else { + if (logger) { + logger->OnEditedNonFilledField(autofill_field->global_id()); + } + } } void BrowserAutofillManager::OnDidFillAutofillFormDataImpl( @@ -2751,9 +2769,10 @@ client().GetAutofillOptimizationGuide()) { // Initiate necessary pre-processing based on the forms and fields that are // parsed, as well as the information that the user has saved in the web - // database based on `client().GetPersonalDataManager()`. + // database. autofill_optimization_guide->OnDidParseForm( - form_structure, client().GetPersonalDataManager()); + form_structure, + client().GetPersonalDataManager().payments_data_manager()); } if (AutofillAiDelegate* delegate = client().GetAutofillAiDelegate()) {
diff --git a/components/autofill/core/browser/integrators/autofill_optimization_guide.cc b/components/autofill/core/browser/integrators/autofill_optimization_guide.cc index d523aa2..db343caa 100644 --- a/components/autofill/core/browser/integrators/autofill_optimization_guide.cc +++ b/components/autofill/core/browser/integrators/autofill_optimization_guide.cc
@@ -8,11 +8,11 @@ #include "base/ranges/algorithm.h" #include "components/autofill/core/browser/autofill_field.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/data_model/credit_card.h" #include "components/autofill/core/browser/field_types.h" #include "components/autofill/core/browser/form_structure.h" #include "components/autofill/core/browser/payments/constants.h" +#include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/credit_card_network_identifiers.h" #include "components/optimization_guide/core/optimization_guide_decider.h" @@ -79,11 +79,10 @@ } void AddCreditCardOptimizationTypes( - const PersonalDataManager& personal_data_manager, + base::span<const CreditCard* const> cards, base::flat_set<optimization_guide::proto::OptimizationType>& optimization_types) { - for (const CreditCard* card : - personal_data_manager.payments_data_manager().GetServerCreditCards()) { + for (const CreditCard* card : cards) { auto vcn_merchant_opt_out_optimization_type = GetVcnMerchantOptOutOptimizationTypeForCard(*card); if (vcn_merchant_opt_out_optimization_type != @@ -93,7 +92,7 @@ // Check if the card is eligible for category-level benefit // optimizations from supported issuers. Other benefit types are read - // directly from the PersonalDataManager and don't require filter + // directly from the `PaymentsDataManager` and don't require filter // optimizations. if (base::FeatureList::IsEnabled( features::kAutofillEnableCardBenefitsSync)) { @@ -158,38 +157,35 @@ AutofillOptimizationGuide::~AutofillOptimizationGuide() = default; -// TODO(crbug.com/41492637): Pass PersonalDataManager by reference and remove -// check for presence. void AutofillOptimizationGuide::OnDidParseForm( const FormStructure& form_structure, - const PersonalDataManager& personal_data_manager) { + const PaymentsDataManager& payments_data_manager) { // This flat set represents all of the optimization types that we need to // register based on `form_structure`. base::flat_set<optimization_guide::proto::OptimizationType> optimization_types; - bool has_iban_field = + const bool has_iban_field = std::ranges::any_of(form_structure, [](const auto& field) { return field->Type().GetStorableType() == IBAN_VALUE; }); if (has_iban_field) { optimization_types.insert(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED); } - bool has_credit_card_field = + const bool has_credit_card_field = std::ranges::any_of(form_structure, [](const auto& field) { return field->Type().group() == FieldTypeGroup::kCreditCard; }); + std::vector<const CreditCard*> server_cards; if (has_credit_card_field) { - AddCreditCardOptimizationTypes(personal_data_manager, optimization_types); + server_cards = payments_data_manager.GetServerCreditCards(); + AddCreditCardOptimizationTypes(server_cards, optimization_types); } #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ BUILDFLAG(IS_CHROMEOS) - if (has_credit_card_field && - !personal_data_manager.payments_data_manager() - .GetServerCreditCards() - .empty() && + if (!server_cards.empty() && base::FeatureList::IsEnabled( features::kAutofillEnableAmountExtractionDesktop)) { optimization_types.insert(
diff --git a/components/autofill/core/browser/integrators/autofill_optimization_guide.h b/components/autofill/core/browser/integrators/autofill_optimization_guide.h index f83d1b2..f0414f2 100644 --- a/components/autofill/core/browser/integrators/autofill_optimization_guide.h +++ b/components/autofill/core/browser/integrators/autofill_optimization_guide.h
@@ -21,7 +21,7 @@ class AutofillField; class CreditCard; class FormStructure; -class PersonalDataManager; +class PaymentsDataManager; // Class to enable and disable features on a per-origin basis using // optimization_guide::OptimizationGuideDecider. @@ -38,12 +38,12 @@ // Registers the necessary optimization guide deciders based on // `form_structure`, which is a result of the form parsing that takes place // once a user navigates to a new page. Based on `form_structure`, - // `personal_data_manager` is used to check whether the user has the required + // `payments_data_manager` is used to check whether the user has the required // pre-requisites saved in the web database to necessitate an optimization // type registration for certain optimization types that require additional // web database checks. virtual void OnDidParseForm(const FormStructure& form_structure, - const PersonalDataManager& personal_data_manager); + const PaymentsDataManager& payments_data_manager); // Checks if the `url` has an applicable category benefit for the credit card // issuer `issuer_id`. If an optimization is found, returns the applicable @@ -94,7 +94,7 @@ private: // Raw pointer to a decider which is owned by the decider's factory. // The factory dependencies ensure that the `decider_` outlives this object. - raw_ptr<optimization_guide::OptimizationGuideDecider> decider_; + const raw_ptr<optimization_guide::OptimizationGuideDecider> decider_; }; } // namespace autofill
diff --git a/components/autofill/core/browser/integrators/autofill_optimization_guide_unittest.cc b/components/autofill/core/browser/integrators/autofill_optimization_guide_unittest.cc index ee58614..10e300f 100644 --- a/components/autofill/core/browser/integrators/autofill_optimization_guide_unittest.cc +++ b/components/autofill/core/browser/integrators/autofill_optimization_guide_unittest.cc
@@ -11,7 +11,7 @@ #include "base/test/task_environment.h" #include "components/autofill/core/browser/country_type.h" #include "components/autofill/core/browser/data_manager/payments/payments_data_manager.h" -#include "components/autofill/core/browser/data_manager/test_personal_data_manager.h" +#include "components/autofill/core/browser/data_manager/payments/test_payments_data_manager.h" #include "components/autofill/core/browser/data_model/credit_card.h" #include "components/autofill/core/browser/data_model/credit_card_benefit.h" #include "components/autofill/core/browser/data_model/credit_card_test_api.h" @@ -19,6 +19,7 @@ #include "components/autofill/core/browser/form_structure_test_api.h" #include "components/autofill/core/browser/payments/constants.h" #include "components/autofill/core/browser/test_utils/autofill_test_utils.h" +#include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/autofill/core/common/autofill_test_utils.h" #include "components/autofill/core/common/credit_card_network_identifiers.h" @@ -35,20 +36,25 @@ namespace autofill { +namespace { + using test::CreateTestCreditCardFormData; using test::CreateTestIbanFormData; +using ::testing::_; +using ::testing::Eq; +using ::testing::Matcher; +using ::testing::Return; +using ::testing::UnorderedElementsAre; + +} // namespace class AutofillOptimizationGuideTest : public testing::Test { public: AutofillOptimizationGuideTest() : pref_service_(test::PrefServiceForTesting()), - decider_(std::make_unique< - optimization_guide::MockOptimizationGuideDecider>()), - personal_data_manager_(std::make_unique<TestPersonalDataManager>()), - autofill_optimization_guide_( - std::make_unique<AutofillOptimizationGuide>(decider_.get())) { - personal_data_manager_->SetPrefService(pref_service_.get()); - personal_data_manager_->SetSyncServiceForTest(&sync_service_); + autofill_optimization_guide_(&decider()) { + payments_data_manager_.SetPrefService(pref_service_.get()); + payments_data_manager_.SetSyncServiceForTest(&sync_service_); } CreditCard GetVcnEnrolledCardForMerchantOptOut( @@ -66,55 +72,62 @@ void MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( const GURL& url, optimization_guide::OptimizationGuideDecision decision) { - ON_CALL(*decider_, - CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto:: - CAPITAL_ONE_CREDIT_CARD_BENEFITS_BLOCKED), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return(decision)); + ON_CALL( + decider(), + CanApplyOptimization( + Eq(url), + Eq(optimization_guide::proto:: + CAPITAL_ONE_CREDIT_CARD_BENEFITS_BLOCKED), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault(Return(decision)); } protected: + optimization_guide::MockOptimizationGuideDecider& decider() { + return decider_; + } + AutofillOptimizationGuide& guide() { return autofill_optimization_guide_; } + TestPaymentsDataManager& payments_data_manager() { + return payments_data_manager_; + } + + private: base::test::TaskEnvironment task_environment_; test::AutofillUnitTestEnvironment autofill_test_environment_; std::unique_ptr<PrefService> pref_service_; syncer::TestSyncService sync_service_; - std::unique_ptr<optimization_guide::MockOptimizationGuideDecider> decider_; - std::unique_ptr<TestPersonalDataManager> personal_data_manager_; - std::unique_ptr<AutofillOptimizationGuide> autofill_optimization_guide_; + optimization_guide::MockOptimizationGuideDecider decider_; + TestPaymentsDataManager payments_data_manager_; + AutofillOptimizationGuide autofill_optimization_guide_; }; TEST_F(AutofillOptimizationGuideTest, EnsureIntegratorInitializedCorrectly) { - EXPECT_TRUE(autofill_optimization_guide_ - ->GetOptimizationGuideKeyedServiceForTesting() == - decider_.get()); + EXPECT_TRUE(guide().GetOptimizationGuideKeyedServiceForTesting() == + &decider()); } -// Test that the `IBAN_AUTOFILL_BLOCKED` optimization type is registered when we -// have seen an IBAN form. +// Test that the `IBAN_AUTOFIL L_BLOCKED` optimization type is registered when +// we have seen an IBAN form. TEST_F(AutofillOptimizationGuideTest, IbanFieldFound_IbanAutofillBlocked) { FormStructure form_structure{CreateTestIbanFormData()}; test_api(form_structure).SetFieldTypes({IBAN_VALUE}, {IBAN_VALUE}); - EXPECT_CALL(*decider_, + EXPECT_CALL(decider(), RegisterOptimizationTypes(testing::ElementsAre( optimization_guide::proto::IBAN_AUTOFILL_BLOCKED))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the corresponding optimization types are registered in the VCN // merchant opt-out case when a credit card form is seen, and VCNs that have an // associated optimization guide blocklist are present. TEST_F(AutofillOptimizationGuideTest, CreditCardFormFound_VcnMerchantOptOut) { - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut()); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut(kDiscoverCard)); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut(kMasterCard)); FormStructure form_structure{ @@ -123,21 +136,20 @@ form_structure.DetermineHeuristicTypes(GeoIpCountryCode(""), /*log_manager=*/nullptr); - EXPECT_CALL(*decider_, + EXPECT_CALL(decider(), RegisterOptimizationTypes(testing::ElementsAre( optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA, optimization_guide::proto::VCN_MERCHANT_OPT_OUT_DISCOVER, optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the `VCN_MERCHANT_OPT_OUT_VISA` optimization type is not registered // when we have seen a credit card form, but the network is not Visa. TEST_F(AutofillOptimizationGuideTest, CreditCardFormFound_VcnMerchantOptOut_NotVisaNetwork) { - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut(/*network=*/kAmericanExpressCard)); FormStructure form_structure{ @@ -146,10 +158,9 @@ form_structure.DetermineHeuristicTypes(GeoIpCountryCode(""), /*log_manager=*/nullptr); - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the `VCN_MERCHANT_OPT_OUT_VISA` optimization type is not registered @@ -157,7 +168,7 @@ // enrollment TEST_F(AutofillOptimizationGuideTest, CreditCardFormFound_VcnMerchantOptOut_IssuerEnrollment) { - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut( /*network=*/kVisaCard, /*virtual_card_enrollment_type=*/CreditCard:: @@ -169,10 +180,9 @@ form_structure.DetermineHeuristicTypes(GeoIpCountryCode(""), /*log_manager=*/nullptr); - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the `VCN_MERCHANT_OPT_OUT_VISA` optimization type is not registered @@ -180,8 +190,7 @@ // the account. TEST_F(AutofillOptimizationGuideTest, CreditCardFormFound_VcnMerchantOptOut_NotEnrolledInVirtualCard) { - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - test::GetMaskedServerCard()); + payments_data_manager().AddServerCreditCard(test::GetMaskedServerCard()); FormStructure form_structure{ CreateTestCreditCardFormData(/*is_https=*/true, @@ -189,10 +198,9 @@ form_structure.DetermineHeuristicTypes(GeoIpCountryCode(""), /*log_manager=*/nullptr); - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that if the field type does not correlate to any optimization type we @@ -205,10 +213,9 @@ test_api(form_structure) .SetFieldTypes({MERCHANT_PROMO_CODE}, {MERCHANT_PROMO_CODE}); - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that if the form denotes that we need to register multiple optimization @@ -225,16 +232,15 @@ CREDIT_CARD_EXP_MONTH, CREDIT_CARD_EXP_4_DIGIT_YEAR, IBAN_VALUE}; test_api(form_structure).SetFieldTypes(field_types, field_types); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut()); - EXPECT_CALL(*decider_, + EXPECT_CALL(decider(), RegisterOptimizationTypes(testing::ElementsAre( optimization_guide::proto::IBAN_AUTOFILL_BLOCKED, optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that single field suggestions are blocked when we are about to display @@ -246,17 +252,15 @@ FormStructure form_structure{CreateTestIbanFormData()}; test_api(form_structure).SetFieldTypes({IBAN_VALUE}, {IBAN_VALUE}); GURL url("https://example.com/"); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + Eq(url), Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); - EXPECT_TRUE(autofill_optimization_guide_->ShouldBlockSingleFieldSuggestions( - url, form_structure.field(0))); + EXPECT_TRUE( + guide().ShouldBlockSingleFieldSuggestions(url, form_structure.field(0))); } // Test that single field suggestions are not blocked when we are about to @@ -268,17 +272,15 @@ FormStructure form_structure{CreateTestIbanFormData()}; test_api(form_structure).SetFieldTypes({IBAN_VALUE}, {IBAN_VALUE}); GURL url("https://example.com/"); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + Eq(url), Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); - EXPECT_FALSE(autofill_optimization_guide_->ShouldBlockSingleFieldSuggestions( - url, form_structure.field(0))); + EXPECT_FALSE( + guide().ShouldBlockSingleFieldSuggestions(url, form_structure.field(0))); } // Test that single field suggestions are not blocked for the @@ -288,16 +290,15 @@ ShouldNotBlockSingleFieldSuggestions_IbanAutofillBlocked_FieldTypeForBlockingNotFound) { FormStructure form_structure{CreateTestIbanFormData()}; GURL url("https://example.com/"); - EXPECT_CALL(*decider_, - CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) + EXPECT_CALL( + decider(), + CanApplyOptimization( + Eq(url), Eq(optimization_guide::proto::IBAN_AUTOFILL_BLOCKED), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) .Times(0); - EXPECT_FALSE(autofill_optimization_guide_->ShouldBlockSingleFieldSuggestions( - url, form_structure.field(0))); + EXPECT_FALSE( + guide().ShouldBlockSingleFieldSuggestions(url, form_structure.field(0))); } // Test that blocking a virtual card suggestion works correctly in the VCN @@ -306,20 +307,16 @@ ShouldBlockFormFieldSuggestion_VcnMerchantOptOutVisa) { GURL url("https://example.com/"); CreditCard card = GetVcnEnrolledCardForMerchantOptOut(); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + Eq(url), Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); - EXPECT_TRUE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_TRUE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that blocking a virtual card suggestion works correctly in the VCN @@ -328,21 +325,17 @@ ShouldBlockFormFieldSuggestion_VcnMerchantOptOutDiscover) { GURL url("https://example.com/"); CreditCard card = GetVcnEnrolledCardForMerchantOptOut(kDiscoverCard); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); ON_CALL( - *decider_, + decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_DISCOVER), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + Eq(url), Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_DISCOVER), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); - EXPECT_TRUE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_TRUE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that blocking a virtual card suggestion works correctly in the VCN @@ -351,21 +344,17 @@ ShouldBlockFormFieldSuggestion_VcnMerchantOptOutMastercard) { GURL url("https://example.com/"); CreditCard card = GetVcnEnrolledCardForMerchantOptOut(kMasterCard); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq( - optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + Eq(url), + Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); - EXPECT_TRUE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_TRUE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that if the URL is not blocklisted, we do not block a virtual card @@ -374,20 +363,16 @@ ShouldNotBlockFormFieldSuggestion_VcnMerchantOptOut_UrlNotBlocked) { GURL url("https://example.com/"); CreditCard card = GetVcnEnrolledCardForMerchantOptOut(); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + Eq(url), Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); - EXPECT_FALSE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_FALSE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that we do not block virtual card suggestions in the VCN merchant @@ -398,20 +383,16 @@ CreditCard card = GetVcnEnrolledCardForMerchantOptOut( /*network=*/kVisaCard, /*virtual_card_enrollment_type=*/CreditCard:: VirtualCardEnrollmentType::kIssuer); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); EXPECT_CALL( - *decider_, + decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) + Eq(url), Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) .Times(0); - EXPECT_FALSE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_FALSE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that we do not block the virtual card suggestion from being shown in the @@ -423,20 +404,16 @@ GURL url("https://example.com/"); CreditCard card = GetVcnEnrolledCardForMerchantOptOut(/*network=*/kAmericanExpressCard); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); EXPECT_CALL( - *decider_, + decider(), CanApplyOptimization( - testing::Eq(url), - testing::Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) + Eq(url), Eq(optimization_guide::proto::VCN_MERCHANT_OPT_OUT_VISA), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) .Times(0); - EXPECT_FALSE( - autofill_optimization_guide_->ShouldBlockFormFieldSuggestion(url, card)); + EXPECT_FALSE(guide().ShouldBlockFormFieldSuggestion(url, card)); } // Test that we block benefits suggestions for Capital One cards on blocked @@ -447,14 +424,13 @@ CreditCard card = GetVcnEnrolledCardForMerchantOptOut( kVisaCard, CreditCard::VirtualCardEnrollmentType::kNetwork, kCapitalOneCardIssuerId); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( url, optimization_guide::OptimizationGuideDecision::kFalse); - EXPECT_TRUE(autofill_optimization_guide_ - ->ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); + EXPECT_TRUE( + guide().ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); } // Test that we do not block benefits suggestions for Capital One cards on @@ -466,15 +442,13 @@ CreditCard card = GetVcnEnrolledCardForMerchantOptOut( kVisaCard, CreditCard::VirtualCardEnrollmentType::kNetwork, kCapitalOneCardIssuerId); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( url, optimization_guide::OptimizationGuideDecision::kTrue); EXPECT_FALSE( - autofill_optimization_guide_ - ->ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); + guide().ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); } // Test that we do not block benefits suggestions when a kUnknown decision is @@ -486,15 +460,13 @@ CreditCard card = GetVcnEnrolledCardForMerchantOptOut( kVisaCard, CreditCard::VirtualCardEnrollmentType::kNetwork, kCapitalOneCardIssuerId); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( url, optimization_guide::OptimizationGuideDecision::kUnknown); EXPECT_FALSE( - autofill_optimization_guide_ - ->ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); + guide().ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); } // Test that we do not block benefits suggestions for non-Capital One cards on @@ -507,15 +479,13 @@ /*network=*/kAmericanExpressCard, /*virtual_card_enrollment_type=*/ CreditCard::VirtualCardEnrollmentType::kNetwork, /*issuer_id=*/kAmexCardIssuerId); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( url, optimization_guide::OptimizationGuideDecision::kFalse); EXPECT_FALSE( - autofill_optimization_guide_ - ->ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); + guide().ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); } // Test that we do not block benefits suggestions for non-Capital One cards on @@ -528,15 +498,13 @@ /*network=*/kAmericanExpressCard, /*virtual_card_enrollment_type=*/ CreditCard::VirtualCardEnrollmentType::kNetwork, /*issuer_id=*/kAmexCardIssuerId); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card); + payments_data_manager().AddServerCreditCard(card); MockCapitalOneCreditCardBenefitsBlockedDecisionForUrl( url, optimization_guide::OptimizationGuideDecision::kTrue); EXPECT_FALSE( - autofill_optimization_guide_ - ->ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); + guide().ShouldBlockBenefitSuggestionLabelsForCardAndUrl(card, url)); } // Test that the Amex category-benefit optimization types are registered when we @@ -551,22 +519,21 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut( /*network=*/kAmericanExpressCard, /*virtual_card_enrollment_type=*/ CreditCard::VirtualCardEnrollmentType::kNetwork, /*issuer_id=*/kAmexCardIssuerId)); - EXPECT_CALL(*decider_, - RegisterOptimizationTypes(testing::UnorderedElementsAre( + EXPECT_CALL(decider(), + RegisterOptimizationTypes(UnorderedElementsAre( optimization_guide::proto:: AMERICAN_EXPRESS_CREDIT_CARD_FLIGHT_BENEFITS, optimization_guide::proto:: AMERICAN_EXPRESS_CREDIT_CARD_SUBSCRIPTION_BENEFITS))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the Capital One category-benefit optimization types are registered @@ -581,7 +548,7 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut( /*network=*/kMasterCard, /*virtual_card_enrollment_type=*/ @@ -589,8 +556,8 @@ /*issuer_id=*/kCapitalOneCardIssuerId)); EXPECT_CALL( - *decider_, - RegisterOptimizationTypes(testing::UnorderedElementsAre( + decider(), + RegisterOptimizationTypes(UnorderedElementsAre( optimization_guide::proto::CAPITAL_ONE_CREDIT_CARD_DINING_BENEFITS, optimization_guide::proto::CAPITAL_ONE_CREDIT_CARD_GROCERY_BENEFITS, optimization_guide::proto:: @@ -599,8 +566,7 @@ optimization_guide::proto::CAPITAL_ONE_CREDIT_CARD_BENEFITS_BLOCKED, optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the Amex category-benefit optimization types are not registered @@ -615,23 +581,22 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut( /*network=*/kAmericanExpressCard, /*virtual_card_enrollment_type=*/ CreditCard::VirtualCardEnrollmentType::kNetwork, /*issuer_id=*/kAmexCardIssuerId)); - EXPECT_CALL(*decider_, - RegisterOptimizationTypes(testing::UnorderedElementsAre( + EXPECT_CALL(decider(), + RegisterOptimizationTypes(UnorderedElementsAre( optimization_guide::proto:: AMERICAN_EXPRESS_CREDIT_CARD_FLIGHT_BENEFITS, optimization_guide::proto:: AMERICAN_EXPRESS_CREDIT_CARD_SUBSCRIPTION_BENEFITS))) .Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that the Capital One category-benefit optimization types are not @@ -646,7 +611,7 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( + payments_data_manager().AddServerCreditCard( GetVcnEnrolledCardForMerchantOptOut( /*network=*/kMasterCard, /*virtual_card_enrollment_type=*/ @@ -655,13 +620,11 @@ // Since the experiment is disabled, there should be no benefits-related // optimization types registered. - EXPECT_CALL(*decider_, - RegisterOptimizationTypes(testing::UnorderedElementsAre( - optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD))) - .Times(1); + EXPECT_CALL(decider(), + RegisterOptimizationTypes(UnorderedElementsAre( + optimization_guide::proto::VCN_MERCHANT_OPT_OUT_MASTERCARD))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test the `BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM` optimization type is registered @@ -680,16 +643,14 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - test::GetMaskedServerCard()); + payments_data_manager().AddServerCreditCard(test::GetMaskedServerCard()); // Ensure that on registration the right optimization type is registered. EXPECT_CALL( - *decider_, + decider(), RegisterOptimizationTypes(testing::IsSupersetOf( {optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM}))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test the `BUY_NOW_PAY_LATER_ALLOWLIST_ZIP` optimization type is registered @@ -705,16 +666,14 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - test::GetMaskedServerCard()); + payments_data_manager().AddServerCreditCard(test::GetMaskedServerCard()); // Ensure that on registration the right optimization type is registered. EXPECT_CALL( - *decider_, + decider(), RegisterOptimizationTypes(testing::IsSupersetOf( {optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP}))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test neither `BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM` nor @@ -731,14 +690,12 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - test::GetMaskedServerCard()); + payments_data_manager().AddServerCreditCard(test::GetMaskedServerCard()); // RegisterOptimizationTypes shouldn't be called. - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test neither `BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM` nor @@ -754,14 +711,12 @@ test_api(form_structure) .SetFieldTypes({CREDIT_CARD_NAME_FULL, CREDIT_CARD_NUMBER, CREDIT_CARD_EXP_MONTH, CREDIT_CARD_VERIFICATION_CODE}); - personal_data_manager_->test_payments_data_manager().AddCreditCard( - test::GetCreditCard()); + payments_data_manager().AddCreditCard(test::GetCreditCard()); // RegisterOptimizationTypes shouldn't be called. - EXPECT_CALL(*decider_, RegisterOptimizationTypes).Times(0); + EXPECT_CALL(decider(), RegisterOptimizationTypes).Times(0); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); } // Test that we allow BNPL for Affirm on an allowlisted URL. @@ -769,19 +724,16 @@ IsEligibleForBuyNowPayLater_AffirmUrlAllowed) { // Ensure that `IsEligibleForBuyNowPayLater()` returns the right // response. - ON_CALL( - *decider_, - CanApplyOptimization( - testing::Eq(GURL("https://www.abercrombie.com")), - testing::Eq( - optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + ON_CALL(decider(), + CanApplyOptimization( + Eq(GURL("https://www.abercrombie.com")), + Eq(optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); // abercrombie.com is in the allowlist. - EXPECT_TRUE(autofill_optimization_guide_->IsEligibleForBuyNowPayLater( + EXPECT_TRUE(guide().IsEligibleForBuyNowPayLater( /*issuer_id=*/"affirm", GURL("https://www.abercrombie.com"))); } @@ -790,19 +742,16 @@ IsEligibleForBuyNowPayLater_AffirmUrlBlocked) { // Ensure that `IsEligibleForBuyNowPayLater()` returns the right // response. - ON_CALL( - *decider_, - CanApplyOptimization( - testing::Eq(GURL("https://www.abc.com")), - testing::Eq( - optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + ON_CALL(decider(), + CanApplyOptimization( + Eq(GURL("https://www.abc.com")), + Eq(optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_AFFIRM), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); // abc.com is not in the allowlist. - EXPECT_FALSE(autofill_optimization_guide_->IsEligibleForBuyNowPayLater( + EXPECT_FALSE(guide().IsEligibleForBuyNowPayLater( /*issuer_id=*/"affirm", GURL("https://www.abc.com"))); } @@ -811,18 +760,16 @@ IsEligibleForBuyNowPayLater_ZipUrlAllowed) { // Ensure that `IsEligibleForBuyNowPayLater()` returns the right // response. - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(GURL("https://www.abercrombie.com")), - testing::Eq( - optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + Eq(GURL("https://www.abercrombie.com")), + Eq(optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); // abercrombie.com is in the allowlist. - EXPECT_TRUE(autofill_optimization_guide_->IsEligibleForBuyNowPayLater( + EXPECT_TRUE(guide().IsEligibleForBuyNowPayLater( /*issuer_id=*/"zip", GURL("https://www.abercrombie.com"))); } @@ -831,18 +778,16 @@ IsEligibleForBuyNowPayLater_ZipUrlBlocked) { // Ensure that `IsEligibleForBuyNowPayLater()` returns the right // response. - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(GURL("https://www.abc.com")), - testing::Eq( - optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); + Eq(GURL("https://www.abc.com")), + Eq(optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); // abc.com is not in the allowlist. - EXPECT_FALSE(autofill_optimization_guide_->IsEligibleForBuyNowPayLater( + EXPECT_FALSE(guide().IsEligibleForBuyNowPayLater( /*issuer_id=*/"zip", GURL("https://www.abc.com"))); } @@ -851,18 +796,16 @@ IsEligibleForBuyNowPayLater_UnknownIssuerIdBlocked) { // Ensure that `IsEligibleForBuyNowPayLater()` returns the right // response. - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(GURL("https://www.abercrombie.com")), - testing::Eq( - optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + Eq(GURL("https://www.abercrombie.com")), + Eq(optimization_guide::proto::BUY_NOW_PAY_LATER_ALLOWLIST_ZIP), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); // abercrombie.com is in the allowlist but issuer_id is not matched. - EXPECT_FALSE(autofill_optimization_guide_->IsEligibleForBuyNowPayLater( + EXPECT_FALSE(guide().IsEligibleForBuyNowPayLater( /*issuer_id=*/"zipp", GURL("https://www.abercrombie.com"))); } #endif @@ -881,7 +824,7 @@ test_api(form_structure).SetFieldTypes(field_types, field_types); // Ensure that on registration the right optimization types are registered. - EXPECT_CALL(*decider_, + EXPECT_CALL(decider(), RegisterOptimizationTypes(testing::IsSupersetOf( {optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST1, optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST2, @@ -889,41 +832,37 @@ optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST4, optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST5, optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST6}))); - autofill_optimization_guide_->OnDidParseForm(form_structure, - *personal_data_manager_); + guide().OnDidParseForm(form_structure, payments_data_manager()); // Ensure that `IsEligibleForAblation()` returns the right responses. - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::_, testing::_, - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kFalse)); - ON_CALL( - *decider_, + _, _, + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kFalse)); + ON_CALL(decider(), + CanApplyOptimization( + Eq(GURL("https://www.example.com")), + Eq(optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST1), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); + EXPECT_CALL( + decider(), CanApplyOptimization( - testing::Eq(GURL("https://www.example.com")), - testing::Eq(optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST1), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); - EXPECT_CALL(*decider_, - CanApplyOptimization( - testing::_, testing::_, - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) + _, _, + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) .Times(3); - EXPECT_TRUE(autofill_optimization_guide_->IsEligibleForAblation( + EXPECT_TRUE(guide().IsEligibleForAblation( GURL("https://www.example.com"), optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST1)); // www.othersite.com is not on any list. - EXPECT_FALSE(autofill_optimization_guide_->IsEligibleForAblation( + EXPECT_FALSE(guide().IsEligibleForAblation( GURL("https://www.othersite.com"), optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST1)); // www.example.com is not on list 2, but on list 1. - EXPECT_FALSE(autofill_optimization_guide_->IsEligibleForAblation( + EXPECT_FALSE(guide().IsEligibleForAblation( GURL("https://www.example.com"), optimization_guide::proto::AUTOFILL_ABLATION_SITES_LIST2)); } @@ -956,8 +895,7 @@ AutofillOptimizationGuideTest::SetUp(); card_ = test::GetMaskedServerCard(); card_.set_issuer_id(GetParam().issuer_id); - personal_data_manager_->test_payments_data_manager().AddServerCreditCard( - card_); + payments_data_manager().AddServerCreditCard(card_); } private: @@ -969,17 +907,15 @@ TEST_P(BenefitOptimizationToBenefitCategoryTest, GetBenefitCategoryForOptimizationType) { GURL url = GURL("https://example.com/"); - ON_CALL(*decider_, + ON_CALL(decider(), CanApplyOptimization( - testing::Eq(url), testing::Eq(expected_benefit_optimization()), - testing::Matcher<optimization_guide::OptimizationMetadata*>( - testing::Eq(nullptr)))) - .WillByDefault(testing::Return( - optimization_guide::OptimizationGuideDecision::kTrue)); + Eq(url), Eq(expected_benefit_optimization()), + Matcher<optimization_guide::OptimizationMetadata*>(Eq(nullptr)))) + .WillByDefault( + Return(optimization_guide::OptimizationGuideDecision::kTrue)); - EXPECT_EQ(autofill_optimization_guide_ - ->AttemptToGetEligibleCreditCardBenefitCategory( - credit_card().issuer_id(), url), + EXPECT_EQ(guide().AttemptToGetEligibleCreditCardBenefitCategory( + credit_card().issuer_id(), url), expected_benefit_category()); }
diff --git a/components/autofill/core/browser/integrators/mock_autofill_optimization_guide.h b/components/autofill/core/browser/integrators/mock_autofill_optimization_guide.h index 0cf819ac..9b0f549 100644 --- a/components/autofill/core/browser/integrators/mock_autofill_optimization_guide.h +++ b/components/autofill/core/browser/integrators/mock_autofill_optimization_guide.h
@@ -20,7 +20,7 @@ MOCK_METHOD(void, OnDidParseForm, - (const FormStructure&, const PersonalDataManager&), + (const FormStructure&, const PaymentsDataManager&), (override)); MOCK_METHOD(CreditCardCategoryBenefit::BenefitCategory, AttemptToGetEligibleCreditCardBenefitCategory,
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_test_base.h b/components/autofill/core/browser/metrics/autofill_metrics_test_base.h index bf415db..6fb11c89 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics_test_base.h +++ b/components/autofill/core/browser/metrics/autofill_metrics_test_base.h
@@ -116,30 +116,29 @@ // Convenience wrapper for `EmulateUserChangedTextFieldTo` that appends // '_changed' to the fields value. - void SimulateUserChangedTextField(FormData& form, - const FormFieldData& field, - base::TimeTicks timestamp = {}) { - SimulateUserChangedTextFieldTo(form, field.global_id(), - field.value() + u"_changed", timestamp); + void SimulateUserChangedField(FormData& form, + const FormFieldData& field, + base::TimeTicks timestamp = {}) { + SimulateUserChangedFieldTo(form, field.global_id(), + field.value() + u"_changed", timestamp); } // TODO(crbug.com/40100455): Remove this overload. - void SimulateUserChangedTextFieldTo(FormData& form, - const FormFieldData& field, - const std::u16string& new_value, - base::TimeTicks timestamp = {}) { - SimulateUserChangedTextFieldTo(form, field.global_id(), new_value, - timestamp); + void SimulateUserChangedFieldTo(FormData& form, + const FormFieldData& field, + const std::u16string& new_value, + base::TimeTicks timestamp = {}) { + SimulateUserChangedFieldTo(form, field.global_id(), new_value, timestamp); } // Emulates that the user manually changed a field by resetting the // `is_autofilled` field attribute, settings the field's value to `new_value` // and notifying the `AutofillManager` of the change that is emulated to have // happened at `timestamp`. - void SimulateUserChangedTextFieldTo(FormData& form, - const FieldGlobalId& field_id, - const std::u16string& new_value, - base::TimeTicks timestamp = {}) { + void SimulateUserChangedFieldTo(FormData& form, + const FieldGlobalId& field_id, + const std::u16string& new_value, + base::TimeTicks timestamp = {}) { // TODO(crbug.com/40100455): Remove const_cast. FormFieldData& field = const_cast<FormFieldData&>( CHECK_DEREF(form.FindFieldByGlobalId(field_id))); @@ -147,16 +146,12 @@ ASSERT_NE(field.value(), new_value); field.set_is_autofilled(false); field.set_value(new_value); - autofill_manager().OnTextFieldDidChange(form, field.global_id(), timestamp); - } - - // TODO(crbug.com/40240189): Remove this method once the metrics are fixed. - void SimulateUserChangedTextFieldWithoutActuallyChangingTheValue( - const FormData& form, - FormFieldData& field, - base::TimeTicks timestamp = {}) { - field.set_is_autofilled(false); - autofill_manager().OnTextFieldDidChange(form, field.global_id(), timestamp); + if (field.IsSelectElement()) { + autofill_manager().OnSelectControlDidChange(form, field.global_id()); + } else { + autofill_manager().OnTextFieldDidChange(form, field.global_id(), + timestamp); + } } void FillAutofillFormData(const FormData& form,
diff --git a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc index 74b2a44..754888d 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/autofill_metrics_unittest.cc
@@ -314,52 +314,65 @@ // Tests the logging of type-specific field-wise correctness. TEST_F(AutofillMetricsTest, EditedAutofilledFieldAtSubmission) { + base::test::ScopedFeatureList scoped_feature_list{ + features::kAutofillRecordCorrectionOfSelectElements}; test::FormDescription form_description = { .description_for_logging = "NumberOfAutofilledFields", .fields = {{.role = NAME_FULL, .value = u"Elvis Aaron Presley", .is_autofilled = true}, + {.role = ADDRESS_HOME_COUNTRY, + .value = u"United States", + .form_control_type = FormControlType::kSelectOne, + .is_autofilled = true}, + {.role = ADDRESS_HOME_STATE, + .value = u"New York", + .form_control_type = FormControlType::kSelectOne, + .is_autofilled = true}, {.role = EMAIL_ADDRESS, .value = u"buddy@gmail.com", - .is_autofilled = true}, - {.role = PHONE_HOME_CITY_AND_NUMBER, .is_autofilled = true}}, + .is_autofilled = true}}, .renderer_id = test::MakeFormRendererId(), .main_frame_origin = url::Origin::Create(autofill_driver_->url())}; FormData form = GetAndAddSeenForm(form_description); - base::HistogramTester histogram_tester; - // Simulate text input in the first and second fields. - SimulateUserChangedTextField(form, form.fields()[0]); - SimulateUserChangedTextField(form, form.fields()[1]); + // Simulate user changing values in the first and second fields. + SimulateUserChangedField(form, form.fields()[0]); + SimulateUserChangedField(form, form.fields()[1]); + base::HistogramTester histogram_tester; SubmitForm(form); // The |NAME_FULL| field was edited (bucket 112). - histogram_tester.ExpectBucketCount( - "Autofill.EditedAutofilledFieldAtSubmission2.ByFieldType", 112, 1); + EXPECT_THAT(histogram_tester.GetAllSamples( + "Autofill.EditedAutofilledFieldAtSubmission2.ByFieldType"), + BucketsAre( + // The |NAME_FULL| field was edited (bucket 112). + Bucket(112, 1), + // The |EMAIL_ADDRESS| field was not edited (bucket 145). + Bucket(145, 1), + // The |ADDRESS_HOME_STATE| field was not edited (bucket 545). + Bucket(545, 1), + // The |ADDRESS_HOME_COUNTRY| field was edited (bucket 576). + Bucket(576, 1))); - // The |EMAIL_ADDRESS| field was edited (bucket 144). - histogram_tester.ExpectBucketCount( - "Autofill.EditedAutofilledFieldAtSubmission2.ByFieldType", 144, 1); + EXPECT_THAT(histogram_tester.GetAllSamples( + "Autofill.EditedAutofilledFieldAtSubmission2.Aggregate"), + BucketsAre( + // There should be two counts on edited fields. + Bucket(0, 2), + // There should be one count on accepted fields. + Bucket(1, 2))); - // The |PHONE_HOME_CITY_AND_NUMBER| field was not edited (bucket 209). - histogram_tester.ExpectBucketCount( - "Autofill.EditedAutofilledFieldAtSubmission2.ByFieldType", 209, 1); - - // The aggregated histogram should have two counts on edited fields. - histogram_tester.ExpectBucketCount( - "Autofill.EditedAutofilledFieldAtSubmission2.Aggregate", 0, 2); - - // The aggregated histogram should have one count on accepted fields. - histogram_tester.ExpectBucketCount( - "Autofill.EditedAutofilledFieldAtSubmission2.Aggregate", 1, 1); - - // The autocomplete!=off histogram should have one count on accepted fields. - histogram_tester.ExpectBucketCount( - "Autofill.Autocomplete.NotOff.EditedAutofilledFieldAtSubmission2." - "Address", - 1, 1); + EXPECT_THAT(histogram_tester.GetAllSamples( + "Autofill.Autocomplete.NotOff." + "EditedAutofilledFieldAtSubmission2.Address"), + BucketsAre( + // There should be two counts on edited fields. + Bucket(0, 2), + // There should be one count on accepted fields. + Bucket(1, 2))); // The autocomplete!=off histogram should have no count on accepted fields. histogram_tester.ExpectTotalCount( @@ -4132,9 +4145,9 @@ ->second->form_parsed_timestamp(); FormData user_filled_form = filled_form; - SimulateUserChangedTextField(user_filled_form, - user_filled_form.fields().front(), - parse_time + base::Microseconds(3)); + SimulateUserChangedField(user_filled_form, + user_filled_form.fields().front(), + parse_time + base::Microseconds(3)); task_environment_.FastForwardBy(base::Microseconds(17)); SubmitForm(filled_form); @@ -4198,9 +4211,9 @@ FormData mixed_filled_form = test::AsAutofilled(filled_form); FillAutofillFormData(mixed_filled_form, parse_time + base::Microseconds(5)); - SimulateUserChangedTextField(mixed_filled_form, - mixed_filled_form.fields().front(), - parse_time + base::Microseconds(3)); + SimulateUserChangedField(mixed_filled_form, + mixed_filled_form.fields().front(), + parse_time + base::Microseconds(3)); task_environment_.FastForwardBy(base::Microseconds(17)); SubmitForm(mixed_filled_form); @@ -4234,9 +4247,9 @@ FormData mixed_filled_form = test::AsAutofilled(filled_form); FillAutofillFormData(mixed_filled_form, parse_time + base::Microseconds(5)); - SimulateUserChangedTextField(mixed_filled_form, - mixed_filled_form.fields().front(), - parse_time + base::Microseconds(3)); + SimulateUserChangedField(mixed_filled_form, + mixed_filled_form.fields().front(), + parse_time + base::Microseconds(3)); task_environment_.FastForwardBy(base::Microseconds(17)); SubmitForm(mixed_filled_form); @@ -5093,8 +5106,8 @@ .begin() ->second->form_parsed_timestamp(); FillAutofillFormData(form, parse_time + base::Microseconds(5)); - SimulateUserChangedTextField(form, form.fields().front(), - parse_time + base::Microseconds(3)); + SimulateUserChangedField(form, form.fields().front(), + parse_time + base::Microseconds(3)); task_environment_.FastForwardBy(base::Microseconds(17)); SubmitForm(form);
diff --git a/components/autofill/core/browser/metrics/field_filling_stats_and_score_metrics_unittest.cc b/components/autofill/core/browser/metrics/field_filling_stats_and_score_metrics_unittest.cc index 1c44571..e31417325 100644 --- a/components/autofill/core/browser/metrics/field_filling_stats_and_score_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/field_filling_stats_and_score_metrics_unittest.cc
@@ -83,18 +83,15 @@ void SimulationOfDefaultUserChangesOnAddedFormTextFields() { ASSERT_GT(form_data_.fields().size(), 6u); // Elvis is of type NAME_FIRST in the test profile. - SimulateUserChangedTextFieldTo(form_data_, form_data_.fields()[1], - u"Elvis"); + SimulateUserChangedFieldTo(form_data_, form_data_.fields()[1], u"Elvis"); // Presley is of type NAME_LAST in the test profile - SimulateUserChangedTextFieldTo(form_data_, form_data_.fields()[2], - u"Presley"); + SimulateUserChangedFieldTo(form_data_, form_data_.fields()[2], u"Presley"); // Presley is of type NAME_LAST in the test profile - SimulateUserChangedTextFieldTo(form_data_, form_data_.fields()[3], - u"Presley"); + SimulateUserChangedFieldTo(form_data_, form_data_.fields()[3], u"Presley"); // This is a random string of UNKNOWN_TYPE. - SimulateUserChangedTextFieldTo(form_data_, form_data_.fields()[4], - u"something random"); - SimulateUserChangedTextFieldTo(form_data_, form_data_.fields()[5], u""); + SimulateUserChangedFieldTo(form_data_, form_data_.fields()[4], + u"something random"); + SimulateUserChangedFieldTo(form_data_, form_data_.fields()[5], u""); } // Creates, adds and "sees" a form that contains `fields`. @@ -233,16 +230,11 @@ .autocomplete_attribute = "unrecognized"}, {.role = EMAIL_ADDRESS, .autocomplete_attribute = "unrecognized"}}}); - SimulateUserChangedTextFieldTo(form, form.fields()[0], - u"Corrected First Name"); - SimulateUserChangedTextFieldTo(form, form.fields()[1], - u"Corrected Middle Name"); - SimulateUserChangedTextFieldTo(form, form.fields()[2], - u"Corrected Last Name"); - SimulateUserChangedTextFieldTo(form, form.fields()[8], - u"Manually Filled Phone"); - SimulateUserChangedTextFieldTo(form, form.fields()[9], - u"Manually Filled Email"); + SimulateUserChangedFieldTo(form, form.fields()[0], u"Corrected First Name"); + SimulateUserChangedFieldTo(form, form.fields()[1], u"Corrected Middle Name"); + SimulateUserChangedFieldTo(form, form.fields()[2], u"Corrected Last Name"); + SimulateUserChangedFieldTo(form, form.fields()[8], u"Manually Filled Phone"); + SimulateUserChangedFieldTo(form, form.fields()[9], u"Manually Filled Email"); base::HistogramTester histogram_tester; SubmitForm(form);
diff --git a/components/autofill/core/browser/metrics/form_events/address_form_event_logger_unittest.cc b/components/autofill/core/browser/metrics/form_events/address_form_event_logger_unittest.cc index 1a000df..3233d83 100644 --- a/components/autofill/core/browser/metrics/form_events/address_form_event_logger_unittest.cc +++ b/components/autofill/core/browser/metrics/form_events/address_form_event_logger_unittest.cc
@@ -117,7 +117,7 @@ CreateProfileOfCategory( AutofillProfileRecordTypeCategory::kLocalOrSyncable)); if (ShouldEditField()) { - SimulateUserChangedTextField(form, form.fields().front()); + SimulateUserChangedField(form, form.fields().front()); } SubmitForm(form); @@ -144,7 +144,7 @@ CreateProfileOfCategory( AutofillProfileRecordTypeCategory::kAccountChrome)); if (ShouldEditField()) { - SimulateUserChangedTextField(form, form.fields().front()); + SimulateUserChangedField(form, form.fields().front()); } SubmitForm(form); @@ -172,7 +172,7 @@ form, CreateProfileOfCategory( AutofillProfileRecordTypeCategory::kAccountNonChrome)); if (ShouldEditField()) { - SimulateUserChangedTextField(form, form.fields().front()); + SimulateUserChangedField(form, form.fields().front()); } SubmitForm(form); @@ -215,7 +215,7 @@ AutofillProfileRecordTypeCategory::kAccountChrome)); SubmitForm(form2); if (ShouldEditField()) { - SimulateUserChangedTextField(form2, form2.fields().front()); + SimulateUserChangedField(form2, form2.fields().front()); } ResetDriverToCommitMetrics();
diff --git a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc index 75472b54..2d33591 100644 --- a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc +++ b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.cc
@@ -223,12 +223,14 @@ } } -void FormEventLoggerBase::OnTypedIntoNonFilledField() { - has_logged_typed_into_non_filled_field_ = true; +void FormEventLoggerBase::OnEditedNonFilledField(FieldGlobalId field_id) { + has_logged_edited_non_filled_field_ = true; + OnEditedField(field_id); } -void FormEventLoggerBase::OnEditedAutofilledField() { +void FormEventLoggerBase::OnEditedAutofilledField(FieldGlobalId field_id) { has_logged_edited_autofilled_field_ = true; + OnEditedField(field_id); } void FormEventLoggerBase::OnDestroyed() { @@ -406,7 +408,7 @@ has_logged_form_filling_suggestion_filled_, form_interaction_counts_, flow_id_, fast_checkout_run_id_); } - if (has_logged_typed_into_non_filled_field_ || + if (has_logged_edited_non_filled_field_ || has_logged_form_filling_suggestion_filled_) { RecordFormSubmission(logs); } @@ -557,11 +559,10 @@ } } -void FormEventLoggerBase::OnTextFieldDidChange( - const FieldGlobalId& field_global_id) { - if (field_global_id != last_field_global_id_modified_by_user_) { +void FormEventLoggerBase::OnEditedField(FieldGlobalId field_id) { + if (field_id != last_field_global_id_modified_by_user_) { ++form_interaction_counts_.form_element_user_modifications; - last_field_global_id_modified_by_user_ = field_global_id; + last_field_global_id_modified_by_user_ = field_id; UpdateFlowId(); } }
diff --git a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h index 00159b2b..5915bf9 100644 --- a/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h +++ b/components/autofill/core/browser/metrics/form_events/form_event_logger_base.h
@@ -52,8 +52,16 @@ void OnFormSubmitted(const FormStructure& form); - void OnTypedIntoNonFilledField(); - void OnEditedAutofilledField(); + // Called when a field gets edited (the choice of the function depends on + // whether the field was autofilled or not prior to the edit). This covers: + // - User manual modifications of the value of text fields. + // - User manual modifications of the value of select fields. + // - JS modifications of select fields on frames with transient user + // activation (see blink::LocalFrame::HasTransientUserActivation). + // Note that this means that any JS modification of text fields doesn't + // trigger these methods. + void OnEditedNonFilledField(FieldGlobalId field_id); + void OnEditedAutofilledField(FieldGlobalId field_id); // Must be called right before the event logger is destroyed. It triggers the // logging of funnel and key metrics. @@ -77,8 +85,6 @@ virtual void Log(FormEvent event, const FormStructure& form); - void OnTextFieldDidChange(const FieldGlobalId& field_global_id); - void SetFastCheckoutRunId(int64_t run_id) { fast_checkout_run_id_ = run_id; } FormInteractionsUkmLogger::FormEventSet GetFormEvents( @@ -102,6 +108,10 @@ virtual void RecordParseForm() = 0; virtual void RecordShowSuggestions() = 0; + // Shared logic of `OnEdited[NonFilled|Autofilled]Field`, called irrespective + // of the autofill state of the field represented by `field_global_id`. + void OnEditedField(FieldGlobalId field_id); + virtual void LogWillSubmitForm(const FormStructure& form); virtual void LogFormSubmitted(const FormStructure& form); @@ -200,7 +210,7 @@ bool has_logged_autocomplete_off_ = false; bool has_logged_will_submit_ = false; bool has_logged_submitted_ = false; - bool has_logged_typed_into_non_filled_field_ = false; + bool has_logged_edited_non_filled_field_ = false; bool has_logged_edited_autofilled_field_ = false; bool has_logged_autofilled_field_was_cleared_by_javascript_after_fill_ = false;
diff --git a/components/autofill/core/browser/metrics/form_events/form_event_logger_base_unittest.cc b/components/autofill/core/browser/metrics/form_events/form_event_logger_base_unittest.cc index 2ceac6a5..fb90042 100644 --- a/components/autofill/core/browser/metrics/form_events/form_event_logger_base_unittest.cc +++ b/components/autofill/core/browser/metrics/form_events/form_event_logger_base_unittest.cc
@@ -226,7 +226,7 @@ form.fields()[0].global_id()); // Don't simulate a suggestion but simulate the user typing. - SimulateUserChangedTextField(form, form.fields()[0]); + SimulateUserChangedField(form, form.fields()[0]); SubmitForm(form); @@ -339,8 +339,8 @@ autofill_manager().OnAskForValuesToFillTest(form_, form_.fields()[0].global_id()); - SimulateUserChangedTextField(form_, form_.fields()[0]); - SimulateUserChangedTextField(form_, form_.fields()[1]); + SimulateUserChangedField(form_, form_.fields()[0]); + SimulateUserChangedField(form_, form_.fields()[1]); SubmitForm(form_); FormInteractionsFlowId flow_id = @@ -382,8 +382,8 @@ form_.fields()[2].global_id()); DidShowAutofillSuggestions(form_, /*field_index=*/2); - SimulateUserChangedTextField(form_, form_.fields()[0]); - SimulateUserChangedTextField(form_, form_.fields()[1]); + SimulateUserChangedField(form_, form_.fields()[0]); + SimulateUserChangedField(form_, form_.fields()[1]); SubmitForm(form_); FormInteractionsFlowId flow_id = @@ -431,7 +431,7 @@ FillTestProfile(form_, /*field_index=*/2); // Simulate user fixing the address. - SimulateUserChangedTextField(form_, form_.fields()[1]); + SimulateUserChangedField(form_, form_.fields()[1]); SubmitForm(form_); FormInteractionsFlowId flow_id = @@ -482,7 +482,7 @@ FillTestProfile(form_); // Simulate user fixing the address. - SimulateUserChangedTextField(form_, form_.fields()[1]); + SimulateUserChangedField(form_, form_.fields()[1]); // Don't submit form.
diff --git a/components/autofill/core/browser/metrics/form_interactions_ukm_logger_unittest.cc b/components/autofill/core/browser/metrics/form_interactions_ukm_logger_unittest.cc index 6e39ba6..10955969 100644 --- a/components/autofill/core/browser/metrics/form_interactions_ukm_logger_unittest.cc +++ b/components/autofill/core/browser/metrics/form_interactions_ukm_logger_unittest.cc
@@ -197,7 +197,7 @@ base::HistogramTester histogram_tester; // Simulate text input in the first and second fields. - SimulateUserChangedTextField(form, form.fields()[0]); + SimulateUserChangedField(form, form.fields()[0]); SubmitForm(form); ExpectedUkmMetricsRecord name_field_ukm_record{ @@ -355,8 +355,8 @@ .begin() ->second->form_parsed_timestamp(); // Simulate text input in the first fields. - SimulateUserChangedTextFieldTo(form, form.fields()[0], u"United States", - parse_time + base::Milliseconds(3)); + SimulateUserChangedFieldTo(form, form.fields()[0], u"United States", + parse_time + base::Milliseconds(3)); task_environment_.FastForwardBy(base::Milliseconds(1200)); base::HistogramTester histogram_tester; SubmitForm(form); @@ -762,10 +762,10 @@ .begin() ->second->form_parsed_timestamp(); // Simulate text input in the first and second fields. - SimulateUserChangedTextFieldTo(form, form.fields()[0], u"Elvis Aaron Presley", - parse_time + base::Milliseconds(3)); - SimulateUserChangedTextFieldTo(form, form.fields()[1], u"buddy@gmail.com", - parse_time + base::Milliseconds(3)); + SimulateUserChangedFieldTo(form, form.fields()[0], u"Elvis Aaron Presley", + parse_time + base::Milliseconds(3)); + SimulateUserChangedFieldTo(form, form.fields()[1], u"buddy@gmail.com", + parse_time + base::Milliseconds(3)); task_environment_.FastForwardBy(base::Milliseconds(1200)); base::HistogramTester histogram_tester; SubmitForm(form); @@ -1733,7 +1733,7 @@ if (GetParam().step_2_typing) { task_environment_.FastForwardBy(base::Milliseconds(1000)); - SimulateUserChangedTextField(form, first_field, base::TimeTicks::Now()); + SimulateUserChangedField(form, first_field, base::TimeTicks::Now()); } if (GetParam().step_3_autofill) { task_environment_.FastForwardBy(base::Milliseconds(1000)); @@ -1760,7 +1760,7 @@ } if (GetParam().step_4_edit_after_autofill) { task_environment_.FastForwardBy(base::Milliseconds(1000)); - SimulateUserChangedTextField(form, first_field, base::TimeTicks::Now()); + SimulateUserChangedField(form, first_field, base::TimeTicks::Now()); } if (GetParam().step_5_submit) { task_environment_.FastForwardBy(base::Milliseconds(1000));
diff --git a/components/autofill/core/browser/metrics/quality_metrics_unittest.cc b/components/autofill/core/browser/metrics/quality_metrics_unittest.cc index 2ac7a21..25d171ed 100644 --- a/components/autofill/core/browser/metrics/quality_metrics_unittest.cc +++ b/components/autofill/core/browser/metrics/quality_metrics_unittest.cc
@@ -754,8 +754,7 @@ autofill_manager().AddSeenForm(form, heuristic_types, server_types); // Changes the name field to match the full name. - SimulateUserChangedTextFieldTo(form, form.fields()[0], - u"Elvis Aaron Presley"); + SimulateUserChangedFieldTo(form, form.fields()[0], u"Elvis Aaron Presley"); base::HistogramTester histogram_tester;
diff --git a/components/autofill/core/browser/suggestions/payments/payments_suggestion_generator.cc b/components/autofill/core/browser/suggestions/payments/payments_suggestion_generator.cc index 66f7299..666e8100 100644 --- a/components/autofill/core/browser/suggestions/payments/payments_suggestion_generator.cc +++ b/components/autofill/core/browser/suggestions/payments/payments_suggestion_generator.cc
@@ -1376,10 +1376,6 @@ case SuggestionType::kManageAddress: case SuggestionType::kManageIban: case SuggestionType::kManagePlusAddress: - case SuggestionType::kPasswordAccountStorageEmpty: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - case SuggestionType::kPasswordAccountStorageReSignin: case SuggestionType::kSeePromoCodeDetails: case SuggestionType::kViewPasswordDetails: case SuggestionType::kAutofillAiFeedback:
diff --git a/components/autofill/core/browser/suggestions/suggestion.cc b/components/autofill/core/browser/suggestions/suggestion.cc index b2ac095..932e891 100644 --- a/components/autofill/core/browser/suggestions/suggestion.cc +++ b/components/autofill/core/browser/suggestions/suggestion.cc
@@ -46,8 +46,6 @@ return "kEdit"; case Suggestion::Icon::kEmail: return "kEmail"; - case Suggestion::Icon::kEmpty: - return "kEmpty"; case Suggestion::Icon::kError: return "kError"; case Suggestion::Icon::kGlobe:
diff --git a/components/autofill/core/browser/suggestions/suggestion.h b/components/autofill/core/browser/suggestions/suggestion.h index 7fbf87db..73ace513 100644 --- a/components/autofill/core/browser/suggestions/suggestion.h +++ b/components/autofill/core/browser/suggestions/suggestion.h
@@ -240,7 +240,6 @@ kDevice, kEdit, kEmail, - kEmpty, kError, kGlobe, kGoogle,
diff --git a/components/autofill/core/browser/suggestions/suggestion_type.cc b/components/autofill/core/browser/suggestions/suggestion_type.cc index cad8427..b66d0c8da 100644 --- a/components/autofill/core/browser/suggestions/suggestion_type.cc +++ b/components/autofill/core/browser/suggestions/suggestion_type.cc
@@ -48,16 +48,8 @@ return "kGeneratePasswordEntry"; case SuggestionType::kShowAccountCards: return "kShowAccountCards"; - case SuggestionType::kPasswordAccountStorageOptIn: - return "kPasswordAccountStorageOptIn"; - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - return "kPasswordAccountStorageOptInAndGenerate"; case SuggestionType::kAccountStoragePasswordEntry: return "kAccountStoragePasswordEntry"; - case SuggestionType::kPasswordAccountStorageReSignin: - return "kPasswordAccountStorageReSignin"; - case SuggestionType::kPasswordAccountStorageEmpty: - return "kPasswordAccountStorageEmpty"; case SuggestionType::kPasswordFieldByFieldFilling: return "kPasswordFieldByFieldFilling"; case SuggestionType::kFillPassword:
diff --git a/components/autofill/core/browser/suggestions/suggestion_type.h b/components/autofill/core/browser/suggestions/suggestion_type.h index 9c58367..701e748 100644 --- a/components/autofill/core/browser/suggestions/suggestion_type.h +++ b/components/autofill/core/browser/suggestions/suggestion_type.h
@@ -70,18 +70,18 @@ kGeneratePasswordEntry = 23, // Password related suggestion. Displays the option to enable credentials from // the account storage. - kPasswordAccountStorageOptIn = 25, + // Deprecated: kPasswordAccountStorageOptIn = 25, // Password related suggestion. Displays the option to enable password // generation and saving in the account storage. - kPasswordAccountStorageOptInAndGenerate = 26, + // Deprecated: kPasswordAccountStorageOptInAndGenerate = 26, // Password related suggestion. Displays a password from the account storage. kAccountStoragePasswordEntry = 27, // Password related suggestion. Displays the option to re-signin to enable the // account storage. - kPasswordAccountStorageReSignin = 28, + // Deprecated: kPasswordAccountStorageReSignin = 28, // Password related suggestion. Displays that there is no fillable credentials // after opting into the account storage. - kPasswordAccountStorageEmpty = 29, + // Deprecated: kPasswordAccountStorageEmpty = 29, // Password sub-popup suggestion. Fills the username from the manual fallback // entry. kPasswordFieldByFieldFilling = 30,
diff --git a/components/autofill/core/browser/ui/autofill_external_delegate.cc b/components/autofill/core/browser/ui/autofill_external_delegate.cc index 88ce798..8ceaf22 100644 --- a/components/autofill/core/browser/ui/autofill_external_delegate.cc +++ b/components/autofill/core/browser/ui/autofill_external_delegate.cc
@@ -261,10 +261,6 @@ case SuggestionType::kInsecureContextPaymentDisabledMessage: case SuggestionType::kMerchantPromoCodeEntry: case SuggestionType::kMixedFormMessage: - case SuggestionType::kPasswordAccountStorageEmpty: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: - case SuggestionType::kPasswordAccountStorageReSignin: case SuggestionType::kPasswordEntry: case SuggestionType::kPlusAddressError: case SuggestionType::kAutofillAiFeedback: @@ -706,11 +702,7 @@ case SuggestionType::kPasswordEntry: case SuggestionType::kAccountStoragePasswordEntry: case SuggestionType::kAllSavedPasswordsEntry: - case SuggestionType::kPasswordAccountStorageEmpty: case SuggestionType::kGeneratePasswordEntry: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageReSignin: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: case SuggestionType::kWebauthnCredential: case SuggestionType::kWebauthnSignInWithAnotherDevice: case SuggestionType::kPasswordFieldByFieldFilling: @@ -909,11 +901,7 @@ case SuggestionType::kPasswordEntry: case SuggestionType::kAccountStoragePasswordEntry: case SuggestionType::kAllSavedPasswordsEntry: - case SuggestionType::kPasswordAccountStorageEmpty: case SuggestionType::kGeneratePasswordEntry: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageReSignin: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: case SuggestionType::kDevtoolsTestAddresses: case SuggestionType::kDevtoolsTestAddressByCountry: case SuggestionType::kWebauthnCredential: @@ -1044,11 +1032,7 @@ case SuggestionType::kAllSavedPasswordsEntry: case SuggestionType::kGeneratePasswordEntry: case SuggestionType::kShowAccountCards: - case SuggestionType::kPasswordAccountStorageOptIn: - case SuggestionType::kPasswordAccountStorageOptInAndGenerate: case SuggestionType::kAccountStoragePasswordEntry: - case SuggestionType::kPasswordAccountStorageReSignin: - case SuggestionType::kPasswordAccountStorageEmpty: case SuggestionType::kComposeResumeNudge: case SuggestionType::kComposeDisable: case SuggestionType::kComposeGoToSettings:
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc index 7062cbd..b132c64 100644 --- a/components/autofill/core/common/autofill_features.cc +++ b/components/autofill/core/common/autofill_features.cc
@@ -238,6 +238,13 @@ "AutofillFixCurrentValueInImport", base::FEATURE_DISABLED_BY_DEFAULT); +// When enabled, and upon receiving a signal that a select element has been +// edited by the user, BrowserAutofillManager will record this correction, which +// will affect many correctness metrics. +BASE_FEATURE(kAutofillRecordCorrectionOfSelectElements, + "AutofillRecordCorrectionOfSelectElements", + base::FEATURE_DISABLED_BY_DEFAULT); + // When enabled, AutofillManager::GetCachedFormAndField will return the cached // form if found, even if it doesn't satisfy // `cached_form->autofill_count() != 0`. @@ -265,13 +272,6 @@ "AutofillGivePrecedenceToEmailOverUsername", base::FEATURE_DISABLED_BY_DEFAULT); -// Makes Autofill try to import data from fields annotated with an unrecognized -// autocomplete HTML attribute. The default behavior doesn't allow that. -// TODO(crbug.com/347698797): Cleanup when launched. -BASE_FEATURE(kAutofillImportFromAutocompleteUnrecognized, - "AutofillImportFromAutocompleteUnrecognized", - base::FEATURE_ENABLED_BY_DEFAULT); - // When enabled, the autofill suggestion labels are more descriptive and // relevant. // TODO(crbug.com/380273791): Cleanup when launched.
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h index 13fbee2..79e0efa 100644 --- a/components/autofill/core/common/autofill_features.h +++ b/components/autofill/core/common/autofill_features.h
@@ -87,12 +87,12 @@ COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillFixCurrentValueInImport); COMPONENT_EXPORT(AUTOFILL) +BASE_DECLARE_FEATURE(kAutofillRecordCorrectionOfSelectElements); +COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillDecoupleAutofillCountFromCache); COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillGivePrecedenceToEmailOverUsername); COMPONENT_EXPORT(AUTOFILL) -BASE_DECLARE_FEATURE(kAutofillImportFromAutocompleteUnrecognized); -COMPONENT_EXPORT(AUTOFILL) BASE_DECLARE_FEATURE(kAutofillImprovedLabels); COMPONENT_EXPORT(AUTOFILL) extern const base::FeatureParam<bool>
diff --git a/components/browser_ui/banners/android/java/src/org/chromium/components/browser_ui/banners/SwipableOverlayView.java b/components/browser_ui/banners/android/java/src/org/chromium/components/browser_ui/banners/SwipableOverlayView.java index d27a0a1..a4d2bd4 100644 --- a/components/browser_ui/banners/android/java/src/org/chromium/components/browser_ui/banners/SwipableOverlayView.java +++ b/components/browser_ui/banners/android/java/src/org/chromium/components/browser_ui/banners/SwipableOverlayView.java
@@ -4,7 +4,6 @@ package org.chromium.components.browser_ui.banners; -import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.cc.mojom.RootScrollOffsetUpdateFrequency.ALL_UPDATES; import android.animation.Animator; @@ -121,14 +120,14 @@ /** Set the given WebContents for scrolling changes. */ public void setWebContents(WebContents webContents) { if (mWebContents != null) { - assumeNonNull(GestureListenerManager.fromWebContents(mWebContents)) + GestureListenerManager.fromWebContents(mWebContents) .removeListener(mGestureStateListener); } mWebContents = webContents; // See comment in onLayout() as to why the listener is only attached if mTotalHeight is > 0. - if (webContents != null && mTotalHeight > 0) { - assumeNonNull(GestureListenerManager.fromWebContents(webContents)) + if (mWebContents != null && mTotalHeight > 0) { + GestureListenerManager.fromWebContents(mWebContents) .addListener(mGestureStateListener, ALL_UPDATES); } } @@ -221,13 +220,12 @@ // Adding a listener to GestureListenerManager results in extra IPCs on every frame, which // is very costly. Only attach the listener if needed. if (mWebContents != null && mGestureStateListener != null) { - GestureListenerManager gestureManager = - GestureListenerManager.fromWebContents(mWebContents); - assumeNonNull(gestureManager); if (mTotalHeight > 0) { - gestureManager.addListener(mGestureStateListener, ALL_UPDATES); + GestureListenerManager.fromWebContents(mWebContents) + .addListener(mGestureStateListener, ALL_UPDATES); } else { - gestureManager.removeListener(mGestureStateListener); + GestureListenerManager.fromWebContents(mWebContents) + .removeListener(mGestureStateListener); } }
diff --git a/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/AsyncNotificationManagerProxyImpl.java b/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/AsyncNotificationManagerProxyImpl.java index 70657a6..86819e2 100644 --- a/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/AsyncNotificationManagerProxyImpl.java +++ b/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/AsyncNotificationManagerProxyImpl.java
@@ -196,7 +196,12 @@ @Override protected void onPostExecute(T result) { - callback.onResult(result); + // TODO(crbug.com/388114708): currently the callback is not called on failure to + // match the behavior of NotificationManangerproxyImpl. But this should be changed + // to always call the callback as it might cause undesirable consequences. + if (mSuccess) { + callback.onResult(result); + } NotificationProxyUtils.recordNotificationEventHistogram( mSuccess ? NotificationEvent.HAS_CALLBACK_SUCCESS
diff --git a/components/commerce/core/bookmark_update_manager.cc b/components/commerce/core/bookmark_update_manager.cc index de1d2e5..8ebac03d 100644 --- a/components/commerce/core/bookmark_update_manager.cc +++ b/components/commerce/core/bookmark_update_manager.cc
@@ -93,19 +93,12 @@ size_t current_batch_count = 0; size_t total_bookmarks_processed = 0; - size_t max_allowed_updated = kShoppingListBookmarkpdateBatchMaxParam.Get(); pending_update_batches_.emplace(); for (auto* node : nodes) { // If we've reached the max for a batch, push a new vector onto the queue // and continue. if (current_batch_count >= shopping_service_->GetMaxProductBookmarkUpdatesPerBatch()) { - // If batching updates isn't allowed, block all but one. - if (!base::FeatureList::IsEnabled( - kCommerceAllowOnDemandBookmarkBatchUpdates)) { - break; - } - pending_update_batches_.emplace(); current_batch_count = 0; } @@ -115,7 +108,7 @@ // If we've reached the maximum number of bookmarks we're willing to // update, stop. - if (total_bookmarks_processed >= max_allowed_updated) { + if (total_bookmarks_processed >= kShoppingListBookmarkUpdateBatchMaxParam) { break; } }
diff --git a/components/commerce/core/bookmark_update_manager.h b/components/commerce/core/bookmark_update_manager.h index 6b5c896..97286bfb 100644 --- a/components/commerce/core/bookmark_update_manager.h +++ b/components/commerce/core/bookmark_update_manager.h
@@ -22,6 +22,10 @@ namespace commerce { +// The maximum number of products to update per update cycle for the shopping +// list. +inline constexpr int kShoppingListBookmarkUpdateBatchMaxParam = 150; + // This object manages regular updates of product information stored in // bookmarks. This object should be tied to the life of the profile and // outlive the shopping service.
diff --git a/components/commerce/core/bookmark_update_manager_unittest.cc b/components/commerce/core/bookmark_update_manager_unittest.cc index 18e21842..5553fc1 100644 --- a/components/commerce/core/bookmark_update_manager_unittest.cc +++ b/components/commerce/core/bookmark_update_manager_unittest.cc
@@ -240,8 +240,7 @@ // batches are sent. TEST_F(BookmarkUpdateManagerTest, RunBatchedUpdate) { test_features_.InitWithFeatures( - {kShoppingList, kCommerceAllowOnDemandBookmarkUpdates, - kCommerceAllowOnDemandBookmarkBatchUpdates}, + {kShoppingList, kCommerceAllowOnDemandBookmarkUpdates}, {}); shopping_service_->SetIsShoppingListEligible(true); @@ -283,18 +282,16 @@ // allowed updatable bookmarks, we stop updating. TEST_F(BookmarkUpdateManagerTest, RunBatchedUpdate_OverMaxAllowed) { test_features_.InitWithFeatures( - {kShoppingList, kCommerceAllowOnDemandBookmarkUpdates, - kCommerceAllowOnDemandBookmarkBatchUpdates}, + {kShoppingList, kCommerceAllowOnDemandBookmarkUpdates}, {}); shopping_service_->SetIsShoppingListEligible(true); ON_CALL(*shopping_service_, GetMaxProductBookmarkUpdatesPerBatch) .WillByDefault(testing::Return(10)); - const size_t bookmark_count = - kShoppingListBookmarkpdateBatchMaxParam.Get() + 10; + const size_t bookmark_count = kShoppingListBookmarkUpdateBatchMaxParam + 10; const size_t expected_update_calls = - ceil(static_cast<float>(kShoppingListBookmarkpdateBatchMaxParam.Get()) / + ceil(static_cast<float>(kShoppingListBookmarkUpdateBatchMaxParam) / shopping_service_->GetMaxProductBookmarkUpdatesPerBatch()); const size_t ungated_update_calls = ceil(static_cast<float>(bookmark_count) / @@ -323,41 +320,4 @@ EXPECT_TRUE(time_since_last < base::Minutes(1)); } -TEST_F(BookmarkUpdateManagerTest, RunBatchedUpdate_BatchingDisabled) { - test_features_.InitWithFeatures( - {kShoppingList, kCommerceAllowOnDemandBookmarkUpdates}, - {kCommerceAllowOnDemandBookmarkBatchUpdates}); - - shopping_service_->SetIsShoppingListEligible(true); - ON_CALL(*shopping_service_, GetMaxProductBookmarkUpdatesPerBatch) - .WillByDefault(testing::Return(10)); - - const size_t bookmark_count = 50; - ASSERT_LT(shopping_service_->GetMaxProductBookmarkUpdatesPerBatch(), - bookmark_count); - - std::vector<const bookmarks::BookmarkNode*> bookmarks = - AddProductBookmarks(bookmark_count); - std::vector<int64_t> ids = GetIdsFromBookmarks(bookmarks); - shopping_service_->SetGetAllShoppingBookmarksValue(bookmarks); - std::map<int64_t, ProductInfo> info_map = BuildOnDemandMapForIds(ids); - - shopping_service_->SetResponsesForGetUpdatedProductInfoForBookmarks(info_map); - - // Even though the user has more than one batch of bookmarks to request - // updates for, we should only do one since the flag is disabled. - EXPECT_CALL(*shopping_service_, - GetUpdatedProductInfoForBookmarks(testing::_, testing::_)) - .Times(1); - - update_manager_->ScheduleUpdate(); - base::RunLoop().RunUntilIdle(); - - // Ensure the preference for last updated time was also set. - base::TimeDelta time_since_last = - base::Time::Now() - - pref_service_->GetTime(kShoppingListBookmarkLastUpdateTime); - EXPECT_TRUE(time_since_last < base::Minutes(1)); -} - } // namespace commerce
diff --git a/components/commerce/core/commerce_feature_list.cc b/components/commerce/core/commerce_feature_list.cc index f9dbecc..53955139 100644 --- a/components/commerce/core/commerce_feature_list.cc +++ b/components/commerce/core/commerce_feature_list.cc
@@ -122,10 +122,6 @@ "CommerceAllowOnDemandBookmarkUpdates", base::FEATURE_ENABLED_BY_DEFAULT); -BASE_FEATURE(kCommerceAllowOnDemandBookmarkBatchUpdates, - "CommerceAllowOnDemandBookmarkBatchUpdates", - base::FEATURE_ENABLED_BY_DEFAULT); - BASE_FEATURE(kCommerceAllowServerImages, "CommerceAllowServerImages", base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/components/commerce/core/commerce_feature_list.h b/components/commerce/core/commerce_feature_list.h index 517edc1c..5ddd951 100644 --- a/components/commerce/core/commerce_feature_list.h +++ b/components/commerce/core/commerce_feature_list.h
@@ -22,7 +22,6 @@ BASE_DECLARE_FEATURE(kCommerceAllowLocalImages); BASE_DECLARE_FEATURE(kCommerceAllowOnDemandBookmarkUpdates); -BASE_DECLARE_FEATURE(kCommerceAllowOnDemandBookmarkBatchUpdates); BASE_DECLARE_FEATURE(kCommerceAllowServerImages); BASE_DECLARE_FEATURE(kCommerceLocalPDPDetection); BASE_DECLARE_FEATURE(kCommerceMerchantViewer); @@ -115,13 +114,6 @@ "shopping-list-bookmark-update-interval", base::Hours(6)); -// The maximum number of products to update per update cycle for the shopping -// list. -constexpr base::FeatureParam<int> kShoppingListBookmarkpdateBatchMaxParam( - &kCommerceAllowOnDemandBookmarkBatchUpdates, - "shopping-list-bookmark-update-batch-max", - 150); - // Shopping list revert page action icon on failure. extern const char kRevertIconOnFailureParam[]; extern const base::FeatureParam<bool> kRevertIconOnFailure;
diff --git a/components/content_settings/core/browser/cookie_settings.cc b/components/content_settings/core/browser/cookie_settings.cc index 2916d80..aa70fa7e7 100644 --- a/components/content_settings/core/browser/cookie_settings.cc +++ b/components/content_settings/core/browser/cookie_settings.cc
@@ -547,7 +547,7 @@ entry->second.value) == CONTENT_SETTING_ALLOW; } -const ContentSettingsForOneType CookieSettings::GetTpcdMetadataGrants() const { +ContentSettingsForOneType CookieSettings::GetTpcdMetadataGrants() const { return tpcd_metadata_manager_ ? tpcd_metadata_manager_->GetGrants() : ContentSettingsForOneType(); }
diff --git a/components/content_settings/core/browser/cookie_settings.h b/components/content_settings/core/browser/cookie_settings.h index 0b30e00..c0bf065d8 100644 --- a/components/content_settings/core/browser/cookie_settings.h +++ b/components/content_settings/core/browser/cookie_settings.h
@@ -163,7 +163,7 @@ // not covered by user bypass at this state of art. bool IsStoragePartitioningBypassEnabled(const GURL& first_party_url) const; - const ContentSettingsForOneType GetTpcdMetadataGrants() const; + ContentSettingsForOneType GetTpcdMetadataGrants() const; // Resets the cookie setting for the given url. //
diff --git a/components/lens/lens_features.cc b/components/lens/lens_features.cc index 286d56d..12b0f931 100644 --- a/components/lens/lens_features.cc +++ b/components/lens/lens_features.cc
@@ -320,6 +320,10 @@ constexpr base::FeatureParam<int> kScannedPdfCharacterPerPageHeuristic{ &kLensOverlayContextualSearchbox, "characters-per-page-heuristic", 200}; +constexpr base::FeatureParam<bool> kHandleSidePanelTextDirectives{ + &kLensOverlayContextualSearchbox, "handle-side-panel-text-directives", + true}; + constexpr base::FeatureParam<std::string> kTranslateEndpointUrl{ &kLensOverlayTranslateLanguages, "translate-endpoint-url", "https://translate-pa.googleapis.com/v1/supportedLanguages"}; @@ -779,4 +783,8 @@ return base::FeatureList::IsEnabled(kLensOverlayRoutingInfo); } +bool HandleSidePanelTextDirectivesEnabled() { + return kHandleSidePanelTextDirectives.Get(); +} + } // namespace lens::features
diff --git a/components/lens/lens_features.h b/components/lens/lens_features.h index 952edf14..9efdb9e 100644 --- a/components/lens/lens_features.h +++ b/components/lens/lens_features.h
@@ -605,6 +605,12 @@ COMPONENT_EXPORT(LENS_FEATURES) extern bool IsLensOverlayRoutingInfoEnabled(); +// Whether to enable the feature where side panel navigations are checked for +// text fragments and whether the highlights generated by these fragments can be +// rendered in the current open tab. +COMPONENT_EXPORT(LENS_FEATURES) +extern bool HandleSidePanelTextDirectivesEnabled(); + } // namespace lens::features #endif // COMPONENTS_LENS_LENS_FEATURES_H_
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc index 4dde1690..5432b91 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.cc +++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -188,11 +188,9 @@ } } -void ContentPasswordManagerDriver::InformNoSavedCredentials( - bool should_show_popup_without_passwords) { - GetPasswordAutofillManager()->OnNoCredentialsFound(); +void ContentPasswordManagerDriver::InformNoSavedCredentials() { if (const auto& agent = GetPasswordAutofillAgent()) { - agent->InformNoSavedCredentials(should_show_popup_without_passwords); + agent->InformNoSavedCredentials(); } }
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h index 436248fb..824b33e7 100644 --- a/components/password_manager/content/browser/content_password_manager_driver.h +++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -60,8 +60,7 @@ int GetId() const override; void SetPasswordFillData( const autofill::PasswordFormFillData& form_data) override; - void InformNoSavedCredentials( - bool should_show_popup_without_passwords) override; + void InformNoSavedCredentials() override; void FormEligibleForGenerationFound( const autofill::PasswordFormGenerationData& form) override; void GeneratedPasswordAccepted(const std::u16string& password) override;
diff --git a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc index e0faaa8..6b479710 100644 --- a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc +++ b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
@@ -118,7 +118,7 @@ const std::u16string&, const std::u16string&), (override)); - MOCK_METHOD(void, InformNoSavedCredentials, (bool), (override)); + MOCK_METHOD(void, InformNoSavedCredentials, (), (override)); MOCK_METHOD(void, FillIntoFocusedField, (bool, const std::u16string&),
diff --git a/components/password_manager/core/browser/export/BUILD.gn b/components/password_manager/core/browser/export/BUILD.gn index edf9744a..431131242 100644 --- a/components/password_manager/core/browser/export/BUILD.gn +++ b/components/password_manager/core/browser/export/BUILD.gn
@@ -27,10 +27,12 @@ sources += [ "login_db_deprecation_password_exporter.cc", "login_db_deprecation_password_exporter.h", + "login_db_deprecation_password_exporter_interface.h", "login_db_deprecation_runner.cc", "login_db_deprecation_runner.h", ] deps += [ + "//components/password_manager/core/browser/features:password_features", "//components/password_manager/core/browser/password_store:password_store_interface", "//components/password_manager/core/common:common", "//components/prefs:prefs", @@ -57,7 +59,13 @@ ] if (is_android) { - sources += [ "login_db_deprecation_password_exporter_unittest.cc" ] - deps += [ "//components/prefs:test_support" ] + sources += [ + "login_db_deprecation_password_exporter_unittest.cc", + "login_db_deprecation_runner_unittest.cc", + ] + deps += [ + "//components/password_manager/core/browser/features:password_features", + "//components/prefs:test_support", + ] } }
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.cc b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.cc index 6792dbd..f77df18 100644 --- a/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.cc +++ b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.cc
@@ -10,6 +10,7 @@ #include "base/time/time.h" #include "components/password_manager/core/browser/export/export_progress_status.h" #include "components/password_manager/core/browser/export/password_manager_exporter.h" +#include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_store/password_store_interface.h" #include "components/password_manager/core/browser/ui/credential_ui_entry.h" #include "components/password_manager/core/common/password_manager_pref_names.h"
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h index 6664f18..84f6445 100644 --- a/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h +++ b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h
@@ -7,6 +7,7 @@ #include "base/files/file_path.h" #include "base/functional/callback_forward.h" +#include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h" #include "components/password_manager/core/browser/export/password_manager_exporter.h" #include "components/password_manager/core/browser/password_store/password_store_consumer.h" #include "components/password_manager/core/browser/password_store/password_store_interface.h" @@ -32,8 +33,10 @@ // Directs exporting the passwords from the `LoginDatabase` to a CSV stored // in the same place to allow for database deprecation. -class LoginDbDeprecationPasswordExporter : public PasswordStoreConsumer, - public PasswordsProvider { +class LoginDbDeprecationPasswordExporter + : public LoginDbDeprecationPasswordExporterInterface, + public PasswordStoreConsumer, + public PasswordsProvider { public: explicit LoginDbDeprecationPasswordExporter(PrefService* pref_service, base::FilePath export_dir_path); @@ -44,7 +47,7 @@ ~LoginDbDeprecationPasswordExporter() override; void Start(scoped_refptr<PasswordStoreInterface> password_store, - base::OnceClosure export_cleanup_calback); + base::OnceClosure export_cleanup_calback) override; // Allows the `PasswordManagerExporter` to retrieve the saved credentials // after `this` receives them. Not a necessary pattern for this use-case
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h new file mode 100644 index 0000000..11cab84c --- /dev/null +++ b/components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h
@@ -0,0 +1,26 @@ +// 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. + +#ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_EXPORT_LOGIN_DB_DEPRECATION_PASSWORD_EXPORTER_INTERFACE_H_ +#define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_EXPORT_LOGIN_DB_DEPRECATION_PASSWORD_EXPORTER_INTERFACE_H_ + +#include "components/password_manager/core/browser/password_store/password_store_interface.h" + +namespace password_manager { + +// Interface for `LoginDbDeprecationPasswordExporter` to allow mocking in tests. +class LoginDbDeprecationPasswordExporterInterface { + public: + virtual ~LoginDbDeprecationPasswordExporterInterface() = default; + + // Starts the export flow. It will first fetch the stored credentials + // and when fetching completes the actual export will be automatically + // started. + virtual void Start(scoped_refptr<PasswordStoreInterface> password_store, + base::OnceClosure export_cleanup_calback) = 0; +}; + +} // namespace password_manager + +#endif // COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_EXPORT_LOGIN_DB_DEPRECATION_PASSWORD_EXPORTER_INTERFACE_H_
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_runner.cc b/components/password_manager/core/browser/export/login_db_deprecation_runner.cc index 3f6110b..bee07e19 100644 --- a/components/password_manager/core/browser/export/login_db_deprecation_runner.cc +++ b/components/password_manager/core/browser/export/login_db_deprecation_runner.cc
@@ -5,28 +5,45 @@ #include "components/password_manager/core/browser/export/login_db_deprecation_runner.h" #include "base/memory/scoped_refptr.h" - +#include "base/metrics/histogram_functions.h" +#include "base/time/time.h" +#include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h" +#include "components/password_manager/core/browser/features/password_features.h" namespace password_manager { -LoginDbDeprecationRunner::LoginDbDeprecationRunner(PrefService* pref_service, - base::FilePath export_dir) - : exporter_( - std::make_unique<LoginDbDeprecationPasswordExporter>(pref_service, - export_dir)) {} +void LogExportProgress(LoginDbDeprecationExportProgress progress) { + base::UmaHistogramEnumeration( + "PasswordManager.UPM.LoginDbDeprecationExport.Progress", progress); +} + +LoginDbDeprecationRunner::LoginDbDeprecationRunner( + std::unique_ptr<LoginDbDeprecationPasswordExporterInterface> exporter) + : exporter_(std::move(exporter)) {} LoginDbDeprecationRunner::~LoginDbDeprecationRunner() = default; +void LoginDbDeprecationRunner::StartExportWithDelay( + scoped_refptr<PasswordStoreInterface> password_store) { + CHECK(exporter_); + LogExportProgress(LoginDbDeprecationExportProgress::kScheduled); + base::SequencedTaskRunner::GetCurrentDefault()->PostDelayedTask( + FROM_HERE, + base::BindOnce(&LoginDbDeprecationRunner::StartExport, + weak_ptr_factory_.GetWeakPtr(), password_store), + base::Seconds( + password_manager::features::kLoginDbDeprecationExportDelay.Get())); +} + void LoginDbDeprecationRunner::StartExport( scoped_refptr<PasswordStoreInterface> password_store) { - // TODO(crbug.com/378650395): Delay the export by a configurable amount - // of time. - CHECK(exporter_); + LogExportProgress(LoginDbDeprecationExportProgress::kStarted); exporter_->Start(password_store, base::BindOnce(&LoginDbDeprecationRunner::ExportFinished, weak_ptr_factory_.GetWeakPtr())); } void LoginDbDeprecationRunner::ExportFinished() { + LogExportProgress(LoginDbDeprecationExportProgress::kFinished); exporter_.reset(); }
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_runner.h b/components/password_manager/core/browser/export/login_db_deprecation_runner.h index 70691e0..b44a8df8 100644 --- a/components/password_manager/core/browser/export/login_db_deprecation_runner.h +++ b/components/password_manager/core/browser/export/login_db_deprecation_runner.h
@@ -7,28 +7,44 @@ #include "components/keyed_service/core/keyed_service.h" #include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter.h" +#include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h" #include "components/password_manager/core/browser/password_store/password_store_interface.h" namespace password_manager { +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// +// LINT.IfChange(LoginDbDeprecationExportProgress) +enum class LoginDbDeprecationExportProgress { + kScheduled = 0, + kStarted = 1, + kFinished = 2, + kMaxValue = kFinished, +}; +// LINT.ThenChange(/tools/metrics/histograms/metadata/password/enums.xml:LoginDbDeprecationExportProgress) + // Owns and runs the pre-deprecation password export on Android. // Once the export is done it will destroy the exporter and clear the memory. // The service will only be instantiated for clients whose passwords couldn't // be migrated to GMS Core. class LoginDbDeprecationRunner : public KeyedService { public: - explicit LoginDbDeprecationRunner(PrefService* pref_service, - base::FilePath export_dir); + explicit LoginDbDeprecationRunner( + std::unique_ptr<LoginDbDeprecationPasswordExporterInterface> exporter); LoginDbDeprecationRunner(const LoginDbDeprecationRunner&) = delete; LoginDbDeprecationRunner& operator=(const LoginDbDeprecationRunner&) = delete; ~LoginDbDeprecationRunner() override; - void StartExport(scoped_refptr<PasswordStoreInterface> password_store); + void StartExportWithDelay( + scoped_refptr<PasswordStoreInterface> password_store); private: + void StartExport(scoped_refptr<PasswordStoreInterface> password_store); + void ExportFinished(); - std::unique_ptr<LoginDbDeprecationPasswordExporter> exporter_; + std::unique_ptr<LoginDbDeprecationPasswordExporterInterface> exporter_; base::WeakPtrFactory<LoginDbDeprecationRunner> weak_ptr_factory_{this}; };
diff --git a/components/password_manager/core/browser/export/login_db_deprecation_runner_unittest.cc b/components/password_manager/core/browser/export/login_db_deprecation_runner_unittest.cc new file mode 100644 index 0000000..cf47c4a3 --- /dev/null +++ b/components/password_manager/core/browser/export/login_db_deprecation_runner_unittest.cc
@@ -0,0 +1,136 @@ +// 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. + +#include "components/password_manager/core/browser/export/login_db_deprecation_runner.h" + +#include <memory> + +#include "base/functional/callback_forward.h" +#include "base/memory/scoped_refptr.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" +#include "base/test/task_environment.h" +#include "base/time/time.h" +#include "components/password_manager/core/browser/export/login_db_deprecation_password_exporter_interface.h" +#include "components/password_manager/core/browser/features/password_features.h" +#include "components/password_manager/core/browser/password_store/mock_password_store_interface.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace password_manager { + +namespace { +using ::testing::WithArgs; + +const std::string kExportProgressHistogram = + "PasswordManager.UPM.LoginDbDeprecationExport.Progress"; + +class MockLoginDbDeprecationPasswordExporter + : public LoginDbDeprecationPasswordExporterInterface { + public: + MOCK_METHOD(void, + Start, + (scoped_refptr<PasswordStoreInterface> password_store, + base::OnceClosure export_cleanup_calback), + (override)); +}; +} // namespace + +class LoginDbDeprecationdRunnerTest : public testing::Test { + public: + LoginDbDeprecationdRunnerTest() = default; + + void SetUp() override { + std::unique_ptr<MockLoginDbDeprecationPasswordExporter> + exporter_unique_ptr = + std::make_unique<MockLoginDbDeprecationPasswordExporter>(); + mock_exporter_ = exporter_unique_ptr.get(); + db_export_runner_ = std::make_unique<LoginDbDeprecationRunner>( + std::move(exporter_unique_ptr)); + mock_password_store_ = base::MakeRefCounted<MockPasswordStoreInterface>(); + } + + LoginDbDeprecationRunner* db_export_runner() { + return db_export_runner_.get(); + } + + MockLoginDbDeprecationPasswordExporter* mock_exporter() { + return mock_exporter_; + } + + scoped_refptr<MockPasswordStoreInterface> mock_password_store() { + return mock_password_store_; + } + + protected: + base::test::ScopedFeatureList feature_list_; + base::test::SingleThreadTaskEnvironment task_env_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME, + base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED}; + + private: + raw_ptr<MockLoginDbDeprecationPasswordExporter> mock_exporter_; + std::unique_ptr<LoginDbDeprecationRunner> db_export_runner_; + scoped_refptr<MockPasswordStoreInterface> mock_password_store_; +}; + +TEST_F(LoginDbDeprecationdRunnerTest, ExportScheduledNotStartingBeforeDelay) { + feature_list_.InitAndEnableFeatureWithParameters( + features::kLoginDbDeprecationAndroid, + {{features::kLoginDbDeprecationExportDelay.name, "5"}}); + base::HistogramTester histogram_tester; + EXPECT_CALL(*mock_exporter(), Start).Times(0); + db_export_runner()->StartExportWithDelay(mock_password_store()); + + // Fast forward by a less time than the task delay. + task_env_.FastForwardBy(base::Seconds(3)); + histogram_tester.ExpectUniqueSample( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kScheduled, + 1); +} + +TEST_F(LoginDbDeprecationdRunnerTest, ExportRunsAfterDelayButDoesntFinish) { + feature_list_.InitAndEnableFeatureWithParameters( + features::kLoginDbDeprecationAndroid, + {{features::kLoginDbDeprecationExportDelay.name, "5"}}); + + base::HistogramTester histogram_tester; + + db_export_runner()->StartExportWithDelay(mock_password_store()); + EXPECT_CALL(*mock_exporter(), Start); + task_env_.FastForwardBy(base::Seconds(5)); + + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kScheduled, + 1); + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kStarted, 1); + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kFinished, 0); +} + +TEST_F(LoginDbDeprecationdRunnerTest, ExportRunsAndFinishes) { + feature_list_.InitAndEnableFeatureWithParameters( + features::kLoginDbDeprecationAndroid, + {{features::kLoginDbDeprecationExportDelay.name, "5"}}); + + base::HistogramTester histogram_tester; + + db_export_runner()->StartExportWithDelay(mock_password_store()); + EXPECT_CALL(*mock_exporter(), Start) + .WillOnce(WithArgs<1>([](base::OnceClosure completion_callback) { + std::move(completion_callback).Run(); + })); + task_env_.FastForwardBy(base::Seconds(5)); + + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kScheduled, + 1); + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kStarted, 1); + histogram_tester.ExpectBucketCount( + kExportProgressHistogram, LoginDbDeprecationExportProgress::kFinished, 1); +} + +} // namespace password_manager
diff --git a/components/password_manager/core/browser/features/password_features.cc b/components/password_manager/core/browser/features/password_features.cc index 3326427..299b906c 100644 --- a/components/password_manager/core/browser/features/password_features.cc +++ b/components/password_manager/core/browser/features/password_features.cc
@@ -158,7 +158,7 @@ BASE_FEATURE(kLoginDbDeprecationAndroid, "LoginDbDeprecationAndroid", base::FEATURE_DISABLED_BY_DEFAULT); -#endif +#endif // BUILDFLAG(IS_ANDROID) BASE_FEATURE(kUsernameFirstFlowWithIntermediateValuesPredictions, "UsernameFirstFlowWithIntermediateValuesPredictions",
diff --git a/components/password_manager/core/browser/features/password_features.h b/components/password_manager/core/browser/features/password_features.h index 72bf261..fe460f47 100644 --- a/components/password_manager/core/browser/features/password_features.h +++ b/components/password_manager/core/browser/features/password_features.h
@@ -164,6 +164,10 @@ // Instead, it either uses the Android-specific storage or an empty backend // if the client isn't eligible for the former. BASE_DECLARE_FEATURE(kLoginDbDeprecationAndroid); + +inline constexpr base::FeatureParam<int> kLoginDbDeprecationExportDelay = { + &kLoginDbDeprecationAndroid, + /*name=*/"login-db-deprecation-export-delay-seconds", /*default_value=*/15}; #endif // BUILDFLAG(IS_ANDROID) // Improves PSL matching capabilities by utilizing PSL-extension list from
diff --git a/components/password_manager/core/browser/features/password_manager_features_util.h b/components/password_manager/core/browser/features/password_manager_features_util.h index b0af9866..8b7d8fab 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util.h +++ b/components/password_manager/core/browser/features/password_manager_features_util.h
@@ -23,8 +23,6 @@ enum class PasswordAccountStorageUserState { // Signed-out user (and no account storage opt-in exists). kSignedOutUser, - // Signed-out user, but an account storage opt-in exists. - kSignedOutAccountStoreUser, // Signed-in non-syncing user, not opted in to the account storage (but may // save passwords to the account storage by default). kSignedInUser, @@ -94,29 +92,6 @@ bool IsOptedInForAccountStorage(const PrefService* pref_service, const syncer::SyncService* sync_service); -// Whether it makes sense to ask the user to opt-in for account-based -// password storage. This is true if the opt-in doesn't exist yet, but all -// other requirements are met (i.e. there is a signed-in user, Sync-the-feature -// is not enabled, etc). -// |pref_service| must not be null. -// |sync_service| may be null (commonly the case in incognito mode), in which -// case this will simply return false. -// See PasswordFeatureManager::ShouldShowAccountStorageOptIn. -bool ShouldShowAccountStorageOptIn(const PrefService* pref_service, - const syncer::SyncService* sync_service); - -// Whether it makes sense to ask the user to signin again to access the -// account-based password storage. This is true if a user on this device -// previously opted into using the account store but is signed-out now. -// |current_page_url| is the current URL, used to suppress the promo on the -// Google signin page (no point in asking the user to sign in while they're -// already doing that). For non-web contexts (e.g. native UIs), it is valid to -// pass an empty GURL. -// See PasswordFeatureManager::ShouldShowAccountStorageReSignin. -bool ShouldShowAccountStorageReSignin(const PrefService* pref_service, - const syncer::SyncService* sync_service, - const GURL& current_page_url); - // Returns the default storage location for signed-in but non-syncing users // (i.e. will new passwords be saved to locally or to the account by default). // Always returns an actual value, never kNotSet. @@ -166,16 +141,6 @@ void OptOutOfAccountStorage(PrefService* pref_service, syncer::SyncService* sync_service); -// Clears the opt-in to using account storage for passwords for the -// current signed-in user (unconsented primary account), as well as all other -// associated settings (e.g. default store choice). -// WARNING: this does not clear the account key from prefs like -// KeepAccountStorageSettingsOnlyForUsers(). -// |pref_service| and |sync_service| must not be null. -// See PasswordFeatureManager::OptOutOfAccountStorageAndClearSettings. -void OptOutOfAccountStorageAndClearSettings(PrefService* pref_service, - syncer::SyncService* sync_service); - // Sets the default storage location for signed-in but non-syncing users. This // store is used for saving new credentials and adding blacking listing entries. // |pref_service| and |sync_service| must not be null. @@ -197,12 +162,6 @@ const PrefService* pref_service, const syncer::SyncService* sync_service); -// Necessary but not sufficient condition to promote account storage opt-in -// for users currently opted-out. In particular for -// ShouldShowAccountStorageOptIn() and ShouldShowAccountStorageReSignin(). -// If the promos are disallowed, no reauth is required to enable the feature. -bool AreAccountStorageOptInPromosAllowed(); - #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) } // namespace password_manager::features_util
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_common.cc b/components/password_manager/core/browser/features/password_manager_features_util_common.cc index e0f5405..f440554 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_common.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_common.cc
@@ -169,10 +169,8 @@ if (sync_service->HasDisableReason( syncer::SyncService::DisableReason::DISABLE_REASON_NOT_SIGNED_IN)) { - // Signed out. Check if any account storage opt-in exists. - return ShouldShowAccountStorageReSignin(pref_service, sync_service, GURL()) - ? PasswordAccountStorageUserState::kSignedOutAccountStoreUser - : PasswordAccountStorageUserState::kSignedOutUser; + // Signed out. + return PasswordAccountStorageUserState::kSignedOutUser; } bool saving_locally = IsDefaultPasswordStoreSet(pref_service, sync_service) && @@ -201,7 +199,6 @@ using UsageLevel = PasswordAccountStorageUsageLevel; switch (ComputePasswordAccountStorageUserState(pref_service, sync_service)) { case UserState::kSignedOutUser: - case UserState::kSignedOutAccountStoreUser: case UserState::kSignedInUser: case UserState::kSignedInUserSavingLocally: return UsageLevel::kNotUsingAccountStorage;
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc b/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc index 0b67f59..2969f80 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_desktop.cc
@@ -98,48 +98,6 @@ } // namespace -bool ShouldShowAccountStorageOptIn(const PrefService* pref_service, - const syncer::SyncService* sync_service) { - if (!AreAccountStorageOptInPromosAllowed()) { - return false; - } - - // Show the opt-in if the user is eligible, but not yet opted in. - return internal::IsUserEligibleForAccountStorage(pref_service, - sync_service) && - !IsOptedInForAccountStorage(pref_service, sync_service); -} - -bool ShouldShowAccountStorageReSignin(const PrefService* pref_service, - const syncer::SyncService* sync_service, - const GURL& current_page_url) { - if (!AreAccountStorageOptInPromosAllowed()) { - return false; - } - - // Checks that the sync_service is not null and the feature is enabled. - // IsUserEligibleForAccountStorage() doesn't fit because it's false for - // signed-out users. - if (!internal::CanAccountStorageBeEnabled(pref_service, sync_service)) { - return false; // Opt-in wouldn't work here, so don't show the re-signin. - } - - // In order to show a re-signin prompt, no user may be logged in. - if (!sync_service->HasDisableReason( - syncer::SyncService::DisableReason::DISABLE_REASON_NOT_SIGNED_IN)) { - return false; - } - - if (gaia::HasGaiaSchemeHostPort(current_page_url)) { - return false; - } - - // Show the opt-in if any known previous user opted into using the account - // storage before and might want to access it again. - return sync_service->GetUserSettings() - ->GetNumberOfAccountsWithPasswordsSelected() > 0; -} - PasswordForm::Store GetDefaultPasswordStore( const PrefService* pref_service, const syncer::SyncService* sync_service) { @@ -246,30 +204,6 @@ .SetDefaultStore(PasswordForm::Store::kProfileStore); } -void OptOutOfAccountStorageAndClearSettings(PrefService* pref_service, - syncer::SyncService* sync_service) { - DCHECK(pref_service); - DCHECK(sync_service); - CHECK(CanCreateAccountStore(pref_service)); - - const GaiaId gaia_id = sync_service->GetAccountInfo().gaia; - if (gaia_id.empty()) { - // In rare cases, it could happen that the account went away since the - // opt-out UI was triggered. - return; - } - - // Note SyncUserSettings::SetSelectedType() won't clear the gaia id hash - // but that's not required here. - syncer::SyncUserSettings* sync_user_settings = - sync_service->GetUserSettings(); - sync_user_settings->SetSelectedType(syncer::UserSelectableType::kPasswords, - false); - ScopedAccountStorageSettingsUpdate(pref_service, - GaiaIdHash::FromGaiaId(gaia_id)) - .ClearAllSettings(); -} - void SetDefaultPasswordStore(PrefService* pref_service, const syncer::SyncService* sync_service, PasswordForm::Store default_store) { @@ -325,18 +259,6 @@ return internal::IsUserEligibleForAccountStorage(pref_service, sync_service); } -bool AreAccountStorageOptInPromosAllowed() { - // Disallow promos when kExplicitBrowserSigninUIOnDesktop is on. - // - For users who went through explicit sign-in, account storage is enabled - // by default. If they bothered to disable this feature, they should not be - // spammed into re-enabling it. - // - Users who went through implicit sign-in will be migrated to explicit - // sign-in in the future, at which point the above applies. In the meantime, - // it's not worth keeping the promos UI. Most users in this group have seen - // the promo by now and have accepted *if* they want the feature. - return !switches::IsExplicitBrowserSigninUIOnDesktopEnabled(); -} - // Note: See also password_manager_features_util_common.cc for shared // (cross-platform) and password_manager_features_util_mobile.cc for // mobile-specific implementations.
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_mobile.cc b/components/password_manager/core/browser/features/password_manager_features_util_mobile.cc index d10d53f4..67f9fb7c 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_mobile.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_mobile.cc
@@ -11,18 +11,6 @@ namespace password_manager::features_util { -bool ShouldShowAccountStorageOptIn(const PrefService* pref_service, - const syncer::SyncService* sync_service) { - return false; -} - -bool ShouldShowAccountStorageReSignin(const PrefService* pref_service, - const syncer::SyncService* sync_service, - const GURL& current_page_url) { - // On Android and iOS, there is no re-signin promo. - return false; -} - PasswordForm::Store GetDefaultPasswordStore( const PrefService* pref_service, const syncer::SyncService* sync_service) {
diff --git a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc index d044a3af..e2d7fdd 100644 --- a/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc +++ b/components/password_manager/core/browser/features/password_manager_features_util_unittest.cc
@@ -121,7 +121,6 @@ // Since the account storage is disabled, the profile store should be the // the default. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); @@ -151,7 +150,6 @@ // Initially the user is not signed in, so everything is off/local. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); @@ -160,8 +158,6 @@ // By default, the user is not opted in, but eligible. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_NE(switches::IsExplicitBrowserSigninUIOnDesktopEnabled(), - ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_FALSE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); @@ -169,7 +165,6 @@ // Opt in! OptInToAccountStorage(&pref_service_, &sync_service_); EXPECT_TRUE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); // Now the default is saving to the account. EXPECT_TRUE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), @@ -187,7 +182,6 @@ // in, save to profile store). sync_service_.SetSignedOut(); EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_FALSE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); @@ -254,8 +248,6 @@ // In this state, the user could opt in to the account storage. ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - ASSERT_NE(switches::IsExplicitBrowserSigninUIOnDesktopEnabled(), - ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); // Now the user enables Sync-the-feature. sync_service_.SetSignedIn(signin::ConsentLevel::kSync, account); @@ -263,38 +255,6 @@ // Now the account-storage opt-in should *not* be available anymore. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); -} - -TEST_F(PasswordManagerFeaturesUtilWithAccountStorageForNonSyncingTest, - NoOptInOfferedIfExplicitSigninUIEnabled) { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeatures( - /*enabled_features=*/{switches::kExplicitBrowserSigninUIOnDesktop}, - /*disabled_features=*/{}); - pref_service_.SetBoolean(::prefs::kExplicitBrowserSignin, true); - CoreAccountInfo account; - account.email = "foo@account.com"; - account.gaia = GaiaId("foo"); - account.account_id = CoreAccountId::FromGaiaId(account.gaia); - sync_service_.SetSignedIn(signin::ConsentLevel::kSignin, account); - OptOutOfAccountStorage(&pref_service_, &sync_service_); - ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - - // The opt-in should not be shown, kExplicitBrowserSigninUIOnDesktop is - // enabled. The toggle is always shown. - EXPECT_FALSE(AreAccountStorageOptInPromosAllowed()); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); - EXPECT_TRUE( - ShouldShowAccountStorageSettingToggle(&pref_service_, &sync_service_)); - - pref_service_.SetBoolean(::prefs::kExplicitBrowserSignin, false); - - // Explicit and implicit sign-ins are treated alike. - EXPECT_FALSE(AreAccountStorageOptInPromosAllowed()); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); - EXPECT_TRUE( - ShouldShowAccountStorageSettingToggle(&pref_service_, &sync_service_)); } #else @@ -344,8 +304,6 @@ #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) // The account storage is available in principle, so the opt-in will be shown. ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - ASSERT_NE(switches::IsExplicitBrowserSigninUIOnDesktopEnabled(), - ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); ASSERT_FALSE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); // Opt in. @@ -353,7 +311,6 @@ #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) ASSERT_TRUE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - ASSERT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) EXPECT_TRUE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); #else @@ -370,7 +327,6 @@ // IsOptedInForAccountStorage() must return false because the user is syncing. // On mobile, since no explicit opt-in exists, the (implicit) opt-in is gone. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); } @@ -391,7 +347,6 @@ // The account-scoped storage should be unavailable. ASSERT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); @@ -403,7 +358,6 @@ // The user is *not* considered opted in (even though the corresponding pref // is set) since the account storage is completely unavailable. EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_FALSE(ShouldShowAccountStorageOptIn(&pref_service_, &sync_service_)); EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), PasswordForm::Store::kProfileStore); #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) @@ -411,39 +365,6 @@ #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) TEST_F(PasswordManagerFeaturesUtilWithAccountStorageForNonSyncingTest, - OptOutAndClearSettingsClearsStorePreference) { - base::HistogramTester histogram_tester; - - CoreAccountInfo account; - account.email = "name@account.com"; - account.gaia = GaiaId("name"); - account.account_id = CoreAccountId::FromGaiaId(account.gaia); - - // The SyncService is running in transport mode. - sync_service_.SetSignedIn(signin::ConsentLevel::kSignin, account); - - // Opt in and set default store to profile. - OptInToAccountStorage(&pref_service_, &sync_service_); - ASSERT_TRUE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - SetDefaultPasswordStore(&pref_service_, &sync_service_, - PasswordForm::Store::kProfileStore); - - // Opt out. - OptOutOfAccountStorageAndClearSettings(&pref_service_, &sync_service_); - - // The default store pref should have been erased. - EXPECT_FALSE(IsDefaultPasswordStoreSet(&pref_service_, &sync_service_)); - EXPECT_FALSE(IsOptedInForAccountStorage(&pref_service_, &sync_service_)); - EXPECT_EQ(GetDefaultPasswordStore(&pref_service_, &sync_service_), - PasswordForm::Store::kProfileStore); - - // The change to the profile store above should have been recorded. Clearing - // the pref does not get recorded in this histogram! - histogram_tester.ExpectUniqueSample("PasswordManager.DefaultPasswordStoreSet", - PasswordForm::Store::kProfileStore, 1); -} - -TEST_F(PasswordManagerFeaturesUtilWithAccountStorageForNonSyncingTest, OptOutSetsProfileStorePreference) { CoreAccountInfo account; account.email = "name@account.com";
diff --git a/components/password_manager/core/browser/mock_password_feature_manager.h b/components/password_manager/core/browser/mock_password_feature_manager.h index 402ba49f..443459a 100644 --- a/components/password_manager/core/browser/mock_password_feature_manager.h +++ b/components/password_manager/core/browser/mock_password_feature_manager.h
@@ -18,11 +18,6 @@ MOCK_METHOD(bool, IsGenerationEnabled, (), (override, const)); MOCK_METHOD(bool, IsOptedInForAccountStorage, (), (override, const)); - MOCK_METHOD(bool, ShouldShowAccountStorageOptIn, (), (override, const)); - MOCK_METHOD(bool, - ShouldShowAccountStorageReSignin, - (const GURL&), - (override, const)); MOCK_METHOD(PasswordForm::Store, GetDefaultPasswordStore, (), @@ -41,11 +36,6 @@ #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) MOCK_METHOD(void, OptInToAccountStorage, (), (override)); MOCK_METHOD(void, OptOutOfAccountStorage, (), (override)); - MOCK_METHOD(void, OptOutOfAccountStorageAndClearSettings, (), (override)); - MOCK_METHOD(bool, - ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally, - (), - (override, const)); MOCK_METHOD(void, SetDefaultPasswordStore, (const PasswordForm::Store& store),
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc index 3c87deaa..71a0783 100644 --- a/components/password_manager/core/browser/password_autofill_manager.cc +++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -70,15 +70,6 @@ using autofill::password_generation::PasswordGenerationType; using IsLoading = autofill::Suggestion::IsLoading; -// Entry showing the empty state (i.e. no passwords found in account-storage). -Suggestion CreateAccountStorageEmptyEntry() { - Suggestion suggestion( - l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_NO_ACCOUNT_STORE_MATCHES)); - suggestion.type = autofill::SuggestionType::kPasswordAccountStorageEmpty; - suggestion.icon = Suggestion::Icon::kEmpty; - return suggestion; -} - // If `suggestion` was made for an empty username, then return the empty // string, otherwise return `suggestion`. std::u16string GetUsernameFromSuggestion(const std::u16string& suggestion) { @@ -95,32 +86,12 @@ }); } -bool HasLoadingSuggestion(base::span<const Suggestion> suggestions, - autofill::SuggestionType item_id) { - return base::ranges::any_of(suggestions, [&item_id](const auto& suggestion) { - return suggestion.type == item_id && suggestion.is_loading; - }); -} - std::string GetGuidFromSuggestion(const Suggestion& suggestion) { return absl::holds_alternative<Suggestion::Guid>(suggestion.payload) ? suggestion.GetPayload<Suggestion::Guid>().value() : std::string(); } -std::vector<Suggestion> SetUnlockLoadingState( - std::vector<Suggestion> suggestions, - autofill::SuggestionType type, - IsLoading is_loading) { - using enum autofill::SuggestionType; - DCHECK(type == kPasswordAccountStorageOptIn || - type == kPasswordAccountStorageReSignin || - type == kPasswordAccountStorageOptInAndGenerate); - auto unlock_iter = base::ranges::find(suggestions, type, &Suggestion::type); - unlock_iter->is_loading = is_loading; - return suggestions; -} - std::vector<Suggestion> PrepareLoadingStateSuggestions( std::vector<Suggestion> current_suggestions, const Suggestion& selected_suggestion) { @@ -147,20 +118,6 @@ }); } -void LogAccountStoredPasswordsCountInFillDataAfterUnlock( - const autofill::PasswordFormFillData& fill_data) { - int account_store_passwords_count = - base::ranges::count_if(fill_data.additional_logins, - [](const autofill::PasswordAndMetadata& metadata) { - return metadata.uses_account_store; - }); - if (fill_data.preferred_login.uses_account_store) { - ++account_store_passwords_count; - } - metrics_util::LogPasswordsCountFromAccountStoreAfterUnlock( - account_store_passwords_count); -} - } // namespace //////////////////////////////////////////////////////////////////////////////// @@ -201,16 +158,8 @@ const Suggestion& suggestion) { ClearPreviewedForm(); if (suggestion.type == autofill::SuggestionType::kAllSavedPasswordsEntry || - suggestion.type == - autofill::SuggestionType::kPasswordAccountStorageEmpty || suggestion.type == autofill::SuggestionType::kGeneratePasswordEntry || suggestion.type == - autofill::SuggestionType::kPasswordAccountStorageOptIn || - suggestion.type == - autofill::SuggestionType::kPasswordAccountStorageReSignin || - suggestion.type == - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate || - suggestion.type == autofill::SuggestionType::kWebauthnSignInWithAnotherDevice) { return; } @@ -219,28 +168,6 @@ suggestion.type); } -void PasswordAutofillManager::OnUnlockItemAccepted( - autofill::SuggestionType type) { - using metrics_util::PasswordDropdownSelectedOption; - using enum autofill::SuggestionType; - DCHECK(type == kPasswordAccountStorageOptIn || - type == kPasswordAccountStorageOptInAndGenerate); - - std::vector<Suggestion> suggestions{ - autofill_client_->GetAutofillSuggestions().begin(), - autofill_client_->GetAutofillSuggestions().end()}; - UpdatePopup( - SetUnlockLoadingState(std::move(suggestions), type, IsLoading(true))); - signin_metrics::ReauthAccessPoint reauth_access_point = - type == kPasswordAccountStorageOptIn - ? signin_metrics::ReauthAccessPoint::kAutofillDropdown - : signin_metrics::ReauthAccessPoint::kGeneratePasswordDropdown; - password_client_->TriggerReauthForPrimaryAccount( - reauth_access_point, - base::BindOnce(&PasswordAutofillManager::OnUnlockReauthCompleted, - weak_ptr_factory_.GetWeakPtr(), type)); -} - void PasswordAutofillManager::DidAcceptSuggestion( const Suggestion& suggestion, const SuggestionMetadata& metadata) { @@ -253,7 +180,6 @@ password_client_->IsOffTheRecord()); break; case autofill::SuggestionType::kAllSavedPasswordsEntry: - case autofill::SuggestionType::kPasswordAccountStorageEmpty: password_client_->NavigateToManagePasswordsPage( ManagePasswordsReferrer::kPasswordDropdown); metrics_util::LogPasswordDropdownItemSelected( @@ -267,23 +193,6 @@ UserAction::kShowAllPasswordsWhileSomeAreSuggested); } break; - case autofill::SuggestionType::kPasswordAccountStorageReSignin: - password_client_->TriggerSignIn( - signin_metrics::AccessPoint::ACCESS_POINT_AUTOFILL_DROPDOWN); - metrics_util::LogPasswordDropdownItemSelected( - PasswordDropdownSelectedOption::kResigninToUnlockAccountStore, - password_client_->IsOffTheRecord()); - break; - case autofill::SuggestionType::kPasswordAccountStorageOptIn: - case autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate: - OnUnlockItemAccepted(suggestion.type); - metrics_util::LogPasswordDropdownItemSelected( - suggestion.type == - autofill::SuggestionType::kPasswordAccountStorageOptIn - ? PasswordDropdownSelectedOption::kUnlockAccountStorePasswords - : PasswordDropdownSelectedOption::kUnlockAccountStoreGeneration, - password_client_->IsOffTheRecord()); - break; case autofill::SuggestionType::kWebauthnCredential: metrics_util::LogPasswordDropdownItemSelected( PasswordDropdownSelectedOption::kWebAuthn, @@ -397,29 +306,11 @@ if (!autofill_client_ || autofill_client_->GetAutofillSuggestions().empty()) { return; } - // Only log account-stored passwords if the unlock just happened. - if (HasLoadingSuggestion( - autofill_client_->GetAutofillSuggestions(), - autofill::SuggestionType::kPasswordAccountStorageOptIn)) { - LogAccountStoredPasswordsCountInFillDataAfterUnlock(fill_data); - } UpdatePopup(suggestion_generator_.GetSuggestionsForDomain( fill_data, page_favicon_, std::u16string(), OffersGeneration(false), ShowPasswordSuggestions(true), ShowWebAuthnCredentials(false))); } -void PasswordAutofillManager::OnNoCredentialsFound() { - if (!autofill_client_ || - !HasLoadingSuggestion( - autofill_client_->GetAutofillSuggestions(), - autofill::SuggestionType::kPasswordAccountStorageOptIn)) { - return; - } - metrics_util::LogPasswordsCountFromAccountStoreAfterUnlock( - /*account_store_passwords_count=*/0); - UpdatePopup({CreateAccountStorageEmptyEntry()}); -} - void PasswordAutofillManager::DeleteFillData() { fill_data_.reset(); if (autofill_client_) { @@ -664,27 +555,6 @@ } } -void PasswordAutofillManager::OnUnlockReauthCompleted( - autofill::SuggestionType type, - PasswordManagerClient::ReauthSucceeded reauth_succeeded) { - autofill_client_->ShowAutofillSuggestions(last_popup_open_args_, - weak_ptr_factory_.GetWeakPtr()); - autofill_client_->PinAutofillSuggestions(); - if (reauth_succeeded) { - if (type == - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate) { - password_client_->GeneratePassword(PasswordGenerationType::kAutomatic); - autofill_client_->HideAutofillSuggestions( - autofill::SuggestionHidingReason::kAcceptSuggestion); - } - return; - } - UpdatePopup(SetUnlockLoadingState( - std::move(last_popup_open_args_).suggestions, type, IsLoading(false))); - // Resets the popup arguments until the next ShowPopup() call. - last_popup_open_args_ = {}; -} - void PasswordAutofillManager::OnBiometricReauthCompleted( const autofill::PasswordAndMetadata& password_and_metadata, bool auth_succeeded) {
diff --git a/components/password_manager/core/browser/password_autofill_manager.h b/components/password_manager/core/browser/password_autofill_manager.h index 1d085f8..a729414 100644 --- a/components/password_manager/core/browser/password_autofill_manager.h +++ b/components/password_manager/core/browser/password_autofill_manager.h
@@ -107,10 +107,6 @@ // Called when main frame navigates. Not called for in-page navigations. void DidNavigateMainFrame(); - // Called if no suggestions were found. Assumed to be mutually exclusive with - // |OnAddPasswordFillData|. - void OnNoCredentialsFound(); - PasswordManualFallbackMetricsRecorder& GetPasswordManualFallbackMetricsRecorder() { return CHECK_DEREF(manual_fallback_metrics_recorder_.get());
diff --git a/components/password_manager/core/browser/password_autofill_manager_unittest.cc b/components/password_manager/core/browser/password_autofill_manager_unittest.cc index 2ba4af9f..a701ecb2 100644 --- a/components/password_manager/core/browser/password_autofill_manager_unittest.cc +++ b/components/password_manager/core/browser/password_autofill_manager_unittest.cc
@@ -124,8 +124,6 @@ "PasswordManager.PasswordDropdownItemSelected"; constexpr char kDropdownShownHistogram[] = "PasswordManager.PasswordDropdownShown"; -constexpr char kCredentialsCountFromAccountStoreAfterUnlockHistogram[] = - "PasswordManager.CredentialsCountFromAccountStoreAfterUnlock"; constexpr auto kDefaultTriggerSource = autofill::AutofillSuggestionTriggerSource::kFormControlElementClicked; @@ -181,23 +179,7 @@ return identity_test_env_; } - void SetAccountStorageOptIn(bool opt_in) { - ON_CALL(*feature_manager_.get(), ShouldShowAccountStorageOptIn) - .WillByDefault(Return(!opt_in)); - } - - void SetNeedsReSigninForAccountStorage(bool needs_signin) { - ON_CALL(*feature_manager_.get(), ShouldShowAccountStorageReSignin) - .WillByDefault(Return(needs_signin)); - } - MOCK_METHOD(void, GeneratePassword, (PasswordGenerationType), (override)); - MOCK_METHOD(void, - TriggerReauthForPrimaryAccount, - (signin_metrics::ReauthAccessPoint, - base::OnceCallback<void(ReauthSucceeded)>), - (override)); - MOCK_METHOD(void, TriggerSignIn, (signin_metrics::AccessPoint), (override)); MOCK_METHOD(favicon::FaviconService*, GetFaviconService, (), (override)); MOCK_METHOD(void, NavigateToManagePasswordsPage, @@ -266,9 +248,6 @@ } void CreateTestSuggestions( - bool has_opt_in_and_fill, - bool has_opt_in_and_generate, - bool has_re_signin, std::optional<size_t> loading_index = std::nullopt) { autofill_suggestions_.clear(); autofill_suggestions_.emplace_back( @@ -279,27 +258,6 @@ /*icon=*/Suggestion::Icon::kNoIcon, /*type=*/ autofill::SuggestionType::kAllSavedPasswordsEntry); - if (has_opt_in_and_fill) { - autofill_suggestions_.emplace_back( - /*value=*/"Unlock passwords and fill", /*label=*/"", - /*icon=*/Suggestion::Icon::kNoIcon, - /*type=*/ - autofill::SuggestionType::kPasswordAccountStorageOptIn); - } - if (has_opt_in_and_generate) { - autofill_suggestions_.emplace_back( - /*value=*/"Unlock passwords and generate", /*label=*/"", - /*icon=*/Suggestion::Icon::kNoIcon, - /*type=*/ - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate); - } - if (has_re_signin) { - autofill_suggestions_.emplace_back( - /*value=*/"Sign in to access passwords", /*label=*/"", - /*icon=*/Suggestion::Icon::kNoIcon, - /*type=*/ - autofill::SuggestionType::kPasswordAccountStorageReSignin); - } if (loading_index) { autofill_suggestions_[*loading_index].is_loading = Suggestion::IsLoading(true); @@ -588,397 +546,6 @@ SuggestionPosition{.row = 0}); } -// Test that the popup is updated once account-stored suggestions are unlocked. -TEST_F(PasswordAutofillManagerTest, ShowOptInAndFillButton) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - - // Show the popup and verify the suggestions. - autofill::AutofillClient::PopupOpenArgs open_args; - EXPECT_CALL(autofill_client, ShowAutofillSuggestions) - .WillOnce(SavePopupOpenArgs(open_args)); - password_autofill_manager_->OnShowPasswordSuggestions( - kElementId, kDefaultTriggerSource, base::i18n::RIGHT_TO_LEFT, - std::u16string(), ShowWebAuthnCredentials(false), gfx::RectF()); - EXPECT_THAT(open_args.suggestions, - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kPasswordAccountStorageOptIn, - autofill::SuggestionType::kSeparator, - autofill::SuggestionType::kAllSavedPasswordsEntry)); - EXPECT_EQ(open_args.trigger_source, - autofill::AutofillSuggestionTriggerSource::kPasswordManager); -} - -// Test that a popup without entries doesn't show "Manage all Passwords". -TEST_F(PasswordAutofillManagerTest, SuppressManageAllWithoutPasswords) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - password_autofill_manager_->DeleteFillData(); - client.SetAccountStorageOptIn(false); - - // Show the popup and verify the suggestions. - autofill::AutofillClient::PopupOpenArgs open_args; - EXPECT_CALL(autofill_client, ShowAutofillSuggestions) - .WillOnce(SavePopupOpenArgs(open_args)); - EXPECT_CALL(*client.mock_driver(), CanShowAutofillUi).WillOnce(Return(true)); - password_autofill_manager_->OnShowPasswordSuggestions( - kElementId, kDefaultTriggerSource, base::i18n::RIGHT_TO_LEFT, - std::u16string(), ShowWebAuthnCredentials(false), gfx::RectF()); - EXPECT_THAT(open_args.suggestions, - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordAccountStorageOptIn)); - EXPECT_EQ(open_args.trigger_source, - autofill::AutofillSuggestionTriggerSource::kPasswordManager); -} - -// Test that the popup is updated once account-stored suggestions are unlocked. -TEST_F(PasswordAutofillManagerTest, ShowResigninButton) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetNeedsReSigninForAccountStorage(true); - - // Show the popup and verify the suggestions. - autofill::AutofillClient::PopupOpenArgs open_args; - EXPECT_CALL(autofill_client, ShowAutofillSuggestions) - .WillOnce(SavePopupOpenArgs(open_args)); - password_autofill_manager_->OnShowPasswordSuggestions( - kElementId, kDefaultTriggerSource, base::i18n::RIGHT_TO_LEFT, - std::u16string(), ShowWebAuthnCredentials(false), gfx::RectF()); - EXPECT_THAT(open_args.suggestions, - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kPasswordAccountStorageReSignin, - autofill::SuggestionType::kSeparator, - autofill::SuggestionType::kAllSavedPasswordsEntry)); - EXPECT_EQ(open_args.trigger_source, - autofill::AutofillSuggestionTriggerSource::kPasswordManager); -} - -// Test that the popup is updated once "opt in and fill" is clicked. -TEST_F(PasswordAutofillManagerTest, - ClickOnOptInAndFillPutsPopupInWaitingState) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/true, - /*has_opt_in_and_generate*/ false, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. The - // update puts the unlock button into a loading state. - std::vector<autofill::Suggestion> suggestions; - EXPECT_CALL(autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kAllSavedPasswordsEntry, - autofill::SuggestionType::kPasswordAccountStorageOptIn), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)) - .WillOnce(testing::SaveArg<0>(&suggestions)); - EXPECT_CALL(client, TriggerReauthForPrimaryAccount); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptIn, - test_username_), - SuggestionPosition{.row = 1}); - - ASSERT_GE(suggestions.size(), 2u); - EXPECT_TRUE(suggestions.back().is_loading); -} - -// Test that the popup is updated once "opt in and generate" is clicked. -TEST_F(PasswordAutofillManagerTest, - ClickOnOptInAndGeneratePutsPopupInWaitingState) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/false, - /*has_opt_in_and_generate*/ true, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. The - // update puts the unlock-to-generate button in a loading state. - std::vector<autofill::Suggestion> suggestions; - EXPECT_CALL(autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kAllSavedPasswordsEntry, - autofill::SuggestionType:: - kPasswordAccountStorageOptInAndGenerate), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)) - .WillOnce(testing::SaveArg<0>(&suggestions)); - EXPECT_CALL(client, TriggerReauthForPrimaryAccount); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate, - test_username_), - SuggestionPosition{.row = 1}); - - ASSERT_GE(suggestions.size(), 2u); - EXPECT_TRUE(suggestions.back().is_loading); -} - -// Test that the popup is updated once "opt in and fill" is clicked. -TEST_F(PasswordAutofillManagerTest, ClickOnReSiginTriggersSigninAndHides) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetNeedsReSigninForAccountStorage(false); - testing::Mock::VerifyAndClearExpectations(&autofill_client); - - EXPECT_CALL(client, - TriggerSignIn( - signin_metrics::AccessPoint::ACCESS_POINT_AUTOFILL_DROPDOWN)); - EXPECT_CALL(autofill_client, HideAutofillSuggestions); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageReSignin, - test_username_), - SuggestionPosition{.row = 1}); -} - -// Test that the popup is updated once "opt in and fill" is clicked and the -// reauth fails. -TEST_F(PasswordAutofillManagerTest, FailedOptInAndFillUpdatesPopup) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - std::vector<autofill::Suggestion> suggestions; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/true, - /*has_opt_in_and_generate*/ false, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. - // First the popup enters the waiting state. As soon as the waiting state is - // pending, the next update resets the popup. - EXPECT_CALL(autofill_client, UpdateAutofillSuggestions).WillOnce([&] { - testing::Mock::VerifyAndClear(&autofill_client); - EXPECT_CALL(client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kAutofillDropdown, _)) - .WillOnce(RunOnceCallback<1>(ReauthSucceeded(false))); - EXPECT_CALL(autofill_client, ShowAutofillSuggestions); - EXPECT_CALL(autofill_client, PinAutofillSuggestions); - EXPECT_CALL( - autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kAllSavedPasswordsEntry, - autofill::SuggestionType::kPasswordAccountStorageOptIn), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)) - .WillOnce(testing::SaveArg<0>(&suggestions)); - }); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptIn, - test_username_), - SuggestionPosition{.row = 1}); - - ASSERT_GE(suggestions.size(), 2u); - EXPECT_FALSE(suggestions.back().is_loading); -} - -// Test that the popup is updated once "opt in and generate" is clicked and the -// reauth fails. -TEST_F(PasswordAutofillManagerTest, FailedOptInAndGenerateUpdatesPopup) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - std::vector<autofill::Suggestion> suggestions; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/false, - /*has_opt_in_and_generate*/ true, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. - // First the popup enters the waiting state. As soon as the waiting state is - // pending, the next update resets the popup. - EXPECT_CALL(autofill_client, UpdateAutofillSuggestions).WillOnce([&] { - testing::Mock::VerifyAndClear(&autofill_client); - EXPECT_CALL( - client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kGeneratePasswordDropdown, _)) - .WillOnce(RunOnceCallback<1>(ReauthSucceeded(false))); - EXPECT_CALL(autofill_client, ShowAutofillSuggestions); - EXPECT_CALL(autofill_client, PinAutofillSuggestions); - EXPECT_CALL( - autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kAllSavedPasswordsEntry, - autofill::SuggestionType:: - kPasswordAccountStorageOptInAndGenerate), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)) - .WillOnce(testing::SaveArg<0>(&suggestions)); - }); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate, - test_username_), - SuggestionPosition{.row = 1}); - - ASSERT_GE(suggestions.size(), 2u); - EXPECT_FALSE(suggestions.back().is_loading); -} - -// Test that the popup is updated once "opt in and fill" is clicked and the -// reauth is successful. -TEST_F(PasswordAutofillManagerTest, SuccessfullOptInAndFillHidesPopup) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/true, - /*has_opt_in_and_generate*/ false, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. - EXPECT_CALL(autofill_client, UpdateAutofillSuggestions); - EXPECT_CALL(client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kAutofillDropdown, _)) - .WillOnce(RunOnceCallback<1>(ReauthSucceeded(true))); - EXPECT_CALL(autofill_client, ShowAutofillSuggestions); - EXPECT_CALL(autofill_client, PinAutofillSuggestions); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptIn, - test_username_), - SuggestionPosition{.row = 1}); -} - -// Test that the popup is hidden and password generation is triggered once -// "opt in and generate" is clicked and the reauth is successful. -TEST_F(PasswordAutofillManagerTest, - SuccessfullOptInAndGenerateHidesPopupAndTriggersGeneration) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(false); - autofill_client.CreateTestSuggestions(/*has_opt_in_and_fill=*/false, - /*has_opt_in_and_generate*/ true, - /*has_re_signin=*/false); - - // Accepting a suggestion should trigger a call to update the popup. - EXPECT_CALL(autofill_client, UpdateAutofillSuggestions); - EXPECT_CALL( - client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kGeneratePasswordDropdown, _)) - .WillOnce(RunOnceCallback<1>(ReauthSucceeded(true))); - EXPECT_CALL(autofill_client, ShowAutofillSuggestions); - EXPECT_CALL(autofill_client, PinAutofillSuggestions); - EXPECT_CALL(autofill_client, - HideAutofillSuggestions( - autofill::SuggestionHidingReason::kAcceptSuggestion)) - .Times(testing::AtLeast(1)); - EXPECT_CALL(client, GeneratePassword(PasswordGenerationType::kAutomatic)); - - password_autofill_manager_->DidAcceptSuggestion( - autofill::test::CreateAutofillSuggestion( - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate, - test_username_), - SuggestionPosition{.row = 1}); -} - -// Test that the popup shows an empty state if opted-into an empty store. -TEST_F(PasswordAutofillManagerTest, SuccessfullOptInMayShowEmptyState) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - base::HistogramTester histograms; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(true); - - // Only the unlock button was available. After being clicked, it's in a - // loading state which the DeleteFillData() call will end. - std::vector<Suggestion> unlock_suggestion; - unlock_suggestion.emplace_back( - /*main_text=*/"Unlock passwords and fill", /*label=*/"", - /*icon=*/Suggestion::Icon::kNoIcon, - /*type=*/ - autofill::SuggestionType::kPasswordAccountStorageOptIn); - unlock_suggestion[0].is_loading = Suggestion::IsLoading(true); - autofill_client.set_autofill_suggestions(std::move(unlock_suggestion)); - - EXPECT_CALL( - autofill_client, - HideAutofillSuggestions(autofill::SuggestionHidingReason::kStaleData)); - EXPECT_CALL(autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kPasswordAccountStorageEmpty), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)); - - password_autofill_manager_->DeleteFillData(); - password_autofill_manager_->OnNoCredentialsFound(); - histograms.ExpectBucketCount( - kCredentialsCountFromAccountStoreAfterUnlockHistogram, 0, 1); -} - -// Test that the popup is updated once "opt in and fill" is clicked". -TEST_F(PasswordAutofillManagerTest, - AddOnFillDataAfterOptInAndFillPopulatesPopup) { - TestPasswordManagerClient client; - NiceMock<MockAutofillClient> autofill_client; - base::HistogramTester histograms; - InitializePasswordAutofillManager(&client, &autofill_client); - client.SetAccountStorageOptIn(true); - - // Once the data is loaded, an update fills the new passwords: - autofill::PasswordFormFillData new_data = CreateTestFormFillData(); - new_data.preferred_login.uses_account_store = true; - autofill::PasswordAndMetadata additional; - additional.realm = "https://foobarrealm.org"; - additional.username_value = u"bar.foo@example.com"; - new_data.additional_logins.push_back(std::move(additional)); - - // Opt-in is at third position. - autofill_client.CreateTestSuggestions( - /*has_opt_in_and_fill=*/true, /*has_opt_in_and_generate*/ false, - /*has_re_signin=*/false, /*loading_index=*/2); - - EXPECT_CALL( - autofill_client, - HideAutofillSuggestions(autofill::SuggestionHidingReason::kStaleData)); - EXPECT_CALL(autofill_client, - UpdateAutofillSuggestions( - SuggestionVectorIdsAre( - autofill::SuggestionType::kAccountStoragePasswordEntry, - autofill::SuggestionType::kPasswordEntry, - autofill::SuggestionType::kSeparator, - autofill::SuggestionType::kAllSavedPasswordsEntry), - FillingProduct::kPassword, - autofill::AutofillSuggestionTriggerSource::kPasswordManager)); - - password_autofill_manager_->DeleteFillData(); - password_autofill_manager_->OnAddPasswordFillData(new_data); - histograms.ExpectBucketCount( - kCredentialsCountFromAccountStoreAfterUnlockHistogram, 1, 1); -} - // Test that `OnShowPasswordSuggestions` correctly matches the given // FormFieldData to the known PasswordFormFillData, and extracts the right // suggestions. @@ -1378,41 +945,6 @@ Suggestion::Text::IsPrimary(true)))); } -// Test that if the "opt in and generate" button gets displayed, the regular -// generation button does not. -TEST_F(PasswordAutofillManagerTest, - MaybeShowPasswordSuggestionsWithAccountPasswordsEnabled) { - TestPasswordManagerClient client; - client.SetAccountStorageOptIn(false); - - NiceMock<MockAutofillClient> autofill_client; - InitializePasswordAutofillManager(&client, &autofill_client); - - autofill::PasswordFormFillData data = CreateTestFormFillData(); - - favicon::MockFaviconService favicon_service; - EXPECT_CALL(client, GetFaviconService()).WillOnce(Return(&favicon_service)); - EXPECT_CALL(favicon_service, GetFaviconImageForPageURL(data.url, _, _)); - password_autofill_manager_->OnAddPasswordFillData(data); - - auto opt_in_and_generate_id = - autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate; - auto regular_generate_id = autofill::SuggestionType::kGeneratePasswordEntry; - autofill::AutofillClient::PopupOpenArgs open_args; - EXPECT_CALL(autofill_client, ShowAutofillSuggestions) - .WillOnce(SavePopupOpenArgs(open_args)); - - password_autofill_manager_->MaybeShowPasswordSuggestionsWithGeneration( - gfx::RectF(), base::i18n::RIGHT_TO_LEFT, - /*show_password_suggestions=*/true); - EXPECT_THAT(open_args.suggestions, - Not(Contains(Field(&autofill::Suggestion::type, - Eq(regular_generate_id))))); - EXPECT_THAT( - open_args.suggestions, - Contains(Field(&autofill::Suggestion::type, Eq(opt_in_and_generate_id)))); -} - TEST_F(PasswordAutofillManagerTest, DisplayAccountSuggestionsIndicatorIcon) { TestPasswordManagerClient client; NiceMock<MockAutofillClient> autofill_client;
diff --git a/components/password_manager/core/browser/password_feature_manager.h b/components/password_manager/core/browser/password_feature_manager.h index 0e4812b0..a1f2d6d 100644 --- a/components/password_manager/core/browser/password_feature_manager.h +++ b/components/password_manager/core/browser/password_feature_manager.h
@@ -41,22 +41,6 @@ // local/profile storage). virtual bool IsOptedInForAccountStorage() const = 0; - // Whether it makes sense to ask the user to opt-in for account-based - // password storage. This is true if the opt-in doesn't exist yet, but all - // other requirements are met (there is a signed-in user, Sync-the-feature - // is not enabled, etc). - virtual bool ShouldShowAccountStorageOptIn() const = 0; - - // Whether it makes sense to ask the user to signin again to access the - // account-based password storage. This is true if a user on this device - // previously opted into using the account store but is signed-out now. - // |current_page_url| is the current URL, used to suppress the promo on the - // Google signin page (no point in asking the user to sign in while they're - // already doing that). For non-web contexts (e.g. native UIs), it is valid to - // pass an empty GURL. - virtual bool ShouldShowAccountStorageReSignin( - const GURL& current_page_url) const = 0; - // Returns the default storage location for signed-in but non-syncing users // (i.e. will new passwords be saved to locally or to the account by default). // Always returns an actual value, never kNotSet. @@ -83,17 +67,6 @@ // the default password store to kProfileStore. virtual void OptOutOfAccountStorage() = 0; - // Clears the opt-in to using account storage for passwords for the - // current signed-in user (unconsented primary account), as well as all other - // associated settings (e.g. default store choice). - virtual void OptOutOfAccountStorageAndClearSettings() = 0; - - // Whether the user should be asked if they want to use the account store - // after saving a password locally. This is true for eligible users that - // haven't made this choice before. - virtual bool ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally() - const = 0; - // Sets the default password store selected by user in prefs. This store is // used for saving new credentials and adding blacking listing entries. virtual void SetDefaultPasswordStore(const PasswordForm::Store& store) = 0;
diff --git a/components/password_manager/core/browser/password_feature_manager_impl.cc b/components/password_manager/core/browser/password_feature_manager_impl.cc index 48671599..f1b7fbad 100644 --- a/components/password_manager/core/browser/password_feature_manager_impl.cc +++ b/components/password_manager/core/browser/password_feature_manager_impl.cc
@@ -32,7 +32,7 @@ bool PasswordFeatureManagerImpl::IsGenerationEnabled() const { switch (password_manager::sync_util::GetPasswordSyncState(sync_service_)) { case sync_util::SyncState::kNotActive: - return ShouldShowAccountStorageOptIn(); + return false; case sync_util::SyncState::kActiveWithNormalEncryption: case sync_util::SyncState::kActiveWithCustomPassphrase: return true; @@ -69,17 +69,6 @@ sync_service_); } -bool PasswordFeatureManagerImpl::ShouldShowAccountStorageOptIn() const { - return features_util::ShouldShowAccountStorageOptIn(pref_service_, - sync_service_); -} - -bool PasswordFeatureManagerImpl::ShouldShowAccountStorageReSignin( - const GURL& current_page_url) const { - return features_util::ShouldShowAccountStorageReSignin( - pref_service_, sync_service_, current_page_url); -} - PasswordForm::Store PasswordFeatureManagerImpl::GetDefaultPasswordStore() const { DCHECK(pref_service_); @@ -105,21 +94,11 @@ features_util::OptOutOfAccountStorage(pref_service_, sync_service_); } -void PasswordFeatureManagerImpl::OptOutOfAccountStorageAndClearSettings() { - features_util::OptOutOfAccountStorageAndClearSettings(pref_service_, - sync_service_); -} - void PasswordFeatureManagerImpl::SetDefaultPasswordStore( const PasswordForm::Store& store) { features_util::SetDefaultPasswordStore(pref_service_, sync_service_, store); } -bool PasswordFeatureManagerImpl:: - ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally() const { - return ShouldShowAccountStorageOptIn() && !IsDefaultPasswordStoreSet(); -} - bool PasswordFeatureManagerImpl::ShouldChangeDefaultPasswordStore() const { return IsOptedInForAccountStorage() && IsDefaultPasswordStoreSet() && GetDefaultPasswordStore() == PasswordForm::Store::kProfileStore;
diff --git a/components/password_manager/core/browser/password_feature_manager_impl.h b/components/password_manager/core/browser/password_feature_manager_impl.h index 470392c..d1fc9b73 100644 --- a/components/password_manager/core/browser/password_feature_manager_impl.h +++ b/components/password_manager/core/browser/password_feature_manager_impl.h
@@ -36,9 +36,6 @@ bool IsBiometricAuthenticationBeforeFillingEnabled() const override; bool IsOptedInForAccountStorage() const override; - bool ShouldShowAccountStorageOptIn() const override; - bool ShouldShowAccountStorageReSignin( - const GURL& current_page_url) const override; PasswordForm::Store GetDefaultPasswordStore() const override; bool IsDefaultPasswordStoreSet() const override; features_util::PasswordAccountStorageUsageLevel @@ -47,8 +44,6 @@ #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) void OptInToAccountStorage() override; void OptOutOfAccountStorage() override; - void OptOutOfAccountStorageAndClearSettings() override; - bool ShouldOfferOptInAndMoveToAccountStoreAfterSavingLocally() const override; void SetDefaultPasswordStore(const PasswordForm::Store& store) override; bool ShouldChangeDefaultPasswordStore() const override; #endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID)
diff --git a/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc b/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc index a2ac98c4..8472cfc 100644 --- a/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc +++ b/components/password_manager/core/browser/password_feature_manager_impl_unittest.cc
@@ -94,33 +94,10 @@ EXPECT_TRUE(password_feature_manager_.IsGenerationEnabled()); } -#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) - -class PasswordFeatureManagerImplExplicitSigninParamTest - : public base::test::WithFeatureOverride, - public PasswordFeatureManagerImplTest { - public: - PasswordFeatureManagerImplExplicitSigninParamTest() - : base::test::WithFeatureOverride( - ::switches::kExplicitBrowserSigninUIOnDesktop) { - // `::prefs::kExplicitBrowserSignin` should only be set if - // `switches::kExplicitBrowserSigninUIOnDesktop` is enabled. - pref_service_.SetBoolean(::prefs::kExplicitBrowserSignin, - IsExplicitSignin()); - } - - bool IsExplicitSignin() const { - return ::switches::IsExplicitBrowserSigninUIOnDesktopEnabled(); - } -}; - -// Desktop users can be offered to opt in to account storage if eligible. One -// such offer is triggered from the generation entry point, so -// IsGenerationEnabled() must return true in that state. -// When signin is explicit, account storage is ON by default, and password -// generation no longer triggers an optin. -TEST_P(PasswordFeatureManagerImplExplicitSigninParamTest, - GenerationEnabledIfUserEligibleForAccountStorageOptIn) { +// Signed-in non-syncing users with account storage disabled should not get +// password generation. +TEST_F(PasswordFeatureManagerImplTest, + GenerationDisabledIfNonSyncingAndNotUsingAccountStorage) { sync_service_.SetSignedIn(signin::ConsentLevel::kSignin, account_); // The user hasn't opted in to account storage yet. sync_service_.GetUserSettings()->SetSelectedType( @@ -129,19 +106,11 @@ ASSERT_EQ(password_manager::sync_util::GetPasswordSyncState(&sync_service_), password_manager::sync_util::SyncState::kNotActive); - // If signin is implicit, the user must be eligible for account storage opt in - // now. When signin is explicit, account storage is ON by default, and - // password generation no longer triggers an optin. - ASSERT_EQ(password_feature_manager_.ShouldShowAccountStorageOptIn(), - !IsExplicitSignin()); - - EXPECT_EQ(password_feature_manager_.IsGenerationEnabled(), - !IsExplicitSignin()); + EXPECT_FALSE(password_feature_manager_.IsGenerationEnabled()); } -// When signin is explicit, account storage remains disabled in auth errors. -TEST_P(PasswordFeatureManagerImplExplicitSigninParamTest, - OptedInIfSigninPaused) { +// Account storage remains disabled if there is an auth error. +TEST_F(PasswordFeatureManagerImplTest, OptedOutIfSigninPaused) { sync_service_.SetSignedIn(signin::ConsentLevel::kSignin, account_); sync_service_.SetPersistentAuthError(); @@ -152,11 +121,6 @@ EXPECT_FALSE(password_feature_manager_.IsOptedInForAccountStorage()); } -INSTANTIATE_FEATURE_OVERRIDE_TEST_SUITE( - PasswordFeatureManagerImplExplicitSigninParamTest); - -#endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) - #if BUILDFLAG(IS_ANDROID) // On Android, for certain versions of GMS Core, signed-in users have a single // (profile) PasswordStore that successfully talks to the account GmsCore
diff --git a/components/password_manager/core/browser/password_form_filling.cc b/components/password_manager/core/browser/password_form_filling.cc index 8da8a138..0b38de08 100644 --- a/components/password_manager/core/browser/password_form_filling.cc +++ b/components/password_manager/core/browser/password_form_filling.cc
@@ -135,13 +135,7 @@ } if (best_matches.empty() && !webauthn_suggestions_available) { - bool should_show_popup_without_passwords = - client->IsSavingAndFillingEnabled(observed_form.url) && - (client->GetPasswordFeatureManager()->ShouldShowAccountStorageOptIn() || - client->GetPasswordFeatureManager()->ShouldShowAccountStorageReSignin( - client->GetLastCommittedURL())); - - driver->InformNoSavedCredentials(should_show_popup_without_passwords); + driver->InformNoSavedCredentials(); metrics_recorder->RecordFillEvent( PasswordFormMetricsRecorder::kManagerFillEventNoCredential); return LikelyFormFilling::kNoFilling;
diff --git a/components/password_manager/core/browser/password_form_filling_unittest.cc b/components/password_manager/core/browser/password_form_filling_unittest.cc index abf84ae..e0f8e58 100644 --- a/components/password_manager/core/browser/password_form_filling_unittest.cc +++ b/components/password_manager/core/browser/password_form_filling_unittest.cc
@@ -54,7 +54,7 @@ SetPasswordFillData, (const PasswordFormFillData&), (override)); - MOCK_METHOD(void, InformNoSavedCredentials, (bool), (override)); + MOCK_METHOD(void, InformNoSavedCredentials, (), (override)); }; class MockPasswordManagerClient : public StubPasswordManagerClient { @@ -155,8 +155,8 @@ TEST_F(PasswordFormFillingTest, NoSavedCredentials) { std::vector<PasswordForm> best_matches; - EXPECT_CALL(driver_, InformNoSavedCredentials(_)); - EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0); + EXPECT_CALL(driver_, InformNoSavedCredentials); + EXPECT_CALL(driver_, SetPasswordFillData).Times(0); LikelyFormFilling likely_form_filling = SendFillInformationToRenderer( &client_, &driver_, observed_form_, best_matches, federated_matches_, @@ -174,9 +174,9 @@ another_saved_match.password_value += u"1"; best_matches.push_back(another_saved_match); - EXPECT_CALL(driver_, InformNoSavedCredentials(_)).Times(0); + EXPECT_CALL(driver_, InformNoSavedCredentials).Times(0); PasswordFormFillData fill_data; - EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data)); + EXPECT_CALL(driver_, SetPasswordFillData).WillOnce(SaveArg<0>(&fill_data)); EXPECT_CALL(client_, PasswordWasAutofilled); #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) EXPECT_CALL(feature_manager_, IsBiometricAuthenticationBeforeFillingEnabled) @@ -256,8 +256,7 @@ } PasswordFormFillData fill_data; - EXPECT_CALL(driver_, SetPasswordFillData(_)) - .WillOnce(SaveArg<0>(&fill_data)); + EXPECT_CALL(driver_, SetPasswordFillData).WillOnce(SaveArg<0>(&fill_data)); EXPECT_CALL(client_, PasswordWasAutofilled); #if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_CHROMEOS) EXPECT_CALL(feature_manager_, IsBiometricAuthenticationBeforeFillingEnabled) @@ -369,9 +368,9 @@ TEST_F(PasswordFormFillingTest, AutofillPSLMatch) { std::vector<PasswordForm> best_matches = {psl_saved_match_}; - EXPECT_CALL(driver_, InformNoSavedCredentials(_)).Times(0); + EXPECT_CALL(driver_, InformNoSavedCredentials).Times(0); PasswordFormFillData fill_data; - EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data)); + EXPECT_CALL(driver_, SetPasswordFillData).WillOnce(SaveArg<0>(&fill_data)); EXPECT_CALL(client_, PasswordWasAutofilled); LikelyFormFilling likely_form_filling = SendFillInformationToRenderer( @@ -477,38 +476,6 @@ PasswordFormMetricsRecorder::MatchedFormType::kAffiliatedWebsites, 1); } -TEST_F(PasswordFormFillingTest, - AccountStorePromoWhenNoCredentialSavedAndSavingAndFillingEnabled) { - ON_CALL(client_, IsSavingAndFillingEnabled).WillByDefault(Return(true)); - ON_CALL(*client_.GetPasswordFeatureManager(), ShouldShowAccountStorageOptIn()) - .WillByDefault(Return(true)); - - std::vector<PasswordForm> best_matches; - EXPECT_CALL(driver_, InformNoSavedCredentials( - /*should_show_popup_without_passwords=*/true)); - SendFillInformationToRenderer(&client_, &driver_, observed_form_, - best_matches, federated_matches_, nullptr, - metrics_recorder_.get(), - /*webauthn_suggestions_available=*/false, - /*suggestion_banned_fields=*/{}); -} - -TEST_F(PasswordFormFillingTest, - NoAccountStorePromoWhenNoCredentialSavedAndSavingAndFillingDisabled) { - ON_CALL(client_, IsSavingAndFillingEnabled).WillByDefault(Return(false)); - ON_CALL(*client_.GetPasswordFeatureManager(), ShouldShowAccountStorageOptIn()) - .WillByDefault(Return(true)); - - std::vector<PasswordForm> best_matches; - EXPECT_CALL(driver_, InformNoSavedCredentials( - /*should_show_popup_without_passwords=*/false)); - SendFillInformationToRenderer(&client_, &driver_, observed_form_, - best_matches, federated_matches_, nullptr, - metrics_recorder_.get(), - /*webauthn_suggestions_available=*/false, - /*suggestion_banned_fields=*/{}); -} - // Exclude Android and iOS, because there credentials are not filled on // the page load in any case. #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS)
diff --git a/components/password_manager/core/browser/password_manager_client.cc b/components/password_manager/core/browser/password_manager_client.cc index 0bd670b4..e76b32e 100644 --- a/components/password_manager/core/browser/password_manager_client.cc +++ b/components/password_manager/core/browser/password_manager_client.cc
@@ -75,14 +75,6 @@ void PasswordManagerClient::NotifyUserCredentialsWereLeaked( LeakedPasswordDetails details) {} -void PasswordManagerClient::TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback<void(ReauthSucceeded)> reauth_callback) { - std::move(reauth_callback).Run(ReauthSucceeded(false)); -} - -void PasswordManagerClient::TriggerSignIn(signin_metrics::AccessPoint) {} - bool PasswordManagerClient::WasLastNavigationHTTPError() const { return false; }
diff --git a/components/password_manager/core/browser/password_manager_client.h b/components/password_manager/core/browser/password_manager_client.h index d98bc6fd..9b0a863 100644 --- a/components/password_manager/core/browser/password_manager_client.h +++ b/components/password_manager/core/browser/password_manager_client.h
@@ -326,18 +326,6 @@ // Informs the embedder that user credentials were leaked. virtual void NotifyUserCredentialsWereLeaked(LeakedPasswordDetails details); - // Requests a reauth for the primary account with |access_point| representing - // where the reauth was triggered. - // Triggers the |reauth_callback| with ReauthSucceeded(true) if - // reauthentication succeeded. - virtual void TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint access_point, - base::OnceCallback<void(ReauthSucceeded)> reauth_callback); - - // Redirects the user to a sign-in in a new tab. |access_point| is used for - // metrics recording and represents where the sign-in was triggered. - virtual void TriggerSignIn(signin_metrics::AccessPoint access_point); - // Gets prefs associated with this embedder. virtual PrefService* GetPrefs() const = 0;
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h index e728689..11b5ba1 100644 --- a/components/password_manager/core/browser/password_manager_driver.h +++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -56,13 +56,8 @@ // Informs the driver that there are no saved credentials in the password // store for the current page. - // `should_show_popup_without_passwords` instructs the driver that the popup - // should be shown even without password suggestions. This is set to true if - // the popup will include another item that the driver doesn't know about - // (e.g. a promo to unlock passwords from the user's Google Account). // TODO(crbug.com/41259715): Remove and observe FormFetcher instead. - virtual void InformNoSavedCredentials( - bool should_show_popup_without_passwords) {} + virtual void InformNoSavedCredentials() {} // Notifies the driver that a password can be generated on the fields // identified by `form`.
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.cc b/components/password_manager/core/browser/password_manager_metrics_util.cc index 41f704b2..229d025e 100644 --- a/components/password_manager/core/browser/password_manager_metrics_util.cc +++ b/components/password_manager/core/browser/password_manager_metrics_util.cc
@@ -67,9 +67,6 @@ kSignedOutUser: return "SignedOutUser"; case password_manager::features_util::PasswordAccountStorageUserState:: - kSignedOutAccountStoreUser: - return "SignedOutAccountStoreUser"; - case password_manager::features_util::PasswordAccountStorageUserState:: kSignedInUser: return "SignedInUser"; case password_manager::features_util::PasswordAccountStorageUserState:: @@ -266,9 +263,6 @@ for (const auto& suggestion : suggestions) { switch (suggestion.type) { case autofill::SuggestionType::kGeneratePasswordEntry: - // TODO(crbug.com/40122999): Revisit metrics for the "opt in and - // generate" button. - case autofill::SuggestionType::kPasswordAccountStorageOptInAndGenerate: dropdown_state = PasswordDropdownState::kStandardGenerate; break; default: @@ -303,9 +297,6 @@ break; case PasswordDropdownSelectedOption::kShowAll: case PasswordDropdownSelectedOption::kGenerate: - case PasswordDropdownSelectedOption::kUnlockAccountStorePasswords: - case PasswordDropdownSelectedOption::kResigninToUnlockAccountStore: - case PasswordDropdownSelectedOption::kUnlockAccountStoreGeneration: default: base::RecordAction(base::UserMetricsAction( "PasswordManager.PasswordDropdownSelected.Others")); @@ -325,13 +316,6 @@ "PasswordManager.AcceptedSaveUpdateSubmissionIndicatorEvent", event); } -void LogPasswordsCountFromAccountStoreAfterUnlock( - int account_store_passwords_count) { - base::UmaHistogramCounts100( - "PasswordManager.CredentialsCountFromAccountStoreAfterUnlock", - account_store_passwords_count); -} - void LogDownloadedPasswordsCountFromAccountStoreAfterUnlock( int account_store_passwords_count) { base::UmaHistogramCounts100(
diff --git a/components/password_manager/core/browser/password_manager_metrics_util.h b/components/password_manager/core/browser/password_manager_metrics_util.h index 9c4c1f26..7450322 100644 --- a/components/password_manager/core/browser/password_manager_metrics_util.h +++ b/components/password_manager/core/browser/password_manager_metrics_util.h
@@ -377,11 +377,11 @@ // User selected to generate a password. kGenerate = 2, // User unlocked the account-store to fill a password. - kUnlockAccountStorePasswords = 3, + // Deprecated: kUnlockAccountStorePasswords = 3, // User unlocked the account-store to generate a password. - kUnlockAccountStoreGeneration = 4, + // Deprecated: kUnlockAccountStoreGeneration = 4, // Previoulsy opted-in user decided to log-in again to access their passwords. - kResigninToUnlockAccountStore = 5, + // Deprecated: kResigninToUnlockAccountStore = 5, // User selected a WebAuthn credential. kWebAuthn = 6, // User selected the "Sign in with another device" button. @@ -885,15 +885,9 @@ void LogPasswordAcceptedSaveUpdateSubmissionIndicatorEvent( autofill::mojom::SubmissionIndicatorEvent event); -// Logs how many account-stored passwords are available for filling in the -// current password form right after unlock. -void LogPasswordsCountFromAccountStoreAfterUnlock( - int account_store_passwords_count); - // Logs how many account-stored passwords are downloaded right after unlock. -// This is different from `LogPasswordsCountFromAccountStoreAfterUnlock` since -// it records all the downloaded passwords not just those available for filling -// in a specific password form. +// This records all the downloaded passwords not just those available for +// filling in a specific password form. void LogDownloadedPasswordsCountFromAccountStoreAfterUnlock( int account_store_passwords_count);
diff --git a/components/password_manager/core/browser/password_manager_util.cc b/components/password_manager/core/browser/password_manager_util.cc index 0388eef..0c8e9e5c 100644 --- a/components/password_manager/core/browser/password_manager_util.cc +++ b/components/password_manager/core/browser/password_manager_util.cc
@@ -132,29 +132,9 @@ kOverlappingWithPasswordGenerationPopup); autofill_client->HideAutofillFieldIph(); } - if (!password_manager_client->GetPasswordFeatureManager() - ->ShouldShowAccountStorageOptIn()) { - password_manager_client->GeneratePassword(PasswordGenerationType::kManual); - LogPasswordGenerationEvent(autofill::password_generation:: - PASSWORD_GENERATION_CONTEXT_MENU_PRESSED); - return; - } - // The client ensures the callback won't be run if it is destroyed, so - // base::Unretained is safe. - password_manager_client->TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kGeneratePasswordContextMenu, - base::BindOnce( - [](password_manager::PasswordManagerClient* client, - password_manager::PasswordManagerClient::ReauthSucceeded - succeeded) { - if (succeeded) { - client->GeneratePassword(PasswordGenerationType::kManual); - LogPasswordGenerationEvent( - autofill::password_generation:: - PASSWORD_GENERATION_CONTEXT_MENU_PRESSED); - } - }, - base::Unretained(password_manager_client))); + password_manager_client->GeneratePassword(PasswordGenerationType::kManual); + LogPasswordGenerationEvent( + autofill::password_generation::PASSWORD_GENERATION_CONTEXT_MENU_PRESSED); } bool IsAbleToSavePasswords(password_manager::PasswordManagerClient* client) {
diff --git a/components/password_manager/core/browser/password_manager_util_unittest.cc b/components/password_manager/core/browser/password_manager_util_unittest.cc index 32ea607..f765bf2 100644 --- a/components/password_manager/core/browser/password_manager_util_unittest.cc +++ b/components/password_manager/core/browser/password_manager_util_unittest.cc
@@ -74,12 +74,6 @@ MockPasswordManagerClient() = default; ~MockPasswordManagerClient() override = default; - MOCK_METHOD(void, - TriggerReauthForPrimaryAccount, - (signin_metrics::ReauthAccessPoint, - base::OnceCallback<void( - password_manager::PasswordManagerClient::ReauthSucceeded)>), - (override)); MOCK_METHOD(void, GeneratePassword, (PasswordGenerationType), (override)); MOCK_METHOD(PrefService*, GetPrefs, (), (const, override)); MOCK_METHOD(PrefService*, GetLocalStatePrefs, (), (const, override)); @@ -606,67 +600,14 @@ EXPECT_EQ(GURL(kTestProxyOrigin), blocklisted_credential.url); } -TEST(PasswordManagerUtil, ManualGenerationShouldNotReauthIfNotNeeded) { +TEST(PasswordManagerUtil, ManualGeneration) { MockPasswordManagerClient mock_client; - ON_CALL(*(mock_client.GetPasswordFeatureManager()), - ShouldShowAccountStorageOptIn) - .WillByDefault(Return(false)); - EXPECT_CALL(mock_client, TriggerReauthForPrimaryAccount).Times(0); EXPECT_CALL(mock_client, GeneratePassword(PasswordGenerationType::kManual)); UserTriggeredManualGenerationFromContextMenu(&mock_client, nullptr); } -TEST(PasswordManagerUtil, - ManualGenerationShouldGeneratePasswordIfReauthSucessful) { - MockPasswordManagerClient mock_client; - ON_CALL(*(mock_client.GetPasswordFeatureManager()), - ShouldShowAccountStorageOptIn) - .WillByDefault(Return(true)); - - EXPECT_CALL( - mock_client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kGeneratePasswordContextMenu, _)) - .WillOnce( - [](signin_metrics::ReauthAccessPoint, - base::OnceCallback<void( - password_manager::PasswordManagerClient::ReauthSucceeded)> - callback) { - std::move(callback).Run( - password_manager::PasswordManagerClient::ReauthSucceeded(true)); - }); - EXPECT_CALL(mock_client, GeneratePassword(PasswordGenerationType::kManual)); - - UserTriggeredManualGenerationFromContextMenu(&mock_client, nullptr); -} - -TEST(PasswordManagerUtil, - ManualGenerationShouldNotGeneratePasswordIfReauthFailed) { - MockPasswordManagerClient mock_client; - ON_CALL(*(mock_client.GetPasswordFeatureManager()), - ShouldShowAccountStorageOptIn) - .WillByDefault(Return(true)); - - EXPECT_CALL( - mock_client, - TriggerReauthForPrimaryAccount( - signin_metrics::ReauthAccessPoint::kGeneratePasswordContextMenu, _)) - .WillOnce( - [](signin_metrics::ReauthAccessPoint, - base::OnceCallback<void( - password_manager::PasswordManagerClient::ReauthSucceeded)> - callback) { - std::move(callback).Run( - password_manager::PasswordManagerClient::ReauthSucceeded( - false)); - }); - EXPECT_CALL(mock_client, GeneratePassword).Times(0); - - UserTriggeredManualGenerationFromContextMenu(&mock_client, nullptr); -} - TEST(PasswordManagerUtil, AvoidOverlappingAutofillMenuAndManualGeneration) { base::test::TaskEnvironment task_environment; password_manager::StubPasswordManagerClient stub_password_client;
diff --git a/components/password_manager/core/browser/password_suggestion_generator.cc b/components/password_manager/core/browser/password_suggestion_generator.cc index 3b83b4df..8fd8933 100644 --- a/components/password_manager/core/browser/password_suggestion_generator.cc +++ b/components/password_manager/core/browser/password_suggestion_generator.cc
@@ -13,7 +13,6 @@ #include "components/affiliations/core/browser/affiliation_utils.h" #include "components/autofill/core/browser/suggestions/suggestion.h" #include "components/password_manager/core/browser/features/password_features.h" -#include "components/password_manager/core/browser/password_feature_manager.h" #include "components/password_manager/core/browser/password_manager_client.h" #include "components/password_manager/core/browser/password_manager_driver.h" #include "components/password_manager/core/browser/password_manager_util.h" @@ -67,39 +66,6 @@ SuggestionType::kGeneratePasswordEntry); } -// Entry for opting in to password account storage and then filling. -Suggestion CreateEntryToOptInToAccountStorageThenFill() { -#if BUILDFLAG(IS_IOS) - const bool webauthn_sync_credentials = - syncer::IsWebauthnCredentialSyncEnabled(); -#else - constexpr bool webauthn_sync_credentials = true; -#endif // BUILDFLAG(IS_IOS) - return Suggestion( - l10n_util::GetStringUTF8( - webauthn_sync_credentials - ? IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS - : IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE), - /*label=*/"", Suggestion::Icon::kGoogle, - SuggestionType::kPasswordAccountStorageOptIn); -} - -// Entry for opting in to password account storage and then generating password. -Suggestion CreateEntryToOptInToAccountStorageThenGenerate() { - return Suggestion( - l10n_util::GetStringUTF8(IDS_PASSWORD_MANAGER_GENERATE_PASSWORD), - /*label=*/"", Suggestion::Icon::kKey, - SuggestionType::kPasswordAccountStorageOptInAndGenerate); -} - -// Entry for sigining in again which unlocks the password account storage. -Suggestion CreateEntryToReSignin() { - return Suggestion( - l10n_util::GetStringUTF8(IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE), - /*label=*/"", Suggestion::Icon::kGoogle, - SuggestionType::kPasswordAccountStorageReSignin); -} - void MaybeAppendManagePasswordsEntry(std::vector<Suggestion>* suggestions) { bool has_no_fillable_suggestions = base::ranges::none_of( *suggestions, @@ -300,13 +266,6 @@ ShowPasswordSuggestions show_password_suggestions, ShowWebAuthnCredentials show_webauthn_credentials) const { std::vector<Suggestion> suggestions; - bool show_account_storage_optin = - password_client_ && password_client_->GetPasswordFeatureManager() - ->ShouldShowAccountStorageOptIn(); - bool show_account_storage_resignin = - password_client_ && password_client_->GetPasswordFeatureManager() - ->ShouldShowAccountStorageReSignin( - password_client_->GetLastCommittedURL()); // Add WebAuthn credentials suitable for an ongoing request if available. WebAuthnCredentialsDelegate* delegate = @@ -337,8 +296,7 @@ }); } - if (!fill_data.has_value() && !show_account_storage_optin && - !show_account_storage_resignin && !uses_passkeys && suggestions.empty()) { + if (!fill_data.has_value() && !uses_passkeys && suggestions.empty()) { // Probably the credential was deleted in the mean time. return suggestions; } @@ -369,21 +327,7 @@ // Add password generation entry, if available. if (offers_generation) { - suggestions.emplace_back( - show_account_storage_optin - ? CreateEntryToOptInToAccountStorageThenGenerate() - : CreateGenerationEntry()); - } - - // Add button to opt into using the account storage for passwords and then - // suggest. - if (show_account_storage_optin) { - suggestions.emplace_back(CreateEntryToOptInToAccountStorageThenFill()); - } - - // Add button to sign-in which unlocks the previously used account store. - if (show_account_storage_resignin) { - suggestions.emplace_back(CreateEntryToReSignin()); + suggestions.emplace_back(CreateGenerationEntry()); } // Add "Manage all passwords" link to settings.
diff --git a/components/password_manager/core/browser/password_suggestion_generator_unittest.cc b/components/password_manager/core/browser/password_suggestion_generator_unittest.cc index 5fa1dc7..c319a92b 100644 --- a/components/password_manager/core/browser/password_suggestion_generator_unittest.cc +++ b/components/password_manager/core/browser/password_suggestion_generator_unittest.cc
@@ -121,37 +121,6 @@ Suggestion::Icon::kKey); } -Matcher<Suggestion> EqualsOptInToAccountThenGeneratePasswordSuggestion() { - return EqualsSuggestion( - SuggestionType::kPasswordAccountStorageOptInAndGenerate, - l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_GENERATE_PASSWORD), - Suggestion::Icon::kKey); -} - -Matcher<Suggestion> EqualsEntryToOptInToAccountStorageThenFill() { -#if BUILDFLAG(IS_IOS) - const bool webauthn_sync_credentials = - syncer::IsWebauthnCredentialSyncEnabled(); -#else - constexpr bool webauthn_sync_credentials = true; -#endif - return EqualsSuggestion( - SuggestionType::kPasswordAccountStorageOptIn, - webauthn_sync_credentials - ? l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS) - : l10n_util::GetStringUTF16( - IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE), - Suggestion::Icon::kGoogle); -} - -Matcher<Suggestion> EqualsAccountStorageResignin() { - return EqualsSuggestion( - SuggestionType::kPasswordAccountStorageReSignin, - l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE), - Suggestion::Icon::kGoogle); -} - Matcher<Suggestion> EqualsManagePasswordsSuggestion( bool has_webauthn_credential = false) { return AllOf(EqualsSuggestion( @@ -657,79 +626,6 @@ /*has_webauthn_credential=*/true))); } -// Verifies the generate password suggestion content when account storage opt in -// should be shown to the user. -TEST_F(PasswordSuggestionGeneratorTest, - GeneratePassword_ShouldShowAccountStorageOptIn) { - ON_CALL(*client().GetPasswordFeatureManager(), ShouldShowAccountStorageOptIn) - .WillByDefault(Return(true)); - std::vector<Suggestion> suggestions = generator().GetSuggestionsForDomain( - password_form_fill_data(), favicon(), /*username_filter=*/u"", - OffersGeneration(true), ShowPasswordSuggestions(true), - ShowWebAuthnCredentials(false)); - - EXPECT_THAT(suggestions, - ElementsAre(EqualsDomainPasswordSuggestion( - SuggestionType::kPasswordEntry, u"username", - password_label(8u), - /*realm_label=*/u"", favicon()), - EqualsOptInToAccountThenGeneratePasswordSuggestion(), - EqualsEntryToOptInToAccountStorageThenFill(), - EqualsSuggestion(SuggestionType::kSeparator), - EqualsManagePasswordsSuggestion())); -} - -// Verifies that opt into account storage suggestion is still shown if there're -// no saved credentials for the current domain. -TEST_F(PasswordSuggestionGeneratorTest, - OptInToAccountStorage_NoSavedCredentials) { - ON_CALL(*client().GetPasswordFeatureManager(), ShouldShowAccountStorageOptIn) - .WillByDefault(Return(true)); - std::vector<Suggestion> suggestions = generator().GetSuggestionsForDomain( - /*fill_data=*/{}, favicon(), /*username_filter=*/u"", - OffersGeneration(false), ShowPasswordSuggestions(true), - ShowWebAuthnCredentials(false)); - - EXPECT_THAT(suggestions, - ElementsAre(EqualsEntryToOptInToAccountStorageThenFill())); -} - -// Test that account storage resignin suggestion is still shown if the there're -// no credentials saved for the current domain. -TEST_F(PasswordSuggestionGeneratorTest, - AccountStorageResignin_NoSavedCredentials) { - ON_CALL(*client().GetPasswordFeatureManager(), - ShouldShowAccountStorageReSignin) - .WillByDefault(Return(true)); - std::vector<Suggestion> suggestions = generator().GetSuggestionsForDomain( - /*fill_data=*/{}, favicon(), /*username_filter=*/u"", - OffersGeneration(false), ShowPasswordSuggestions(true), - ShowWebAuthnCredentials(false)); - - EXPECT_THAT(suggestions, ElementsAre(EqualsAccountStorageResignin())); -} - -// Test the account storage resignin suggestion content. -TEST_F(PasswordSuggestionGeneratorTest, - AccountStorageResignin_HasSavedPassword) { - ON_CALL(*client().GetPasswordFeatureManager(), - ShouldShowAccountStorageReSignin) - .WillByDefault(Return(true)); - std::vector<Suggestion> suggestions = generator().GetSuggestionsForDomain( - password_form_fill_data(), favicon(), /*username_filter=*/u"", - OffersGeneration(false), ShowPasswordSuggestions(true), - ShowWebAuthnCredentials(false)); - - EXPECT_THAT(suggestions, - ElementsAre(EqualsDomainPasswordSuggestion( - SuggestionType::kPasswordEntry, u"username", - password_label(8u), - /*realm_label=*/u"", favicon()), - EqualsAccountStorageResignin(), - EqualsSuggestion(SuggestionType::kSeparator), - EqualsManagePasswordsSuggestion())); -} - // Test the suggestion order when all possible suggestions should be generated. TEST_F(PasswordSuggestionGeneratorTest, DomainSuggestions_SuggestionOrder) { // Configure saved password data. @@ -760,11 +656,6 @@ #else bool use_new_strings = false; #endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) - ON_CALL(*client().GetPasswordFeatureManager(), ShouldShowAccountStorageOptIn) - .WillByDefault(Return(true)); - ON_CALL(*client().GetPasswordFeatureManager(), - ShouldShowAccountStorageReSignin) - .WillByDefault(Return(true)); std::vector<Suggestion> suggestions = generator().GetSuggestionsForDomain( fill_data, favicon(), /*username_filter=*/u"", OffersGeneration(true), @@ -800,9 +691,7 @@ EqualsDomainPasswordSuggestion(SuggestionType::kPasswordEntry, u"foo", password_label(12u), /*realm_label=*/u"", favicon()), - EqualsOptInToAccountThenGeneratePasswordSuggestion(), - EqualsEntryToOptInToAccountStorageThenFill(), - EqualsAccountStorageResignin(), + EqualsGeneratePasswordSuggestion(), EqualsSuggestion(SuggestionType::kSeparator), EqualsManagePasswordsSuggestion( /*has_webauthn_credential=*/true)));
diff --git a/components/password_manager/core/browser/sharing/password_receiver_service_impl_unittest.cc b/components/password_manager/core/browser/sharing/password_receiver_service_impl_unittest.cc index a848321..9aeb073 100644 --- a/components/password_manager/core/browser/sharing/password_receiver_service_impl_unittest.cc +++ b/components/password_manager/core/browser/sharing/password_receiver_service_impl_unittest.cc
@@ -395,8 +395,7 @@ #if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) pref_service().registry()->RegisterDictionaryPref( password_manager::prefs::kAccountStoragePerAccountSettings); - features_util::OptOutOfAccountStorageAndClearSettings(&pref_service(), - &sync_service()); + features_util::OptOutOfAccountStorage(&pref_service(), &sync_service()); #else sync_service().GetUserSettings()->SetSelectedType( syncer::UserSelectableType::kPasswords, false);
diff --git a/components/password_manager/ios/ios_password_manager_driver.h b/components/password_manager/ios/ios_password_manager_driver.h index 726acef..76dac0b 100644 --- a/components/password_manager/ios/ios_password_manager_driver.h +++ b/components/password_manager/ios/ios_password_manager_driver.h
@@ -43,8 +43,7 @@ int GetId() const override; void SetPasswordFillData( const autofill::PasswordFormFillData& form_data) override; - void InformNoSavedCredentials( - bool should_show_popup_without_passwords) override; + void InformNoSavedCredentials() override; void FormEligibleForGenerationFound( const autofill::PasswordFormGenerationData& form) override; void GeneratedPasswordAccepted(const std::u16string& password) override;
diff --git a/components/password_manager/ios/ios_password_manager_driver.mm b/components/password_manager/ios/ios_password_manager_driver.mm index c9ff1ad..d4fcce9 100644 --- a/components/password_manager/ios/ios_password_manager_driver.mm +++ b/components/password_manager/ios/ios_password_manager_driver.mm
@@ -66,8 +66,7 @@ forSecurityOrigin:security_origin_]; } -void IOSPasswordManagerDriver::InformNoSavedCredentials( - bool should_show_popup_without_passwords) { +void IOSPasswordManagerDriver::InformNoSavedCredentials() { // Allow using the proactive password generation bottom sheet from now on // since it is now known that there are no credentials saved for this page. // This signal won't work if the passwords are removed after the frame is
diff --git a/components/password_manager/ios/ios_password_manager_driver_unittest.mm b/components/password_manager/ios/ios_password_manager_driver_unittest.mm index 03d23af..e0366ef 100644 --- a/components/password_manager/ios/ios_password_manager_driver_unittest.mm +++ b/components/password_manager/ios/ios_password_manager_driver_unittest.mm
@@ -137,7 +137,7 @@ OCMExpect([[password_controller_ ignoringNonObjectArgs] onNoSavedCredentialsWithFrameId:""]) .andCompareStringAtIndex(main_frame_id, 0); - driver_->InformNoSavedCredentials(true); + driver_->InformNoSavedCredentials(); EXPECT_OCMOCK_VERIFY(password_controller_); } @@ -198,7 +198,7 @@ forFrameId:""]); OCMExpect([[password_controller_ ignoringNonObjectArgs] onNoSavedCredentialsWithFrameId:""]); - driver_->InformNoSavedCredentials(false); + driver_->InformNoSavedCredentials(); // Inform the driver again that an eligible form for generation was found. // Verify that the listeners for proactive generation are immediately attached @@ -266,7 +266,7 @@ } OCMExpect([[password_controller_ ignoringNonObjectArgs] onNoSavedCredentialsWithFrameId:""]); - driver_->InformNoSavedCredentials(false); + driver_->InformNoSavedCredentials(); // Inform the driver again that an eligible form for generation was found. // Since the queue is now cleared, verify that the listeners for proactive
diff --git a/components/password_manager_strings.grdp b/components/password_manager_strings.grdp index 0102cf77..81b768a 100644 --- a/components/password_manager_strings.grdp +++ b/components/password_manager_strings.grdp
@@ -55,18 +55,6 @@ <message name="IDS_PASSWORD_MANAGER_EMPTY_LOGIN" desc="A placeholder for the 'Manage Passwords' bubble's empty username label"> No username </message> - <message name="IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE" desc="A menu item allowing signed-in users to opt into using account-stored passwords."> - Use passwords saved in your Google Account - </message> - <message name="IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS" desc="A menu item allowing signed-in users to opt into using account-stored passwords and Google Password Manager passkeys. Do not translate “passkey“ as “password”, “passkey” is a unique concept."> - Use passwords and passkeys saved in your Google Account - </message> - <message name="IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE" desc="A menu item informing signed-out users to sign-in again to use account-stored passwords."> - Sign in to use passwords saved in your Google Account - </message> - <message name="IDS_PASSWORD_MANAGER_NO_ACCOUNT_STORE_MATCHES" desc="The menu item indicating that the account store doesn't contain passwords for the current site."> - No matching passwords. Show all saved passwords. - </message> <if expr="not use_titlecase"> <message name="IDS_PASSWORD_MANAGER_MANAGE_PASSWORDS" desc="The menu item in the password field drop down that opens the list of saved passwords."> Manage passwords…
diff --git a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_NO_ACCOUNT_STORE_MATCHES.png.sha1 b/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_NO_ACCOUNT_STORE_MATCHES.png.sha1 deleted file mode 100644 index 8f714ef..0000000 --- a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_NO_ACCOUNT_STORE_MATCHES.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5a36eba8302b1aca1911d2a2873ecbc09363d290 \ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE.png.sha1 b/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE.png.sha1 deleted file mode 100644 index 35f44ccb..0000000 --- a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -ae2abb47abb0f75ffcbe87ebf59af6841c3ee2d3 \ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS.png.sha1 b/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS.png.sha1 deleted file mode 100644 index 67b3a17..0000000 --- a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_OPT_INTO_ACCOUNT_STORE_WITH_PASSKEYS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -b95bab094a91ffc53cc34b09e4bc87f2e6b2bc43 \ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE.png.sha1 b/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE.png.sha1 deleted file mode 100644 index 79515d026..0000000 --- a/components/password_manager_strings_grdp/IDS_PASSWORD_MANAGER_RE_SIGNIN_ACCOUNT_STORE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -02eb76ea47b2714778afd441656eac5a8aae3abd \ No newline at end of file
diff --git a/components/performance_manager/graph/frame_node_impl.h b/components/performance_manager/graph/frame_node_impl.h index cdf82e35..1dd8e12 100644 --- a/components/performance_manager/graph/frame_node_impl.h +++ b/components/performance_manager/graph/frame_node_impl.h
@@ -20,6 +20,7 @@ #include "components/performance_manager/public/mojom/coordination_unit.mojom.h" #include "components/performance_manager/public/mojom/web_memory.mojom.h" #include "components/performance_manager/public/render_frame_host_proxy.h" +#include "components/performance_manager/resource_attribution/cpu_measurement_data.h" #include "content/public/browser/browsing_instance_id.h" #include "content/public/browser/site_instance.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -40,9 +41,11 @@ : public PublicNodeImpl<FrameNodeImpl, FrameNode>, public TypedNodeBase<FrameNodeImpl, FrameNode, FrameNodeObserver>, public mojom::DocumentCoordinationUnit, - public SupportsNodeInlineData<execution_context::FrameExecutionContext, - // Keep this last to avoid merge conflicts. - NodeAttachedDataStorage> { + public SupportsNodeInlineData< + execution_context::FrameExecutionContext, + resource_attribution::SharedCPUTimeResultData, + // Keep this last to avoid merge conflicts. + NodeAttachedDataStorage> { public: static const char kDefaultPriorityReason[];
diff --git a/components/performance_manager/graph/page_node_impl.h b/components/performance_manager/graph/page_node_impl.h index 898278d..345a45ad0 100644 --- a/components/performance_manager/graph/page_node_impl.h +++ b/components/performance_manager/graph/page_node_impl.h
@@ -23,6 +23,7 @@ #include "components/performance_manager/graph/node_attached_data_storage.h" #include "components/performance_manager/graph/node_base.h" #include "components/performance_manager/public/graph/page_node.h" +#include "components/performance_manager/resource_attribution/cpu_measurement_data.h" #include "components/performance_manager/scenarios/loading_scenario_data.h" #include "url/gurl.h" @@ -50,15 +51,17 @@ class PageNodeImpl : public PublicNodeImpl<PageNodeImpl, PageNode>, public TypedNodeBase<PageNodeImpl, PageNode, PageNodeObserver>, - public SupportsNodeInlineData<PageLoadTrackerDecoratorData, - PageAggregatorData, + public SupportsNodeInlineData< + PageLoadTrackerDecoratorData, + PageAggregatorData, #if !BUILDFLAG(IS_ANDROID) - SiteDataNodeData, + SiteDataNodeData, #endif - FrozenData, - LoadingScenarioPageFrameCounts, - // Keep this last to avoid merge conflicts. - NodeAttachedDataStorage> { + FrozenData, + LoadingScenarioPageFrameCounts, + resource_attribution::SharedCPUTimeResultData, + // Keep this last to avoid merge conflicts. + NodeAttachedDataStorage> { public: using PassKey = base::PassKey<PageNodeImpl>;
diff --git a/components/performance_manager/graph/process_node_impl.h b/components/performance_manager/graph/process_node_impl.h index 3090b8a5..f7f2cfc7 100644 --- a/components/performance_manager/graph/process_node_impl.h +++ b/components/performance_manager/graph/process_node_impl.h
@@ -60,13 +60,15 @@ public TypedNodeBase<ProcessNodeImpl, ProcessNode, ProcessNodeObserver>, public mojom::ProcessCoordinationUnit, public mojom::ChildProcessCoordinationUnit, - public SupportsNodeInlineData<ProcessPriorityAggregatorData, - FrozenData, - PerformanceScenarioMemoryData, - resource_attribution::CPUMeasurementData, - LoadingScenarioCounts, - // Keep this last to avoid merge conflicts. - NodeAttachedDataStorage> { + public SupportsNodeInlineData< + ProcessPriorityAggregatorData, + FrozenData, + PerformanceScenarioMemoryData, + resource_attribution::CPUMeasurementData, + resource_attribution::SharedCPUTimeResultData, + LoadingScenarioCounts, + // Keep this last to avoid merge conflicts. + NodeAttachedDataStorage> { public: using PassKey = base::PassKey<ProcessNodeImpl>;
diff --git a/components/performance_manager/graph/worker_node_impl.h b/components/performance_manager/graph/worker_node_impl.h index b691a60..f3a3e071 100644 --- a/components/performance_manager/graph/worker_node_impl.h +++ b/components/performance_manager/graph/worker_node_impl.h
@@ -16,6 +16,7 @@ #include "components/performance_manager/graph/node_base.h" #include "components/performance_manager/graph/node_inline_data.h" #include "components/performance_manager/public/graph/worker_node.h" +#include "components/performance_manager/resource_attribution/cpu_measurement_data.h" #include "third_party/blink/public/common/tokens/tokens.h" #include "url/gurl.h" #include "url/origin.h" @@ -28,9 +29,11 @@ class WorkerNodeImpl : public PublicNodeImpl<WorkerNodeImpl, WorkerNode>, public TypedNodeBase<WorkerNodeImpl, WorkerNode, WorkerNodeObserver>, - public SupportsNodeInlineData<execution_context::WorkerExecutionContext, - // Keep this last to avoid merge conflicts. - NodeAttachedDataStorage> { + public SupportsNodeInlineData< + execution_context::WorkerExecutionContext, + resource_attribution::SharedCPUTimeResultData, + // Keep this last to avoid merge conflicts. + NodeAttachedDataStorage> { public: static const char kDefaultPriorityReason[];
diff --git a/components/performance_manager/resource_attribution/cpu_measurement_data.cc b/components/performance_manager/resource_attribution/cpu_measurement_data.cc index 5d737024..8040e8c 100644 --- a/components/performance_manager/resource_attribution/cpu_measurement_data.cc +++ b/components/performance_manager/resource_attribution/cpu_measurement_data.cc
@@ -8,10 +8,16 @@ #include <optional> #include <utility> +#include "base/memory/scoped_refptr.h" #include "base/time/time.h" #include "base/types/expected.h" #include "base/types/optional_util.h" +#include "base/values.h" +#include "components/performance_manager/public/graph/node_data_describer_util.h" #include "components/performance_manager/public/resource_attribution/cpu_measurement_delegate.h" +#include "components/performance_manager/public/resource_attribution/query_results.h" +#include "components/performance_manager/resource_attribution/cpu_measurement_monitor.h" +#include "components/performance_manager/resource_attribution/node_data_describers.h" namespace resource_attribution { @@ -27,9 +33,9 @@ CPUMeasurementData::~CPUMeasurementData() = default; -CPUMeasurementData::CPUMeasurementData(CPUMeasurementData&& other) = default; +CPUMeasurementData::CPUMeasurementData(CPUMeasurementData&&) = default; -CPUMeasurementData& CPUMeasurementData::operator=(CPUMeasurementData&& other) = +CPUMeasurementData& CPUMeasurementData::operator=(CPUMeasurementData&&) = default; void CPUMeasurementData::SetMostRecentMeasurement( @@ -39,4 +45,32 @@ last_measurement_time_ = measurement_time; } +SharedCPUTimeResultData::SharedCPUTimeResultData() = default; + +SharedCPUTimeResultData::~SharedCPUTimeResultData() = default; + +SharedCPUTimeResultData::SharedCPUTimeResultData(SharedCPUTimeResultData&&) = + default; + +SharedCPUTimeResultData& SharedCPUTimeResultData::operator=( + SharedCPUTimeResultData&&) = default; + +base::Value::Dict SharedCPUTimeResultData::Describe() const { + base::Value::Dict dict; + if (result_ptr) { + const CPUTimeResult& result = result_ptr->result(); + const base::TimeDelta measurement_interval = + result.metadata.measurement_time - result.start_time; + dict.Merge(DescribeResultMetadata(result.metadata)); + dict.Set("measurement_interval", + performance_manager::TimeDeltaToValue(measurement_interval)); + dict.Set("cumulative_cpu", + performance_manager::TimeDeltaToValue(result.cumulative_cpu)); + dict.Set("cumulative_background_cpu", + performance_manager::TimeDeltaToValue( + result.cumulative_background_cpu)); + } + return dict; +} + } // namespace resource_attribution
diff --git a/components/performance_manager/resource_attribution/cpu_measurement_data.h b/components/performance_manager/resource_attribution/cpu_measurement_data.h index fdd27ea6..7e61b7a 100644 --- a/components/performance_manager/resource_attribution/cpu_measurement_data.h +++ b/components/performance_manager/resource_attribution/cpu_measurement_data.h
@@ -8,12 +8,15 @@ #include <memory> #include <optional> +#include "base/memory/scoped_refptr.h" #include "base/time/time.h" +#include "base/values.h" #include "components/performance_manager/graph/node_inline_data.h" namespace resource_attribution { class CPUMeasurementDelegate; +class ScopedCPUTimeResult; // Holds a CPUMeasurementDelegate object to measure CPU usage and metadata // about the measurements. A CPUMeasurementData will be created by @@ -25,10 +28,10 @@ ~CPUMeasurementData(); // Move-only type. - CPUMeasurementData(const CPUMeasurementData& other) = delete; - CPUMeasurementData& operator=(const CPUMeasurementData& other) = delete; - CPUMeasurementData(CPUMeasurementData&& other); - CPUMeasurementData& operator=(CPUMeasurementData&& other); + CPUMeasurementData(const CPUMeasurementData&) = delete; + CPUMeasurementData& operator=(const CPUMeasurementData&) = delete; + CPUMeasurementData(CPUMeasurementData&&); + CPUMeasurementData& operator=(CPUMeasurementData&&); CPUMeasurementDelegate& measurement_delegate() { return *delegate_; } @@ -49,6 +52,26 @@ base::TimeTicks last_measurement_time_; }; +// Holds refcounted CPU measurement results. +class SharedCPUTimeResultData + : public performance_manager::NodeInlineData<SharedCPUTimeResultData> { + public: + SharedCPUTimeResultData(); + ~SharedCPUTimeResultData(); + + // Move-only type. + SharedCPUTimeResultData(const SharedCPUTimeResultData&) = delete; + SharedCPUTimeResultData& operator=(const SharedCPUTimeResultData&) = delete; + SharedCPUTimeResultData(SharedCPUTimeResultData&&); + SharedCPUTimeResultData& operator=(SharedCPUTimeResultData&&); + + // Returns a description of the result held in `result_ptr` for + // NodeDataDescriber, or an empty dict if it's null. + base::Value::Dict Describe() const; + + scoped_refptr<ScopedCPUTimeResult> result_ptr; +}; + } // namespace resource_attribution #endif // COMPONENTS_PERFORMANCE_MANAGER_RESOURCE_ATTRIBUTION_CPU_MEASUREMENT_DATA_H_
diff --git a/components/performance_manager/resource_attribution/cpu_measurement_monitor.cc b/components/performance_manager/resource_attribution/cpu_measurement_monitor.cc index 933c69f..3799775 100644 --- a/components/performance_manager/resource_attribution/cpu_measurement_monitor.cc +++ b/components/performance_manager/resource_attribution/cpu_measurement_monitor.cc
@@ -32,21 +32,18 @@ #include "base/types/expected.h" #include "base/types/optional_util.h" #include "base/types/variant_util.h" +#include "components/performance_manager/graph/frame_node_impl.h" +#include "components/performance_manager/graph/page_node_impl.h" #include "components/performance_manager/graph/process_node_impl.h" +#include "components/performance_manager/graph/worker_node_impl.h" #include "components/performance_manager/public/features.h" -#include "components/performance_manager/public/graph/frame_node.h" #include "components/performance_manager/public/graph/graph.h" #include "components/performance_manager/public/graph/graph_operations.h" -#include "components/performance_manager/public/graph/node_data_describer_util.h" -#include "components/performance_manager/public/graph/page_node.h" -#include "components/performance_manager/public/graph/process_node.h" -#include "components/performance_manager/public/graph/worker_node.h" #include "components/performance_manager/public/resource_attribution/attribution_helpers.h" #include "components/performance_manager/public/resource_attribution/frame_context.h" #include "components/performance_manager/public/resource_attribution/worker_context.h" #include "components/performance_manager/resource_attribution/cpu_measurement_data.h" #include "components/performance_manager/resource_attribution/graph_change.h" -#include "components/performance_manager/resource_attribution/node_data_describers.h" #include "components/performance_manager/resource_attribution/worker_client_pages.h" #include "content/public/common/process_type.h" #include "third_party/abseil-cpp/absl/types/variant.h" @@ -104,6 +101,37 @@ } } +template <typename NodeImpl> +scoped_refptr<ScopedCPUTimeResult>& GetNodeImplResultPtr(NodeImpl* node_impl) { + // Create() is called from On*NodeAdded, but UpdateCPUMeasurements() from the + // same function can visit nodes whose On*NodeAdded hasn't been called yet. So + // must ensure that the SharedCPUTimeResultData has been created. + if (!SharedCPUTimeResultData::Exists(node_impl)) { + return SharedCPUTimeResultData::Create(node_impl).result_ptr; + } + return SharedCPUTimeResultData::Get(node_impl).result_ptr; +} + +scoped_refptr<ScopedCPUTimeResult>& GetNodeResultPtr(const FrameNode* node) { + CHECK(node); + return GetNodeImplResultPtr(FrameNodeImpl::FromNode(node)); +} + +scoped_refptr<ScopedCPUTimeResult>& GetNodeResultPtr(const PageNode* node) { + CHECK(node); + return GetNodeImplResultPtr(PageNodeImpl::FromNode(node)); +} + +scoped_refptr<ScopedCPUTimeResult>& GetNodeResultPtr(const ProcessNode* node) { + CHECK(node); + return GetNodeImplResultPtr(ProcessNodeImpl::FromNode(node)); +} + +scoped_refptr<ScopedCPUTimeResult>& GetNodeResultPtr(const WorkerNode* node) { + CHECK(node); + return GetNodeImplResultPtr(WorkerNodeImpl::FromNode(node)); +} + } // namespace CPUMeasurementMonitor::CPUMeasurementMonitor() @@ -129,9 +157,9 @@ void CPUMeasurementMonitor::StartMonitoring(Graph* graph) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); CHECK(!graph_); - CHECK(measurement_results_.empty()); - CHECK(dead_context_results_.empty()); + CHECK(origin_results_.empty()); CHECK(weak_origin_results_.empty()); + CHECK(dead_context_results_.empty()); graph_ = graph; graph_->AddFrameNodeObserver(this); graph_->AddPageNodeObserver(this); @@ -150,12 +178,24 @@ void CPUMeasurementMonitor::StopMonitoring() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); CHECK(graph_); + for (const FrameNode* frame_node : graph_->GetAllFrameNodes()) { + GetNodeResultPtr(frame_node).reset(); + } + for (const PageNode* page_node : graph_->GetAllPageNodes()) { + GetNodeResultPtr(page_node).reset(); + } for (const ProcessNode* process_node : graph_->GetAllProcessNodes()) { + GetNodeResultPtr(process_node).reset(); DestroyCPUMeasurementData(process_node); } - measurement_results_.clear(); + for (const WorkerNode* worker_node : graph_->GetAllWorkerNodes()) { + GetNodeResultPtr(worker_node).reset(); + } + origin_results_.clear(); dead_context_results_.clear(); - weak_origin_results_.clear(); + // All ScopedCPUTimeResult objects should be deleted above, removing them all + // from `weak_origin_results_`. + CHECK(weak_origin_results_.empty()); graph_->RemoveFrameNodeObserver(this); graph_->RemovePageNodeObserver(this); graph_->RemoveProcessNodeObserver(this); @@ -205,6 +245,33 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); UpdateAllCPUMeasurements(); + QueryResultMap results; + auto save_result = [&results]( + const ResourceContext& context, + const scoped_refptr<ScopedCPUTimeResult>& result_ptr) { + if (result_ptr) { + ValidateCPUTimeResult(result_ptr->result()); + // Each context should only be added once. + const auto [_, inserted] = results.emplace( + context, QueryResults{.cpu_time_result = result_ptr->result()}); + CHECK(inserted); + } + }; + + // Populate `results` with CPU results for all live PM node contexts. + for (const FrameNode* node : graph_->GetAllFrameNodes()) { + save_result(node->GetResourceContext(), GetNodeResultPtr(node)); + } + for (const PageNode* node : graph_->GetAllPageNodes()) { + save_result(node->GetResourceContext(), GetNodeResultPtr(node)); + } + for (const ProcessNode* node : graph_->GetAllProcessNodes()) { + save_result(node->GetResourceContext(), GetNodeResultPtr(node)); + } + for (const WorkerNode* node : graph_->GetAllWorkerNodes()) { + save_result(node->GetResourceContext(), GetNodeResultPtr(node)); + } + // Get the set of live `OriginInBrowsingInstanceContext`s. // // TODO(crbug.com/333248839): Find a way to reduce the number of iterations @@ -215,24 +282,18 @@ const std::set<OriginInBrowsingInstanceContext> live_origin_contexts = GetLiveOriginInBrowsingInstanceContexts(); - // Populate `results` with CPU results for all live contexts, and remove dead - // `OriginInBrowsingInstanceContext`s referenced by `measurement_results_`. - QueryResultMap results; - for (auto it = measurement_results_.begin(); - it != measurement_results_.end();) { - const ResourceContext& context = it->first; - ScopedCPUTimeResultPtr& result_ptr = it->second; + // Populate `results` with CPU results for all live + // `OriginInBrowsingInstanceContext`s, and remove dead ones. + for (auto it = origin_results_.begin(); it != origin_results_.end();) { + const OriginInBrowsingInstanceContext& origin_context = it->first; + scoped_refptr<ScopedCPUTimeResult>& result_ptr = it->second; CHECK(result_ptr); - if (ContextIs<OriginInBrowsingInstanceContext>(context) && - !base::Contains(live_origin_contexts, - AsContext<OriginInBrowsingInstanceContext>(context))) { - SaveFinalMeasurement(std::move(result_ptr)); - it = measurement_results_.erase(it); - } else { - ValidateCPUTimeResult(result_ptr->result()); - results.emplace(context, - QueryResults{.cpu_time_result = result_ptr->result()}); + if (base::Contains(live_origin_contexts, origin_context)) { + save_result(ResourceContext(origin_context), result_ptr); ++it; + } else { + SaveFinalMeasurement(std::move(result_ptr)); + it = origin_results_.erase(it); } } @@ -248,7 +309,7 @@ auto& dead_context_results_kept_alive = it->second.kept_alive; dead_context_results_kept_alive.clear(); - std::set<ScopedCPUTimeResultPtr> dead_context_results_to_report; + std::set<scoped_refptr<ScopedCPUTimeResult>> dead_context_results_to_report; std::swap(it->second.to_report, dead_context_results_to_report); for (auto& result : dead_context_results_to_report) { @@ -280,34 +341,59 @@ constexpr size_t kNumContextTypes = absl::variant_size<ResourceContext>::value; - // Size of an entry in `measurement_results_` (key + value). Clamped so that - // multiplying by it will never overflow. - constexpr base::ClampedNumeric<uint32_t> kResultEntrySize = - sizeof(std::pair<ResourceContext, ScopedCPUTimeResultPtr>); - - std::set<ScopedCPUTimeResult*> visited_result_ptrs; - // Estimates for each live ResourceContext type by index into the // ResourceContext variant. - std::vector<base::ClampedNumeric<uint32_t>> live_context_estimates( + std::set<ScopedCPUTimeResult*> visited_result_ptrs; + std::vector<base::ClampedNumeric<size_t>> live_context_estimates( kNumContextTypes); - base::ClampedNumeric<uint32_t> total_live_estimate = 0; - for (const auto& [context, result_ptr] : measurement_results_) { - CHECK(result_ptr); - const auto [_, inserted] = visited_result_ptrs.insert(result_ptr.get()); - CHECK(inserted); + base::ClampedNumeric<size_t> total_live_estimate = 0; + auto update_live_estimates = + [&](const ResourceContext& context, + const scoped_refptr<ScopedCPUTimeResult>& result_ptr, + size_t overhead) { + base::ClampedNumeric<size_t> estimate = overhead; + if (result_ptr) { + const auto [_, inserted] = + visited_result_ptrs.insert(result_ptr.get()); + CHECK(inserted); - // Each result has a single reference. - auto estimate = kResultEntrySize + result_ptr->EstimateMemoryUsage(); - live_context_estimates.at(context.index()) += estimate; - total_live_estimate += estimate; + // Each result has a single reference. + estimate += result_ptr->EstimateMemoryUsage(); + } + live_context_estimates.at(context.index()) += estimate; + total_live_estimate += estimate; + }; + + // Overhead in NodeInlineData is one pointer per node. + for (const FrameNode* node : graph_->GetAllFrameNodes()) { + update_live_estimates(node->GetResourceContext(), GetNodeResultPtr(node), + sizeof(scoped_refptr<ScopedCPUTimeResult>)); + } + for (const PageNode* node : graph_->GetAllPageNodes()) { + update_live_estimates(node->GetResourceContext(), GetNodeResultPtr(node), + sizeof(scoped_refptr<ScopedCPUTimeResult>)); + } + for (const ProcessNode* node : graph_->GetAllProcessNodes()) { + update_live_estimates(node->GetResourceContext(), GetNodeResultPtr(node), + sizeof(scoped_refptr<ScopedCPUTimeResult>)); + } + for (const WorkerNode* node : graph_->GetAllWorkerNodes()) { + update_live_estimates(node->GetResourceContext(), GetNodeResultPtr(node), + sizeof(scoped_refptr<ScopedCPUTimeResult>)); + } + + // Overhead in `origin_results_` is one pair (value_type) per map entry. + for (const auto& [context, result_ptr] : origin_results_) { + CHECK(result_ptr); + update_live_estimates(context, result_ptr, + sizeof(decltype(origin_results_)::value_type)); } // Estimates for each dead ResourceContext type by index into the // ResourceContext variant. - std::vector<base::ClampedNumeric<uint32_t>> dead_context_estimates( + std::vector<base::ClampedNumeric<size_t>> dead_context_estimates( kNumContextTypes); - base::ClampedNumeric<uint32_t> total_dead_estimate = 0; + base::ClampedNumeric<size_t> total_dead_estimate = 0; for (const auto& [_, dead_context_results_for_query] : dead_context_results_) { for (const auto& dead_context_results_set : @@ -319,7 +405,7 @@ // There can be multiple references to the same `ScopedCPUTimeResult`. // Only include the size of the `ScopedCPUTimeResult` object the first // time it's seen, but always include the size of the pointer. - auto estimate = sizeof(ScopedCPUTimeResultPtr); + auto estimate = sizeof(scoped_refptr<ScopedCPUTimeResult>); if (inserted) { estimate += result->EstimateMemoryUsage(); } @@ -384,6 +470,7 @@ const ProcessNode* pending_process_node, const FrameNode* pending_parent_or_outer_document_or_embedder) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SharedCPUTimeResultData::Create(FrameNodeImpl::FromNode(frame_node)); // Take a measurement of the process CPU usage *before* this node was added. // This is safe because frames should only be added after their containing // process has started. @@ -396,7 +483,7 @@ // Take a measurement of the process CPU usage, including this frame, so that // its final CPU usage is attributed to it before it's removed. UpdateCPUMeasurements(frame_node->GetProcessNode()); - SaveFinalMeasurement(frame_node->GetResourceContext()); + SaveFinalMeasurement(std::move(GetNodeResultPtr(frame_node))); } void CPUMeasurementMonitor::OnOriginChanged( @@ -410,11 +497,22 @@ GraphChangeUpdateOrigin(frame_node, previous_value)); } +void CPUMeasurementMonitor::OnPageNodeAdded(const PageNode* page_node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SharedCPUTimeResultData::Create(PageNodeImpl::FromNode(page_node)); +} + void CPUMeasurementMonitor::OnBeforePageNodeRemoved(const PageNode* page_node) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // No need to call UpdateCPUMeasurements() since a measurement was taken when // the last frame was removed from the page. - SaveFinalMeasurement(page_node->GetResourceContext()); + SaveFinalMeasurement(std::move(GetNodeResultPtr(page_node))); +} + +void CPUMeasurementMonitor::OnProcessNodeAdded( + const ProcessNode* process_node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SharedCPUTimeResultData::Create(ProcessNodeImpl::FromNode(process_node)); } void CPUMeasurementMonitor::OnProcessLifetimeChange( @@ -438,7 +536,7 @@ // TODO(crbug.com/325330345): Capture the full final measurement reported // through ChildProcessTerminationInfo::cpu_usage. UpdateCPUMeasurements(process_node); - SaveFinalMeasurement(process_node->GetResourceContext()); + SaveFinalMeasurement(std::move(GetNodeResultPtr(process_node))); } void CPUMeasurementMonitor::OnPriorityChanged( @@ -452,6 +550,7 @@ const WorkerNode* worker_node, const ProcessNode* pending_process_node) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SharedCPUTimeResultData::Create(WorkerNodeImpl::FromNode(worker_node)); // Take a measurement of the process CPU usage *before* this node was added. // This is safe because workers should only be added after their containing // process has started. @@ -464,7 +563,7 @@ // Take a measurement of the process CPU usage, including this node, so that // its final CPU usage is attributed to it before it's removed. UpdateCPUMeasurements(worker_node->GetProcessNode()); - SaveFinalMeasurement(worker_node->GetResourceContext()); + SaveFinalMeasurement(std::move(GetNodeResultPtr(worker_node))); } void CPUMeasurementMonitor::OnBeforeClientFrameAdded( @@ -509,22 +608,24 @@ base::Value::Dict CPUMeasurementMonitor::DescribeFrameNodeData( const FrameNode* node) const { - return DescribeContextData(node->GetResourceContext()); + return SharedCPUTimeResultData::Get(FrameNodeImpl::FromNode(node)).Describe(); } base::Value::Dict CPUMeasurementMonitor::DescribePageNodeData( const PageNode* node) const { - return DescribeContextData(node->GetResourceContext()); + return SharedCPUTimeResultData::Get(PageNodeImpl::FromNode(node)).Describe(); } base::Value::Dict CPUMeasurementMonitor::DescribeProcessNodeData( const ProcessNode* node) const { - return DescribeContextData(node->GetResourceContext()); + return SharedCPUTimeResultData::Get(ProcessNodeImpl::FromNode(node)) + .Describe(); } base::Value::Dict CPUMeasurementMonitor::DescribeWorkerNodeData( const WorkerNode* node) const { - return DescribeContextData(node->GetResourceContext()); + return SharedCPUTimeResultData::Get(WorkerNodeImpl::FromNode(node)) + .Describe(); } void CPUMeasurementMonitor::MonitorCPUUsage(const ProcessNode* process_node) { @@ -579,21 +680,39 @@ ApplyMeasurementDeltas(measurement_deltas, graph_change); } -CPUMeasurementMonitor::ScopedCPUTimeResultPtr& -CPUMeasurementMonitor::GetResultPtr(const ResourceContext& context) { +scoped_refptr<ScopedCPUTimeResult>& CPUMeasurementMonitor::GetResultPtr( + const ResourceContext& context) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - auto [it, inserted] = measurement_results_.try_emplace(context, nullptr); - ScopedCPUTimeResultPtr& result_ptr = it->second; - if (inserted && ContextIs<OriginInBrowsingInstanceContext>(context)) { - // Check if there is a result for this `OriginInBrowsingInstanceContext` - // which is still referenced by `dead_context_results_`. - auto result_it = weak_origin_results_.find( - AsContext<OriginInBrowsingInstanceContext>(context)); - if (result_it != weak_origin_results_.end()) { - result_ptr = result_it->second; - } + if (ContextIs<FrameContext>(context)) { + return GetNodeResultPtr(AsContext<FrameContext>(context).GetFrameNode()); } - return result_ptr; + if (ContextIs<PageContext>(context)) { + return GetNodeResultPtr(AsContext<PageContext>(context).GetPageNode()); + } + if (ContextIs<ProcessContext>(context)) { + return GetNodeResultPtr( + AsContext<ProcessContext>(context).GetProcessNode()); + } + if (ContextIs<WorkerContext>(context)) { + return GetNodeResultPtr(AsContext<WorkerContext>(context).GetWorkerNode()); + } + if (ContextIs<OriginInBrowsingInstanceContext>(context)) { + const auto& origin_context = + AsContext<OriginInBrowsingInstanceContext>(context); + auto [it, inserted] = origin_results_.try_emplace(origin_context, nullptr); + scoped_refptr<ScopedCPUTimeResult>& result_ptr = it->second; + if (inserted) { + // Check if there is a result for this `OriginInBrowsingInstanceContext` + // which is still referenced by `dead_context_results_`. + auto result_it = weak_origin_results_.find(origin_context); + if (result_it != weak_origin_results_.end()) { + result_ptr = result_it->second; + } + } + return result_ptr; + } + // That should cover all context types. + NOTREACHED(); } void CPUMeasurementMonitor::ApplyMeasurementDeltas( @@ -656,7 +775,7 @@ const CPUTimeResult& delta) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ValidateCPUTimeResult(delta); - ScopedCPUTimeResultPtr& result_ptr = GetResultPtr(context); + scoped_refptr<ScopedCPUTimeResult>& result_ptr = GetResultPtr(context); if (!result_ptr) { result_ptr = base::MakeRefCounted<ScopedCPUTimeResult>(this, context, delta); @@ -680,7 +799,7 @@ const CPUTimeResult& delta) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ValidateCPUTimeResult(delta); - ScopedCPUTimeResultPtr& result_ptr = GetResultPtr(context); + scoped_refptr<ScopedCPUTimeResult>& result_ptr = GetResultPtr(context); if (!result_ptr) { result_ptr = base::MakeRefCounted<ScopedCPUTimeResult>(this, context, delta); @@ -702,29 +821,20 @@ } void CPUMeasurementMonitor::SaveFinalMeasurement( - const ResourceContext& context) { + scoped_refptr<ScopedCPUTimeResult>&& result_ptr) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - auto it = measurement_results_.find(context); - if (it != measurement_results_.end()) { - SaveFinalMeasurement(std::move(it->second)); - measurement_results_.erase(it); + if (result_ptr) { + // Copy the scoped_refptr to result list for every existing query_id. + for (auto& [query_id, dead_context_results_for_query] : + dead_context_results_) { + dead_context_results_for_query.to_report.emplace(result_ptr); + } + // When `result_ptr` goes out of scope it's dropped from the live + // measurement results. Now there's one reference for every query, and the + // CPUTimeResult will be deleted once all queries have gotten the result. } } -void CPUMeasurementMonitor::SaveFinalMeasurement( - ScopedCPUTimeResultPtr&& result_ptr) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - CHECK(result_ptr); - // Copy the scoped_refptr to result list for every existing query_id. - for (auto& [query_id, dead_context_results_for_query] : - dead_context_results_) { - dead_context_results_for_query.to_report.emplace(result_ptr); - } - // When `result_ptr` goes out of scope it's dropped from the live measurement - // results. Now there's one reference for every query, and the CPUTimeResult - // will be deleted once all queries have gotten the result. -} - std::set<OriginInBrowsingInstanceContext> CPUMeasurementMonitor::GetLiveOriginInBrowsingInstanceContexts() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -755,60 +865,6 @@ return live_origin_contexts; } -CPUMeasurementMonitor::ScopedCPUTimeResult::ScopedCPUTimeResult( - CPUMeasurementMonitor* monitor, - const ResourceContext& context, - const CPUTimeResult& result) - : monitor_(monitor), context_(context), result_(result) { - if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { - auto [_, inserted] = monitor_->weak_origin_results_.emplace( - AsContext<OriginInBrowsingInstanceContext>(context_), this); - CHECK(inserted); - } -} - -CPUMeasurementMonitor::ScopedCPUTimeResult::~ScopedCPUTimeResult() { - if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { - size_t num_erased = monitor_->weak_origin_results_.erase( - AsContext<OriginInBrowsingInstanceContext>(context_)); - CHECK_EQ(num_erased, 1U); - } -} - -size_t CPUMeasurementMonitor::ScopedCPUTimeResult::EstimateMemoryUsage() const { - size_t size = sizeof(*this); - if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { - // OriginInBrowsingInstanceContext includes an url::Origin, which has - // variable-size data. - size += AsContext<OriginInBrowsingInstanceContext>(context_) - .GetOrigin() - .EstimateMemoryUsage(); - } - return size; -} - -base::Value::Dict CPUMeasurementMonitor::DescribeContextData( - const ResourceContext& context) const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - base::Value::Dict dict; - const auto it = measurement_results_.find(context); - if (it != measurement_results_.end()) { - CHECK(it->second); - const CPUTimeResult& result = it->second->result(); - const base::TimeDelta measurement_interval = - result.metadata.measurement_time - result.start_time; - dict.Merge(DescribeResultMetadata(result.metadata)); - dict.Set("measurement_interval", - performance_manager::TimeDeltaToValue(measurement_interval)); - dict.Set("cumulative_cpu", - performance_manager::TimeDeltaToValue(result.cumulative_cpu)); - dict.Set("cumulative_background_cpu", - performance_manager::TimeDeltaToValue( - result.cumulative_background_cpu)); - } - return dict; -} - // static void CPUMeasurementMonitor::MeasureAndDistributeCPUUsage( const ProcessNode* process_node, @@ -1024,4 +1080,35 @@ CPUMeasurementMonitor::DeadContextResults::operator=(DeadContextResults&&) = default; +ScopedCPUTimeResult::ScopedCPUTimeResult(CPUMeasurementMonitor* monitor, + const ResourceContext& context, + const CPUTimeResult& result) + : monitor_(monitor), context_(context), result_(result) { + if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { + auto [_, inserted] = monitor_->weak_origin_results_.emplace( + AsContext<OriginInBrowsingInstanceContext>(context_), this); + CHECK(inserted); + } +} + +ScopedCPUTimeResult::~ScopedCPUTimeResult() { + if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { + size_t num_erased = monitor_->weak_origin_results_.erase( + AsContext<OriginInBrowsingInstanceContext>(context_)); + CHECK_EQ(num_erased, 1U); + } +} + +size_t ScopedCPUTimeResult::EstimateMemoryUsage() const { + size_t size = sizeof(*this); + if (ContextIs<OriginInBrowsingInstanceContext>(context_)) { + // OriginInBrowsingInstanceContext includes an url::Origin, which has + // variable-size data. + size += AsContext<OriginInBrowsingInstanceContext>(context_) + .GetOrigin() + .EstimateMemoryUsage(); + } + return size; +} + } // namespace resource_attribution
diff --git a/components/performance_manager/resource_attribution/cpu_measurement_monitor.h b/components/performance_manager/resource_attribution/cpu_measurement_monitor.h index 68fdf302..2a0b1b2a 100644 --- a/components/performance_manager/resource_attribution/cpu_measurement_monitor.h +++ b/components/performance_manager/resource_attribution/cpu_measurement_monitor.h
@@ -30,6 +30,8 @@ namespace resource_attribution { +class ScopedCPUTimeResult; + // Periodically collect CPU usage from process nodes. // // Note: this can't store measurements in NodeAttachedData because the final CPU @@ -109,9 +111,11 @@ const std::optional<url::Origin>& previous_value) override; // PageNode::Observer: + void OnPageNodeAdded(const PageNode* page_node) override; void OnBeforePageNodeRemoved(const PageNode* page_node) override; // ProcessNode::Observer: + void OnProcessNodeAdded(const ProcessNode* process_node) override; void OnProcessLifetimeChange(const ProcessNode* process_node) override; void OnBeforeProcessNodeRemoved(const ProcessNode* process_node) override; void OnPriorityChanged(const ProcessNode* process_node, @@ -142,63 +146,33 @@ private: friend class CPUMeasurementMonitorTest; - - // Ref-counted class which holds a `ResourceContext` and `CPUTimeResult`. - // - // If the context is an `OriginInBrowsingInstanceContext`, the - // constructor/destructor maintain a non-owning pointer to `this` in - // `weak_origin_results_`, allowing `GetResultPtr()` to reuse a result that is - // still referenced by `dead_context_results_`. - class ScopedCPUTimeResult : public base::RefCounted<ScopedCPUTimeResult> { - public: - ScopedCPUTimeResult(CPUMeasurementMonitor* monitor, - const ResourceContext& context, - const CPUTimeResult& result); - - ScopedCPUTimeResult(const ScopedCPUTimeResult&) = delete; - ScopedCPUTimeResult& operator=(const ScopedCPUTimeResult&) = delete; - - CPUTimeResult& result() { return result_; } - const ResourceContext& context() const { return context_; } - size_t EstimateMemoryUsage() const; - - private: - friend class base::RefCounted<ScopedCPUTimeResult>; - - ~ScopedCPUTimeResult(); - - const raw_ptr<CPUMeasurementMonitor> monitor_; - const ResourceContext context_; - CPUTimeResult result_; - }; - - using ScopedCPUTimeResultPtr = scoped_refptr<ScopedCPUTimeResult>; + friend class ScopedCPUTimeResult; // Creates a CPUMeasurementData to track the CPU usage of `process_node`. void MonitorCPUUsage(const ProcessNode* process_node); // Updates the CPU measurement for all ProcessNodes being monitored using // MeasureAndDistributeCPUUsage(). Adds the estimated CPU usage of each frame - // and worker since the last time the process was measured to - // `measurement_results_`. + // and worker since the last time the process was measured to a + // ScopedCPUTimeResult. void UpdateAllCPUMeasurements(); // Updates the CPU measurement for `process_node` using // MeasureAndDistributeCPUUsage(). Adds the estimated CPU usage of each frame - // and worker since the last time the process was measured to - // `measurement_results_`. `graph_change` is the event that triggered the + // and worker since the last time the process was measured to a + // ScopedCPUTimeResult. `graph_change` is the event that triggered the // measurement or NoGraphChange if it wasn't triggered due to a graph change. void UpdateCPUMeasurements(const ProcessNode* process_node, GraphChange graph_change = NoGraphChange()); - // Retrieves the `CPUTimeResult` for `context` from `measurement_results_`. If - // no result exists, creates an empty map entry and returns a reference to a - // null pointer, which the caller must initialize. - ScopedCPUTimeResultPtr& GetResultPtr(const ResourceContext& context); + // Retrieves the `CPUTimeResult` for `context`. If no result exists, returns a + // reference to a null pointer, which the caller must initialize. + scoped_refptr<ScopedCPUTimeResult>& GetResultPtr( + const ResourceContext& context); - // Adds the new measurements in `measurement_deltas` to - // `measurement_results_`. `graph_change` is the event that triggered the - // measurement or NoGraphChange if it wasn't triggered due to a graph change. + // Adds the new measurements in `measurement_deltas` to ScopedCPUTimeResults. + // `graph_change` is the event that triggered the measurement or NoGraphChange + // if it wasn't triggered due to a graph change. void ApplyMeasurementDeltas( const std::map<ResourceContext, CPUTimeResult>& measurement_deltas, GraphChange graph_change = NoGraphChange()); @@ -219,22 +193,15 @@ void ApplyOverlappingDelta(const ResourceContext& context, const CPUTimeResult& delta); - // Moves the measurements for `context` into `dead_context_results_`. - void SaveFinalMeasurement(const ResourceContext& context); - // Moves `result_ptr` into `dead_context_results_`. `result_ptr` is passed by // move to ensure the caller drops its reference to the live result. - void SaveFinalMeasurement(ScopedCPUTimeResultPtr&& result_ptr); + void SaveFinalMeasurement(scoped_refptr<ScopedCPUTimeResult>&& result_ptr); // Returns all `OriginInBrowsingInstanceContext`s associated with live frame // or worker contexts. std::set<OriginInBrowsingInstanceContext> GetLiveOriginInBrowsingInstanceContexts(); - // Returns description of the most recent measurement of `context` for - // NodeDataDescriber, or an empty dict if there is none. - base::Value::Dict DescribeContextData(const ResourceContext& context) const; - // Measures the CPU usage of `process_node`, calculates the change in CPU // usage over the period (`last_measurement_time_` ... now], and allocates // the results to frames and workers in the process using @@ -247,10 +214,13 @@ SEQUENCE_CHECKER(sequence_checker_); - // A map from live resource contexts to the estimated CPU usage of each, - // updated whenever UpdateCPUMeasurements() is called. - std::map<ResourceContext, ScopedCPUTimeResultPtr> measurement_results_ - GUARDED_BY_CONTEXT(sequence_checker_); + // A map from `OriginInBrowsingInstanceContext`s to the estimated CPU usage of + // each, updated whenever UpdateCPUMeasurements() is called. An + // `OriginInBrowsingInstanceContext` is considered live as long as it's in + // this map. Results for other context types are held in NodeInlineData in + // live PM nodes. + std::map<OriginInBrowsingInstanceContext, scoped_refptr<ScopedCPUTimeResult>> + origin_results_ GUARDED_BY_CONTEXT(sequence_checker_); // A map of non-owning pointers to all `ScopedCPUTimeResult` instances // associated with `OriginInBrowsingInstanceContext`. @@ -270,13 +240,15 @@ // Move-only. DeadContextResults(DeadContextResults&&); DeadContextResults& operator=(DeadContextResults&&); + DeadContextResults(const DeadContextResults&) = delete; + DeadContextResults& operator=(const DeadContextResults&) = delete; // Results for dead contexts to report in the next measurement for this // query. // // When a context dies, its result is added to the `to_report` set of all // live queries. - std::set<ScopedCPUTimeResultPtr> to_report; + std::set<scoped_refptr<ScopedCPUTimeResult>> to_report; // Results kept alive until the next measurement for this query, in case the // associated context is revived. If a context is revived while this set has @@ -289,7 +261,7 @@ // consecutive measurements for a query contain a result for a given // context, the cumulative CPU usage isn't reset between the two // measurements, even if the context was transiently dead. - std::set<ScopedCPUTimeResultPtr> kept_alive; + std::set<scoped_refptr<ScopedCPUTimeResult>> kept_alive; }; std::map<internal::QueryId, DeadContextResults> dead_context_results_ GUARDED_BY_CONTEXT(sequence_checker_); @@ -304,6 +276,35 @@ raw_ptr<Graph> graph_ GUARDED_BY_CONTEXT(sequence_checker_) = nullptr; }; +// Ref-counted class which holds a `ResourceContext` and `CPUTimeResult`. +// +// If the context is an `OriginInBrowsingInstanceContext`, the constructor and +// destructor maintain a non-owning pointer to `this` in `weak_origin_results_`, +// allowing GetOriginInBrowsingInstanceResultPtr() to reuse a result that is +// still referenced by `dead_context_results_`. +class ScopedCPUTimeResult : public base::RefCounted<ScopedCPUTimeResult> { + public: + ScopedCPUTimeResult(CPUMeasurementMonitor* monitor, + const ResourceContext& context, + const CPUTimeResult& result); + + ScopedCPUTimeResult(const ScopedCPUTimeResult&) = delete; + ScopedCPUTimeResult& operator=(const ScopedCPUTimeResult&) = delete; + + CPUTimeResult& result() { return result_; } + const ResourceContext& context() const { return context_; } + size_t EstimateMemoryUsage() const; + + private: + friend class base::RefCounted<ScopedCPUTimeResult>; + + ~ScopedCPUTimeResult(); + + const raw_ptr<CPUMeasurementMonitor> monitor_; + const ResourceContext context_; + CPUTimeResult result_; +}; + } // namespace resource_attribution #endif // COMPONENTS_PERFORMANCE_MANAGER_RESOURCE_ATTRIBUTION_CPU_MEASUREMENT_MONITOR_H_
diff --git a/components/saved_tab_groups/internal/tab_group_sync_service_impl.cc b/components/saved_tab_groups/internal/tab_group_sync_service_impl.cc index aca2b41d..3c490ec 100644 --- a/components/saved_tab_groups/internal/tab_group_sync_service_impl.cc +++ b/components/saved_tab_groups/internal/tab_group_sync_service_impl.cc
@@ -1389,6 +1389,15 @@ const LocalTabGroupID local_group_id = originating_tab_group->local_group_id().value(); + // Before disconnecting the local group, keep the local tab group IDs to + // assign them later to the new group. Note that RemoveLocalTabGroupMapping + // below will clear the local tab IDs. + std::vector<std::optional<LocalTabID>> local_tab_ids; + for (const SavedTabGroupTab& tab : originating_tab_group->saved_tabs()) { + // All tabs should have local IDs but use optional to be safe. + local_tab_ids.push_back(tab.local_tab_id()); + } + // First, remove the local tab group mapping and then disconnect the local // tab group. Note that on some platforms the coordinator may call // RemoveLocalTabGroupMapping() but it should be a no-op. @@ -1400,6 +1409,22 @@ // restore. ConnectLocalTabGroup(tab_group.saved_guid(), local_group_id, opening_source); + + // Assign local tab IDs on best effort basis if ConnectLocalTabGroup() + // has not assigned them yet. + const SavedTabGroup* transitioned_group = model_->Get(local_group_id); + CHECK(transitioned_group); + for (size_t i = 0; i < std::min(local_tab_ids.size(), + transitioned_group->saved_tabs().size()); + ++i) { + const SavedTabGroupTab& tab = transitioned_group->saved_tabs()[i]; + if (!tab.local_tab_id().has_value() && + tab.local_tab_id() != local_tab_ids[i]) { + // Copy the tab as it's required for updating the local tab ID. + model_->UpdateLocalTabId(transitioned_group->saved_guid(), tab, + local_tab_ids[i]); + } + } } return true;
diff --git a/components/saved_tab_groups/internal/tab_group_sync_service_unittest.cc b/components/saved_tab_groups/internal/tab_group_sync_service_unittest.cc index a28b7c2..6a2d104 100644 --- a/components/saved_tab_groups/internal/tab_group_sync_service_unittest.cc +++ b/components/saved_tab_groups/internal/tab_group_sync_service_unittest.cc
@@ -1855,16 +1855,18 @@ saved_tab.creation_time_windows_epoch_micros()); EXPECT_GT(shared_tab.update_time_windows_epoch_micros(), saved_tab.update_time_windows_epoch_micros()); + EXPECT_NE(shared_tab.local_tab_id(), std::nullopt); + EXPECT_EQ(saved_tab.local_tab_id(), std::nullopt); + + // The local tab ID should remain the same. Use `group_1_` to verify because + // it's a copy of the originating group before the migration. + EXPECT_EQ(shared_tab.local_tab_id(), + group_1_.saved_tabs()[i].local_tab_id()); // Do not verify the position of the original tab because its meaning // differs for shared tab groups: it's the index of the tab in the shared // group. EXPECT_EQ(shared_tab.position(), i); - - // Local tab ID is not covered by this test but the originating tab should - // not have it. - EXPECT_EQ(shared_tab.local_tab_id(), std::nullopt); - EXPECT_EQ(saved_tab.local_tab_id(), std::nullopt); } } @@ -1996,6 +1998,8 @@ shared_tab.creation_time_windows_epoch_micros()); EXPECT_GT(saved_tab.update_time_windows_epoch_micros(), shared_tab.update_time_windows_epoch_micros()); + EXPECT_NE(saved_tab.local_tab_id(), std::nullopt); + EXPECT_EQ(shared_tab.local_tab_id(), std::nullopt); // Do not verify the position of the original tab because its meaning // differs for shared tab groups: it's the index of the tab in the shared
diff --git a/components/search/ntp_features.cc b/components/search/ntp_features.cc index e4cb09e8..56cf126 100644 --- a/components/search/ntp_features.cc +++ b/components/search/ntp_features.cc
@@ -158,11 +158,6 @@ "NtpModulesLoadedWithOtherModulesMaxInstanceCount", base::FEATURE_DISABLED_BY_DEFAULT); -// If true, displays a horizontal scrollbar on overflowing modules. -BASE_FEATURE(kNtpModulesOverflowScrollbar, - "NtpModulesOverflowScrollbar", - base::FEATURE_ENABLED_BY_DEFAULT); - // If enabled, modules will be able to be reordered via dragging and dropping BASE_FEATURE(kNtpModulesDragAndDrop, "NtpModulesDragAndDrop",
diff --git a/components/search/ntp_features.h b/components/search/ntp_features.h index b2560b8..187fcc0 100644 --- a/components/search/ntp_features.h +++ b/components/search/ntp_features.h
@@ -47,7 +47,6 @@ BASE_DECLARE_FEATURE(kNtpMiddleSlotPromoDismissal); BASE_DECLARE_FEATURE(kNtpModulesLoadTimeoutMilliseconds); BASE_DECLARE_FEATURE(kNtpModulesOrder); -BASE_DECLARE_FEATURE(kNtpModulesOverflowScrollbar); BASE_DECLARE_FEATURE(kNtpModulesDragAndDrop); BASE_DECLARE_FEATURE(kNtpModulesLoad); BASE_DECLARE_FEATURE(kNtpOutlookCalendarModule);
diff --git a/components/signin/public/base/signin_metrics.h b/components/signin/public/base/signin_metrics.h index 63cb315c..a83f6f7 100644 --- a/components/signin/public/base/signin_metrics.h +++ b/components/signin/public/base/signin_metrics.h
@@ -263,6 +263,9 @@ // Enum values which enumerates all access points where transactional reauth // could be initiated. Transactional reauth is used when the user already has // a valid refresh token but a system still wants to verify user's identity. +// +// TODO(crbug.com/374293518): Delete this and the reauth UI entirely once no +// access points are hooked anymore. enum class ReauthAccessPoint { kUnknown, // Account password storage opt-in:
diff --git a/components/supervised_user/core/common/supervised_user_constants.cc b/components/supervised_user/core/common/supervised_user_constants.cc index c7f3a80..80528c3 100644 --- a/components/supervised_user/core/common/supervised_user_constants.cc +++ b/components/supervised_user/core/common/supervised_user_constants.cc
@@ -124,5 +124,7 @@ "SupervisedUsers.ClassifyUrlThrottle.LaterThanContentResponse"; extern const char kClassifyUrlThrottleStatusHistogramName[] = "SupervisedUsers.ClassifyUrlThrottle.Status"; +extern const char kClassifyUrlThrottleFinalStatusHistogramName[] = + "SupervisedUsers.ClassifyUrlThrottle.FinalStatus"; } // namespace supervised_user
diff --git a/components/supervised_user/core/common/supervised_user_constants.h b/components/supervised_user/core/common/supervised_user_constants.h index 44b3d8c..83ab987 100644 --- a/components/supervised_user/core/common/supervised_user_constants.h +++ b/components/supervised_user/core/common/supervised_user_constants.h
@@ -192,10 +192,18 @@ // Feedback source name for family member role in Family Link. extern const char kFamilyMemberRoleFeedbackTag[]; -// Histogram name for the ::ClassifyUrlLoaderThrottle +// Histogram name to track throttle's headroom before its decision was required. extern const char kClassifiedEarlierThanContentResponseHistogramName[]; + +// Histogram name to track how much throttle delayed the navigation. extern const char kClassifiedLaterThanContentResponseHistogramName[]; + +// Histogram name to track intermediate throttle states. extern const char kClassifyUrlThrottleStatusHistogramName[]; + +// Histogram name to track the final throttle verdict. +extern const char kClassifyUrlThrottleFinalStatusHistogramName[]; + } // namespace supervised_user #endif // COMPONENTS_SUPERVISED_USER_CORE_COMMON_SUPERVISED_USER_CONSTANTS_H_
diff --git a/components/sync/base/data_type_histogram.cc b/components/sync/base/data_type_histogram.cc index 8f7f20b..744604a 100644 --- a/components/sync/base/data_type_histogram.cc +++ b/components/sync/base/data_type_histogram.cc
@@ -13,8 +13,6 @@ namespace { -const char kLegacyModelTypeCountHistogramPrefix[] = "Sync.ModelTypeCount4."; - const char kDataTypeMemoryHistogramPrefix[] = "Sync.DataTypeMemoryKB."; const char kDataTypeCountHistogramPrefix[] = "Sync.DataTypeCount."; const char kDataTypeUpdateDropHistogramPrefix[] = "Sync.DataTypeUpdateDrop."; @@ -71,12 +69,6 @@ std::string type_string = DataTypeToHistogramSuffix(data_type); std::string full_histogram_name = kDataTypeCountHistogramPrefix + type_string; base::UmaHistogramCounts1M(full_histogram_name, count); - - // TODO(crbug.com/358120886): Stop recording once alerts are switched to use - // Sync.DataTypeCount. - std::string legacy_histogram_name = - kLegacyModelTypeCountHistogramPrefix + type_string; - base::UmaHistogramCounts1M(legacy_histogram_name, count); } void SyncRecordDataTypeEntitySizeHistogram(DataType data_type,
diff --git a/components/sync/engine/cycle/entity_change_metric_recording.cc b/components/sync/engine/cycle/entity_change_metric_recording.cc index 973537c6..7e4c4bb 100644 --- a/components/sync/engine/cycle/entity_change_metric_recording.cc +++ b/components/sync/engine/cycle/entity_change_metric_recording.cc
@@ -11,8 +11,6 @@ namespace { const char kEntityChangeHistogramPrefix[] = "Sync.DataTypeEntityChange."; -const char kLegacyEntityChangeHistogramPrefix[] = - "Sync.ModelTypeEntityChange3."; } // namespace @@ -20,14 +18,6 @@ std::string histogram_name = std::string(kEntityChangeHistogramPrefix) + DataTypeToHistogramSuffix(type); base::UmaHistogramEnumeration(histogram_name, change); - - // Legacy equivalent, before the metric was renamed. - // TODO(crbug.com/358120886): Stop recording once alerts are switched to use - // Sync.DataTypeEntityChange. - std::string legacy_histogram_name = - std::string(kLegacyEntityChangeHistogramPrefix) + - DataTypeToHistogramSuffix(type); - base::UmaHistogramEnumeration(legacy_histogram_name, change); } std::string GetEntityChangeHistogramNameForTest(DataType type) {
diff --git a/content/browser/ai/echo_ai_language_model.cc b/content/browser/ai/echo_ai_language_model.cc index edfbf0f2..67fb0ef2 100644 --- a/content/browser/ai/echo_ai_language_model.cc +++ b/content/browser/ai/echo_ai_language_model.cc
@@ -36,18 +36,21 @@ "On-device model is not available in Chromium, this API is just echoing " "back the input:\n" + input; - // To make EchoAILanguageModel simple, we will use the string length as the - // size in tokens, and the `current_tokens_` will only keep track of the - // response size. Once overflow, it will be cleared. - current_tokens_ += response.size(); - bool did_overflow = false; - if (current_tokens_ > EchoAIManagerImpl::kMaxContextSizeInTokens) { - current_tokens_ = 0; - did_overflow = true; + + if (input.size() > EchoAIManagerImpl::kMaxContextSizeInTokens) { + responder->OnError(blink::mojom::ModelStreamingResponseStatus:: + kErrorPromptRequestTooLarge); + return; } + if (current_tokens_ > + EchoAIManagerImpl::kMaxContextSizeInTokens - input.size()) { + current_tokens_ = input.size(); + responder->OnContextOverflow(); + } + current_tokens_ += input.size(); responder->OnStreaming(response); - responder->OnCompletion(blink::mojom::ModelExecutionContextInfo::New( - current_tokens_, did_overflow)); + responder->OnCompletion( + blink::mojom::ModelExecutionContextInfo::New(current_tokens_)); } void EchoAILanguageModel::Prompt(
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index d92d5f2..7985a1a 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -1138,6 +1138,11 @@ service_worker_host->GetNetworkIsolationKey().ToCacheKeyString(); return isolation_key ? *isolation_key : ""; } + // Return an empty isolation key if there's no workers matching the token. + // This may happen if a user has a service worker started locally for a web + // app but now uses same origin for another web app bar which doesn't have a + // service worker. + return ""; } NOTREACHED();
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index e93fa14..8a7af5c 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -250,7 +250,6 @@ std::move(devtools_observer), /*priority=*/net::HIGHEST, request_info.is_main_frame); - new_request->navigation_redirect_chain.push_back(new_request->url); new_request->trusted_params->cookie_observer = std::move(cookie_observer); new_request->trusted_params->trust_token_observer = std::move(trust_token_observer); @@ -292,7 +291,6 @@ new_request->request_body = request_info.common_params->post_data.get(); new_request->has_user_gesture = request_info.common_params->has_user_gesture; - new_request->mode = network::mojom::RequestMode::kNavigate; if (ui::PageTransitionIsWebTriggerable( ui::PageTransitionFromInt(request_info.common_params->transition))) { @@ -302,7 +300,6 @@ new_request->trusted_params->has_user_activation = true; } - new_request->redirect_mode = network::mojom::RedirectMode::kManual; new_request->upgrade_if_insecure = request_info.upgrade_if_insecure; new_request->throttling_profile_id = request_info.devtools_frame_token; new_request->transition_type = request_info.common_params->transition; @@ -474,7 +471,7 @@ // url: entry's URL [spec text] new_request->url = url; - // TODO(crbug.com/379263818): Set `navigation_redirect_chain` here as well. + new_request->navigation_redirect_chain.push_back(new_request->url); // client: sourceSnapshotParams's fetch client [spec text] @@ -487,14 +484,14 @@ // use-URL-credentials flag: set [spec text] // redirect mode: "manual" [spec text] - // TODO(crbug.com/379263818): Set this here. + new_request->redirect_mode = network::mojom::RedirectMode::kManual; // replaces client id: navigable's active document's relevant settings // object's id [spec text] // Not implemented (https://crbug.com/40287592). // mode: "navigate" [spec text] - // TODO(crbug.com/379263818): Set this here. + new_request->mode = network::mojom::RequestMode::kNavigate; // referrer: entry's document state's request referrer [spec text] new_request->referrer = referrer.url;
diff --git a/content/browser/preloading/prefetch/prefetch_container.cc b/content/browser/preloading/prefetch/prefetch_container.cc index 631b2f4..41ce461 100644 --- a/content/browser/preloading/prefetch/prefetch_container.cc +++ b/content/browser/preloading/prefetch/prefetch_container.cc
@@ -1845,7 +1845,7 @@ auto request = CreateResourceRequestForNavigation( net::HttpRequestHeaders::kGetMethod, url, - network::mojom::RequestDestination::kEmpty, referrer_, isolation_info, + network::mojom::RequestDestination::kDocument, referrer_, isolation_info, std::move(devtools_observer_remote), priority, is_main_frame); // Note: Even without LOAD_DISABLE_CACHE, a cross-site prefetch uses a
diff --git a/content/browser/preloading/prefetch/prefetch_service_unittest.cc b/content/browser/preloading/prefetch/prefetch_service_unittest.cc index 55bea22..6eed4c3 100644 --- a/content/browser/preloading/prefetch/prefetch_service_unittest.cc +++ b/content/browser/preloading/prefetch/prefetch_service_unittest.cc
@@ -4,9 +4,12 @@ #include "content/browser/preloading/prefetch/prefetch_service.h" +#include <memory> +#include <optional> #include <string_view> #include <vector> +#include "base/memory/weak_ptr.h" #include "base/notreached.h" #include "base/ranges/algorithm.h" #include "base/run_loop.h" @@ -20,6 +23,7 @@ #include "base/timer/elapsed_timer.h" #include "components/ukm/test_ukm_recorder.h" #include "components/variations/scoped_variations_ids_provider.h" +#include "content/browser/browser_context_impl.h" #include "content/browser/preloading/prefetch/mock_prefetch_service_delegate.h" #include "content/browser/preloading/prefetch/prefetch_container.h" #include "content/browser/preloading/prefetch/prefetch_document_manager.h" @@ -40,6 +44,7 @@ #include "content/common/features.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/frame_accept_header.h" +#include "content/public/browser/prefetch_request_status_listener.h" #include "content/public/browser/prefetch_service_delegate.h" #include "content/public/browser/preloading.h" #include "content/public/browser/storage_partition.h" @@ -57,6 +62,8 @@ #include "net/base/proxy_chain.h" #include "net/base/proxy_server.h" #include "net/base/request_priority.h" +#include "net/http/http_no_vary_search_data.h" +#include "net/http/http_request_headers.h" #include "services/metrics/public/cpp/metrics_utils.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_source_id.h" @@ -103,6 +110,17 @@ <body></body> </html>)"; +const char kHTMLBodyServerError[] = R"( + <!DOCTYPE HTML> +<html lang="en"> +<head> + <title>500 Internal Server Error</title> +</head> +<body> +</body> +</html> +)"; + class ScopedPrefetchServiceContentBrowserClient : public TestContentBrowserClient { public: @@ -245,6 +263,95 @@ base::test::TestFuture<PrefetchContainer::Reader> reader_future; }; +// A `content::PrefetchRequestStatusListener` that tracks when the callbacks +// have been called. +class ProbePrefetchRequestStatusListener + : public content::PrefetchRequestStatusListener { + public: + ~ProbePrefetchRequestStatusListener() override = default; + + void OnPrefetchStartFailed() override { + prefetch_start_failed_called_ = true; + } + + void OnPrefetchResponseCompleted() override { + prefetch_response_completed_called_ = true; + } + + void OnPrefetchResponseError() override { + prefetch_response_error_called_ = true; + } + + void OnPrefetchResponseServerError(int response_code) override { + prefetch_response_server_error_called_ = true; + server_response_code_ = response_code; + } + + bool GetPrefetchStartFailedCalled() { return prefetch_start_failed_called_; } + + bool GetPrefetchResponseCompletedCalled() { + return prefetch_response_completed_called_; + } + + bool GetPrefetchResponseErrorCalled() { + return prefetch_response_error_called_; + } + + bool GetPrefetchResponseServerErrorCalled() { + return prefetch_response_server_error_called_; + } + + base::WeakPtr<ProbePrefetchRequestStatusListener> GetWeakPtr() { + return weak_factory_.GetWeakPtr(); + } + + private: + bool prefetch_start_failed_called_ = false; + bool prefetch_response_completed_called_ = false; + bool prefetch_response_error_called_ = false; + bool prefetch_response_server_error_called_ = false; + + std::optional<int> server_response_code_; + + base::WeakPtrFactory<ProbePrefetchRequestStatusListener> weak_factory_{this}; +}; + +// A |content::PrefetchRequestStatusListener| that forwards the callback +// resolution to a `ProbePrefetchRequestStatusListener` for testability. +// +// The `ProbePrefetchRequestStatusListener` is needed because the +// `TestablePrefetchRequestStatusListener` is eventually owned by the browser +// context, whereas the `ProbePrefetchRequestStatusListener` is owned by the +// test. +class TestablePrefetchRequestStatusListener + : public content::PrefetchRequestStatusListener { + public: + explicit TestablePrefetchRequestStatusListener( + base::WeakPtr<ProbePrefetchRequestStatusListener> probe_listener) + : probe_listener_(probe_listener) {} + + ~TestablePrefetchRequestStatusListener() override = default; + + void OnPrefetchStartFailed() override { + probe_listener_->OnPrefetchStartFailed(); + } + + void OnPrefetchResponseCompleted() override { + probe_listener_->OnPrefetchResponseCompleted(); + } + + void OnPrefetchResponseError() override { + probe_listener_->OnPrefetchResponseError(); + } + + void OnPrefetchResponseServerError(int response_code) override { + probe_listener_->OnPrefetchResponseServerError(response_code); + } + + private: + base::WeakPtr<ProbePrefetchRequestStatusListener> probe_listener_ = nullptr; +}; + class PrefetchServiceTestBase : public RenderViewHostTestHarness { public: const int kServiceWorkerCheckDuration = 1000; @@ -288,7 +395,6 @@ PrefetchDocumentManager::DeleteForCurrentDocument(main_rfh()); PrefetchDocumentManager::SetPrefetchServiceForTesting(nullptr); mock_navigation_handle_.reset(); - prefetch_service_.reset(); PrefetchService::SetURLLoaderFactoryForTesting(nullptr); PrefetchService::SetHostNonUniqueFilterForTesting(nullptr); PrefetchService::SetServiceWorkerContextForTesting(nullptr); @@ -323,9 +429,12 @@ std::make_unique<ScopedPrefetchServiceContentBrowserClient>( std::move(mock_prefetch_service_delegate)); - prefetch_service_ = std::make_unique<PrefetchService>(browser_context()); + std::unique_ptr<PrefetchService> prefetch_service = + std::make_unique<PrefetchService>(browser_context()); + BrowserContextImpl::From(browser_context()) + ->SetPrefetchServiceForTesting(std::move(prefetch_service)); PrefetchDocumentManager::SetPrefetchServiceForTesting( - prefetch_service_.get()); + BrowserContextImpl::From(browser_context())->GetPrefetchService()); } // Creates a prefetch request for |url| on the current main frame. @@ -358,7 +467,19 @@ *web_contents(), prefetch_url, prefetch_type, referrer, std::move(referring_origin), /*no_vary_search_hint=*/std::nullopt, /*attempt=*/nullptr); - prefetch_service_->AddPrefetchContainer(std::move(prefetch_container)); + BrowserContextImpl::From(browser_context()) + ->GetPrefetchService() + ->AddPrefetchContainer(std::move(prefetch_container)); + } + + void MakePrefetchFromBrowserContext( + const GURL& url, + std::optional<net::HttpNoVarySearchData> no_vary_search_data, + const net::HttpRequestHeaders& additional_headers, + std::unique_ptr<PrefetchRequestStatusListener> request_status_listener) { + browser_context()->StartBrowserPrefetchRequest( + url, true, no_vary_search_data, additional_headers, + std::move(request_status_listener)); } int RequestCount() { return test_url_loader_factory_.NumPending(); } @@ -378,6 +499,7 @@ bool use_prefetch_proxy = false; net::RequestPriority expected_priority = net::RequestPriority::IDLE; std::optional<std::string> sec_purpose_header_value = std::nullopt; + net::HttpRequestHeaders additional_headers; }; void VerifyCommonRequestState(const GURL& url) { @@ -415,7 +537,9 @@ void VerifyPrefetchAttemptIsPending(const GURL& url) { PrefetchContainer::Key prefetch_key(MainDocumentToken(), url); base::WeakPtr<PrefetchContainer> prefetch_container = - prefetch_service_->MatchUrl(prefetch_key); + BrowserContextImpl::From(browser_context()) + ->GetPrefetchService() + ->MatchUrl(prefetch_key); ASSERT_TRUE(prefetch_container); ASSERT_FALSE(prefetch_container->GetResourceRequest()); ASSERT_EQ(prefetch_container->GetLoadState(), @@ -711,10 +835,12 @@ }, base::Unretained(&future), base::Unretained(&request_handler_keep_alive_)); + PrefetchService* prefetch_service = + BrowserContextImpl::From(browser_context())->GetPrefetchService(); if (UseNewWaitLoop()) { auto key = PrefetchContainer::Key(initiator_document_token, url); PrefetchMatchResolver2::FindPrefetch( - std::move(key), /*is_nav_prerender=*/false, *prefetch_service_.get(), + std::move(key), /*is_nav_prerender=*/false, *prefetch_service, GetServingPageMetricsContainerForMostRecentNavigation(), std::move(callback)); } else { @@ -722,7 +848,7 @@ GetPrefetchMatchResolverForMostRecentNavigation(); prefetch_match_resolver->SetOnPrefetchToServeReadyCallback( std::move(callback)); - prefetch_service_->GetPrefetchToServe( + prefetch_service->GetPrefetchToServe( PrefetchContainer::Key(initiator_document_token, url), GetServingPageMetricsContainerForMostRecentNavigation(), *prefetch_match_resolver); @@ -808,9 +934,11 @@ return serving_page_metrics_container->GetWeakPtr(); }(); + PrefetchService* prefetch_service = + BrowserContextImpl::From(browser_context())->GetPrefetchService(); auto key = PrefetchContainer::Key(initiator_document_token, url); PrefetchMatchResolver2::FindPrefetch( - std::move(key), is_nav_prerender, *prefetch_service_.get(), + std::move(key), is_nav_prerender, *prefetch_service, std::move(serving_page_metrics_container), std::move(callback)); return res; @@ -837,7 +965,8 @@ // Use more specific methods below to check UKMs, if applicable. void ExpectPrefetchNoNetErrorOrResponseReceived( const base::HistogramTester& histogram_tester, - bool is_eligible) { + bool is_eligible, + bool browser_initiated_prefetch = false) { histogram_tester.ExpectTotalCount( "PrefetchProxy.Prefetch.Mainframe.RespCode", 0); histogram_tester.ExpectTotalCount( @@ -849,24 +978,32 @@ histogram_tester.ExpectTotalCount( "PrefetchProxy.Prefetch.Mainframe.ConnectTime", 0); - std::optional<PrefetchReferringPageMetrics> referring_page_metrics = - PrefetchReferringPageMetrics::GetForCurrentDocument(main_rfh()); - EXPECT_EQ(referring_page_metrics->prefetch_attempted_count, 1); - EXPECT_EQ(referring_page_metrics->prefetch_eligible_count, - is_eligible ? 1 : 0); - EXPECT_EQ(referring_page_metrics->prefetch_successful_count, 0); + if (!browser_initiated_prefetch) { + std::optional<PrefetchReferringPageMetrics> referring_page_metrics = + PrefetchReferringPageMetrics::GetForCurrentDocument(main_rfh()); + EXPECT_EQ(referring_page_metrics->prefetch_attempted_count, 1); + EXPECT_EQ(referring_page_metrics->prefetch_eligible_count, + is_eligible ? 1 : 0); + EXPECT_EQ(referring_page_metrics->prefetch_successful_count, 0); + } } // Prefetch was not started because it was not eligible. void ExpectPrefetchNotEligible(const base::HistogramTester& histogram_tester, PreloadingEligibility expected_eligibility, - bool is_accurate = false) { + bool is_accurate = false, + bool browser_initiated_prefetch = false) { ExpectPrefetchNoNetErrorOrResponseReceived(histogram_tester, - /*is_eligible=*/false); - ExpectCorrectUkmLogs({.eligibility = expected_eligibility, - .holdback = PreloadingHoldbackStatus::kUnspecified, - .outcome = PreloadingTriggeringOutcome::kUnspecified, - .is_accurate = is_accurate}); + /*is_eligible=*/false, + browser_initiated_prefetch); + + if (!browser_initiated_prefetch) { + ExpectCorrectUkmLogs( + {.eligibility = expected_eligibility, + .holdback = PreloadingHoldbackStatus::kUnspecified, + .outcome = PreloadingTriggeringOutcome::kUnspecified, + .is_accurate = is_accurate}); + } } // Prefetch was started but failed before the final response nor any network @@ -892,7 +1029,8 @@ int expected_net_error_code, blink::mojom::SpeculationEagerness eagerness = blink::mojom::SpeculationEagerness::kEager, - bool is_accurate_triggering = false) { + bool is_accurate_triggering = false, + bool browser_initiated_prefetch = false) { histogram_tester.ExpectUniqueSample( "PrefetchProxy.Prefetch.ExistingPrefetchWithMatchingURL", false, 1); @@ -908,20 +1046,23 @@ histogram_tester.ExpectTotalCount( "PrefetchProxy.Prefetch.Mainframe.ConnectTime", 0); - std::optional<PrefetchReferringPageMetrics> referring_page_metrics = - PrefetchReferringPageMetrics::GetForCurrentDocument(main_rfh()); - EXPECT_EQ(referring_page_metrics->prefetch_attempted_count, 1); - EXPECT_EQ(referring_page_metrics->prefetch_eligible_count, 1); - EXPECT_EQ(referring_page_metrics->prefetch_successful_count, 0); - histogram_tester.ExpectUniqueSample("Preloading.Prefetch.PrefetchStatus", PrefetchStatus::kPrefetchFailedNetError, 1); - ExpectCorrectUkmLogs({.outcome = PreloadingTriggeringOutcome::kFailure, - .failure = ToPreloadingFailureReason( - PrefetchStatus::kPrefetchFailedNetError), - .is_accurate = is_accurate_triggering, - .eagerness = eagerness}); + + if (!browser_initiated_prefetch) { + std::optional<PrefetchReferringPageMetrics> referring_page_metrics = + PrefetchReferringPageMetrics::GetForCurrentDocument(main_rfh()); + EXPECT_EQ(referring_page_metrics->prefetch_attempted_count, 1); + EXPECT_EQ(referring_page_metrics->prefetch_eligible_count, 1); + EXPECT_EQ(referring_page_metrics->prefetch_successful_count, 0); + + ExpectCorrectUkmLogs({.outcome = PreloadingTriggeringOutcome::kFailure, + .failure = ToPreloadingFailureReason( + PrefetchStatus::kPrefetchFailedNetError), + .is_accurate = is_accurate_triggering, + .eagerness = eagerness}); + } } // Prefetch was started but failed on or after the final response is @@ -1177,6 +1318,12 @@ VerifyIsolationInfo(request->request.trusted_params->isolation_info); EXPECT_EQ(request->request.priority, options.expected_priority); + + net::HttpRequestHeaders::Iterator header_it(options.additional_headers); + while (header_it.GetNext()) { + EXPECT_THAT(request->request.headers.GetHeader(header_it.name()), + testing::Optional(header_it.value())); + } } void SendHeadOfResponseAndWait( @@ -1250,7 +1397,6 @@ base::test::ScopedFeatureList scoped_feature_list_; // Disable sampling of UKM preloading logs. content::test::PreloadingConfigOverride preloading_config_override_; - std::unique_ptr<PrefetchService> prefetch_service_; std::unique_ptr<testing::NiceMock<MockNavigationHandle>> mock_navigation_handle_; @@ -1328,6 +1474,279 @@ } } +TEST_P(PrefetchServiceTest, SuccessCase_Browser) { + base::test::ScopedFeatureList scoped_feature_list( + features::kPrefetchBrowserInitiatedTriggers); + base::HistogramTester histogram_tester; + MakePrefetchService( + std::make_unique<testing::NiceMock<MockPrefetchServiceDelegate>>( + /*num_on_prefetch_likely_calls=*/std::nullopt)); + + net::HttpRequestHeaders request_additional_headers = {}; + request_additional_headers.SetHeader("foo", "bar"); + request_additional_headers.SetHeader("foo1", "bar1"); + + std::unique_ptr<ProbePrefetchRequestStatusListener> probe_listener = + std::make_unique<ProbePrefetchRequestStatusListener>(); + + std::unique_ptr<content::PrefetchRequestStatusListener> + request_status_listener = + std::make_unique<TestablePrefetchRequestStatusListener>( + probe_listener->GetWeakPtr()); + + MakePrefetchFromBrowserContext(GURL("https://example.com?b=1"), std::nullopt, + request_additional_headers, + std::move(request_status_listener)); + task_environment()->RunUntilIdle(); + + VerifyCommonRequestState(GURL("https://example.com?b=1"), + {.use_prefetch_proxy = false, + .additional_headers = request_additional_headers}); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + MakeResponseAndWait(net::HTTP_OK, net::OK, kHTMLMimeType, + /*use_prefetch_proxy=*/false, + {{"X-Testing", "Hello World"}}, kHTMLBody); + + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.ExistingPrefetchWithMatchingURL", false, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.RespCode", net::HTTP_OK, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.NetError", net::OK, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.BodyLength", std::size(kHTMLBody), 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.TotalTime", kTotalTimeDuration, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.ConnectTime", kConnectTimeDuration, 1); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_TRUE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + NavigateInitiatedByBrowser(GURL("https://example.com?b=1")); + + PrefetchContainer::Reader serveable_reader = + GetPrefetchToServe(GURL("https://example.com?b=1"), std::nullopt); + ExpectServingReaderSuccess(serveable_reader); + EXPECT_EQ(serveable_reader.GetPrefetchContainer()->GetURL(), + GURL("https://example.com/?b=1")); +} + +TEST_P(PrefetchServiceTest, SuccessCase_Browser_NoVarySearch) { + base::test::ScopedFeatureList scoped_feature_list( + features::kPrefetchBrowserInitiatedTriggers); + base::HistogramTester histogram_tester; + MakePrefetchService( + std::make_unique<testing::NiceMock<MockPrefetchServiceDelegate>>( + /*num_on_prefetch_likely_calls=*/std::nullopt)); + + net::HttpRequestHeaders request_additional_headers = {}; + request_additional_headers.SetHeader("foo", "bar"); + request_additional_headers.SetHeader("foo1", "bar1"); + + std::unique_ptr<ProbePrefetchRequestStatusListener> probe_listener = + std::make_unique<ProbePrefetchRequestStatusListener>(); + + std::unique_ptr<content::PrefetchRequestStatusListener> + request_status_listener = + std::make_unique<TestablePrefetchRequestStatusListener>( + probe_listener->GetWeakPtr()); + + net::HttpNoVarySearchData nvs_data = + net::HttpNoVarySearchData::CreateFromNoVaryParams({"a"}, false); + MakePrefetchFromBrowserContext(GURL("https://example.com?a=1"), nvs_data, + request_additional_headers, + std::move(request_status_listener)); + task_environment()->RunUntilIdle(); + + VerifyCommonRequestState(GURL("https://example.com?a=1"), + {.use_prefetch_proxy = false, + .additional_headers = request_additional_headers}); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + MakeResponseAndWait( + net::HTTP_OK, net::OK, kHTMLMimeType, + /*use_prefetch_proxy=*/false, + {{"X-Testing", "Hello World"}, {"No-Vary-Search", R"(params=("a"))"}}, + kHTMLBody); + + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.ExistingPrefetchWithMatchingURL", false, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.RespCode", net::HTTP_OK, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.NetError", net::OK, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.BodyLength", std::size(kHTMLBody), 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.TotalTime", kTotalTimeDuration, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.ConnectTime", kConnectTimeDuration, 1); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_TRUE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + NavigateInitiatedByBrowser(GURL("https://example.com")); + + PrefetchContainer::Reader serveable_reader = + GetPrefetchToServe(GURL("https://example.com"), std::nullopt); + ExpectServingReaderSuccess(serveable_reader); + EXPECT_EQ(serveable_reader.GetPrefetchContainer()->GetURL(), + GURL("https://example.com/?a=1")); +} + +TEST_P(PrefetchServiceTest, FailureCase_Browser_ServerErrorResponseCode) { + base::test::ScopedFeatureList scoped_feature_list( + features::kPrefetchBrowserInitiatedTriggers); + base::HistogramTester histogram_tester; + MakePrefetchService( + std::make_unique<testing::NiceMock<MockPrefetchServiceDelegate>>( + /*num_on_prefetch_likely_calls=*/std::nullopt)); + + std::unique_ptr<ProbePrefetchRequestStatusListener> probe_listener = + std::make_unique<ProbePrefetchRequestStatusListener>(); + + std::unique_ptr<content::PrefetchRequestStatusListener> + request_status_listener = + std::make_unique<TestablePrefetchRequestStatusListener>( + probe_listener->GetWeakPtr()); + + MakePrefetchFromBrowserContext(GURL("https://example.com?b=1"), std::nullopt, + {}, std::move(request_status_listener)); + task_environment()->RunUntilIdle(); + + VerifyCommonRequestState(GURL("https://example.com?b=1"), + {.use_prefetch_proxy = false}); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + MakeResponseAndWait(net::HTTP_INTERNAL_SERVER_ERROR, net::OK, kHTMLMimeType, + /*use_prefetch_proxy=*/false, {}, kHTMLBodyServerError); + + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.ExistingPrefetchWithMatchingURL", false, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.RespCode", + net::HTTP_INTERNAL_SERVER_ERROR, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.NetError", net::OK, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.BodyLength", + std::size(kHTMLBodyServerError), 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.TotalTime", kTotalTimeDuration, 1); + histogram_tester.ExpectUniqueSample( + "PrefetchProxy.Prefetch.Mainframe.ConnectTime", kConnectTimeDuration, 1); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_TRUE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + NavigateInitiatedByBrowser(GURL("https://example.com?b=1")); + EXPECT_FALSE(GetPrefetchToServe(GURL("https://example.com?b=1"))); +} + +TEST_P(PrefetchServiceTest, FailureCase_Browser_NetError) { + base::HistogramTester histogram_tester; + MakePrefetchService( + std::make_unique<testing::NiceMock<MockPrefetchServiceDelegate>>( + /*num_on_prefetch_likely_calls=*/std::nullopt)); + + std::unique_ptr<ProbePrefetchRequestStatusListener> probe_listener = + std::make_unique<ProbePrefetchRequestStatusListener>(); + + std::unique_ptr<content::PrefetchRequestStatusListener> + request_status_listener = + std::make_unique<TestablePrefetchRequestStatusListener>( + probe_listener->GetWeakPtr()); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + MakePrefetchFromBrowserContext(GURL("https://example.com?c=1"), std::nullopt, + {}, std::move(request_status_listener)); + task_environment()->RunUntilIdle(); + + VerifyCommonRequestState(GURL("https://example.com?c=1"), + {.use_prefetch_proxy = false}); + MakeResponseAndWait(net::HTTP_OK, net::ERR_FAILED, kHTMLMimeType, + /*use_prefetch_proxy=*/false, + {{"X-Testing", "Hello World"}}, kHTMLBody); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_TRUE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + ExpectPrefetchFailedNetError(histogram_tester, net::ERR_FAILED, + blink::mojom::SpeculationEagerness::kEager, + /*is_accurate_triggering=*/false, + /*browser_initiated_prefetch=*/true); + + NavigateInitiatedByBrowser(GURL("https://example.com?c=1")); + EXPECT_FALSE(GetPrefetchToServe(GURL("https://example.com?c=1"))); +} + +TEST_P(PrefetchServiceTest, FailureCase_Browser_NotEligibleNonHttps) { + base::HistogramTester histogram_tester; + MakePrefetchService( + std::make_unique<testing::NiceMock<MockPrefetchServiceDelegate>>( + /*num_on_prefetch_likely_calls=*/std::nullopt)); + + std::unique_ptr<ProbePrefetchRequestStatusListener> probe_listener = + std::make_unique<ProbePrefetchRequestStatusListener>(); + + std::unique_ptr<content::PrefetchRequestStatusListener> + request_status_listener = + std::make_unique<TestablePrefetchRequestStatusListener>( + probe_listener->GetWeakPtr()); + + EXPECT_FALSE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + MakePrefetchFromBrowserContext(GURL("http://example.com"), std::nullopt, {}, + std::move(request_status_listener)); + task_environment()->RunUntilIdle(); + + EXPECT_TRUE(probe_listener->GetPrefetchStartFailedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseCompletedCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseErrorCalled()); + EXPECT_FALSE(probe_listener->GetPrefetchResponseServerErrorCalled()); + + EXPECT_EQ(RequestCount(), 0); + + histogram_tester.ExpectUniqueSample( + "Preloading.Prefetch.PrefetchStatus", + PrefetchStatus::kPrefetchIneligibleSchemeIsNotHttps, 1); + ExpectPrefetchNotEligible( + histogram_tester, PreloadingEligibility::kSchemeIsNotHttps, + /*is_accurate=*/false, /*browser_initiated_prefetch=*/true); + + NavigateInitiatedByBrowser(GURL("http://example.com")); + EXPECT_FALSE(GetPrefetchToServe(GURL("http://example.com"))); +} + TEST_P(PrefetchServiceTest, PrefetchDoesNotMatchIfDocumentTokenDoesNotMatch) { base::HistogramTester histogram_tester;
diff --git a/content/public/android/java/src/org/chromium/content/browser/AdditionalNavigationParamsUtils.java b/content/public/android/java/src/org/chromium/content/browser/AdditionalNavigationParamsUtils.java index c9e6980..ecc67c5 100644 --- a/content/public/android/java/src/org/chromium/content/browser/AdditionalNavigationParamsUtils.java +++ b/content/public/android/java/src/org/chromium/content/browser/AdditionalNavigationParamsUtils.java
@@ -4,18 +4,17 @@ package org.chromium.content.browser; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.JniType; import org.chromium.base.UnguessableToken; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.AdditionalNavigationParams; /** Interface which provides native access to an AdditionalNavigationParams instance. */ @JNINamespace("content") -@NullMarked public class AdditionalNavigationParamsUtils { private AdditionalNavigationParamsUtils() {} @@ -23,7 +22,7 @@ private static AdditionalNavigationParams create( @JniType("base::UnguessableToken") UnguessableToken initiatorFrameToken, int initiatorProcessId, - @JniType("std::optional<base::UnguessableToken>") @Nullable + @Nullable @JniType("std::optional<base::UnguessableToken>") UnguessableToken attributionSrcToken) { return new AdditionalNavigationParams( initiatorFrameToken, initiatorProcessId, attributionSrcToken); @@ -41,7 +40,7 @@ } @CalledByNative - private static @JniType("std::optional<base::UnguessableToken>") @Nullable UnguessableToken + private static @JniType("std::optional<base::UnguessableToken>") UnguessableToken getAttributionSrcToken(AdditionalNavigationParams params) { return params.getAttributionSrcToken(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePort.java b/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePort.java index f035720..effa1a66 100644 --- a/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePort.java +++ b/content/public/android/java/src/org/chromium/content/browser/AppWebMessagePort.java
@@ -10,6 +10,8 @@ import android.util.Pair; import androidx.annotation.MainThread; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; @@ -19,8 +21,6 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.MessagePayload; import org.chromium.content_public.browser.MessagePort; @@ -77,7 +77,6 @@ * This object is not thread safe but public methods may be called from any thread. */ @JNINamespace("content::android") -@NullMarked public class AppWebMessagePort implements MessagePort { private static final String TAG = "AppWebMessagePort"; @@ -85,15 +84,15 @@ // The |what| value for handleMessage. private static final int MESSAGE_RECEIVED = 1; - private final MessageCallback mMessageCallback; + @NonNull private final MessageCallback mMessageCallback; - MessageHandler(MessageCallback callback, @Nullable Handler handler) { + MessageHandler(@NonNull MessageCallback callback, @Nullable Handler handler) { super(handler == null ? Looper.getMainLooper() : handler.getLooper()); mMessageCallback = callback; } @Override - public void handleMessage(final Message msg) { + public void handleMessage(@NonNull final Message msg) { if (msg.what == MESSAGE_RECEIVED) { final Pair<MessagePayload, MessagePort[]> obj = (Pair<MessagePayload, MessagePort[]>) msg.obj; @@ -104,8 +103,7 @@ } @MainThread - public void onMessage( - final MessagePayload messagePayload, final MessagePort @Nullable [] sentPorts) { + public void onMessage(final MessagePayload messagePayload, final MessagePort[] sentPorts) { ThreadUtils.assertOnUiThread(); sendMessage(obtainMessage(MESSAGE_RECEIVED, Pair.create(messagePayload, sentPorts))); } @@ -113,7 +111,7 @@ // Accessed on UI thread only. private long mNativeAppWebMessagePort; - private @Nullable MessageHandler mMessageHandler; + private MessageHandler mMessageHandler; // Can be accessed from any thread, client needs to keep thread safe. Need volatile since they // may be accessed concurrently from UI thread and client thread, which may be different. @@ -184,7 +182,7 @@ } @Override - public void postMessage(MessagePayload messagePayload, MessagePort @Nullable [] sentPorts) + public void postMessage(MessagePayload messagePayload, MessagePort[] sentPorts) throws IllegalStateException { if (isClosed() || isTransferred()) { throw new IllegalStateException("Port is already closed or transferred"); @@ -255,7 +253,7 @@ @MainThread @CalledByNative - private void onMessage(MessagePayload payload, MessagePort @Nullable [] ports) { + private void onMessage(@NonNull MessagePayload payload, @Nullable MessagePort[] ports) { ThreadUtils.assertOnUiThread(); if (mMessageHandler != null) { mMessageHandler.onMessage(payload, ports); @@ -292,13 +290,13 @@ @NativeMethods @MainThread interface Natives { - + @NonNull AppWebMessagePort[] createPair(); void postMessage( long nativeAppWebMessagePort, MessagePayload messagePayload, - MessagePort @Nullable [] sentPorts); + MessagePort[] sentPorts); void setShouldReceiveMessages(long nativeAppWebMessagePort, boolean shouldReceiveMessage);
diff --git a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java index c01150a..595ee0da 100644 --- a/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java +++ b/content/public/android/java/src/org/chromium/content/browser/AttributionOsLevelManager.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; @@ -40,8 +38,6 @@ import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.url.GURL; import java.io.IOException; @@ -59,7 +55,6 @@ * library. */ @JNINamespace("content") -@NullMarked public class AttributionOsLevelManager { private static final String TAG = "AttributionManager"; // TODO: replace with constant in android.Manifest.permission once it becomes available in U. @@ -67,10 +62,10 @@ "android.permission.ACCESS_ADSERVICES_ATTRIBUTION"; // Used for testing - private static @Nullable MeasurementManagerFutures sManagerForTesting; + private static MeasurementManagerFutures sManagerForTesting; private long mNativePtr; - private @Nullable MeasurementManagerFutures mManager; + private MeasurementManagerFutures mManager; @IntDef({ OperationType.REGISTER_SOURCE, @@ -148,7 +143,7 @@ return Build.VERSION.SDK_INT >= Build.VERSION_CODES.R; } - private static @OperationResult int getOperationResultFromMessage(@Nullable String message) { + private static @OperationResult int getOperationResultFromMessage(String message) { if (message == null) { return OperationResult.ERROR_UNKNOWN; } else { @@ -246,7 +241,7 @@ mNativePtr = nativePtr; } - private @Nullable MeasurementManagerFutures getManager() { + private MeasurementManagerFutures getManager() { if (!supportsAttribution()) { return null; } @@ -285,7 +280,7 @@ future, new FutureCallback<Object>() { @Override - public void onSuccess(@Nullable Object result) { + public void onSuccess(Object result) { onRegistrationCompleted(requestId, type, OperationResult.SUCCESS); } @@ -299,7 +294,7 @@ } @CalledByNative - private static @Nullable List<WebSourceParams> createWebSourceParamsList(int size) { + private static List<WebSourceParams> createWebSourceParamsList(int size) { if (!supportsAttribution()) { return null; } @@ -382,7 +377,7 @@ } @CalledByNative - private static @Nullable List<WebTriggerParams> createWebTriggerParamsList(int size) { + private static List<WebTriggerParams> createWebTriggerParamsList(int size) { if (!supportsAttribution()) { return null; } @@ -542,7 +537,7 @@ } @Override - public void onSuccess(@Nullable Object result) { + public void onSuccess(Object result) { recordOperationResult( OperationType.DELETE_REGISTRATIONS, OperationResult.SUCCESS); onCall(); @@ -637,8 +632,8 @@ future, new FutureCallback<Integer>() { @Override - public void onSuccess(@Nullable Integer status) { - onMeasurementStateReturned(assumeNonNull(status), OperationResult.SUCCESS); + public void onSuccess(Integer status) { + onMeasurementStateReturned(status, OperationResult.SUCCESS); } @Override
diff --git a/content/public/android/java/src/org/chromium/content/browser/AudioFocusDelegate.java b/content/public/android/java/src/org/chromium/content/browser/AudioFocusDelegate.java index 0b4ddb5..a524ceb 100644 --- a/content/public/android/java/src/org/chromium/content/browser/AudioFocusDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/AudioFocusDelegate.java
@@ -17,8 +17,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ThreadUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; /** * AudioFocusDelegate is the Java counterpart of content::AudioFocusDelegateAndroid. @@ -32,13 +30,12 @@ * like a notification. */ @JNINamespace("content") -@NullMarked public class AudioFocusDelegate implements AudioManager.OnAudioFocusChangeListener { private static final String TAG = "MediaSession"; private int mFocusType; private boolean mIsDucking; - private @Nullable AudioFocusRequest mFocusRequest; + private AudioFocusRequest mFocusRequest; // Native pointer to C++ content::AudioFocusDelegateAndroid. // It will be set to 0 when the native AudioFocusDelegateAndroid object is destroyed.
diff --git a/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java b/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java index 6ee7731..10d30881 100644 --- a/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java +++ b/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.Manifest; import android.annotation.SuppressLint; import android.content.pm.PackageManager; @@ -22,8 +20,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.net.ConnectionType; import org.chromium.net.NetworkChangeNotifierAutoDetect; import org.chromium.net.RegistrationPolicyAlwaysRegister; @@ -45,15 +41,14 @@ */ @JNINamespace("content") @VisibleForTesting -@NullMarked public class BackgroundSyncNetworkObserver implements NetworkChangeNotifierAutoDetect.Observer { private static final String TAG = "BgSyncNetObserver"; private static boolean sSetConnectionTypeForTesting; - private @Nullable NetworkChangeNotifierAutoDetect mNotifier; + private NetworkChangeNotifierAutoDetect mNotifier; // The singleton instance. @SuppressLint("StaticFieldLeak") - private static @Nullable BackgroundSyncNetworkObserver sInstance; + private static BackgroundSyncNetworkObserver sInstance; // List of native observers. These are each called when the network state changes. private List<Long> mNativePtrs; @@ -89,7 +84,7 @@ } @CalledByNative - private static @Nullable BackgroundSyncNetworkObserver createObserver(long nativePtr) { + private static BackgroundSyncNetworkObserver createObserver(long nativePtr) { ThreadUtils.assertOnUiThread(); getBackgroundSyncNetworkObserver().registerObserver(nativePtr); @@ -179,7 +174,6 @@ public void onNetworkDisconnect(long netId) { ThreadUtils.assertOnUiThread(); if (sSetConnectionTypeForTesting) return; - assumeNonNull(mNotifier); // If we're in doze mode (N+ devices), onConnectionTypeChanged may not // be called, but this function should. So update the connection type
diff --git a/content/public/android/java/src/org/chromium/content/browser/BindingManager.java b/content/public/android/java/src/org/chromium/content/browser/BindingManager.java index 6da59eab..632c1e6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/BindingManager.java +++ b/content/public/android/java/src/org/chromium/content/browser/BindingManager.java
@@ -15,8 +15,6 @@ import org.chromium.base.ResettersForTesting; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.process_launcher.ChildProcessConnection; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import java.util.Iterator; import java.util.Set; @@ -25,7 +23,6 @@ * Manages oom bindings used to bound child services. * This object must only be accessed from the launcher thread. */ -@NullMarked class BindingManager implements ComponentCallbacks2 { private static final String TAG = "BindingManager"; @@ -39,7 +36,7 @@ // Delays used when clearing moderate binding pool when onSentToBackground happens. private static final long BINDING_POOL_CLEARER_DELAY_MILLIS = 10 * 1000; - private static @Nullable Boolean sUseNotPerceptibleBindingForTesting; + private static Boolean sUseNotPerceptibleBindingForTesting; private final Set<ChildProcessConnection> mConnections = new ArraySet<ChildProcessConnection>(); // Can be -1 to mean no max size. @@ -49,7 +46,7 @@ // If not null, this is the connection in |mConnections| that does not have a binding added // by BindingManager. - private @Nullable ChildProcessConnection mWaivedConnection; + private ChildProcessConnection mWaivedConnection; private int mConnectionsDroppedDueToMaxSize;
diff --git a/content/public/android/java/src/org/chromium/content/browser/BrowserContextHandleImpl.java b/content/public/android/java/src/org/chromium/content/browser/BrowserContextHandleImpl.java index 3bf69fbd..ce3075d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/BrowserContextHandleImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/BrowserContextHandleImpl.java
@@ -7,12 +7,10 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.BrowserContextHandle; /** An interface that provides access to a native BrowserContext. */ @JNINamespace("content") -@NullMarked public class BrowserContextHandleImpl { private BrowserContextHandleImpl() {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionMetrics.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionMetrics.java index 23235c07..9ff6bec 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionMetrics.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionMetrics.java
@@ -14,8 +14,6 @@ import org.chromium.base.process_launcher.ChildProcessConnection; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import java.util.Random; import java.util.Set; @@ -29,16 +27,15 @@ * * This class enforces that it is only used on the launcher thread other than during init. */ -@NullMarked public class ChildProcessConnectionMetrics { @VisibleForTesting private static final long INITIAL_EMISSION_DELAY_MS = 60 * 1000; // 1 min. private static final long REGULAR_EMISSION_DELAY_MS = 5 * 60 * 1000; // 5 min. - private static @Nullable ChildProcessConnectionMetrics sInstance; + private static ChildProcessConnectionMetrics sInstance; // Whether the main application is currently brought to the foreground. private boolean mApplicationInForegroundOnUiThread; - private @Nullable BindingManager mBindingManager; + private BindingManager mBindingManager; private final Set<ChildProcessConnection> mConnections = new ArraySet<>(); private final Random mRandom = new Random();
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParamsImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParamsImpl.java index 026d8327..610a97ce 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParamsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParamsImpl.java
@@ -65,14 +65,14 @@ if (sInitialized) extras.putInt(EXTRA_LIBRARY_PROCESS_TYPE, sLibraryProcessType); } - public static String getPackageNameForPrivilegedService() { - return sPackageNameForPrivilegedService != null + public static @Nullable String getPackageNameForPrivilegedService() { + return sInitialized ? sPackageNameForPrivilegedService : ContextUtils.getApplicationContext().getPackageName(); } - public static String getPackageNameForSandboxedService() { - return sPackageNameForSandboxedService != null + public static @Nullable String getPackageNameForSandboxedService() { + return sInitialized ? sPackageNameForSandboxedService : ContextUtils.getApplicationContext().getPackageName(); } @@ -93,11 +93,11 @@ return extras.getInt(EXTRA_LIBRARY_PROCESS_TYPE, LibraryProcessType.PROCESS_CHILD); } - public static String getPrivilegedServicesName() { - return sPrivilegedServicesName != null ? sPrivilegedServicesName : PRIVILEGED_SERVICES_NAME; + public static @Nullable String getPrivilegedServicesName() { + return sInitialized ? sPrivilegedServicesName : PRIVILEGED_SERVICES_NAME; } - public static String getSandboxedServicesName() { - return sSandboxedServicesName != null ? sSandboxedServicesName : SANDBOXED_SERVICES_NAME; + public static @Nullable String getSandboxedServicesName() { + return sInitialized ? sSandboxedServicesName : SANDBOXED_SERVICES_NAME; } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelperImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelperImpl.java index 9c2d351d..f3071663 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelperImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelperImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.os.Bundle; import android.os.Handler; @@ -13,6 +11,7 @@ import android.os.ParcelFileDescriptor; import android.text.TextUtils; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.jni_zero.CalledByNative; @@ -39,9 +38,6 @@ import org.chromium.base.process_launcher.FileDescriptorInfo; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.NullUnmarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.app.SandboxedProcessService; import org.chromium.content.common.ContentSwitchUtils; import org.chromium.content_public.browser.ChildProcessImportance; @@ -62,7 +58,6 @@ * Each public or jni methods should have explicit documentation on what threads they are called. */ @JNINamespace("content::internal") -@NullMarked public final class ChildProcessLauncherHelperImpl { private static final String TAG = "ChildProcLH"; @@ -90,38 +85,37 @@ private static boolean sCheckedServiceGroupImportance; // A warmed-up connection to a sandboxed service. - private static @Nullable SpareChildConnection sSpareSandboxedConnection; + private static SpareChildConnection sSpareSandboxedConnection; // Allocator used for sandboxed services. - private static @Nullable ChildConnectionAllocator sSandboxedChildConnectionAllocator; - private static @Nullable ChildProcessRanking sSandboxedChildConnectionRanking; + private static ChildConnectionAllocator sSandboxedChildConnectionAllocator; + private static ChildProcessRanking sSandboxedChildConnectionRanking; // Map from PID to ChildProcessLauncherHelper. private static final Map<Integer, ChildProcessLauncherHelperImpl> sLauncherByPid = new HashMap<>(); // Allocator used for non-sandboxed services. - private static @Nullable ChildConnectionAllocator sPrivilegedChildConnectionAllocator; + private static ChildConnectionAllocator sPrivilegedChildConnectionAllocator; // Used by tests to override the default sandboxed service allocator settings. - private static ChildConnectionAllocator.@Nullable ConnectionFactory - sSandboxedServiceFactoryForTesting; + private static ChildConnectionAllocator.ConnectionFactory sSandboxedServiceFactoryForTesting; private static int sSandboxedServicesCountForTesting = -1; - private static @Nullable String sSandboxedServicesNameForTesting; + private static String sSandboxedServicesNameForTesting; private static boolean sSkipDelayForReducePriorityOnBackgroundForTesting; - private static @Nullable BindingManager sBindingManager; + private static BindingManager sBindingManager; // Whether the main application is currently brought to the foreground. private static boolean sApplicationInForegroundOnUiThread; // Set on UI thread only, but null-checked on launcher thread as well. - private static ApplicationStatus.@Nullable ApplicationStateListener sAppStateListener; + private static ApplicationStatus.ApplicationStateListener sAppStateListener; // TODO(boliu): These are only set for sandboxed renderer processes. Generalize them for // all types of processes. - private final @Nullable ChildProcessRanking mRanking; - private final @Nullable BindingManager mBindingManager; + private final ChildProcessRanking mRanking; + private final BindingManager mBindingManager; // Whether the created process should be sandboxed. private final boolean mSandboxed; @@ -130,7 +124,7 @@ private final boolean mReducePriorityOnBackground; // The type of process as determined by the command line. - private final @Nullable String mProcessType; + private final String mProcessType; // Whether the process can use warmed up connection. private final boolean mCanUseWarmUpConnection; @@ -149,14 +143,14 @@ // The bundle with RELRO FD. For sending to child processes, including the ones that did not // announce whether they inherit from the app zygote. Declared as volatile to allow sending it // from different threads. - private static volatile @Nullable Bundle sZygoteBundle; + private static volatile Bundle sZygoteBundle; private static boolean sIgnoreMainFrameVisibilityForImportance; private final ChildProcessLauncher.Delegate mLauncherDelegate = new ChildProcessLauncher.Delegate() { @Override - public @Nullable ChildProcessConnection getBoundConnection( + public ChildProcessConnection getBoundConnection( ChildConnectionAllocator connectionAllocator, ChildProcessConnection.ServiceCallback serviceCallback) { if (!mCanUseWarmUpConnection) return null; @@ -312,12 +306,10 @@ } private static void sendPreviouslySeenZygoteBundleToExistingConnections(int pid) { - assumeNonNull(sZygoteBundle); for (var entry : sLauncherByPid.entrySet()) { int otherPid = entry.getKey(); if (pid != otherPid) { - ChildProcessConnection otherConnection = - assumeNonNull(entry.getValue().mLauncher.getConnection()); + ChildProcessConnection otherConnection = entry.getValue().mLauncher.getConnection(); if (otherConnection.getZygotePid() == 0) { // The Zygote PID for each connection must be finalized before the launcher // thread starts processing the zygote info. Zygote PID being 0 guarantees that @@ -342,7 +334,7 @@ private boolean mDroppedStrongBingingDueToBackgrounding; @CalledByNative - private static @Nullable FileDescriptorInfo makeFdInfo( + private static FileDescriptorInfo makeFdInfo( int id, int fd, boolean autoClose, long offset, long size) { assert LauncherThread.runningOnLauncherThread(); ParcelFileDescriptor pFd; @@ -454,7 +446,6 @@ new Runnable() { @Override public void run() { - assumeNonNull(sSandboxedChildConnectionRanking); ChildConnectionAllocator allocator = getConnectionAllocator(context, /* sandboxed= */ true); if (ChildProcessConnection.supportVariableConnections()) { @@ -501,7 +492,7 @@ private void reducePriorityOnBackgroundOnLauncherThread() { assert LauncherThread.runningOnLauncherThread(); if (mDroppedStrongBingingDueToBackgrounding) return; - ChildProcessConnection connection = assumeNonNull(mLauncher.getConnection()); + ChildProcessConnection connection = mLauncher.getConnection(); if (!connection.isConnected()) return; if (connection.isStrongBindingBound()) { connection.removeStrongBinding(); @@ -512,7 +503,7 @@ private void raisePriorityOnForegroundOnLauncherThread() { assert LauncherThread.runningOnLauncherThread(); if (!mDroppedStrongBingingDueToBackgrounding) return; - ChildProcessConnection connection = assumeNonNull(mLauncher.getConnection()); + ChildProcessConnection connection = mLauncher.getConnection(); if (!connection.isConnected()) return; connection.addStrongBinding(); mDroppedStrongBingingDueToBackgrounding = false; @@ -583,7 +574,6 @@ packageName); Runnable freeSlotRunnable = () -> { - assumeNonNull(sSandboxedChildConnectionRanking); ChildProcessConnection lowestRank = sSandboxedChildConnectionRanking.getLowestRankedConnection(); if (lowestRank != null) { @@ -647,7 +637,6 @@ return sSandboxedChildConnectionAllocator; } - @NullUnmarked private ChildProcessLauncherHelperImpl( long nativePointer, String[] commandLine, @@ -655,8 +644,8 @@ boolean sandboxed, boolean reducePriorityOnBackground, boolean canUseWarmUpConnection, - @Nullable IBinder binderCallback, - @Nullable IBinder binderBox) { + IBinder binderCallback, + IBinder binderBox) { assert LauncherThread.runningOnLauncherThread(); mNativeChildProcessLauncherHelper = nativePointer; @@ -756,7 +745,6 @@ LauncherThread.post(() -> mLauncher.stop()); } - @NullUnmarked @CalledByNative private void setPriority( int pid, @@ -780,7 +768,7 @@ return; } - ChildProcessConnection connection = assumeNonNull(mLauncher.getConnection()); + ChildProcessConnection connection = mLauncher.getConnection(); if (ChildProcessCreationParamsImpl.getIgnoreVisibilityForImportance()) { visible = false; boostForPendingViews = false; @@ -889,13 +877,12 @@ * Dumps the stack of the child process with |pid| without crashing it. * @param pid Process id of the child process. */ - @NullUnmarked @CalledByNative private void dumpProcessStack(int pid) { assert LauncherThread.runningOnLauncherThread(); ChildProcessLauncherHelperImpl launcher = getByPid(pid); if (launcher != null) { - ChildProcessConnection connection = assumeNonNull(launcher.mLauncher.getConnection()); + ChildProcessConnection connection = launcher.mLauncher.getConnection(); connection.dumpProcessStack(); } } @@ -911,7 +898,7 @@ return bundle; } - private static @Nullable ChildProcessLauncherHelperImpl getByPid(int pid) { + private static ChildProcessLauncherHelperImpl getByPid(int pid) { return sLauncherByPid.get(pid); } @@ -990,7 +977,7 @@ } @VisibleForTesting - public @Nullable ChildProcessConnection getChildProcessConnection() { + public ChildProcessConnection getChildProcessConnection() { return mLauncher.getConnection(); } @@ -998,7 +985,7 @@ return mLauncher.getConnectionAllocator(); } - public static @Nullable ChildProcessConnection getWarmUpConnectionForTesting() { + public static ChildProcessConnection getWarmUpConnectionForTesting() { return sSpareSandboxedConnection == null ? null : sSpareSandboxedConnection.getConnection(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessRanking.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessRanking.java index ebcdbee..b5a45785 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessRanking.java +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessRanking.java
@@ -8,8 +8,6 @@ import org.chromium.base.process_launcher.ChildProcessConnection; import org.chromium.build.BuildConfig; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ChildProcessImportance; import java.util.ArrayList; @@ -18,7 +16,6 @@ import java.util.List; /** Ranking of ChildProcessConnections for a particular ChildConnectionAllocator. */ -@NullMarked public class ChildProcessRanking implements Iterable<ChildProcessConnection> { private static final boolean ENABLE_CHECKS = BuildConfig.ENABLE_ASSERTS; private static final int NO_GROUP = 0; @@ -237,7 +234,7 @@ } public void updateConnection( - @Nullable ChildProcessConnection connection, + ChildProcessConnection connection, boolean visible, long frameDepth, boolean intersectsViewport, @@ -255,7 +252,7 @@ reposition(i); } - public @Nullable ChildProcessConnection getLowestRankedConnection() { + public ChildProcessConnection getLowestRankedConnection() { if (mRankings.isEmpty()) return null; return mRankings.get(mRankings.size() - 1).connection; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ClientDataJsonImpl.java b/content/public/android/java/src/org/chromium/content/browser/ClientDataJsonImpl.java index 9e97499..1a7152d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ClientDataJsonImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ClientDataJsonImpl.java
@@ -4,12 +4,12 @@ package org.chromium.content.browser; +import androidx.annotation.Nullable; + import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; import org.chromium.blink.mojom.PaymentOptions; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ClientDataRequestType; import org.chromium.url.Origin; @@ -17,17 +17,17 @@ /** The implementation of ClientDataJson. */ @JNINamespace("content") -@NullMarked public class ClientDataJsonImpl { /** The implementation of {@link ClientDataJson#buildClientDataJson}. */ - public static @Nullable String buildClientDataJson( + @Nullable + public static String buildClientDataJson( @ClientDataRequestType int clientDataRequestType, String callerOrigin, byte[] challenge, boolean isCrossOrigin, - @Nullable PaymentOptions paymentOptions, - @Nullable String relyingPartyId, - @Nullable Origin topOrigin) { + PaymentOptions paymentOptions, + String relyingPartyId, + Origin topOrigin) { return ClientDataJsonImplJni.get() .buildClientDataJson( clientDataRequestType, @@ -46,8 +46,8 @@ String callerOrigin, byte[] challenge, boolean isCrossOrigin, - @Nullable ByteBuffer optionsByteBuffer, - @Nullable String relyingPartyId, - @Nullable Origin topOrigin); + ByteBuffer optionsByteBuffer, + String relyingPartyId, + Origin topOrigin); } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContactsDialogHost.java b/content/public/android/java/src/org/chromium/content/browser/ContactsDialogHost.java index 8e294f5..f54fbd630 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContactsDialogHost.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContactsDialogHost.java
@@ -12,8 +12,6 @@ import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ContactsPicker; import org.chromium.content_public.browser.ContactsPickerListener; import org.chromium.content_public.browser.WebContents; @@ -27,7 +25,6 @@ * side. */ @JNINamespace("content") -@NullMarked public class ContactsDialogHost implements ContactsPickerListener { private long mNativeContactsProviderAndroid; private final WebContents mWebContents; @@ -176,11 +173,11 @@ interface Natives { void addContact( long nativeContactsProviderAndroid, - String @Nullable [] names, - String @Nullable [] emails, - String @Nullable [] tel, - ByteBuffer @Nullable [] addresses, - ByteBuffer @Nullable [] icons); + String[] names, + String[] emails, + String[] tel, + ByteBuffer[] addresses, + ByteBuffer[] icons); void endContactsList( long nativeContactsProviderAndroid,
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentClassFactory.java b/content/public/android/java/src/org/chromium/content/browser/ContentClassFactory.java index 3e5af4e3..b8498bf 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentClassFactory.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentClassFactory.java
@@ -5,13 +5,10 @@ package org.chromium.content.browser; import org.chromium.base.ThreadUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; /** A class factory for downstream injecting code to content layer. */ -@NullMarked public class ContentClassFactory { - private static @Nullable ContentClassFactory sSingleton; + private static ContentClassFactory sSingleton; /** Sets the factory object. */ public static void set(ContentClassFactory factory) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentNfcDelegate.java b/content/public/android/java/src/org/chromium/content/browser/ContentNfcDelegate.java index 7a866bd..25e7891a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentNfcDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentNfcDelegate.java
@@ -9,7 +9,6 @@ import org.jni_zero.CalledByNative; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; import org.chromium.device.nfc.NfcDelegate; /** @@ -17,7 +16,6 @@ * corresponding NfcHost objects, allowing the NFC implementation to access the Activity of the * WebContents with which its requesting frame is associated. */ -@NullMarked public class ContentNfcDelegate implements NfcDelegate { @CalledByNative private static ContentNfcDelegate create() {
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentUiEventHandler.java b/content/public/android/java/src/org/chromium/content/browser/ContentUiEventHandler.java index 3527aa35..db4e964 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentUiEventHandler.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentUiEventHandler.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.os.SystemClock; import android.view.InputDevice; import android.view.KeyEvent; @@ -18,8 +16,6 @@ import org.jni_zero.NativeMethods; import org.chromium.base.UserData; -import org.chromium.build.annotations.Initializer; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.input.ImeAdapterImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; @@ -33,7 +29,6 @@ * content components. */ @JNINamespace("content") -@NullMarked public class ContentUiEventHandler implements UserData { private final WebContentsImpl mWebContents; private InternalAccessDelegate mEventDelegate; @@ -45,12 +40,8 @@ } public static ContentUiEventHandler fromWebContents(WebContents webContents) { - ContentUiEventHandler ret = - ((WebContentsImpl) webContents) - .getOrSetUserData( - ContentUiEventHandler.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(ContentUiEventHandler.class, UserDataFactoryLazyHolder.INSTANCE); } public ContentUiEventHandler(WebContents webContents) { @@ -66,7 +57,6 @@ return contentUiEventHandler; } - @Initializer public void setEventDelegate(InternalAccessDelegate delegate) { mEventDelegate = delegate; } @@ -211,10 +201,7 @@ // It's a very real (and valid) possibility that a fling may still // be active when programatically scrolling. Cancelling the fling in // such cases ensures a consistent gesture event stream. - GestureListenerManagerImpl gestureManager = - GestureListenerManagerImpl.fromWebContents(mWebContents); - assumeNonNull(gestureManager); - if (gestureManager.hasActiveFlingScroll()) { + if (GestureListenerManagerImpl.fromWebContents(mWebContents).hasActiveFlingScroll()) { ContentUiEventHandlerJni.get() .cancelFling(mNativeContentUiEventHandler, ContentUiEventHandler.this, time); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewStaticsImpl.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewStaticsImpl.java index 3de4126..080a9f6d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewStaticsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewStaticsImpl.java
@@ -6,11 +6,9 @@ import org.jni_zero.NativeMethods; -import org.chromium.build.annotations.NullMarked; import org.chromium.net.ProxyChangeListener; /** Implementations of {@link ContentViewStatics}. */ -@NullMarked public class ContentViewStaticsImpl { /** * Suspends Webkit timers in all renderers.
diff --git a/content/public/android/java/src/org/chromium/content/browser/Gamepad.java b/content/public/android/java/src/org/chromium/content/browser/Gamepad.java index 1a346efb..b40663bc0 100644 --- a/content/public/android/java/src/org/chromium/content/browser/Gamepad.java +++ b/content/public/android/java/src/org/chromium/content/browser/Gamepad.java
@@ -4,14 +4,11 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.view.KeyEvent; import android.view.MotionEvent; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; import org.chromium.content_public.browser.WebContents; @@ -21,7 +18,6 @@ * Encapsulates component class {@link GamepadList} for use in content, with regards * to its state according to content being attached to/detached from window. */ -@NullMarked class Gamepad implements WindowEventObserver, UserData { private final Context mContext; @@ -30,15 +26,12 @@ } public static Gamepad from(WebContents webContents) { - Gamepad ret = - ((WebContentsImpl) webContents) - .getOrSetUserData(Gamepad.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(Gamepad.class, UserDataFactoryLazyHolder.INSTANCE); } public Gamepad(WebContents webContents) { - mContext = assumeNonNull(((WebContentsImpl) webContents).getContext()); + mContext = ((WebContentsImpl) webContents).getContext(); WindowEventObserverManager.from(webContents).addObserver(this); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java index 566f215..23c70fe 100644 --- a/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/GestureListenerManagerImpl.java
@@ -4,7 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.cc.mojom.RootScrollOffsetUpdateFrequency.NONE; import android.view.HapticFeedbackConstants; @@ -22,8 +21,6 @@ import org.chromium.base.TraceEvent; import org.chromium.base.UserData; import org.chromium.blink.mojom.EventType; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.cc.mojom.RootScrollOffsetUpdateFrequency; import org.chromium.content.browser.input.ImeAdapterImpl; import org.chromium.content.browser.selection.SelectionPopupControllerImpl; @@ -48,7 +45,6 @@ * Instantiated object is held inside {@link UserDataHost} that is managed by {@link WebContents}. */ @JNINamespace("content") -@NullMarked public class GestureListenerManagerImpl implements GestureListenerManager, WindowEventObserver, @@ -59,15 +55,15 @@ GestureListenerManagerImpl::new; } - private static @Nullable GestureListenerManagerImpl sInstanceForTesting; + private static GestureListenerManagerImpl sInstanceForTesting; private final WebContentsImpl mWebContents; private final ObserverList<GestureStateListener> mListeners; private final RewindableIterator<GestureStateListener> mIterator; private final HashMap<GestureStateListener, Integer> mListenerFrequency; - private @Nullable SelectionPopupControllerImpl mSelectionPopupController; + private SelectionPopupControllerImpl mSelectionPopupController; private ViewAndroidDelegate mViewDelegate; - private @Nullable InternalAccessDelegate mScrollDelegate; + private InternalAccessDelegate mScrollDelegate; private final boolean mHidePastePopupOnGSB; private final boolean mResetGestureDetectionOnLosingFocus; @@ -85,15 +81,14 @@ /** Whether a fling scroll is currently active. */ private boolean mHasActiveFlingScroll; - private @RootScrollOffsetUpdateFrequency.EnumType @Nullable Integer - mRootScrollOffsetUpdateFrequency; + private @RootScrollOffsetUpdateFrequency.EnumType Integer mRootScrollOffsetUpdateFrequency; /** * @param webContents {@link WebContents} object. * @return {@link GestureListenerManager} object used for the give WebContents. * Creates one if not present. */ - public static @Nullable GestureListenerManagerImpl fromWebContents(WebContents webContents) { + public static GestureListenerManagerImpl fromWebContents(WebContents webContents) { if (sInstanceForTesting != null) return sInstanceForTesting; return ((WebContentsImpl) webContents) .getOrSetUserData( @@ -112,7 +107,7 @@ mListeners = new ObserverList<GestureStateListener>(); mIterator = mListeners.rewindableIterator(); mListenerFrequency = new HashMap<>(); - mViewDelegate = assumeNonNull(mWebContents.getViewAndroidDelegate()); + mViewDelegate = mWebContents.getViewAndroidDelegate(); mViewDelegate.addVerticalScrollDirectionChangeListener(this); WindowEventObserverManager.from(mWebContents).addObserver(this); mNativeGestureListenerManager = @@ -512,7 +507,6 @@ } private void notifyDelegateOfScrollChange(float scrollOffsetX, float scrollOffsetY) { - assumeNonNull(mScrollDelegate); RenderCoordinatesImpl rc = mWebContents.getRenderCoordinates(); mScrollDelegate.onScrollChanged( (int) rc.fromLocalCssToPix(scrollOffsetX), @@ -532,7 +526,6 @@ if (mSelectionPopupController == null) { mSelectionPopupController = SelectionPopupControllerImpl.fromWebContents(mWebContents); - assumeNonNull(mSelectionPopupController); } // Use the active scroll signal for hiding. The animation movement by // fling will naturally hide the ActionMode by invalidating its content
diff --git a/content/public/android/java/src/org/chromium/content/browser/GpuProcessCallback.java b/content/public/android/java/src/org/chromium/content/browser/GpuProcessCallback.java index ee8d601..78b7ae2 100644 --- a/content/public/android/java/src/org/chromium/content/browser/GpuProcessCallback.java +++ b/content/public/android/java/src/org/chromium/content/browser/GpuProcessCallback.java
@@ -12,7 +12,6 @@ import org.jni_zero.NativeMethods; import org.chromium.base.UnguessableToken; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.common.IGpuProcessCallback; import org.chromium.content.common.InputTransferTokenWrapper; import org.chromium.content.common.SurfaceWrapper; @@ -20,7 +19,6 @@ import org.chromium.content_public.browser.SurfaceInputTransferHandlerMap; @JNINamespace("content") -@NullMarked class GpuProcessCallback extends IGpuProcessCallback.Stub { GpuProcessCallback() {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/HostZoomMapImpl.java b/content/public/android/java/src/org/chromium/content/browser/HostZoomMapImpl.java index 82aacfd..d6ab3b4 100644 --- a/content/public/android/java/src/org/chromium/content/browser/HostZoomMapImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/HostZoomMapImpl.java
@@ -16,7 +16,6 @@ import org.chromium.base.MathUtils; import org.chromium.base.ResettersForTesting; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.BrowserContextHandle; import org.chromium.content_public.browser.HostZoomMap; import org.chromium.content_public.browser.SiteZoomInfo; @@ -26,7 +25,6 @@ /** Implementations of {@link HostZoomMap} */ @JNINamespace("content") -@NullMarked public class HostZoomMapImpl { // Private constructor to prevent unwanted construction. private HostZoomMapImpl() {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java b/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java index 3320e78..27921fb8 100644 --- a/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrarImpl.java
@@ -8,8 +8,6 @@ import org.jni_zero.JNINamespace; import org.chromium.blink.mojom.AndroidFontLookup; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.androidoverlay.AndroidOverlayProviderImpl; import org.chromium.content.browser.font.AndroidFontLookupImpl; import org.chromium.content_public.browser.InterfaceRegistrar; @@ -20,7 +18,6 @@ import org.chromium.services.service_manager.InterfaceRegistry; @JNINamespace("content") -@NullMarked class InterfaceRegistrarImpl { private static boolean sHasRegisteredRegistrars; @@ -83,7 +80,7 @@ private static class SingletonInterfaceRegistrar implements InterfaceRegistrar<Void> { @Override - public void registerInterfaces(InterfaceRegistry registry, @Nullable Void v) { + public void registerInterfaces(InterfaceRegistry registry, Void v) { registry.addInterface( AndroidOverlayProvider.MANAGER, new AndroidOverlayProviderImpl.Factory()); // TODO(avayvod): Register the PresentationService implementation here.
diff --git a/content/public/android/java/src/org/chromium/content/browser/JavascriptInjectorImpl.java b/content/public/android/java/src/org/chromium/content/browser/JavascriptInjectorImpl.java index d1bc5f2..0d0259a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/JavascriptInjectorImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/JavascriptInjectorImpl.java
@@ -12,8 +12,6 @@ import org.chromium.base.UserData; import org.chromium.build.annotations.DoNotInline; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; import org.chromium.content_public.browser.JavascriptInjector; @@ -27,7 +25,6 @@ /** Implementation class of the interface {@link JavascriptInjector}. */ @JNINamespace("content") -@NullMarked public class JavascriptInjectorImpl implements JavascriptInjector, UserData { private static final class UserDataFactoryLazyHolder { private static final UserDataFactory<JavascriptInjectorImpl> INSTANCE = @@ -45,7 +42,7 @@ * @return {@link JavascriptInjector} object used for the give WebContents. Creates one if not * present. */ - public static @Nullable JavascriptInjector fromWebContents(WebContents webContents) { + public static JavascriptInjector fromWebContents(WebContents webContents) { JavascriptInjectorImpl javascriptInjector = ((WebContentsImpl) webContents) .getOrSetUserData( @@ -79,9 +76,7 @@ @Override public void addPossiblyUnsafeInterface( - @Nullable Object object, - String name, - @Nullable Class<? extends Annotation> requiredAnnotation) { + Object object, String name, Class<? extends Annotation> requiredAnnotation) { if (object == null) return; if (mNativePtr != 0) { @@ -117,7 +112,7 @@ JavascriptInjectorImpl caller, Object object, String name, - @Nullable Class requiredAnnotation); + Class requiredAnnotation); void removeInterface( long nativeJavascriptInjector, JavascriptInjectorImpl caller, String name);
diff --git a/content/public/android/java/src/org/chromium/content/browser/JavascriptInterface.java b/content/public/android/java/src/org/chromium/content/browser/JavascriptInterface.java index e61f743..9f6aa4d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/JavascriptInterface.java +++ b/content/public/android/java/src/org/chromium/content/browser/JavascriptInterface.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import org.chromium.build.annotations.NullMarked; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -19,5 +17,4 @@ @SuppressWarnings("javadoc") @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) -@NullMarked public @interface JavascriptInterface {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/JoystickHandler.java b/content/public/android/java/src/org/chromium/content/browser/JoystickHandler.java index 643de05a..ddfafdd 100644 --- a/content/public/android/java/src/org/chromium/content/browser/JoystickHandler.java +++ b/content/public/android/java/src/org/chromium/content/browser/JoystickHandler.java
@@ -8,7 +8,6 @@ import android.view.MotionEvent; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.input.ImeAdapterImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; @@ -17,7 +16,6 @@ import org.chromium.ui.base.EventForwarder; /** Bridges content and joystick device event conversion and forwarding. */ -@NullMarked public class JoystickHandler implements ImeEventObserver, UserData { private final EventForwarder mEventForwarder; @@ -29,12 +27,8 @@ } public static JoystickHandler fromWebContents(WebContents webContents) { - JoystickHandler ret = - ((WebContentsImpl) webContents) - .getOrSetUserData( - JoystickHandler.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(JoystickHandler.class, UserDataFactoryLazyHolder.INSTANCE); } /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java b/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java index 87d7dab..49849e4 100644 --- a/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java +++ b/content/public/android/java/src/org/chromium/content/browser/LauncherThread.java
@@ -14,11 +14,9 @@ import org.jni_zero.JNINamespace; import org.chromium.base.JavaHandlerThread; -import org.chromium.build.annotations.NullMarked; /** This is the process launcher thread. It is available before native library is loaded. */ @JNINamespace("content::android") -@NullMarked public final class LauncherThread { private static final JavaHandlerThread sThread = new JavaHandlerThread("Chrome_ProcessLauncherThread", Process.THREAD_PRIORITY_DEFAULT);
diff --git a/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java b/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java index edcbeb2..0973e71 100644 --- a/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java
@@ -4,13 +4,13 @@ package org.chromium.content.browser; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; import org.chromium.base.ObserverList; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.MediaSession; import org.chromium.content_public.browser.MediaSessionObserver; import org.chromium.content_public.browser.WebContents; @@ -28,7 +28,6 @@ * collection root. */ @JNINamespace("content") -@NullMarked public class MediaSessionImpl extends MediaSession { private long mNativeMediaSessionAndroid; @@ -36,11 +35,11 @@ private ObserverList.RewindableIterator<MediaSessionObserver> mObserversIterator; private boolean mIsControllable; - private @Nullable Boolean mIsSuspended; - private @Nullable MediaMetadata mMetadata; - private @Nullable List<MediaImage> mImagesList; - private @Nullable HashSet<Integer> mActionSet; - private @Nullable MediaPosition mPosition; + private Boolean mIsSuspended; + private MediaMetadata mMetadata; + private List<MediaImage> mImagesList; + private HashSet<Integer> mActionSet; + private MediaPosition mPosition; public static MediaSessionImpl fromWebContents(WebContents webContents) { return MediaSessionImplJni.get().getMediaSessionFromWebContents(webContents);
diff --git a/content/public/android/java/src/org/chromium/content/browser/MessagePayloadJni.java b/content/public/android/java/src/org/chromium/content/browser/MessagePayloadJni.java index 110d4e00..69df965 100644 --- a/content/public/android/java/src/org/chromium/content/browser/MessagePayloadJni.java +++ b/content/public/android/java/src/org/chromium/content/browser/MessagePayloadJni.java
@@ -4,23 +4,23 @@ package org.chromium.content.browser; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.MessagePayload; import org.chromium.content_public.browser.MessagePayloadType; /** Helper class to call MessagePayload methods from native. */ @JNINamespace("content") -@NullMarked final class MessagePayloadJni { private MessagePayloadJni() {} @MessagePayloadType @CalledByNative - private static int getType(MessagePayload payload) { + private static int getType(@NonNull MessagePayload payload) { return payload.getType(); } @@ -30,17 +30,17 @@ } @CalledByNative - private static @Nullable String getAsString(MessagePayload payload) { + private static String getAsString(@NonNull MessagePayload payload) { return payload.getAsString(); } @CalledByNative - private static MessagePayload createFromArrayBuffer(byte[] arrayBuffer) { + private static MessagePayload createFromArrayBuffer(@NonNull byte[] arrayBuffer) { return new MessagePayload(arrayBuffer); } @CalledByNative - private static byte[] getAsArrayBuffer(MessagePayload payload) { + private static byte[] getAsArrayBuffer(@NonNull MessagePayload payload) { return payload.getAsArrayBuffer(); } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/MotionEventSynthesizerImpl.java b/content/public/android/java/src/org/chromium/content/browser/MotionEventSynthesizerImpl.java index 88c3da34..256a06d3 100644 --- a/content/public/android/java/src/org/chromium/content/browser/MotionEventSynthesizerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/MotionEventSynthesizerImpl.java
@@ -10,11 +10,9 @@ import android.view.MotionEvent.PointerProperties; import android.view.View; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.MotionEventSynthesizer; /** Injects synthetic touch events. All the coordinates are of physical unit. */ -@NullMarked public class MotionEventSynthesizerImpl implements MotionEventSynthesizer { private static final int MAX_NUM_POINTERS = 16;
diff --git a/content/public/android/java/src/org/chromium/content/browser/NfcHost.java b/content/public/android/java/src/org/chromium/content/browser/NfcHost.java index d6c5c4db..105a9d49 100644 --- a/content/public/android/java/src/org/chromium/content/browser/NfcHost.java +++ b/content/public/android/java/src/org/chromium/content/browser/NfcHost.java
@@ -10,15 +10,12 @@ import org.jni_zero.CalledByNative; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.WebContents; import org.chromium.ui.base.WindowAndroid; /** Tracks the Activiy for a given WebContents on behalf of a NFC instance that cannot talk * directly to WebContents. */ -@NullMarked class NfcHost implements WindowEventObserver { private static final SparseArray<NfcHost> sContextHostsMap = new SparseArray<NfcHost>(); @@ -30,7 +27,7 @@ // The callback that the NFC instance has registered for being notified when the Activity // changes. - private @Nullable Callback<@Nullable Activity> mCallback; + private Callback<Activity> mCallback; /** Provides access to NfcHost via context ID. */ public static NfcHost fromContextId(int contextId) { @@ -54,7 +51,7 @@ * track changes to the Activity associated with its context ID (i.e., the activity associated * with |mWebContents|). */ - public void trackActivityChanges(Callback<@Nullable Activity> callback) { + public void trackActivityChanges(Callback<Activity> callback) { // Only the main frame is allowed to access NFC // (https://w3c.github.io/web-nfc/#security-policies). The renderer enforces this by // dropping connection requests from nested frames. Therefore, this class should never see @@ -63,13 +60,13 @@ mCallback = callback; // This may be null in tests. - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(mWebContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(mWebContents); if (manager != null) { manager.addObserver(this); } WindowAndroid window = mWebContents.getTopLevelNativeWindow(); - callback.onResult(window != null ? window.getActivity().get() : null); + mCallback.onResult(window != null ? window.getActivity().get() : null); } /** @@ -79,7 +76,7 @@ mCallback = null; // This may be null in tests. - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(mWebContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(mWebContents); if (manager != null) { manager.removeObserver(this); } @@ -89,7 +86,7 @@ /** Updates the Activity associated with this instance. */ @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { Activity activity = null; if (newWindowAndroid != null) { activity = newWindowAndroid.getActivity().get();
diff --git a/content/public/android/java/src/org/chromium/content/browser/PopupController.java b/content/public/android/java/src/org/chromium/content/browser/PopupController.java index 96ab859..1354808 100644 --- a/content/public/android/java/src/org/chromium/content/browser/PopupController.java +++ b/content/public/android/java/src/org/chromium/content/browser/PopupController.java
@@ -4,11 +4,7 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.selection.SelectionPopupControllerImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; @@ -18,7 +14,6 @@ import java.util.List; /** Controls all the popup views on content view. */ -@NullMarked public class PopupController implements UserData { /** Interface for popup views that expose a method for hiding itself. */ public interface HideablePopup { @@ -32,7 +27,7 @@ private final List<HideablePopup> mHideablePopups = new ArrayList<>(); - public static @Nullable PopupController fromWebContents(WebContents webContents) { + public static PopupController fromWebContents(WebContents webContents) { return ((WebContentsImpl) webContents) .getOrSetUserData(PopupController.class, UserDataFactoryLazyHolder.INSTANCE); } @@ -43,7 +38,7 @@ * Hide all popup views. * @param webContents {@link WebContents} for current content. */ - public static void hideAll(@Nullable WebContents webContents) { + public static void hideAll(WebContents webContents) { if (webContents == null) return; PopupController controller = PopupController.fromWebContents(webContents); if (controller != null) controller.hideAllPopups(); @@ -53,7 +48,7 @@ * Hide all popup views and clear text selection UI. * @param webContents {@link WebContents} for current content. */ - public static void hidePopupsAndClearSelection(@Nullable WebContents webContents) { + public static void hidePopupsAndClearSelection(WebContents webContents) { if (webContents == null) return; SelectionPopupControllerImpl controller = @@ -67,11 +62,9 @@ * @param webContents {@link WebContents} for current content. * @param popup {@link Hideable} popup view object. */ - public static void register(@Nullable WebContents webContents, HideablePopup popup) { + public static void register(WebContents webContents, HideablePopup popup) { if (webContents == null) return; - PopupController popupController = PopupController.fromWebContents(webContents); - assumeNonNull(popupController); - popupController.registerPopup(popup); + PopupController.fromWebContents(webContents).registerPopup(popup); } public void hideAllPopups() {
diff --git a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java index e8de0bc6..30df3ad 100644 --- a/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/RenderCoordinatesImpl.java
@@ -5,8 +5,6 @@ package org.chromium.content.browser; import org.chromium.base.ResettersForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content_public.browser.RenderCoordinates; import org.chromium.content_public.browser.WebContents; @@ -19,9 +17,8 @@ * * Unless stated otherwise, all coordinates are in CSS (document) coordinate space. */ -@NullMarked public class RenderCoordinatesImpl implements RenderCoordinates { - private static @Nullable RenderCoordinatesImpl sInstanceForTesting; + private static RenderCoordinatesImpl sInstanceForTesting; // Scroll offset from the native in CSS. private float mScrollXCss;
diff --git a/content/public/android/java/src/org/chromium/content/browser/RenderWidgetHostViewImpl.java b/content/public/android/java/src/org/chromium/content/browser/RenderWidgetHostViewImpl.java index 98951a3..b4a8cf6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/RenderWidgetHostViewImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/RenderWidgetHostViewImpl.java
@@ -9,8 +9,6 @@ import org.jni_zero.NativeMethods; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.RenderWidgetHostView; /** @@ -19,12 +17,11 @@ * names). This object allows the browser to access and control the renderer's top level View. */ @JNINamespace("content") -@NullMarked public class RenderWidgetHostViewImpl implements RenderWidgetHostView { private long mNativeRenderWidgetHostView; // Remember the stack for clearing native the native stack for debugging use after destroy. - private @Nullable Throwable mNativeDestroyThrowable; + private Throwable mNativeDestroyThrowable; @CalledByNative private static RenderWidgetHostViewImpl create(long renderWidgetHostViewLong) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java index 3624c56..58f8666 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ScreenOrientationProviderImpl.java
@@ -11,6 +11,8 @@ import android.util.Pair; import android.view.Surface; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; @@ -18,8 +20,6 @@ import org.chromium.base.ApplicationStatus; import org.chromium.base.ApplicationStatus.ActivityStateListener; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ScreenOrientationDelegate; import org.chromium.content_public.browser.ScreenOrientationProvider; import org.chromium.content_public.browser.WebContents; @@ -32,7 +32,6 @@ /** This is the implementation of the C++ counterpart ScreenOrientationProvider. */ @JNINamespace("content") -@NullMarked public class ScreenOrientationProviderImpl implements ActivityStateListener, ScreenOrientationProvider { private static class Holder { @@ -46,7 +45,7 @@ private static final boolean LOCK = true; private static final boolean UNLOCK = false; - private @Nullable ScreenOrientationDelegate mDelegate; + private ScreenOrientationDelegate mDelegate; /** * The keys of the map are the activities for which screen orientation are @@ -91,7 +90,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { if (newWindowAndroid == null) return; if (mLockOrUnlock) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java b/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java index d302bbc..4ef1bd4c 100644 --- a/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java +++ b/content/public/android/java/src/org/chromium/content/browser/SpareChildConnection.java
@@ -7,19 +7,17 @@ import android.content.Context; import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import org.chromium.base.Log; import org.chromium.base.process_launcher.ChildConnectionAllocator; import org.chromium.base.process_launcher.ChildProcessConnection; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; /** * This class is used to create a single spare ChildProcessConnection (usually early on during * start-up) that can then later be retrieved when a connection to a service is needed. */ -@NullMarked public class SpareChildConnection { private static final String TAG = "SpareChildConn"; @@ -27,14 +25,14 @@ private final ChildConnectionAllocator mConnectionAllocator; // The actual spare connection. - private @Nullable ChildProcessConnection mConnection; + private ChildProcessConnection mConnection; // True when there is a spare connection and it is bound. private boolean mConnectionReady; // The callback that should be called when the connection becomes bound. Set when the connection // is retrieved. - private ChildProcessConnection.@Nullable ServiceCallback mConnectionServiceCallback; + private ChildProcessConnection.ServiceCallback mConnectionServiceCallback; /** Creates and binds a ChildProcessConnection using the specified parameters. */ public SpareChildConnection( @@ -86,9 +84,9 @@ * @return a connection that has been bound or is being bound if one was created with the same * allocator as the one provided, null otherwise. */ - public @Nullable ChildProcessConnection getConnection( + public ChildProcessConnection getConnection( ChildConnectionAllocator allocator, - final ChildProcessConnection.ServiceCallback serviceCallback) { + @NonNull final ChildProcessConnection.ServiceCallback serviceCallback) { assert LauncherThread.runningOnLauncherThread(); if (isEmpty() || mConnectionAllocator != allocator || mConnectionServiceCallback != null) { return null; @@ -130,7 +128,7 @@ } @VisibleForTesting - public @Nullable ChildProcessConnection getConnection() { + public ChildProcessConnection getConnection() { return mConnection; } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/SpeechRecognitionImpl.java b/content/public/android/java/src/org/chromium/content/browser/SpeechRecognitionImpl.java index 59d8e0e..62e5d15 100644 --- a/content/public/android/java/src/org/chromium/content/browser/SpeechRecognitionImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/SpeechRecognitionImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.annotation.SuppressLint; import android.content.ComponentName; import android.content.Context; @@ -28,8 +26,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.PackageUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.content_public.browser.SpeechRecognition; import org.chromium.media.mojom.SpeechRecognitionErrorCode; @@ -40,7 +36,6 @@ /** Implementation of {@link SpeechRecognition}. */ @JNINamespace("content") -@NullMarked public class SpeechRecognitionImpl { private static final String TAG = "SpeechRecog"; @@ -60,11 +55,11 @@ // The speech recognition provider (if any) matching PROVIDER_PACKAGE_NAME and // PROVIDER_MIN_VERSION as selected by initialize(). - private static @Nullable ComponentName sRecognitionProvider; + private static ComponentName sRecognitionProvider; private final Intent mIntent; private final RecognitionListener mListener; - private @Nullable SpeechRecognizer mRecognizer; + private SpeechRecognizer mRecognizer; // Native pointer to C++ SpeechRecognizerImplAndroid. private long mNativeSpeechRecognizerImplAndroid; @@ -179,11 +174,10 @@ } ArrayList<String> list = - assumeNonNull(bundle.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)); + bundle.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); String[] results = list.toArray(new String[list.size()]); - float[] scores = - assumeNonNull(bundle.getFloatArray(SpeechRecognizer.CONFIDENCE_SCORES)); + float[] scores = bundle.getFloatArray(SpeechRecognizer.CONFIDENCE_SCORES); SpeechRecognitionImplJni.get() .onRecognitionResults( @@ -211,7 +205,7 @@ } /** Returns null if there is no Google LLC provided RecognitionService available on device. */ - private static @Nullable ComponentName createRecognitionProvider() { + private static ComponentName createRecognitionProvider() { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.S || BuildInfo.getInstance().isAutomotive) { return getComponent(SSBG_PACKAGE_NAME, -1); @@ -221,7 +215,7 @@ } @SuppressLint("WrongConstant") - private static @Nullable ComponentName getComponent(String packageName, int packageMinVersion) { + private static ComponentName getComponent(String packageName, int packageMinVersion) { Context context = ContextUtils.getApplicationContext(); PackageManager pm = context.getPackageManager(); Intent intent = new Intent(RecognitionService.SERVICE_INTERFACE); @@ -289,7 +283,6 @@ } try { - assumeNonNull(mRecognizer); mRecognizer.destroy(); } catch (IllegalArgumentException e) { // Intentionally swallow exception. This incorrectly throws exception on some samsung
diff --git a/content/public/android/java/src/org/chromium/content/browser/SyntheticGestureTarget.java b/content/public/android/java/src/org/chromium/content/browser/SyntheticGestureTarget.java index b50aa48..e804b518 100644 --- a/content/public/android/java/src/org/chromium/content/browser/SyntheticGestureTarget.java +++ b/content/public/android/java/src/org/chromium/content/browser/SyntheticGestureTarget.java
@@ -9,11 +9,8 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; - /** Forwards synthetic events to MotionEventSynthesizer. Owned by its native. */ @JNINamespace("content") -@NullMarked public class SyntheticGestureTarget { private final MotionEventSynthesizerImpl mMotionEventSynthesizer;
diff --git a/content/public/android/java/src/org/chromium/content/browser/TtsPlatformImpl.java b/content/public/android/java/src/org/chromium/content/browser/TtsPlatformImpl.java index 3b37017..a48c3f37 100644 --- a/content/public/android/java/src/org/chromium/content/browser/TtsPlatformImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/TtsPlatformImpl.java
@@ -9,6 +9,8 @@ import android.speech.tts.UtteranceProgressListener; import android.text.TextUtils; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; @@ -19,8 +21,6 @@ import org.chromium.base.task.AsyncTask; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; @@ -38,7 +38,6 @@ * use PostTask.runOrPostTask(TaskTraits.UI_DEFAULT, ...) when calling back to C++. */ @JNINamespace("content") -@NullMarked class TtsPlatformImpl { private static class TtsVoice { private final String mName; @@ -231,7 +230,6 @@ } private List<TtsVoice> getVoices() { - assert mVoices != null; return mVoices; } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/ViewEventSinkImpl.java b/content/public/android/java/src/org/chromium/content/browser/ViewEventSinkImpl.java index ecde6463..57b6d83b 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ViewEventSinkImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/ViewEventSinkImpl.java
@@ -4,14 +4,10 @@ package org.chromium.content.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.res.Configuration; import org.chromium.base.TraceEvent; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; import org.chromium.content_public.browser.ViewEventSink; @@ -21,12 +17,11 @@ import org.chromium.ui.base.WindowAndroid.ActivityStateObserver; /** Implementation of the interface {@link ViewEventSink}. */ -@NullMarked public final class ViewEventSinkImpl implements ViewEventSink, ActivityStateObserver, UserData { private final WebContentsImpl mWebContents; // Whether the container view has view-level focus. - private @Nullable Boolean mHasViewFocus; + private Boolean mHasViewFocus; // This is used in place of window focus on the container view, as we can't actually use window // focus due to issues where content expects to be focused while a popup steals window focus. @@ -36,7 +31,7 @@ // Whether we consider this WebContents to have input focus. This is computed through // mHasViewFocus and mPaused. See the comments on mPaused for how this doesn't exactly match // Android's notion of input focus and why we need to do this. - private @Nullable Boolean mHasInputFocus; + private Boolean mHasInputFocus; private boolean mHideKeyboardOnBlur; private static final class UserDataFactoryLazyHolder { @@ -44,12 +39,8 @@ } public static ViewEventSinkImpl from(WebContents webContents) { - ViewEventSinkImpl ret = - ((WebContentsImpl) webContents) - .getOrSetUserData( - ViewEventSinkImpl.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(ViewEventSinkImpl.class, UserDataFactoryLazyHolder.INSTANCE); } public ViewEventSinkImpl(WebContents webContents) { @@ -58,10 +49,7 @@ @Override public void setAccessDelegate(ViewEventSink.InternalAccessDelegate accessDelegate) { - GestureListenerManagerImpl gestureManager = - GestureListenerManagerImpl.fromWebContents(mWebContents); - assumeNonNull(gestureManager); - gestureManager.setScrollDelegate(accessDelegate); + GestureListenerManagerImpl.fromWebContents(mWebContents).setScrollDelegate(accessDelegate); ContentUiEventHandler.fromWebContents(mWebContents).setEventDelegate(accessDelegate); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/WindowEventObserver.java b/content/public/android/java/src/org/chromium/content/browser/WindowEventObserver.java index f3ad50d..0dff4410 100644 --- a/content/public/android/java/src/org/chromium/content/browser/WindowEventObserver.java +++ b/content/public/android/java/src/org/chromium/content/browser/WindowEventObserver.java
@@ -6,8 +6,6 @@ import android.content.res.Configuration; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayAndroid.DisplayAndroidObserver; @@ -15,7 +13,6 @@ * Interface to implement if Window-related events are needed. * This also includes an event for {@link WindowAndroid} (not Android window). */ -@NullMarked public interface WindowEventObserver extends DisplayAndroidObserver { /** This is called when the container view is attached to a window. */ default void onAttachedToWindow() {} @@ -29,7 +26,7 @@ default void onWindowFocusChanged(boolean gainFocus) {} /** Notifies observer when WindowAndroid is changed. */ - default void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) {} + default void onWindowAndroidChanged(WindowAndroid newWindowAndroid) {} /** * @see View#onConfigurationChanged()
diff --git a/content/public/android/java/src/org/chromium/content/browser/WindowEventObserverManager.java b/content/public/android/java/src/org/chromium/content/browser/WindowEventObserverManager.java index d8deddf..faacee29b 100644 --- a/content/public/android/java/src/org/chromium/content/browser/WindowEventObserverManager.java +++ b/content/public/android/java/src/org/chromium/content/browser/WindowEventObserverManager.java
@@ -9,8 +9,6 @@ import org.chromium.base.ActivityState; import org.chromium.base.ObserverList; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content.browser.webcontents.WebContentsImpl.UserDataFactory; import org.chromium.content_public.browser.WebContents; @@ -19,11 +17,10 @@ import org.chromium.ui.display.DisplayAndroid.DisplayAndroidObserver; /** Manages {@link WindowEventObserver} instances used for WebContents. */ -@NullMarked public final class WindowEventObserverManager implements DisplayAndroidObserver, UserData { private final ObserverList<WindowEventObserver> mWindowEventObservers = new ObserverList<>(); - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; private ViewEventSinkImpl mViewEventSink; private boolean mAttachedToWindow; @@ -37,12 +34,6 @@ } public static WindowEventObserverManager from(WebContents webContents) { - WindowEventObserverManager ret = maybeFrom(webContents); - assert ret != null; - return ret; - } - - public static @Nullable WindowEventObserverManager maybeFrom(WebContents webContents) { return ((WebContentsImpl) webContents) .getOrSetUserData( WindowEventObserverManager.class, UserDataFactoryLazyHolder.INSTANCE); @@ -105,7 +96,7 @@ * Called when {@link WindowAndroid} for WebContents is updated. * @param windowAndroid A new WindowAndroid object. */ - public void onWindowAndroidChanged(@Nullable WindowAndroid windowAndroid) { + public void onWindowAndroidChanged(WindowAndroid windowAndroid) { if (windowAndroid == mWindowAndroid) return; removeUiObservers();
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java index a35f6d1..9a330e25 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityActionAndEventTracker.java
@@ -7,13 +7,9 @@ import android.os.Bundle; import android.view.accessibility.AccessibilityEvent; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.LinkedList; /** Helper class for tracking accessibility actions and events for end-to-end tests. */ -@NullMarked public class AccessibilityActionAndEventTracker { private LinkedList<String> mEvents; private boolean mTestComplete; @@ -30,7 +26,7 @@ } } - public void addAction(int action, @Nullable Bundle arguments) { + public void addAction(int action, Bundle arguments) { // In rare cases there may be a lingering action, so only add if the test is not complete. if (!mTestComplete) { mEvents.add(actionToString(action, arguments)); @@ -76,7 +72,7 @@ * @param arguments Bundle arguments * @return String representation of the given action */ - private String actionToString(int action, @Nullable Bundle arguments) { + private String actionToString(int action, Bundle arguments) { StringBuilder builder = new StringBuilder(); builder.append(AccessibilityNodeInfoUtils.toString(action)); @@ -88,8 +84,12 @@ for (String key : arguments.keySet()) { argsBuilder.append(" {"); argsBuilder.append(key); - // In case of null values, use "null". - argsBuilder.append(arguments.get(key)); + // In case of null values, check what the key returns. + if (arguments.get(key) != null) { + argsBuilder.append(arguments.get(key).toString()); + } else { + argsBuilder.append("null"); + } argsBuilder.append("},"); } argsBuilder.append(" ]"); @@ -109,7 +109,7 @@ * @param event AccessibilityEvent event to get a string for * @return String representation of the given event */ - private static @Nullable String eventToString(AccessibilityEvent event) { + private static String eventToString(AccessibilityEvent event) { // Convert event type to a human readable String (except TYPE_WINDOW_CONTENT_CHANGED with no // CONTENT_CHANGE_TYPE_STATE_DESCRIPTION flag) if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityDelegate.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityDelegate.java index eb686aff1..7d903da4 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityDelegate.java
@@ -8,8 +8,8 @@ import android.view.View; import android.view.ViewStructure; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content_public.browser.WebContents; /** @@ -17,14 +17,12 @@ * relying on {@link WebContents}. This enables {@link WebContentsAccessibilityImpl} to be used * without an instance of {@link WebContents}. */ -@NullMarked public interface AccessibilityDelegate { /** * @return The {@link View} that contains the content that accessibility is used for. */ View getContainerView(); - @Nullable String getProductVersion(); boolean isIncognito(); @@ -62,7 +60,7 @@ * @param nodeRect The Rect where the click action happened for. * @return Whether this event was handled. */ - default boolean performClick(@Nullable Rect nodeRect) { + default boolean performClick(Rect nodeRect) { return false; } @@ -72,7 +70,7 @@ * @return Whether this delegate performed the scroll. If false, the scroll request will be sent * to WebContents. */ - default boolean scrollToMakeNodeVisible(@Nullable Rect nodeRect) { + default boolean scrollToMakeNodeVisible(Rect nodeRect) { return false; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityEventDispatcher.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityEventDispatcher.java index 00522047..5a13c521 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityEventDispatcher.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityEventDispatcher.java
@@ -6,9 +6,6 @@ import android.os.SystemClock; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -18,7 +15,6 @@ * throttle and queue AccessibilityEvents that are sent in quick succession. This ensures we do * not overload the system and create lag by sending superfluous events. */ -@NullMarked public class AccessibilityEventDispatcher { // Maps an AccessibilityEvent type to a throttle delay in milliseconds. This is populated once // in the constructor. @@ -64,7 +60,7 @@ * * @param toRemove The Runnable to remove. */ - void removeRunnable(@Nullable Runnable toRemove); + void removeRunnable(Runnable toRemove); /** * Build an AccessibilityEvent for the given id and type. Requires a connection through the
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityHistogramRecorder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityHistogramRecorder.java index 79049a9e..6bfb9e9c 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityHistogramRecorder.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityHistogramRecorder.java
@@ -12,11 +12,9 @@ import org.chromium.base.MathUtils; import org.chromium.base.TraceEvent; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.build.annotations.NullMarked; import org.chromium.ui.accessibility.AccessibilityState; /** Helper class for recording UMA histograms of accessibility events */ -@NullMarked public class AccessibilityHistogramRecorder { // OnDemand AX Mode histogram values @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java index 59ef0e9..9cc7c47 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoBuilder.java
@@ -57,8 +57,6 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; @@ -72,7 +70,6 @@ * construct objects for the virtual view hierarchy to provide to the Android framework. */ @JNINamespace("content") -@NullMarked public class AccessibilityNodeInfoBuilder { // Constants defined for AccessibilityNodeInfo Bundle extras keys. These values are Chromium // specific, and allow Chromium-based browsers to provide richer information to AT. These @@ -153,11 +150,9 @@ int currentAccessibilityFocusId(); // The language tag String provided by the default Locale of the device. - @Nullable String getLanguageTag(); // Comma separate value of HTML tags that a given node can traverse by. - @Nullable String getSupportedHtmlTags(); // Set of coordinates for providing the correct size and scroll of the View.
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java index d6e2f72..8ae255ad 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AccessibilityNodeInfoUtils.java
@@ -55,15 +55,11 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.ArrayList; import java.util.Collections; import java.util.List; /** Utility class for common actions involving AccessibilityNodeInfo objects. */ -@NullMarked public class AccessibilityNodeInfoUtils { /** * Helper method to perform a custom toString on a given AccessibilityNodeInfo object. @@ -72,8 +68,7 @@ * @return String Custom toString result for the given object */ public static String toString( - @Nullable AccessibilityNodeInfoCompat node, - boolean includeScreenSizeDependentAttributes) { + AccessibilityNodeInfoCompat node, boolean includeScreenSizeDependentAttributes) { if (node == null) return ""; StringBuilder builder = new StringBuilder(); @@ -407,8 +402,7 @@ // Since every node has a few Bundle extras, and some are often empty, we will only // print non-null and not empty values. - Object value = extras.get(key); - if (value == null || value.toString().isEmpty()) { + if (extras.get(key) == null || extras.get(key).toString().isEmpty()) { continue; } @@ -437,7 +431,11 @@ } // Simplify the key String before printing to make test outputs easier to read. - bundleStrings.add(key.replace("AccessibilityNodeInfo.", "") + "=\"" + value + "\""); + bundleStrings.add( + key.replace("AccessibilityNodeInfo.", "") + + "=\"" + + extras.get(key).toString() + + "\""); } builder.append(TextUtils.join(", ", bundleStrings)).append("]");
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AssistDataBuilder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AssistDataBuilder.java index d9ccb7bc..ad34f9d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AssistDataBuilder.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AssistDataBuilder.java
@@ -14,8 +14,6 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; - import java.util.ArrayList; import java.util.Arrays; @@ -28,7 +26,6 @@ * provide to the Android framework. */ @JNINamespace("content") -@NullMarked public class AssistDataBuilder { private static final String CSS_DISPLAY_BUNDLE_KEY = "display"; private static final String METADATA_BUNDLE_KEY = "metadata";
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/AutoDisableAccessibilityHandler.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/AutoDisableAccessibilityHandler.java index ce8cb8c..8d60827 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/AutoDisableAccessibilityHandler.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/AutoDisableAccessibilityHandler.java
@@ -8,14 +8,11 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; - /** * Helper class that handles the logic and state behind the "Auto Disable" accessibility feature. * Clients need to cancel/reset the timer based on their implementation (e.g. on a user action). * Only one timer per instance can exist. */ -@NullMarked public class AutoDisableAccessibilityHandler { /** Interface for any Client of this handler. */ interface Client {
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/ViewStructureBuilder.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/ViewStructureBuilder.java index ea5a050..d40c946 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/ViewStructureBuilder.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/ViewStructureBuilder.java
@@ -22,7 +22,6 @@ import org.jni_zero.CalledByNative; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.RenderCoordinatesImpl; import java.util.ArrayList; @@ -30,7 +29,6 @@ /** */ -@NullMarked public class ViewStructureBuilder { private RenderCoordinatesImpl mRenderCoordinates;
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityDelegate.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityDelegate.java index 57d92b41..1cf119f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityDelegate.java
@@ -4,19 +4,14 @@ package org.chromium.content.browser.accessibility; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.view.View; import android.view.ViewStructure; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.RenderCoordinatesImpl; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content_public.browser.WebContents; /** Implementation of {@link AccessibilityDelegate} based on {@link WebContents}. */ -@NullMarked public class WebContentsAccessibilityDelegate implements AccessibilityDelegate { private final WebContentsImpl mWebContents; private final AccessibilityCoordinatesImpl mAccessibilityCoordinatesImpl; @@ -28,13 +23,11 @@ @Override public View getContainerView() { - View ret = assumeNonNull(mWebContents.getViewAndroidDelegate()).getContainerView(); - assert ret != null; - return ret; + return mWebContents.getViewAndroidDelegate().getContainerView(); } @Override - public @Nullable String getProductVersion() { + public String getProductVersion() { return mWebContents.getProductVersion(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java index e3ce5415..0abb9cc 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/WebContentsAccessibilityImpl.java
@@ -51,7 +51,6 @@ import static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_PARAGRAPH; import static androidx.core.view.accessibility.AccessibilityNodeInfoCompat.MOVEMENT_GRANULARITY_WORD; -import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_DATA_REQUEST_IMAGE_DATA_KEY; import static org.chromium.content.browser.accessibility.AccessibilityNodeInfoBuilder.EXTRAS_KEY_URL; import static org.chromium.content_public.browser.ContentFeatureList.ACCESSIBILITY_MANAGE_BROADCAST_RECEIVER_ON_BACKGROUND; @@ -96,8 +95,6 @@ import org.chromium.base.task.TaskRunner; import org.chromium.base.task.TaskTraits; import org.chromium.build.BuildConfig; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.WindowEventObserver; import org.chromium.content.browser.WindowEventObserverManager; import org.chromium.content.browser.accessibility.AccessibilityDelegate.AccessibilityCoordinates; @@ -134,7 +131,6 @@ * non-Compat versions of these for any clients. */ @JNINamespace("content") -@NullMarked public class WebContentsAccessibilityImpl extends AccessibilityNodeProviderCompat implements WebContentsAccessibility, WindowEventObserver, @@ -163,7 +159,7 @@ private final AccessibilityDelegate mDelegate; protected AccessibilityManager mAccessibilityManager; protected Context mContext; - private final @Nullable String mProductVersion; + private final String mProductVersion; protected long mNativeObj; protected long mNativeAssistDataObj; private boolean mIsHovering; @@ -177,21 +173,21 @@ private int mAccessibilityFocusId; private int mLastAccessibilityFocusId = View.NO_ID; private int mSelectionNodeId; - private @Nullable View mAutofillPopupView; - private @Nullable CaptioningController mCaptioningController; + private View mAutofillPopupView; + private CaptioningController mCaptioningController; private boolean mIsCurrentlyExtendingSelection; private int mSelectionStart; private int mCursorIndex; - private @Nullable String mSupportedHtmlElementTypes; + private String mSupportedHtmlElementTypes; private final AccessibilityNodeInfoBuilder mAccessibilityNodeInfoBuilder; private boolean mHasFinishedLatestAccessibilitySnapshot; private boolean mPendingSetSequentialFocus; // Observer for WebContents, used to update state when |this| is shown/hidden. - private @Nullable WebContentsObserver mWebContentsObserver; + private WebContentsObserver mWebContentsObserver; // Tracker for all actions performed and events sent by this instance, used for testing. - private @Nullable AccessibilityActionAndEventTracker mTracker; + private AccessibilityActionAndEventTracker mTracker; // Helper object to track and record values relevant to histograms. private final AccessibilityHistogramRecorder mHistogramRecorder; @@ -216,7 +212,7 @@ // performAction. If false, all accessibility requests will be honored. When null, treat the // value as false, this is to differentiate between an initial value and a value set by a // client, since we assert the value is changed with each call to the setter. (Default: null). - private @Nullable Boolean mIsObscuredByAnotherView; + private Boolean mIsObscuredByAnotherView; // This array maps a given virtualViewId to an |AccessibilityNodeInfoCompat| for that view. We // use this to update a node quickly rather than building from one scratch each time. @@ -225,8 +221,8 @@ // This handles the dispatching of accessibility events. It acts as an intermediary where we can // apply throttling rules, delay event construction, etc. private final AccessibilityEventDispatcher mEventDispatcher; - private volatile @Nullable String mSystemLanguageTag; - private @Nullable BroadcastReceiver mBroadcastReceiver; + private volatile String mSystemLanguageTag; + private BroadcastReceiver mBroadcastReceiver; // Only un-register the broadcast receiver if this is true, otherwise it would result in a // crash. private volatile boolean mIsBroadcastReceiverRegistered; @@ -260,7 +256,7 @@ private static final UserDataFactory<WebContentsAccessibilityImpl> INSTANCE = new Factory(); } - public static @Nullable WebContentsAccessibilityImpl fromWebContents(WebContents webContents) { + public static WebContentsAccessibilityImpl fromWebContents(WebContents webContents) { return ((WebContentsImpl) webContents) .getOrSetUserData( WebContentsAccessibilityImpl.class, UserDataFactoryLazyHolder.INSTANCE); @@ -294,7 +290,7 @@ if (webContents != null) { mCaptioningController = new CaptioningController(webContents); WindowEventObserverManager.from(webContents).addObserver(this); - assumeNonNull(webContents.getViewAndroidDelegate()).addObserver(this); + webContents.getViewAndroidDelegate().addObserver(this); } mDelegate.setOnScrollPositionChangedCallback( () -> { @@ -328,12 +324,12 @@ } @Override - public @Nullable String getLanguageTag() { + public String getLanguageTag() { return mSystemLanguageTag; } @Override - public @Nullable String getSupportedHtmlTags() { + public String getSupportedHtmlTags() { return mSupportedHtmlElementTypes; } @@ -392,7 +388,7 @@ } @Override - public void removeRunnable(@Nullable Runnable toRemove) { + public void removeRunnable(Runnable toRemove) { mView.removeCallbacks(toRemove); } @@ -655,7 +651,6 @@ @Override public void onDetachedFromWindow() { - assumeNonNull(mCaptioningController); try (TraceEvent te = TraceEvent.scoped("WebContentsAccessibilityImpl.onDetachedFromWindow")) { mCaptioningController.stopListening(); @@ -699,8 +694,6 @@ @Override public void onAttachedToWindow() { - assumeNonNull(mCaptioningController); - assumeNonNull(mWebContentsObserver); TraceEvent.begin("WebContentsAccessibilityImpl.onAttachedToWindow"); // When webContents is non-null (e.g. not a Paint Preview), we will track usage stats. @@ -744,7 +737,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid windowAndroid) { + public void onWindowAndroidChanged(WindowAndroid windowAndroid) { TraceEvent.begin("WebContentsAccessibilityImpl.onWindowAndroidChanged"); // When the WindowAndroid changes, we must update our Context reference to the new value. // We also need to remove all references to the previous context, which in this case would @@ -853,7 +846,7 @@ // AccessibilityNodeProvider @Override - public @Nullable AccessibilityNodeProvider getAccessibilityNodeProvider() { + public AccessibilityNodeProvider getAccessibilityNodeProvider() { // The |WebContentsAccessibilityImpl| class will rely on the Compat library, but we will // not require other parts of Chrome to do the same for simplicity, so unwrap the // |AccessibilityNodeProvider| object before returning. @@ -869,7 +862,7 @@ * * @return AccessibilityNodeProviderCompat (this) */ - public @Nullable AccessibilityNodeProviderCompat getAccessibilityNodeProviderCompat() { + public AccessibilityNodeProviderCompat getAccessibilityNodeProviderCompat() { if (shouldPreventNativeEngineUse()) return null; // If the Auto-Disable feature is on, and accessibility has been disabled, when the @@ -949,7 +942,7 @@ } @Override - public @Nullable AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int virtualViewId) { + public AccessibilityNodeInfoCompat createAccessibilityNodeInfo(int virtualViewId) { if (!isAccessibilityEnabled()) { return null; } @@ -1141,7 +1134,7 @@ } @Override - public boolean performAction(int virtualViewId, int action, @Nullable Bundle arguments) { + public boolean performAction(int virtualViewId, int action, Bundle arguments) { // We don't support any actions on the host view or nodes // that are not (any longer) in the tree. if (!isAccessibilityEnabled() @@ -1750,7 +1743,6 @@ if (WebContentsAccessibilityImplJni.get() .isAutofillPopupNode(mNativeObj, mAccessibilityFocusId)) { - assumeNonNull(mAutofillPopupView); mAutofillPopupView.requestFocus(); } @@ -1796,7 +1788,7 @@ mEventDispatcher.enqueueEvent(virtualViewId, eventType); } - private @Nullable AccessibilityEvent buildAccessibilityEvent(int virtualViewId, int eventType) { + private AccessibilityEvent buildAccessibilityEvent(int virtualViewId, int eventType) { // If accessibility is disabled, node is invalid, or we don't have any frame info, // then the virtual hierarchy doesn't exist in the view of the Android framework, // so should never send any events. @@ -2067,7 +2059,7 @@ } } - private @Nullable Rect getAbsolutePositionForNode(int virtualViewId) { + private Rect getAbsolutePositionForNode(int virtualViewId) { int[] coords = WebContentsAccessibilityImplJni.get() .getAbsolutePositionForNode(mNativeObj, virtualViewId); @@ -2132,7 +2124,7 @@ int virtualViewId, AccessibilityNodeInfoCompat info, String extraDataKey, - @Nullable Bundle arguments) { + Bundle arguments) { switch (extraDataKey) { case EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY: getExtraDataTextCharacterLocations(virtualViewId, info, arguments); @@ -2144,7 +2136,7 @@ } private void getExtraDataTextCharacterLocations( - int virtualViewId, AccessibilityNodeInfoCompat info, @Nullable Bundle arguments) { + int virtualViewId, AccessibilityNodeInfoCompat info, Bundle arguments) { // Arguments must be provided, but some debug tools may not so guard against this. if (arguments == null) return; @@ -2210,7 +2202,7 @@ // These two methods are only used for one-off accessibility tree snapshots. long initForAssistData( WebContentsAccessibilityImpl caller, - @Nullable WebContents webContents, + WebContents webContents, AssistDataBuilder builder); void requestAccessibilityTreeSnapshot( @@ -2231,7 +2223,7 @@ void disableRendererAccessibility(long nativeWebContentsAccessibilityAndroid); void reEnableRendererAccessibility( - long nativeWebContentsAccessibilityAndroid, @Nullable WebContents webContents); + long nativeWebContentsAccessibilityAndroid, WebContents webContents); void deleteEarly(long nativeWebContentsAccessibilityAndroid);
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridge.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridge.java index 91c9ff7..92fe4a50 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridge.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningBridge.java
@@ -8,18 +8,15 @@ import android.view.accessibility.CaptioningManager; import org.chromium.base.ContextUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import java.util.Locale; /** Implementation of SystemCaptioningBridge that uses CaptioningManager. */ -@NullMarked public class CaptioningBridge extends CaptioningManager.CaptioningChangeListener implements SystemCaptioningBridge { private final CaptioningChangeDelegate mCaptioningChangeDelegate; private final CaptioningManager mCaptioningManager; - private static @Nullable CaptioningBridge sInstance; + private static CaptioningBridge sInstance; public static CaptioningBridge getInstance() { if (sInstance == null) { @@ -47,7 +44,7 @@ } @Override - public void onLocaleChanged(@Nullable Locale locale) { + public void onLocaleChanged(Locale locale) { mCaptioningChangeDelegate.onLocaleChanged(locale); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java index 2a89083..1d75f793 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningChangeDelegate.java
@@ -10,8 +10,6 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.accessibility.captioning.SystemCaptioningBridge.SystemCaptioningBridgeListener; import java.lang.ref.WeakReference; @@ -28,7 +26,6 @@ * * <p>https://developer.android.com/reference/android/view/accessibility/CaptioningManager.CaptioningChangeListener.html */ -@NullMarked public class CaptioningChangeDelegate { private static final String FONT_STYLE_ITALIC = "italic"; @@ -36,13 +33,13 @@ private boolean mTextTracksEnabled; - private @Nullable String mTextTrackBackgroundColor; - private @Nullable String mTextTrackFontFamily; - private @Nullable String mTextTrackFontStyle; - private @Nullable String mTextTrackFontVariant; - private @Nullable String mTextTrackTextColor; - private @Nullable String mTextTrackTextShadow; - private @Nullable String mTextTrackTextSize; + private String mTextTrackBackgroundColor; + private String mTextTrackFontFamily; + private String mTextTrackFontStyle; + private String mTextTrackFontVariant; + private String mTextTrackTextColor; + private String mTextTrackTextShadow; + private String mTextTrackTextSize; // Using weak references to avoid preventing listeners from getting GC'ed. private final HashSet<WeakReference<SystemCaptioningBridgeListener>> mListeners = new HashSet<>(); @@ -66,7 +63,7 @@ /** * @see android.view.accessibility.CaptioningManager.CaptioningChangeListener#onLocaleChanged */ - public void onLocaleChanged(@Nullable Locale locale) {} + public void onLocaleChanged(Locale locale) {} /** * @see android.view.accessibility.CaptioningManager.CaptioningChangeListener#onUserStyleChanged @@ -101,7 +98,7 @@ * @return the CSS-friendly String representation of the * edge attribute. */ - public static String getShadowFromColorAndSystemEdge(String color, @Nullable Integer type) { + public static String getShadowFromColorAndSystemEdge(String color, Integer type) { String edgeShadow = ""; if (type != null) { switch (type) { @@ -138,7 +135,7 @@ * @param typeFace a Typeface object. * @return a string representation of the font family name. */ - public static String getFontFromSystemFont(@Nullable Typeface typeFace) { + public static String getFontFromSystemFont(Typeface typeFace) { if (typeFace == null) return ""; // The list of fonts are obtained from apps/Settings/res/values/arrays.xml @@ -162,7 +159,7 @@ * @param color The Integer color to convert * @return a "rgba" CSS style string */ - public static String androidColorToCssColor(@Nullable Integer color) { + public static String androidColorToCssColor(Integer color) { if (color == null) { return DEFAULT_CAPTIONING_PREF_VALUE; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java index c2d62bc..7b56bf3e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningController.java
@@ -8,12 +8,10 @@ import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.WebContents; /** Sends notification when platform closed caption settings have changed. */ @JNINamespace("content") -@NullMarked public class CaptioningController implements SystemCaptioningBridge.SystemCaptioningBridgeListener { private SystemCaptioningBridge mSystemCaptioningBridge; private long mNativeCaptioningController;
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningStyle.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningStyle.java index 0366c84..e5545c6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningStyle.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/CaptioningStyle.java
@@ -7,9 +7,6 @@ import android.graphics.Typeface; import android.view.accessibility.CaptioningManager.CaptionStyle; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - /** * This is an internal representation of the captioning. This class follows the paradigm that was * introduced in KitKat while not using that API directly so that it can be used everywhere. @@ -17,14 +14,13 @@ * <p>For information on CaptionStyle, introduced in KitKat, see: {@link} * https://developer.android.com/reference/android/view/accessibility/CaptioningManager.CaptionStyle.html */ -@NullMarked public class CaptioningStyle { - private @Nullable Integer mBackgroundColor; - private @Nullable Integer mEdgeColor; - private @Nullable Integer mEdgeType; - private @Nullable Integer mForegroundColor; - private @Nullable Integer mWindowColor; - private @Nullable Typeface mTypeface; + private Integer mBackgroundColor; + private Integer mEdgeColor; + private Integer mEdgeType; + private Integer mForegroundColor; + private Integer mWindowColor; + private Typeface mTypeface; /** * Construct a Chromium CaptioningStyle object. @@ -37,12 +33,12 @@ * @param typeFace Typeface of the CaptioningStyle */ public CaptioningStyle( - @Nullable Integer backgroundColor, - @Nullable Integer edgeColor, - @Nullable Integer edgeType, - @Nullable Integer foregroundColor, - @Nullable Integer windowColor, - @Nullable Typeface typeface) { + Integer backgroundColor, + Integer edgeColor, + Integer edgeType, + Integer foregroundColor, + Integer windowColor, + Typeface typeface) { mBackgroundColor = backgroundColor; mEdgeColor = edgeColor; mEdgeType = edgeType; @@ -55,7 +51,7 @@ * @return the background color specified by the platform if one was specified * otherwise returns null */ - public @Nullable Integer getBackgroundColor() { + public Integer getBackgroundColor() { return mBackgroundColor; } @@ -63,7 +59,7 @@ * @return the edge color specified by the platform if one was specified * otherwise returns null */ - public @Nullable Integer getEdgeColor() { + public Integer getEdgeColor() { return mEdgeColor; } @@ -71,7 +67,7 @@ * @return the edge type specified by the platform if one was specified * otherwise returns null */ - public @Nullable Integer getEdgeType() { + public Integer getEdgeType() { return mEdgeType; } @@ -79,7 +75,7 @@ * @return the foreground color specified by the platform if one was specified * otherwise returns null */ - public @Nullable Integer getForegroundColor() { + public Integer getForegroundColor() { return mForegroundColor; } @@ -87,7 +83,7 @@ * @return the window color specified by the platform if one was specified * otherwise returns null */ - public @Nullable Integer getWindowColor() { + public Integer getWindowColor() { return mWindowColor; } @@ -95,7 +91,7 @@ * @return the Typeface specified by the platform if one was specified * otherwise returns null */ - public @Nullable Typeface getTypeface() { + public Typeface getTypeface() { return mTypeface; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/SystemCaptioningBridge.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/SystemCaptioningBridge.java index 9723e86..c2c90846 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/SystemCaptioningBridge.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/SystemCaptioningBridge.java
@@ -4,10 +4,7 @@ package org.chromium.content.browser.accessibility.captioning; -import org.chromium.build.annotations.NullMarked; - /** Interface for platform dependent captioning bridges. */ -@NullMarked public interface SystemCaptioningBridge { /** Interface for listening to changed from SystemCaptioningBridge. */ public interface SystemCaptioningBridgeListener {
diff --git a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/TextTrackSettings.java b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/TextTrackSettings.java index 4fdf33e..511c5674 100644 --- a/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/TextTrackSettings.java +++ b/content/public/android/java/src/org/chromium/content/browser/accessibility/captioning/TextTrackSettings.java
@@ -4,26 +4,22 @@ package org.chromium.content.browser.accessibility.captioning; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.Objects; /** * Bundles the Closed Caption Track Settings and ensures that non-null * strings are used used by the recipient of this bundle. */ -@NullMarked public final class TextTrackSettings { private static final String DEFAULT_VALUE = ""; private boolean mTextTracksEnabled; - private @Nullable String mTextTrackBackgroundColor; - private @Nullable String mTextTrackFontFamily; - private @Nullable String mTextTrackFontStyle; - private @Nullable String mTextTrackFontVariant; - private @Nullable String mTextTrackTextColor; - private @Nullable String mTextTrackTextShadow; - private @Nullable String mTextTrackTextSize; + private String mTextTrackBackgroundColor; + private String mTextTrackFontFamily; + private String mTextTrackFontStyle; + private String mTextTrackFontVariant; + private String mTextTrackTextColor; + private String mTextTrackTextShadow; + private String mTextTrackTextSize; /** * Constructs a new TextTrackSettings object that will @@ -45,13 +41,13 @@ */ public TextTrackSettings( boolean textTracksEnabled, - @Nullable String textTrackBackgroundColor, - @Nullable String textTrackFontFamily, - @Nullable String textTrackFontStyle, - @Nullable String textTrackFontVariant, - @Nullable String textTrackTextColor, - @Nullable String textTrackTextShadow, - @Nullable String textTrackTextSize) { + String textTrackBackgroundColor, + String textTrackFontFamily, + String textTrackFontStyle, + String textTrackFontVariant, + String textTrackTextColor, + String textTrackTextShadow, + String textTrackTextSize) { mTextTracksEnabled = textTracksEnabled; mTextTrackBackgroundColor = textTrackBackgroundColor; mTextTrackFontFamily = textTrackFontFamily;
diff --git a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java index 439fa00..1dca3d6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/AndroidOverlayProviderImpl.java
@@ -8,8 +8,6 @@ import org.jni_zero.JNINamespace; import org.chromium.base.ThreadUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.media.mojom.AndroidOverlay; import org.chromium.media.mojom.AndroidOverlayClient; import org.chromium.media.mojom.AndroidOverlayConfig; @@ -23,7 +21,6 @@ * sense that all provider clients talk to the same instance in the browser. */ @JNINamespace("content") -@NullMarked public class AndroidOverlayProviderImpl implements AndroidOverlayProvider { private static final String TAG = "AndroidOverlayProvider"; @@ -105,7 +102,7 @@ /** Mojo factory. */ public static class Factory implements InterfaceFactory<AndroidOverlayProvider> { - private static @Nullable AndroidOverlayProviderImpl sImpl; + private static AndroidOverlayProviderImpl sImpl; public Factory() {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayCore.java b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayCore.java index edb0804..8ebc6cc 100644 --- a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayCore.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.androidoverlay; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; @@ -17,9 +15,6 @@ import android.view.WindowManager; import org.chromium.base.Log; -import org.chromium.build.annotations.Initializer; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.gfx.mojom.Rect; import org.chromium.media.mojom.AndroidOverlayConfig; @@ -30,11 +25,8 @@ * Note that this does not implement AndroidOverlay; we just manage the android side of it. The * mojo interface is implemented by DialogOverlayImpl. */ -@NullMarked class DialogOverlayCore { private static final String TAG = "DSCore"; - // Android marks LayoutParams.token as @NonNull, but we null it out to mark state. - private static final IBinder INVALID_TOKEN = assumeNonNull(null); // Host interface, since we're on the wrong thread to talk to mojo, or anything else, really. public interface Host { @@ -46,15 +38,15 @@ void onOverlayDestroyed(); } - private @Nullable Host mHost; + private Host mHost; // When initialized via Init, we'll create mDialog. We'll clear it when we send // onOverlayDestroyed to the host. In general, when this is null, either we haven't been // initialized yet, or we've been torn down. It shouldn't be the case that anything calls // methods after construction but before |initialize()|, though. - private @Nullable Dialog mDialog; + private Dialog mDialog; - private @Nullable Callbacks mDialogCallbacks; + private Callbacks mDialogCallbacks; // Most recent layout parameters. private WindowManager.LayoutParams mLayoutParams; @@ -75,7 +67,6 @@ * @param host host interface, for sending messages that (probably) need to thread hop. * @param asPanel if true, then we'll be a panel. This is intended for tests only. */ - @Initializer public void initialize( Context context, AndroidOverlayConfig config, Host host, boolean asPanel) { mHost = host; @@ -97,7 +88,7 @@ // If we've not released the dialog yet, then do so. dismissDialogQuietly(); - mLayoutParams.token = INVALID_TOKEN; + mLayoutParams.token = null; // We don't bother to notify |mHost| that we've been destroyed; it told us. mHost = null; @@ -129,13 +120,13 @@ * client shouldn't call us before getting the surface anyway. */ public void layoutSurface(final Rect rect) { - if (mDialog == null || mLayoutParams.token == INVALID_TOKEN) return; + if (mDialog == null || mLayoutParams.token == null) return; // Note that it is important to not update the attributes if updating the layout params was // a no-op because it results in unnecessary re-layouts for the window. if (!copyRectToLayoutParams(rect)) return; - assumeNonNull(mDialog.getWindow()).setAttributes(mLayoutParams); + mDialog.getWindow().setAttributes(mLayoutParams); } /** @@ -167,11 +158,10 @@ public void surfaceRedrawNeeded(SurfaceHolder holder) {} } - public void onWindowToken(@Nullable IBinder token) { + public void onWindowToken(IBinder token) { if (mDialog == null || mHost == null) return; - if (token == null - || (mLayoutParams.token != INVALID_TOKEN && token != mLayoutParams.token)) { + if (token == null || (mLayoutParams.token != null && token != mLayoutParams.token)) { // We've lost the token, if we had one, or we got a new one. // Notify the client. mHost.onOverlayDestroyed(); @@ -187,10 +177,9 @@ // We have a token, so layout the dialog. mLayoutParams.token = token; - Window window = assumeNonNull(mDialog.getWindow()); - window.setAttributes(mLayoutParams); + mDialog.getWindow().setAttributes(mLayoutParams); mDialogCallbacks = new Callbacks(); - window.takeSurface(mDialogCallbacks); + mDialog.getWindow().takeSurface(mDialogCallbacks); mDialog.show(); // We don't notify the client here. We'll wait until the Android Surface is created. @@ -255,7 +244,6 @@ } /** Package-private to retrieve our current dialog for tests. */ - @Nullable Dialog getDialog() { return mDialog; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java index 80f1ff37..f670686c 100644 --- a/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/androidoverlay/DialogOverlayImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.androidoverlay; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.os.IBinder; import android.view.Surface; @@ -18,8 +16,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.ThreadUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.gfx.mojom.Rect; import org.chromium.media.mojom.AndroidOverlay; @@ -35,16 +31,15 @@ * from that thread from the UI thread. */ @JNINamespace("content") -@NullMarked public class DialogOverlayImpl implements AndroidOverlay, DialogOverlayCore.Host, ViewTreeObserver.OnPreDrawListener { private static final String TAG = "DialogOverlayImpl"; - private @Nullable AndroidOverlayClient mClient; + private AndroidOverlayClient mClient; // Runnable that we'll run when the overlay notifies us that it's been released. private Runnable mReleasedRunnable; - private @Nullable DialogOverlayCore mDialogCore; + private DialogOverlayCore mDialogCore; private long mNativeHandle; @@ -58,7 +53,7 @@ private Rect mLastRect; // Observes the container view to update our location. - private @Nullable ViewTreeObserver mContainerViewViewTreeObserver; + private ViewTreeObserver mContainerViewViewTreeObserver; private final AndroidOverlayConfig mConfig; private final boolean mAsPanel; @@ -67,7 +62,7 @@ // notify the client to cleanup tasks on the surface, because the surface may be // destroyed before SurfaceHolder.Callback2.surfaceDestroyed returns. private final Runnable mTearDownDialogOverlaysHandler = this::onOverlayDestroyed; - private @Nullable WebContentsImpl mWebContents; + private WebContentsImpl mWebContents; /** * @param client Mojo client interface. @@ -279,8 +274,9 @@ Context context = window.getContext().get(); if (ContextUtils.activityFromContext(context) == null) return; + mDialogCore = new DialogOverlayCore(); - mDialogCore.initialize(assumeNonNull(context), mConfig, DialogOverlayImpl.this, mAsPanel); + mDialogCore.initialize(context, mConfig, DialogOverlayImpl.this, mAsPanel); mDialogCore.onWindowToken(window.getWindowToken()); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/device_posture/DevicePosturePlatformProviderAndroid.java b/content/public/android/java/src/org/chromium/content/browser/device_posture/DevicePosturePlatformProviderAndroid.java index c4e66a7..7601abb 100644 --- a/content/public/android/java/src/org/chromium/content/browser/device_posture/DevicePosturePlatformProviderAndroid.java +++ b/content/public/android/java/src/org/chromium/content/browser/device_posture/DevicePosturePlatformProviderAndroid.java
@@ -7,6 +7,7 @@ import android.graphics.Rect; import android.os.Build; +import androidx.annotation.Nullable; import androidx.window.extensions.layout.DisplayFeature; import androidx.window.extensions.layout.FoldingFeature; import androidx.window.extensions.layout.WindowLayoutInfo; @@ -16,8 +17,6 @@ import org.jni_zero.NativeMethods; import org.chromium.blink_public.common.BlinkFeatures; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.WindowEventObserver; import org.chromium.content.browser.WindowEventObserverManager; import org.chromium.content.browser.webcontents.WebContentsImpl; @@ -31,11 +30,10 @@ * into the native class to relay them to blink. */ @JNINamespace("content") -@NullMarked public class DevicePosturePlatformProviderAndroid implements WindowEventObserver { private long mNativeDevicePosturePlatformProvider; private final WebContentsImpl mWebContents; - private @Nullable WindowLayoutInfoListener mWindowLayoutInfoListener; + private WindowLayoutInfoListener mWindowLayoutInfoListener; private boolean mListening; @CalledByNative @@ -51,7 +49,7 @@ assert webContents != null; mNativeDevicePosturePlatformProvider = nativeDevicePosturePlatformProvider; mWebContents = webContents; - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(mWebContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(mWebContents); if (manager != null) { manager.addObserver(this); } @@ -102,7 +100,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { unObserveWindowLayoutListener(); // We were listening before the change, we should listen on the new window. if (mListening) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/device_posture/WindowLayoutInfoListener.java b/content/public/android/java/src/org/chromium/content/browser/device_posture/WindowLayoutInfoListener.java index 71622a9..9ffcb19 100644 --- a/content/public/android/java/src/org/chromium/content/browser/device_posture/WindowLayoutInfoListener.java +++ b/content/public/android/java/src/org/chromium/content/browser/device_posture/WindowLayoutInfoListener.java
@@ -4,11 +4,10 @@ package org.chromium.content.browser.device_posture; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.os.Build; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.window.extensions.core.util.function.Consumer; import androidx.window.extensions.layout.WindowLayoutInfo; @@ -17,8 +16,6 @@ import org.chromium.base.UnownedUserData; import org.chromium.base.UnownedUserDataHost; import org.chromium.base.UnownedUserDataKey; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; import org.chromium.window.WindowUtil; @@ -26,14 +23,13 @@ * WindowLayoutInfoListener This class listen for WindowLayoutInfo changes and inform the device * posture service with the values. */ -@NullMarked public class WindowLayoutInfoListener implements UnownedUserData { private static final UnownedUserDataKey<WindowLayoutInfoListener> KEY = new UnownedUserDataKey<>(WindowLayoutInfoListener.class); private final Consumer<WindowLayoutInfo> mWindowLayoutInfoChangedCallback; - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; private ObserverList<DevicePosturePlatformProviderAndroid> mObservers = new ObserverList<>(); - private @Nullable WindowLayoutInfo mCurrentWindowLayoutInfo; + private WindowLayoutInfo mCurrentWindowLayoutInfo; private WindowLayoutInfoListener(WindowAndroid window) { assert window != null; @@ -55,7 +51,6 @@ } public void addObserver(DevicePosturePlatformProviderAndroid observer) { - assumeNonNull(mWindowAndroid); assert !mObservers.hasObserver(observer); Context context = mWindowAndroid.getContext().get(); if (mObservers.isEmpty() && context != null) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java b/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java index ea60bf2..02dc5fe 100644 --- a/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/font/AndroidFontLookupImpl.java
@@ -11,6 +11,7 @@ import android.os.ParcelFileDescriptor; import android.os.SystemClock; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.core.provider.FontRequest; import androidx.core.provider.FontsContractCompat; @@ -25,8 +26,6 @@ import org.chromium.base.task.SequencedTaskRunner; import org.chromium.base.task.TaskTraits; import org.chromium.blink.mojom.AndroidFontLookup; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.mojo.bindings.ExecutorFactory; import org.chromium.mojo.system.Core; @@ -48,7 +47,6 @@ * Implementation of the Mojo IPC interface that can be called from the renderer side to fetch fonts * from GMS Core. */ -@NullMarked public class AndroidFontLookupImpl implements AndroidFontLookup { private static final String TAG = "AndroidFontLookup"; private static final String READ_ONLY_MODE = "r"; @@ -139,7 +137,7 @@ */ @Override public void matchLocalFontByUniqueName( - String fontUniqueName, MatchLocalFontByUniqueName_Response callback) { + @NonNull String fontUniqueName, MatchLocalFontByUniqueName_Response callback) { long startTimeMs = SystemClock.elapsedRealtime(); // Get executor associated with the current thread for running Mojo callback. @@ -188,7 +186,7 @@ * * @param fontUniqueName The ICU case folded unique full font name to fetch. */ - private @Nullable ReadOnlyFile fetchFontInBackground(String fontUniqueName, Core core) { + private ReadOnlyFile fetchFontInBackground(String fontUniqueName, Core core) { ParcelFileDescriptor fileDescriptor = tryFetchFont(fontUniqueName); if (fileDescriptor == null) { // Avoid re-requesting this font in future. @@ -213,7 +211,7 @@ * @param fontUniqueName The ICU case folded unique full font name to fetch. * @return An opened font file descriptor, or null if the font file is not available. */ - private @Nullable ParcelFileDescriptor tryFetchFont(String fontUniqueName) { + private ParcelFileDescriptor tryFetchFont(String fontUniqueName) { ParcelFileDescriptor cachedFd = mFetchedFontCache.get(fontUniqueName); if (cachedFd != null) { try { @@ -348,7 +346,7 @@ * per process, see {@link ContextUtils#getApplicationContext()} for more info. */ @SuppressLint("StaticFieldLeak") - private static @Nullable AndroidFontLookupImpl sImpl; + private static AndroidFontLookupImpl sImpl; public Factory() {}
diff --git a/content/public/android/java/src/org/chromium/content/browser/font/FontsContractWrapper.java b/content/public/android/java/src/org/chromium/content/browser/font/FontsContractWrapper.java index 55ef222..68fbd95 100644 --- a/content/public/android/java/src/org/chromium/content/browser/font/FontsContractWrapper.java +++ b/content/public/android/java/src/org/chromium/content/browser/font/FontsContractWrapper.java
@@ -8,18 +8,18 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.os.CancellationSignal; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.provider.FontRequest; import androidx.core.provider.FontsContractCompat; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - /** Wrapper around the {@link FontsContractCompat} static API to allow for mocking in tests. */ -@NullMarked public class FontsContractWrapper { - + @NonNull FontsContractCompat.FontFamilyResult fetchFonts( - Context context, @Nullable CancellationSignal cancellationSignal, FontRequest request) + @NonNull Context context, + @Nullable CancellationSignal cancellationSignal, + @NonNull FontRequest request) throws NameNotFoundException { return FontsContractCompat.fetchFonts(context, cancellationSignal, request); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java index df60f8b7..ded0f22 100644 --- a/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/framehost/NavigationControllerImpl.java
@@ -15,8 +15,6 @@ import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.AdditionalNavigationParams; import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.NavigationController; @@ -34,7 +32,6 @@ @JNINamespace("content") // TODO(tedchoc): Remove the package restriction once this class moves to a non-public content // package whose visibility will be enforced via DEPS. -@NullMarked /* package */ class NavigationControllerImpl implements NavigationController { private static final String TAG = "NavigationController"; @@ -191,7 +188,7 @@ } @Override - public @Nullable NavigationHandle loadUrl(LoadUrlParams params) { + public NavigationHandle loadUrl(LoadUrlParams params) { NavigationHandle navigationHandle = null; if (mNativeNavigationControllerAndroid != 0) { String headers = @@ -255,7 +252,7 @@ } @Override - public @Nullable NavigationHistory getNavigationHistory() { + public NavigationHistory getNavigationHistory() { if (mNativeNavigationControllerAndroid == 0) return null; NavigationHistory history = new NavigationHistory(); int currentIndex = @@ -269,8 +266,7 @@ } @Override - public @Nullable NavigationHistory getDirectedNavigationHistory( - boolean isForward, int itemLimit) { + public NavigationHistory getDirectedNavigationHistory(boolean isForward, int itemLimit) { if (mNativeNavigationControllerAndroid == 0) return null; NavigationHistory history = new NavigationHistory(); NavigationControllerImplJni.get() @@ -324,7 +320,7 @@ } @Override - public @Nullable NavigationEntry getEntryAtIndex(int index) { + public NavigationEntry getEntryAtIndex(int index) { if (mNativeNavigationControllerAndroid != 0) { return NavigationControllerImplJni.get() .getEntryAtIndex( @@ -337,7 +333,7 @@ } @Override - public @Nullable NavigationEntry getVisibleEntry() { + public NavigationEntry getVisibleEntry() { if (mNativeNavigationControllerAndroid != 0) { return NavigationControllerImplJni.get() .getVisibleEntry( @@ -348,7 +344,7 @@ } @Override - public @Nullable NavigationEntry getPendingEntry() { + public NavigationEntry getPendingEntry() { if (mNativeNavigationControllerAndroid != 0) { return NavigationControllerImplJni.get() .getPendingEntry( @@ -389,7 +385,7 @@ } @Override - public @Nullable String getEntryExtraData(int index, String key) { + public String getEntryExtraData(int index, String key) { if (mNativeNavigationControllerAndroid == 0) return null; return NavigationControllerImplJni.get() .getEntryExtraData( @@ -497,21 +493,21 @@ String url, int loadUrlType, int transitionType, - @Nullable String referrerUrl, + String referrerUrl, int referrerPolicy, int uaOverrideOption, - @Nullable String extraHeaders, - @Nullable ResourceRequestBody postData, - @Nullable String baseUrlForDataUrl, - @Nullable String virtualUrlForSpecialCases, - @Nullable String dataUrlAsString, + String extraHeaders, + ResourceRequestBody postData, + String baseUrlForDataUrl, + String virtualUrlForSpecialCases, + String dataUrlAsString, boolean canLoadLocalResources, boolean isRendererInitiated, boolean shouldReplaceCurrentEntry, - @Nullable Origin initiatorOrigin, + Origin initiatorOrigin, boolean hasUserGesture, boolean shouldClearHistoryList, - @Nullable AdditionalNavigationParams additionalNavigationParams, + AdditionalNavigationParams additionalNavigationParams, long inputStart, long navigationUIDataPtr, boolean isPdf);
diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostDelegate.java b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostDelegate.java index b5893510..7f1ffb29 100644 --- a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostDelegate.java
@@ -4,13 +4,10 @@ package org.chromium.content.browser.framehost; -import org.chromium.build.annotations.NullMarked; - /** * The RenderFrameHost Java wrapper to allow communicating with the native RenderFrameHost object. * */ -@NullMarked public interface RenderFrameHostDelegate { // Mirrors callbacks for native RenderFrameHostDelegate. void renderFrameCreated(RenderFrameHostImpl host);
diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java index aff6444..1445aa09 100644 --- a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java
@@ -4,6 +4,8 @@ package org.chromium.content.browser.framehost; +import androidx.annotation.Nullable; + import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.jni_zero.JniType; @@ -12,8 +14,6 @@ import org.chromium.base.Callback; import org.chromium.base.UnguessableToken; import org.chromium.blink.mojom.AuthenticatorStatus; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.GlobalRenderFrameHostId; import org.chromium.content_public.browser.JavaScriptCallback; import org.chromium.content_public.browser.LifecycleState; @@ -33,7 +33,6 @@ * object. */ @JNINamespace("content") -@NullMarked public class RenderFrameHostImpl implements RenderFrameHost { private long mNativeRenderFrameHostAndroid; // mDelegate can be null. @@ -95,25 +94,28 @@ } @Override - public @Nullable GURL getLastCommittedURL() { + @Nullable + public GURL getLastCommittedURL() { if (mNativeRenderFrameHostAndroid == 0) return null; return RenderFrameHostImplJni.get().getLastCommittedURL(mNativeRenderFrameHostAndroid); } @Override - public @Nullable Origin getLastCommittedOrigin() { + @Nullable + public Origin getLastCommittedOrigin() { if (mNativeRenderFrameHostAndroid == 0) return null; return RenderFrameHostImplJni.get().getLastCommittedOrigin(mNativeRenderFrameHostAndroid); } @Override - public @Nullable RenderFrameHost getMainFrame() { + @Nullable + public RenderFrameHost getMainFrame() { if (mNativeRenderFrameHostAndroid == 0) return null; return RenderFrameHostImplJni.get().getMainFrame(mNativeRenderFrameHostAndroid); } @Override - public void getCanonicalUrlForSharing(Callback<@Nullable GURL> callback) { + public void getCanonicalUrlForSharing(Callback<GURL> callback) { if (mNativeRenderFrameHostAndroid == 0) { callback.onResult(null); return; @@ -123,7 +125,7 @@ } @Override - public @Nullable List<RenderFrameHost> getAllRenderFrameHosts() { + public List<RenderFrameHost> getAllRenderFrameHosts() { if (mNativeRenderFrameHostAndroid == 0) return null; return RenderFrameHostImplJni.get().getAllRenderFrameHosts(mNativeRenderFrameHostAndroid); } @@ -175,7 +177,7 @@ } @Override - public <I extends Interface, P extends Interface.Proxy> @Nullable P getInterfaceToRendererFrame( + public <I extends Interface, P extends Interface.Proxy> P getInterfaceToRendererFrame( Interface.Manager<I, P> manager) { if (mNativeRenderFrameHostAndroid == 0) return null; Pair<P, InterfaceRequest<I>> result = manager.getInterfaceRequest(CoreImpl.getInstance()); @@ -195,7 +197,8 @@ } /** Return the AndroidOverlay routing token for this RenderFrameHostImpl. */ - public @Nullable UnguessableToken getAndroidOverlayRoutingToken() { + @Nullable + public UnguessableToken getAndroidOverlayRoutingToken() { if (mNativeRenderFrameHostAndroid == 0) return null; return RenderFrameHostImplJni.get() .getAndroidOverlayRoutingToken(mNativeRenderFrameHostAndroid); @@ -300,8 +303,7 @@ RenderFrameHost getMainFrame(long nativeRenderFrameHostAndroid); - void getCanonicalUrlForSharing( - long nativeRenderFrameHostAndroid, Callback<@Nullable GURL> callback); + void getCanonicalUrlForSharing(long nativeRenderFrameHostAndroid, Callback<GURL> callback); @JniType("std::vector") List<RenderFrameHost> getAllRenderFrameHosts(long nativeRenderFrameHostAndroid); @@ -352,6 +354,6 @@ long nativeRenderFrameHostAndroid, String stript, int isolatedWorldId, - @Nullable JavaScriptCallback callback); + JavaScriptCallback callback); } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ChromiumBaseInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/ChromiumBaseInputConnection.java index 0d1910c..4b7fdc2 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ChromiumBaseInputConnection.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ChromiumBaseInputConnection.java
@@ -12,15 +12,10 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - /** An interface to help switch between AdapterInputConnection and ChromiumInputConnection. */ -@NullMarked public interface ChromiumBaseInputConnection extends InputConnection { /** A factory class to create or reuse ChromiumBaseInputConnection. */ public interface Factory { - @Nullable ChromiumBaseInputConnection initializeAndGet( View view, ImeAdapterImpl imeAdapter,
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/CursorAnchorInfoController.java b/content/public/android/java/src/org/chromium/content/browser/input/CursorAnchorInfoController.java index 8e69893e..78655b6 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/CursorAnchorInfoController.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/CursorAnchorInfoController.java
@@ -12,9 +12,10 @@ import android.view.inputmethod.EditorBoundsInfo; import android.view.inputmethod.TextAppearanceInfo; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.chromium.blink.mojom.InputCursorAnchorInfo; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.InputMethodManagerWrapper; import org.chromium.gfx.mojom.Rect; @@ -23,7 +24,6 @@ * {@link InputMethodManager#updateCursorAnchorInfo(View, CursorAnchorInfo)}. This interface is also * used in unit tests to mock out {@link CursorAnchorInfo}. */ -@NullMarked final class CursorAnchorInfoController { /** An interface to mock out {@link View#getLocationOnScreen(int[])} for testing. */ public interface ViewDelegate { @@ -59,21 +59,22 @@ private float mInsertionMarkerTop; private float mInsertionMarkerBottom; - private @Nullable CursorAnchorInfo mLastCursorAnchorInfo; + @Nullable private CursorAnchorInfo mLastCursorAnchorInfo; // Data which has come through the new code path from the renderer. Eventually, other data like // visible line bounds, composition bounds and editor bounds will be removed in favour of this. - private @Nullable InputCursorAnchorInfo mInputCursorAnchorInfo; + @Nullable private InputCursorAnchorInfo mInputCursorAnchorInfo; - private final Matrix mMatrix = new Matrix(); - private final int[] mViewOrigin = new int[2]; + @NonNull private final Matrix mMatrix = new Matrix(); + @NonNull private final int[] mViewOrigin = new int[2]; + @NonNull private final CursorAnchorInfo.Builder mCursorAnchorInfoBuilder = new CursorAnchorInfo.Builder(); - private @Nullable InputMethodManagerWrapper mInputMethodManagerWrapper; - private final ComposingTextDelegate mComposingTextDelegate; - private final ViewDelegate mViewDelegate; + @Nullable private InputMethodManagerWrapper mInputMethodManagerWrapper; + @Nullable private final ComposingTextDelegate mComposingTextDelegate; + @NonNull private final ViewDelegate mViewDelegate; private CursorAnchorInfoController( InputMethodManagerWrapper inputMethodManagerWrapper, @@ -127,7 +128,7 @@ */ // TODO(crbug.com/40940885): Remove this method once it is no longer used. public void setBounds( - float @Nullable [] characterBounds, float @Nullable [] lineBounds, View view) { + @Nullable float[] characterBounds, @Nullable float[] lineBounds, View view) { if (!mIsEditable) return; boolean shouldUpdate = false; if (mInputCursorAnchorInfo == null) { @@ -170,7 +171,7 @@ * @param view The attached view. */ // TODO(crbug.com/40940885): Remove this method and call sites. - public void updateWithEditorBoundsInfo(@Nullable EditorBoundsInfo editorBoundsInfo, View view) { + public void updateWithEditorBoundsInfo(EditorBoundsInfo editorBoundsInfo, View view) { if (!mIsEditable) return; mLastCursorAnchorInfo = null; updateCursorAnchorInfo(view); @@ -195,7 +196,7 @@ float insertionMarkerHorizontal, float insertionMarkerTop, float insertionMarkerBottom, - View view) { + @NonNull View view) { if (!mIsEditable) return; // Reuse {@param #mViewOrigin} to avoid object creation, as this method is supposed to be
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java b/content/public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java index a0cef0c..b657528 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/DateTimeChooserAndroid.java
@@ -11,15 +11,12 @@ import org.jni_zero.NativeMethods; import org.chromium.base.ContextUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.picker.DateTimeSuggestion; import org.chromium.content.browser.picker.InputDialogContainer; import org.chromium.ui.base.WindowAndroid; /** Plumbing for the different date/time dialog adapters. */ @JNINamespace("content") -@NullMarked class DateTimeChooserAndroid { private long mNativeDateTimeChooserAndroid; private final InputDialogContainer mInputDialogContainer; @@ -72,7 +69,7 @@ } @CalledByNative - private static @Nullable DateTimeChooserAndroid createDateTimeChooser( + private static DateTimeChooserAndroid createDateTimeChooser( WindowAndroid windowAndroid, long nativeDateTimeChooserAndroid, int dialogType,
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java index 4c205ac..2977bfc1 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeAdapterImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.input; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.content.res.Configuration; import android.graphics.Color; @@ -45,6 +43,7 @@ import android.view.inputmethod.SelectGesture; import android.view.inputmethod.SelectRangeGesture; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.view.inputmethod.EditorInfoCompat; @@ -63,8 +62,6 @@ import org.chromium.blink.mojom.StylusWritingGestureData; import org.chromium.blink_public.web.WebInputEventModifier; import org.chromium.blink_public.web.WebTextInputMode; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.GestureListenerManagerImpl; import org.chromium.content.browser.WindowEventObserver; import org.chromium.content.browser.WindowEventObserverManager; @@ -118,7 +115,6 @@ * lifetime of the object. */ @JNINamespace("content") -@NullMarked public class ImeAdapterImpl implements ImeAdapter, WindowEventObserver, UserData, InputMethodManagerWrapper.Delegate { private static final String TAG = "Ime"; @@ -133,12 +129,12 @@ private long mNativeImeAdapterAndroid; private InputMethodManagerWrapper mInputMethodManagerWrapper; - private @Nullable ChromiumBaseInputConnection mInputConnection; - private ChromiumBaseInputConnection.@Nullable Factory mInputConnectionFactory; + private ChromiumBaseInputConnection mInputConnection; + private ChromiumBaseInputConnection.Factory mInputConnectionFactory; // NOTE: This object will not be released by Android framework until the matching // ResultReceiver in the InputMethodService (IME app) gets gc'ed. - private @Nullable ShowKeyboardResultReceiver mShowKeyboardResultReceiver; + private ShowKeyboardResultReceiver mShowKeyboardResultReceiver; private final WebContentsImpl mWebContents; private ViewAndroidDelegate mViewDelegate; @@ -167,15 +163,12 @@ private int mLastSelectionStart; private int mLastSelectionEnd; - - @SuppressWarnings("NullAway.Init") private String mLastText; - private int mLastCompositionStart; private int mLastCompositionEnd; private boolean mRestartInputOnNextStateUpdate; // Do not access directly, use getStylusWritingImeCallback() instead. - private @Nullable StylusWritingImeCallback mStylusWritingImeCallback; + private StylusWritingImeCallback mStylusWritingImeCallback; private SparseArray<OngoingGesture> mOngoingGestures = new SparseArray<>(); // True if ImeAdapter is connected to render process. @@ -248,17 +241,14 @@ * @return {@link ImeAdapter} object. */ public static ImeAdapterImpl fromWebContents(WebContents webContents) { - ImeAdapterImpl ret = - ((WebContentsImpl) webContents) - .getOrSetUserData(ImeAdapterImpl.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(ImeAdapterImpl.class, UserDataFactoryLazyHolder.INSTANCE); } /** Returns an instance of the default {@link InputMethodManagerWrapper} */ public static InputMethodManagerWrapper createDefaultInputMethodManagerWrapper( Context context, - @Nullable WindowAndroid windowAndroid, + WindowAndroid windowAndroid, InputMethodManagerWrapper.Delegate delegate) { return new InputMethodManagerWrapperImpl(context, windowAndroid, delegate); } @@ -269,9 +259,8 @@ */ public ImeAdapterImpl(WebContents webContents) { mWebContents = (WebContentsImpl) webContents; - ViewAndroidDelegate viewDelegate = mWebContents.getViewAndroidDelegate(); - assert viewDelegate != null; - mViewDelegate = viewDelegate; + mViewDelegate = mWebContents.getViewAndroidDelegate(); + assert mViewDelegate != null; // Use application context here to avoid leaking the activity context. InputMethodManagerWrapper wrapper = @@ -318,12 +307,12 @@ } @Override - public @Nullable InputConnection getActiveInputConnection() { + public InputConnection getActiveInputConnection() { return mInputConnection; } @Override - public @Nullable InputConnection onCreateInputConnection(EditorInfo outAttrs) { + public InputConnection onCreateInputConnection(EditorInfo outAttrs) { boolean allowKeyboardLearning = mWebContents != null && !mWebContents.isIncognito(); InputConnection inputConnection = onCreateInputConnection(outAttrs, allowKeyboardLearning); @@ -430,7 +419,7 @@ * @see View#onCreateInputConnection(EditorInfo) * @param allowKeyboardLearning Whether to allow keyboard (IME) app to do personalized learning. */ - public @Nullable ChromiumBaseInputConnection onCreateInputConnection( + public ChromiumBaseInputConnection onCreateInputConnection( EditorInfo outAttrs, boolean allowKeyboardLearning) { // InputMethodService evaluates fullscreen mode even when the new input connection is // null. This makes sure IME doesn't enter fullscreen mode or open custom UI. @@ -484,7 +473,7 @@ return mInputConnection; } - private void setInputConnection(@Nullable ChromiumBaseInputConnection inputConnection) { + private void setInputConnection(ChromiumBaseInputConnection inputConnection) { if (mInputConnection == inputConnection) return; // The previous input connection might be waiting for state update. if (mInputConnection != null) mInputConnection.unblockOnUiThread(); @@ -509,29 +498,27 @@ mInputConnectionFactory = factory; } - ChromiumBaseInputConnection.@Nullable Factory getInputConnectionFactoryForTest() { + ChromiumBaseInputConnection.Factory getInputConnectionFactoryForTest() { return mInputConnectionFactory; } public void setTriggerDelayedOnCreateInputConnectionForTest(boolean trigger) { - assumeNonNull(mInputConnectionFactory); mInputConnectionFactory.setTriggerDelayedOnCreateInputConnection(trigger); } /** Get the current input connection for testing purposes. */ @VisibleForTesting @Override - public @Nullable InputConnection getInputConnectionForTest() { + public InputConnection getInputConnectionForTest() { return mInputConnection; } @VisibleForTesting @Override public void setComposingTextForTest(final CharSequence text, final int newCursorPosition) { - ChromiumBaseInputConnection inputConnection = assumeNonNull(mInputConnection); - inputConnection + mInputConnection .getHandler() - .post(() -> inputConnection.setComposingText(text, newCursorPosition)); + .post(() -> mInputConnection.setComposingText(text, newCursorPosition)); } private static int getModifiers(int metaState) { @@ -838,7 +825,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid windowAndroid) { + public void onWindowAndroidChanged(WindowAndroid windowAndroid) { if (mInputMethodManagerWrapper != null) { mInputMethodManagerWrapper.onWindowAndroidChanged(windowAndroid); } @@ -925,7 +912,7 @@ } /** Update extracted text to input method manager. */ - void updateExtractedText(int token, @Nullable ExtractedText extractedText) { + void updateExtractedText(int token, ExtractedText extractedText) { mInputMethodManagerWrapper.updateExtractedText(getContainerView(), token, extractedText); } @@ -1628,7 +1615,7 @@ } @CalledByNative - private void setBounds(float @Nullable [] characterBounds, float @Nullable [] lineBounds) { + private void setBounds(@Nullable float[] characterBounds, @Nullable float[] lineBounds) { mCursorAnchorInfoController.setBounds(characterBounds, lineBounds, getContainerView()); } @@ -1647,7 +1634,7 @@ boolean sendKeyEvent( long nativeImeAdapterAndroid, ImeAdapterImpl caller, - @Nullable KeyEvent event, + KeyEvent event, int type, int modifiers, long timestampMs,
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ImeUtils.java b/content/public/android/java/src/org/chromium/content/browser/input/ImeUtils.java index e15f80da..d5cb7e2 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ImeUtils.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ImeUtils.java
@@ -18,14 +18,12 @@ import org.chromium.base.ThreadUtils; import org.chromium.blink_public.web.WebTextInputFlags; import org.chromium.blink_public.web.WebTextInputMode; -import org.chromium.build.annotations.NullMarked; import org.chromium.ui.base.ime.TextInputAction; import org.chromium.ui.base.ime.TextInputType; import java.util.Locale; /** Utilities for IME such as computing outAttrs, and dumping object information. */ -@NullMarked public class ImeUtils { /** * Compute {@link EditorInfo} based on the given parameters. This is needed for
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/InputMethodManagerWrapperImpl.java b/content/public/android/java/src/org/chromium/content/browser/input/InputMethodManagerWrapperImpl.java index 058e7c0..e2ddc89 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/InputMethodManagerWrapperImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/InputMethodManagerWrapperImpl.java
@@ -18,8 +18,6 @@ import org.chromium.base.Log; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.InputMethodManagerWrapper; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.display.DisplayAndroid; @@ -27,21 +25,20 @@ import java.lang.ref.WeakReference; /** Wrapper around Android's InputMethodManager */ -@NullMarked public class InputMethodManagerWrapperImpl implements InputMethodManagerWrapper { private static final boolean DEBUG_LOGS = false; private static final String TAG = "IMM"; private final Context mContext; - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; private Delegate mDelegate; - private @Nullable Runnable mPendingRunnableOnInputConnection; + private Runnable mPendingRunnableOnInputConnection; public InputMethodManagerWrapperImpl( - Context context, @Nullable WindowAndroid windowAndroid, Delegate delegate) { + Context context, WindowAndroid windowAndroid, Delegate delegate) { if (DEBUG_LOGS) Log.i(TAG, "Constructor"); mContext = context; mWindowAndroid = windowAndroid; @@ -49,7 +46,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid windowAndroid) { + public void onWindowAndroidChanged(WindowAndroid windowAndroid) { mWindowAndroid = windowAndroid; } @@ -66,8 +63,7 @@ * * @return The Activity. May return null if it fails. */ - private static @Nullable Activity getActivityFromWindowAndroid( - @Nullable WindowAndroid windowAndroid) { + private static Activity getActivityFromWindowAndroid(WindowAndroid windowAndroid) { if (windowAndroid == null) return null; // Unwrap this when we actually need it. WeakReference<Activity> weakRef = windowAndroid.getActivity(); @@ -153,7 +149,7 @@ } @Override - public boolean isActive(@Nullable View view) { + public boolean isActive(View view) { InputMethodManager manager = getInputMethodManager(); final boolean active = manager != null && manager.isActive(view); if (DEBUG_LOGS) Log.i(TAG, "isActive: " + active); @@ -162,7 +158,7 @@ @Override public boolean hideSoftInputFromWindow( - IBinder windowToken, int flags, @Nullable ResultReceiver resultReceiver) { + IBinder windowToken, int flags, ResultReceiver resultReceiver) { if (DEBUG_LOGS) Log.i(TAG, "hideSoftInputFromWindow"); mPendingRunnableOnInputConnection = null; InputMethodManager manager = getInputMethodManager(); @@ -202,7 +198,7 @@ @Override public void updateExtractedText( - View view, int token, android.view.inputmethod.@Nullable ExtractedText text) { + View view, int token, android.view.inputmethod.ExtractedText text) { if (DEBUG_LOGS) Log.d(TAG, "updateExtractedText"); InputMethodManager manager = getInputMethodManager(); if (manager == null) return;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/OngoingGesture.java b/content/public/android/java/src/org/chromium/content/browser/input/OngoingGesture.java index 7c66a3f..d637372 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/OngoingGesture.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/OngoingGesture.java
@@ -4,11 +4,12 @@ package org.chromium.content.browser.input; +import androidx.annotation.Nullable; + import org.chromium.base.ThreadUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.blink.mojom.HandwritingGestureResult; import org.chromium.blink.mojom.StylusWritingGestureData; -import org.chromium.build.annotations.NullMarked; import java.util.concurrent.Executor; import java.util.function.IntConsumer; @@ -17,17 +18,19 @@ * Stores data needed to process and record the result of a gesture, reporting it to Android. * Also records how long it took to process the gesture. */ -@NullMarked class OngoingGesture { private static int sLastId; private final int mId; - private final StylusWritingGestureData mGestureData; - private final Executor mExecutor; - private final IntConsumer mConsumer; + private final @Nullable StylusWritingGestureData mGestureData; + private final @Nullable Executor mExecutor; + private final @Nullable IntConsumer mConsumer; private final long mCreationTimestamp; - OngoingGesture(StylusWritingGestureData gestureData, Executor executor, IntConsumer consumer) { + OngoingGesture( + @Nullable StylusWritingGestureData gestureData, + @Nullable Executor executor, + @Nullable IntConsumer consumer) { ThreadUtils.assertOnUiThread(); mId = ++sLastId; mGestureData = gestureData; @@ -37,6 +40,10 @@ } void onGestureHandled(@HandwritingGestureResult.EnumType int result) { + if (mExecutor == null || mConsumer == null) { + logGestureResult(HandwritingGestureResult.UNKNOWN); + return; + } mExecutor.execute(() -> mConsumer.accept(result)); logGestureResult(result); @@ -56,6 +63,7 @@ return mId; } + @Nullable StylusWritingGestureData getGestureData() { return mGestureData; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/Range.java b/content/public/android/java/src/org/chromium/content/browser/input/Range.java index 95c708b..a4a0871 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/Range.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/Range.java
@@ -6,10 +6,7 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; - /** A simple class to set start and end in int type. */ -@NullMarked public class Range { private int mStart; // guaranteed to be smaller than or equal to mEnd private int mEnd;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopup.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopup.java index c02b683e..a3aa0fd 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopup.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopup.java
@@ -13,8 +13,6 @@ import org.jni_zero.NativeMethods; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.PopupController; import org.chromium.content.browser.PopupController.HideablePopup; import org.chromium.content.browser.WindowEventObserver; @@ -32,7 +30,6 @@ /** Handles the popup UI for the lt&;select> HTML tag support. */ @JNINamespace("content") -@NullMarked public class SelectPopup implements HideablePopup, ViewAndroidDelegate.ContainerViewObserver, @@ -52,7 +49,7 @@ private final WebContentsImpl mWebContents; private View mContainerView; - private @Nullable Ui mPopupView; + private Ui mPopupView; private long mNativeSelectPopup; private long mNativeSelectPopupSourceFrame; @@ -66,11 +63,8 @@ * @return {@link SelectPopup} object. */ public static SelectPopup fromWebContents(WebContents webContents) { - SelectPopup ret = - ((WebContentsImpl) webContents) - .getOrSetUserData(SelectPopup.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(SelectPopup.class, UserDataFactoryLazyHolder.INSTANCE); } @CalledByNative @@ -119,7 +113,7 @@ // WindowEventObserver @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid windowAndroid) { + public void onWindowAndroidChanged(WindowAndroid windowAndroid) { close(); } @@ -205,7 +199,7 @@ * Notifies that items were selected in the currently showing select popup. * @param indices Array of indices of the selected items. */ - public void selectMenuItems(int @Nullable [] indices) { + public void selectMenuItems(int[] indices) { if (mNativeSelectPopup != 0) { SelectPopupJni.get() .selectMenuItems( @@ -224,6 +218,6 @@ long nativeSelectPopup, SelectPopup caller, long nativeSelectPopupSourceFrame, - int @Nullable [] indices); + int[] indices); } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupAdapter.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupAdapter.java index f010ef3..a5196ba 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupAdapter.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupAdapter.java
@@ -12,9 +12,6 @@ import android.widget.CheckedTextView; import android.widget.TextView; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.ArrayList; import java.util.List; @@ -22,7 +19,6 @@ * Select popup item adapter for SelectPopupDialog, used so we can disable * OPTION_GROUP items. */ -@NullMarked public class SelectPopupAdapter extends ArrayAdapter<SelectPopupItem> { // Holds the items of the select popup alert dialog list. private List<SelectPopupItem> mItems; @@ -50,8 +46,8 @@ } @Override - public View getView(int position, @Nullable View convertView, ViewGroup parent) { - assert position >= 0 && position < getCount(); + public View getView(int position, View convertView, ViewGroup parent) { + if (position < 0 || position >= getCount()) return null; convertView = super.getView(position, convertView, parent); ((TextView) convertView).setText(mItems.get(position).getLabel());
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java index 0fc1099c..dd720658 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDialog.java
@@ -16,8 +16,6 @@ import android.widget.ListView; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.content_public.browser.util.DialogTypeRecorder; import org.chromium.ui.widget.UiWidgetFactory; @@ -25,7 +23,6 @@ import java.util.List; /** Handles the popup dialog for the <select> HTML tag support. */ -@NullMarked public class SelectPopupDialog implements SelectPopup.Ui { private static final int[] SELECT_DIALOG_ATTRS = { R.attr.select_dialog_multichoice, R.attr.select_dialog_singlechoice @@ -33,13 +30,13 @@ // The dialog hosting the popup list view. private final AlertDialog mListBoxPopup; - private final Callback<int @Nullable []> mSelectionChangedCallback; + private final Callback<int[]> mSelectionChangedCallback; private boolean mSelectionNotified; public SelectPopupDialog( Context windowContext, - Callback<int @Nullable []> selectionChangedCallback, + Callback<int[]> selectionChangedCallback, List<SelectPopupItem> items, boolean multiple, int[] selected) { @@ -147,7 +144,7 @@ return indices; } - private void notifySelection(int @Nullable [] indicies) { + private void notifySelection(int[] indicies) { if (mSelectionNotified) return; mSelectionChangedCallback.onResult(indicies); mSelectionNotified = true;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java index 52b347c..025dd026 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupDropdown.java
@@ -4,16 +4,12 @@ package org.chromium.content.browser.input; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.view.View; import android.widget.AdapterView; import android.widget.PopupWindow; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.GestureListenerManager; import org.chromium.content_public.browser.GestureStateListener; import org.chromium.content_public.browser.WebContents; @@ -23,16 +19,15 @@ import java.util.List; /** Handles the dropdown popup for the <select> HTML tag support. */ -@NullMarked public class SelectPopupDropdown implements SelectPopup.Ui { - private final Callback<int @Nullable []> mSelectionChangedCallback; + private final Callback<int[]> mSelectionChangedCallback; private final DropdownPopupWindow mDropdownPopupWindow; private boolean mSelectionNotified; public SelectPopupDropdown( Context context, - Callback<int @Nullable []> selectionChangedCallback, + Callback<int[]> selectionChangedCallback, View anchorView, List<SelectPopupItem> items, int[] selected, @@ -65,19 +60,18 @@ notifySelection(null); } }); - GestureListenerManager gestureManager = GestureListenerManager.fromWebContents(webContents); - assumeNonNull(gestureManager); - gestureManager.addListener( - new GestureStateListener() { - @Override - public void onScrollStarted( - int scrollOffsetY, int scrollExtentY, boolean isDirectionUp) { - hide(true); - } - }); + GestureListenerManager.fromWebContents(webContents) + .addListener( + new GestureStateListener() { + @Override + public void onScrollStarted( + int scrollOffsetY, int scrollExtentY, boolean isDirectionUp) { + hide(true); + } + }); } - private void notifySelection(int @Nullable [] indicies) { + private void notifySelection(int[] indicies) { if (mSelectionNotified) return; mSelectionChangedCallback.onResult(indicies); mSelectionNotified = true;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupItem.java b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupItem.java index 3bb95145..e8015757 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupItem.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SelectPopupItem.java
@@ -4,14 +4,12 @@ package org.chromium.content.browser.input; -import org.chromium.build.annotations.NullMarked; import org.chromium.ui.DropdownItemBase; /** * Select popup item containing the label, the type and the enabled state * of an item belonging to a select popup dialog. */ -@NullMarked public class SelectPopupItem extends DropdownItemBase { private final String mLabel; private final int mType;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SpellCheckPopupWindow.java b/content/public/android/java/src/org/chromium/content/browser/input/SpellCheckPopupWindow.java index ecb0a2a3..285f9143 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SpellCheckPopupWindow.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SpellCheckPopupWindow.java
@@ -8,15 +8,12 @@ import android.text.SpannableString; import android.view.View; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; /** * A subclass of SuggestionsPopupWindow to be used for showing suggestions from a spell check * marker. */ -@NullMarked public class SpellCheckPopupWindow extends SuggestionsPopupWindow { private String[] mSuggestions = new String[0]; @@ -29,7 +26,7 @@ public SpellCheckPopupWindow( Context context, TextSuggestionHost textSuggestionHost, - @Nullable WindowAndroid windowAndroid, + WindowAndroid windowAndroid, View parentView) { super(context, textSuggestionHost, windowAndroid, parentView); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/StylusGestureConverter.java b/content/public/android/java/src/org/chromium/content/browser/input/StylusGestureConverter.java index 378bab77..c83bd5b 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/StylusGestureConverter.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/StylusGestureConverter.java
@@ -23,8 +23,6 @@ import org.chromium.blink.mojom.StylusWritingGestureAction; import org.chromium.blink.mojom.StylusWritingGestureData; import org.chromium.blink.mojom.StylusWritingGestureGranularity; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.gfx.mojom.Rect; import org.chromium.mojo_base.mojom.String16; @@ -35,7 +33,6 @@ * Converts stylus rich gestures from their Android representation to their Blink representation. */ @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) -@NullMarked public class StylusGestureConverter { // Should be kept in sync with StylusHandwritingGesture in tools/metrics/histograms/enums.xml. // These values are persisted to logs. Entries should not be renumbered and @@ -77,7 +74,7 @@ "InputMethod.StylusHandwriting.Gesture", gestureType, UmaGestureType.NUM_ENTRIES); } - public static @Nullable StylusWritingGestureData createGestureData(HandwritingGesture gesture) { + public static StylusWritingGestureData createGestureData(HandwritingGesture gesture) { if (gesture instanceof SelectGesture) { logGestureType(UmaGestureType.SELECT); return createGestureData((SelectGesture) gesture); @@ -272,13 +269,10 @@ * @return A String16 object which wraps an array of short integers for each character in the * string. */ - private static String16 toMojoString(@Nullable String string) { - if (string == null) { - string = ""; - } - int len = string.length(); + private static String16 toMojoString(String string) { + int len = string != null ? string.length() : 0; short[] data = new short[len]; - for (int i = 0; i < len; i++) { + for (int i = 0; i < data.length; i++) { data[i] = (short) string.charAt(i); } String16 mojoString = new String16();
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SuggestionInfo.java b/content/public/android/java/src/org/chromium/content/browser/input/SuggestionInfo.java index 6a88933e..ddc3905 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SuggestionInfo.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SuggestionInfo.java
@@ -6,14 +6,11 @@ import org.jni_zero.CalledByNative; -import org.chromium.build.annotations.NullMarked; - /** * Represents an entry in a text suggestion popup menu. Contains the information * necessary to display the menu entry and the information necessary to apply * the suggestion. */ -@NullMarked public class SuggestionInfo { private final int mMarkerTag; private final int mSuggestionIndex;
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/SuggestionsPopupWindow.java b/content/public/android/java/src/org/chromium/content/browser/input/SuggestionsPopupWindow.java index 9490291..7239988 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/SuggestionsPopupWindow.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/SuggestionsPopupWindow.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.input; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,15 +24,11 @@ import android.widget.TextView; import org.chromium.base.ApiCompatibilityUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; -import org.chromium.build.annotations.RequiresNonNull; import org.chromium.content.R; import org.chromium.ui.UiUtils; import org.chromium.ui.base.WindowAndroid; /** Popup window that displays a menu for viewing and applying text replacement suggestions. */ -@NullMarked public abstract class SuggestionsPopupWindow implements OnItemClickListener, OnDismissListener, View.OnClickListener { private static final String ACTION_USER_DICTIONARY_INSERT = @@ -44,14 +38,14 @@ private final Context mContext; protected final TextSuggestionHost mTextSuggestionHost; private final View mParentView; - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; - private @Nullable Activity mActivity; - private @Nullable DisplayMetrics mDisplayMetrics; + private Activity mActivity; + private DisplayMetrics mDisplayMetrics; private PopupWindow mPopupWindow; private LinearLayout mContentView; - private @Nullable String mHighlightedText; + private String mHighlightedText; private int mNumberOfSuggestionsToUse; private TextView mAddToDictionaryButton; private TextView mDeleteButton; @@ -71,7 +65,7 @@ public SuggestionsPopupWindow( Context context, TextSuggestionHost textSuggestionHost, - @Nullable WindowAndroid windowAndroid, + WindowAndroid windowAndroid, View parentView) { mContext = context; mTextSuggestionHost = textSuggestionHost; @@ -177,7 +171,7 @@ } /** Used by TextSuggestionHost to update {@link WindowAndroid} to the current one. */ - public void updateWindowAndroid(@Nullable WindowAndroid windowAndroid) { + public void updateWindowAndroid(WindowAndroid windowAndroid) { mWindowAndroid = windowAndroid; } @@ -224,7 +218,6 @@ } } - @RequiresNonNull("mDisplayMetrics") private void measureContent() { // Make the menu wide enough to fit its widest item. int width = @@ -258,7 +251,6 @@ mNumberOfSuggestionsToUse = getSuggestionsCount(); mHighlightedText = highlightedText; - assumeNonNull(mWindowAndroid); mActivity = mWindowAndroid.getActivity().get(); // Note: the Activity can be null here if we're in a WebView that was created without // using an Activity. So all code in this class should handle this case.
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/TextInputState.java b/content/public/android/java/src/org/chromium/content/browser/input/TextInputState.java index ce0dfe8..e6e739a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/TextInputState.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/TextInputState.java
@@ -11,16 +11,12 @@ import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.Locale; /** * An immutable class to contain text, selection range, composition range, and whether * it's single line or multiple lines that are being edited. */ -@NullMarked public class TextInputState { private final CharSequence mText; private final Range mSelection; @@ -87,7 +83,7 @@ return mReplyToRequest; } - public @Nullable CharSequence getSelectedText() { + public CharSequence getSelectedText() { if (mSelection.start() == mSelection.end()) return null; return TextUtils.substring(mText, mSelection.start(), mSelection.end()); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionHost.java b/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionHost.java index df6a8cc..e73dd76 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionHost.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionHost.java
@@ -13,8 +13,6 @@ import org.jni_zero.NativeMethods; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.PopupController; import org.chromium.content.browser.PopupController.HideablePopup; import org.chromium.content.browser.WindowEventObserver; @@ -31,7 +29,6 @@ * the commands in that menu (by calling back to the C++ class). */ @JNINamespace("content") -@NullMarked public class TextSuggestionHost implements WindowEventObserver, HideablePopup, UserData { private long mNativeTextSuggestionHost; private final WebContentsImpl mWebContents; @@ -39,10 +36,10 @@ private final ViewAndroidDelegate mViewDelegate; private boolean mIsAttachedToWindow; - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; - private @Nullable SpellCheckPopupWindow mSpellCheckPopupWindow; - private @Nullable TextSuggestionsPopupWindow mTextSuggestionsPopupWindow; + private SpellCheckPopupWindow mSpellCheckPopupWindow; + private TextSuggestionsPopupWindow mTextSuggestionsPopupWindow; private static final class UserDataFactoryLazyHolder { private static final UserDataFactory<TextSuggestionHost> INSTANCE = TextSuggestionHost::new; @@ -56,12 +53,8 @@ */ @VisibleForTesting static TextSuggestionHost fromWebContents(WebContents webContents) { - TextSuggestionHost ret = - ((WebContentsImpl) webContents) - .getOrSetUserData( - TextSuggestionHost.class, UserDataFactoryLazyHolder.INSTANCE); - assert ret != null; - return ret; + return ((WebContentsImpl) webContents) + .getOrSetUserData(TextSuggestionHost.class, UserDataFactoryLazyHolder.INSTANCE); } @CalledByNative @@ -77,14 +70,10 @@ */ public TextSuggestionHost(WebContents webContents) { mWebContents = (WebContentsImpl) webContents; - Context context = mWebContents.getContext(); - assert context != null; - mContext = context; + mContext = mWebContents.getContext(); mWindowAndroid = mWebContents.getTopLevelNativeWindow(); - - ViewAndroidDelegate viewDelegate = mWebContents.getViewAndroidDelegate(); - assert viewDelegate != null; - mViewDelegate = viewDelegate; + mViewDelegate = mWebContents.getViewAndroidDelegate(); + assert mViewDelegate != null; PopupController.register(mWebContents, this); WindowEventObserverManager.from(mWebContents).addObserver(this); } @@ -100,7 +89,7 @@ // WindowEventObserver @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { mWindowAndroid = newWindowAndroid; if (mSpellCheckPopupWindow != null) { mSpellCheckPopupWindow.updateWindowAndroid(mWindowAndroid); @@ -210,7 +199,7 @@ } /** Tells Blink to remove spelling markers under all instances of the specified word. */ - public void onNewWordAddedToDictionary(@Nullable String word) { + public void onNewWordAddedToDictionary(String word) { TextSuggestionHostJni.get() .onNewWordAddedToDictionary( mNativeTextSuggestionHost, TextSuggestionHost.this, word); @@ -238,14 +227,14 @@ /** * @return The TextSuggestionsPopupWindow, if one exists. */ - public @Nullable SuggestionsPopupWindow getTextSuggestionsPopupWindowForTesting() { + public SuggestionsPopupWindow getTextSuggestionsPopupWindowForTesting() { return mTextSuggestionsPopupWindow; } /** * @return The SpellCheckPopupWindow, if one exists. */ - public @Nullable SuggestionsPopupWindow getSpellCheckPopupWindowForTesting() { + public SuggestionsPopupWindow getSpellCheckPopupWindowForTesting() { return mSpellCheckPopupWindow; } @@ -264,9 +253,7 @@ long nativeTextSuggestionHostAndroid, TextSuggestionHost caller); void onNewWordAddedToDictionary( - long nativeTextSuggestionHostAndroid, - TextSuggestionHost caller, - @Nullable String word); + long nativeTextSuggestionHostAndroid, TextSuggestionHost caller, String word); void onSuggestionMenuClosed( long nativeTextSuggestionHostAndroid, TextSuggestionHost caller);
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionsPopupWindow.java b/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionsPopupWindow.java index 95735fc6..13d3c42 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionsPopupWindow.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/TextSuggestionsPopupWindow.java
@@ -10,8 +10,6 @@ import android.text.style.TextAppearanceSpan; import android.view.View; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.ui.base.WindowAndroid; @@ -19,11 +17,8 @@ * A subclass of SuggestionsPopupWindow to be used for showing suggestions from one or more * SuggestionSpans. */ -@NullMarked public class TextSuggestionsPopupWindow extends SuggestionsPopupWindow { - @SuppressWarnings("NullAway.Init") private SuggestionInfo[] mSuggestionInfos; - private TextAppearanceSpan mPrefixSpan; private TextAppearanceSpan mSuffixSpan; @@ -36,7 +31,7 @@ public TextSuggestionsPopupWindow( Context context, TextSuggestionHost textSuggestionHost, - @Nullable WindowAndroid windowAndroid, + WindowAndroid windowAndroid, View parentView) { super(context, textSuggestionHost, windowAndroid, parentView);
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnection.java b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnection.java index 1a40b5b..801ef82 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnection.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnection.java
@@ -4,7 +4,6 @@ package org.chromium.content.browser.input; -import static org.chromium.build.NullUtil.assumeNonNull; import static org.chromium.content.browser.input.StylusGestureConverter.createGestureData; import android.annotation.SuppressLint; @@ -25,6 +24,8 @@ import android.view.inputmethod.InputConnection; import android.view.inputmethod.SurroundingText; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; @@ -34,8 +35,6 @@ import org.chromium.base.task.TaskTraits; import org.chromium.blink.mojom.StylusWritingGestureData; import org.chromium.blink_public.common.BlinkFeatures; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.ContentFeatureMap; import java.util.concurrent.BlockingQueue; @@ -54,7 +53,6 @@ * so 'extends' here should have no functional effect at all. See crbug.com/616334 for more * details. */ -@NullMarked class ThreadedInputConnection extends BaseInputConnection implements ChromiumBaseInputConnection { private static final String TAG = "Ime"; private static final boolean DEBUG_LOGS = false; @@ -102,7 +100,7 @@ // a bunch of new objects for each key stroke. private final BlockingQueue<TextInputState> mQueue = new LinkedBlockingQueue<>(); private int mPendingAccent; - private @Nullable TextInputState mCachedTextInputState; + private TextInputState mCachedTextInputState; private int mCurrentExtractedTextRequestToken; private boolean mShouldUpdateExtractedText; @@ -214,7 +212,7 @@ } } - private void updateSelection(@Nullable TextInputState textInputState) { + private void updateSelection(TextInputState textInputState) { if (textInputState == null) return; assertOnImeThread(); if (mNumNestedBatchEdits != 0) return; @@ -243,7 +241,7 @@ }); } - private @Nullable TextInputState requestAndWaitForTextInputState() { + private TextInputState requestAndWaitForTextInputState() { if (DEBUG_LOGS) Log.i(TAG, "requestAndWaitForTextInputState"); if (runningOnUiThread()) { Log.w(TAG, "InputConnection API is not called on IME thread. Returning cached result."); @@ -285,7 +283,7 @@ * Block until we get the expected state update. * @return TextInputState if we get it successfully. null otherwise. */ - private @Nullable TextInputState blockAndGetStateUpdate() { + private TextInputState blockAndGetStateUpdate() { if (DEBUG_LOGS) Log.i(TAG, "blockAndGetStateUpdate"); assertOnImeThread(); boolean shouldUpdateSelection = false; @@ -428,7 +426,7 @@ * @see InputConnection#getExtractedText(android.view.inputmethod.ExtractedTextRequest, int) */ @Override - public @Nullable ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { + public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) { if (DEBUG_LOGS) Log.i(TAG, "getExtractedText"); assertOnImeThread(); mShouldUpdateExtractedText = (flags & GET_EXTRACTED_TEXT_MONITOR) > 0; @@ -439,8 +437,7 @@ return convertToExtractedText(textInputState); } - private @Nullable ExtractedText convertToExtractedText( - @Nullable TextInputState textInputState) { + private ExtractedText convertToExtractedText(TextInputState textInputState) { if (textInputState == null) return null; ExtractedText extractedText = new ExtractedText(); extractedText.text = textInputState.text(); @@ -661,8 +658,7 @@ @RequiresApi(Build.VERSION_CODES.S) @SuppressLint("Override") @Override - public @Nullable SurroundingText getSurroundingText( - int beforeLength, int afterLength, int flags) { + public SurroundingText getSurroundingText(int beforeLength, int afterLength, int flags) { if (DEBUG_LOGS) { Log.i(TAG, "getSurroundingText [%d %d %x]", beforeLength, afterLength, flags); } @@ -675,7 +671,7 @@ * @see InputConnection#getTextBeforeCursor(int, int) */ @Override - public @Nullable CharSequence getTextBeforeCursor(int maxChars, int flags) { + public CharSequence getTextBeforeCursor(int maxChars, int flags) { if (DEBUG_LOGS) Log.i(TAG, "getTextBeforeCursor [%d %x]", maxChars, flags); TextInputState textInputState = requestAndWaitForTextInputState(); if (textInputState == null) return null; @@ -686,7 +682,7 @@ * @see InputConnection#getTextAfterCursor(int, int) */ @Override - public @Nullable CharSequence getTextAfterCursor(int maxChars, int flags) { + public CharSequence getTextAfterCursor(int maxChars, int flags) { if (DEBUG_LOGS) Log.i(TAG, "getTextAfterCursor [%d %x]", maxChars, flags); TextInputState textInputState = requestAndWaitForTextInputState(); if (textInputState == null) return null; @@ -697,7 +693,7 @@ * @see InputConnection#getSelectedText(int) */ @Override - public @Nullable CharSequence getSelectedText(int flags) { + public CharSequence getSelectedText(int flags) { if (DEBUG_LOGS) Log.i(TAG, "getSelectedText [%x]", flags); TextInputState textInputState = requestAndWaitForTextInputState(); if (textInputState == null) return null; @@ -801,11 +797,9 @@ @Override @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) public void performHandwritingGesture( - HandwritingGesture gesture, + @NonNull HandwritingGesture gesture, @Nullable Executor executor, @Nullable IntConsumer consumer) { - assumeNonNull(executor); - assumeNonNull(consumer); if (!ContentFeatureMap.isEnabled(BlinkFeatures.STYLUS_RICH_GESTURES)) { return; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java index 40ddadd..e3a05f7 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionFactory.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.input; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.os.Handler; import android.os.HandlerThread; import android.view.View; @@ -15,15 +13,12 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.InputMethodManagerWrapper; /** * A factory class for {@link ThreadedInputConnection}. The class also includes triggering * mechanism (hack) to run our InputConnection on non-UI thread. */ -@NullMarked public class ThreadedInputConnectionFactory implements ChromiumBaseInputConnection.Factory { private static final String TAG = "Ime"; private static final boolean DEBUG_LOGS = false; @@ -37,9 +32,9 @@ private static final int CHECK_REGISTER_RETRY = 1; private final InputMethodManagerWrapper mInputMethodManagerWrapper; - private @Nullable ThreadedInputConnectionProxyView mProxyView; - private @Nullable ThreadedInputConnection mThreadedInputConnection; - private @Nullable CheckInvalidator mCheckInvalidator; + private ThreadedInputConnectionProxyView mProxyView; + private ThreadedInputConnection mThreadedInputConnection; + private CheckInvalidator mCheckInvalidator; private boolean mReentrantTriggering; private boolean mTriggerDelayedOnCreateInputConnection; @@ -121,7 +116,7 @@ } @Override - public @Nullable ThreadedInputConnection initializeAndGet( + public ThreadedInputConnection initializeAndGet( View view, ImeAdapterImpl imeAdapter, int inputType, @@ -197,7 +192,6 @@ new Runnable() { @Override public void run() { - assumeNonNull(mProxyView); // This is a hack to make InputMethodManager believe that the proxy view // now has a focus. As a result, InputMethodManager will think that // mProxyView is focused, and will call getHandler() of the view when @@ -223,7 +217,7 @@ public void run() { postCheckRegisterResultOnUiThread( view, - assumeNonNull(mCheckInvalidator), + mCheckInvalidator, CHECK_REGISTER_RETRY); } }); @@ -250,13 +244,13 @@ postDelayed(view, r, 1000); mFocusState = FocusState.NOT_APPLICABLE; } else { - assumeNonNull(view.getHandler()).post(r); + view.getHandler().post(r); } } @VisibleForTesting protected void postDelayed(View view, Runnable r, long delayMs) { - assumeNonNull(view.getHandler()).postDelayed(r, delayMs); + view.getHandler().postDelayed(r, delayMs); } // Note that this function is called both from IME thread and UI thread.
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java index 2f7cfd8e..0113e75f 100644 --- a/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java +++ b/content/public/android/java/src/org/chromium/content/browser/input/ThreadedInputConnectionProxyView.java
@@ -14,14 +14,11 @@ import org.chromium.base.Log; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** This is a fake View that is only exposed to InputMethodManager. */ -@NullMarked public class ThreadedInputConnectionProxyView extends View { private static final String TAG = "ImeProxyView"; private static final boolean DEBUG_LOGS = false; @@ -113,7 +110,7 @@ } @Override - public @Nullable View getRootView() { + public View getRootView() { // Returning a null here matches mCurRootView being null value in InputMethodManager, // which represents that the current focused window is not IME target window. // In this case, you are still able to type. @@ -137,7 +134,7 @@ } @Override - public @Nullable IBinder getWindowToken() { + public IBinder getWindowToken() { if (DEBUG_LOGS) Log.w(TAG, "getWindowToken"); return mWindowToken.get(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/DateDialogNormalizer.java b/content/public/android/java/src/org/chromium/content/browser/picker/DateDialogNormalizer.java index d13a9b8..b021716 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/DateDialogNormalizer.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/DateDialogNormalizer.java
@@ -7,15 +7,12 @@ import android.widget.DatePicker; import android.widget.DatePicker.OnDateChangedListener; -import org.chromium.build.annotations.NullMarked; - import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; /** Sets the current, min, and max values on the given DatePicker. */ -@NullMarked public class DateDialogNormalizer { /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/DatePickerDialogCompat.java b/content/public/android/java/src/org/chromium/content/browser/picker/DatePickerDialogCompat.java index f7835091..3a2b52bd 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/DatePickerDialogCompat.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/DatePickerDialogCompat.java
@@ -9,15 +9,12 @@ import android.content.DialogInterface; import android.widget.DatePicker; -import org.chromium.build.annotations.NullMarked; - /** * The behavior of the DatePickerDialog changed after JellyBean so it now calls * OndateSetListener.onDateSet() even when the dialog is dismissed (e.g. back button, tap * outside). This class will call the listener instead of the DatePickerDialog only when the * BUTTON_POSITIVE has been clicked. */ -@NullMarked class DatePickerDialogCompat extends DatePickerDialog { private final OnDateSetListener mCallBack;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimePickerDialog.java index 1868fa0..16a718d7 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimePickerDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimePickerDialog.java
@@ -17,7 +17,6 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; import java.util.Calendar; @@ -28,7 +27,6 @@ * A dialog that allows the user to choose a date and time. Shown for HTML form input elements * with type "datetime" or "datetime-local". */ -@NullMarked public class DateTimePickerDialog extends AlertDialog implements OnClickListener, OnDateChangedListener, OnTimeChangedListener { private final DatePicker mDatePicker;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestion.java b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestion.java index 6a5a5e0..3d54fbc1 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestion.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestion.java
@@ -6,13 +6,10 @@ import android.text.TextUtils; -import org.chromium.build.annotations.NullMarked; - /** * Date/time suggestion container used to store information for each suggestion that will be shown * in the suggestion list dialog. Keep in sync with date_time_suggestion.h. */ -@NullMarked public class DateTimeSuggestion { private final double mValue; private final String mLocalizedValue;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestionListAdapter.java b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestionListAdapter.java index da9fb423..c017108 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestionListAdapter.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/DateTimeSuggestionListAdapter.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.picker; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.view.LayoutInflater; import android.view.View; @@ -13,14 +11,11 @@ import android.widget.ArrayAdapter; import android.widget.TextView; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import java.util.List; /** Date/time suggestion adapter for the suggestion dialog. */ -@NullMarked class DateTimeSuggestionListAdapter extends ArrayAdapter<DateTimeSuggestion> { private final Context mContext; @@ -30,11 +25,9 @@ } @Override - public View getView(int position, @Nullable View convertView, ViewGroup parent) { - View layout; - if (convertView != null) { - layout = convertView; - } else { + public View getView(int position, View convertView, ViewGroup parent) { + View layout = convertView; + if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(mContext); layout = inflater.inflate(R.layout.date_time_suggestion, parent, false); } @@ -45,9 +38,8 @@ labelView.setText(mContext.getText(R.string.date_picker_dialog_other_button_label)); sublabelView.setText(""); } else { - DateTimeSuggestion item = assumeNonNull(getItem(position)); - labelView.setText(item.localizedValue()); - sublabelView.setText(item.label()); + labelView.setText(getItem(position).localizedValue()); + sublabelView.setText(getItem(position).label()); } return layout;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/InputDialogContainer.java b/content/public/android/java/src/org/chromium/content/browser/picker/InputDialogContainer.java index 4463be1e..01df480 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/InputDialogContainer.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/InputDialogContainer.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.picker; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.app.AlertDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.app.TimePickerDialog; @@ -21,9 +19,6 @@ import android.widget.TimePicker; import org.chromium.base.Log; -import org.chromium.build.annotations.EnsuresNonNullIf; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.content.browser.picker.DateTimePickerDialog.OnDateTimeSetListener; import org.chromium.content.browser.picker.MultiFieldTimePickerDialog.OnMultiFieldTimeSetListener; @@ -38,7 +33,6 @@ import java.util.concurrent.TimeUnit; /** Opens the appropriate date/time picker dialog for the given dialog type. */ -@NullMarked public class InputDialogContainer { private static final String TAG = "InputDialogContainer"; @@ -54,7 +48,7 @@ // Prevents sending two notifications (from onClick and from onDismiss) private boolean mDialogAlreadyDismissed; - private @Nullable AlertDialog mDialog; + private AlertDialog mDialog; private final InputActionDelegate mInputActionDelegate; public static boolean isDialogInputType(int type) { @@ -186,8 +180,7 @@ dismissDialog(); showPickerDialog(dialogType, dialogValue, min, max, step); } else { - double suggestionValue = - assumeNonNull(adapter.getItem(position)).value(); + double suggestionValue = adapter.getItem(position).value(); mInputActionDelegate.replaceDateTime(suggestionValue); dismissDialog(); mDialogAlreadyDismissed = true; @@ -269,27 +262,20 @@ int stepTime = (int) step; - AlertDialog dialog; if (dialogType == TextInputType.DATE) { - DatePickerDialogCompat dateDialog = + DatePickerDialogCompat dialog = new DatePickerDialogCompat( mContext, new DateListener(dialogType), year, month, monthDay); DateDialogNormalizer.normalize( - dateDialog.getDatePicker(), - dateDialog, - year, - month, - monthDay, - (long) min, - (long) max); + dialog.getDatePicker(), dialog, year, month, monthDay, (long) min, (long) max); - dateDialog.setTitle(mContext.getText(R.string.date_picker_dialog_title)); - dialog = dateDialog; + dialog.setTitle(mContext.getText(R.string.date_picker_dialog_title)); + mDialog = dialog; } else if (dialogType == TextInputType.TIME) { // If user doesn't need to set seconds and milliseconds, show the default clock style // time picker dialog. Otherwise, show a full spinner style time picker. if (stepTime < 0 || stepTime >= 60000 /* milliseconds in a minute */) { - dialog = + mDialog = new TimePickerDialog( mContext, new TimeListener(dialogType), @@ -297,7 +283,7 @@ minute, DateFormat.is24HourFormat(mContext)); } else { - dialog = + mDialog = new MultiFieldTimePickerDialog( mContext, /* theme= */ 0, @@ -313,7 +299,7 @@ } } else if (dialogType == TextInputType.DATE_TIME || dialogType == TextInputType.DATE_TIME_LOCAL) { - dialog = + mDialog = new DateTimePickerDialog( mContext, new DateTimeListener(dialogType), @@ -326,28 +312,26 @@ min, max); } else if (dialogType == TextInputType.MONTH) { - dialog = + mDialog = new MonthPickerDialog( mContext, new MonthOrWeekListener(dialogType), year, month, min, max); } else if (dialogType == TextInputType.WEEK) { - dialog = + mDialog = new WeekPickerDialog( mContext, new MonthOrWeekListener(dialogType), year, week, min, max); - } else { - assert false : "type was " + dialogType; - dialog = assumeNonNull(null); } - dialog.setButton( + + mDialog.setButton( DialogInterface.BUTTON_POSITIVE, mContext.getText(R.string.date_picker_dialog_set), - (DialogInterface.OnClickListener) dialog); + (DialogInterface.OnClickListener) mDialog); - dialog.setButton( + mDialog.setButton( DialogInterface.BUTTON_NEGATIVE, mContext.getText(android.R.string.cancel), (DialogInterface.OnClickListener) null); - dialog.setButton( + mDialog.setButton( DialogInterface.BUTTON_NEUTRAL, mContext.getText(R.string.date_picker_dialog_clear), new DialogInterface.OnClickListener() { @@ -358,7 +342,7 @@ } }); - dialog.setOnDismissListener( + mDialog.setOnDismissListener( new OnDismissListener() { @Override public void onDismiss(final DialogInterface dialog) { @@ -369,12 +353,10 @@ } }); - mDialog = dialog; mDialogAlreadyDismissed = false; - dialog.show(); + mDialog.show(); } - @EnsuresNonNullIf("mDialog") private boolean isDialogShowing() { return mDialog != null && mDialog.isShowing(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/MonthPicker.java b/content/public/android/java/src/org/chromium/content/browser/picker/MonthPicker.java index cb7fbfc..d075b6e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/MonthPicker.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/MonthPicker.java
@@ -7,7 +7,6 @@ import android.annotation.SuppressLint; import android.content.Context; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; import java.text.DateFormatSymbols; @@ -19,7 +18,6 @@ /** A month picker. */ // TODO(crbug.com/40479664): Fix this properly. @SuppressLint("DefaultLocale") -@NullMarked public class MonthPicker extends TwoFieldDatePicker { private static final int MONTHS_NUMBER = 12;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/MonthPickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/picker/MonthPickerDialog.java index 82790ac..7184cd2 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/MonthPickerDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/MonthPickerDialog.java
@@ -6,11 +6,9 @@ import android.content.Context; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; /** A month picker dialog */ -@NullMarked public class MonthPickerDialog extends TwoFieldDatePickerDialog { /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/MultiFieldTimePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/picker/MultiFieldTimePickerDialog.java index afbf296..e824541 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/MultiFieldTimePickerDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/MultiFieldTimePickerDialog.java
@@ -12,7 +12,6 @@ import android.view.View; import android.widget.NumberPicker; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; import java.util.ArrayList; @@ -27,7 +26,6 @@ * The milli picker is not displayed if step >= SECOND_IN_MILLIS * The second picker is not displayed if step >= MINUTE_IN_MILLIS. */ -@NullMarked public class MultiFieldTimePickerDialog extends AlertDialog implements OnClickListener { private final NumberPicker mHourSpinner;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePicker.java b/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePicker.java index fb3c8f0..ced7910 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePicker.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePicker.java
@@ -15,8 +15,6 @@ import android.widget.NumberPicker; import android.widget.NumberPicker.OnValueChangeListener; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import java.util.Calendar; @@ -24,14 +22,13 @@ import java.util.TimeZone; /** This class is heavily based on android.widget.DatePicker. */ -@NullMarked public abstract class TwoFieldDatePicker extends FrameLayout { private final NumberPicker mPositionInYearSpinner; private final NumberPicker mYearSpinner; - private @Nullable OnMonthOrWeekChangedListener mMonthOrWeekChangedListener; + private OnMonthOrWeekChangedListener mMonthOrWeekChangedListener; // It'd be nice to use android.text.Time like in other Dialogs but // it suffers from the 2038 effect so it would prevent us from @@ -180,7 +177,7 @@ public void init( int year, int positionInYear, - @Nullable OnMonthOrWeekChangedListener onMonthOrWeekChangedListener) { + OnMonthOrWeekChangedListener onMonthOrWeekChangedListener) { setCurrentDate(year, positionInYear); updateSpinners(); mMonthOrWeekChangedListener = onMonthOrWeekChangedListener;
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePickerDialog.java index 17014b0..25509366e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePickerDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/TwoFieldDatePickerDialog.java
@@ -9,12 +9,10 @@ import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; import org.chromium.content.browser.picker.TwoFieldDatePicker.OnMonthOrWeekChangedListener; /** A two-field data picker dialog. */ -@NullMarked public abstract class TwoFieldDatePickerDialog extends AlertDialog implements OnClickListener, OnMonthOrWeekChangedListener { @@ -76,8 +74,9 @@ mPicker.init(year, positionInYear, this); } - protected abstract TwoFieldDatePicker createPicker( - Context context, double minValue, double maxValue); + protected TwoFieldDatePicker createPicker(Context context, double minValue, double maxValue) { + return null; + } @Override public void onClick(DialogInterface dialog, int which) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/WeekPicker.java b/content/public/android/java/src/org/chromium/content/browser/picker/WeekPicker.java index 53b3ddf3..8677fe5 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/WeekPicker.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/WeekPicker.java
@@ -6,14 +6,12 @@ import android.content.Context; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; import java.util.Calendar; import java.util.TimeZone; /** This class is heavily based on android.widget.DatePicker. */ -@NullMarked public class WeekPicker extends TwoFieldDatePicker { public WeekPicker(Context context, double minValue, double maxValue) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/picker/WeekPickerDialog.java b/content/public/android/java/src/org/chromium/content/browser/picker/WeekPickerDialog.java index bc86e485..fe1695e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/picker/WeekPickerDialog.java +++ b/content/public/android/java/src/org/chromium/content/browser/picker/WeekPickerDialog.java
@@ -6,11 +6,9 @@ import android.content.Context; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.R; /** A week picker dialog. */ -@NullMarked public class WeekPickerDialog extends TwoFieldDatePickerDialog { /**
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/LGEmailActionModeWorkaroundImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/LGEmailActionModeWorkaroundImpl.java index 7aed64eb..cd4c8ac 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/LGEmailActionModeWorkaroundImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/LGEmailActionModeWorkaroundImpl.java
@@ -21,7 +21,6 @@ import org.chromium.base.PackageUtils; import org.chromium.base.task.PostTask; import org.chromium.base.task.TaskTraits; -import org.chromium.build.annotations.NullMarked; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -34,7 +33,6 @@ * a system update. However, LG Email team is committed to fixing this in the near future. * This is a version code limited workaround to avoid crashes in the app. */ -@NullMarked public final class LGEmailActionModeWorkaroundImpl { private static final String TAG = "Ime";
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierAnimator.java b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierAnimator.java index 75d765e..3bf033d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierAnimator.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierAnimator.java
@@ -8,13 +8,11 @@ import android.view.animation.LinearInterpolator; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; /** * MagnifierAnimator adds animation to MagnifierWrapper when there is a change in y direction. * MagnifierWrapper class isolated P APIs out so we could write test for MagnifierAnimator. */ -@NullMarked public class MagnifierAnimator { private static final boolean DEBUG = false; private static final String TAG = "Magnifier";
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierSurfaceControl.java b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierSurfaceControl.java index 36e186e..c54d39e39 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierSurfaceControl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierSurfaceControl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.graphics.Rect; import android.os.Build; import android.view.AttachedSurfaceControl; @@ -18,8 +16,6 @@ import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; /** @@ -29,7 +25,6 @@ */ @RequiresApi(Build.VERSION_CODES.TIRAMISU) @JNINamespace("content") -@NullMarked public class MagnifierSurfaceControl implements MagnifierWrapper { // Shadows are implemented as linear gradients with the same rounded corner as the main // content. Values are in device independent pixels, and converted to pixels at run time. @@ -44,12 +39,12 @@ private final WebContentsImpl mWebContents; private final SelectionPopupControllerImpl.ReadbackViewCallback mViewCallback; - private @Nullable View mView; + private View mView; private int mWidthPx; private int mHeightPx; private int mVerticalOffsetPx; - private @Nullable SurfaceControl mSurfaceControl; - private SurfaceControl.@Nullable Transaction mTransaction; + private SurfaceControl mSurfaceControl; + private SurfaceControl.Transaction mTransaction; public MagnifierSurfaceControl( WebContentsImpl webContents, @@ -61,15 +56,13 @@ @Override public void show(float x, float y) { Rect localVisibleRect = new Rect(); - View view = assumeNonNull(getView()); - if (!view.getLocalVisibleRect(localVisibleRect)) { + if (!getView().getLocalVisibleRect(localVisibleRect)) { dismiss(); return; } createNativeIfNeeded(); if (mSurfaceControl != null) { - assumeNonNull(mTransaction); x = x - mWidthPx / 2f; y = y - mHeightPx / 2f; float readback_y = y; @@ -88,7 +81,7 @@ .setReadbackOrigin(mNativeMagnifierSurfaceControl, x, readback_y); int[] viewOriginInSurface = new int[2]; - view.getLocationInSurface(viewOriginInSurface); + getView().getLocationInSurface(viewOriginInSurface); mTransaction.setPosition( mSurfaceControl, x + viewOriginInSurface[0], y + viewOriginInSurface[1]); mTransaction.apply(); @@ -113,9 +106,8 @@ private void createNativeIfNeeded() { if (mNativeMagnifierSurfaceControl != 0) return; - View view = getView(); - if (view == null) return; - AttachedSurfaceControl attachedSurfaceControl = view.getRootSurfaceControl(); + if (getView() == null) return; + AttachedSurfaceControl attachedSurfaceControl = getView().getRootSurfaceControl(); if (attachedSurfaceControl == null) return; SurfaceControl surfaceControl = @@ -131,7 +123,7 @@ float cornerRadius; float zoom; { - Magnifier androidMagnifier = new Magnifier(view); + Magnifier androidMagnifier = new Magnifier(getView()); mWidthPx = androidMagnifier.getWidth(); mHeightPx = androidMagnifier.getHeight(); mVerticalOffsetPx = androidMagnifier.getDefaultVerticalSourceToMagnifierOffset(); @@ -140,7 +132,7 @@ androidMagnifier.dismiss(); } - float density = view.getResources().getDisplayMetrics().density; + float density = getView().getResources().getDisplayMetrics().density; mNativeMagnifierSurfaceControl = MagnifierSurfaceControlJni.get() .create( @@ -164,7 +156,6 @@ } mNativeMagnifierSurfaceControl = 0; if (mSurfaceControl != null) { - assumeNonNull(mTransaction); mTransaction.reparent(mSurfaceControl, null); mTransaction.apply(); mTransaction.close(); @@ -175,7 +166,7 @@ mView = null; } - private @Nullable View getView() { + private View getView() { if (mView == null) { mView = mViewCallback.getReadbackView(); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapper.java b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapper.java index 15ee411..8cd81fd 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapper.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapper.java
@@ -4,10 +4,7 @@ package org.chromium.content.browser.selection; -import org.chromium.build.annotations.NullMarked; - /** A wrapper interface of Magnifier class. */ -@NullMarked public interface MagnifierWrapper { /** Wrapper of {@link Magnifier#show()}. */ public void show(float x, float y);
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapperImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapperImpl.java index 1a4214b..a1cabe8 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapperImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/MagnifierWrapperImpl.java
@@ -9,17 +9,14 @@ import android.widget.Magnifier; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; /** Implements MagnifierWrapper interface. */ @SuppressLint("NewApi") // Magnifier requires API level 28. -@NullMarked public class MagnifierWrapperImpl implements MagnifierWrapper { private static final boolean DEBUG = false; private static final String TAG = "Magnifier"; - private @Nullable Magnifier mMagnifier; + private Magnifier mMagnifier; private SelectionPopupControllerImpl.ReadbackViewCallback mCallback; /** Constructor. */
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java index a58b6ae..2f607fd 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectActionMenuHelper.java
@@ -21,6 +21,7 @@ import androidx.annotation.IdRes; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.core.content.ContextCompat; @@ -29,8 +30,6 @@ import org.chromium.base.Log; import org.chromium.base.PackageManagerUtils; import org.chromium.base.StrictModeContext; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.content_public.browser.SelectionClient; import org.chromium.content_public.browser.SelectionClient.Result; @@ -50,7 +49,6 @@ * This was created (as opposed to using a menu.xml) because we have multiple ways of rendering the * menu that cannot necessarily leverage the {@link android.view.Menu} & {@link MenuItem} APIs. */ -@NullMarked public class SelectActionMenuHelper { private static final String TAG = "SelectActionMenu"; // 20 char limit. @@ -147,7 +145,7 @@ public static SortedSet<SelectionMenuGroup> getMenuItems( SelectActionMenuDelegate delegate, Context context, - SelectionClient.@Nullable Result classificationResult, + @Nullable SelectionClient.Result classificationResult, boolean isSelectionPassword, boolean isSelectionReadOnly, String selectedText, @@ -184,10 +182,11 @@ return itemGroups; } - private static @Nullable SelectionMenuGroup getPrimaryAssistItems( + @Nullable + private static SelectionMenuGroup getPrimaryAssistItems( Context context, String selectedText, - SelectionClient.@Nullable Result classificationResult) { + @Nullable SelectionClient.Result classificationResult) { if (selectedText.isEmpty()) { return null; } @@ -242,7 +241,8 @@ return defaultGroup; } - private static @Nullable SelectionMenuGroup getSecondaryAssistItems( + @Nullable + private static SelectionMenuGroup getSecondaryAssistItems( @Nullable SelectionActionMenuDelegate selectionActionMenuDelegate, @Nullable Result classificationResult, String selectedText) { @@ -356,7 +356,7 @@ private static void addAdditionalTextProcessingItems( SelectionMenuGroup textProcessingItems, - @Nullable SelectionActionMenuDelegate selectionActionMenuDelegate) { + SelectionActionMenuDelegate selectionActionMenuDelegate) { if (selectionActionMenuDelegate != null) { textProcessingItems.addItems( selectionActionMenuDelegate.getAdditionalTextProcessingItems()); @@ -374,7 +374,8 @@ return new Intent().setAction(Intent.ACTION_PROCESS_TEXT).setType("text/plain"); } - private static @Nullable Drawable getPrimaryActionIconForClassificationResult( + @Nullable + private static Drawable getPrimaryActionIconForClassificationResult( SelectionClient.Result classificationResult) { final List<Drawable> additionalIcons = classificationResult.additionalIcons; Drawable icon; @@ -387,7 +388,8 @@ return icon; } - private static View.@Nullable OnClickListener getActionClickListener(RemoteAction action) { + @Nullable + private static View.OnClickListener getActionClickListener(RemoteAction action) { if (TextUtils.isEmpty(action.getTitle()) || action.getActionIntent() == null) { return null; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionIndicesConverter.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionIndicesConverter.java index 62878ca..916795d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionIndicesConverter.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionIndicesConverter.java
@@ -4,14 +4,8 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; -import org.chromium.build.annotations.RequiresNonNull; - import java.text.BreakIterator; import java.util.regex.Pattern; @@ -29,16 +23,15 @@ * updateSelectionState() must be called. If updateSelectionState() or getWordDelta() returns false, * we should end the current logging session immediately since there must be a DOM change. */ -@NullMarked public class SelectionIndicesConverter { private static final Pattern PATTERN_WHITESPACE = Pattern.compile("[\\p{javaSpaceChar}\\s]+"); // Tracking the overall selection during current logging session. - private @Nullable String mGlobalSelectionText; + private String mGlobalSelectionText; private int mGlobalStartOffset; // Tracking previous selection. - private @Nullable String mLastSelectionText; + private String mLastSelectionText; private int mLastStartOffset; // The start offset from SelectionStarted call. @@ -53,7 +46,6 @@ updateGlobalSelection(selectionText, startOffset); return true; } - assumeNonNull(mLastSelectionText); boolean update = false; int endOffset = startOffset + selectionText.length(); @@ -85,7 +77,6 @@ } public boolean getWordDelta(int start, int end, int[] wordIndices) { - assumeNonNull(mGlobalSelectionText); assert wordIndices.length == 2; wordIndices[0] = wordIndices[1] = 0; @@ -134,7 +125,7 @@ } @VisibleForTesting - protected @Nullable String getGlobalSelectionText() { + protected String getGlobalSelectionText() { return mGlobalSelectionText; } @@ -179,7 +170,6 @@ @VisibleForTesting protected boolean isWhitespace(int start, int end) { - assumeNonNull(mGlobalSelectionText); return PATTERN_WHITESPACE.matcher(mGlobalSelectionText.substring(start, end)).matches(); } @@ -212,7 +202,6 @@ // Within each selection logging session, we obtain the next selection from shrink, expand or // reverse select the current selection. To update global selection, we only need to extend both // sides of the last global selection with current selection if necessary. - @RequiresNonNull("mGlobalSelectionText") private void combineGlobalSelection(String selectionText, int startOffset) { int endOffset = startOffset + selectionText.length(); int globalEndOffset = mGlobalStartOffset + mGlobalSelectionText.length();
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionMenuCachedResult.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionMenuCachedResult.java index 909b6ac..5c187027 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionMenuCachedResult.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionMenuCachedResult.java
@@ -4,8 +4,8 @@ package org.chromium.content.browser.selection; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content_public.browser.SelectionClient; import org.chromium.content_public.browser.SelectionMenuGroup; import org.chromium.content_public.browser.selection.SelectionActionMenuDelegate; @@ -25,16 +25,15 @@ * compare other params. * </ol> */ -@NullMarked public class SelectionMenuCachedResult { - private final SelectionClient.@Nullable Result mClassificationResult; + private final @Nullable SelectionClient.Result mClassificationResult; private final boolean mIsSelectionPassword; private final boolean mIsSelectionReadOnly; private final String mSelectedText; private final SortedSet<SelectionMenuGroup> mLastSelectionMenuItems; public SelectionMenuCachedResult( - SelectionClient.@Nullable Result classificationResult, + @Nullable SelectionClient.Result classificationResult, boolean isSelectionPassword, boolean isSelectionReadOnly, String selectedText, @@ -63,11 +62,11 @@ * @return true if params are equivalent otherwise false. */ public boolean canReuseResult( - SelectionClient.@Nullable Result classificationResult, + @Nullable SelectionClient.Result classificationResult, boolean isSelectionPassword, boolean isSelectionReadOnly, String selectedText, - @Nullable SelectionActionMenuDelegate selectionActionMenuDelegate) { + SelectionActionMenuDelegate selectionActionMenuDelegate) { if (selectionActionMenuDelegate != null && !selectionActionMenuDelegate.canReuseCachedSelectionMenu()) { return false;
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java index 1f75933..aba04f42 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SelectionPopupControllerImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.app.Activity; import android.app.SearchManager; import android.content.Context; @@ -29,6 +27,8 @@ import androidx.annotation.IdRes; import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; @@ -45,9 +45,6 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.ObservableSupplierImpl; -import org.chromium.build.annotations.EnsuresNonNullIf; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.R; import org.chromium.content.browser.GestureListenerManagerImpl; import org.chromium.content.browser.PopupController; @@ -91,7 +88,6 @@ /** Implementation of the interface {@link SelectionPopupController}. */ @JNINamespace("content") -@NullMarked public class SelectionPopupControllerImpl extends ActionModeCallbackHelper implements ImeEventObserver, SelectionPopupController, @@ -143,11 +139,11 @@ } private final Handler mHandler; - private @Nullable Context mContext; - private @Nullable WindowAndroid mWindowAndroid; + private Context mContext; + private WindowAndroid mWindowAndroid; private WebContentsImpl mWebContents; - private @Nullable ActionModeCallback mCallback; - private @Nullable RenderFrameHost mRenderFrameHost; + private ActionModeCallback mCallback; + private RenderFrameHost mRenderFrameHost; private long mNativeSelectionPopupController; private SelectionClient.ResultCallback mResultCallback; @@ -160,8 +156,8 @@ private Runnable mRepeatingHideRunnable; // Can be null temporarily when switching between WindowAndroid. - private @Nullable View mView; - private @Nullable ActionMode mActionMode; + @Nullable private View mView; + private ActionMode mActionMode; // Supplier of whether action bar is showing now. private final ObservableSupplierImpl<Boolean> mIsActionBarShowingSupplier = @@ -200,31 +196,31 @@ // Dropdown menu delegate that handles showing a dropdown style text selection menu. // This must be set by the embedders that want to use this functionality. - private @Nullable SelectionDropdownMenuDelegate mDropdownMenuDelegate; + @Nullable private SelectionDropdownMenuDelegate mDropdownMenuDelegate; /** * The {@link SelectionClient} that processes textual selection, or {@code null} if none * exists. */ - private @Nullable SelectionClient mSelectionClient; + private SelectionClient mSelectionClient; - private @Nullable SmartSelectionEventProcessor mSmartSelectionEventProcessor; + @Nullable private SmartSelectionEventProcessor mSmartSelectionEventProcessor; - private @Nullable PopupController mPopupController; + private PopupController mPopupController; // The classificaton result of the selected text if the selection exists and // SelectionClient was able to classify it, otherwise null. - private SelectionClient.@Nullable Result mClassificationResult; + private SelectionClient.Result mClassificationResult; private boolean mPreserveSelectionOnNextLossOfFocus; // Delegate used by embedders to customize selection menu. - private @Nullable SelectionActionMenuDelegate mSelectionActionMenuDelegate; + @Nullable private SelectionActionMenuDelegate mSelectionActionMenuDelegate; - private @Nullable MagnifierAnimator mMagnifierAnimator; + private MagnifierAnimator mMagnifierAnimator; // Cached selection menu items to check against new selections. - private @Nullable SelectionMenuCachedResult mSelectionMenuCachedResult; + @Nullable private SelectionMenuCachedResult mSelectionMenuCachedResult; /** Custom {@link android.view.View.OnClickListener} map for ActionMode menu items. */ private final Map<MenuItem, View.OnClickListener> mCustomActionMenuItemClickListeners; @@ -232,7 +228,6 @@ /** An interface for getting {@link View} for readback. */ public interface ReadbackViewCallback { /** Gets the {@link View} for readback. */ - @Nullable View getReadbackView(); } @@ -253,7 +248,7 @@ * @return {@link SelectionPopupController} object. {@code null} if not available because {@link * #create()} is not called yet. */ - public static @Nullable SelectionPopupControllerImpl fromWebContents(WebContents webContents) { + public static SelectionPopupControllerImpl fromWebContents(WebContents webContents) { return ((WebContentsImpl) webContents) .getOrSetUserData( SelectionPopupControllerImpl.class, UserDataFactoryLazyHolder.INSTANCE); @@ -265,8 +260,7 @@ * @param webContents {@link WebContents} object. * @return {@link SelectionPopupController} object. {@code null} if not available. */ - public static @Nullable SelectionPopupControllerImpl fromWebContentsNoCreate( - WebContents webContents) { + public static SelectionPopupControllerImpl fromWebContentsNoCreate(WebContents webContents) { return ((WebContentsImpl) webContents) .getOrSetUserData(SelectionPopupControllerImpl.class, null); } @@ -308,13 +302,11 @@ */ public SelectionPopupControllerImpl(WebContents webContents) { this(webContents, null, true); - mCallback = ActionModeCallbackHelper.EMPTY_CALLBACK; + setActionModeCallback(ActionModeCallbackHelper.EMPTY_CALLBACK); } private SelectionPopupControllerImpl( - WebContents webContents, - @Nullable PopupController popupController, - boolean initializeNative) { + WebContents webContents, PopupController popupController, boolean initializeNative) { mHandler = new Handler(); mWebContents = (WebContentsImpl) webContents; mPopupController = popupController; @@ -340,7 +332,7 @@ } }; - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(mWebContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(mWebContents); if (manager != null) { manager.addObserver(this); } @@ -412,12 +404,12 @@ } @Override - public @Nullable SelectionActionMenuDelegate getSelectionActionMenuDelegate() { + public SelectionActionMenuDelegate getSelectionActionMenuDelegate() { return mSelectionActionMenuDelegate; } @Override - public @Nullable RenderFrameHost getRenderFrameHost() { + public RenderFrameHost getRenderFrameHost() { return mRenderFrameHost; } @@ -426,21 +418,21 @@ return mResultCallback; } - public SelectionClient.@Nullable Result getClassificationResult() { + public SelectionClient.Result getClassificationResult() { return mClassificationResult; } @Override - public @Nullable SelectionClient getSelectionClient() { + public SelectionClient getSelectionClient() { return mSelectionClient; } - public @Nullable SelectionMenuCachedResult getSelectionMenuCachedResultForTesting() { + @Nullable + public SelectionMenuCachedResult getSelectionMenuCachedResultForTesting() { return mSelectionMenuCachedResult; } @Override - @EnsuresNonNullIf("mActionMode") public boolean isActionModeValid() { return mActionMode != null; } @@ -479,7 +471,7 @@ if (sEnableTabletUiModeForTesting) { return true; } - return DeviceFormFactor.isWindowOnTablet(assumeNonNull(mWindowAndroid)); + return DeviceFormFactor.isWindowOnTablet(mWindowAndroid); } /** @@ -633,7 +625,7 @@ ActionMode actionMode = mView.startActionMode(mCallback, ActionMode.TYPE_FLOATING); if (actionMode != null) { // This is to work around an LGE email issue. See crbug.com/651706 for more details. - LGEmailActionModeWorkaroundImpl.runIfNecessary(assumeNonNull(mContext), actionMode); + LGEmailActionModeWorkaroundImpl.runIfNecessary(mContext, actionMode); } setActionMode(actionMode); mUnselectAllOnDismiss = true; @@ -656,7 +648,6 @@ private SelectionDropdownMenuDelegate.ItemClickListener getDropdownItemClickListener( SelectionDropdownMenuDelegate delegate) { return item -> { - assumeNonNull(mCallback); final int groupId = delegate.getGroupId(item); final int id = delegate.getItemId(item); logSelectionAction(groupId, id); @@ -668,7 +659,6 @@ private MVCListAdapter.ModelList getDropdownItems() { MVCListAdapter.ModelList items = new MVCListAdapter.ModelList(); if (mDropdownMenuDelegate != null) { - assumeNonNull(mContext); SortedSet<SelectionMenuGroup> allItemGroups = getMenuItems(); int groupIndex = 0; @@ -726,7 +716,6 @@ @VisibleForTesting protected void createAndShowDropdownMenu() { - assert mContext != null; assert mView != null; assert mDropdownMenuDelegate != null; @@ -838,7 +827,7 @@ } @Override - public void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { if (newWindowAndroid == null) { reset(); return; @@ -924,14 +913,13 @@ public void onCreateActionMode(ActionMode mode, Menu menu) { mode.setTitle( mWindowAndroid != null && DeviceFormFactor.isWindowOnTablet(mWindowAndroid) - ? assumeNonNull(mContext).getString(R.string.actionbar_textselection_title) + ? mContext.getString(R.string.actionbar_textselection_title) : null); mode.setSubtitle(null); } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - assumeNonNull(mContext); SortedSet<SelectionMenuGroup> menuItems = getMenuItems(); SelectActionMenuHelper.removeAllAddedGroupsFromMenu(menu); @@ -962,7 +950,6 @@ !isFocusedNodeEditable(), getSelectedText(), mSelectionActionMenuDelegate)) { - assert mContext != null; mSelectionMenuCachedResult = new SelectionMenuCachedResult( mClassificationResult, @@ -996,7 +983,7 @@ SortedSet<SelectionMenuGroup> menuGroups, Menu menu, Map<MenuItem, View.OnClickListener> customMenuItemClickListeners, - MenuItem.@Nullable OnMenuItemClickListener additionalMenuItemClickListener) { + @Nullable MenuItem.OnMenuItemClickListener additionalMenuItemClickListener) { for (SelectionMenuGroup group : menuGroups) { addMenuItemsToActionMenu( context, @@ -1017,7 +1004,7 @@ SelectionMenuGroup group, Menu menu, Map<MenuItem, View.OnClickListener> customMenuItemClickListeners, - MenuItem.@Nullable OnMenuItemClickListener additionalMenuItemClickListener) { + @Nullable MenuItem.OnMenuItemClickListener additionalMenuItemClickListener) { // All menu items and groups are sorted already at this point, so this is just passing // 1-indexed value as order. int menuItemCount = menu.size(); @@ -1116,7 +1103,6 @@ if (!isSelectActionModeAllowed(MENU_ITEM_PROCESS_TEXT)) { return; } - assert mContext != null; SelectionMenuGroup textProcessingItems = SelectActionMenuHelper.getTextProcessingItems( @@ -1156,7 +1142,7 @@ int groupId, int id, @Nullable Intent intent, - View.@Nullable OnClickListener clickListener) { + @Nullable View.OnClickListener clickListener) { // Use the click listener for the item if it has one. if (clickListener != null) { clickListener.onClick(null); @@ -1312,7 +1298,6 @@ /** Perform a share action. */ @VisibleForTesting public void share() { - assumeNonNull(mContext); RecordUserAction.record(UMA_MOBILE_ACTION_MODE_SHARE); String query = sanitizeQuery(getSelectedText(), MAX_SHARE_QUERY_LENGTH); if (TextUtils.isEmpty(query)) return; @@ -1331,7 +1316,6 @@ /** Perform a processText action (translating the text, for example). */ private void processText(Intent intent) { - assumeNonNull(mWindowAndroid); RecordUserAction.record("MobileActionMode.ProcessTextIntent"); // Use MAX_SHARE_QUERY_LENGTH for the Intent 100k limitation. @@ -1364,7 +1348,6 @@ @VisibleForTesting @SuppressWarnings(value = "UnsafeImplicitIntentLaunch") public void search() { - assumeNonNull(mContext); RecordUserAction.record("MobileActionMode.WebSearch"); String query = sanitizeQuery(getSelectedText(), MAX_SEARCH_QUERY_LENGTH); if (TextUtils.isEmpty(query)) return; @@ -1433,7 +1416,7 @@ } @Override - public void handleTextReplacementAction(@Nullable String text) { + public void handleTextReplacementAction(String text) { if (mWebContents == null || text == null) return; // Do not handle the result if no text is selected or current selection is not editable. // There are scenarios where hasSelection returns false but selected text is present @@ -1469,7 +1452,8 @@ } @Override - public void setDropdownMenuDelegate(SelectionDropdownMenuDelegate dropdownMenuDelegate) { + public void setDropdownMenuDelegate( + @NonNull SelectionDropdownMenuDelegate dropdownMenuDelegate) { mDropdownMenuDelegate = dropdownMenuDelegate; } @@ -1584,9 +1568,7 @@ case SelectionEventType.INSERTION_HANDLE_MOVED: mSelectionRect.set(left, top, right, bottom); - if (!assumeNonNull(GestureListenerManagerImpl.fromWebContents(mWebContents)) - .isScrollInProgress() - && isPasteActionModeValid()) { + if (!getGestureListenerManager().isScrollInProgress() && isPasteActionModeValid()) { showActionModeOrClearOnFailure(); } else { destroySelectActionMode(); @@ -1681,6 +1663,11 @@ } @VisibleForTesting + /* package */ GestureListenerManagerImpl getGestureListenerManager() { + return GestureListenerManagerImpl.fromWebContents(mWebContents); + } + + @VisibleForTesting @CalledByNative /* package */ void onDragUpdate(@TouchSelectionDraggableType int type, float x, float y) { // If this is for longpress drag selector, we can only have mangifier on S and above. @@ -1710,7 +1697,6 @@ private PopupController getPopupController() { if (mPopupController == null) { mPopupController = PopupController.fromWebContents(mWebContents); - assert mPopupController != null; } return mPopupController; } @@ -1726,7 +1712,7 @@ * @return The context used for SelectionPopupController. */ @CalledByNative - private @Nullable Context getContext() { + private Context getContext() { return mContext; } @@ -1862,7 +1848,7 @@ return mLastSelectedText; } - private void setActionMode(@Nullable ActionMode actionMode) { + private void setActionMode(ActionMode actionMode) { mActionMode = actionMode; mIsActionBarShowingSupplier.set(isSelectActionBarShowing()); } @@ -1947,13 +1933,13 @@ } @Override - public @Nullable TextClassifier getTextClassifier() { + public TextClassifier getTextClassifier() { SelectionClient client = getSelectionClient(); return client == null ? null : client.getTextClassifier(); } @Override - public @Nullable TextClassifier getCustomTextClassifier() { + public TextClassifier getCustomTextClassifier() { SelectionClient client = getSelectionClient(); return client == null ? null : client.getCustomTextClassifier(); } @@ -1974,7 +1960,7 @@ * @return current touch handle rects object array. */ @VisibleForTesting - Object @Nullable [] getTouchHandleRects() { + Object[] getTouchHandleRects() { if (mNativeSelectionPopupController == 0) return null; return SelectionPopupControllerImplJni.get() .getTouchHandleRects(
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java index 01d59e4..d341af66 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.os.Build; import android.provider.Settings; @@ -13,6 +11,7 @@ import android.view.textclassifier.TextClassifier; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; @@ -20,8 +19,6 @@ import org.chromium.base.ObserverList; import org.chromium.base.UserData; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.webcontents.WebContentsImpl; import org.chromium.content_public.browser.SelectAroundCaretResult; import org.chromium.content_public.browser.SelectionClient; @@ -40,7 +37,6 @@ * SmartSelectionProvider which does the classification itself. */ @JNINamespace("content") -@NullMarked public class SmartSelectionClient implements SelectionClient, UserData { @IntDef({RequestType.CLASSIFY, RequestType.SUGGEST_AND_CLASSIFY}) @Retention(RetentionPolicy.SOURCE) @@ -59,14 +55,9 @@ private static final int NUM_EXTRA_CHARS = 240; private long mNativeSmartSelectionClient; - - @SuppressWarnings("NullAway.Init") private SmartSelectionProvider mProvider; - - @SuppressWarnings("NullAway.Init") private ResultCallback mCallback; - - private @Nullable SmartSelectionEventProcessor mSmartSelectionEventProcessor; + private SmartSelectionEventProcessor mSmartSelectionEventProcessor; /** Observer list for surrounding text received. */ private final ObserverList<SurroundingTextCallback> mSurroundingTextReceivedListeners = @@ -76,7 +67,7 @@ * Creates the SmartSelectionClient if not present. Returns null in case SmartSelectionProvider * does not exist in the system. */ - public static @Nullable SmartSelectionClient fromWebContents( + public static SmartSelectionClient fromWebContents( ResultCallback callback, WebContents webContents) { WindowAndroid windowAndroid = webContents.getTopLevelNativeWindow(); if (windowAndroid == null) return null; @@ -87,10 +78,8 @@ } SmartSelectionClient client = - assumeNonNull( - ((WebContentsImpl) webContents) - .getOrSetUserData( - SmartSelectionClient.class, SmartSelectionClient::new)); + ((WebContentsImpl) webContents) + .getOrSetUserData(SmartSelectionClient.class, SmartSelectionClient::new); client.setCallback(callback, webContents); return client; } @@ -144,7 +133,7 @@ } @Override - public @Nullable SelectionEventProcessor getSelectionEventProcessor() { + public SelectionEventProcessor getSelectionEventProcessor() { return mSmartSelectionEventProcessor; } @@ -154,12 +143,12 @@ } @Override - public @Nullable TextClassifier getTextClassifier() { + public TextClassifier getTextClassifier() { return mProvider.getTextClassifier(); } @Override - public @Nullable TextClassifier getCustomTextClassifier() { + public TextClassifier getCustomTextClassifier() { return mProvider.getCustomTextClassifier(); } @@ -214,7 +203,7 @@ } } - private static boolean isDeviceProvisioned(@Nullable Context context) { + private static boolean isDeviceProvisioned(Context context) { if (context == null || context.getContentResolver() == null) return true; // Returns false when device is not provisioned, i.e. before a new device went through // signup process.
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionEventProcessor.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionEventProcessor.java index 9c16451e..0fbbe87 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionEventProcessor.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionEventProcessor.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Context; import android.os.Build; import android.view.textclassifier.SelectionEvent; @@ -13,12 +11,10 @@ import android.view.textclassifier.TextClassificationManager; import android.view.textclassifier.TextClassifier; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; -import org.chromium.build.annotations.RequiresNonNull; import org.chromium.content.browser.WindowEventObserver; import org.chromium.content.browser.WindowEventObserverManager; import org.chromium.content_public.browser.SelectionClient; @@ -37,21 +33,19 @@ * are ignored but we count each punctuation mark as a word. */ @RequiresApi(Build.VERSION_CODES.P) -@NullMarked public class SmartSelectionEventProcessor implements SelectionEventProcessor { private static final String TAG = "SmartSelectionLogger"; private static final boolean DEBUG = false; // May be null if {@link onWindowAndroidChanged()} sets it to null. - private @Nullable WindowAndroid mWindowAndroid; + private WindowAndroid mWindowAndroid; - private @Nullable TextClassifier mSession; + private TextClassifier mSession; - private @Nullable SelectionIndicesConverter mConverter; + private SelectionIndicesConverter mConverter; - public static @Nullable SmartSelectionEventProcessor create(WebContents webContents) { - var topWindow = webContents.getTopLevelNativeWindow(); - if (topWindow == null || topWindow.getContext().get() == null) { + public static SmartSelectionEventProcessor create(WebContents webContents) { + if (webContents.getTopLevelNativeWindow().getContext().get() == null) { return null; } return new SmartSelectionEventProcessor(webContents); @@ -59,13 +53,12 @@ private SmartSelectionEventProcessor(WebContents webContents) { mWindowAndroid = webContents.getTopLevelNativeWindow(); - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(webContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(webContents); if (manager != null) { manager.addObserver( new WindowEventObserver() { @Override - public void onWindowAndroidChanged( - @Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { mWindowAndroid = newWindowAndroid; } }); @@ -88,9 +81,8 @@ } public void onSelectionModified( - String selectionText, int startOffset, SelectionClient.@Nullable Result result) { + String selectionText, int startOffset, SelectionClient.Result result) { if (mSession == null) return; - assumeNonNull(mConverter); if (!mConverter.updateSelectionState(selectionText, startOffset)) { // DOM change detected, end logging session. endTextClassificationSession(); @@ -120,14 +112,10 @@ } public void onSelectionAction( - String selectionText, - int startOffset, - int action, - SelectionClient.@Nullable Result result) { + String selectionText, int startOffset, int action, SelectionClient.Result result) { if (mSession == null) { return; } - assumeNonNull(mConverter); if (!mConverter.updateSelectionState(selectionText, startOffset)) { // DOM change detected, end logging session. endTextClassificationSession(); @@ -182,12 +170,12 @@ mSession = null; } - @RequiresNonNull("mSession") public void logEvent(SelectionEvent selectionEvent) { mSession.onSelectionEvent(selectionEvent); } - public @Nullable TextClassifier getTextClassifierSession() { + @Nullable + public TextClassifier getTextClassifierSession() { return mSession; } }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java index d399ca1f..31838fc 100644 --- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java +++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionProvider.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.selection; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.annotation.SuppressLint; import android.app.RemoteAction; import android.content.Context; @@ -19,12 +17,11 @@ import android.view.textclassifier.TextSelection; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import org.chromium.base.Log; import org.chromium.base.task.AsyncTask; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.WindowEventObserver; import org.chromium.content.browser.WindowEventObserverManager; import org.chromium.content_public.browser.SelectionClient; @@ -37,7 +34,6 @@ import java.util.List; /** Controls Smart Text selection. Talks to the Android TextClassificationManager API. */ -@NullMarked public class SmartSelectionProvider { private static final String TAG = "SmartSelProvider"; @@ -49,13 +45,13 @@ } private SelectionClient.ResultCallback mResultCallback; - private @Nullable WindowAndroid mWindowAndroid; - private @Nullable ClassificationTask mClassificationTask; - private @Nullable TextClassifier mTextClassifier; + private WindowAndroid mWindowAndroid; + private ClassificationTask mClassificationTask; + private TextClassifier mTextClassifier; private Handler mHandler; private Runnable mFailureResponseRunnable; - private final @Nullable SmartSelectionEventProcessor mSelectionEventProcessor; + @Nullable private final SmartSelectionEventProcessor mSelectionEventProcessor; public SmartSelectionProvider( SelectionClient.ResultCallback callback, @@ -63,13 +59,12 @@ @Nullable SmartSelectionEventProcessor selectionEventProcessor) { mResultCallback = callback; mWindowAndroid = webContents.getTopLevelNativeWindow(); - WindowEventObserverManager manager = WindowEventObserverManager.maybeFrom(webContents); + WindowEventObserverManager manager = WindowEventObserverManager.from(webContents); if (manager != null) { manager.addObserver( new WindowEventObserver() { @Override - public void onWindowAndroidChanged( - @Nullable WindowAndroid newWindowAndroid) { + public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) { mWindowAndroid = newWindowAndroid; } }); @@ -102,7 +97,6 @@ } public void setTextClassifier(TextClassifier textClassifier) { - assumeNonNull(mWindowAndroid); mTextClassifier = textClassifier; Context context = mWindowAndroid.getContext().get(); @@ -115,7 +109,7 @@ // TODO(wnwen): Remove this suppression once the constant is added to lint. @SuppressLint("WrongConstant") - public @Nullable TextClassifier getTextClassifier() { + public TextClassifier getTextClassifier() { if (mTextClassifier != null) return mTextClassifier; if (mWindowAndroid == null) { @@ -129,11 +123,11 @@ .getTextClassifier(); } - public @Nullable TextClassifier getCustomTextClassifier() { + public TextClassifier getCustomTextClassifier() { return mTextClassifier; } - private @Nullable TextClassifier getTextClassificationSession() { + private TextClassifier getTextClassificationSession() { if (mWindowAndroid == null) { return null; } @@ -158,7 +152,6 @@ mHandler.post(mFailureResponseRunnable); return; } - assumeNonNull(mWindowAndroid); if (mClassificationTask != null) { mClassificationTask.cancel(false); @@ -184,7 +177,7 @@ private final CharSequence mText; private final int mOriginalStart; private final int mOriginalEnd; - private final @Nullable Context mContext; + private final Context mContext; ClassificationTask( TextClassifier classifier, @@ -192,7 +185,7 @@ CharSequence text, int start, int end, - @Nullable Context context) { + Context context) { mTextClassifier = classifier; mRequestType = requestType; mText = text; @@ -250,7 +243,7 @@ } private SelectionClient.Result makeResult( - int start, int end, TextClassification tc, @Nullable TextSelection ts) { + int start, int end, TextClassification tc, TextSelection ts) { SelectionClient.Result result = new SelectionClient.Result(); result.text = mText.toString(); @@ -277,8 +270,7 @@ // SmartSelectionProvider. TextClassification#getActions() is only available on P and above, // so @RequiresApi(Build.VERSION_CODES.P) - private @Nullable List<Drawable> loadIconDrawables( - @Nullable Context context, TextClassification tc) { + private List<Drawable> loadIconDrawables(Context context, TextClassification tc) { if (context == null || tc == null) return null; ArrayList<Drawable> res = new ArrayList<>();
diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java index dfea80f5..69f2811 100644 --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsProviderGms.java
@@ -16,8 +16,6 @@ import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.ResettersForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; /** @@ -32,19 +30,18 @@ * */ @JNINamespace("content") -@NullMarked public class SmsProviderGms { private static final String TAG = "SmsProviderGms"; private static final int MIN_GMS_VERSION_NUMBER_WITH_CODE_BROWSER_BACKEND = 202990000; private final long mSmsProviderGmsAndroid; private final @GmsBackend int mBackend; - private @Nullable SmsUserConsentReceiver mUserConsentReceiver; - private @Nullable SmsVerificationReceiver mVerificationReceiver; + private SmsUserConsentReceiver mUserConsentReceiver; + private SmsVerificationReceiver mVerificationReceiver; private Wrappers.WebOTPServiceContext mContext; - private @Nullable WindowAndroid mWindow; - private Wrappers.@Nullable SmsRetrieverClientWrapper mClient; + private WindowAndroid mWindow; + private Wrappers.SmsRetrieverClientWrapper mClient; @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) public SmsProviderGms( @@ -80,11 +77,11 @@ ResettersForTesting.register(() -> mVerificationReceiver = oldValue); } - public @Nullable SmsUserConsentReceiver getUserConsentReceiverForTesting() { + public SmsUserConsentReceiver getUserConsentReceiverForTesting() { return mUserConsentReceiver; } - public @Nullable SmsVerificationReceiver getVerificationReceiverForTesting() { + public SmsVerificationReceiver getVerificationReceiverForTesting() { return mVerificationReceiver; } @@ -121,16 +118,16 @@ // If the SMS retrieval request is made from a remote device, e.g. desktop, we only proceed // with the verification receiver because the user consent receiver introduces too much user // friction. In addition, we do not apply the fallback logic in such case. - if (mVerificationReceiver != null - && (!isLocalRequest || mBackend != GmsBackend.USER_CONSENT)) { - mVerificationReceiver.listen(isLocalRequest); - } - if (mUserConsentReceiver != null - && isLocalRequest - && mBackend != GmsBackend.VERIFICATION - && window != null) { - mUserConsentReceiver.listen(window); - } + boolean shouldUseVerificationReceiver = + mVerificationReceiver != null + && (!isLocalRequest || mBackend != GmsBackend.USER_CONSENT); + boolean shouldUseUserConsentReceiver = + mUserConsentReceiver != null + && isLocalRequest + && mBackend != GmsBackend.VERIFICATION + && window != null; + if (shouldUseVerificationReceiver) mVerificationReceiver.listen(isLocalRequest); + if (shouldUseUserConsentReceiver) mUserConsentReceiver.listen(window); } /** @@ -173,7 +170,7 @@ // --------- Callbacks for receivers - void onReceive(@Nullable String sms, @GmsBackend int backend) { + void onReceive(String sms, @GmsBackend int backend) { SmsProviderGmsJni.get().onReceive(mSmsProviderGmsAndroid, sms, backend); } @@ -189,7 +186,7 @@ SmsProviderGmsJni.get().onNotAvailable(mSmsProviderGmsAndroid); } - public @Nullable WindowAndroid getWindow() { + public WindowAndroid getWindow() { return mWindow; } @@ -220,7 +217,7 @@ @NativeMethods interface Natives { - void onReceive(long nativeSmsProviderGms, @Nullable String sms, @GmsBackend int backend); + void onReceive(long nativeSmsProviderGms, String sms, @GmsBackend int backend); void onTimeout(long nativeSmsProviderGms);
diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java index 4c105b4..97aac93 100644 --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsUserConsentReceiver.java
@@ -18,13 +18,10 @@ import com.google.android.gms.tasks.Task; import org.chromium.base.ContextUtils; -import org.chromium.base.IntentUtils; import org.chromium.base.Log; -import org.chromium.build.annotations.NullMarked; import org.chromium.ui.base.WindowAndroid; /** Encapsulates logic to retrieve OTP code via SMS User Consent API. */ -@NullMarked public class SmsUserConsentReceiver extends BroadcastReceiver { private static final String TAG = "SmsUserConsentRcvr"; private static final boolean DEBUG = false; @@ -78,8 +75,12 @@ return; } - final Status status = IntentUtils.safeGetParcelableExtra(intent, SmsRetriever.EXTRA_STATUS); - if (status == null) { + final Status status; + + try { + status = (Status) intent.getParcelableExtra(SmsRetriever.EXTRA_STATUS); + } catch (Throwable e) { + if (DEBUG) Log.d(TAG, "Error getting parceable."); return; }
diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java b/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java index 54776c25..3d9325f0 100644 --- a/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/SmsVerificationReceiver.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.sms; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.app.Activity; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -26,10 +24,8 @@ import com.google.android.gms.tasks.Task; import org.chromium.base.ContextUtils; -import org.chromium.base.IntentUtils; import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.sms.Wrappers.WebOTPServiceContext; import org.chromium.ui.base.WindowAndroid; @@ -42,7 +38,6 @@ * * <p>TODO(majidvp): rename legacy Verification name to more appropriate name ( e.g., BrowserCode. */ -@NullMarked public class SmsVerificationReceiver extends BroadcastReceiver { private static final String TAG = "SmsVerification"; private static final boolean DEBUG = false; @@ -102,7 +97,6 @@ } @Override - @SuppressWarnings("NullAway") // https://github.com/uber/NullAway/issues/1122 public void onReceive(Context context, Intent intent) { if (DEBUG) Log.d(TAG, "Received something!"); @@ -118,8 +112,12 @@ return; } - Status status = IntentUtils.safeGetParcelableExtra(intent, SmsRetriever.EXTRA_STATUS); - if (status == null) { + final Status status; + + try { + status = (Status) intent.getParcelableExtra(SmsRetriever.EXTRA_STATUS); + } catch (Throwable e) { + if (DEBUG) Log.d(TAG, "Error getting parceable"); return; } @@ -180,7 +178,8 @@ ResolvableApiException rex = (ResolvableApiException) exception; try { PendingIntent resolutionIntent = rex.getResolution(); - assumeNonNull(mProvider.getWindow()) + mProvider + .getWindow() .showIntent( resolutionIntent, new WindowAndroid.IntentCallback() {
diff --git a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java index 658853e..bf5030269 100644 --- a/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java +++ b/content/public/android/java/src/org/chromium/content/browser/sms/Wrappers.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.sms; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.ContextWrapper; @@ -18,10 +16,6 @@ import com.google.android.gms.auth.api.phone.SmsRetrieverClient; import com.google.android.gms.tasks.Task; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - -@NullMarked class Wrappers { // Prevent instantiation. private Wrappers() {} @@ -29,14 +23,13 @@ /** Wraps com.google.android.gms.auth.api.phone.SmsRetrieverClient. */ static class SmsRetrieverClientWrapper { // Used for user consent flow. - private final @Nullable SmsRetrieverClient mSmsRetrieverClient; + private final SmsRetrieverClient mSmsRetrieverClient; // Used for browser code flow. - private final @Nullable SmsCodeBrowserClient mSmsCodeBrowserClient; - private @Nullable WebOTPServiceContext mContext; + private final SmsCodeBrowserClient mSmsCodeBrowserClient; + private WebOTPServiceContext mContext; public SmsRetrieverClientWrapper( - @Nullable SmsRetrieverClient smsRetrieverClient, - @Nullable SmsCodeBrowserClient smsCodeBrowserClient) { + SmsRetrieverClient smsRetrieverClient, SmsCodeBrowserClient smsCodeBrowserClient) { mSmsRetrieverClient = smsRetrieverClient; mSmsCodeBrowserClient = smsCodeBrowserClient; } @@ -45,17 +38,15 @@ mContext = context; } - public @Nullable WebOTPServiceContext getContext() { + public WebOTPServiceContext getContext() { return mContext; } public Task<Void> startSmsCodeBrowserRetriever() { - assumeNonNull(mSmsCodeBrowserClient); return mSmsCodeBrowserClient.startSmsCodeRetriever(); } - public Task<Void> startSmsUserConsent(@Nullable String senderAddress) { - assumeNonNull(mSmsRetrieverClient); + public Task<Void> startSmsUserConsent(String senderAddress) { return mSmsRetrieverClient.startSmsUserConsent(senderAddress); } } @@ -65,8 +56,8 @@ * registered BroadcastReceiver. */ static class WebOTPServiceContext extends ContextWrapper { - private @Nullable BroadcastReceiver mVerificationReceiver; - private @Nullable BroadcastReceiver mUserConsentReceiver; + private BroadcastReceiver mVerificationReceiver; + private BroadcastReceiver mUserConsentReceiver; private final SmsProviderGms mSmsProviderGms; public WebOTPServiceContext(Context context, SmsProviderGms provider) { @@ -74,11 +65,11 @@ mSmsProviderGms = provider; } - public @Nullable SmsVerificationReceiver getRegisteredVerificationReceiver() { + public SmsVerificationReceiver getRegisteredVerificationReceiver() { return (SmsVerificationReceiver) mVerificationReceiver; } - public @Nullable SmsUserConsentReceiver getRegisteredUserConsentReceiver() { + public SmsUserConsentReceiver getRegisteredUserConsentReceiver() { return (SmsUserConsentReceiver) mUserConsentReceiver; } @@ -86,7 +77,7 @@ return new SmsVerificationReceiver(mSmsProviderGms, this); } - private void onRegisterReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) { + private void onRegisterReceiver(BroadcastReceiver receiver, IntentFilter filter) { if (filter.hasAction(SmsCodeRetriever.SMS_CODE_RETRIEVED_ACTION)) { mVerificationReceiver = receiver; } else { @@ -99,33 +90,32 @@ @Override public Intent registerReceiver( - @Nullable BroadcastReceiver receiver, + BroadcastReceiver receiver, IntentFilter filter, - @Nullable String permission, - @Nullable Handler handler) { + String permission, + Handler handler) { onRegisterReceiver(receiver, filter); return super.registerReceiver(receiver, filter, permission, handler); } @Override - public Intent registerReceiver(@Nullable BroadcastReceiver receiver, IntentFilter filter) { + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { throw new RuntimeException(); // Not implemented. } @Override public Intent registerReceiver( - @Nullable BroadcastReceiver receiver, + BroadcastReceiver receiver, IntentFilter filter, - @Nullable String permission, - @Nullable Handler handler, + String permission, + Handler handler, int flags) { onRegisterReceiver(receiver, filter); return super.registerReceiver(receiver, filter, permission, handler, flags); } @Override - public Intent registerReceiver( - @Nullable BroadcastReceiver receiver, IntentFilter filter, int flags) { + public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, int flags) { throw new RuntimeException(); // Not implemented. }
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/EmptyInternalAccessDelegate.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/EmptyInternalAccessDelegate.java index fa8db0f..10a238a 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/EmptyInternalAccessDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/EmptyInternalAccessDelegate.java
@@ -7,14 +7,12 @@ import android.view.KeyEvent; import android.view.MotionEvent; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.ViewEventSink; /** * Empty implementation of {@link ViewEventSink.InternalAccessDelegate}. Intentional no-op for * transient stage usage. */ -@NullMarked public class EmptyInternalAccessDelegate implements ViewEventSink.InternalAccessDelegate { @Override public boolean super_onKeyUp(int keyCode, KeyEvent event) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java index 5c0c67d..16680647 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsImpl.java
@@ -4,8 +4,6 @@ package org.chromium.content.browser.webcontents; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; @@ -20,6 +18,7 @@ import android.view.Surface; import android.view.ViewStructure; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.jni_zero.CalledByNative; @@ -35,9 +34,6 @@ import org.chromium.base.UserData; import org.chromium.base.UserDataHost; import org.chromium.blink_public.input.SelectionGranularity; -import org.chromium.build.annotations.Initializer; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.cc.input.BrowserControlsOffsetTagsInfo; import org.chromium.content.browser.AppWebMessagePort; import org.chromium.content.browser.GestureListenerManagerImpl; @@ -85,7 +81,6 @@ * The WebContentsImpl Java wrapper to allow communicating with the native WebContentsImpl object. */ @JNINamespace("content") -@NullMarked public class WebContentsImpl implements WebContents, RenderFrameHostDelegate, WindowEventObserver { private static final String TAG = "WebContentsImpl"; @@ -114,20 +109,15 @@ public static final Parcelable.Creator<WebContents> CREATOR = new Parcelable.Creator<WebContents>() { @Override - public @Nullable WebContents createFromParcel(Parcel source) { + public WebContents createFromParcel(Parcel source) { Bundle bundle = source.readBundle(); // Check the version. - if (bundle == null || bundle.getLong(PARCEL_VERSION_KEY, -1) != 0) { - return null; - } + if (bundle.getLong(PARCEL_VERSION_KEY, -1) != 0) return null; // Check that we're in the same process. ParcelUuid parcelUuid = bundle.getParcelable(PARCEL_PROCESS_GUARD_KEY); - if (parcelUuid == null - || sParcelableUUID.compareTo(parcelUuid.getUuid()) != 0) { - return null; - } + if (sParcelableUUID.compareTo(parcelUuid.getUuid()) != 0) return null; // Attempt to retrieve the WebContents object from the native pointer. return WebContentsImplJni.get() @@ -172,10 +162,10 @@ private final List<RenderFrameHostImpl> mFrames = new ArrayList<>(); private long mNativeWebContentsAndroid; - private @Nullable NavigationController mNavigationController; + private NavigationController mNavigationController; // Lazily created proxy observer for handling all Java-based WebContentsObservers. - private @Nullable WebContentsObserverProxy mObserverProxy; + private WebContentsObserverProxy mObserverProxy; class SmartClipCallback { public SmartClipCallback(final Handler smartClipHandler) { @@ -200,11 +190,11 @@ final Handler mHandler; } - private @Nullable SmartClipCallback mSmartClipCallback; + private SmartClipCallback mSmartClipCallback; - private @Nullable EventForwarder mEventForwarder; + private EventForwarder mEventForwarder; - private @Nullable StylusWritingHandler mStylusWritingHandler; + private StylusWritingHandler mStylusWritingHandler; // Cached copy of all positions and scales as reported by the renderer. private RenderCoordinatesImpl mRenderCoordinates; @@ -216,13 +206,13 @@ private boolean mInitialized; // Remember the stack for clearing native the native stack for debugging use after destroy. - private @Nullable Throwable mNativeDestroyThrowable; + private Throwable mNativeDestroyThrowable; - private @Nullable ObserverList<Runnable> mTearDownDialogOverlaysHandlers; + private ObserverList<Runnable> mTearDownDialogOverlaysHandlers; private static class WebContentsInternalsImpl implements WebContentsInternals { - public final UserDataHost userDataHost = new UserDataHost(); - public @Nullable ViewAndroidDelegate viewAndroidDelegate; + public UserDataHost userDataHost; + public ViewAndroidDelegate viewAndroidDelegate; } private WebContentsImpl( @@ -240,7 +230,6 @@ } @Override - @Initializer public void setDelegates( String productVersion, ViewAndroidDelegate viewDelegate, @@ -256,6 +245,7 @@ internals = (WebContentsInternalsImpl) mInternalsHolder.get(); } else { internals = new WebContentsInternalsImpl(); + internals.userDataHost = new UserDataHost(); } mInternalsHolder = internalsHolder; mInternalsHolder.set(internals); @@ -291,14 +281,15 @@ } } - public @Nullable Context getContext() { + @Nullable + public Context getContext() { assert mInitialized; WindowAndroid window = getTopLevelNativeWindow(); return window != null ? window.getContext().get() : null; } - public @Nullable String getProductVersion() { + public String getProductVersion() { assert mInitialized; return mProductVersion; } @@ -353,13 +344,13 @@ } @Override - public @Nullable WindowAndroid getTopLevelNativeWindow() { + public WindowAndroid getTopLevelNativeWindow() { checkNotDestroyed(); return WebContentsImplJni.get().getTopLevelNativeWindow(mNativeWebContentsAndroid); } @Override - public void setTopLevelNativeWindow(@Nullable WindowAndroid windowAndroid) { + public void setTopLevelNativeWindow(WindowAndroid windowAndroid) { checkNotDestroyed(); WebContentsImplJni.get().setTopLevelNativeWindow(mNativeWebContentsAndroid, windowAndroid); WindowEventObserverManager.from(this).onWindowAndroidChanged(windowAndroid); @@ -367,8 +358,7 @@ } @Override - public @Nullable ViewAndroidDelegate getViewAndroidDelegate() { - // TODO(agrieve): I suspect this never returns null... + public ViewAndroidDelegate getViewAndroidDelegate() { if (mInternalsHolder == null) return null; WebContentsInternals internals = mInternalsHolder.get(); if (internals == null) return null; @@ -417,7 +407,7 @@ } @Override - public @Nullable NavigationController getNavigationController() { + public NavigationController getNavigationController() { return mNavigationController; } @@ -615,7 +605,7 @@ WebContentsImplJni.get().collapseSelection(mNativeWebContentsAndroid); } - private @Nullable SelectionPopupControllerImpl getSelectionPopupController() { + private SelectionPopupControllerImpl getSelectionPopupController() { return SelectionPopupControllerImpl.fromWebContents(this); } @@ -718,14 +708,14 @@ } @Override - public void evaluateJavaScript(String script, @Nullable JavaScriptCallback callback) { + public void evaluateJavaScript(String script, JavaScriptCallback callback) { ThreadUtils.assertOnUiThread(); if (isDestroyed() || script == null) return; WebContentsImplJni.get().evaluateJavaScript(mNativeWebContentsAndroid, script, callback); } @Override - public void evaluateJavaScriptForTests(String script, @Nullable JavaScriptCallback callback) { + public void evaluateJavaScriptForTests(String script, JavaScriptCallback callback) { ThreadUtils.assertOnUiThread(); if (script == null) return; checkNotDestroyed(); @@ -743,9 +733,9 @@ @Override public void postMessageToMainFrame( MessagePayload messagePayload, - @Nullable String sourceOrigin, + String sourceOrigin, String targetOrigin, - MessagePort @Nullable [] ports) { + MessagePort[] ports) { if (ports != null) { for (MessagePort port : ports) { if (port.isClosed() || port.isTransferred()) { @@ -872,13 +862,13 @@ } @Override - public @Nullable StylusWritingImeCallback getStylusWritingImeCallback() { + public StylusWritingImeCallback getStylusWritingImeCallback() { ImeAdapterImpl imeAdapter = ImeAdapterImpl.fromWebContents(this); if (imeAdapter == null) return null; return imeAdapter.getStylusWritingImeCallback(); } - public @Nullable StylusWritingHandler getStylusWritingHandler() { + public StylusWritingHandler getStylusWritingHandler() { return mStylusWritingHandler; } @@ -896,16 +886,14 @@ return mStylusWritingHandler != null && mStylusWritingHandler.handleTouchEvent( motionEvent, - assumeNonNull(getViewAndroidDelegate()) - .getContainerView()); + getViewAndroidDelegate().getContainerView()); } @Override public void handleHoverEvent(MotionEvent motionEvent) { if (mStylusWritingHandler != null) { mStylusWritingHandler.handleHoverEvent( - motionEvent, - assumeNonNull(getViewAndroidDelegate()).getContainerView()); + motionEvent, getViewAndroidDelegate().getContainerView()); } } }); @@ -1050,8 +1038,8 @@ * not created yet, or {@code userDataFactory} is null, or the internal data * storage is already garbage-collected. */ - public <T extends UserData> @Nullable T getOrSetUserData( - Class<T> key, @Nullable UserDataFactory<T> userDataFactory) { + public <T extends UserData> T getOrSetUserData( + Class<T> key, UserDataFactory<T> userDataFactory) { // For tests that go without calling |initialize|. if (!mInitialized) return null; @@ -1085,6 +1073,7 @@ WebContentsInternalsImpl internals = (WebContentsInternalsImpl) mInternalsHolder.get(); if (internals == null) { internals = new WebContentsInternalsImpl(); + internals.userDataHost = new UserDataHost(); } mInternalsHolder.set(internals); mInitialized = true; @@ -1095,8 +1084,7 @@ // Be sure to call initializeForTesting() first. assert mInitialized; - WebContentsInternalsImpl internals = - assumeNonNull((WebContentsInternalsImpl) mInternalsHolder.get()); + WebContentsInternalsImpl internals = (WebContentsInternalsImpl) mInternalsHolder.get(); internals.userDataHost.setUserData(key, userData); } @@ -1110,7 +1098,7 @@ * @return {@code UserDataHost} that contains internal user data. {@code null} if * it is already gc'ed. */ - private @Nullable UserDataHost getUserDataHost() { + private UserDataHost getUserDataHost() { if (mInternalsHolder == null) return null; WebContentsInternals internals = mInternalsHolder.get(); if (internals == null) return null; @@ -1274,11 +1262,9 @@ void clearNativeReference(long nativeWebContentsAndroid); - @Nullable WindowAndroid getTopLevelNativeWindow(long nativeWebContentsAndroid); - void setTopLevelNativeWindow( - long nativeWebContentsAndroid, @Nullable WindowAndroid windowAndroid); + void setTopLevelNativeWindow(long nativeWebContentsAndroid, WindowAndroid windowAndroid); RenderFrameHost getMainFrame(long nativeWebContentsAndroid); @@ -1368,23 +1354,19 @@ void resumeLoadingCreatedWebContents(long nativeWebContentsAndroid); void evaluateJavaScript( - long nativeWebContentsAndroid, - String script, - @Nullable JavaScriptCallback callback); + long nativeWebContentsAndroid, String script, JavaScriptCallback callback); void evaluateJavaScriptForTests( - long nativeWebContentsAndroid, - String script, - @Nullable JavaScriptCallback callback); + long nativeWebContentsAndroid, String script, JavaScriptCallback callback); void addMessageToDevToolsConsole(long nativeWebContentsAndroid, int level, String message); void postMessageToMainFrame( long nativeWebContentsAndroid, MessagePayload payload, - @Nullable String sourceOrigin, + String sourceOrigin, String targetOrigin, - MessagePort @Nullable [] ports); + MessagePort[] ports); boolean hasAccessedInitialDocument(long nativeWebContentsAndroid);
diff --git a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java index c41e825..4461469 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java +++ b/content/public/android/java/src/org/chromium/content/browser/webcontents/WebContentsObserverProxy.java
@@ -12,8 +12,6 @@ import org.chromium.base.ObserverList.RewindableIterator; import org.chromium.base.TerminationStatus; import org.chromium.base.ThreadUtils; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.GlobalRenderFrameHostId; import org.chromium.content_public.browser.LifecycleState; import org.chromium.content_public.browser.LoadCommittedDetails; @@ -32,7 +30,6 @@ * avoiding redundant JNI-related work when there are multiple Java-based observers. */ @JNINamespace("content") -@NullMarked class WebContentsObserverProxy extends WebContentsObserver { private long mNativeWebContentsObserverProxy; private final ObserverList<WebContentsObserver> mObservers; @@ -485,7 +482,7 @@ } @Override - public void onTopLevelNativeWindowChanged(@Nullable WindowAndroid windowAndroid) { + public void onTopLevelNativeWindowChanged(WindowAndroid windowAndroid) { handleObserverCall(); Iterator<WebContentsObserver> observersIterator = mObservers.iterator(); for (; observersIterator.hasNext(); ) {
diff --git a/content/public/android/java/src/org/chromium/content/browser/webid/DigitalCredentialsCreationDelegate.java b/content/public/android/java/src/org/chromium/content/browser/webid/DigitalCredentialsCreationDelegate.java index 90150f27..df32019 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webid/DigitalCredentialsCreationDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/webid/DigitalCredentialsCreationDelegate.java
@@ -7,14 +7,12 @@ import android.app.Activity; import org.chromium.base.Promise; -import org.chromium.build.annotations.NullMarked; /** * Delegate interface for calling into GMSCore's private identity credentials. * * <p>TODO(crbug.com/380039257) delete this once GMSCore publishes this API. */ -@NullMarked public interface DigitalCredentialsCreationDelegate { public Promise<String> create(Activity window, String origin, String request); }
diff --git a/content/public/android/java/src/org/chromium/content/browser/webid/IdentityCredentialsDelegate.java b/content/public/android/java/src/org/chromium/content/browser/webid/IdentityCredentialsDelegate.java index d3a0408..d61833e 100644 --- a/content/public/android/java/src/org/chromium/content/browser/webid/IdentityCredentialsDelegate.java +++ b/content/public/android/java/src/org/chromium/content/browser/webid/IdentityCredentialsDelegate.java
@@ -25,20 +25,16 @@ import org.chromium.base.Log; import org.chromium.base.Promise; import org.chromium.base.ServiceLoaderUtil; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.NullUnmarked; -import org.chromium.build.annotations.Nullable; import java.util.Arrays; -@NullMarked public class IdentityCredentialsDelegate { private static final String TAG = "IdentityCredentials"; // Arbitrary request code that is used when invoking the GMSCore API. private static final int REQUEST_CODE_DIGITAL_CREDENTIALS = 777; - public @Nullable Promise<String> get(String origin, String request) { + public Promise<String> get(String origin, String request) { // TODO(crbug.com/40257092): implement this. return null; } @@ -58,7 +54,6 @@ ResultReceiver resultReceiver = new ResultReceiver(new Handler(Looper.getMainLooper())) { // android.credentials.GetCredentialException requires API level 34 - @NullUnmarked @SuppressLint("NewApi") @Override protected void onReceiveResult(int code, Bundle data) {
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallback.java b/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallback.java index 49bfa61..98bfb963 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallback.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallback.java
@@ -8,14 +8,12 @@ import android.view.ActionMode; import android.view.View; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; /** * An {@link ActionMode.Callback2} adapter that adds APIs that are not dependent on * {@link ActionMode}, {@link android.view.Menu} or {@link android.view.MenuItem}. */ -@NullMarked public abstract class ActionModeCallback extends ActionMode.Callback2 { /** * Callback for handling drop-down menu item clicks. @@ -30,5 +28,5 @@ int groupId, int id, @Nullable Intent intent, - View.@Nullable OnClickListener clickListener); + @Nullable View.OnClickListener clickListener); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallbackHelper.java b/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallbackHelper.java index 17344e35..6c8619f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallbackHelper.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ActionModeCallbackHelper.java
@@ -12,8 +12,8 @@ import android.view.View; import android.webkit.WebSettings; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content.browser.selection.SelectionPopupControllerImpl; /** @@ -21,7 +21,6 @@ * {@link android.view.ActionMode}. Exposes the functionality of the class * for embedder to provide with the callback instance that interacts with it. */ -@NullMarked public abstract class ActionModeCallbackHelper { private static final String TAG = "ActionModeHelper"; @@ -72,7 +71,7 @@ int groupId, int id, @Nullable Intent intent, - View.@Nullable OnClickListener clickListener) { + @Nullable View.OnClickListener clickListener) { return false; } } @@ -101,7 +100,8 @@ * @return {@link RenderFrameHost} object only available during page selection, * if there is a valid ActionMode available. */ - public abstract @Nullable RenderFrameHost getRenderFrameHost(); + @Nullable + public abstract RenderFrameHost getRenderFrameHost(); /** * Set the action mode menu items allowed on the content. @@ -144,7 +144,7 @@ int groupId, int id, @Nullable Intent intent, - View.@Nullable OnClickListener clickListener); + @Nullable View.OnClickListener clickListener); /** * @see {@link ActionMode.Callback#onDestroyActionMode(ActionMode)}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/AdditionalNavigationParams.java b/content/public/android/java/src/org/chromium/content_public/browser/AdditionalNavigationParams.java index ccf769f9..e88846f4 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/AdditionalNavigationParams.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/AdditionalNavigationParams.java
@@ -4,16 +4,15 @@ package org.chromium.content_public.browser; +import androidx.annotation.Nullable; + import org.chromium.base.UnguessableToken; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; /** * Holds parameters for NavigationController::LoadUrlParams::AdditionalNavigationParams. This is * used to route information about the initiator frame to the navigation request, which is needed * for event-level reporting to function properly. */ -@NullMarked public class AdditionalNavigationParams { private final UnguessableToken mInitiatorFrameToken; private final int mInitiatorProcessId;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/BrowserContextHandle.java b/content/public/android/java/src/org/chromium/content_public/browser/BrowserContextHandle.java index 6b256af..82c086b 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/BrowserContextHandle.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/BrowserContextHandle.java
@@ -4,10 +4,7 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** An interface that provides access to a native BrowserContext. */ -@NullMarked public interface BrowserContextHandle { /** @return A pointer to the native BrowserContext that this object wraps. */ long getNativeBrowserContextPointer();
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ChildProcessLauncherHelper.java b/content/public/android/java/src/org/chromium/content_public/browser/ChildProcessLauncherHelper.java index 0a84b9b..db34dfdf 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ChildProcessLauncherHelper.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ChildProcessLauncherHelper.java
@@ -6,11 +6,9 @@ import android.content.Context; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.ChildProcessLauncherHelperImpl; /** Interface for helper launching child processes. */ -@NullMarked public final class ChildProcessLauncherHelper { private ChildProcessLauncherHelper() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ClientDataJson.java b/content/public/android/java/src/org/chromium/content_public/browser/ClientDataJson.java index 43fdd403..0360b1d 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ClientDataJson.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ClientDataJson.java
@@ -4,14 +4,14 @@ package org.chromium.content_public.browser; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.chromium.blink.mojom.PaymentOptions; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.ClientDataJsonImpl; import org.chromium.url.Origin; /** A utility class for WebAuthn to process the clientDataJson data structure in the API. */ -@NullMarked public final class ClientDataJson { private ClientDataJson() {} @@ -29,10 +29,11 @@ * @param topOrigin The origin of the page. * @return The string of the JSON, can be null when error happens. */ - public static @Nullable String buildClientDataJson( + @Nullable + public static String buildClientDataJson( @ClientDataRequestType int clientDataRequestType, - String callerOrigin, - byte[] challenge, + @NonNull String callerOrigin, + @NonNull byte[] challenge, boolean isCrossOrigin, @Nullable PaymentOptions paymentOptions, @Nullable String relyingPartyId,
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPicker.java b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPicker.java index 6cba3b59..d0fc63f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPicker.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPicker.java
@@ -6,25 +6,21 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - /** * A utility class that allows the embedder to provide a Contacts Picker implementation to content. */ -@NullMarked public final class ContactsPicker { /** * The current delegate for the contacts picker, or null if navigator.contacts is not * supported. */ - private static @Nullable ContactsPickerDelegate sContactsPickerDelegate; + private static ContactsPickerDelegate sContactsPickerDelegate; /** * The object that represents the currently visible contacts picker UI, or null if none is * visible. */ - private static @Nullable Object sPicker; + private static Object sPicker; private ContactsPicker() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerDelegate.java index 62adcf5..60c93a7d 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerDelegate.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerDelegate.java
@@ -4,10 +4,7 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** A delegate interface for the contacts picker. */ -@NullMarked public interface ContactsPickerDelegate { /** * Called to display the contacts picker.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerListener.java b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerListener.java index 6f2d9cd..84165c4 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerListener.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContactsPickerListener.java
@@ -7,8 +7,6 @@ import androidx.annotation.IntDef; import org.chromium.blink.mojom.ContactIconBlob; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.payments.mojom.PaymentAddress; import java.lang.annotation.Retention; @@ -18,15 +16,14 @@ import java.util.List; /** The callback used to indicate what action the user took in the picker. */ -@NullMarked public interface ContactsPickerListener { /** A container class for exchanging contact details. */ public static class Contact { public final List<String> names; public final List<String> emails; public final List<String> tel; - public final @Nullable List<ByteBuffer> serializedAddresses; - public final @Nullable List<ByteBuffer> serializedIcons; + public final List<ByteBuffer> serializedAddresses; + public final List<ByteBuffer> serializedIcons; public Contact( List<String> contactNames,
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureList.java b/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureList.java index e1b7864..12fbc32 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureList.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureList.java
@@ -4,10 +4,7 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** Convenience static methods to access {@link ContentFeatureMap}. */ -@NullMarked public class ContentFeatureList { private ContentFeatureList() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureMap.java b/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureMap.java index 1cb01bf..1bed717 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureMap.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContentFeatureMap.java
@@ -8,11 +8,9 @@ import org.jni_zero.NativeMethods; import org.chromium.base.FeatureMap; -import org.chromium.build.annotations.NullMarked; /** Java accessor for base::Features listed in content/browser/android/content_feature_map.cc. */ @JNINamespace("content::android") -@NullMarked public class ContentFeatureMap extends FeatureMap { private static final ContentFeatureMap sInstance = new ContentFeatureMap();
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContentViewStatics.java b/content/public/android/java/src/org/chromium/content_public/browser/ContentViewStatics.java index 31adbfe..7a17071e 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContentViewStatics.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContentViewStatics.java
@@ -4,11 +4,9 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.ContentViewStaticsImpl; /** Implementations of various static methods. */ -@NullMarked public class ContentViewStatics { /** * Suspends Webkit timers in all renderers.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ContentWebFeatureUsageUtils.java b/content/public/android/java/src/org/chromium/content_public/browser/ContentWebFeatureUsageUtils.java index 120b235..bff3af42 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ContentWebFeatureUsageUtils.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ContentWebFeatureUsageUtils.java
@@ -8,11 +8,9 @@ import org.jni_zero.NativeMethods; import org.chromium.blink.mojom.WebFeature; -import org.chromium.build.annotations.NullMarked; /** A Java API for calling ContentBrowserClient::LogWebFeatureForCurrentPage(). */ @JNINamespace("content") -@NullMarked public class ContentWebFeatureUsageUtils { public static void logWebFeatureForCurrentPage( WebContents webContents, @WebFeature.EnumType int webFeature) {
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/GestureListenerManager.java b/content/public/android/java/src/org/chromium/content_public/browser/GestureListenerManager.java index 713a8d1..43cd669 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/GestureListenerManager.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/GestureListenerManager.java
@@ -4,8 +4,6 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.cc.mojom.RootScrollOffsetUpdateFrequency; import org.chromium.content.browser.GestureListenerManagerImpl; @@ -13,14 +11,13 @@ * Manages the {@link GestureStateListener} instances observing various gesture * events notifications from content layer. */ -@NullMarked public interface GestureListenerManager { /** * @param webContents {@link WebContents} object. * @return {@link GestureListenerManager} object used for the give WebContents. * Creates one if not present. */ - static @Nullable GestureListenerManager fromWebContents(WebContents webContents) { + static GestureListenerManager fromWebContents(WebContents webContents) { return GestureListenerManagerImpl.fromWebContents(webContents); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java b/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java index 7bbcc5f..87ebaaee 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/GestureStateListener.java
@@ -4,13 +4,10 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** * An interface that is notified of events and state changes related to gesture processing * from content layer. */ -@NullMarked public abstract class GestureStateListener { /** Called when the pinch gesture starts. */ public void onPinchStarted() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/GlobalRenderFrameHostId.java b/content/public/android/java/src/org/chromium/content_public/browser/GlobalRenderFrameHostId.java index 2b80349..af6e1d8 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/GlobalRenderFrameHostId.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/GlobalRenderFrameHostId.java
@@ -4,15 +4,12 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - import java.util.Objects; /** * Identifies a RenderFrameHost. * See the native equivalent: content::GlobalRenderFrameHostId. */ -@NullMarked public final class GlobalRenderFrameHostId { // Note that this is an internal identifier, not the PID from the OS. private final int mChildId;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/HostZoomMap.java b/content/public/android/java/src/org/chromium/content_public/browser/HostZoomMap.java index 682351b7..7d0b219 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/HostZoomMap.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/HostZoomMap.java
@@ -4,15 +4,14 @@ package org.chromium.content_public.browser; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.HostZoomMapImpl; import java.util.Map; /** Implementations of various static methods related to page zoom. */ -@NullMarked public class HostZoomMap { // Preset zoom factors that the +/- buttons can "snap" the zoom level to if user chooses to // not use the slider. These zoom factors correspond to the zoom levels that are used on @@ -42,7 +41,7 @@ * @param webContents WebContents to update * @param newZoomLevel double - new zoom level */ - public static void setZoomLevel(WebContents webContents, double newZoomLevel) { + public static void setZoomLevel(@NonNull WebContents webContents, double newZoomLevel) { assert !webContents.isDestroyed(); // Just before sending the zoom level to the backend, we will take into account the system @@ -76,7 +75,7 @@ * @param webContents WebContents to get zoom level for * @return double current zoom level */ - public static double getZoomLevel(WebContents webContents) { + public static double getZoomLevel(@NonNull WebContents webContents) { assert !webContents.isDestroyed(); // Just before returning a zoom level from the backend, we must again take into account the
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ImageDownloadCallback.java b/content/public/android/java/src/org/chromium/content_public/browser/ImageDownloadCallback.java index d6c44a4..30a013e 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ImageDownloadCallback.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ImageDownloadCallback.java
@@ -7,13 +7,11 @@ import android.graphics.Bitmap; import android.graphics.Rect; -import org.chromium.build.annotations.NullMarked; import org.chromium.url.GURL; import java.util.List; /** Java counterpart of native ImageDownloadCallback. */ -@NullMarked public interface ImageDownloadCallback { /** * Called when image downloading is completed.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ImeAdapter.java b/content/public/android/java/src/org/chromium/content_public/browser/ImeAdapter.java index b30e43af..c7599150 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ImeAdapter.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ImeAdapter.java
@@ -11,13 +11,10 @@ import androidx.annotation.VisibleForTesting; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.input.ImeAdapterImpl; import org.chromium.ui.base.WindowAndroid; /** Adapts and plumbs android IME service onto the chrome text input API. */ -@NullMarked public interface ImeAdapter { /** Composition key code sent when user either hit a key or hit a selection. */ static final int COMPOSITION_KEY_CODE = 229; @@ -47,7 +44,6 @@ * @return the active {@link InputConnection} that the IME uses to communicate updates to its * clients. */ - @Nullable InputConnection getActiveInputConnection(); /** @@ -63,7 +59,6 @@ /** * @see View#onCreateInputConnection(EditorInfo) */ - @Nullable InputConnection onCreateInputConnection(EditorInfo outAttrs); /** @@ -97,7 +92,6 @@ ResultReceiver getNewShowKeyboardReceiver(); /** Get the current input connection for testing purposes. */ - @Nullable InputConnection getInputConnectionForTest(); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java index df855b9..0e4a8f1 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ImeEventObserver.java
@@ -6,10 +6,7 @@ import android.view.KeyEvent; -import org.chromium.build.annotations.NullMarked; - /** Interface for the classes that need to be notified of IME changes. */ -@NullMarked public interface ImeEventObserver { /** Called to notify the delegate about synthetic/real key events before sending to renderer. */ default void onImeEvent() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java b/content/public/android/java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java index ae36d93..96c4382 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java
@@ -9,12 +9,9 @@ import android.view.View; import android.view.inputmethod.CursorAnchorInfo; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; /** Wrapper around Android's InputMethodManager so that the implementation can be swapped out. */ -@NullMarked public interface InputMethodManagerWrapper { /** An embedder may implement this for multi-display support. */ public interface Delegate { @@ -35,14 +32,13 @@ /** * @see android.view.inputmethod.InputMethodManager#isActive(View) */ - boolean isActive(@Nullable View view); + boolean isActive(View view); /** * @see android.view.inputmethod.InputMethodManager#hideSoftInputFromWindow(IBinder, int, * ResultReceiver) */ - boolean hideSoftInputFromWindow( - IBinder windowToken, int flags, @Nullable ResultReceiver resultReceiver); + boolean hideSoftInputFromWindow(IBinder windowToken, int flags, ResultReceiver resultReceiver); /** * @see android.view.inputmethod.InputMethodManager#updateSelection(View, int, int, int, int) @@ -60,14 +56,13 @@ * @see android.view.inputmethod.InputMethodManager * #updateExtractedText(View,int, ExtractedText) */ - void updateExtractedText( - View view, int token, android.view.inputmethod.@Nullable ExtractedText text); + void updateExtractedText(View view, int token, android.view.inputmethod.ExtractedText text); /** * Call this when WindowAndroid object has changed. * @param newWindowAndroid The new WindowAndroid object. */ - void onWindowAndroidChanged(@Nullable WindowAndroid newWindowAndroid); + void onWindowAndroidChanged(WindowAndroid newWindowAndroid); /** Call this when non-null InputConnection has been created. */ void onInputConnectionCreated();
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/InputTransferHandler.java b/content/public/android/java/src/org/chromium/content_public/browser/InputTransferHandler.java index bce53412..67b31b0 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/InputTransferHandler.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/InputTransferHandler.java
@@ -14,15 +14,11 @@ import org.chromium.base.ContextUtils; import org.chromium.base.TraceEvent; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.NullUnmarked; -import org.chromium.build.annotations.Nullable; @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) -@NullMarked public class InputTransferHandler { private InputTransferToken mBrowserToken; - private @Nullable InputTransferToken mVizToken; + private InputTransferToken mVizToken; public InputTransferHandler(InputTransferToken browserToken) { mBrowserToken = browserToken; @@ -38,7 +34,6 @@ mVizToken = token; } - @NullUnmarked public boolean maybeTransferInputToViz() { if (!canTransferInputToViz()) { return false;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/InterfaceRegistrar.java b/content/public/android/java/src/org/chromium/content_public/browser/InterfaceRegistrar.java index 96d64a4..79774a3 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/InterfaceRegistrar.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/InterfaceRegistrar.java
@@ -4,8 +4,6 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.services.service_manager.InterfaceRegistry; import java.util.ArrayList; @@ -17,16 +15,15 @@ * @param <ParamType> the type of parameter to pass to the InterfaceRegistrar when adding its * interfaces to an InterfaceRegistry */ -@NullMarked public interface InterfaceRegistrar<ParamType> { /** Invoked to register interfaces on |registry|, parametrized by |paramValue|. */ - public void registerInterfaces(InterfaceRegistry registry, @Nullable ParamType paramValue); + public void registerInterfaces(InterfaceRegistry registry, ParamType paramValue); /** A registry of InterfaceRegistrars. */ public static class Registry<ParamType> { - private static @Nullable Registry<Void> sSingletonRegistry; - private static @Nullable Registry<WebContents> sWebContentsRegistry; - private static @Nullable Registry<RenderFrameHost> sRenderFrameHostRegistry; + private static Registry<Void> sSingletonRegistry; + private static Registry<WebContents> sWebContentsRegistry; + private static Registry<RenderFrameHost> sRenderFrameHostRegistry; private List<InterfaceRegistrar<ParamType>> mRegistrars = new ArrayList<InterfaceRegistrar<ParamType>>(); @@ -82,8 +79,7 @@ mRegistrars.add(registrar); } - private void applyRegistrars( - InterfaceRegistry interfaceRegistry, @Nullable ParamType param) { + private void applyRegistrars(InterfaceRegistry interfaceRegistry, ParamType param) { for (InterfaceRegistrar<ParamType> registrar : mRegistrars) { registrar.registerInterfaces(interfaceRegistry, param); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/JavaScriptCallback.java b/content/public/android/java/src/org/chromium/content_public/browser/JavaScriptCallback.java index 282f6b3..1b572048 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/JavaScriptCallback.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/JavaScriptCallback.java
@@ -4,10 +4,7 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** Callback interface for WebContents evaluateJavaScript(). */ -@NullMarked public interface JavaScriptCallback { /** * Called from native in response to evaluateJavaScript().
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/JavascriptInjector.java b/content/public/android/java/src/org/chromium/content_public/browser/JavascriptInjector.java index 0e793d4b1..557c2a9 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/JavascriptInjector.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/JavascriptInjector.java
@@ -6,8 +6,6 @@ import android.util.Pair; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.JavascriptInjectorImpl; import java.lang.annotation.Annotation; @@ -17,14 +15,13 @@ * Interface that provides API used to inject user-defined objects that allow custom Javascript * interfaces. */ -@NullMarked public interface JavascriptInjector { /** * @param webContents {@link WebContents} object. * @return {@link JavascriptInjector} object used for the give WebContents. Creates one if not * present. */ - static @Nullable JavascriptInjector fromWebContents(WebContents webContents) { + static JavascriptInjector fromWebContents(WebContents webContents) { return JavascriptInjectorImpl.fromWebContents(webContents); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/KeyboardShortcutRecorder.java b/content/public/android/java/src/org/chromium/content_public/browser/KeyboardShortcutRecorder.java index d90e53c..424fba7 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/KeyboardShortcutRecorder.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/KeyboardShortcutRecorder.java
@@ -7,13 +7,11 @@ import androidx.annotation.IntDef; import org.chromium.base.metrics.RecordHistogram; -import org.chromium.build.annotations.NullMarked; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** Records physical keyboard shortcut events. Suitable for use by any content embedder. */ -@NullMarked public class KeyboardShortcutRecorder { // This should be kept in sync with the definition |PhysicalKeyboardShortcut| in // tools/metrics/histograms/enums.xml and
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/LGEmailActionModeWorkaround.java b/content/public/android/java/src/org/chromium/content_public/browser/LGEmailActionModeWorkaround.java index 5d1c133..a69adbc 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/LGEmailActionModeWorkaround.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/LGEmailActionModeWorkaround.java
@@ -4,7 +4,6 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.selection.LGEmailActionModeWorkaroundImpl; /** @@ -14,7 +13,6 @@ * a system update. However, LG Email team is committed to fixing this in the near future. * This is a version code limited workaround to avoid crashes in the app. */ -@NullMarked public final class LGEmailActionModeWorkaround { private LGEmailActionModeWorkaround() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/LoadCommittedDetails.java b/content/public/android/java/src/org/chromium/content_public/browser/LoadCommittedDetails.java index a7e9688..2f7935a 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/LoadCommittedDetails.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/LoadCommittedDetails.java
@@ -7,7 +7,6 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; import org.chromium.url.GURL; /** @@ -15,7 +14,6 @@ * {@link WebContentsObserver#navigationEntryCommitted(LoadCommittedDetails)}. */ @JNINamespace("content") -@NullMarked public class LoadCommittedDetails { private final boolean mDidReplaceEntry; private final int mPreviousEntryIndex;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java b/content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java index 87108ed..8ceb892 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/LoadUrlParams.java
@@ -4,6 +4,8 @@ package org.chromium.content_public.browser; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.jni_zero.JNINamespace; @@ -11,8 +13,6 @@ import org.chromium.base.UserDataHost; import org.chromium.base.supplier.Supplier; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content_public.browser.navigation_controller.LoadURLType; import org.chromium.content_public.browser.navigation_controller.UserAgentOverrideOption; import org.chromium.content_public.common.Referrer; @@ -31,22 +31,21 @@ * values. */ @JNINamespace("content") -@NullMarked public class LoadUrlParams { // Fields with counterparts in NavigationController::LoadURLParams. private String mUrl; - private @Nullable Origin mInitiatorOrigin; + private Origin mInitiatorOrigin; private int mLoadUrlType; private int mTransitionType; - private @Nullable Referrer mReferrer; - private @Nullable Map<String, String> mExtraHeaders; - private @Nullable UserDataHost mNavigationHandleUserDataHost; - private @Nullable String mVerbatimHeaders; + private Referrer mReferrer; + private Map<String, String> mExtraHeaders; + @Nullable private UserDataHost mNavigationHandleUserDataHost; + private String mVerbatimHeaders; private int mUaOverrideOption; - private @Nullable ResourceRequestBody mPostData; - private @Nullable String mBaseUrlForDataUrl; - private @Nullable String mVirtualUrlForSpecialCases; - private @Nullable String mDataUrlAsString; + private ResourceRequestBody mPostData; + private String mBaseUrlForDataUrl; + private String mVirtualUrlForSpecialCases; + private String mDataUrlAsString; private boolean mCanLoadLocalResources; private boolean mIsRendererInitiated; private boolean mShouldReplaceCurrentEntry; @@ -54,8 +53,8 @@ private long mInputStartTimestamp; private boolean mHasUserGesture; private boolean mShouldClearHistoryList; - private @Nullable AdditionalNavigationParams mAdditionalNavigationParams; - private @Nullable Supplier<Long> mNavigationUIDataSupplier; + @Nullable private AdditionalNavigationParams mAdditionalNavigationParams; + private Supplier<Long> mNavigationUIDataSupplier; private boolean mIsPdf; /** @@ -106,7 +105,7 @@ * Creates a new LoadUrlParams that is a copy of {@code other}. * The user data host is intentionally not copied. */ - public static LoadUrlParams copy(LoadUrlParams other) { + public static LoadUrlParams copy(@NonNull LoadUrlParams other) { LoadUrlParams copy = new LoadUrlParams(other.mUrl); copy.mInitiatorOrigin = other.mInitiatorOrigin; copy.mLoadUrlType = other.mLoadUrlType; @@ -156,7 +155,7 @@ * does not require a special charset. */ public static LoadUrlParams createLoadDataParams( - String data, String mimeType, boolean isBase64Encoded, @Nullable String charset) { + String data, String mimeType, boolean isBase64Encoded, String charset) { LoadUrlParams params = new LoadUrlParams(buildDataUri(data, mimeType, isBase64Encoded, charset)); params.setLoadType(LoadURLType.DATA); @@ -165,7 +164,7 @@ } private static String buildDataUri( - String data, String mimeType, boolean isBase64Encoded, @Nullable String charset) { + String data, String mimeType, boolean isBase64Encoded, String charset) { StringBuilder dataUrl = new StringBuilder("data:"); dataUrl.append(mimeType); if (charset != null && !charset.isEmpty()) { @@ -223,7 +222,7 @@ boolean isBase64Encoded, String baseUrl, String historyUrl, - @Nullable String charset) { + String charset) { LoadUrlParams params; // For WebView compatibility, when the base URL has the 'data:' // scheme, we treat it as a regular data URL load and skip setting @@ -276,7 +275,7 @@ } /** Return the base url for a data url, otherwise null. */ - public @Nullable String getBaseUrl() { + public String getBaseUrl() { return mBaseUrlForDataUrl; } @@ -309,7 +308,7 @@ /** * @return the referrer of this load. */ - public @Nullable Referrer getReferrer() { + public Referrer getReferrer() { return mReferrer; } @@ -324,7 +323,7 @@ } /** Return the extra headers as a map. */ - public @Nullable Map<String, String> getExtraHeaders() { + public Map<String, String> getExtraHeaders() { return mExtraHeaders; } @@ -343,7 +342,8 @@ * Returns the user data to be added to the navigation handle. Clears out the existing user data * host on each call. May return null if there is no data. This is not part of the content API. */ - public @Nullable UserDataHost takeNavigationHandleUserData() { + @Nullable + public UserDataHost takeNavigationHandleUserData() { UserDataHost returnValue = mNavigationHandleUserDataHost; mNavigationHandleUserDataHost = null; return returnValue; @@ -356,7 +356,7 @@ * exploded form through setExtraHeaders(). Embedders that work with extra headers in opaque * collapsed form can use the setVerbatimHeaders() / getVerbatimHeaders() instead. */ - public @Nullable String getExtraHeadersString() { + public String getExtraHeadersString() { return getExtraHeadersString("\n", false); } @@ -365,11 +365,11 @@ * is set. This form is suitable for passing to native * net::HttpRequestHeaders::AddHeadersFromString. */ - public @Nullable String getExtraHttpRequestHeadersString() { + public String getExtraHttpRequestHeadersString() { return getExtraHeadersString("\r\n", true); } - private @Nullable String getExtraHeadersString(String delimiter, boolean addTerminator) { + private String getExtraHeadersString(String delimiter, boolean addTerminator) { if (mExtraHeaders == null) return null; StringBuilder headerBuilder = new StringBuilder(); @@ -407,7 +407,7 @@ /** * @return the verbatim extra headers string */ - public @Nullable String getVerbatimHeaders() { + public String getVerbatimHeaders() { return mVerbatimHeaders; } @@ -439,7 +439,7 @@ /** * @return the data to be sent through POST */ - public @Nullable ResourceRequestBody getPostData() { + public ResourceRequestBody getPostData() { return mPostData; } @@ -459,7 +459,7 @@ * * @return The virtual url for this data or pdf load. */ - public @Nullable String getVirtualUrlForSpecialCases() { + public String getVirtualUrlForSpecialCases() { return mVirtualUrlForSpecialCases; } @@ -479,7 +479,7 @@ * * @return The data url. */ - public @Nullable String getDataUrlAsString() { + public String getDataUrlAsString() { return mDataUrlAsString; } @@ -612,7 +612,8 @@ /** * @return The additional navigation params associated with the load. */ - public @Nullable AdditionalNavigationParams getAdditionalNavigationParams() { + @Nullable + public AdditionalNavigationParams getAdditionalNavigationParams() { return mAdditionalNavigationParams; } @@ -631,7 +632,7 @@ } /** Returns the supplier for {@link NavigationUIData} or null. */ - public @Nullable Supplier<Long> getNavigationUIDataSupplier() { + public Supplier<Long> getNavigationUIDataSupplier() { return mNavigationUIDataSupplier; } @@ -653,6 +654,6 @@ * Parses |url| as a GURL on the native side, and * returns true if it's scheme is data:. */ - boolean isDataScheme(@Nullable String url); + boolean isDataScheme(String url); } }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java b/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java index 61e00d8..b83cdcc 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java
@@ -4,18 +4,18 @@ package org.chromium.content_public.browser; +import androidx.annotation.Nullable; + import org.chromium.base.ObserverList; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.MediaSessionImpl; /** The MediaSession Java wrapper to allow communicating with the native MediaSession object. */ -@NullMarked public abstract class MediaSession { /** * @return The MediaSession associated with |contents|. */ - public static @Nullable MediaSession fromWebContents(WebContents contents) { + @Nullable + public static MediaSession fromWebContents(WebContents contents) { // TODO(zqzhang): directly call WebContentsImpl.getMediaSession() when WebContentsImpl // package restriction is removed. return MediaSessionImpl.fromWebContents(contents);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java index b12102f..7e9869c 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java
@@ -4,8 +4,8 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content.browser.MediaSessionImpl; import org.chromium.services.media_session.MediaImage; import org.chromium.services.media_session.MediaMetadata; @@ -19,9 +19,8 @@ * session messages from Java {@link MediaSession}, which acts acts as a proxy forwarding messages * comming from the native MediaSession. */ -@NullMarked public abstract class MediaSessionObserver { - private @Nullable MediaSessionImpl mMediaSession; + private MediaSessionImpl mMediaSession; /** Construct a MediaSessionObserver and start observing |mediaSession|. */ protected MediaSessionObserver(MediaSession mediaSession) { @@ -39,7 +38,8 @@ /** * @return The observed media session. */ - public final @Nullable MediaSession getMediaSession() { + @Nullable + public final MediaSession getMediaSession() { return mMediaSession; }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MessagePayload.java b/content/public/android/java/src/org/chromium/content_public/browser/MessagePayload.java index 4ea1828..18260d3 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/MessagePayload.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/MessagePayload.java
@@ -4,8 +4,8 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import java.util.Objects; @@ -13,11 +13,10 @@ * Represents a JavaScript message payload. * Currently only String and ArrayBuffer is supported. */ -@NullMarked public final class MessagePayload { @MessagePayloadType private final int mType; - private final @Nullable String mString; - private final byte @Nullable [] mArrayBuffer; + @Nullable private final String mString; + @Nullable private final byte[] mArrayBuffer; /** * Create a MessagePayload String type. @@ -31,7 +30,7 @@ } /** Create a MessagePayload ArrayBuffer type. */ - public MessagePayload(byte[] arrayBuffer) { + public MessagePayload(@NonNull byte[] arrayBuffer) { Objects.requireNonNull(arrayBuffer, "arrayBuffer cannot be null."); mType = MessagePayloadType.ARRAY_BUFFER; mArrayBuffer = arrayBuffer; @@ -43,11 +42,13 @@ return mType; } - public @Nullable String getAsString() { + @Nullable + public String getAsString() { checkType(MessagePayloadType.STRING); return mString; } + @NonNull public byte[] getAsArrayBuffer() { checkType(MessagePayloadType.ARRAY_BUFFER); Objects.requireNonNull(mArrayBuffer, "mArrayBuffer cannot be null."); @@ -64,6 +65,7 @@ } } + @NonNull public static String typeToString(@MessagePayloadType int type) { switch (type) { case MessagePayloadType.STRING:
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MessagePort.java b/content/public/android/java/src/org/chromium/content_public/browser/MessagePort.java index ce7a2ec2..97b91cbd 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/MessagePort.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/MessagePort.java
@@ -6,14 +6,11 @@ import android.os.Handler; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.build.annotations.UsedByReflection; import org.chromium.content.browser.AppWebMessagePort; /** Interface for message ports that handle postMessage requests. */ @UsedByReflection("") -@NullMarked public interface MessagePort { /** The message callback for receiving messages. */ public interface MessageCallback { @@ -22,7 +19,7 @@ * @param messagePayload The message payload that was received. * @param sentPorts The {@link MessagePort}s that were sent if any. */ - void onMessage(MessagePayload messagePayload, MessagePort @Nullable [] sentPorts); + void onMessage(MessagePayload messagePayload, MessagePort[] sentPorts); } /** @@ -66,5 +63,5 @@ * @param messagePayload The message payload to be sent. * @param sentPorts The ports to be transferred. */ - void postMessage(MessagePayload messagePayload, MessagePort @Nullable [] sentPorts); + void postMessage(MessagePayload messagePayload, MessagePort[] sentPorts); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/MotionEventSynthesizer.java b/content/public/android/java/src/org/chromium/content_public/browser/MotionEventSynthesizer.java index b0cfae6..ecd9ba3 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/MotionEventSynthesizer.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/MotionEventSynthesizer.java
@@ -6,11 +6,9 @@ import android.view.View; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.MotionEventSynthesizerImpl; /** Injects synthetic touch events. All the coordinates are of physical unit. */ -@NullMarked public interface MotionEventSynthesizer { public static MotionEventSynthesizer create(View target) { return MotionEventSynthesizerImpl.create(target);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/NavigationController.java b/content/public/android/java/src/org/chromium/content_public/browser/NavigationController.java index cc1c0b0..2734a8a 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/NavigationController.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/NavigationController.java
@@ -4,14 +4,12 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; /** * The NavigationController Java wrapper to allow communicating with the native * NavigationController object. */ -@NullMarked public interface NavigationController { /** * @return Whether back navigation is possible from the "current entry". @@ -97,7 +95,7 @@ * Get a copy of the navigation history of NavigationController. * @return navigation history of NavigationController. */ - public @Nullable NavigationHistory getNavigationHistory(); + public NavigationHistory getNavigationHistory(); /** * Get the navigation history of NavigationController from current navigation entry index @@ -107,8 +105,7 @@ * diection. * @return navigation history by keeping above constraints. */ - public @Nullable NavigationHistory getDirectedNavigationHistory( - boolean isForward, int itemLimit); + public NavigationHistory getDirectedNavigationHistory(boolean isForward, int itemLimit); /** Clears SSL preferences for this NavigationController. */ public void clearSslPreferences(); @@ -132,7 +129,7 @@ * @param index Index to retrieve the NavigationEntry for. * @return Entry containing info about the navigation, null if the index is out of bounds. */ - public @Nullable NavigationEntry getEntryAtIndex(int index); + public NavigationEntry getEntryAtIndex(int index); /** * @return The {@link NavigationEntry} that is appropriate to be displayed in the address bar. @@ -144,7 +141,7 @@ * @return The pending {@link NavigationEntry} for this controller or {@code null} if none * exists. */ - public @Nullable NavigationEntry getPendingEntry(); + public NavigationEntry getPendingEntry(); /** * @return The index of the last committed entry. @@ -170,7 +167,6 @@ * @param key The data key. * @return The data value, or null if not found. */ - @Nullable String getEntryExtraData(int index, String key); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/NavigationEntry.java b/content/public/android/java/src/org/chromium/content_public/browser/NavigationEntry.java index d79eb98..5fe3e0f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/NavigationEntry.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/NavigationEntry.java
@@ -6,11 +6,11 @@ import android.graphics.Bitmap; -import org.chromium.build.annotations.NullMarked; +import androidx.annotation.NonNull; + import org.chromium.url.GURL; /** Represents one entry in the navigation history of a page. */ -@NullMarked public class NavigationEntry { private final int mIndex; @@ -26,9 +26,9 @@ /** Default constructor. */ public NavigationEntry( int index, - GURL url, - GURL virtualUrl, - GURL originalUrl, + @NonNull GURL url, + @NonNull GURL virtualUrl, + @NonNull GURL originalUrl, String title, Bitmap favicon, int transition, @@ -57,7 +57,7 @@ * scary data: URL or something like that. Use GetVirtualURL() for * showing to the user. */ - public GURL getUrl() { + public @NonNull GURL getUrl() { return mUrl; } @@ -72,14 +72,14 @@ * cases, so if there is no overridden display URL, it will return * the actual one. */ - public GURL getVirtualUrl() { + public @NonNull GURL getVirtualUrl() { return mVirtualUrl; } /** * @return The URL that caused this NavigationEntry to be created. */ - public GURL getOriginalUrl() { + public @NonNull GURL getOriginalUrl() { return mOriginalUrl; }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java index 063abe9b..89b61b64 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java
@@ -4,14 +4,13 @@ package org.chromium.content_public.browser; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; import org.chromium.base.UserDataHost; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.net.NetError; import org.chromium.ui.base.PageTransition; import org.chromium.url.GURL; @@ -19,16 +18,15 @@ /** JNI bridge with content::NavigationHandle */ @JNINamespace("content") -@NullMarked public class NavigationHandle { private long mNativeNavigationHandle; private boolean mIsInPrimaryMainFrame; private boolean mIsRendererInitiated; private boolean mIsSameDocument; private @PageTransition int mPageTransition; - private @Nullable GURL mUrl; - private @Nullable GURL mReferrerUrl; - private @Nullable GURL mBaseUrlForDataUrl; + private GURL mUrl; + private GURL mReferrerUrl; + private GURL mBaseUrlForDataUrl; private boolean mHasCommitted; private boolean mIsDownload; private boolean mIsErrorPage; @@ -36,7 +34,7 @@ private boolean mIsValidSearchFormUrl; private @NetError int mErrorCode; private int mHttpStatusCode; - private @Nullable Origin mInitiatorOrigin; + private Origin mInitiatorOrigin; private boolean mIsPost; private boolean mHasUserGesture; private boolean mIsRedirect; @@ -44,13 +42,13 @@ private long mNavigationId; private boolean mIsPageActivation; private boolean mIsReload; - private @Nullable UserDataHost mUserDataHost; + private UserDataHost mUserDataHost; private boolean mIsPdf; - private @Nullable String mMimeType; + private String mMimeType; private boolean mIsSaveableNavigation; public static NavigationHandle createForTesting( - GURL url, + @NonNull GURL url, boolean isRendererInitiated, @PageTransition int transition, boolean hasUserGesture) { @@ -66,7 +64,7 @@ } public static NavigationHandle createForTesting( - GURL url, + @NonNull GURL url, boolean isInPrimaryMainFrame, boolean isSameDocument, boolean isRendererInitiated, @@ -85,7 +83,7 @@ } public static NavigationHandle createForTesting( - GURL url, + @NonNull GURL url, boolean isInPrimaryMainFrame, boolean isSameDocument, boolean isRendererInitiated, @@ -125,13 +123,13 @@ @CalledByNative private void initialize( long unused_nativeNavigationHandleProxy, - GURL url, - GURL referrerUrl, - GURL baseUrlForDataUrl, + @NonNull GURL url, + @NonNull GURL referrerUrl, + @NonNull GURL baseUrlForDataUrl, boolean isInPrimaryMainFrame, boolean isSameDocument, boolean isRendererInitiated, - @Nullable Origin initiatorOrigin, + Origin initiatorOrigin, @PageTransition int transition, boolean isPost, boolean hasUserGesture, @@ -180,7 +178,7 @@ @CalledByNative @VisibleForTesting public void didFinish( - GURL url, + @NonNull GURL url, boolean isErrorPage, boolean hasCommitted, boolean isPrimaryMainFrameFragmentNavigation, @@ -222,17 +220,20 @@ * The URL the frame is navigating to. This may change during the navigation when encountering * a server redirect. */ - public @Nullable GURL getUrl() { + @NonNull + public GURL getUrl() { return mUrl; } /** The referrer URL for the navigation. */ - public @Nullable GURL getReferrerUrl() { + @NonNull + public GURL getReferrerUrl() { return mReferrerUrl; } /** Used for specifying a base URL for pages loaded via data URLs. */ - public @Nullable GURL getBaseUrlForDataUrl() { + @NonNull + public GURL getBaseUrlForDataUrl() { return mBaseUrlForDataUrl; } @@ -343,7 +344,7 @@ * Get the Origin that initiated this navigation. May be null in the case of navigations * originating from the browser. */ - public @Nullable Origin getInitiatorOrigin() { + public Origin getInitiatorOrigin() { return mInitiatorOrigin; } @@ -394,7 +395,7 @@ } /** Sets the user data host. This should not be considered part of the content API. */ - public void setUserDataHost(@Nullable UserDataHost userDataHost) { + public void setUserDataHost(UserDataHost userDataHost) { mUserDataHost = userDataHost; } @@ -404,7 +405,7 @@ } /** MIME type of the page. */ - public @Nullable String getMimeType() { + public String getMimeType() { return mMimeType; }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHistory.java b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHistory.java index 4e83e55..76f148f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHistory.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHistory.java
@@ -4,7 +4,7 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; +// import org.chromium.content_public.browser.NavigationEntry; import java.util.ArrayList; @@ -13,7 +13,6 @@ * {@link WebContents}. It is a copy and will not be updated as navigation * occurs on the source {@link WebContents}. */ -@NullMarked public class NavigationHistory { private final ArrayList<NavigationEntry> mEntries = new ArrayList<NavigationEntry>();
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/PermissionsPolicyFeature.java b/content/public/android/java/src/org/chromium/content_public/browser/PermissionsPolicyFeature.java index a93433d4..3c7a6fe 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/PermissionsPolicyFeature.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/PermissionsPolicyFeature.java
@@ -6,15 +6,12 @@ import androidx.annotation.IntDef; -import org.chromium.build.annotations.NullMarked; - import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; // TODO(crbug.com/40707311): This file should be generated with all permissions policy enum values. @IntDef({PermissionsPolicyFeature.PAYMENT, PermissionsPolicyFeature.WEB_SHARE}) @Retention(RetentionPolicy.SOURCE) -@NullMarked public @interface PermissionsPolicyFeature { int PAYMENT = org.chromium.blink.mojom.PermissionsPolicyFeature.PAYMENT; int WEB_SHARE = org.chromium.blink.mojom.PermissionsPolicyFeature.WEB_SHARE;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/RenderCoordinates.java b/content/public/android/java/src/org/chromium/content_public/browser/RenderCoordinates.java index 9f3f62c..7176c04 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/RenderCoordinates.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/RenderCoordinates.java
@@ -4,11 +4,9 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.RenderCoordinatesImpl; /** Provides dimension/coordinate information of the view rendered by content layer. */ -@NullMarked public interface RenderCoordinates { /** * @return {@link Coord} instance associated with the given {@link WebContents}.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java b/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java index 6e9c34cb0..d6fefe44 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java
@@ -4,10 +4,10 @@ package org.chromium.content_public.browser; +import androidx.annotation.Nullable; + import org.chromium.base.Callback; import org.chromium.blink.mojom.AuthenticatorStatus; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.mojo.bindings.Interface; import org.chromium.url.GURL; import org.chromium.url.Origin; @@ -17,7 +17,6 @@ /** * The RenderFrameHost Java wrapper to allow communicating with the native RenderFrameHost object. */ -@NullMarked public interface RenderFrameHost { /** The results of {@link #GetAssertionWebAuthSecurityChecks}. */ final class WebAuthSecurityChecksResults { @@ -86,7 +85,7 @@ * * @return A list of RenderFramesHosts including the current frame and all descendents. */ - public @Nullable List<RenderFrameHost> getAllRenderFrameHosts(); + public List<RenderFrameHost> getAllRenderFrameHosts(); /** * Returns whether the feature policy allows the feature in this frame. @@ -107,7 +106,7 @@ * isRenderFrameLive() if the caller is not inside the call-stack of an * IPC form the renderer (which would guarantee its existence at that time). */ - <I extends Interface, P extends Interface.Proxy> @Nullable P getInterfaceToRendererFrame( + <I extends Interface, P extends Interface.Proxy> P getInterfaceToRendererFrame( Interface.Manager<I, P> manager); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/RenderWidgetHostView.java b/content/public/android/java/src/org/chromium/content_public/browser/RenderWidgetHostView.java index 4b9dd9042..5ccc64a 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/RenderWidgetHostView.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/RenderWidgetHostView.java
@@ -5,14 +5,12 @@ package org.chromium.content_public.browser; import org.chromium.base.Callback; -import org.chromium.build.annotations.NullMarked; /** * The Android interface to allow communicating with the RenderWidgetHostViewImpl and the native * RenderWidgetHostViewAndroid object. This object allows the browser to access and control the * renderer's top level View. */ -@NullMarked public interface RenderWidgetHostView { /** * If the view is ready to draw contents to the screen. In hardware mode,
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationDelegate.java index 136fce5..956bdbc 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationDelegate.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationDelegate.java
@@ -6,13 +6,10 @@ import android.app.Activity; -import org.chromium.build.annotations.NullMarked; - /** * An interface for ScreenOrientationProvider to notify other components that orientation * preferences may change. */ -@NullMarked public interface ScreenOrientationDelegate { /** * Notify the delegate that ScreenOrientationProvider consumers would like to unlock orientation
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java index 146ab38c..4678cf3 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ScreenOrientationProvider.java
@@ -4,8 +4,8 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content.browser.ScreenOrientationProviderImpl; import org.chromium.ui.base.WindowAndroid; @@ -14,7 +14,6 @@ * TODO(boliu): This interface working with WindowAndroid does not support the use case * when an Activity (and WindowAndroid) is recreated on rotation. */ -@NullMarked public interface ScreenOrientationProvider { static ScreenOrientationProvider getInstance() { return ScreenOrientationProviderImpl.getInstance();
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectAroundCaretResult.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectAroundCaretResult.java index 1e94931..cbbeaeea 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectAroundCaretResult.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectAroundCaretResult.java
@@ -4,13 +4,10 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** * A list of parameters about a selection attempt. This data is generated from * third_party/blink/public/mojom/input/input_handler.mojom's SelectAroundCaretResult. */ -@NullMarked public class SelectAroundCaretResult { private final int mExtendedStartAdjust; private final int mExtendedEndAdjust;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionClient.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionClient.java index a40e626..03862b5 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionClient.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionClient.java
@@ -4,8 +4,6 @@ package org.chromium.content_public.browser; -import static org.chromium.build.NullUtil.assumeNonNull; - import android.content.Intent; import android.graphics.drawable.Drawable; import android.view.View.OnClickListener; @@ -13,20 +11,19 @@ import android.view.textclassifier.TextClassifier; import android.view.textclassifier.TextSelection; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; + import org.chromium.content.browser.selection.SmartSelectionClient; import org.chromium.ui.touch_selection.SelectionEventType; import java.util.List; /** Interface to a content layer client that can process and modify selection text. */ -@NullMarked public interface SelectionClient { /** The result of the text analysis. */ public static class Result { /** The surrounding text including the selection. */ - public @Nullable String text; + public String text; /** The start index of the selected text within the surrounding text. */ public int start; @@ -47,25 +44,25 @@ public int endAdjust; /** Label for the suggested menu item. */ - public @Nullable CharSequence label; + public CharSequence label; /** Icon for the suggested menu item. */ - public @Nullable Drawable icon; + public Drawable icon; /** Intent for the suggested menu item. */ - public @Nullable Intent intent; + public Intent intent; /** OnClickListener for the suggested menu item. */ - public @Nullable OnClickListener onClickListener; + public OnClickListener onClickListener; /** TextClassification for logging. */ - public @Nullable TextClassification textClassification; + public TextClassification textClassification; /** TextSelection for logging. */ - public @Nullable TextSelection textSelection; + public TextSelection textSelection; /** Icons for additional menu items. */ - public @Nullable List<Drawable> additionalIcons; + public List<Drawable> additionalIcons; /** * Convenience method mainly for testing the behaviour of {@link @@ -141,7 +138,7 @@ void cancelAllRequests(); /** Returns a SelectionEventProcessor associated with the SelectionClient or null. */ - default @Nullable SelectionEventProcessor getSelectionEventProcessor() { + default SelectionEventProcessor getSelectionEventProcessor() { return null; } @@ -158,21 +155,19 @@ * has been set with setTextClassifier, returns that object, otherwise returns the system * classifier. */ - default @Nullable TextClassifier getTextClassifier() { + default TextClassifier getTextClassifier() { return null; } /** Returns the TextClassifier which has been set with setTextClassifier(), or null. */ - default @Nullable TextClassifier getCustomTextClassifier() { + default TextClassifier getCustomTextClassifier() { return null; } /** Creates a {@link SelectionClient} instance. */ - public static @Nullable SelectionClient createSmartSelectionClient(WebContents webContents) { - SelectionPopupController selectionPopupController = - SelectionPopupController.fromWebContents(webContents); - assumeNonNull(selectionPopupController); - SelectionClient.ResultCallback callback = selectionPopupController.getResultCallback(); + public static SelectionClient createSmartSelectionClient(WebContents webContents) { + SelectionClient.ResultCallback callback = + SelectionPopupController.fromWebContents(webContents).getResultCallback(); return SmartSelectionClient.fromWebContents(callback, webContents); } }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionEventProcessor.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionEventProcessor.java index dcbce32..5f1f299 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionEventProcessor.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionEventProcessor.java
@@ -4,8 +4,5 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** Interface for selection event logging. */ -@NullMarked public interface SelectionEventProcessor {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuGroup.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuGroup.java index 69a6460..44ed6e31 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuGroup.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuGroup.java
@@ -6,14 +6,11 @@ import androidx.annotation.IdRes; -import org.chromium.build.annotations.NullMarked; - import java.util.Collection; import java.util.SortedSet; import java.util.TreeSet; /** Data class representing a group in the text selection menu. */ -@NullMarked public final class SelectionMenuGroup implements Comparable<SelectionMenuGroup> { public final @IdRes int id; public final int order;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java index 8395a492..177e815a 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionMenuItem.java
@@ -15,16 +15,14 @@ import androidx.annotation.AttrRes; import androidx.annotation.IdRes; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.content.res.AppCompatResources; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; - import java.util.SortedSet; /** Data class representing an item in the text selection menu. */ -@NullMarked public final class SelectionMenuItem implements Comparable<SelectionMenuItem> { private final @AttrRes int mIconAttr; private final @Nullable Drawable mIcon; @@ -35,7 +33,7 @@ public final int orderInCategory; public final int showAsActionFlags; public final @Nullable CharSequence contentDescription; - public final View.@Nullable OnClickListener clickListener; + public final @Nullable View.OnClickListener clickListener; public final @Nullable Intent intent; public final boolean isEnabled; public final boolean isIconTintable; @@ -50,7 +48,7 @@ int orderInCategory, int showAsActionFlags, @Nullable CharSequence contentDescription, - View.@Nullable OnClickListener clickListener, + @Nullable View.OnClickListener clickListener, @Nullable Intent intent, boolean isEnabled, boolean isIconTintable) { @@ -70,7 +68,8 @@ } /** Convenience method to return the title. */ - public @Nullable CharSequence getTitle(Context context) { + @Nullable + public CharSequence getTitle(Context context) { if (mTitleRes != 0) { return context.getString(mTitleRes); } @@ -78,7 +77,8 @@ } /** Convenience method to return the icon, if any. */ - public @Nullable Drawable getIcon(Context context) { + @Nullable + public Drawable getIcon(Context context) { if (mIconAttr != 0) { try { TypedArray a = context.obtainStyledAttributes(new int[] {mIconAttr}); @@ -111,13 +111,13 @@ private int mOrderInCategory; private int mShowAsActionFlags; private @Nullable CharSequence mContentDescription; - private View.@Nullable OnClickListener mClickListener; + private @Nullable View.OnClickListener mClickListener; private @Nullable Intent mIntent; private boolean mIsEnabled; private boolean mIsIconTintable; /** Pass in a non-null title. */ - public Builder(@Nullable CharSequence title) { + public Builder(@NonNull CharSequence title) { mTitle = title; mTitleRes = 0; initDefaults(); @@ -199,7 +199,7 @@ } /** Click listener for when the menu item is clicked. */ - public Builder setClickListener(View.@Nullable OnClickListener clickListener) { + public Builder setClickListener(@Nullable View.OnClickListener clickListener) { mClickListener = clickListener; return this; }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SelectionPopupController.java b/content/public/android/java/src/org/chromium/content_public/browser/SelectionPopupController.java index 6760a7b..828a3e9 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SelectionPopupController.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SelectionPopupController.java
@@ -7,9 +7,10 @@ import android.view.ActionMode; import android.view.textclassifier.TextClassifier; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.chromium.base.supplier.ObservableSupplier; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.selection.SelectionPopupControllerImpl; import org.chromium.content_public.browser.selection.SelectionActionMenuDelegate; import org.chromium.content_public.browser.selection.SelectionDropdownMenuDelegate; @@ -24,7 +25,6 @@ * this interface to create {@link ActionMode.Callback} instance and configure the selection * action mode tasks to their requirements. */ -@NullMarked public interface SelectionPopupController { // User action of clicking on the Share option within the selection UI. static final String UMA_MOBILE_ACTION_MODE_SHARE = "MobileActionMode.Share"; @@ -34,7 +34,7 @@ * @return {@link SelectionPopupController} object used for the give WebContents. * {@code null} if not available. */ - static @Nullable SelectionPopupController fromWebContents(WebContents webContents) { + static SelectionPopupController fromWebContents(WebContents webContents) { return SelectionPopupControllerImpl.fromWebContents(webContents); } @@ -43,7 +43,7 @@ * @return {@link SelectionPopupController} object used for the given WebContents if created. * {@code null} if not available. */ - static @Nullable SelectionPopupController fromWebContentsNoCreate(WebContents webContents) { + static SelectionPopupController fromWebContentsNoCreate(WebContents webContents) { return SelectionPopupControllerImpl.fromWebContentsNoCreate(webContents); } @@ -119,7 +119,7 @@ void setSelectionClient(SelectionClient selectionClient); /** Returns the {@link SelectionClient} in the selection popup controller. */ - public @Nullable SelectionClient getSelectionClient(); + public SelectionClient getSelectionClient(); /** Sets TextClassifier for Smart Text selection. */ void setTextClassifier(TextClassifier textClassifier); @@ -129,11 +129,9 @@ * has been set with setTextClassifier, returns that object, otherwise returns the system * classifier. */ - @Nullable TextClassifier getTextClassifier(); /** Returns the TextClassifier which has been set with setTextClassifier(), or null. */ - @Nullable TextClassifier getCustomTextClassifier(); /** @@ -153,7 +151,7 @@ void updateTextSelectionUI(boolean focused); /** Set the dropdown menu delegate that handles showing a dropdown style text selection menu. */ - void setDropdownMenuDelegate(SelectionDropdownMenuDelegate dropdownMenuDelegate); + void setDropdownMenuDelegate(@NonNull SelectionDropdownMenuDelegate dropdownMenuDelegate); /** * Set the {@link SelectionActionMenuDelegate} used by {@link SelectionPopupController} while @@ -167,6 +165,5 @@ * * @return SelectionActionMenuDelegate instance if available, Otherwise Null. */ - @Nullable SelectionActionMenuDelegate getSelectionActionMenuDelegate(); }
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SiteZoomInfo.java b/content/public/android/java/src/org/chromium/content_public/browser/SiteZoomInfo.java index 124bc68..1a905d40 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SiteZoomInfo.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SiteZoomInfo.java
@@ -4,12 +4,10 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.UsedByReflection; /** Represents the zoom information for a host. */ @UsedByReflection("host_zoom_map_impl.cc") -@NullMarked public final class SiteZoomInfo { public final String host; public final double zoomLevel;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SmartClipProvider.java b/content/public/android/java/src/org/chromium/content_public/browser/SmartClipProvider.java index b37af214..a3ce00c 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SmartClipProvider.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SmartClipProvider.java
@@ -6,7 +6,6 @@ import android.os.Handler; -import org.chromium.build.annotations.NullMarked; import org.chromium.build.annotations.UsedByReflection; /** @@ -17,7 +16,6 @@ * hierarchy. */ @UsedByReflection("ExternalOemSupport") -@NullMarked public interface SmartClipProvider { /** * Initiate extraction of text, HTML, and other information for clipping puposes (smart clip)
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SpeechRecognition.java b/content/public/android/java/src/org/chromium/content_public/browser/SpeechRecognition.java index 1638520..4da6255 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SpeechRecognition.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SpeechRecognition.java
@@ -4,7 +4,6 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.SpeechRecognitionImpl; /** @@ -12,7 +11,6 @@ * on Android. Using Android's platform recognizer offers several benefits, like good quality and * good local fallback when no data connection is available. */ -@NullMarked public final class SpeechRecognition { private SpeechRecognition() {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java index e73b8cf..800dac82 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingHandler.java
@@ -12,8 +12,7 @@ import android.view.inputmethod.EditorBoundsInfo; import android.view.inputmethod.EditorInfo; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; +import androidx.annotation.Nullable; /** * Interface that provides Stylus handwriting to text input functionality in HTML edit fields. This @@ -21,7 +20,6 @@ * in this interface outside of //content (i.e. //components/stylus_handwriting) and these are * called from the current WebContents related classes in //content. */ -@NullMarked public interface StylusWritingHandler { /** * @return true if soft keyboard can be shown during stylus writing. @@ -50,7 +48,8 @@ * @param isEditable is true if focused node is of editable type. * @param currentView the {@link View} in which the focused node changed. */ - default @Nullable EditorBoundsInfo onFocusedNodeChanged( + @Nullable + default EditorBoundsInfo onFocusedNodeChanged( Rect editableBoundsOnScreenDip, boolean isEditable, View currentView, @@ -108,7 +107,8 @@ * @param contentOffsetY the Physical on-screen Y offset amount below the browser controls * @param view the view on which to start stylus handwriting */ - default @Nullable EditorBoundsInfo onEditElementFocusedForStylusWriting( + @Nullable + default EditorBoundsInfo onEditElementFocusedForStylusWriting( Rect focusedEditBounds, Point cursorPosition, float scaleFactor,
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java index 5a0cc09..494462f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/StylusWritingImeCallback.java
@@ -7,7 +7,6 @@ import android.view.View; import org.chromium.blink.mojom.StylusWritingGestureData; -import org.chromium.build.annotations.NullMarked; /** * This interface implements the IME functionality like committing text, showing or hiding soft @@ -16,7 +15,6 @@ * implemented within //content by class responsible to provide the above Ime functions in the * current focused input field (i.e. ImeAdapterImpl). */ -@NullMarked public interface StylusWritingImeCallback { /** * Send a request to set the selection to given range.
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/SurfaceInputTransferHandlerMap.java b/content/public/android/java/src/org/chromium/content_public/browser/SurfaceInputTransferHandlerMap.java index 71acd8b3..19e9b5dd 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/SurfaceInputTransferHandlerMap.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/SurfaceInputTransferHandlerMap.java
@@ -8,14 +8,11 @@ import androidx.annotation.RequiresApi; -import org.chromium.build.annotations.NullMarked; - import java.util.Collections; import java.util.HashMap; import java.util.Map; @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) -@NullMarked public class SurfaceInputTransferHandlerMap { public final Map<Integer, InputTransferHandler> mInputTransferHandlerMap = Collections.synchronizedMap(new HashMap<Integer, InputTransferHandler>());
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/ViewEventSink.java b/content/public/android/java/src/org/chromium/content_public/browser/ViewEventSink.java index 7eb4552..3ec719e 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/ViewEventSink.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/ViewEventSink.java
@@ -8,11 +8,9 @@ import android.view.KeyEvent; import android.view.MotionEvent; -import org.chromium.build.annotations.NullMarked; import org.chromium.content.browser.ViewEventSinkImpl; /** Interface for updating content with view events. */ -@NullMarked public interface ViewEventSink { /** * Interface that consumers of WebContents must implement to allow the proper
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java index 0b47fbb..e8724658 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContents.java
@@ -9,10 +9,11 @@ import android.os.Handler; import android.os.Parcelable; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.chromium.base.Callback; import org.chromium.blink_public.input.SelectionGranularity; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.cc.input.BrowserControlsOffsetTagsInfo; import org.chromium.content_public.browser.back_forward_transition.AnimationStage; import org.chromium.ui.OverscrollRefreshHandler; @@ -43,7 +44,6 @@ * bundle.setClassLoader(WebContents.class.getClassLoader()); webContents = * bundle.get("WEBCONTENTSKEY"); */ -@NullMarked public interface WebContents extends Parcelable { /** * Interface used to transfer the internal objects (but callers should own) from WebContents. @@ -54,10 +54,9 @@ * * @param internals a {@link WebContentsInternals} object. */ - void set(@Nullable WebContentsInternals internals); + void set(WebContentsInternals internals); /** Returns {@link WebContentsInternals} object. Can be {@code null}. */ - @Nullable WebContentsInternals get(); } @@ -67,15 +66,15 @@ */ public static InternalsHolder createDefaultInternalsHolder() { return new InternalsHolder() { - private @Nullable WebContentsInternals mInternals; + private WebContentsInternals mInternals; @Override - public void set(@Nullable WebContentsInternals internals) { + public void set(WebContentsInternals internals) { mInternals = internals; } @Override - public @Nullable WebContentsInternals get() { + public WebContentsInternals get() { return mInternals; } }; @@ -100,7 +99,7 @@ ViewAndroidDelegate viewDelegate, ViewEventSink.InternalAccessDelegate accessDelegate, WindowAndroid windowAndroid, - InternalsHolder internalsHolder); + @NonNull InternalsHolder internalsHolder); /** * Clear Java WebContentsObservers so we can put this WebContents to the background. Use this @@ -124,7 +123,7 @@ * TODO(jinsukkim): This should happen through view android tree instead. * @param windowAndroid The new {@link WindowAndroid} for this {@link WebContents}. */ - void setTopLevelNativeWindow(@Nullable WindowAndroid windowAndroid); + void setTopLevelNativeWindow(WindowAndroid windowAndroid); /** * If called too early, the {@link ViewAndroidDelegate} might not be yet available. One can @@ -155,7 +154,6 @@ /** * @return The navigation controller associated with this WebContents. */ - @Nullable NavigationController getNavigationController(); /** @@ -394,9 +392,9 @@ */ void postMessageToMainFrame( MessagePayload messagePayload, - @Nullable String sourceOrigin, + String sourceOrigin, String targetOrigin, - MessagePort @Nullable [] ports); + @Nullable MessagePort[] ports); /** * Creates a message channel for sending postMessage requests and returns the ports for @@ -458,7 +456,6 @@ * @return {@link StylusWritingImeCallback} which is used to implement the IME functionality for * the Stylus handwriting feature. */ - @Nullable StylusWritingImeCallback getStylusWritingImeCallback(); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsAccessibility.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsAccessibility.java index 98292efd..861132f 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsAccessibility.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsAccessibility.java
@@ -8,8 +8,6 @@ import android.view.ViewStructure; import android.view.accessibility.AccessibilityNodeProvider; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.accessibility.WebContentsAccessibilityImpl; /** @@ -17,14 +15,13 @@ * accessibility part is lazily created upon the first request from Android framework on *{@link AccessibilityNodeProvider}, and shares the lifetime with {@link WebContents}. */ -@NullMarked public interface WebContentsAccessibility { /** * @param webContents {@link WebContents} object. * @return {@link WebContentsAccessibility} object used for the give WebContents. * {@code null} if not available. */ - static @Nullable WebContentsAccessibility fromWebContents(WebContents webContents) { + static WebContentsAccessibility fromWebContents(WebContents webContents) { return WebContentsAccessibilityImpl.fromWebContents(webContents); } @@ -41,7 +38,6 @@ * Lazily initializes native accessibility here if it's allowed. * @return The AccessibilityNodeProvider, if available, or null otherwise. */ - @Nullable AccessibilityNodeProvider getAccessibilityNodeProvider(); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsInternals.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsInternals.java index ccf9b40..c954c0e 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsInternals.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsInternals.java
@@ -4,8 +4,6 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; - /** * Marker interface for WebContents internal objects that should be managed by * embedders. Embedders should call {@link WebContents#setInternalHolder} with @@ -15,5 +13,4 @@ * address the requirements that there not be any gc root to webview in content * layer after webview gets detached from view tree. See https://crbug.com/755174. */ -@NullMarked public interface WebContentsInternals {}
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java index 259cb70..e3d67c77 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsObserver.java
@@ -5,11 +5,10 @@ package org.chromium.content_public.browser; import androidx.annotation.IntDef; +import androidx.annotation.Nullable; import org.chromium.base.TerminationStatus; import org.chromium.blink.mojom.ViewportFit; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.mojom.VirtualKeyboardMode; import org.chromium.url.GURL; @@ -22,12 +21,11 @@ * This class receives callbacks that act as hooks for various a native web contents events related * to loading a url. A single web contents can have multiple WebContentObservers. */ -@NullMarked public abstract class WebContentsObserver { // TODO(jdduke): Remove the destroy method and hold observer embedders // responsible for explicit observer detachment. // Using a weak reference avoids cycles that might prevent GC of WebView's WebContents. - protected @Nullable WeakReference<WebContents> mWebContents; + protected WeakReference<WebContents> mWebContents; public WebContentsObserver(WebContents webContents) { mWebContents = new WeakReference<WebContents>(webContents);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsStatics.java b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsStatics.java index 77247d8..65baab6 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/WebContentsStatics.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/WebContentsStatics.java
@@ -4,18 +4,15 @@ package org.chromium.content_public.browser; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.content.browser.framehost.RenderFrameHostDelegate; import org.chromium.content.browser.framehost.RenderFrameHostImpl; /** Static public methods for WebContents. */ -@NullMarked public class WebContentsStatics { /** * @return The WebContents associated with the RenderFrameHost. This can be null. */ - public static @Nullable WebContents fromRenderFrameHost(RenderFrameHost rfh) { + public static WebContents fromRenderFrameHost(RenderFrameHost rfh) { RenderFrameHostDelegate delegate = ((RenderFrameHostImpl) rfh).getRenderFrameHostDelegate(); if (delegate == null || !(delegate instanceof WebContents)) { return null;
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java index 873984d..8d338432 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionActionMenuDelegate.java
@@ -6,7 +6,8 @@ import android.content.pm.ResolveInfo; -import org.chromium.build.annotations.NullMarked; +import androidx.annotation.NonNull; + import org.chromium.content_public.browser.SelectionMenuItem; import org.chromium.content_public.browser.SelectionPopupController; @@ -16,7 +17,6 @@ * Interface for modifying text selection menu functionality. Content embedders can provide * implementation to provide text selection menu item custom behavior. */ -@NullMarked public interface SelectionActionMenuDelegate { /** * Allows the delegate make changes to default menu items created by {@link @@ -35,7 +35,7 @@ List<SelectionMenuItem.Builder> menuItemBuilders, boolean isSelectionPassword, boolean isSelectionReadOnly, - String selectedText); + @NonNull String selectedText); /** * Allows filtering of text processing activities. @@ -52,6 +52,7 @@ * * @return list of additional non selection secondary menu items if any. */ + @NonNull List<SelectionMenuItem> getAdditionalNonSelectionItems(); /** @@ -61,6 +62,7 @@ * * @return list of additional text selection menu items handling text processing if any. */ + @NonNull List<SelectionMenuItem> getAdditionalTextProcessingItems(); /**
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionDropdownMenuDelegate.java b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionDropdownMenuDelegate.java index 649e84f..d57f85a7 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionDropdownMenuDelegate.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/selection/SelectionDropdownMenuDelegate.java
@@ -10,10 +10,9 @@ import android.view.View; import androidx.annotation.IdRes; +import androidx.annotation.Nullable; import androidx.annotation.Px; -import org.chromium.build.annotations.NullMarked; -import org.chromium.build.annotations.Nullable; import org.chromium.ui.modelutil.MVCListAdapter; import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.PropertyModel; @@ -23,7 +22,6 @@ * Each content embedder will need to provide an implementation of this to enable * the behavior when showing the context menu for mouse & trackpad. */ -@NullMarked public interface SelectionDropdownMenuDelegate { /** Listener for handling list item click events. */ @FunctionalInterface @@ -70,7 +68,8 @@ * Returns the {@link android.view.View.OnClickListener} for an item if there is * one. Otherwise returns null. */ - View.@Nullable OnClickListener getClickListener(PropertyModel itemModel); + @Nullable + View.OnClickListener getClickListener(PropertyModel itemModel); /** Returns a divider menu item to be shown in the dropdown menu. */ ListItem getDivider(); @@ -91,7 +90,7 @@ * @return ListItem with text and optionally an icon. */ ListItem getMenuItem( - @Nullable String title, + String title, @Nullable String contentDescription, @IdRes int groupId, @IdRes int id, @@ -99,6 +98,6 @@ boolean isIconTintable, boolean groupContainsIcon, boolean enabled, - View.@Nullable OnClickListener clickListener, + @Nullable View.OnClickListener clickListener, @Nullable Intent intent); }
diff --git a/content/public/android/java/src/org/chromium/content_public/common/InputUtils.java b/content/public/android/java/src/org/chromium/content_public/common/InputUtils.java index 2acd22e..5d87f3c 100644 --- a/content/public/android/java/src/org/chromium/content_public/common/InputUtils.java +++ b/content/public/android/java/src/org/chromium/content_public/common/InputUtils.java
@@ -6,11 +6,9 @@ import android.os.Build; -import org.chromium.build.annotations.NullMarked; import org.chromium.content_public.browser.ContentFeatureList; import org.chromium.content_public.browser.ContentFeatureMap; -@NullMarked public class InputUtils { public static boolean isTransferInputToVizSupported() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
diff --git a/content/public/android/junit/src/org/chromium/content/browser/input/OngoingGestureTest.java b/content/public/android/junit/src/org/chromium/content/browser/input/OngoingGestureTest.java index b4927716..fc2d5e7 100644 --- a/content/public/android/junit/src/org/chromium/content/browser/input/OngoingGestureTest.java +++ b/content/public/android/junit/src/org/chromium/content/browser/input/OngoingGestureTest.java
@@ -25,21 +25,14 @@ private static final String GESTURE_RESULT_HISTOGRAM = "InputMethod.StylusHandwriting.GestureResult"; - private static OngoingGesture makeOngoingGesture() { - return new OngoingGesture( - new org.chromium.blink.mojom.StylusWritingGestureData(), - (command) -> {}, - (value) -> {}); - } - @Test @SmallTest public void testGestureRequestsHaveIncreasingIDs() { ThreadUtils.runOnUiThreadBlocking( () -> { - OngoingGesture baseline = makeOngoingGesture(); - OngoingGesture request1 = makeOngoingGesture(); - OngoingGesture request2 = makeOngoingGesture(); + OngoingGesture baseline = new OngoingGesture(null, null, null); + OngoingGesture request1 = new OngoingGesture(null, null, null); + OngoingGesture request2 = new OngoingGesture(null, null, null); assertEquals(baseline.getId() + 1, request1.getId()); assertEquals(baseline.getId() + 2, request2.getId()); }); @@ -47,10 +40,50 @@ @Test @SmallTest + public void testGestureRequestLogsUnknownWithNullExecutor() { + ThreadUtils.runOnUiThreadBlocking( + () -> { + var histogram = + HistogramWatcher.newSingleRecordWatcher( + GESTURE_RESULT_HISTOGRAM, HandwritingGestureResult.UNKNOWN); + OngoingGesture request = + new OngoingGesture( + new org.chromium.blink.mojom.StylusWritingGestureData(), + null, + (value) -> {}); + request.onGestureHandled(HandwritingGestureResult.SUCCESS); + histogram.assertExpected(); + }); + } + + @Test + @SmallTest + public void testGestureRequestLogsUnknownWithNullIntConsumer() { + ThreadUtils.runOnUiThreadBlocking( + () -> { + var histogram = + HistogramWatcher.newSingleRecordWatcher( + GESTURE_RESULT_HISTOGRAM, HandwritingGestureResult.UNKNOWN); + OngoingGesture request = + new OngoingGesture( + new org.chromium.blink.mojom.StylusWritingGestureData(), + (command) -> {}, + null); + request.onGestureHandled(HandwritingGestureResult.FAILED); + histogram.assertExpected(); + }); + } + + @Test + @SmallTest public void testGestureRequestLogsCorrectResult() { ThreadUtils.runOnUiThreadBlocking( () -> { - OngoingGesture request = makeOngoingGesture(); + OngoingGesture request = + new OngoingGesture( + new org.chromium.blink.mojom.StylusWritingGestureData(), + (command) -> {}, + (value) -> {}); var histogram = HistogramWatcher.newSingleRecordWatcher(
diff --git a/content/public/android/junit/src/org/chromium/content/browser/selection/SelectionPopupControllerTest.java b/content/public/android/junit/src/org/chromium/content/browser/selection/SelectionPopupControllerTest.java index 1ca3127..f039ee7 100644 --- a/content/public/android/junit/src/org/chromium/content/browser/selection/SelectionPopupControllerTest.java +++ b/content/public/android/junit/src/org/chromium/content/browser/selection/SelectionPopupControllerTest.java
@@ -193,7 +193,7 @@ when(mWindowAndroid.getContext()).thenReturn(mWeakContext); mController = SelectionPopupControllerImpl.createForTesting(mWebContents, mPopupController); - GestureListenerManagerImpl.setInstanceForTesting(mGestureStateListenerManager); + when(mController.getGestureListenerManager()).thenReturn(mGestureStateListenerManager); } @Test
diff --git a/docs/website b/docs/website index 4d21409..bee1494 160000 --- a/docs/website +++ b/docs/website
@@ -1 +1 @@ -Subproject commit 4d214097ba7305ec2b3f2dfcf0aa4fd2104c960a +Subproject commit bee1494dcbf575cee5e4fe5b55712241e8417fef
diff --git a/gpu/config/device_perf_info.h b/gpu/config/device_perf_info.h index 30d613d..dfe6a95 100644 --- a/gpu/config/device_perf_info.h +++ b/gpu/config/device_perf_info.h
@@ -34,7 +34,8 @@ kGen11 = 11, kGen12 = 12, kGen13 = 13, - kMaxValue = kGen13, + kGen14 = 14, + kMaxValue = kGen14, }; enum class HasDiscreteGpu {
diff --git a/gpu/config/gpu_control_list_format.txt b/gpu/config/gpu_control_list_format.txt index 2a080dd1..8d75f7f 100644 --- a/gpu/config/gpu_control_list_format.txt +++ b/gpu/config/gpu_control_list_format.txt
@@ -86,7 +86,7 @@ // "coffeelake", "whiskeylake", "cometlake", "cannonlake", "icelake", // "elkhartlake", "jasperlake", "tigerlake", "rocketlake", "DG1", // "alderlake", "alchemist", "raptorlake", "meteorlake", "arrowlake", -// "lunarlake", "battlemage". +// "lunarlake", "battlemage", "pantherlake". // 30. "hardware_overlay" is either "supported" or "unsupported". Currently it // only applies on Windows where hardware overlays may be supported on // certain Intel GPUs. By default it's "dont_care" and there is no need to
diff --git a/gpu/config/gpu_info.h b/gpu/config/gpu_info.h index c5fc5d7..54ada449 100644 --- a/gpu/config/gpu_info.h +++ b/gpu/config/gpu_info.h
@@ -85,8 +85,10 @@ // Intel 13th gen kLunarlake = 29, kBattlemage = 31, + // Intel 14th gen + kPantherlake = 32, // Please also update |gpu_series_map| in process_json.py. - kMaxValue = kBattlemage, + kMaxValue = kPantherlake, }; // Video profile. This *must* match media::VideoCodecProfile.
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc index 3921b6d..52091a9 100644 --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc
@@ -923,6 +923,8 @@ return IntelGpuSeriesType::kLunarlake; case 0xE200: return IntelGpuSeriesType::kBattlemage; + case 0xB000: + return IntelGpuSeriesType::kPantherlake; default: break; } @@ -975,6 +977,8 @@ case IntelGpuSeriesType::kLunarlake: case IntelGpuSeriesType::kBattlemage: return "13"; + case IntelGpuSeriesType::kPantherlake: + return "14"; default: break; }
diff --git a/gpu/config/process_json.py b/gpu/config/process_json.py index dc0eec9..6d6fa93 100755 --- a/gpu/config/process_json.py +++ b/gpu/config/process_json.py
@@ -741,7 +741,8 @@ 'meteorlake': 'kMeteorlake', 'arrowlake': 'kArrowlake', 'lunarlake': 'kLunarlake', - 'battlemage': 'kBattlemage' + 'battlemage': 'kBattlemage', + 'pantherlake': 'kPantherlake' } for series in intel_gpu_series_list: assert series in intel_gpu_series_map
diff --git a/infra/config/generated/builders/ci/android-binary-size-generator/gn-args.json b/infra/config/generated/builders/ci/android-binary-size-generator/gn-args.json index 842a24b2..eeed677b 100644 --- a/infra/config/generated/builders/ci/android-binary-size-generator/gn-args.json +++ b/infra/config/generated/builders/ci/android-binary-size-generator/gn-args.json
@@ -1,7 +1,6 @@ { "gn_args": { "android_channel": "stable", - "chrome_pgo_phase": 0, "debuggable_apks": false, "ffmpeg_branding": "Chrome", "is_high_end_android_secondary_toolchain": false,
diff --git a/infra/config/generated/builders/try/android-binary-size/gn-args.json b/infra/config/generated/builders/try/android-binary-size/gn-args.json index 842a24b2..eeed677b 100644 --- a/infra/config/generated/builders/try/android-binary-size/gn-args.json +++ b/infra/config/generated/builders/try/android-binary-size/gn-args.json
@@ -1,7 +1,6 @@ { "gn_args": { "android_channel": "stable", - "chrome_pgo_phase": 0, "debuggable_apks": false, "ffmpeg_branding": "Chrome", "is_high_end_android_secondary_toolchain": false,
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index 73bc0b3..6070824 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -20736,9 +20736,8 @@ name: "Linux ChromiumOS MSan Builder" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" - dimensions: "cores:16" dimensions: "cpu:x86-64" - dimensions: "free_space:standard" + dimensions: "free_space:high" dimensions: "os:Ubuntu-22.04" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:1"
diff --git a/infra/config/gn_args/gn_args.star b/infra/config/gn_args/gn_args.star index 6502db2..d1a9c191 100644 --- a/infra/config/gn_args/gn_args.star +++ b/infra/config/gn_args/gn_args.star
@@ -1099,13 +1099,6 @@ ) gn_args.config( - name = "pgo_phase_0", - args = { - "chrome_pgo_phase": 0, - }, -) - -gn_args.config( name = "pgo_phase_1", args = { "chrome_pgo_phase": 1,
diff --git a/infra/config/subprojects/chromium/ci/chromium.android.star b/infra/config/subprojects/chromium/ci/chromium.android.star index 8b48fd0..8c6b551 100644 --- a/infra/config/subprojects/chromium/ci/chromium.android.star +++ b/infra/config/subprojects/chromium/ci/chromium.android.star
@@ -1287,8 +1287,6 @@ # Allows the bot to measure low-end arm32 and high-end arm64 using # a single build. "android_low_end_secondary_toolchain", - # Disable PGO due to too much volatility: https://crbug.com/344608183 - "pgo_phase_0", ], ), builderless = False,
diff --git a/infra/config/subprojects/chromium/ci/chromium.memory.star b/infra/config/subprojects/chromium/ci/chromium.memory.star index ca1e082..ec2953d7 100644 --- a/infra/config/subprojects/chromium/ci/chromium.memory.star +++ b/infra/config/subprojects/chromium/ci/chromium.memory.star
@@ -7,7 +7,7 @@ load("//lib/branches.star", "branches") load("//lib/builder_config.star", "builder_config") load("//lib/builder_health_indicators.star", "health_spec") -load("//lib/builders.star", "cpu", "gardener_rotations", "os", "siso") +load("//lib/builders.star", "builders", "cpu", "gardener_rotations", "os", "siso") load("//lib/ci.star", "ci") load("//lib/consoles.star", "consoles") load("//lib/gn_args.star", "gn_args") @@ -507,8 +507,9 @@ "x64", ], ), - cores = 16, + cores = None, ssd = True, + free_space = builders.free_space.high, console_view_entry = consoles.console_view_entry( category = "cros|msan", short_name = "bld",
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star index 0a73f0b..a88b161 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.android.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.android.star
@@ -451,8 +451,6 @@ # Allows the bot to measure low-end arm32 and high-end arm64 using # a single build. "android_low_end_secondary_toolchain", - # Disable PGO due to too much volatility: https://crbug.com/344608183 - "pgo_phase_0", ], ), builderless = not settings.is_main,
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn index 6615926..3dc8f56b8 100644 --- a/ios/chrome/app/BUILD.gn +++ b/ios/chrome/app/BUILD.gn
@@ -376,7 +376,9 @@ ":app_lifetime_observer", ":app_metrics_app_state_agent", ":blocking_scene_commands", + ":change_profile_animator", ":change_profile_commands", + ":change_profile_continuation", ":enterprise_app_agent", ":fast_app_terminate_buildflags", ":launch_screen_ui", @@ -554,6 +556,25 @@ source_set("change_profile_commands") { sources = [ "change_profile_commands.h" ] + deps = [ ":change_profile_continuation" ] +} + +source_set("change_profile_continuation") { + sources = [ "change_profile_continuation.h" ] + deps = [ "//base" ] +} + +source_set("change_profile_animator") { + sources = [ + "change_profile_animator.h", + "change_profile_animator.mm", + ] + deps = [ + ":change_profile_commands", + "//base", + "//ios/chrome/app/profile", + "//ios/chrome/browser/shared/coordinator/scene:scene_state_header", + ] } source_set("blocking_scene_commands") {
diff --git a/ios/chrome/app/change_profile_animator.h b/ios/chrome/app/change_profile_animator.h new file mode 100644 index 0000000..0bf153e --- /dev/null +++ b/ios/chrome/app/change_profile_animator.h
@@ -0,0 +1,46 @@ +// 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. + +#ifndef IOS_CHROME_APP_CHANGE_PROFILE_ANIMATOR_H_ +#define IOS_CHROME_APP_CHANGE_PROFILE_ANIMATOR_H_ + +#import <UIKit/UIKit.h> + +#import "base/functional/callback_forward.h" +#import "ios/chrome/app/change_profile_commands.h" +#import "ios/chrome/app/profile/profile_init_stage.h" + +@class SceneState; + +// Callback invoked when the profile has reached the requested init stage. +using ChangeProfileCompletion = base::OnceCallback<void(SceneState*)>; + +// Object responsible for animating the transition between profile for a +// given scene for MainController. +@interface ChangeProfileAnimator : NSObject + +- (instancetype)initWithViewController:(UIViewController*)viewController + NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +// Starts the transition animation. This method may not be called (if the +// profile won't change though it is not yet ready). +- (void)startAnimation; + +// Starts waiting for the SceneState's owning ProfileState to reach the +// corresponding initialisation stage. +// +// When the initialisation stage is reached, it will stop the animation +// (if started) and then invoke the completion with the SceneState. +// +// Once this is called the animator will ensure it is kept alive until the +// ProfileState reach the stage or is deallocated. +- (void)waitForSceneState:(SceneState*)sceneState + toInitReachStage:(ProfileInitStage)initStage + completion:(ChangeProfileCompletion)completion; + +@end + +#endif // IOS_CHROME_APP_CHANGE_PROFILE_ANIMATOR_H_
diff --git a/ios/chrome/app/change_profile_animator.mm b/ios/chrome/app/change_profile_animator.mm new file mode 100644 index 0000000..95e5c4f --- /dev/null +++ b/ios/chrome/app/change_profile_animator.mm
@@ -0,0 +1,106 @@ +// 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. + +#import "ios/chrome/app/change_profile_animator.h" + +#import <objc/runtime.h> + +#import "base/functional/bind.h" +#import "base/functional/callback.h" +#import "base/task/sequenced_task_runner.h" +#import "ios/chrome/app/profile/profile_state.h" +#import "ios/chrome/app/profile/profile_state_observer.h" +#import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" + +@interface ChangeProfileAnimator () <ProfileStateObserver> +@end + +@implementation ChangeProfileAnimator { + __weak UIViewController* _viewController; + __weak SceneState* _sceneState; + ProfileInitStage _minimumInitStage; + ChangeProfileCompletion _completion; +} + +- (instancetype)initWithViewController:(UIViewController*)viewController { + if ((self = [super init])) { + _viewController = viewController; + } + return self; +} + +- (void)startAnimation { + // TODO(crbug.com/385091409): implement an animation. This is not possible + // for the moment because the UIWindow's rootViewController is directly + // accessed and changed by the UI code. +} + +- (void)waitForSceneState:(SceneState*)sceneState + toInitReachStage:(ProfileInitStage)initStage + completion:(ChangeProfileCompletion)completion { + DCHECK(completion); + DCHECK(sceneState.profileState); + + _sceneState = sceneState; + _completion = std::move(completion); + _minimumInitStage = initStage; + + ProfileState* profileState = sceneState.profileState; + if (profileState.initStage < _minimumInitStage) { + // Attach self as an associated object of the ProfileState. This ensures + // that the ChangeProfileAnimator will not be destroyed until the profile + // is ready or destroyed. + objc_setAssociatedObject(profileState, [self associationKey], self, + OBJC_ASSOCIATION_RETAIN_NONATOMIC); + [profileState addObserver:self]; + return; + } + + [self profileReachedInitStage]; +} + +#pragma mark ProfileStateObserver + +- (void)profileState:(ProfileState*)profileState + didTransitionToInitStage:(ProfileInitStage)nextInitStage + fromInitStage:(ProfileInitStage)fromInitStage { + if (nextInitStage >= _minimumInitStage) { + [self profileReachedInitStage]; + + // Stop observing the ProfileState and detach self. This may cause the + // object to be deallocated, thus nothing should happen after this line. + [profileState removeObserver:self]; + objc_setAssociatedObject(profileState, [self associationKey], nil, + OBJC_ASSOCIATION_RETAIN_NONATOMIC); + } +} + +#pragma mark Private methods + +// Stops the animation (if it has been started). No-op if the animation +// has not been started or already stopped. +- (void)stopAnimation { + // TODO(crbug.com/385091409): implement an animation. This is not possible + // for the moment because the UIWindow's rootViewController is directly + // accessed and changed by the UI code. +} + +- (void)profileReachedInitStage { + [self stopAnimation]; + + // Ensure that the completion is always invoked asynchronously, even if + // the profile was already in the expected stage. This does not strongly + // captures SceneState since _sceneDelete is a weak pointer. + base::SequencedTaskRunner::GetCurrentDefault()->PostTask( + FROM_HERE, base::BindOnce(std::move(_completion), _sceneState)); +} + +// Returns a unique pointer that can be used to attach the current instance +// to another object as an Objective-C associated object. This pointer has +// to be different for each instance of ChangeProfileAnimator. +- (void*)associationKey { + return &_minimumInitStage; +} + +@end
diff --git a/ios/chrome/app/change_profile_commands.h b/ios/chrome/app/change_profile_commands.h index 2e209d65..b4669962 100644 --- a/ios/chrome/app/change_profile_commands.h +++ b/ios/chrome/app/change_profile_commands.h
@@ -5,37 +5,14 @@ #ifndef IOS_CHROME_APP_CHANGE_PROFILE_COMMANDS_H_ #define IOS_CHROME_APP_CHANGE_PROFILE_COMMANDS_H_ -#import <UIKit/UIKit.h> +#import <Foundation/Foundation.h> + +#import <string_view> + +#import "ios/chrome/app/change_profile_continuation.h" @class SceneState; -// Enum used to represent failure to change profile. -enum class ChangeProfileFailure { - kFeatureDisabled, - kApplicationNotReady, - kInvalidSceneStateId, - kInvalidProfileName, -}; - -// Protocol for the object invoked during the steps of the profile switching. -@protocol ChangeProfileObserving - -// Invoked if the request to change profile failed. -- (void)operationFailed:(ChangeProfileFailure)failure; - -// Invoked when the application is ready to change the profile. The view -// controller can be used to animate the transition. -- (void)willStartOperation:(UIViewController*)viewController; - -// Invoked when the profile has been loaded and the scene is ready for -// further use (i.e. the UI is started). The profile may have not yet -// reached the ProfileInitStage::kFinal stage if there are any blocking -// stage (such as FRE, search engine, ...). -- (void)operationDidComplete:(UIViewController*)viewController - withSceneState:(SceneState*)sceneState; - -@end - // App-level commands related to switching profiles. @protocol ChangeProfileCommands @@ -51,12 +28,11 @@ // is disabled or not available (on iOS < 17), if creating the profile is // impossible or fails, or if no scene named `sceneIdentifier` exists. // -// The observer will be strongly retained until the operation terminates, -// either successfully or with an error. It should not retain any object -// that can be invalidated when a profile is unloaded. -- (void)changeProfile:(NSString*)profileName - forScene:(NSString*)sceneIdentifier - observer:(id<ChangeProfileObserving>)observer; +// The continuations will be called asynchronously, in sequence, when the +// profile has been switched for the SceneState. +- (void)changeProfile:(std::string_view)profileName + forScene:(SceneState*)sceneState + continuations:(NSArray<id<ChangeProfileContinuation>>*)continuations; @end
diff --git a/ios/chrome/app/change_profile_continuation.h b/ios/chrome/app/change_profile_continuation.h new file mode 100644 index 0000000..01ed38f --- /dev/null +++ b/ios/chrome/app/change_profile_continuation.h
@@ -0,0 +1,33 @@ +// 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. + +#ifndef IOS_CHROME_APP_CHANGE_PROFILE_CONTINUATION_H_ +#define IOS_CHROME_APP_CHANGE_PROFILE_CONTINUATION_H_ + +#import <Foundation/Foundation.h> + +#import "base/functional/callback_forward.h" + +@class SceneState; + +// Represents an action to execute after the profile for a SceneState +// has been changed. +@protocol ChangeProfileContinuation <NSObject> + +// Invoked when the SceneState has transitioned to the new Profile and +// the profile has reached the ProfileInitStage::kUIReady (or higher) +// stage. +// +// Must call the completion on the current sequence when the action this +// ChangeProfileContinuation represents is complete (e.g. sign-in, ...). +// +// The completion may be called synchronously or asynchronously if the +// operation needs to block (e.g. needs to wait for some other external +// condition before it can resume). +- (void)executeWithSceneState:(SceneState*)sceneState + completion:(base::OnceClosure)completion; + +@end + +#endif // IOS_CHROME_APP_CHANGE_PROFILE_CONTINUATION_H_
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm index 993b455..68b9548 100644 --- a/ios/chrome/app/main_controller.mm +++ b/ios/chrome/app/main_controller.mm
@@ -4,13 +4,12 @@ #import "ios/chrome/app/main_controller.h" -#import <objc/runtime.h> - #import <memory> #import "base/apple/bundle_locations.h" #import "base/apple/foundation_util.h" #import "base/barrier_closure.h" +#import "base/check_op.h" #import "base/feature_list.h" #import "base/functional/callback.h" #import "base/functional/concurrent_closures.h" @@ -22,6 +21,7 @@ #import "base/metrics/user_metrics_action.h" #import "base/path_service.h" #import "base/strings/sys_string_conversions.h" +#import "base/task/bind_post_task.h" #import "base/task/sequenced_task_runner.h" #import "components/component_updater/component_updater_service.h" #import "components/component_updater/installer_policies/autofill_states_component_installer.h" @@ -47,6 +47,7 @@ #import "ios/chrome/app/background_refresh/background_refresh_app_agent.h" #import "ios/chrome/app/background_refresh/test_refresher.h" #import "ios/chrome/app/blocking_scene_commands.h" +#import "ios/chrome/app/change_profile_animator.h" #import "ios/chrome/app/change_profile_commands.h" #import "ios/chrome/app/deferred_initialization_runner.h" #import "ios/chrome/app/deferred_initialization_task_names.h" @@ -275,85 +276,42 @@ sessions_storage_util::ResetDiscardedSessions(); } -} // namespace +// Runs the continuation at `index` with SceneState. +void RunContinuationAtIndex( + NSArray<id<ChangeProfileContinuation>>* continuations, + NSUInteger index, + __weak SceneState* scene) { + CHECK(continuations); + CHECK_LT(index, continuations.count); -// Helper class allowing to wait for the ProfileState to reach a specific -// initialisation stage. -@interface ProfileInitObserver : NSObject <ProfileStateObserver> - -+ (void)waitForProfile:(ProfileState*)profileState - toReachInitStage:(ProfileInitStage)initStage - completion:(ProceduralBlock)completion; - -@end - -@interface ProfileInitObserver () - -- (void)waitForProfile:(ProfileState*)profileState - toReachInitStage:(ProfileInitStage)initStage - completion:(ProceduralBlock)completion; - -@end - -@implementation ProfileInitObserver { - ProceduralBlock _completion; - ProfileInitStage _initStage; -} - -+ (void)waitForProfile:(ProfileState*)profileState - toReachInitStage:(ProfileInitStage)initStage - completion:(ProceduralBlock)completion { - // If the init stage is already reached, skip the creation of the - // ProfileInitObserver (as it would be immediately destroyed). - if (profileState.initStage >= initStage) { - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(completion)); + // If the SceneState is nil, then do not run the continuations. This + // can happen for multiple reasons such as the app terminating, the + // user closing one of the windows, another profile change, ... + SceneState* strong_scene = scene; + if (!strong_scene) { return; } - // The ProfileInitObserver instance attaches itself as an associated object - // of the ProfileState, taking care of destroying itself when the init stage - // is reached. There is no need to retain it here. - ProfileInitObserver* observer = [[self alloc] init]; - [observer waitForProfile:profileState - toReachInitStage:initStage - completion:completion]; -} - -- (void)waitForProfile:(ProfileState*)profileState - toReachInitStage:(ProfileInitStage)initStage - completion:(ProceduralBlock)completion { - DCHECK_LT(profileState.initStage, initStage); - _completion = completion; - _initStage = initStage; - - // Ensure the object lifetime is tied to that of ProfileState. - objc_setAssociatedObject(profileState, [self associationKey], self, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); - [profileState addObserver:self]; -} - -- (void)profileState:(ProfileState*)profileState - didTransitionToInitStage:(ProfileInitStage)nextInitStage - fromInitStage:(ProfileInitStage)fromInitStage { - if (nextInitStage == _initStage) { - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(std::exchange(_completion, nil))); - - // Stop observing the ProfileState and detach self. This will cause - // the object to be deallocated, thus nothing should happen after - // this line. - [profileState removeObserver:self]; - objc_setAssociatedObject(profileState, [self associationKey], nil, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); + // If there are other continuations after this one, create a closure + // that will invoke the next one, and pass it to the continuation to + // run. It needs to bind the weak pointer to the SceneState, not the + // strong pointer. Use BindPostTask(...) since the implementation of + // -executeWithSceneState:completion: may not call the completion + // asynchronously. + base::OnceClosure closure = base::DoNothing(); + if (index + 1 < continuations.count) { + closure = + base::BindPostTask(base::SequencedTaskRunner::GetCurrentDefault(), + base::BindOnce(&RunContinuationAtIndex, + continuations, index + 1, scene)); } + + id<ChangeProfileContinuation> continuation = continuations[index]; + [continuation executeWithSceneState:strong_scene + completion:std::move(closure)]; } -- (void*)associationKey { - return &_initStage; -} - -@end +} // namespace @interface MainController () <AppStateObserver, BlockingSceneCommands, @@ -1571,78 +1529,62 @@ #pragma mark - ChangeProfileCommands -- (void)changeProfile:(NSString*)profileName - forScene:(NSString*)sceneIdentifier - observer:(id<ChangeProfileObserving>)observer { - if (!AreSeparateProfilesForManagedAccountsEnabled()) { - // Not supported when kSeparateProfilesForManagedAccounts is disabled or not - // available. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(^{ - [observer operationFailed:ChangeProfileFailure::kFeatureDisabled]; - })); - return; +- (void)changeProfile:(std::string_view)profileName + forScene:(SceneState*)sceneState + continuations:(NSArray<id<ChangeProfileContinuation>>*)continuations { + ChangeProfileCompletion completion = base::DoNothing(); + if (continuations.count != 0) { + completion = base::BindOnce(&RunContinuationAtIndex, continuations, 0); } + [self changeProfile:profileName + forScene:sceneState + completion:std::move(completion)]; +} - if (self.appState.initStage < AppInitStage::kFinal) { - // Cannot change profile before the MainController is done with loading - // the initial profiles. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(^{ - [observer operationFailed:ChangeProfileFailure::kApplicationNotReady]; - })); - return; - } +#pragma mark - Private - SceneState* sceneState = [self sceneForIdentifier:sceneIdentifier]; - if (sceneState == nil) { - // No scene with that identifier, cannot change the profile. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(^{ - [observer operationFailed:ChangeProfileFailure::kInvalidSceneStateId]; - })); - return; - } +- (void)changeProfile:(std::string_view)profileName + forScene:(SceneState*)sceneState + completion:(ChangeProfileCompletion)completion { + CHECK(AreSeparateProfilesForManagedAccountsEnabled()); + CHECK_EQ(self.appState.initStage, AppInitStage::kFinal); + + CHECK(sceneState); + CHECK([self.appState.connectedScenes containsObject:sceneState]); ProfileManagerIOS* manager = GetApplicationContext()->GetProfileManager(); - const std::string wantedProfileName = base::SysNSStringToUTF8(profileName); - - if (!manager->HasProfileWithName(wantedProfileName) && - !manager->CanCreateProfileWithName(wantedProfileName)) { - // The profile does not exists and cannot be created, so cannot change - // the Scene to use that profile. - base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(^{ - [observer operationFailed:ChangeProfileFailure::kInvalidProfileName]; - })); - return; - } + CHECK(manager->HasProfileWithName(profileName) || + manager->CanCreateProfileWithName(profileName)); // Get the SceneDelegate from the SceneState. UIWindowScene* scene = sceneState.scene; SceneDelegate* sceneDelegate = base::apple::ObjCCast<SceneDelegate>(scene.delegate); - DCHECK(sceneDelegate); + CHECK(sceneDelegate); UIWindow* window = sceneDelegate.window; UIViewController* rootViewController = window.rootViewController; - [observer willStartOperation:rootViewController]; + + ChangeProfileAnimator* animator = + [[ChangeProfileAnimator alloc] initWithViewController:rootViewController]; ProfileAttributesStorageIOS* storage = manager->GetProfileAttributesStorage(); - const std::string actualProfileName = storage->GetProfileNameForSceneID( - base::SysNSStringToUTF8(sceneIdentifier)); + const std::string sceneIdentifier = + base::SysNSStringToUTF8(sceneState.sceneSessionID); // If the SceneState is not associated with the correct profile, then // perform the necessary work to switch the profile used for the scene. - if (actualProfileName != wantedProfileName) { + if (profileName != storage->GetProfileNameForSceneID(sceneIdentifier)) { + // The UI has to be destroyed, start animating. + [animator startAnimation]; + // Ensure the profile exists. - if (!storage->HasProfileWithName(wantedProfileName)) { - storage->AddProfile(wantedProfileName); + if (!storage->HasProfileWithName(profileName)) { + storage->AddProfile(profileName); } // Set the mapping between profile and scene. - storage->SetProfileNameForSceneID( - base::SysNSStringToUTF8(sceneState.sceneSessionID), wantedProfileName); + storage->SetProfileNameForSceneID(sceneIdentifier, profileName); // Pretend the scene has been disconnected, then reconnect it. const SceneActivationLevel savedLevel = sceneState.activationLevel; @@ -1679,37 +1621,9 @@ } // Wait for the profile to complete its initialisation. - __weak SceneState* weakSceneState = sceneState; - __weak UIViewController* weakViewController = rootViewController; - [ProfileInitObserver waitForProfile:sceneState.profileState - toReachInitStage:ProfileInitStage::kUIReady - completion:^{ - [observer operationDidComplete:weakViewController - withSceneState:weakSceneState]; - }]; -} - -#pragma mark - Private - -// Returns the SceneState with the given `sceneIdentifier`. -- (SceneState*)sceneForIdentifier:(NSString*)sceneIdentifier { - for (SceneState* sceneState in self.appState.connectedScenes) { - if ([sceneState.sceneSessionID isEqualToString:sceneIdentifier]) { - return sceneState; - } - } - - return nil; -} - -// Returns the set of Session identifiers for all connected scenes. -- (std::set<std::string>)connectedSessionIDs { - std::set<std::string> connectedSessionIDs; - for (SceneState* sceneState in self.appState.connectedScenes) { - connectedSessionIDs.insert( - base::SysNSStringToUTF8(sceneState.sceneSessionID)); - } - return connectedSessionIDs; + [animator waitForSceneState:sceneState + toInitReachStage:ProfileInitStage::kUIReady + completion:std::move(completion)]; } // Attach a Profile to all connected scenes.
diff --git a/ios/chrome/browser/authentication/ui_bundled/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/BUILD.gn index fd44812..6380f0d 100644 --- a/ios/chrome/browser/authentication/ui_bundled/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/BUILD.gn
@@ -34,6 +34,7 @@ "//components/unified_consent", "//google_apis", "//ios/chrome/app:change_profile_commands", + "//ios/chrome/app:change_profile_continuation", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm index 8d45544..f00d472b 100644 --- a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_coordinator.mm
@@ -7,6 +7,7 @@ #import <MaterialComponents/MaterialSnackbar.h> #import "base/check.h" +#import "base/functional/callback_helpers.h" #import "base/memory/raw_ptr.h" #import "base/metrics/user_metrics.h" #import "base/metrics/user_metrics_action.h" @@ -24,8 +25,6 @@ #import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h" #import "ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_view_controller.h" #import "ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.h" -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" #import "ios/chrome/browser/authentication/ui_bundled/signin/add_account_signin/add_account_signin_coordinator.h" #import "ios/chrome/browser/authentication/ui_bundled/signin/interruptible_chrome_coordinator.h" #import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" @@ -91,7 +90,7 @@ #pragma mark - ChangeProfileContinuation - (void)executeWithSceneState:(SceneState*)sceneState - completion:(ProceduralBlock)completion { + completion:(base::OnceClosure)completion { Browser* browser = sceneState.browserProviderInterface.mainBrowserProvider.browser; AuthenticationService* authenticationService = @@ -99,14 +98,14 @@ if (!authenticationService->HasPrimaryIdentity( signin::ConsentLevel::kSignin)) { - completion(); + std::move(completion).Run(); return; } id<SystemIdentity> existingIdentity = authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSignin); if (existingIdentity == _identity) { // The correct account is already signed in in the new profile. - completion(); + std::move(completion).Run(); return; } @@ -120,7 +119,8 @@ ->GetPersonalProfileName()); authenticationService->SignOut( signin_metrics::ProfileSignout::kChangeAccountInAccountMenu, - /*force_clear_browsing_data=*/false, completion); + /*force_clear_browsing_data=*/false, + base::CallbackToBlock(std::move(completion))); } @end @@ -149,7 +149,7 @@ #pragma mark - ChangeProfileContinuation - (void)executeWithSceneState:(SceneState*)sceneState - completion:(ProceduralBlock)completion { + completion:(base::OnceClosure)completion { Browser* browser = sceneState.browserProviderInterface.mainBrowserProvider.browser; // TODO(crbug.com/375604649): This should probably go through @@ -160,7 +160,7 @@ AuthenticationServiceFactory::GetForProfile(browser->GetProfile()); authenticationService->SignIn( _identity, signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_MENU); - completion(); + std::move(completion).Run(); } @end @@ -371,7 +371,7 @@ [_signoutActionSheetCoordinator start]; } -- (void)triggerProfileSwitchToProfileNamed:(NSString*)profileName +- (void)triggerProfileSwitchToProfileNamed:(std::string_view)profileName andSigninWithSystemIdentity:(id<SystemIdentity>)identity { CHECK(AreSeparateProfilesForManagedAccountsEnabled()); SceneState* sceneState = self.browser->GetSceneState(); @@ -383,12 +383,10 @@ [[ChangeProfileSignInContinuation alloc] initWithDesiredIdentity:identity]; - ChangeProfileObserver* observer = [[ChangeProfileObserver alloc] - initWithContinuations:@[ signOutContinuation, signInContinuation ]]; - - [_changeProfileHandler changeProfile:profileName - forScene:sceneState.sceneSessionID - observer:observer]; + [_changeProfileHandler + changeProfile:profileName + forScene:sceneState + continuations:@[ signOutContinuation, signInContinuation ]]; } - (void)didTapAddAccountWithCompletion:
diff --git a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm index 2b4fabae..684dfe1 100644 --- a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator.mm
@@ -322,8 +322,7 @@ *profileName != _accountManagerService->GetProfileName()) { // TODO(crbug.com/375604649): Unblock the UI (and show some error?) if // switching failed. - [self.delegate triggerProfileSwitchToProfileNamed:base::SysUTF8ToNSString( - *profileName) + [self.delegate triggerProfileSwitchToProfileNamed:*profileName andSigninWithSystemIdentity:newIdentity]; return; }
diff --git a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h index ff14a7bf..3f70835 100644 --- a/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h +++ b/ios/chrome/browser/authentication/ui_bundled/account_menu/account_menu_mediator_delegate.h
@@ -7,6 +7,8 @@ #import <Foundation/Foundation.h> +#import <string_view> + #import "ios/chrome/browser/authentication/ui_bundled/signin/signin_constants.h" #import "ios/chrome/browser/settings/ui_bundled/google_services/sync_error_settings_command_handler.h" #import "ios/chrome/browser/shared/public/commands/show_signin_command.h" @@ -14,7 +16,6 @@ @class AccountMenuMediator; @class AuthenticationFlow; -@protocol ChangeProfileObserving; @protocol SystemIdentity; @protocol AccountMenuMediatorDelegate <SyncErrorSettingsCommandHandler> @@ -40,7 +41,7 @@ completion:(void (^)(BOOL))completion; // Requests a switch to the profile with the given `profileName`. -- (void)triggerProfileSwitchToProfileNamed:(NSString*)profileName +- (void)triggerProfileSwitchToProfileNamed:(std::string_view)profileName andSigninWithSystemIdentity:(id<SystemIdentity>)identity; // Shows https://myaccount.google.com/ for the account currently signed-in
diff --git a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn index 7c0ed9cb..f3a9440 100644 --- a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/BUILD.gn
@@ -22,6 +22,7 @@ "//components/sync/base", "//components/sync/service", "//ios/chrome/app:change_profile_commands", + "//ios/chrome/app:change_profile_continuation", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/app/strings",
diff --git a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm index 247cd261..97ac70df 100644 --- a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow.mm
@@ -447,7 +447,7 @@ [self signInInCurrentProfile]; } else if (isValidIdentityOnDevice) { CHECK(AreSeparateProfilesForManagedAccountsEnabled()); - NSString* sceneIdentifier = _browser->GetSceneState().sceneSessionID; + SceneState* sceneState = _browser->GetSceneState(); __weak __typeof(self) weakSelf = self; OnProfileSwitchCompletion completion = base::BindOnce( [](__typeof(self) strong_self, bool success, @@ -458,7 +458,7 @@ }, weakSelf); [_performer switchToProfileWithIdentity:_identityToSignIn - sceneIdentifier:sceneIdentifier + sceneState:sceneState completion:std::move(completion)]; } else { // Handle the case where the identity is no longer valid.
diff --git a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h index 74b450a..be4f11c7 100644 --- a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.h
@@ -16,6 +16,7 @@ class Browser; @protocol ChangeProfileCommands; class ProfileIOS; +@class SceneState; @protocol SystemIdentity; // Callback called the profile switching succeded (`success` is true) or failed @@ -55,7 +56,7 @@ // Switches to the profile that `identity` is assigned, for `sceneIdentifier`. // `completion` is called once the switch failed or succeeded. - (void)switchToProfileWithIdentity:(id<SystemIdentity>)identity - sceneIdentifier:(NSString*)sceneIdentifier + sceneState:(SceneState*)sceneState completion:(OnProfileSwitchCompletion)completion; // Converts the personal profile to a managed one and attaches `identity` to it.
diff --git a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm index b194a3f0..331e37f 100644 --- a/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm +++ b/ios/chrome/browser/authentication/ui_bundled/authentication_flow/authentication_flow_performer.mm
@@ -26,6 +26,7 @@ #import "google_apis/gaia/gaia_auth_util.h" #import "google_apis/gaia/gaia_urls.h" #import "ios/chrome/app/change_profile_commands.h" +#import "ios/chrome/app/change_profile_continuation.h" #import "ios/chrome/browser/authentication/ui_bundled/authentication_constants.h" #import "ios/chrome/browser/authentication/ui_bundled/authentication_ui_util.h" #import "ios/chrome/browser/authentication/ui_bundled/enterprise/managed_profile_creation/managed_profile_creation_coordinator.h" @@ -67,8 +68,39 @@ } // namespace +@interface AuthenticationFlowContinuation : NSObject <ChangeProfileContinuation> + +- (instancetype)initWithCompletion:(OnProfileSwitchCompletion)completion + NS_DESIGNATED_INITIALIZER; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +@implementation AuthenticationFlowContinuation { + OnProfileSwitchCompletion _completion; +} + +- (instancetype)initWithCompletion:(OnProfileSwitchCompletion)completion { + if ((self = [super init])) { + _completion = std::move(completion); + } + return self; +} + +- (void)executeWithSceneState:(SceneState*)sceneState + completion:(base::OnceClosure)completion { + UIViewController* viewController = sceneState.rootViewController; + Browser* newBrowser = + sceneState.browserProviderInterface.currentBrowserProvider.browser; + + std::move(_completion).Run(/*success=*/true, newBrowser, viewController); + std::move(completion).Run(); +} + +@end + @interface AuthenticationFlowPerformer () < - ChangeProfileObserving, ManagedProfileCreationCoordinatorDelegate> @end @@ -82,7 +114,6 @@ AlertCoordinator* _errorAlertCoordinator; std::unique_ptr<base::OneShotTimer> _watchdogTimer; id<ChangeProfileCommands> _changeProfileHandler; - OnProfileSwitchCompletion _onProfileSwitchCompletion; } - (id<AuthenticationFlowPerformerDelegate>)delegate { @@ -141,23 +172,27 @@ } - (void)switchToProfileWithIdentity:(id<SystemIdentity>)identity - sceneIdentifier:(NSString*)sceneIdentifier + sceneState:(SceneState*)sceneState completion:(OnProfileSwitchCompletion)completion { CHECK(AreSeparateProfilesForManagedAccountsEnabled()); - _onProfileSwitchCompletion = std::move(completion); std::optional<std::string> profileName = GetApplicationContext() ->GetAccountProfileMapper() ->FindProfileNameForGaiaID(base::SysNSStringToUTF8(identity.gaiaID)); if (!profileName.has_value()) { base::SequencedTaskRunner::GetCurrentDefault()->PostTask( - FROM_HERE, base::BindOnce(std::move(_onProfileSwitchCompletion), false, - nullptr, nil)); + FROM_HERE, + base::BindOnce(std::move(completion), /*success=*/false, nullptr, nil)); return; } - [_changeProfileHandler changeProfile:base::SysUTF8ToNSString(*profileName) - forScene:sceneIdentifier - observer:self]; + + AuthenticationFlowContinuation* continuation = + [[AuthenticationFlowContinuation alloc] + initWithCompletion:std::move(completion)]; + + [_changeProfileHandler changeProfile:*profileName + forScene:sceneState + continuations:@[ continuation ]]; } - (void)makePersonalProfileManagedWithIdentity:(id<SystemIdentity>)identity { @@ -407,27 +442,6 @@ })); } -#pragma mark - ChangeProfileObserving - -- (void)operationFailed:(ChangeProfileFailure)failure { - std::move(_onProfileSwitchCompletion).Run(false, nullptr, nil); -} - -- (void)willStartOperation:(UIViewController*)viewController { - // Nothing to do. -} - -- (void)operationDidComplete:(UIViewController*)viewController - withSceneState:(SceneState*)sceneState { - Browser* newProfileBrowser = - sceneState.browserProviderInterface.currentBrowserProvider.browser; - // TODO(crbug.com/375605482): `viewController` is nil. This is not expected. - // `sceneState.rootViewController` is used until the bug is fixed. - viewController = sceneState.rootViewController; - std::move(_onProfileSwitchCompletion) - .Run(true, newProfileBrowser, viewController); -} - #pragma mark - Private - (void)updateUserPolicyNotificationStatusIfNeeded:(PrefService*)prefService {
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn b/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn index ad7f0cd..205347c 100644 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/BUILD.gn
@@ -6,15 +6,13 @@ source_set("change_profile") { sources = [ - "change_profile_continuation.h", - "change_profile_observer.h", - "change_profile_observer.mm", "change_profile_signout_continuation.h", "change_profile_signout_continuation.mm", ] deps = [ "//ios/chrome/app:change_profile_commands", + "//ios/chrome/app:change_profile_continuation", "//ios/chrome/app/application_delegate:app_state", "//ios/chrome/app/profile", "//ios/chrome/browser/authentication/ui_bundled/signin:signin_headers",
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h deleted file mode 100644 index 6b98928..0000000 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ -#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_ - -#import <UIKit/UIKit.h> - -#import "base/ios/block_types.h" - -@class SceneState; - -@protocol ChangeProfileContinuation <NSObject> - -- (void)executeWithSceneState:(SceneState*)sceneState - completion:(ProceduralBlock)completion; - -@end - -#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_CONTINUATION_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h deleted file mode 100644 index ab9d394..0000000 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h +++ /dev/null
@@ -1,23 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ -#define IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_ - -#import <UIKit/UIKit.h> - -#import "ios/chrome/app/change_profile_commands.h" - -@protocol ChangeProfileContinuation; - -// This object is retained until -[<ChangeProfileObserving> operationFailed:] or -// -[<ChangeProfileObserving> operationDidComplete:withSceneState:] is called. -@interface ChangeProfileObserver : NSObject <ChangeProfileObserving> - -- (instancetype)initWithContinuations: - (NSArray<id<ChangeProfileContinuation>>*)continuations; - -@end - -#endif // IOS_CHROME_BROWSER_AUTHENTICATION_UI_BUNDLED_CHANGE_PROFILE_CHANGE_PROFILE_OBSERVER_H_
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm deleted file mode 100644 index cd2b57a..0000000 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.mm +++ /dev/null
@@ -1,59 +0,0 @@ -// Copyright 2024 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" - -#import "base/ios/block_types.h" -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" -#import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" - -@implementation ChangeProfileObserver { - NSArray<id<ChangeProfileContinuation>>* _continuations; -} - -- (instancetype)initWithContinuations: - (NSArray<id<ChangeProfileContinuation>>*)continuations { - self = [super init]; - if (self) { - _continuations = continuations; - } - return self; -} - -#pragma mark - ChangeProfileObserving - -- (void)operationFailed:(ChangeProfileFailure)failure { - // TODO(crbug.com/375605174): Present a minimalistic dialog in this case. -} - -- (void)willStartOperation:(UIViewController*)viewController { - // Nothing to do. -} - -- (void)operationDidComplete:(UIViewController*)viewController - withSceneState:(SceneState*)sceneState { - DCHECK(sceneState); - [self executeContinuationWithIndex:0 sceneState:sceneState]; -} - -#pragma mark - Private - -- (void)executeContinuationWithIndex:(NSUInteger)index - sceneState:(SceneState*)sceneState { - if (index >= _continuations.count) { - return; - } - - __weak SceneState* weakSceneState = sceneState; - [_continuations[index] - executeWithSceneState:sceneState - completion:^{ - if (weakSceneState) { - [self executeContinuationWithIndex:index + 1 - sceneState:weakSceneState]; - } - }]; -} - -@end
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h index 279e3ff..2245659 100644 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h
@@ -7,7 +7,8 @@ #import <UIKit/UIKit.h> -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_continuation.h" +#import "base/ios/block_types.h" +#import "ios/chrome/app/change_profile_continuation.h" @class MDCSnackbarMessage;
diff --git a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm index eda5866..123bd8ebd 100644 --- a/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm +++ b/ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.mm
@@ -4,6 +4,7 @@ #import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h" +#import "base/functional/callback_helpers.h" #import "ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.h" #import "ios/chrome/browser/shared/coordinator/scene/scene_state.h" #import "ios/chrome/browser/shared/model/browser/browser.h" @@ -17,11 +18,14 @@ namespace { // Called by ChangeProfileSignoutContinuation once the sign-out is complete. -void SignoutDone(Browser* browser, +void SignoutDone(base::WeakPtr<Browser> weak_browser, bool force_snackbar_over_toolbar, - MDCSnackbarMessage* snackbar_message, - ProceduralBlock signout_completion, - ProceduralBlock continuation_completion) { + MDCSnackbarMessage* snackbar_message) { + Browser* browser = weak_browser.get(); + if (!browser) { + return; + } + id<SnackbarCommands> snackbar_commands_handler = HandlerForProtocol(browser->GetCommandDispatcher(), SnackbarCommands); if (force_snackbar_over_toolbar) { @@ -31,12 +35,6 @@ [snackbar_commands_handler showSnackbarMessage:snackbar_message bottomOffset:0]; } - if (signout_completion) { - signout_completion(); - } - if (continuation_completion) { - continuation_completion(); - } } } // namespace @@ -69,22 +67,29 @@ #pragma mark - ChangeProfileContinuation - (void)executeWithSceneState:(SceneState*)sceneState - completion:(ProceduralBlock)completion { + completion:(base::OnceClosure)completion { Browser* browser = sceneState.browserProviderInterface.currentBrowserProvider.browser; CHECK(browser); + // Create the closure corresponding to the action to perform once the signout + // action completes, chaining `_signoutCompletion` and `completion` if needed. + base::OnceClosure closure = + base::BindOnce(&SignoutDone, browser->AsWeakPtr(), + _forceSnackbarOverToolbar, _snackbarMessage); + + if (_signoutCompletion) { + closure = std::move(closure).Then(base::BindOnce(_signoutCompletion)); + } + if (completion) { + closure = std::move(closure).Then(std::move(completion)); + } + AuthenticationService* authenticationService = AuthenticationServiceFactory::GetForProfile(browser->GetProfile()); - BOOL forceSnackbarOverToolbar = _forceSnackbarOverToolbar; - MDCSnackbarMessage* snackbarMessage = _snackbarMessage; - ProceduralBlock signoutCompletion = _signoutCompletion; - - authenticationService->SignOut(_signoutSourceMetric, _forceClearData, ^{ - SignoutDone(browser, forceSnackbarOverToolbar, snackbarMessage, - signoutCompletion, completion); - }); + authenticationService->SignOut(_signoutSourceMetric, _forceClearData, + base::CallbackToBlock(std::move(closure))); signin_metrics::RecordSignoutForceClearDataChoice(_forceClearData); signin_metrics::RecordSignoutUserAction(_forceClearData);
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm index 774d371..35fc2a0 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_coordinator_egtest.mm
@@ -105,11 +105,11 @@ NSError* error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"Signin.AccountType.SigninConsent"]; - GREYAssertNil(error, @"Failed to record show count histogram"); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectCount:1 forBucket:static_cast<int>(signinAccountType) forHistogram:@"Signin.AccountType.SigninConsent"]; - GREYAssertNil(error, @"Failed to record show count histogram"); + chrome_test_util::GREYAssertErrorNil(error); } // Sets up the sign-in policy value dynamically at runtime. @@ -136,15 +136,15 @@ } [BookmarkEarlGrey waitForBookmarkModelLoaded]; [BookmarkEarlGrey clearBookmarks]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)tearDownHelper { [super tearDownHelper]; [BookmarkEarlGrey clearBookmarksPositionCache]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } - (AppLaunchConfiguration)appConfigurationForTestCase {
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm index 78e979d..722acf2 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/signin_utils.mm
@@ -19,7 +19,6 @@ #import "ios/chrome/app/change_profile_commands.h" #import "ios/chrome/app/profile/profile_state.h" #import "ios/chrome/app/tests_hook.h" -#import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_observer.h" #import "ios/chrome/browser/authentication/ui_bundled/change_profile/change_profile_signout_continuation.h" #import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_coordinator.h" #import "ios/chrome/browser/authentication/ui_bundled/history_sync/history_sync_utils.h" @@ -375,8 +374,7 @@ ChangeProfileSignoutContinuation* signout_continuation = [[ChangeProfileSignoutContinuation alloc] - initWithSignoutSourceMetric:(signin_metrics::ProfileSignout) - signout_source + initWithSignoutSourceMetric:signout_source forceClearData:force_clear_data forceSnackbarOverToolbar:force_snackbar_over_toolbar snackbarMessage:snackbar_message @@ -390,7 +388,8 @@ SceneState* scene_state = browser->GetSceneState(); if (!should_switch_profile_at_signout) { - [signout_continuation executeWithSceneState:scene_state completion:nil]; + [signout_continuation executeWithSceneState:scene_state + completion:base::DoNothing()]; return; } @@ -406,13 +405,9 @@ HandlerForProtocol(scene_state.profileState.appState.appCommandDispatcher, ChangeProfileCommands); - ChangeProfileObserver* observer = [[ChangeProfileObserver alloc] - initWithContinuations:@[ signout_continuation ]]; - - [change_profile_handler - changeProfile:base::SysUTF8ToNSString(default_profile_name) - forScene:scene_state.sceneSessionID - observer:observer]; + [change_profile_handler changeProfile:default_profile_name + forScene:scene_state + continuations:@[ signout_continuation ]]; } } // namespace signin
diff --git a/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm index ef7acb0..be3d342 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signin/two_screens_signin/upgrade_signin_promo_egtest.mm
@@ -76,8 +76,8 @@ - (void)setUp { [super setUp]; [[self class] testForStartup]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [ChromeEarlGrey removeUserDefaultsObjectForKey:kDisplayedSSORecallPromoCountKey]; [ChromeEarlGrey @@ -89,8 +89,8 @@ } - (void)tearDownHelper { - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm index b33db4e39..3a18348 100644 --- a/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm +++ b/ios/chrome/browser/authentication/ui_bundled/signout_action_sheet/signout_action_sheet_egtest.mm
@@ -155,8 +155,8 @@ // signout. A dialog should be displayed, and clicking on the `Sign Out` button // should sign the user out. - (void)testSignoutConfirmationForManagedIdentity { - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; // Sign in with managed account. FakeSystemIdentity* fakeManagedIdentity = @@ -186,16 +186,16 @@ @"signout."); [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } // Tests the signout flow for managed users that require clearing data on // signout. A dialog should be displayed, and clicking on the `Cancel` button // should keep the user signed in. - (void)testCancelSignoutForManagedIdentity { - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; // Sign in with managed account. @@ -222,8 +222,8 @@ @"signout."); [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } // Tests the signout flow for managed users in a managed browser does not show
diff --git a/ios/chrome/browser/autofill/model/automation/automation_egtest.mm b/ios/chrome/browser/autofill/model/automation/automation_egtest.mm index 003c563..194ef87 100644 --- a/ios/chrome/browser/autofill/model/automation/automation_egtest.mm +++ b/ios/chrome/browser/autofill/model/automation/automation_egtest.mm
@@ -100,7 +100,7 @@ base::Value recipeRoot = RecipeJsonToValue(recipeJSONText); NSError* error = SetAutofillAutomationProfile(recipeJSONText); - GREYAssertNil(error, error.localizedDescription); + chrome_test_util::GREYAssertErrorNil(error); // Extract the starting URL. std::string* startURLValue = recipeRoot.GetDict().FindString("startingURL");
diff --git a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm index adc111b5..879f1f2e 100644 --- a/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/bottom_sheet/payments_suggestion_bottom_sheet_egtest.mm
@@ -62,8 +62,8 @@ [AutofillAppInterface clearCreditCardStore]; _lastDigits = [AutofillAppInterface saveLocalCreditCard]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -73,8 +73,8 @@ [AutofillAppInterface clearMockReauthenticationModule]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/form_input_accessory/form_input_accessory_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/form_input_accessory/form_input_accessory_egtest.mm index 7a2450c..b65eb85 100644 --- a/ios/chrome/browser/autofill/ui_bundled/form_input_accessory/form_input_accessory_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/form_input_accessory/form_input_accessory_egtest.mm
@@ -148,8 +148,8 @@ [AutofillAppInterface saveExampleProfile]; // Set up histogram tester. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -165,8 +165,8 @@ // Clean up histogram tester. [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_egtest.mm index da13db7..5b31ffd 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/address_view_controller_egtest.mm
@@ -217,8 +217,8 @@ [ChromeEarlGrey waitForWebStateContainingText:"Profile form"]; // Set up histogram tester. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -227,8 +227,8 @@ // Clean up histogram tester. [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm index d9fcd83..ba07726 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/card_view_controller_egtest.mm
@@ -320,8 +320,8 @@ [AutofillAppInterface considerCreditCardFormSecureForTesting]; // Set up histogram tester. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -332,8 +332,8 @@ // Clean up histogram tester. [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm index 67152fb..10e7943 100644 --- a/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/manual_fill/password_view_controller_egtest.mm
@@ -250,8 +250,8 @@ ReauthenticationResult::kSuccess]; // Set up histogram tester. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -261,8 +261,8 @@ // Clean up histogram tester. [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/autofill/ui_bundled/save_card_infobar_egtest.mm b/ios/chrome/browser/autofill/ui_bundled/save_card_infobar_egtest.mm index d06ae08..9b304dd5 100644 --- a/ios/chrome/browser/autofill/ui_bundled/save_card_infobar_egtest.mm +++ b/ios/chrome/browser/autofill/ui_bundled/save_card_infobar_egtest.mm
@@ -193,8 +193,8 @@ - (void)setUp { [super setUp]; // Observe histograms in tests. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [AutofillAppInterface setUpFakeCreditCardServer]; } @@ -209,8 +209,8 @@ [AutofillAppInterface tearDownFakeCreditCardServer]; // Release the histogram tester. - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm index 9b4ab3b..37088864 100644 --- a/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm +++ b/ios/chrome/browser/bookmarks/ui_bundled/home/bookmarks_batch_upload_egtest.mm
@@ -166,14 +166,14 @@ [ChromeEarlGrey setBoolValue:false forUserPref:prefs::kIosBookmarkUploadSyncLeftBehindCompleted]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)tearDownHelper { [super tearDownHelper]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } #pragma mark - BookmarksBatchUploadEnabledTestCase Tests
diff --git a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm index 20450bf..cef0113 100644 --- a/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm +++ b/ios/chrome/browser/bubble/ui_bundled/gesture_iph/gesture_in_product_help_view_egtest_utils.mm
@@ -45,8 +45,8 @@ } config.relaunch_policy = ForceRelaunchByCleanShutdown; [[AppLaunchManager sharedManager] ensureAppLaunchedWithConfiguration:config]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } void AssertGestureIPHVisibleWithDismissAction(NSString* description, @@ -150,5 +150,5 @@ error = [MetricsAppInterface expectTotalCount:1 forHistogram:dismissalHistogramName]; } - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); }
diff --git a/ios/chrome/browser/context_menu/ui_bundled/context_menu_egtest.mm b/ios/chrome/browser/context_menu/ui_bundled/context_menu_egtest.mm index 2d2ff43..b82b837 100644 --- a/ios/chrome/browser/context_menu/ui_bundled/context_menu_egtest.mm +++ b/ios/chrome/browser/context_menu/ui_bundled/context_menu_egtest.mm
@@ -318,15 +318,15 @@ } - (void)setUpHistogramTester { - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); _setUpHistogramTesterCalled = true; } - (void)tearDownHelper { if (_setUpHistogramTesterCalled) { - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } [super tearDownHelper]; }
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm index 9c50d92..5c475af 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_search_engine_choice_egtest.mm
@@ -199,9 +199,8 @@ NSString* const eventHistogram = @(search_engines::kSearchEngineChoiceScreenEventsHistogram); // Skip sign-in. - GREYAssertNil([MetricsAppInterface expectTotalCount:0 - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:0 forHistogram:eventHistogram]); [[self elementInteractionWithGreyMatcher: chrome_test_util::PromoStyleSecondaryActionButtonMatcher() scrollViewIdentifier: @@ -209,17 +208,14 @@ performAction:grey_tap()]; // Check that the choice screen is shown [SearchEngineChoiceEarlGreyUI verifySearchEngineChoiceScreenIsDisplayed]; - GREYAssertNil([MetricsAppInterface expectTotalCount:1 - forHistogram:eventHistogram], - @"Failed to record event histogram"); - GREYAssertNil( - [MetricsAppInterface - expectCount:1 - forBucket:static_cast<int>( - search_engines::SearchEngineChoiceScreenEvents:: - kFreChoiceScreenWasDisplayed) - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:1 forHistogram:eventHistogram]); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectCount:1 + forBucket:static_cast<int>( + search_engines::SearchEngineChoiceScreenEvents:: + kFreChoiceScreenWasDisplayed) + forHistogram:eventHistogram]); // Scroll down and open the Learn More dialog. id<GREYMatcher> learnMoreLinkMatcher = grey_allOf( grey_accessibilityLabel(@"Learn more"), grey_sufficientlyVisible(), nil); @@ -231,17 +227,14 @@ [ChromeEarlGrey waitForUIElementToAppearWithMatcher: grey_accessibilityID( kSearchEngineChoiceLearnMoreAccessibilityIdentifier)]; - GREYAssertNil([MetricsAppInterface expectTotalCount:2 - forHistogram:eventHistogram], - @"Failed to record event histogram"); - GREYAssertNil( - [MetricsAppInterface - expectCount:1 - forBucket:static_cast<int>( - search_engines::SearchEngineChoiceScreenEvents:: - kFreLearnMoreWasDisplayed) - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:2 forHistogram:eventHistogram]); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectCount:1 + forBucket:static_cast<int>( + search_engines::SearchEngineChoiceScreenEvents:: + kFreLearnMoreWasDisplayed) + forHistogram:eventHistogram]); // Close the Learn More dialog. [[EarlGrey selectElementWithMatcher:chrome_test_util::NavigationBarDoneButton()] @@ -259,17 +252,14 @@ [[[EarlGrey selectElementWithMatcher:continueButtonMatcher] assertWithMatcher:grey_notNil()] performAction:grey_tap()]; [SearchEngineChoiceEarlGreyUI confirmSearchEngineChoiceScreen]; - GREYAssertNil([MetricsAppInterface expectTotalCount:3 - forHistogram:eventHistogram], - @"Failed to record event histogram"); - GREYAssertNil( - [MetricsAppInterface - expectCount:1 - forBucket:static_cast<int>( - search_engines::SearchEngineChoiceScreenEvents:: - kFreDefaultWasSet) - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:3 forHistogram:eventHistogram]); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectCount:1 + forBucket:static_cast<int>( + search_engines::SearchEngineChoiceScreenEvents:: + kFreDefaultWasSet) + forHistogram:eventHistogram]); [[self class] dismissDefaultBrowser]; }
diff --git a/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm b/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm index 40b233e..67b73dc0 100644 --- a/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm +++ b/ios/chrome/browser/first_run/ui_bundled/first_run_test_case_base.mm
@@ -46,8 +46,8 @@ [[self class] testForStartup]; [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); // Because this test suite changes the state of Sync passwords, wait // until the engine is initialized before startup.
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 08b5bc1..86c741c 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -2175,6 +2175,9 @@ flag_descriptions::kChromeStartupParametersAsyncName, flag_descriptions::kChromeStartupParametersAsyncDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(kChromeStartupParametersAsync)}, + {"ios-youtube-incognito", flag_descriptions::kYoutubeIncognitoName, + flag_descriptions::kYoutubeIncognitoDescription, flags_ui::kOsIos, + FEATURE_VALUE_TYPE(kYoutubeIncognito)}, {"lens-overlay-enable-location-bar-entrypoint", flag_descriptions::kLensOverlayEnableLocationBarEntrypointName, flag_descriptions::kLensOverlayEnableLocationBarEntrypointDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 1114afa..322bfa8 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -272,6 +272,12 @@ "Enables a series of performance improvements for the Credential Provider " "Extension."; +const char kChromeStartupParametersAsyncName[] = + "Enable the async chrome startup"; +const char kChromeStartupParametersAsyncDescription[] = + "When enabled the async version of the chrome startup method is used. This " + "method is used to parse the startup parameters."; + extern const char kPhoneNumberName[] = "Phone number experience enable"; extern const char kPhoneNumberDescription[] = "When enabled, one tapping or long pressing on a phone number will trigger " @@ -1277,11 +1283,11 @@ const char kWebPageTextZoomIPadDescription[] = "When enabled, text zoom works again on iPad"; -const char kChromeStartupParametersAsyncName[] = - "Enable the async chrome startup"; -const char kChromeStartupParametersAsyncDescription[] = - "When enabled the async version of the chrome startup method is used. This " - "method is used to parse the startup parameters."; +const char kYoutubeIncognitoName[] = + "Enable the opening of links from Youtube incognito in Chrome incognito"; +const char kYoutubeIncognitoDescription[] = + "When enabled, the links from Youtube incognito will be opened in Chrome " + "incognito."; // Please insert your name/description above in alphabetical order.
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index b199619..5db9d44 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -221,6 +221,11 @@ extern const char kCredentialProviderPerformanceImprovementsName[]; extern const char kCredentialProviderPerformanceImprovementsDescription[]; +// Title and description for the flag to enable the use of the async version of +// the chrome startup method. +extern const char kChromeStartupParametersAsyncName[]; +extern const char kChromeStartupParametersAsyncDescription[]; + // Title and description for the flag to enable experience kit apple calendar // events. extern const char kAppleCalendarExperienceKitName[]; @@ -1135,10 +1140,10 @@ extern const char kWebPageTextZoomIPadName[]; extern const char kWebPageTextZoomIPadDescription[]; -// Title and description for the flag to enable the use of the async version of -// the chrome startup method. -extern const char kChromeStartupParametersAsyncName[]; -extern const char kChromeStartupParametersAsyncDescription[]; +// Title and description for the flag to enable the opening of links from +// Youtube incognito in Chrome incognito. +extern const char kYoutubeIncognitoName[]; +extern const char kYoutubeIncognitoDescription[]; // Please add names and descriptions above in alphabetical order.
diff --git a/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm b/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm index 2e6f03bd..4c1368c0 100644 --- a/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm +++ b/ios/chrome/browser/history/ui_bundled/history_ui_egtest.mm
@@ -180,15 +180,15 @@ // screen. [ChromeEarlGrey resetBrowsingDataPrefs]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } - (void)tearDownHelper { [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); NSError* error = nil; // Dismiss search bar by pressing cancel, if present. Passing error prevents
diff --git a/ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.mm b/ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.mm index e794baf..ea6ebd2 100644 --- a/ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.mm +++ b/ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.mm
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#import "ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.h" + #import <map> #import <string> -#import "ios/chrome/browser/https_upgrades/model/https_upgrade_test_helper.h" - #import "base/functional/bind.h" #import "base/strings/escape.h" #import "base/strings/string_util.h" @@ -16,6 +16,7 @@ #import "base/test/metrics/histogram_tester.h" #import "ios/chrome/browser/https_upgrades/model/https_upgrade_app_interface.h" #import "ios/chrome/browser/metrics/model/metrics_app_interface.h" +#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" #import "ios/testing/earl_grey/earl_grey_test.h" #import "ios/testing/embedded_test_server_handlers.h" #import "ios/web/common/features.h" @@ -127,8 +128,8 @@ GREYAssertTrue(self.slowServer->Start(), @"Test slow server failed to start."); - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [HttpsUpgradeAppInterface setHTTPSPortForTesting:self.goodHTTPSServer->port() useFakeHTTPS:false]; @@ -137,8 +138,8 @@ - (void)tearDown { // Release the histogram tester. - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDown]; }
diff --git a/ios/chrome/browser/https_upgrades/model/typed_navigation_upgrade_tab_helper_egtest.mm b/ios/chrome/browser/https_upgrades/model/typed_navigation_upgrade_tab_helper_egtest.mm index 4f70ea5..66511af 100644 --- a/ios/chrome/browser/https_upgrades/model/typed_navigation_upgrade_tab_helper_egtest.mm +++ b/ios/chrome/browser/https_upgrades/model/typed_navigation_upgrade_tab_helper_egtest.mm
@@ -89,23 +89,22 @@ @"Omnibox upgrade timer is unexpectedly running"); // HTTPS-Only mode shouldn't handle this navigation. - GREYAssertNil([MetricsAppInterface - expectTotalCount:0 - forHistogram:@(security_interstitials::https_only_mode:: - kEventHistogram)], - @"HTTPS-Only mode unexpectedly recorded a histogram event"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface + expectTotalCount:0 + forHistogram: + @(security_interstitials::https_only_mode::kEventHistogram)], + @"HTTPS-Only mode unexpectedly recorded a histogram event"); } // Asserts that the metrics are properly recorded for a successful upgrade. - (void)assertSuccessfulUpgrade:(int)repeatCount { - GREYAssertNil( - [MetricsAppInterface - expectTotalCount:2 * repeatCount - forHistogram:@(security_interstitials::omnibox_https_upgrades:: - kEventHistogram)], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectTotalCount:2 * repeatCount + forHistogram:@(security_interstitials::omnibox_https_upgrades:: + kEventHistogram)]); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:1 * repeatCount forBucket:static_cast<int>( @@ -114,7 +113,7 @@ forHistogram:@(security_interstitials::omnibox_https_upgrades:: kEventHistogram)], @"Failed to record upgrade attempt"); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:1 * repeatCount forBucket:static_cast<int>( @@ -129,24 +128,23 @@ @"Omnibox upgrade timer is still running"); // HTTPS-Only mode shouldn't handle this navigation. - GREYAssertNil([MetricsAppInterface - expectTotalCount:0 - forHistogram:@(security_interstitials::https_only_mode:: - kEventHistogram)], - @"HTTPS-Only mode unexpectedly recorded a histogram event"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface + expectTotalCount:0 + forHistogram: + @(security_interstitials::https_only_mode::kEventHistogram)], + @"HTTPS-Only mode unexpectedly recorded a histogram event"); } // Asserts that the metrics are properly recorded for a failed upgrade. // repeatCount is the expected number of times the upgrade failed. - (void)assertFailedUpgrade:(int)repeatCount { - GREYAssertNil( - [MetricsAppInterface - expectTotalCount:(repeatCount * 2) - forHistogram:@(security_interstitials::omnibox_https_upgrades:: - kEventHistogram)], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectTotalCount:(repeatCount * 2) + forHistogram:@(security_interstitials::omnibox_https_upgrades:: + kEventHistogram)]); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:repeatCount forBucket:static_cast<int>( @@ -155,7 +153,7 @@ forHistogram:@(security_interstitials::omnibox_https_upgrades:: kEventHistogram)], @"Failed to record upgrade attempt"); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:repeatCount forBucket:static_cast<int>( @@ -170,11 +168,12 @@ @"Omnibox upgrade timer is still running"); // HTTPS-Only mode shouldn't handle this navigation. - GREYAssertNil([MetricsAppInterface - expectTotalCount:0 - forHistogram:@(security_interstitials::https_only_mode:: - kEventHistogram)], - @"HTTPS-Only mode unexpectedly recorded a histogram event"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface + expectTotalCount:0 + forHistogram: + @(security_interstitials::https_only_mode::kEventHistogram)], + @"HTTPS-Only mode unexpectedly recorded a histogram event"); } // Asserts that the metrics are properly recorded for a timed-out upgrade. @@ -187,7 +186,7 @@ kEventHistogram)], @"Incorrect numbber of records in event histogram"); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:repeatCount forBucket:static_cast<int>( @@ -196,7 +195,7 @@ forHistogram:@(security_interstitials::omnibox_https_upgrades:: kEventHistogram)], @"Failed to record upgrade attempt"); - GREYAssertNil( + chrome_test_util::GREYAssertErrorNil( [MetricsAppInterface expectCount:repeatCount forBucket:static_cast<int>( @@ -211,11 +210,12 @@ @"Omnibox upgrade timer is still running"); // HTTPS-Only mode shouldn't handle this navigation. - GREYAssertNil([MetricsAppInterface - expectTotalCount:0 - forHistogram:@(security_interstitials::https_only_mode:: - kEventHistogram)], - @"HTTPS-Only mode unexpectedly recorded a histogram event"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface + expectTotalCount:0 + forHistogram: + @(security_interstitials::https_only_mode::kEventHistogram)], + @"HTTPS-Only mode unexpectedly recorded a histogram event"); } #pragma mark - Tests @@ -325,11 +325,12 @@ [self assertSuccessfulUpgrade:2]; // HTTPS-Only mode shouldn't handle this navigation. - GREYAssertNil([MetricsAppInterface - expectTotalCount:0 - forHistogram:@(security_interstitials::https_only_mode:: - kEventHistogram)], - @"HTTPS-Only mode unexpectedly recorded a histogram event"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface + expectTotalCount:0 + forHistogram: + @(security_interstitials::https_only_mode::kEventHistogram)], + @"HTTPS-Only mode unexpectedly recorded a histogram event"); } // Type an HTTP URL without scheme. The navigation should be upgraded to HTTPS,
diff --git a/ios/chrome/browser/metrics/model/BUILD.gn b/ios/chrome/browser/metrics/model/BUILD.gn index 10545de..d9a69dc 100644 --- a/ios/chrome/browser/metrics/model/BUILD.gn +++ b/ios/chrome/browser/metrics/model/BUILD.gn
@@ -102,6 +102,7 @@ "//components/metrics:net", "//components/metrics:ui", "//components/metrics/demographics", + "//components/metrics/dwa", "//components/metrics_services_manager", "//components/navigation_metrics", "//components/omnibox/browser", @@ -194,6 +195,7 @@ "//components/feed/core/shared_prefs:feed_shared_prefs", "//components/metrics", "//components/metrics:test_support", + "//components/metrics/dwa", "//components/network_time:network_time", "//components/prefs", "//components/prefs:test_support",
diff --git a/ios/chrome/browser/metrics/model/demographics_egtest.mm b/ios/chrome/browser/metrics/model/demographics_egtest.mm index 483ba7f6..7bca4d3 100644 --- a/ios/chrome/browser/metrics/model/demographics_egtest.mm +++ b/ios/chrome/browser/metrics/model/demographics_egtest.mm
@@ -31,8 +31,8 @@ - (void)setUp { [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; // Set a network time so that SyncPrefs::GetUserNoisedBirthYearAndGender does @@ -51,8 +51,8 @@ - (void)tearDownHelper { [ChromeEarlGrey clearFakeSyncServerData]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.h b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.h index 1830ba6..59c1a33 100644 --- a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.h +++ b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.h
@@ -46,6 +46,10 @@ class UkmService; } +namespace metrics::dwa { +class DwaService; +} + // IOSChromeMetricsServiceClient provides an implementation of // MetricsServiceClient that depends on //ios/chrome/. class IOSChromeMetricsServiceClient : public metrics::MetricsServiceClient, @@ -72,6 +76,7 @@ variations::SyntheticTrialRegistry* GetSyntheticTrialRegistry() override; metrics::MetricsService* GetMetricsService() override; ukm::UkmService* GetUkmService() override; + metrics::dwa::DwaService* GetDwaService() override; void SetMetricsClientId(const std::string& client_id) override; int32_t GetProduct() override; std::string GetApplicationLocale() override; @@ -90,6 +95,7 @@ override; base::TimeDelta GetStandardUploadInterval() override; bool IsUkmAllowedForAllProfiles() override; + bool IsDwaAllowedForAllProfiles() override; bool AreNotificationListenersEnabledOnAllProfiles() override; std::string GetUploadSigningKey() override; @@ -176,6 +182,9 @@ // The UkmService that `this` is a client of. std::unique_ptr<ukm::UkmService> ukm_service_; + // The DwaService that `this` is a client of. + std::unique_ptr<metrics::dwa::DwaService> dwa_service_; + // Observation of the ProfileManagerIOS. base::ScopedObservation<ProfileManagerIOS, ProfileManagerObserverIOS> profile_manager_observation_{this};
diff --git a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.mm index 0637bed..53646fd 100644 --- a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.mm +++ b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client.mm
@@ -36,6 +36,7 @@ #import "components/metrics/cpu_metrics_provider.h" #import "components/metrics/demographics/demographic_metrics_provider.h" #import "components/metrics/drive_metrics_provider.h" +#import "components/metrics/dwa/dwa_service.h" #import "components/metrics/entropy_state_provider.h" #import "components/metrics/field_trials_provider.h" #import "components/metrics/metrics_data_validation.h" @@ -180,6 +181,7 @@ kBrowserMetricsName); metrics::RegisterMetricsReportingStatePrefs(registry); ukm::UkmService::RegisterPrefs(registry); + metrics::dwa::DwaService::RegisterPrefs(registry); } variations::SyntheticTrialRegistry* @@ -195,6 +197,10 @@ return ukm_service_.get(); } +metrics::dwa::DwaService* IOSChromeMetricsServiceClient::GetDwaService() { + return dwa_service_.get(); +} + void IOSChromeMetricsServiceClient::SetMetricsClientId( const std::string& client_id) { crash_keys::SetMetricsClientIdFromGUID(client_id); @@ -284,6 +290,11 @@ RegisterUKMProviders(); } + + if (base::FeatureList::IsEnabled(metrics::dwa::kDwaFeature)) { + dwa_service_ = + std::make_unique<metrics::dwa::DwaService>(this, local_state); + } } void IOSChromeMetricsServiceClient::RegisterMetricsServiceProviders() { @@ -510,33 +521,44 @@ void IOSChromeMetricsServiceClient::OnHistoryDeleted() { if (ukm_service_) ukm_service_->Purge(); + if (dwa_service_) { + dwa_service_->Purge(); + } } void IOSChromeMetricsServiceClient::OnUkmAllowedStateChanged( bool must_purge, ukm::UkmConsentState previous_consent_state) { const ukm::UkmConsentState consent_state = GetUkmConsentState(); - if (!ukm_service_) - return; - if (must_purge) { - ukm_service_->Purge(); - ukm_service_->ResetClientState(ukm::ResetReason::kOnUkmAllowedStateChanged); - } else { - // Purge recording if required consent has been revoked. - if (!consent_state.Has(ukm::MSBB)) { - ukm_service_->PurgeMsbbData(); + if (ukm_service_) { + if (must_purge) { + ukm_service_->Purge(); + ukm_service_->ResetClientState(ukm::ResetReason::kOnUkmAllowedStateChanged); + } else { + // Purge recording if required consent has been revoked. + if (!consent_state.Has(ukm::MSBB)) { + ukm_service_->PurgeMsbbData(); + } + // No need to test for ukm::APPS and ukm::EXTENSIONS as they are not + // supported on iOS. } - // No need to test for ukm::APPS and ukm::EXTENSIONS as they are not - // supported on iOS. + + // Notify the recording service of changed metrics consent. + ukm_service_->UpdateRecording(consent_state); + + // Broadcast UKM consent state change. + ukm_service_->OnUkmAllowedStateChanged(consent_state); } - // Notify the recording service of changed metrics consent. - ukm_service_->UpdateRecording(consent_state); + // Purges DWA data if any of the UKM consents is missing. For consent changes + // to metrics collection, this is handled in a separate callback + // (see MetricsServicesManager::UpdatePermissions()). Other scenarios, + // such as incognito, are handled further downstream. + if (dwa_service_ && (must_purge || !IsDwaAllowedForAllProfiles())) { + dwa_service_->Purge(); + } - // Broadcast UKM consent state change. - ukm_service_->OnUkmAllowedStateChanged(consent_state); - - // Signal service manager to enable/disable UKM based on new state. + // Signal service manager to enable/disable UKM/DWA based on new states. UpdateRunningServices(); } @@ -576,6 +598,10 @@ return UkmConsentStateObserver::IsUkmAllowedForAllProfiles(); } +bool IOSChromeMetricsServiceClient::IsDwaAllowedForAllProfiles() { + return UkmConsentStateObserver::IsDwaAllowedForAllProfiles(); +} + bool IOSChromeMetricsServiceClient:: AreNotificationListenersEnabledOnAllProfiles() { return notification_listeners_active_;
diff --git a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client_unittest.mm b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client_unittest.mm index 1fdaf27..5dda245 100644 --- a/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client_unittest.mm +++ b/ios/chrome/browser/metrics/model/ios_chrome_metrics_service_client_unittest.mm
@@ -12,6 +12,7 @@ #import "base/test/scoped_feature_list.h" #import "build/branding_buildflags.h" #import "components/metrics/client_info.h" +#import "components/metrics/dwa/dwa_recorder.h" #import "components/metrics/metrics_service.h" #import "components/metrics/metrics_state_manager.h" #import "components/metrics/metrics_switches.h" @@ -102,6 +103,26 @@ .size()); } +TEST_F(IOSChromeMetricsServiceClientTest, TestDwaServiceNotInitialized) { + base::test::ScopedFeatureList local_feature; + local_feature.InitAndDisableFeature(metrics::dwa::kDwaFeature); + + std::unique_ptr<IOSChromeMetricsServiceClient> chrome_metrics_service_client = + IOSChromeMetricsServiceClient::Create(metrics_state_manager_.get(), + synthetic_trial_registry_.get()); + EXPECT_EQ(chrome_metrics_service_client->GetDwaService(), nullptr); +} + +TEST_F(IOSChromeMetricsServiceClientTest, TestDwaServiceInitialized) { + base::test::ScopedFeatureList local_feature; + local_feature.InitAndEnableFeature(metrics::dwa::kDwaFeature); + + std::unique_ptr<IOSChromeMetricsServiceClient> chrome_metrics_service_client = + IOSChromeMetricsServiceClient::Create(metrics_state_manager_.get(), + synthetic_trial_registry_.get()); + EXPECT_NE(chrome_metrics_service_client->GetDwaService(), nullptr); +} + TEST_F(IOSChromeMetricsServiceClientTest, TestRegisterUkmProvidersWhenUKMFeatureEnabled) { base::test::ScopedFeatureList local_feature;
diff --git a/ios/chrome/browser/metrics/model/tab_usage_recorder_egtest.mm b/ios/chrome/browser/metrics/model/tab_usage_recorder_egtest.mm index bfc278e7..7580257 100644 --- a/ios/chrome/browser/metrics/model/tab_usage_recorder_egtest.mm +++ b/ios/chrome/browser/metrics/model/tab_usage_recorder_egtest.mm
@@ -143,14 +143,14 @@ - (void)setUp { [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [ChromeEarlGrey removeBrowsingCache]; } - (void)tearDownHelper { - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_egtest.mm b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_egtest.mm index 18d429c..c00a02d8 100644 --- a/ios/chrome/browser/ntp/ui_bundled/new_tab_page_egtest.mm +++ b/ios/chrome/browser/ntp/ui_bundled/new_tab_page_egtest.mm
@@ -83,8 +83,8 @@ return; } self.histogramTesterSet = YES; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)releaseHistogramTester { @@ -92,8 +92,8 @@ return; } self.histogramTesterSet = NO; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } #pragma mark - Helpers @@ -135,15 +135,15 @@ NSError* error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey openNewTab]; [ChromeEarlGrey closeAllTabs]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [self releaseHistogramTester]; // Open an incognito NTP and close it. @@ -151,22 +151,22 @@ [self setupHistogramTester]; error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey openNewIncognitoTab]; [ChromeEarlGrey closeAllTabs]; error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); + chrome_test_util::GREYAssertErrorNil(error); [self releaseHistogramTester]; // Open an NTP and navigate to another URL. [self setupHistogramTester]; error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey openNewTab]; [ChromeEarlGrey loadURL:pageURL]; [ChromeEarlGrey waitForWebStateContainingText:kPageLoadedString]; @@ -175,8 +175,8 @@ forHistogram:@"NewTabPage.TimeSpent"]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); + chrome_test_util::GREYAssertErrorNil(error); [self releaseHistogramTester]; // Open an NTP and switch tab. @@ -188,26 +188,26 @@ [self setupHistogramTester]; error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey openNewTab]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey selectTabAtIndex:0]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey selectTabAtIndex:1]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey selectTabAtIndex:0]; error = [MetricsAppInterface expectTotalCount:2 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [self releaseHistogramTester]; // Open two NTPs and close them. @@ -216,22 +216,22 @@ error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectTotalCount:0 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey openNewTab]; [ChromeEarlGrey openNewTab]; error = [MetricsAppInterface expectTotalCount:1 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectTotalCount:2 forHistogram:@"IOS.NTP.Impression"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); [ChromeEarlGrey closeAllTabs]; error = [MetricsAppInterface expectTotalCount:2 forHistogram:@"NewTabPage.TimeSpent"]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectTotalCount:2 forHistogram:@"IOS.NTP.Impression"]; [self releaseHistogramTester];
diff --git a/ios/chrome/browser/optimization_guide/model/hints_fetcher_egtest.mm b/ios/chrome/browser/optimization_guide/model/hints_fetcher_egtest.mm index 22a7a9f..1e23123362 100644 --- a/ios/chrome/browser/optimization_guide/model/hints_fetcher_egtest.mm +++ b/ios/chrome/browser/optimization_guide/model/hints_fetcher_egtest.mm
@@ -142,8 +142,8 @@ std::cref(_response_type), std::ref(_count_hints_requests_received))); GREYAssertTrue(self.testServer->Start(), @"Hints server failed to start."); - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; NSString* hints_server_host = @@ -160,8 +160,8 @@ - (void)tearDownHelper { [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/page_info/ui_bundled/page_info_egtest.mm b/ios/chrome/browser/page_info/ui_bundled/page_info_egtest.mm index 87d3a21..b3feaaa7 100644 --- a/ios/chrome/browser/page_info/ui_bundled/page_info_egtest.mm +++ b/ios/chrome/browser/page_info/ui_bundled/page_info_egtest.mm
@@ -165,14 +165,14 @@ if (![ChromeTestCase forceRestartAndWipe]) { [ChromeEarlGrey clearBrowsingHistory]; } - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)tearDownHelper { [super tearDownHelper]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } // Checks that if the alert for site permissions pops up, and allow it.
diff --git a/ios/chrome/browser/page_info/ui_bundled/page_info_security_egtest.mm b/ios/chrome/browser/page_info/ui_bundled/page_info_security_egtest.mm index 8525ada..ed99d94a 100644 --- a/ios/chrome/browser/page_info/ui_bundled/page_info_security_egtest.mm +++ b/ios/chrome/browser/page_info/ui_bundled/page_info_security_egtest.mm
@@ -33,14 +33,14 @@ if (![ChromeTestCase forceRestartAndWipe]) { [ChromeEarlGrey clearBrowsingHistory]; } - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)tearDownHelper { [super tearDownHelper]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } // Navigates to Page Info's Security Subpage.
diff --git a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm index 1f37b87c..3be45a08 100644 --- a/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm +++ b/ios/chrome/browser/passwords/ui_bundled/bottom_sheet/password_suggestion_bottom_sheet_egtest.mm
@@ -74,7 +74,7 @@ expectTotalCount:count forHistogram: @(password_manager::kPasswordManagerSurfaceVisitHistogramName)]; - GREYAssertNil(error, @"Unexpected Password Details Visit histogram count"); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectCount:count @@ -82,7 +82,7 @@ kPasswordDetails) forHistogram: @(password_manager::kPasswordManagerSurfaceVisitHistogramName)]; - GREYAssertNil(error, @"Unexpected Password Details Visit histogram count"); + chrome_test_util::GREYAssertErrorNil(error); } // Verifies that the number of accepted suggestions recorded for the given @@ -128,8 +128,8 @@ // enabled by default. [PasswordSuggestionBottomSheetAppInterface setDismissCount:0]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -140,8 +140,8 @@ [PasswordSuggestionBottomSheetAppInterface removeMockReauthenticationModule]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm b/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm index 07f9486..4cda351 100644 --- a/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm +++ b/ios/chrome/browser/plus_addresses/ui/plus_addresses_egtest.mm
@@ -49,7 +49,7 @@ [MetricsAppInterface expectCount:count forBucket:static_cast<int>(event_type) forHistogram:@"PlusAddresses.Modal.Events"]; - GREYAssertNil(error, @"Failed to record modal event histogram"); + chrome_test_util::GREYAssertErrorNil(error); } // Assert that the bottom sheet shown duration metrics is recorded. @@ -66,7 +66,7 @@ NSError* error = [MetricsAppInterface expectTotalCount:count forHistogram:name]; - GREYAssertNil(error, @"Failed to record modal shown duration histogram"); + chrome_test_util::GREYAssertErrorNil(error); } } // namespace @@ -83,8 +83,8 @@ [super setUp]; GREYAssertTrue(self.testServer->Start(), @"Server did not start."); - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); // Ensure a fake identity is available, as this is required by the // plus_addresses feature. @@ -100,8 +100,8 @@ - (void)tearDownHelper { [super tearDownHelper]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); } - (AppLaunchConfiguration)appConfigurationForTestCase {
diff --git a/ios/chrome/browser/policy/model/policy_incognito_mode_availability_egtest.mm b/ios/chrome/browser/policy/model/policy_incognito_mode_availability_egtest.mm index a33c654..525025c8 100644 --- a/ios/chrome/browser/policy/model/policy_incognito_mode_availability_egtest.mm +++ b/ios/chrome/browser/policy/model/policy_incognito_mode_availability_egtest.mm
@@ -87,15 +87,15 @@ } - (void)setupAndRegisterHistogramTester { - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); self.histogramTesterCreated = YES; } - (void)tearDownHelper { if (self.histogramTesterCreated) { - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); self.histogramTesterCreated = NO; } [super tearDownHelper];
diff --git a/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm b/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm index 67ed4cb..f9e08edf4 100644 --- a/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm +++ b/ios/chrome/browser/policy/ui_bundled/idle/idle_timeout_policy_egtest.mm
@@ -277,16 +277,16 @@ - (void)setUp { [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } - (void)tearDownHelper { [PolicyAppInterface clearPolicies]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_egtest.mm b/ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_egtest.mm index 08a574d8..4462e648 100644 --- a/ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_egtest.mm +++ b/ios/chrome/browser/search_engine_choice/ui_bundled/search_engine_choice_egtest.mm
@@ -28,16 +28,16 @@ // Make sure the search engine has been reset, to avoid any issues if it was // not by a previous test. [SettingsAppInterface resetSearchEngine]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } - (void)tearDownHelper { // Reset the default search engine to Google [SettingsAppInterface resetSearchEngine]; // Release the histogram tester. - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; } @@ -204,17 +204,14 @@ [ChromeEarlGrey waitForUIElementToAppearWithMatcher: grey_accessibilityID( kSearchEngineChoiceLearnMoreAccessibilityIdentifier)]; - GREYAssertNil([MetricsAppInterface expectTotalCount:1 - forHistogram:eventHistogram], - @"Failed to record event histogram"); - GREYAssertNil( - [MetricsAppInterface - expectCount:1 - forBucket:static_cast<int>( - search_engines::SearchEngineChoiceScreenEvents:: - kLearnMoreWasDisplayed) - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:1 forHistogram:eventHistogram]); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectCount:1 + forBucket:static_cast<int>( + search_engines::SearchEngineChoiceScreenEvents:: + kLearnMoreWasDisplayed) + forHistogram:eventHistogram]); // Close the Learn More dialog. [[EarlGrey selectElementWithMatcher:chrome_test_util::NavigationBarDoneButton()] @@ -232,17 +229,14 @@ [[[EarlGrey selectElementWithMatcher:continueButtonMatcher] assertWithMatcher:grey_notNil()] performAction:grey_tap()]; [SearchEngineChoiceEarlGreyUI confirmSearchEngineChoiceScreen]; - GREYAssertNil([MetricsAppInterface expectTotalCount:2 - forHistogram:eventHistogram], - @"Failed to record event histogram"); - GREYAssertNil( - [MetricsAppInterface - expectCount:1 - forBucket:static_cast<int>( - search_engines::SearchEngineChoiceScreenEvents:: - kDefaultWasSet) - forHistogram:eventHistogram], - @"Failed to record event histogram"); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface expectTotalCount:2 forHistogram:eventHistogram]); + chrome_test_util::GREYAssertErrorNil([MetricsAppInterface + expectCount:1 + forBucket: + static_cast<int>( + search_engines::SearchEngineChoiceScreenEvents::kDefaultWasSet) + forHistogram:eventHistogram]); } @end
diff --git a/ios/chrome/browser/settings/ui_bundled/autofill/autofill_credit_card_settings_egtest.mm b/ios/chrome/browser/settings/ui_bundled/autofill/autofill_credit_card_settings_egtest.mm index 5db150c9..c178fe0 100644 --- a/ios/chrome/browser/settings/ui_bundled/autofill/autofill_credit_card_settings_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/autofill/autofill_credit_card_settings_egtest.mm
@@ -100,8 +100,8 @@ [AutofillAppInterface mockReauthenticationModuleCanAttempt:YES]; [AutofillAppInterface setMandatoryReauthEnabled:YES]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -110,8 +110,8 @@ [AutofillAppInterface clearMockReauthenticationModule]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; } @@ -351,10 +351,10 @@ {ReauthenticationResult::kFailure, ReauthenticationResult::kSuccess, ReauthenticationResult::kSkipped}) { // Reset the HistogramTester at the beginning of each run. - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [self openCreditCardsSettings];
diff --git a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm index 242ed91..62790ac 100644 --- a/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/clear_browsing_data/quick_delete_browing_data_egtest.mm
@@ -135,8 +135,8 @@ - (void)setUp { [super setUp]; [ChromeEarlGrey resetBrowsingDataPrefs]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } @@ -145,8 +145,8 @@ // Close any open UI to avoid test flakiness. [ChromeTestCase removeAnyOpenMenusAndInfoBars]; [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm index 3c10c13..2329ac5 100644 --- a/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/password/password_manager_egtest.mm
@@ -488,14 +488,14 @@ NSError* error = [MetricsAppInterface expectTotalCount:count forHistogram:@(kPasswordManagerSurfaceVisitHistogramName)]; - GREYAssertNil(error, @"Unexpected Password Manager Visit histogram count"); + chrome_test_util::GREYAssertErrorNil(error); error = [MetricsAppInterface expectCount:count forBucket:static_cast<int>( password_manager::PasswordManagerSurface::kPasswordList) forHistogram:@(kPasswordManagerSurfaceVisitHistogramName)]; - GREYAssertNil(error, @"Unexpected Password Manager Visit histogram count"); + chrome_test_util::GREYAssertErrorNil(error); } // Verifies that the elements of the Password Manager widget promo are as @@ -674,8 +674,8 @@ - (void)setUp { [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); _passwordAutoFillStatusSwizzler = std::make_unique<EarlGreyScopedBlockSwizzler>( @"PasswordAutoFillStatusManager", @"sharedManager", @@ -695,8 +695,8 @@ GREYAssert([PasswordSettingsAppInterface clearProfilePasswordStore], @"PasswordStore was not cleared."); - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [PasswordsInOtherAppsAppInterface resetManager]; _passwordAutoFillStatusSwizzler.reset();
diff --git a/ios/chrome/browser/settings/ui_bundled/privacy/incognito/incognito_lock_egtest.mm b/ios/chrome/browser/settings/ui_bundled/privacy/incognito/incognito_lock_egtest.mm index 3dfeee8..fd7bf2f 100644 --- a/ios/chrome/browser/settings/ui_bundled/privacy/incognito/incognito_lock_egtest.mm +++ b/ios/chrome/browser/settings/ui_bundled/privacy/incognito/incognito_lock_egtest.mm
@@ -76,15 +76,15 @@ - (void)setUp { [super setUp]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [MetricsAppInterface overrideMetricsAndCrashReportingForTesting]; } - (void)tearDownHelper { [MetricsAppInterface stopOverridingMetricsAndCrashReportingForTesting]; - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; }
diff --git a/ios/chrome/browser/shared/public/features/features.h b/ios/chrome/browser/shared/public/features/features.h index 98bf310..c2740f57 100644 --- a/ios/chrome/browser/shared/public/features/features.h +++ b/ios/chrome/browser/shared/public/features/features.h
@@ -945,6 +945,10 @@ // Feature flag to use the async version of the chrome startup method. BASE_DECLARE_FEATURE(kChromeStartupParametersAsync); +// Feature flag to enable the opening of links from Youtube Incognito in Chrome +// incognito. +BASE_DECLARE_FEATURE(kYoutubeIncognito); + // Feature flag to enable Reactivation Notifications. BASE_DECLARE_FEATURE(kIOSReactivationNotifications);
diff --git a/ios/chrome/browser/shared/public/features/features.mm b/ios/chrome/browser/shared/public/features/features.mm index e1a9ee0..7d9237b 100644 --- a/ios/chrome/browser/shared/public/features/features.mm +++ b/ios/chrome/browser/shared/public/features/features.mm
@@ -1151,6 +1151,10 @@ "ChromeStartupParametersAsync", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kYoutubeIncognito, + "YoutubeIncognito", + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kIOSReactivationNotifications, "IOSReactivationNotifications", base::FEATURE_DISABLED_BY_DEFAULT);
diff --git a/ios/chrome/browser/signin/model/BUILD.gn b/ios/chrome/browser/signin/model/BUILD.gn index 5df839a..0b517e71 100644 --- a/ios/chrome/browser/signin/model/BUILD.gn +++ b/ios/chrome/browser/signin/model/BUILD.gn
@@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//ios/build/chrome_build.gni") + source_set("model") { sources = [ "about_signin_internals_factory.cc", @@ -147,8 +149,12 @@ "//ios/chrome/browser/shared/model/prefs:pref_names", "//ios/chrome/browser/shared/public/features", "//ios/chrome/browser/shared/public/features:system_flags", + "//ios/chrome/browser/widget_kit/model:features", "//ios/chrome/common/app_group", ] + if (ios_enable_widget_kit_extension && ios_enable_widgets_for_mim) { + deps += [ "//ios/chrome/browser/widget_kit/model:model_swift" ] + } } source_set("authentication_service_factory") {
diff --git a/ios/chrome/browser/signin/model/DEPS b/ios/chrome/browser/signin/model/DEPS index f3b7616..4d3ec14 100644 --- a/ios/chrome/browser/signin/model/DEPS +++ b/ios/chrome/browser/signin/model/DEPS
@@ -23,4 +23,8 @@ "^authentication_service_delegate_impl.cc": [ "+ios/chrome/browser/ntp/ui_bundled/new_tab_page_feature.h", ], + "^authentication_service.mm": [ + "+ios/chrome/browser/widget_kit/model/features.h", + "+ios/chrome/browser/widget_kit/model/model_swift.h", + ], }
diff --git a/ios/chrome/browser/signin/model/authentication_service.mm b/ios/chrome/browser/signin/model/authentication_service.mm index 21e0b36f..e55e54e 100644 --- a/ios/chrome/browser/signin/model/authentication_service.mm +++ b/ios/chrome/browser/signin/model/authentication_service.mm
@@ -44,8 +44,13 @@ #import "ios/chrome/browser/signin/model/system_identity.h" #import "ios/chrome/browser/signin/model/system_identity_manager.h" #import "ios/chrome/browser/signin/model/system_identity_util.h" +#import "ios/chrome/browser/widget_kit/model/features.h" #import "ios/chrome/common/app_group/app_group_constants.h" +#if BUILDFLAG(ENABLE_WIDGETS_FOR_MIM) +#import "ios/chrome/browser/widget_kit/model/model_swift.h" // nogncheck +#endif + using signin::constants::kNoHostedDomainFound; namespace { @@ -91,6 +96,10 @@ } NSUserDefaults* shared_defaults = app_group::GetGroupUserDefaults(); [shared_defaults setObject:accounts forKey:app_group::kAccountsOnDevice]; + +#if BUILDFLAG(ENABLE_WIDGETS_FOR_MIM) + [WidgetTimelinesUpdater reloadAllTimelines]; +#endif } } // namespace
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm index f4a611d..da8bf53 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_incognito_mode_egtest.mm
@@ -54,15 +54,15 @@ @implementation SupervisedUserIncognitoModeTestCase - (void)setupAndRegisterHistogramTester { - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); self.histogramTesterCreated = YES; } - (void)tearDownHelper { if (self.histogramTesterCreated) { - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Failed to release histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); self.histogramTesterCreated = NO; } [super tearDownHelper];
diff --git a/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm b/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm index dbf2e07..20c93f4 100644 --- a/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm +++ b/ios/chrome/browser/supervised_user/model/supervised_user_with_parental_controls_egtest.mm
@@ -229,8 +229,8 @@ // Check the previously used tabs are maintained. [ChromeEarlGrey waitForMainTabCount:3]; // Set up histogram tracking before changing the filtering behaviour. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Failed to set up histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); // Change the filtering setting to block the previously used urls. This // results in a new filtering of the existing tabs. [SupervisedUserSettingsAppInterface setFilteringToAllowApprovedSites];
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_gesture_iph_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_gesture_iph_egtest.mm index a4b40ed..730f0ba 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_gesture_iph_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_gesture_iph_egtest.mm
@@ -50,8 +50,8 @@ [[self class] testForStartup]; [super setUp]; MakeFirstRunRecent(); - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); [[self class] removeAnyOpenMenusAndInfoBars]; [BaseEarlGreyTestCaseAppInterface disableFastAnimation]; [ChromeEarlGreyUI openTabGrid];
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_transition_egtest.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_transition_egtest.mm index 5d216f2..9525b4c 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_transition_egtest.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_grid/tab_grid_transition_egtest.mm
@@ -66,7 +66,7 @@ void ExpectIdleHistogramCount(const char* histogram, int expected_count) { NSError* error = [MetricsAppInterface expectTotalCount:expected_count forHistogram:@(histogram)]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); } // Expects that the total number of samples in histogram `histogram` for bucket @@ -77,7 +77,7 @@ NSError* error = [MetricsAppInterface expectCount:expected_count forBucket:static_cast<int>(bucket) forHistogram:@(histogram)]; - GREYAssertNil(error, error.description); + chrome_test_util::GREYAssertErrorNil(error); } } // namespace @@ -96,8 +96,8 @@ [super setUp]; // Observe histograms in tests. - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); } // Rotate the device back to portrait if needed, since some tests attempt to run @@ -106,8 +106,8 @@ [EarlGrey rotateDeviceToOrientation:UIDeviceOrientationPortrait error:nil]; // Release the histogram tester. - GREYAssertNil([MetricsAppInterface releaseHistogramTester], - @"Cannot reset histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface releaseHistogramTester]); [super tearDownHelper]; } @@ -699,8 +699,8 @@ config.additional_args.push_back("true"); [[AppLaunchManager sharedManager] ensureAppLaunchedWithConfiguration:config]; - GREYAssertNil([MetricsAppInterface setupHistogramTester], - @"Cannot setup histogram tester."); + chrome_test_util::GREYAssertErrorNil( + [MetricsAppInterface setupHistogramTester]); ExpectIdleHistogramCount(kUMATabSwitcherIdleRegularTabGridPageHistogram, 0); ExpectIdleHistogramCount(kUMATabSwitcherIdleIncognitoTabGridPageHistogram, 0);
diff --git a/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/ui/tab_strip_tab_cell.mm b/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/ui/tab_strip_tab_cell.mm index e5416c0..4a35dfd 100644 --- a/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/ui/tab_strip_tab_cell.mm +++ b/ios/chrome/browser/tab_switcher/ui_bundled/tab_strip/ui/tab_strip_tab_cell.mm
@@ -32,35 +32,35 @@ namespace { // The size of the close button. -const CGFloat kCloseButtonSize = 16; -const CGFloat kCloseButtonMinimumTouchTarget = 36; +constexpr CGFloat kCloseButtonSize = 16; +constexpr CGFloat kCloseButtonMinimumTouchTarget = 36; // Size of the decoration corner and corner radius when the cell is selected. -const CGFloat kCornerSize = 16; +constexpr CGFloat kCornerSize = 16; // Threshold width for collapsing the cell and hiding the close button. -const CGFloat kCollapsedWidthThreshold = 150; +constexpr CGFloat kCollapsedWidthThreshold = 150; // Separator constraints. -const CGFloat kSeparatorHorizontalInset = 2; -const CGFloat kSeparatorHorizontalInsetDetached = 6; -const CGFloat kSeparatorGradientWidth = 4; -const CGFloat kDetachedOutlineWidth = 1; +constexpr CGFloat kSeparatorHorizontalInset = 2; +constexpr CGFloat kSeparatorHorizontalInsetDetached = 6; +constexpr CGFloat kSeparatorGradientWidth = 4; +constexpr CGFloat kDetachedOutlineWidth = 1; // Visibility constants. constexpr CGFloat kCloseButtonVisibilityThreshold = 0.3; // Content view constants. -const CGFloat kFaviconLeadingMargin = 10; -const CGFloat kCloseButtonMargin = 10; -const CGFloat kTitleInset = 10; -const CGFloat kTitleOverflowWidth = 20; -const CGFloat kFaviconSize = 16; -const CGFloat kTitleGradientWidth = 16; -const CGFloat kContentViewBottomInset = 4; +constexpr CGFloat kFaviconLeadingMargin = 10; +constexpr CGFloat kCloseButtonMargin = 10; +constexpr CGFloat kTitleInset = 10; +constexpr CGFloat kTitleOverflowWidth = 20; +constexpr CGFloat kFaviconSize = 16; +constexpr CGFloat kTitleGradientWidth = 16; +constexpr CGFloat kContentViewBottomInset = 4; // Selected border background view constants. -const CGFloat kSelectedBorderBackgroundViewWidth = 8; +constexpr CGFloat kSelectedBorderBackgroundViewWidth = 8; // The storke width around a blue dot view. constexpr CGFloat kBlueDotStrokeWidth = 2;
diff --git a/ios/chrome/browser/widget_kit/model/BUILD.gn b/ios/chrome/browser/widget_kit/model/BUILD.gn index aee57f31..1d5397ba 100644 --- a/ios/chrome/browser/widget_kit/model/BUILD.gn +++ b/ios/chrome/browser/widget_kit/model/BUILD.gn
@@ -8,8 +8,13 @@ import("//ios/build/chrome_build.gni") buildflag_header("features") { + _enable_widgets_for_mim = + ios_enable_widget_kit_extension && ios_enable_widgets_for_mim header = "features.h" - flags = [ "ENABLE_WIDGET_KIT_EXTENSION=$ios_enable_widget_kit_extension" ] + flags = [ + "ENABLE_WIDGET_KIT_EXTENSION=" + "$ios_enable_widget_kit_extension", + "ENABLE_WIDGETS_FOR_MIM=" + "$_enable_widgets_for_mim", + ] } if (ios_enable_widget_kit_extension) {
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.h b/ios/chrome/test/earl_grey/chrome_earl_grey.h index 2847970..9d3e539 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey.h +++ b/ios/chrome/test/earl_grey/chrome_earl_grey.h
@@ -30,6 +30,12 @@ // windows. Use only for single window tests. UIWindow* GetAnyKeyWindow(); +// Assert the error is nil. Use the error description as error message. +void GREYAssertErrorNil(NSError* error); + +// Assert the error is nil. Postpone the error description to the error message. +void GREYAssertErrorNil(NSError* error, NSString* description); + } // namespace chrome_test_util // Overload of grey_longPressWithDuration() taking a base::TimeDelta.
diff --git a/ios/chrome/test/earl_grey/chrome_earl_grey.mm b/ios/chrome/test/earl_grey/chrome_earl_grey.mm index e68cf68..8ed2f22 100644 --- a/ios/chrome/test/earl_grey/chrome_earl_grey.mm +++ b/ios/chrome/test/earl_grey/chrome_earl_grey.mm
@@ -87,6 +87,14 @@ return [ChromeEarlGreyAppInterface keyWindow]; } + +void GREYAssertErrorNil(NSError* error) { + GREYAssertNil(error, error.description); +} + +void GREYAssertErrorNil(NSError* error, NSString* message) { + GREYAssertNil(error, @"%@\n%@", message, error.description); +} } // namespace chrome_test_util id<GREYAction> grey_longPressWithDuration(base::TimeDelta duration) {
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 index deda57a8..44442c6 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -88ad49cd45deb3d53ed71c145e4b34d32855cfac \ No newline at end of file +526c8a9a902ab8da2612fdeea042dfae9be18cdd \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 index 2b2b0bd..4ef0c7f 100644 --- a/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeExtensionKeychainInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -3f165c54e2eb2e8fb0c1cec4be9489c2aca0fd4c \ No newline at end of file +aa8560a9677d0467949b9a7586346b784267354a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 index e9ae471d..48390534 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -a9201ba74d8f8dad2d1f1a08520ed19a1b7ebf8d \ No newline at end of file +63c44e9a98ac7fabb77389803885946dd7acbae0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 index 66132ca..a03a94ce 100644 --- a/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -d258469694b5e555dfc41164370cab81bd7e7abe \ No newline at end of file +108d7167536335d9ee520f55b55f0c5731a6d5f0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 index c57a764..3ffa151 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios.zip.sha1
@@ -1 +1 @@ -6a747ec25a60ae0afe1f8bcea80db1f5ebd38c0f \ No newline at end of file +771f636b2a4eefa6dc32fb4e3b36cd4b9e4b8a65 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 index c99e8713..b78812b 100644 --- a/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/ChromeSSOInternal.framework.dSYM.ios_asan.zip.sha1
@@ -1 +1 @@ -d18a425f47933aa269f84eb58baebd2f44152647 \ No newline at end of file +c7d69ad47d6c52a2cf27ff9e929c1ecb6fe9162d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 index 9bfeb59..cb6c3f7 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -5abadf8a52562999c29a41d886f21e1da08b18af \ No newline at end of file +daeef9a4d59eaa45feea8df798628691368fb15c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 index 2ac9c929..2d390530 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -4b9c95c82287c4aa97df988e24904f920393c49f \ No newline at end of file +2c6e9a9ecfbcc31bc59416504bdeab3e7dfd07c9 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 index ddd5db6..f485126 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -4d4b5167f3c4e869975bfe4313e60977364d17ea \ No newline at end of file +2bcd1186e1aeec65c58cf08f646a456f6aaff2c0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 25048090..fd4d9e53 100644 --- a/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_extension_keychain_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -8508521d4bcb9ddcc83bd091b455b41d3a9fd287 \ No newline at end of file +f7d17f4e9dfdd15c3e7c540a007c7c76bc6b8d58 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 index 7ccbc42..2665f92 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -75cd4529ea1397e9c8df9576cbf53c2c967e929e \ No newline at end of file +e577c78bc2b420cf60b76cb6644d0366e45fdd5a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 index 55d5430..25639980 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -e2f05f521d31c03623f802a04be956332421c510 \ No newline at end of file +2d8155477ba00d856c34602e271acfcb67682c8f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 index ff1387c..e1a329b8 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -75c73527000bcfc94a19f64e11395fed3cea5446 \ No newline at end of file +d55514ccc8957156d7203340c0406a4f429b1d4f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 0698811..d33600a 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -44e5f763b11f4690a7f5cc439fe284dc0f436172 \ No newline at end of file +bceac1fe99386daa90fc2bce83e7df7671def14e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 index e2c447e..2a81ebb 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -c667a035bde53969a5e88abd2502ac20df9bc2e3 \ No newline at end of file +66b5753fe863713bc19b98117a4b1d33a31fda04 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 index f065fd1..99b019e 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -a8273cf655842bd8f381a0111d057a4c09640435 \ No newline at end of file +21b77272699de6e49d920db3f2e27b5bb37b2a67 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 index 4f3c26e0..bc96ab8 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -68d4c6ad6d659d2ef0d659ec7d9c99b31941de2e \ No newline at end of file +b001fbc62314186446eea5d831d463b858cbb5a4 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 04afd23b..8599f9c 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -b532b4eb8de430e06e273c58f102306093ce3529 \ No newline at end of file +db0fc59a2fc99c9aa7723b1a20904bddfead6d70 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 index aa94a593..42636ff 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -51dfdc488d4ff468dc8b2cd81028a0f0ff2b55ed \ No newline at end of file +22824632a5c5fb22338e6768d30778cf7aed8baa \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 index d3cb27c2..26d81f4 100644 --- a/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_test_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -3edc277aa680fa4a5582af6629513db1057cbf83 \ No newline at end of file +490548ed7622da09aa5831d59a9c3b841c4779e3 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 index da4a9c1..9e2e05e 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -d36ee93dc168bef9a52ff94feeb2893ef74f180f \ No newline at end of file +1394c3a8a304c394d3a7d77248be387de5ca443e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 index 1f2cc20..0f5990e 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -155822676fb38728a590edd6211ac0cc05f87b6a \ No newline at end of file +caa6c136f8593d75417b9ad57cf46558925fd6cd \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 index d4135a6..af0be0f1 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -3911c025ac7baa9a499d60a234d7b331c329b5d0 \ No newline at end of file +7dce7d005ccf8867617158796a76f3ae3af17984 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 65bc760b..1f70053 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -83beebde1fae30f045966ebf1480adba511144a2 \ No newline at end of file +539c68d6087b8a424df794f0755d6fe394f65719 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 index 55d73d6..c8a8c1be 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@ -2fe1cfb155c6a0e26097bb04cfa373c8b7c26763 \ No newline at end of file +257296781760fa5d1963b1a8239f4632364e484e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 index 33f617d..184c7a6 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios_asan.zip.sha1
@@ -1 +1 @@ -c1db46be5a967c72fa61f0c846f095ab0e09beda \ No newline at end of file +23cc6a9e1facf9832d4043c69bac5ba895907641 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 index 0763f63..3ddaef6a 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@ -01cd34fec2d3af18cf79bfc0fa7fd28b8503b081 \ No newline at end of file +3fdf091c806720eea647c47f0d7706bc3efdd04d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 index 632b421..8208dc2 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator_asan.zip.sha1
@@ -1 +1 @@ -a3465e220facda7b0101fb118d76cf7b26da3480 \ No newline at end of file +dd10884ec822344149cb3e1bb8aee6cb84612cae \ No newline at end of file
diff --git a/ios/web_view/internal/passwords/web_view_password_feature_manager.h b/ios/web_view/internal/passwords/web_view_password_feature_manager.h index 42a401ca..b4d2efd1 100644 --- a/ios/web_view/internal/passwords/web_view_password_feature_manager.h +++ b/ios/web_view/internal/passwords/web_view_password_feature_manager.h
@@ -30,9 +30,6 @@ bool IsGenerationEnabled() const override; bool IsOptedInForAccountStorage() const override; - bool ShouldShowAccountStorageOptIn() const override; - bool ShouldShowAccountStorageReSignin( - const GURL& current_page_url) const override; password_manager::PasswordForm::Store GetDefaultPasswordStore() const override;
diff --git a/ios/web_view/internal/passwords/web_view_password_feature_manager.mm b/ios/web_view/internal/passwords/web_view_password_feature_manager.mm index 064a17d7..66ad571 100644 --- a/ios/web_view/internal/passwords/web_view_password_feature_manager.mm +++ b/ios/web_view/internal/passwords/web_view_password_feature_manager.mm
@@ -27,15 +27,6 @@ pref_service_, sync_service_); } -bool WebViewPasswordFeatureManager::ShouldShowAccountStorageOptIn() const { - return false; -} - -bool WebViewPasswordFeatureManager::ShouldShowAccountStorageReSignin( - const GURL& current_page_url) const { - return false; -} - password_manager::PasswordForm::Store WebViewPasswordFeatureManager::GetDefaultPasswordStore() const { // ios/web_view should never write to the profile password store.
diff --git a/ios_internal b/ios_internal index f0847b9..d366524 160000 --- a/ios_internal +++ b/ios_internal
@@ -1 +1 @@ -Subproject commit f0847b93cd608b74dcc2e37591097df607d035e6 +Subproject commit d36652422aa84dc3f7c2b0c386d10bfe42e2b824
diff --git a/media/renderers/video_resource_updater.cc b/media/renderers/video_resource_updater.cc index 9b8482653..fd660ae1 100644 --- a/media/renderers/video_resource_updater.cc +++ b/media/renderers/video_resource_updater.cc
@@ -450,12 +450,11 @@ viz::SinglePlaneFormat::kBGRA_8888, /*is_software=*/true), video_resource_updater_(video_resource_updater) { - auto shared_image_mapping = shared_image_interface->CreateSharedImage( - {viz::SinglePlaneFormat::kBGRA_8888, size, color_space, - gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, "VideoResourceUpdater"}); - shared_image_ = std::move(shared_image_mapping.shared_image); - shared_mapping_ = std::move(shared_image_mapping.mapping); - CHECK(shared_image_); + shared_image_ = + shared_image_interface->CreateSharedImageForSoftwareCompositor( + {viz::SinglePlaneFormat::kBGRA_8888, size, color_space, + gpu::SHARED_IMAGE_USAGE_CPU_WRITE_ONLY, "VideoResourceUpdater"}); + mapping_ = shared_image_->Map(); sync_token_ = shared_image_interface->GenVerifiedSyncToken(); } @@ -473,11 +472,11 @@ } const gpu::SyncToken& sync_token() { return sync_token_; } - void* pixels() { return shared_mapping_.memory(); } + void* pixels() { return mapping_->GetMemoryForPlane(0).data(); } // Returns a memory dump GUID consistent across processes. base::UnguessableToken GetSharedMemoryGuid() const { - return shared_mapping_.guid(); + return mapping_->GetSharedMemoryGuid(); } private: @@ -487,7 +486,7 @@ gpu::SyncToken sync_token_; scoped_refptr<gpu::ClientSharedImage> shared_image_; - base::WritableSharedMemoryMapping shared_mapping_; + std::unique_ptr<gpu::ClientSharedImage::ScopedMapping> mapping_; }; class VideoResourceUpdater::HardwarePlaneResource
diff --git a/net/base/features.cc b/net/base/features.cc index fc415e79..e777c22 100644 --- a/net/base/features.cc +++ b/net/base/features.cc
@@ -226,6 +226,10 @@ "RequestStorageAccessNoCorsRequired", base::FEATURE_DISABLED_BY_DEFAULT); +BASE_FEATURE(kStorageAccessApiFollowsSameOriginPolicy, + "StorageAccessApiFollowsSameOriginPolicy", + base::FEATURE_DISABLED_BY_DEFAULT); + BASE_FEATURE(kStaticKeyPinningEnforcement, "StaticKeyPinningEnforcement", base::FEATURE_ENABLED_BY_DEFAULT);
diff --git a/net/base/features.h b/net/base/features.h index e24a5c7..19c1a93 100644 --- a/net/base/features.h +++ b/net/base/features.h
@@ -295,6 +295,13 @@ // requests allowed because of requestStorageAccessFor instead of cors. NET_EXPORT BASE_DECLARE_FEATURE(kRequestStorageAccessNoCorsRequired); +// When enabled, the Storage Access API follows the Same Origin Policy when +// including cookies on network requests. (I.e., a cross-site cookie is only +// included via the Storage Access API if the request's URL's origin [not site] +// has opted into receiving cross-site cookies.) +NET_EXPORT +BASE_DECLARE_FEATURE(kStorageAccessApiFollowsSameOriginPolicy); + // Controls whether static key pinning is enforced. NET_EXPORT BASE_DECLARE_FEATURE(kStaticKeyPinningEnforcement);
diff --git a/net/cookies/cookie_util.cc b/net/cookies/cookie_util.cc index d9b3bf0..7e3bf9b 100644 --- a/net/cookies/cookie_util.cc +++ b/net/cookies/cookie_util.cc
@@ -1162,6 +1162,10 @@ RecordStorageAccessNetRequestMetric(kind); } + if (base::FeatureList::IsEnabled( + features::kStorageAccessApiFollowsSameOriginPolicy)) { + return kind == kSameOrigin; + } return kind != kCrossSite; }
diff --git a/services/device/android/java/src/org/chromium/services/device/InterfaceRegistrar.java b/services/device/android/java/src/org/chromium/services/device/InterfaceRegistrar.java index e0a6d68..3ef478d 100644 --- a/services/device/android/java/src/org/chromium/services/device/InterfaceRegistrar.java +++ b/services/device/android/java/src/org/chromium/services/device/InterfaceRegistrar.java
@@ -7,7 +7,6 @@ import org.jni_zero.CalledByNative; import org.jni_zero.JNINamespace; -import org.chromium.build.annotations.NullMarked; import org.chromium.device.battery.BatteryMonitorFactory; import org.chromium.device.mojom.BatteryMonitor; import org.chromium.device.mojom.NfcProvider; @@ -17,7 +16,6 @@ import org.chromium.services.service_manager.InterfaceRegistry; @JNINamespace("device") -@NullMarked class InterfaceRegistrar { @CalledByNative static void createInterfaceRegistryForContext(long nativeHandle, NfcDelegate nfcDelegate) {
diff --git a/services/network/public/cpp/single_request_url_loader_factory.cc b/services/network/public/cpp/single_request_url_loader_factory.cc index a0a6332b..66ec22a 100644 --- a/services/network/public/cpp/single_request_url_loader_factory.cc +++ b/services/network/public/cpp/single_request_url_loader_factory.cc
@@ -19,27 +19,32 @@ : public base::RefCountedThreadSafe< SingleRequestURLLoaderFactory::HandlerState> { public: - explicit HandlerState(RequestHandler handler) + explicit HandlerState(FullRequestHandler handler) : handler_(std::move(handler)), handler_task_runner_(base::SequencedTaskRunner::GetCurrentDefault()) {} HandlerState(const HandlerState&) = delete; HandlerState& operator=(const HandlerState&) = delete; - void HandleRequest(const ResourceRequest& resource_request, - mojo::PendingReceiver<mojom::URLLoader> loader, - mojo::PendingRemote<mojom::URLLoaderClient> client) { + void CreateLoaderAndStart( + mojo::PendingReceiver<mojom::URLLoader> loader, + int32_t request_id, + uint32_t options, + const ResourceRequest& request, + mojo::PendingRemote<mojom::URLLoaderClient> client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { if (!handler_task_runner_->RunsTasksInCurrentSequence()) { handler_task_runner_->PostTask( FROM_HERE, - base::BindOnce(&HandlerState::HandleRequest, this, resource_request, - std::move(loader), std::move(client))); + base::BindOnce(&HandlerState::CreateLoaderAndStart, this, + std::move(loader), request_id, options, request, + std::move(client), traffic_annotation)); return; } DCHECK(handler_); - std::move(handler_).Run(resource_request, std::move(loader), - std::move(client)); + std::move(handler_).Run(std::move(loader), request_id, options, request, + std::move(client), traffic_annotation); } private: @@ -53,9 +58,9 @@ } } - static void DropHandlerOnHandlerSequence(RequestHandler handler) {} + static void DropHandlerOnHandlerSequence(FullRequestHandler handler) {} - RequestHandler handler_; + FullRequestHandler handler_; const scoped_refptr<base::SequencedTaskRunner> handler_task_runner_; }; @@ -81,7 +86,23 @@ SingleRequestURLLoaderFactory::SingleRequestURLLoaderFactory( RequestHandler handler) - : state_(base::MakeRefCounted<HandlerState>(std::move(handler))) {} + : state_(base::MakeRefCounted<HandlerState>(base::BindOnce( + [](RequestHandler handler, + mojo::PendingReceiver<network::mojom::URLLoader> loader, + int32_t request_id, + uint32_t options, + const network::ResourceRequest& request, + mojo::PendingRemote<network::mojom::URLLoaderClient> client, + const net::MutableNetworkTrafficAnnotationTag& + traffic_annotation) { + std::move(handler).Run(request, std::move(loader), + std::move(client)); + }, + std::move(handler)))) {} + +SingleRequestURLLoaderFactory::SingleRequestURLLoaderFactory( + FullRequestHandler full_handler) + : state_(base::MakeRefCounted<HandlerState>(std::move(full_handler))) {} void SingleRequestURLLoaderFactory::CreateLoaderAndStart( mojo::PendingReceiver<mojom::URLLoader> loader, @@ -90,7 +111,8 @@ const ResourceRequest& request, mojo::PendingRemote<mojom::URLLoaderClient> client, const net::MutableNetworkTrafficAnnotationTag& traffic_annotation) { - state_->HandleRequest(request, std::move(loader), std::move(client)); + state_->CreateLoaderAndStart(std::move(loader), request_id, options, request, + std::move(client), traffic_annotation); } void SingleRequestURLLoaderFactory::Clone(
diff --git a/services/network/public/cpp/single_request_url_loader_factory.h b/services/network/public/cpp/single_request_url_loader_factory.h index 54d4b16..335e53a 100644 --- a/services/network/public/cpp/single_request_url_loader_factory.h +++ b/services/network/public/cpp/single_request_url_loader_factory.h
@@ -5,13 +5,12 @@ #ifndef SERVICES_NETWORK_PUBLIC_CPP_SINGLE_REQUEST_URL_LOADER_FACTORY_H_ #define SERVICES_NETWORK_PUBLIC_CPP_SINGLE_REQUEST_URL_LOADER_FACTORY_H_ -#include "services/network/public/cpp/shared_url_loader_factory.h" - #include "base/component_export.h" #include "base/memory/ref_counted.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver_set.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/url_loader.mojom.h" namespace network { @@ -22,6 +21,7 @@ class COMPONENT_EXPORT(NETWORK_CPP) SingleRequestURLLoaderFactory : public network::SharedURLLoaderFactory { public: + // Some arguments of `CreateLoaderAndStart()` are forwarded. using RequestHandler = base::OnceCallback<void( const network::ResourceRequest& resource_request, mojo::PendingReceiver<network::mojom::URLLoader>, @@ -29,6 +29,17 @@ explicit SingleRequestURLLoaderFactory(RequestHandler handler); + // All arguments of `CreateLoaderAndStart()` are forwarded. + using FullRequestHandler = base::OnceCallback<void( + mojo::PendingReceiver<mojom::URLLoader> loader, + int32_t request_id, + uint32_t options, + const ResourceRequest& request, + mojo::PendingRemote<mojom::URLLoaderClient> client, + const net::MutableNetworkTrafficAnnotationTag& traffic_annotation)>; + + explicit SingleRequestURLLoaderFactory(FullRequestHandler full_handler); + SingleRequestURLLoaderFactory(const SingleRequestURLLoaderFactory&) = delete; SingleRequestURLLoaderFactory& operator=( const SingleRequestURLLoaderFactory&) = delete;
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index 3cab8aa70..21fe7223 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -1679,7 +1679,9 @@ net::SchemefulSite(origin) != net::SchemefulSite(pending_origin); storage_access_redirect_kind = cross_site ? kCrossSite : kCrossOriginSameSite; - if (cross_site) { + if (cross_site || + base::FeatureList::IsEnabled( + net::features::kStorageAccessApiFollowsSameOriginPolicy)) { url_request_->cookie_setting_overrides().Remove( net::CookieSettingOverride::kStorageAccessGrantEligible); }
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc index 4a388994c..eac36da0 100644 --- a/services/network/url_loader_unittest.cc +++ b/services/network/url_loader_unittest.cc
@@ -991,6 +991,7 @@ EXPECT_EQ(actual_body, expected_body); } + const net::EmbeddedTestServer* test_server() const { return &test_server_; } net::EmbeddedTestServer* test_server() { return &test_server_; } net::URLRequestContext* url_request_context() { return url_request_context_.get(); @@ -5260,8 +5261,18 @@ class URLLoaderCookieSettingOverridesTest : public URLLoaderTest, public ::testing::WithParamInterface< - std::tuple<bool, bool, net::StorageAccessApiStatus, bool>> { + std::tuple<bool, + bool, + net::StorageAccessApiStatus, + std::string, + bool>> { public: + URLLoaderCookieSettingOverridesTest() { + features_.InitWithFeatureState( + net::features::kStorageAccessApiFollowsSameOriginPolicy, + storage_access_api_follows_same_origin_policy()); + } + ~URLLoaderCookieSettingOverridesTest() override = default; void SetUpRequest(ResourceRequest& request) { @@ -5273,13 +5284,11 @@ } request.is_outermost_main_frame = IsOuterMostFrame(); request.storage_access_api_status = StorageAccessApiStatus(); - if (!InitiatorIsOtherOrigin()) { - request.request_initiator = - url::Origin::Create(GURL("http://other-origin.test/")); - } + request.request_initiator = Initiator(); } - net::CookieSettingOverrides ExpectedCookieSettingOverrides() const { + net::CookieSettingOverrides ExpectedCookieSettingOverrides( + const ResourceRequest& request) const { net::CookieSettingOverrides overrides; if (IsCors() && IsOuterMostFrame()) { overrides.Put( @@ -5289,7 +5298,10 @@ case net::StorageAccessApiStatus::kNone: break; case net::StorageAccessApiStatus::kAccessViaAPI: - if (InitiatorIsOtherOrigin()) { + if (Initiator().IsSameOriginWith(request.url) || + (!storage_access_api_follows_same_origin_policy() && + net::SchemefulSite(Initiator()) == + net::SchemefulSite(request.url))) { overrides.Put( net::CookieSettingOverride::kStorageAccessGrantEligible); } @@ -5299,105 +5311,99 @@ } net::CookieSettingOverrides - ExpectedCookieSettingOverridesForCrossSiteRedirect() const { - net::CookieSettingOverrides overrides = ExpectedCookieSettingOverrides(); + ExpectedCookieSettingOverridesForCrossOriginRedirect( + const ResourceRequest& request) const { + net::CookieSettingOverrides overrides = + ExpectedCookieSettingOverrides(request); + if (storage_access_api_follows_same_origin_policy()) { + overrides.Remove(net::CookieSettingOverride::kStorageAccessGrantEligible); + } + return overrides; + } + + net::CookieSettingOverrides + ExpectedCookieSettingOverridesForCrossSiteRedirect( + const ResourceRequest& request) const { + net::CookieSettingOverrides overrides = + ExpectedCookieSettingOverrides(request); overrides.Remove(net::CookieSettingOverride::kStorageAccessGrantEligible); return overrides; } - private: + protected: bool IsCors() const { return std::get<0>(GetParam()); } bool IsOuterMostFrame() const { return std::get<1>(GetParam()); } net::StorageAccessApiStatus StorageAccessApiStatus() const { return std::get<2>(GetParam()); } - bool InitiatorIsOtherOrigin() const { return std::get<3>(GetParam()); } + url::Origin Initiator() const { + return url::Origin::Create( + test_server()->GetURL(std::get<3>(GetParam()), "/")); + } + bool storage_access_api_follows_same_origin_policy() const { + return std::get<4>(GetParam()); + } + + private: + base::test::ScopedFeatureList features_; }; -TEST_P(URLLoaderCookieSettingOverridesTest, CookieSettingOverrides) { - GURL url("http://www.example.com.test/"); - base::RunLoop delete_run_loop; +// This test makes a request to an endpoint which does not redirect. +TEST_P(URLLoaderCookieSettingOverridesTest, NoRedirect) { + const GURL url = test_server()->GetURL(kHostnameWithAliases, "/"); + ResourceRequest request = CreateResourceRequest("GET", url); SetUpRequest(request); - mojo::PendingRemote<mojom::URLLoader> loader; - std::unique_ptr<URLLoader> url_loader; - context().mutable_factory_params().process_id = mojom::kBrowserProcessId; - url_loader = URLLoaderOptions().MakeURLLoader( - context(), DeleteLoaderCallback(&delete_run_loop, &url_loader), - loader.InitWithNewPipeAndPassReceiver(), request, - client()->CreateRemote()); + EXPECT_EQ(LoadRequest(request), net::OK); - client()->RunUntilComplete(); - delete_run_loop.Run(); - - const std::vector<net::CookieSettingOverrides> records = - test_network_delegate()->cookie_setting_overrides_records(); - EXPECT_THAT(records, ElementsAre(ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverrides())); + EXPECT_THAT(test_network_delegate()->cookie_setting_overrides_records(), + ElementsAre(ExpectedCookieSettingOverrides(request), + ExpectedCookieSettingOverrides(request))); } -TEST_P(URLLoaderCookieSettingOverridesTest, - CookieSettingOverrides_OnSameSiteRedirects) { - GURL redirecting_url = test_server()->GetURL( - "/server-redirect?" + test_server()->GetURL("/simple_page.html").spec()); +// This test makes a request to an endpoint that redirects to a cross-origin, +// same-site endpoint. +TEST_P(URLLoaderCookieSettingOverridesTest, CrossOriginSameSiteRedirect) { + const GURL url = test_server()->GetURL( + kHostnameWithAliases, + "/server-redirect?" + + test_server()->GetURL("example.test", "/simple_page.html").spec()); - base::RunLoop delete_run_loop; - ResourceRequest request = CreateResourceRequest("GET", redirecting_url); + ResourceRequest request = CreateResourceRequest("GET", url); SetUpRequest(request); - mojo::Remote<mojom::URLLoader> loader; - std::unique_ptr<URLLoader> url_loader; - context().mutable_factory_params().process_id = mojom::kBrowserProcessId; - url_loader = URLLoaderOptions().MakeURLLoader( - context(), DeleteLoaderCallback(&delete_run_loop, &url_loader), - loader.BindNewPipeAndPassReceiver(), request, client()->CreateRemote()); - - client()->RunUntilRedirectReceived(); - loader->FollowRedirect({}, {}, {}, std::nullopt); - client()->RunUntilComplete(); - delete_run_loop.Run(); - - const std::vector<net::CookieSettingOverrides> records = - test_network_delegate()->cookie_setting_overrides_records(); - - EXPECT_THAT(records, ElementsAre(ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverrides())); -} - -TEST_P(URLLoaderCookieSettingOverridesTest, - CookieSettingOverrides_OnCrossSiteRedirects) { - GURL dest_url("http://www.example.com.test/"); - GURL redirecting_url = - test_server()->GetURL("/server-redirect?" + dest_url.spec()); - - base::RunLoop delete_run_loop; - ResourceRequest request = CreateResourceRequest("GET", redirecting_url); - SetUpRequest(request); - - mojo::Remote<mojom::URLLoader> loader; - std::unique_ptr<URLLoader> url_loader; - context().mutable_factory_params().process_id = mojom::kBrowserProcessId; - url_loader = URLLoaderOptions().MakeURLLoader( - context(), DeleteLoaderCallback(&delete_run_loop, &url_loader), - loader.BindNewPipeAndPassReceiver(), request, client()->CreateRemote()); - - client()->RunUntilRedirectReceived(); - loader->FollowRedirect({}, {}, {}, std::nullopt); - client()->RunUntilComplete(); - delete_run_loop.Run(); - - const std::vector<net::CookieSettingOverrides> records = - test_network_delegate()->cookie_setting_overrides_records(); + set_expect_redirect(); + EXPECT_EQ(LoadRequest(request), net::OK); EXPECT_THAT( - records, - ElementsAre(ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverrides(), - ExpectedCookieSettingOverridesForCrossSiteRedirect(), - ExpectedCookieSettingOverridesForCrossSiteRedirect())); + test_network_delegate()->cookie_setting_overrides_records(), + ElementsAre( + ExpectedCookieSettingOverrides(request), + ExpectedCookieSettingOverrides(request), + ExpectedCookieSettingOverridesForCrossOriginRedirect(request), + ExpectedCookieSettingOverridesForCrossOriginRedirect(request))); +} + +// This test makes a request to an endpoint which redirects to a cross-site +// endpoint. +TEST_P(URLLoaderCookieSettingOverridesTest, CrossSiteRedirect) { + const GURL url = test_server()->GetURL( + kHostnameWithAliases, + "/server-redirect?" + test_server()->GetURL("other.test", "/").spec()); + + ResourceRequest request = CreateResourceRequest("GET", url); + SetUpRequest(request); + + set_expect_redirect(); + EXPECT_EQ(LoadRequest(request), net::OK); + + EXPECT_THAT( + test_network_delegate()->cookie_setting_overrides_records(), + ElementsAre(ExpectedCookieSettingOverrides(request), + ExpectedCookieSettingOverrides(request), + ExpectedCookieSettingOverridesForCrossSiteRedirect(request), + ExpectedCookieSettingOverridesForCrossSiteRedirect(request))); } // This test sends a request to an endpoint that is cross-site from the @@ -5405,35 +5411,32 @@ // to the initiator. The second redirect leg should not have the // `kStorageAccessGrantEligible` override, since that would include cookies on // the request and therefore make a CSRF attack possible via that redirect. -TEST_P(URLLoaderCookieSettingOverridesTest, - CookieSettingOverrides_OnCrossSiteToSameSite) { - GURL cross_site_to_same_site_redirect_url = test_server()->GetURL( - kHostnameWithAliases, - "/server-redirect?" + test_server()->GetURL("/empty.html").spec()); +TEST_P(URLLoaderCookieSettingOverridesTest, OnCrossSiteToSameSite) { + if (!Initiator().DomainIs(kHostnameWithAliases)) { + // This test sets its own request initiator below, so it effectively ignores + // the `initiator()` test param. WLOG, we can skip all but one of the + // instances of that param. + GTEST_SKIP(); + } - base::RunLoop delete_run_loop; - ResourceRequest request = - CreateResourceRequest("GET", cross_site_to_same_site_redirect_url); - request.request_initiator = test_server()->GetOrigin(); + const GURL url = test_server()->GetURL( + "cross-site.test", + "/server-redirect?" + + test_server()->GetURL(kHostnameWithAliases, "/empty.html").spec()); + + ResourceRequest request = CreateResourceRequest("GET", url); SetUpRequest(request); + request.request_initiator = test_server()->GetOrigin(); - mojo::Remote<mojom::URLLoader> loader; - std::unique_ptr<URLLoader> url_loader; - context().mutable_factory_params().process_id = mojom::kBrowserProcessId; - url_loader = URLLoaderOptions().MakeURLLoader( - context(), DeleteLoaderCallback(&delete_run_loop, &url_loader), - loader.BindNewPipeAndPassReceiver(), request, client()->CreateRemote()); + set_expect_redirect(); + EXPECT_EQ(LoadRequest(request), net::OK); - client()->RunUntilRedirectReceived(); - loader->FollowRedirect({}, {}, {}, std::nullopt); - client()->RunUntilComplete(); - delete_run_loop.Run(); EXPECT_THAT( test_network_delegate()->cookie_setting_overrides_records(), - ElementsAre(ExpectedCookieSettingOverridesForCrossSiteRedirect(), - ExpectedCookieSettingOverridesForCrossSiteRedirect(), - ExpectedCookieSettingOverridesForCrossSiteRedirect(), - ExpectedCookieSettingOverridesForCrossSiteRedirect())); + ElementsAre(ExpectedCookieSettingOverridesForCrossSiteRedirect(request), + ExpectedCookieSettingOverridesForCrossSiteRedirect(request), + ExpectedCookieSettingOverridesForCrossSiteRedirect(request), + ExpectedCookieSettingOverridesForCrossSiteRedirect(request))); } TEST_F(URLLoaderTest, DevToolsCookieSettingOverrides_NotApplied) { @@ -5498,6 +5501,13 @@ testing::Bool(), testing::Values(net::StorageAccessApiStatus::kNone, net::StorageAccessApiStatus::kAccessViaAPI), + testing::Values( + // Same-origin initiator + kHostnameWithAliases, + // Same-site cross-origin initiator + "example.test", + // Cross-site initiator + "other-origin.test"), testing::Bool())); namespace {
diff --git a/testing/buildbot/filters/ios.content_browsertests.filter b/testing/buildbot/filters/ios.content_browsertests.filter index eab3b0a4..7a035c7 100644 --- a/testing/buildbot/filters/ios.content_browsertests.filter +++ b/testing/buildbot/filters/ios.content_browsertests.filter
@@ -826,3 +826,8 @@ -All/CustomizableSelectDisabledDumpAccessibilityTreeTest.AccessibilitySelectOpen/blink -All/CustomizableSelectEnabledDumpAccessibilityTreeTest.AccessibilitySelectOpen/blink -All/CustomizableSelectEnabledDumpAccessibilityTreeTest.ENABLED_AccessibiltySelect/blink + +# TODO(crbug.com/384770166): These tests have been failing since +# https://crrev.com/c/6101118. +-PrerenderBrowserTest.ActivateOnWindowOpen_NewTab +-PrerenderBrowserTest.ActivateOnWindowOpen_PopUp
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 361ef973..b6d690f1 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -2447,6 +2447,27 @@ ] } ], + "AutofillRecordCorrectionOfSelectElements": [ + { + "platforms": [ + "android", + "chromeos", + "chromeos_lacros", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AutofillRecordCorrectionOfSelectElements" + ] + } + ] + } + ], "AutofillSharedStorageServerCardData": [ { "platforms": [ @@ -21786,6 +21807,25 @@ ] } ], + "SimpleCachePrioritizedCaching": [ + { + "platforms": [ + "android", + "android_webview", + "chromeos", + "linux", + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SimpleCachePrioritizedCaching" + ] + } + ] + } + ], "SingleNTPRemoveExtraNTPs": [ { "platforms": [ @@ -23451,6 +23491,7 @@ "platforms": [ "android", "android_webview", + "chromeos", "linux", "mac", "windows"
diff --git a/third_party/angle b/third_party/angle index 53ec86a..853087b 160000 --- a/third_party/angle +++ b/third_party/angle
@@ -1 +1 @@ -Subproject commit 53ec86ab118cb7892a8d310a0ce6576109a211ec +Subproject commit 853087b79259af4a2893ab7bb3f1004eaf189d4f
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index d1f03de..f0b3dd5 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -992,14 +992,13 @@ InteractiveContentOptionChild InteractiveContentLegendChild - # This isue warns about errors in the select element content model. + # This issue warns about errors in the select element content model. type SelectElementAccessibilityIssueDetails extends object properties DOM.BackendNodeId nodeId SelectElementAccessibilityIssueReason selectElementAccessibilityIssueReason boolean hasDisallowedAttributes - type StyleSheetLoadingIssueReason extends string enum LateImportRule
diff --git a/third_party/blink/public/mojom/ai/model_streaming_responder.mojom b/third_party/blink/public/mojom/ai/model_streaming_responder.mojom index 465095c..b52c24ce 100644 --- a/third_party/blink/public/mojom/ai/model_streaming_responder.mojom +++ b/third_party/blink/public/mojom/ai/model_streaming_responder.mojom
@@ -41,6 +41,8 @@ kErrorCancelled = 12, // The session has been destroyed. kErrorSessionDestroyed = 13, + // The prompt is too large to be stored in the context. + kErrorPromptRequestTooLarge = 14, // Append new items here. }; // LINT.ThenChange(//tools/metrics/histograms/metadata/ai/enums.xml:AIModelStreamingResponseStatus) @@ -49,8 +51,6 @@ struct ModelExecutionContextInfo { // The latest number of existing tokens. uint64 current_tokens; - // Whether the context overflow happened in this round of model execution. - bool did_overflow; }; // The responder provides methods for the session to return the execution @@ -67,4 +67,9 @@ // It will only be set when necessary, for example, in the `AILanguageModel` // interface as it maintains the context of the past model execution. OnCompletion(ModelExecutionContextInfo? context_info); + // Called when the `AILanguageModel` evicts some items from the context in + // order to make space for the newly added items. + // This might be called multiple times after prompting, but it won't happen + // after `OnCompletion()` or `OnError()`. + OnContextOverflow(); };
diff --git a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc index 1b24938..07ffedb5 100644 --- a/third_party/blink/renderer/core/css/parser/css_parser_impl.cc +++ b/third_party/blink/renderer/core/css/parser/css_parser_impl.cc
@@ -2252,55 +2252,13 @@ // Parse a type for CSS Functions; e.g. length, color, etc.. // These are being converted to the syntax used by registered custom properties. // The parameter is assumed to be a single ident token. -static std::optional<StyleRuleFunction::Type> ParseFunctionType( +static std::optional<CSSSyntaxDefinition> ParseFunctionType( StringView type_name) { - std::optional<CSSSyntaxDefinition> syntax_def; if (type_name == "any") { - syntax_def = CSSSyntaxStringParser("*").Parse(); + return CSSSyntaxStringParser("*").Parse(); } else { - syntax_def = - CSSSyntaxStringParser("<" + type_name.ToString() + ">").Parse(); + return CSSSyntaxStringParser("<" + type_name.ToString() + ">").Parse(); } - if (!syntax_def) { - return {}; - } - - CHECK_EQ(syntax_def->Components().size(), 1u); - bool should_add_implicit_calc = false; - if (!syntax_def->IsUniversal()) { - // These are all the supported values in CSSSyntaxDefinition that are - // acceptable as inputs to calc(); see - // https://drafts.csswg.org/css-values/#math. - switch (syntax_def->Components()[0].GetType()) { - case CSSSyntaxType::kLength: - // kFrequency is missing. - case CSSSyntaxType::kAngle: - case CSSSyntaxType::kTime: - // kFlex is missing. - case CSSSyntaxType::kResolution: - case CSSSyntaxType::kPercentage: - case CSSSyntaxType::kNumber: - case CSSSyntaxType::kInteger: - case CSSSyntaxType::kLengthPercentage: - should_add_implicit_calc = true; - break; - case CSSSyntaxType::kTokenStream: - case CSSSyntaxType::kIdent: - case CSSSyntaxType::kColor: - case CSSSyntaxType::kImage: - case CSSSyntaxType::kUrl: - case CSSSyntaxType::kTransformFunction: - case CSSSyntaxType::kTransformList: - case CSSSyntaxType::kCustomIdent: - break; - case CSSSyntaxType::kString: - DCHECK(RuntimeEnabledFeatures::CSSAtPropertyStringSyntaxEnabled()); - break; - } - } - - return StyleRuleFunction::Type{std::move(*syntax_def), - should_add_implicit_calc}; } StyleRuleFunction* CSSParserImpl::ConsumeFunctionRule( @@ -2339,7 +2297,7 @@ return nullptr; } StringView return_type_name = stream.Peek().Value(); - std::optional<StyleRuleFunction::Type> return_type = + std::optional<CSSSyntaxDefinition> return_type = ParseFunctionType(return_type_name); if (!return_type) { ConsumeErroneousAtRule(stream, CSSAtRuleID::kCSSAtRuleFunction); @@ -2486,7 +2444,7 @@ return {}; } StringView type_name = stream.Peek().Value(); - std::optional<StyleRuleFunction::Type> type = ParseFunctionType(type_name); + std::optional<CSSSyntaxDefinition> type = ParseFunctionType(type_name); if (!type) { return {}; // Invalid type name. }
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc index 1284bde..68d4064d 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -1546,36 +1546,20 @@ // through a large tree of function calls. const CSSValue* StyleCascade::ResolveFunctionExpression( StringView expr, - const StyleRuleFunction::Type& type, + const CSSSyntaxDefinition& type, CascadeResolver& resolver, const CSSParserContext& context, const FunctionContext& function_context) { TokenSequence resolved_expr; - // See documentation on should_add_implicit_calc. - if (type.should_add_implicit_calc) { - static const char kCalcToken[] = "calc"; - static const char kCalcStart[] = "calc("; - resolved_expr.Append( - CSSParserToken(kFunctionToken, kCalcToken, CSSParserToken::kBlockStart), - false, kCalcStart); - } - CSSParserTokenStream argument_stream(expr); if (!ResolveTokensInto(argument_stream, resolver, context, function_context, /* stop_type */ kEOFToken, resolved_expr)) { return nullptr; } - if (type.should_add_implicit_calc) { - static const char kCalcEnd[] = ")"; - resolved_expr.Append( - CSSParserToken(kRightParenthesisToken, CSSParserToken::kBlockEnd), - false, kCalcEnd); - } - - const CSSValue* value = type.syntax.Parse( - resolved_expr.OriginalText(), context, /*is_animation_tainted=*/false); + const CSSValue* value = type.Parse(resolved_expr.OriginalText(), context, + /*is_animation_tainted=*/false); if (!value) { return nullptr; }
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.h b/third_party/blink/renderer/core/css/resolver/style_cascade.h index c64f4ca..89e3bdf 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.h +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.h
@@ -443,7 +443,7 @@ const CSSValue* ResolveFunctionExpression( StringView expr, - const StyleRuleFunction::Type& type, + const CSSSyntaxDefinition& type, CascadeResolver& resolver, const CSSParserContext& context, const FunctionContext& function_context);
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc index 73bdd7cc..0041e23 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -4394,13 +4394,13 @@ TEST_F(StyleCascadeTest, CSSFunctionImplicitCalc) { AppendSheet(R"HTML( @function --foo(--x: number): number { - @return arg(--x) * 2; + @return calc(arg(--x) * 2); } )HTML"); TestCascade cascade(GetDocument()); - cascade.Add("--result", "--foo(4 + 5)"); + cascade.Add("--result", "--foo(calc(4 + 5))"); cascade.Apply(); EXPECT_EQ("18", cascade.ComputedValue("--result"));
diff --git a/third_party/blink/renderer/core/css/style_rule.cc b/third_party/blink/renderer/core/css/style_rule.cc index 96dd6a46..8bdba29 100644 --- a/third_party/blink/renderer/core/css/style_rule.cc +++ b/third_party/blink/renderer/core/css/style_rule.cc
@@ -980,7 +980,7 @@ AtomicString name, Vector<StyleRuleFunction::Parameter> parameters, CSSVariableData* function_body, - StyleRuleFunction::Type return_type) + CSSSyntaxDefinition return_type) : StyleRuleBase(kFunction), name_(std::move(name)), parameters_(std::move(parameters)),
diff --git a/third_party/blink/renderer/core/css/style_rule.h b/third_party/blink/renderer/core/css/style_rule.h index b5c77cdf..c8d44a0 100644 --- a/third_party/blink/renderer/core/css/style_rule.h +++ b/third_party/blink/renderer/core/css/style_rule.h
@@ -620,33 +620,21 @@ // An @function rule, representing a CSS function. class CORE_EXPORT StyleRuleFunction : public StyleRuleBase { public: - struct Type { - CSSSyntaxDefinition syntax; - - // Whether this is a numeric type, that would be accepted by calc() - // (see https://drafts.csswg.org/css-values/#calc-func). This is used - // to allow the user to not have to write calc() around every single - // expression, so that one could do e.g. --foo(2 + 2) instead of - // --foo(calc(2 + 2)). Since writing calc() around an expression of - // such a type will never change its meaning, and nested calc is allowed, - // this is always safe even when not needed. - bool should_add_implicit_calc; - }; struct Parameter { String name; - Type type; + CSSSyntaxDefinition type; }; StyleRuleFunction(AtomicString name, Vector<Parameter> parameters, CSSVariableData* function_body, - Type return_type); + CSSSyntaxDefinition return_type); StyleRuleFunction(const StyleRuleFunction&) = delete; const AtomicString& GetName() const { return name_; } const Vector<Parameter>& GetParameters() const { return parameters_; } CSSVariableData& GetFunctionBody() const { return *function_body_; } - const Type& GetReturnType() const { return return_type_; } + const CSSSyntaxDefinition& GetReturnType() const { return return_type_; } void TraceAfterDispatch(blink::Visitor*) const; @@ -654,7 +642,7 @@ AtomicString name_; Vector<Parameter> parameters_; Member<CSSVariableData> function_body_; - Type return_type_; + CSSSyntaxDefinition return_type_; }; // An @mixin rule, representing a CSS mixin. We store all of the rules
diff --git a/third_party/blink/renderer/core/editing/commands/apply_style_command.cc b/third_party/blink/renderer/core/editing/commands/apply_style_command.cc index b0ac175d..75c51018 100644 --- a/third_party/blink/renderer/core/editing/commands/apply_style_command.cc +++ b/third_party/blink/renderer/core/editing/commands/apply_style_command.cc
@@ -61,6 +61,7 @@ #include "third_party/blink/renderer/core/layout/layout_text.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/instrumentation/use_counter.h" +#include "third_party/blink/renderer/platform/runtime_enabled_features.h" #include "third_party/blink/renderer/platform/wtf/std_lib_extras.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" @@ -707,30 +708,42 @@ // of it bool split_start = IsValidCaretPositionInTextNode(start); if (split_start) { - if (ShouldSplitTextElement(start.AnchorNode()->parentElement(), style)) + bool should_split_text_element = + ShouldSplitTextElement(start.AnchorNode()->parentElement(), style); + if (should_split_text_element) { SplitTextElementAtStart(start, end); - else + } else { SplitTextAtStart(start, end); + } start = StartPosition(); end = EndPosition(); if (start.IsNull() || end.IsNull()) return; - start_dummy_span_ancestor = DummySpanAncestorForNode(start.AnchorNode()); + if (!RuntimeEnabledFeatures::SplitTextNotCleanupDummySpansEnabled() || + should_split_text_element) { + start_dummy_span_ancestor = DummySpanAncestorForNode(start.AnchorNode()); + } } // split the end node and containing element if the selection ends inside of // it bool split_end = IsValidCaretPositionInTextNode(end); if (split_end) { - if (ShouldSplitTextElement(end.AnchorNode()->parentElement(), style)) + bool should_split_text_element = + ShouldSplitTextElement(end.AnchorNode()->parentElement(), style); + if (should_split_text_element) { SplitTextElementAtEnd(start, end); - else + } else { SplitTextAtEnd(start, end); + } start = StartPosition(); end = EndPosition(); if (start.IsNull() || end.IsNull()) return; - end_dummy_span_ancestor = DummySpanAncestorForNode(end.AnchorNode()); + if (!RuntimeEnabledFeatures::SplitTextNotCleanupDummySpansEnabled() || + should_split_text_element) { + end_dummy_span_ancestor = DummySpanAncestorForNode(end.AnchorNode()); + } } // Remove style from the selection.
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h index f038b594..8d8a5ff3 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h +++ b/third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h
@@ -178,9 +178,6 @@ return nullptr; } - SkColorInfo CanvasRenderingContextSkColorInfo() const { - return SkColorInfo(GetSkColorType(), GetAlphaType(), GetSkColorSpace()); - } virtual SkAlphaType GetAlphaType() const = 0; virtual SkColorType GetSkColorType() const = 0; virtual sk_sp<SkColorSpace> GetSkColorSpace() const = 0;
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index e8db77a6..3baf63fe 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -936,8 +936,7 @@ } const bool context_color_is_opaque = - context_ ? context_->CanvasRenderingContextSkColorInfo().isOpaque() - : false; + context_ ? SkAlphaTypeIsOpaque(context_->GetAlphaType()) : false; for (CanvasDrawListener* listener : listeners_) { if (!listener->NeedsNewFrame())
diff --git a/third_party/blink/renderer/core/html/forms/html_option_element.cc b/third_party/blink/renderer/core/html/forms/html_option_element.cc index c06b415..a79417b 100644 --- a/third_party/blink/renderer/core/html/forms/html_option_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_option_element.cc
@@ -680,7 +680,7 @@ mouse_event->button() == static_cast<int16_t>(WebPointerProperties::Button::kLeft)) { select->SelectOptionByPopup(this); - select->HidePopup(SelectPopupHideBehavior::kNormal); + select->HidePopup(); event.SetDefaultHandled(); return; } @@ -696,7 +696,7 @@ if (!(keyboard_event->GetModifiers() & ignore_modifiers)) { if ((key == " " || key == keywords::kCapitalEnter)) { select->SelectOptionByPopup(this); - select->HidePopup(SelectPopupHideBehavior::kNormal); + select->HidePopup(); event.SetDefaultHandled(); return; } @@ -783,7 +783,7 @@ !select->IsInDialogMode()) { // TODO(http://crbug.com/1511354): Consider focusing something in this // case. https://github.com/openui/open-ui/issues/1016 - select->HidePopup(SelectPopupHideBehavior::kNormal); + select->HidePopup(); event.SetDefaultHandled(); return; }
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.cc b/third_party/blink/renderer/core/html/forms/html_select_element.cc index ccb29e1..aa721745 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_select_element.cc
@@ -1886,8 +1886,8 @@ select_type_->ShowPopup(PopupMenu::kOther); } -void HTMLSelectElement::HidePopup(SelectPopupHideBehavior behavior) { - select_type_->HidePopup(behavior); +void HTMLSelectElement::HidePopup() { + select_type_->HidePopup(); } PopupMenu* HTMLSelectElement::PopupForTesting() const {
diff --git a/third_party/blink/renderer/core/html/forms/html_select_element.h b/third_party/blink/renderer/core/html/forms/html_select_element.h index dc4c037..15552e7 100644 --- a/third_party/blink/renderer/core/html/forms/html_select_element.h +++ b/third_party/blink/renderer/core/html/forms/html_select_element.h
@@ -55,11 +55,6 @@ class HTMLSelectedContentElement; class SelectDescendantsObserver; -enum class SelectPopupHideBehavior { - kNormal, - kNoEventsOrFocusing, -}; - class CORE_EXPORT HTMLSelectElement final : public HTMLFormControlElementWithState, private TypeAheadDataSource { @@ -217,7 +212,7 @@ // the menulist mode. const ComputedStyle* OptionStyle() const; void ShowPopup(); - void HidePopup(SelectPopupHideBehavior); + void HidePopup(); PopupMenu* PopupForTesting() const; void ResetTypeAheadSessionForTesting();
diff --git a/third_party/blink/renderer/core/html/forms/select_type.cc b/third_party/blink/renderer/core/html/forms/select_type.cc index 9ab7851..1f12278 100644 --- a/third_party/blink/renderer/core/html/forms/select_type.cc +++ b/third_party/blink/renderer/core/html/forms/select_type.cc
@@ -58,7 +58,6 @@ #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" #include "third_party/blink/renderer/core/input/event_handler.h" #include "third_party/blink/renderer/core/input/input_device_capabilities.h" -#include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/keywords.h" #include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/page/autoscroll_controller.h" @@ -104,14 +103,6 @@ IsA<HTMLDivElement>(node); } -void PostChangingAppearanceConsoleWarning(HTMLSelectElement& select) { - select.AddConsoleMessage( - mojom::blink::ConsoleMessageSource::kJavaScript, - mojom::blink::ConsoleMessageLevel::kWarning, - "A customizable-<select> changed its `appearance` property while open. " - "As a result, it was closed to avoid circularity problems."); -} - class PopoverElementForAppearanceBase : public HTMLDivElement { public: explicit PopoverElementForAppearanceBase(Document& document) @@ -206,36 +197,10 @@ void DidRecalcStyle(const StyleRecalcChange change) override { HTMLDivElement::DidRecalcStyle(change); if (auto* style = GetComputedStyle()) { - AppearanceState new_appearance_state = - style->EffectiveAppearance() == AppearanceValue::kBaseSelect - ? AppearanceState::kAppearanceBase - : AppearanceState::kAppearanceNotBase; - auto* select = ParentSelect(); - if (appearance_state_ != AppearanceState::kNoStyle && - appearance_state_ != new_appearance_state && select && - select->PopupIsVisible()) { - // The picker, as the result of CSS, changed `appearance` values upon - // opening. Per spec, we close it in that case, to avoid circularity. - PostChangingAppearanceConsoleWarning(*select); - // Post a task to close the popup, so we don't change style in the - // middle of style recalc. - GetDocument() - .GetTaskRunner(TaskType::kUserInteraction) - ->PostTask(FROM_HERE, - WTF::BindOnce( - [](HTMLSelectElement* select) { - select->HidePopup( - SelectPopupHideBehavior::kNoEventsOrFocusing); - }, - WrapPersistent(select))); - } - if (new_appearance_state == AppearanceState::kAppearanceBase) { + if (style->EffectiveAppearance() == AppearanceValue::kBaseSelect) { UseCounter::Count(GetDocument(), WebFeature::kSelectElementPickerAppearanceBaseSelect); } - appearance_state_ = new_appearance_state; - } else { - appearance_state_ = AppearanceState::kNoStyle; } } @@ -249,12 +214,6 @@ } return nullptr; } - enum AppearanceState { - kNoStyle = 0, - kAppearanceBase = 1, - kAppearanceNotBase = 2, - }; - AppearanceState appearance_state_{AppearanceState::kNoStyle}; }; } // anonymous namespace @@ -294,7 +253,7 @@ const override; Element& InnerElement() const override; void ShowPopup(PopupMenu::ShowEventType type) override; - void HidePopup(SelectPopupHideBehavior) override; + void HidePopup() override; void PopupDidHide() override; bool PopupIsVisible() const override; PopupMenu* PopupForTesting() const override; @@ -504,7 +463,7 @@ !select_->IsDisabledFormControl()) { if (PopupIsVisible()) { if (!IsAppearanceBasePicker()) { - HidePopup(SelectPopupHideBehavior::kNormal); + HidePopup(); } } else { // Save the selection so it can be compared to the new selection @@ -761,15 +720,6 @@ if (IsAppearanceBasePicker()) { popover_->ShowPopoverInternal(select_, /*exception_state=*/nullptr); - if (!IsAppearanceBasePicker()) { - // The picker, as the result of CSS, changed `appearance` values upon - // opening. Per spec, we close it in that case, to avoid circularity. - PostChangingAppearanceConsoleWarning(*select_); - popover_->HidePopoverInternal( - HidePopoverFocusBehavior::kNone, - HidePopoverTransitionBehavior::kNoEventsNoWaiting, - /*exception_state=*/nullptr); - } return; } @@ -826,15 +776,11 @@ cache->DidShowMenuListPopup(select_); } -void MenuListSelectType::HidePopup(SelectPopupHideBehavior behavior) { +void MenuListSelectType::HidePopup() { if (IsAppearanceBasePicker()) { - bool normal_behavior = behavior == SelectPopupHideBehavior::kNormal; popover_->HidePopoverInternal( - normal_behavior ? HidePopoverFocusBehavior::kFocusPreviousElement - : HidePopoverFocusBehavior::kNone, - normal_behavior - ? HidePopoverTransitionBehavior::kFireEventsAndWaitForTransitions - : HidePopoverTransitionBehavior::kNoEventsNoWaiting, + HidePopoverFocusBehavior::kFocusPreviousElement, + HidePopoverTransitionBehavior::kFireEventsAndWaitForTransitions, /*exception_state=*/nullptr); return; } @@ -945,7 +891,7 @@ // want to hide the popover in the case that the user just opened it and we // focused the first option in it. if (native_popup_is_visible_) { - HidePopup(SelectPopupHideBehavior::kNormal); + HidePopup(); } } @@ -986,13 +932,6 @@ bool is_appearance_base_select = style->EffectiveAppearance() == AppearanceValue::kBaseSelect; if (is_appearance_base_select_ != is_appearance_base_select) { - if (PopupIsVisible()) { - // The picker, as the result of CSS, changed `appearance` values upon - // opening. Per spec, we close it in that case, to avoid circularity. - PostChangingAppearanceConsoleWarning(*select_); - HidePopup(SelectPopupHideBehavior::kNoEventsOrFocusing); - } - is_appearance_base_select_ = is_appearance_base_select; // Switching appearance needs layout to be rebuilt because of special // logic in LayoutFlexibleBox::IsChildAllowed which ignores children in @@ -2014,7 +1953,7 @@ NOTREACHED(); } -void SelectType::HidePopup(SelectPopupHideBehavior) { +void SelectType::HidePopup() { NOTREACHED(); }
diff --git a/third_party/blink/renderer/core/html/forms/select_type.h b/third_party/blink/renderer/core/html/forms/select_type.h index 5737393..810e2b1 100644 --- a/third_party/blink/renderer/core/html/forms/select_type.h +++ b/third_party/blink/renderer/core/html/forms/select_type.h
@@ -72,7 +72,7 @@ GetAutofillPreviewElement() const = 0; virtual Element& InnerElement() const; virtual void ShowPopup(PopupMenu::ShowEventType type); - virtual void HidePopup(SelectPopupHideBehavior); + virtual void HidePopup(); virtual void PopupDidHide(); virtual bool PopupIsVisible() const; virtual PopupMenu* PopupForTesting() const;
diff --git a/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc b/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc index 45828dbd..1f3801d 100644 --- a/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc +++ b/third_party/blink/renderer/core/layout/inline/inline_items_builder.cc
@@ -1334,11 +1334,9 @@ // Trailing spaces can be removed across non-character items. // Adjust their offsets if after the removed index. - // TODO(crbug.com/351564777): Resolve a buffer safety issue. - for (UNSAFE_TODO(item++); - item != UNSAFE_TODO(items_->data() + items_->size()); - UNSAFE_TODO(item++)) { - item->SetOffset(item->StartOffset() - 1, item->EndOffset() - 1); + for (auto& i : base::span(*items_).subspan( + static_cast<size_t>(std::distance(items_->data(), item)) + 1)) { + i.SetOffset(i.StartOffset() - 1, i.EndOffset() - 1); } } @@ -1377,11 +1375,9 @@ item->SetEndOffset(item->EndOffset() + 1); item->SetEndCollapseType(InlineItem::kCollapsible); - // TODO(crbug.com/351564777): Resolve a buffer safety issue. - for (UNSAFE_TODO(item++); - item != UNSAFE_TODO(items_->data() + items_->size()); - UNSAFE_TODO(item++)) { - item->SetOffset(item->StartOffset() + 1, item->EndOffset() + 1); + for (auto& i : base::span(*items_).subspan( + static_cast<size_t>(std::distance(items_->data(), item) + 1))) { + i.SetOffset(i.StartOffset() + 1, i.EndOffset() + 1); } }
diff --git a/third_party/blink/renderer/core/layout/inline/line_breaker.cc b/third_party/blink/renderer/core/layout/inline/line_breaker.cc index 4dc0f4c..16b52e4a 100644 --- a/third_party/blink/renderer/core/layout/inline/line_breaker.cc +++ b/third_party/blink/renderer/core/layout/inline/line_breaker.cc
@@ -277,12 +277,7 @@ const HeapVector<InlineItem>& items, wtf_size_t item_index) { LayoutUnit inline_end_size; - // TODO(crbug.com/351564777): Resolve a buffer safety issue. - for (const InlineItem *cur = UNSAFE_TODO(items.data() + item_index), - *end = UNSAFE_TODO(items.data() + items.size()); - cur != end; UNSAFE_TODO(++cur)) { - const InlineItem& item = *cur; - + for (const auto& item : base::span(items).subspan(item_index)) { if (item.Type() == InlineItem::kCloseTag) { inline_end_size += ComputeInlineEndSize(space, item.Style()); continue; @@ -1218,12 +1213,9 @@ } unsigned LineBreaker::IgnorableBidiControlLength(const InlineItem& item) const { - const InlineItem* items = Items().data(); - for (wtf_size_t i = - base::checked_cast<wtf_size_t>(std::distance(items, &item)) + 1; - i < end_item_index_; ++i) { - // TODO(crbug.com/351564777): Resolve a buffer safety issue. - const InlineItem& item_i = UNSAFE_TODO(items[i]); + size_t start_item_index = std::distance(Items().data(), &item) + 1; + for (const auto& item_i : base::span(Items()).subspan( + start_item_index, end_item_index_ - start_item_index)) { if (item_i.Length() == 0u) { continue; } @@ -1232,10 +1224,9 @@ return item_i.StartOffset() - item.EndOffset(); } } - // TODO(crbug.com/351564777): Resolve a buffer safety issue. return (end_item_index_ >= Items().size() ? Text().length() - : UNSAFE_TODO(items[end_item_index_]).StartOffset()) - + : Items()[end_item_index_].StartOffset()) - item.EndOffset(); }
diff --git a/third_party/blink/renderer/core/page/drag_controller.cc b/third_party/blink/renderer/core/page/drag_controller.cc index d76511d..b134fa7 100644 --- a/third_party/blink/renderer/core/page/drag_controller.cc +++ b/third_party/blink/renderer/core/page/drag_controller.cc
@@ -162,9 +162,6 @@ DragSourceType& drag_source_type, bool is_richly_editable_position) { DCHECK(drag_data); - CHECK(is_richly_editable_position || - RuntimeEnabledFeatures:: - DropUrlAsPlainTextInPlainTextOnlyEditablePositionEnabled()); drag_source_type = DragSourceType::kHTMLSource; Document& document = context->OwnerDocument(); @@ -661,10 +658,6 @@ if (drag_is_move || is_richly_editable_position) { DragSourceType drag_source_type = DragSourceType::kHTMLSource; - if (!RuntimeEnabledFeatures:: - DropUrlAsPlainTextInPlainTextOnlyEditablePositionEnabled()) { - is_richly_editable_position = true; - } DocumentFragment* fragment = DocumentFragmentFromDragData( drag_data, inner_frame, range, true, drag_source_type, is_richly_editable_position);
diff --git a/third_party/blink/renderer/modules/ai/ai_language_model.cc b/third_party/blink/renderer/modules/ai/ai_language_model.cc index 69b85bd..df04ce6f 100644 --- a/third_party/blink/renderer/modules/ai/ai_language_model.cc +++ b/third_party/blink/renderer/modules/ai/ai_language_model.cc
@@ -215,7 +215,9 @@ script_state, signal, resolver, task_runner_, AIMetrics::AISessionType::kLanguageModel, WTF::BindOnce(&AILanguageModel::OnResponseComplete, - WrapWeakPersistent(this))); + WrapWeakPersistent(this)), + WTF::BindRepeating(&AILanguageModel::OnContextOverflow, + WrapWeakPersistent(this))); language_model_remote_->Prompt(input, std::move(pending_remote)); return promise; } @@ -256,7 +258,9 @@ script_state, signal, task_runner_, AIMetrics::AISessionType::kLanguageModel, WTF::BindOnce(&AILanguageModel::OnResponseComplete, - WrapWeakPersistent(this))); + WrapWeakPersistent(this)), + WTF::BindRepeating(&AILanguageModel::OnContextOverflow, + WrapWeakPersistent(this))); language_model_remote_->Prompt(input, std::move(pending_remote)); return readable_stream; } @@ -354,9 +358,6 @@ mojom::blink::ModelExecutionContextInfoPtr context_info) { if (context_info) { current_tokens_ = context_info->current_tokens; - if (context_info->did_overflow) { - OnContextOverflow(); - } } }
diff --git a/third_party/blink/renderer/modules/ai/ai_rewriter.cc b/third_party/blink/renderer/modules/ai/ai_rewriter.cc index b217464..6882d00 100644 --- a/third_party/blink/renderer/modules/ai/ai_rewriter.cc +++ b/third_party/blink/renderer/modules/ai/ai_rewriter.cc
@@ -79,7 +79,9 @@ } auto pending_remote = CreateModelExecutionResponder( script_state, signal, resolver, task_runner_, - AIMetrics::AISessionType::kWriter, base::DoNothing()); + AIMetrics::AISessionType::kWriter, + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); remote_->Rewrite(input, context_string, std::move(pending_remote)); return promise; } @@ -115,9 +117,10 @@ return nullptr; } auto [readable_stream, pending_remote] = - CreateModelExecutionStreamingResponder(script_state, signal, task_runner_, - AIMetrics::AISessionType::kWriter, - base::DoNothing()); + CreateModelExecutionStreamingResponder( + script_state, signal, task_runner_, AIMetrics::AISessionType::kWriter, + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); remote_->Rewrite(input, context_string, std::move(pending_remote)); return readable_stream; }
diff --git a/third_party/blink/renderer/modules/ai/ai_summarizer.cc b/third_party/blink/renderer/modules/ai/ai_summarizer.cc index d214e918..a55be78 100644 --- a/third_party/blink/renderer/modules/ai/ai_summarizer.cc +++ b/third_party/blink/renderer/modules/ai/ai_summarizer.cc
@@ -75,7 +75,8 @@ auto pending_remote = CreateModelExecutionResponder( script_state, signal, resolver, task_runner_, AIMetrics::AISessionType::kSummarizer, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); summarizer_remote_->Summarize(input, options->getContextOr(g_empty_string), std::move(pending_remote)); return promise; @@ -117,7 +118,8 @@ CreateModelExecutionStreamingResponder( script_state, signal, task_runner_, AIMetrics::AISessionType::kSummarizer, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); summarizer_remote_->Summarize(input, options->getContextOr(g_empty_string), std::move(pending_remote)); return readable_stream;
diff --git a/third_party/blink/renderer/modules/ai/ai_writer.cc b/third_party/blink/renderer/modules/ai/ai_writer.cc index f76cd111..881eb51 100644 --- a/third_party/blink/renderer/modules/ai/ai_writer.cc +++ b/third_party/blink/renderer/modules/ai/ai_writer.cc
@@ -76,7 +76,9 @@ auto pending_remote = CreateModelExecutionResponder( script_state, signal, resolver, task_runner_, - AIMetrics::AISessionType::kWriter, base::DoNothing()); + AIMetrics::AISessionType::kWriter, + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); remote_->Write(input, context_string, std::move(pending_remote)); return promise; } @@ -111,9 +113,10 @@ return nullptr; } auto [readable_stream, pending_remote] = - CreateModelExecutionStreamingResponder(script_state, signal, task_runner_, - AIMetrics::AISessionType::kWriter, - base::DoNothing()); + CreateModelExecutionStreamingResponder( + script_state, signal, task_runner_, AIMetrics::AISessionType::kWriter, + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); remote_->Write(input, context_string, std::move(pending_remote)); return readable_stream; }
diff --git a/third_party/blink/renderer/modules/ai/exception_helpers.cc b/third_party/blink/renderer/modules/ai/exception_helpers.cc index 6bda47bf..babc12c 100644 --- a/third_party/blink/renderer/modules/ai/exception_helpers.cc +++ b/third_party/blink/renderer/modules/ai/exception_helpers.cc
@@ -32,6 +32,7 @@ const char kExceptionMessageSessionDestroyed[] = "The model execution session has been destroyed."; const char kExceptionMessageRequestAborted[] = "The request has been aborted."; +const char kExceptionRequestTooLarge[] = "The prompt request is too large."; const char kExceptionMessageInvalidTemperatureAndTopKFormat[] = "Initializing a new session must either specify both topK and temperature, " @@ -135,6 +136,10 @@ return DOMException::Create( kExceptionMessageSessionDestroyed, DOMException::GetErrorName(DOMExceptionCode::kInvalidStateError)); + case ModelStreamingResponseStatus::kErrorPromptRequestTooLarge: + return DOMException::Create( + kExceptionRequestTooLarge, + DOMException::GetErrorName(DOMExceptionCode::kQuotaExceededError)); case ModelStreamingResponseStatus::kOngoing: case ModelStreamingResponseStatus::kComplete: NOTREACHED();
diff --git a/third_party/blink/renderer/modules/ai/model_execution_responder.cc b/third_party/blink/renderer/modules/ai/model_execution_responder.cc index 1a0687f..2de076e 100644 --- a/third_party/blink/renderer/modules/ai/model_execution_responder.cc +++ b/third_party/blink/renderer/modules/ai/model_execution_responder.cc
@@ -41,13 +41,15 @@ ScriptPromiseResolver<IDLString>* resolver, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback) + complete_callback, + base::RepeatingClosure overflow_callback) : script_state_(script_state), resolver_(resolver), receiver_(this, ExecutionContext::From(script_state)), abort_signal_(signal), session_type_(session_type), - complete_callback_(std::move(complete_callback)) { + complete_callback_(std::move(complete_callback)), + overflow_callback_(overflow_callback) { SetContextLifecycleNotifier(ExecutionContext::From(script_state)); if (abort_signal_) { CHECK(!abort_signal_->aborted()); @@ -107,6 +109,12 @@ Cleanup(); } + void OnContextOverflow() override { + if (overflow_callback_) { + overflow_callback_.Run(); + } + } + // ContextLifecycleObserver implementation. void ContextDestroyed() override { Cleanup(); } @@ -159,6 +167,7 @@ base::OnceCallback<void( mojom::blink::ModelExecutionContextInfoPtr context_info)> complete_callback_; + base::RepeatingClosure overflow_callback_; }; // Implementation of blink::mojom::blink::ModelStreamingResponder that @@ -173,13 +182,15 @@ AbortSignal* signal, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback) + complete_callback, + base::RepeatingClosure overflow_callback) : UnderlyingSourceBase(script_state), script_state_(script_state), receiver_(this, ExecutionContext::From(script_state)), abort_signal_(signal), session_type_(session_type), - complete_callback_(std::move(complete_callback)) { + complete_callback_(std::move(complete_callback)), + overflow_callback_(overflow_callback) { if (abort_signal_) { CHECK(!abort_signal_->aborted()); abort_handle_ = abort_signal_->AddAlgorithm(WTF::BindOnce( @@ -260,6 +271,12 @@ Cleanup(); } + void OnContextOverflow() override { + if (overflow_callback_) { + overflow_callback_.Run(); + } + } + private: void OnAborted() { // TODO(crbug.com/374879795): fix the abort handling for streaming @@ -307,6 +324,7 @@ // `kComplete`. base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> complete_callback_; + base::RepeatingClosure overflow_callback_; }; } // namespace @@ -319,10 +337,11 @@ scoped_refptr<base::SequencedTaskRunner> task_runner, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback) { + complete_callback, + base::RepeatingClosure overflow_callback) { Responder* responder = MakeGarbageCollected<Responder>( script_state, signal, resolver, session_type, - std::move(complete_callback)); + std::move(complete_callback), overflow_callback); return responder->BindNewPipeAndPassRemote(task_runner); } @@ -334,10 +353,12 @@ scoped_refptr<base::SequencedTaskRunner> task_runner, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback) { + complete_callback, + base::RepeatingClosure overflow_callback) { StreamingResponder* streaming_responder = MakeGarbageCollected<StreamingResponder>( - script_state, signal, session_type, std::move(complete_callback)); + script_state, signal, session_type, std::move(complete_callback), + overflow_callback); return std::make_tuple( streaming_responder->CreateReadableStream(), streaming_responder->BindNewPipeAndPassRemote(task_runner));
diff --git a/third_party/blink/renderer/modules/ai/model_execution_responder.h b/third_party/blink/renderer/modules/ai/model_execution_responder.h index b2f52c7..b7d58f92 100644 --- a/third_party/blink/renderer/modules/ai/model_execution_responder.h +++ b/third_party/blink/renderer/modules/ai/model_execution_responder.h
@@ -39,7 +39,8 @@ scoped_refptr<base::SequencedTaskRunner> task_runner, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback); + complete_callback, + base::RepeatingClosure overflow_callback); // Creates a ModelStreamingResponder that handles the streaming output of the // model execution. The responder will resolves given resolver with the full @@ -53,7 +54,8 @@ scoped_refptr<base::SequencedTaskRunner> task_runner, AIMetrics::AISessionType session_type, base::OnceCallback<void(mojom::blink::ModelExecutionContextInfoPtr)> - complete_callback); + complete_callback, + base::RepeatingClosure overflow_callback); } // namespace blink
diff --git a/third_party/blink/renderer/modules/ai/model_execution_responder_test.cc b/third_party/blink/renderer/modules/ai/model_execution_responder_test.cc index c910c956..7a57a75c 100644 --- a/third_party/blink/renderer/modules/ai/model_execution_responder_test.cc +++ b/third_party/blink/renderer/modules/ai/model_execution_responder_test.cc
@@ -58,14 +58,17 @@ test::TaskEnvironment task_environment; V8TestingScope scope; ScriptState* script_state = scope.GetScriptState(); - base::RunLoop callback_runloop; auto* resolver = MakeGarbageCollected<ScriptPromiseResolver<IDLString>>(script_state); auto promise = resolver->Promise(); + base::RunLoop disconnect_runloop; + base::RunLoop complete_runloop; + base::RunLoop overflow_runloop; auto pending_remote = CreateModelExecutionResponder( script_state, /*signal=*/nullptr, resolver, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, + /*complete_callback=*/ base::BindOnce( [](uint64_t expected_tokens, base::RunLoop* runloop, mojom::blink::ModelExecutionContextInfoPtr context_info) { @@ -73,15 +76,16 @@ EXPECT_EQ(context_info->current_tokens, expected_tokens); runloop->Quit(); }, - kTestTokenNumber, &callback_runloop)); + kTestTokenNumber, &complete_runloop), + /*overflow_callback=*/overflow_runloop.QuitClosure()); - base::RunLoop runloop; mojo::Remote<blink::mojom::blink::ModelStreamingResponder> responder( std::move(pending_remote)); - responder.set_disconnect_handler(runloop.QuitClosure()); + responder.set_disconnect_handler(disconnect_runloop.QuitClosure()); responder->OnStreaming("result"); - responder->OnCompletion(mojom::blink::ModelExecutionContextInfo::New( - kTestTokenNumber, /*did_overflow=*/false)); + responder->OnContextOverflow(); + responder->OnCompletion( + mojom::blink::ModelExecutionContextInfo::New(kTestTokenNumber)); // Check that the promise will be resolved with the "result" string. ScriptPromiseTester tester(scope.GetScriptState(), promise); tester.WaitUntilSettled(); @@ -90,10 +94,11 @@ EXPECT_EQ("result", ToCoreString(scope.GetIsolate(), tester.Value().V8Value().As<v8::String>())); - // Check that the callback is run. - callback_runloop.Run(); + // Check that the complete and overflow callback is run. + complete_runloop.Run(); + overflow_runloop.Run(); // Check that the Mojo handle will be disconnected. - runloop.Run(); + disconnect_runloop.Run(); } TEST(CreateModelExecutionResponder, ErrorPermissionDenied) { @@ -107,7 +112,8 @@ script_state, /*signal=*/nullptr, resolver, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); mojo::Remote<blink::mojom::blink::ModelStreamingResponder> responder( std::move(pending_remote)); @@ -142,7 +148,8 @@ script_state, controller->signal(), resolver, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); controller->abort(scope.GetScriptState()); @@ -177,7 +184,8 @@ script_state, controller->signal(), resolver, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); mojo::Remote<blink::mojom::blink::ModelStreamingResponder> responder( std::move(pending_remote)); @@ -185,7 +193,7 @@ responder.set_disconnect_handler(runloop.QuitClosure()); responder->OnStreaming("result"); responder->OnCompletion(mojom::blink::ModelExecutionContextInfo::New( - /*current_tokens=*/1u, /*did_overflow=*/false)); + /*current_tokens=*/1u)); controller->abort(scope.GetScriptState()); @@ -211,7 +219,8 @@ script_state, /*signal=*/nullptr, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); mojo::Remote<blink::mojom::blink::ModelStreamingResponder> responder( std::move(pending_remote)); @@ -219,7 +228,7 @@ responder.set_disconnect_handler(runloop.QuitClosure()); responder->OnStreaming("result"); responder->OnCompletion(mojom::blink::ModelExecutionContextInfo::New( - /*current_tokens=*/1u, /*did_overflow=*/false)); + /*current_tokens=*/1u)); // Check that we can read the stream. auto* reader = @@ -245,7 +254,8 @@ script_state, /*signal=*/nullptr, blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); mojo::Remote<blink::mojom::blink::ModelStreamingResponder> responder( std::move(pending_remote)); @@ -280,7 +290,8 @@ script_state, controller->signal(), blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); controller->abort(scope.GetScriptState()); @@ -315,7 +326,8 @@ script_state, controller->signal(), blink::scheduler::GetSequencedTaskRunnerForTesting(), AIMetrics::AISessionType::kLanguageModel, - /*complete_callback=*/base::DoNothing()); + /*complete_callback=*/base::DoNothing(), + /*overflow_callback=*/base::DoNothing()); controller->abort(scope.GetScriptState()); @@ -324,8 +336,7 @@ base::RunLoop runloop; responder.set_disconnect_handler(runloop.QuitClosure()); responder->OnStreaming("result"); - responder->OnCompletion( - mojom::blink::ModelExecutionContextInfo::New(1u, /*did_overflow=*/false)); + responder->OnCompletion(mojom::blink::ModelExecutionContextInfo::New(1u)); // Check that the AbortError is passed to the stream. auto* reader =
diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc index e12bbfad..27b0012 100644 --- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc +++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_test.cc
@@ -471,7 +471,7 @@ size, kN32_SkColorType, kPremul_SkAlphaType, - SkColorSpace::MakeSRGB(), + gfx::ColorSpace::CreateSRGB(), SharedGpuContext::ContextProviderWrapper(), resource_host), is_accelerated_(hint != RasterModeHint::kPreferCPU), @@ -2564,6 +2564,62 @@ } } +TEST_P( + CanvasRenderingContext2DTestAccelerated, + DisablingThenReenablingAccelerationWhileHibernationIsPendingAbortsHibernation) { + base::test::ScopedFeatureList scoped_feature_list; + scoped_feature_list.InitWithFeatures({features::kCanvas2DHibernation}, {}); + + CreateContext(kNonOpaque); + CanvasElement().GetOrCreateCanvasResourceProvider(RasterModeHint::kPreferGPU); + ASSERT_EQ(CanvasElement().GetRasterMode(), RasterMode::kGPU); + + // Install a minimal delay for testing to ensure that the test remains fast + // to execute. + CanvasElement().GetHibernationHandler()->SetBeforeCompressionDelayForTesting( + base::Microseconds(10)); + + ASSERT_FALSE(CanvasElement().IsHibernating()); + + // Verify that going to the background triggers hibernation asynchronously. + { + base::HistogramTester histogram_tester; + GetDocument().GetPage()->SetVisibilityState( + mojom::blink::PageVisibilityState::kHidden, + /*is_initial_state=*/false); + + histogram_tester.ExpectUniqueSample( + "Blink.Canvas.HibernationEvents", + CanvasHibernationHandler::HibernationEvent::kHibernationScheduled, 1); + ASSERT_FALSE(CanvasElement().IsHibernating()); + } + + CanvasElement().DisableAcceleration(); + ASSERT_EQ(CanvasElement().GetRasterMode(), RasterMode::kCPU); + CanvasElement().EnableAcceleration(); + ASSERT_EQ(CanvasElement().GetRasterMode(), RasterMode::kGPU); + + // Verify that running the hibernation task aborts hibernation as + // disabling acceleration has caused the hibernation handler to be destroyed. + { + base::HistogramTester histogram_tester; + + // Run the task that initiates hibernation, which has been posted as an idle + // task. + ThreadScheduler::Current() + ->ToMainThreadScheduler() + ->StartIdlePeriodForTesting(); + blink::test::RunPendingTasks(); + + histogram_tester.ExpectUniqueSample( + "Blink.Canvas.HibernationEvents", + CanvasHibernationHandler::HibernationEvent:: + kHibernationAbortedDueToDestructionWhileHibernatePending, + 1); + EXPECT_FALSE(CanvasElement().IsHibernating()); + } +} + TEST_P(CanvasRenderingContext2DTestAccelerated, ForegroundingWhileHibernationIsPendingAbortsHibernation) { base::test::ScopedFeatureList scoped_feature_list;
diff --git a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc index 3bb31a4..d43bd260 100644 --- a/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc +++ b/third_party/blink/renderer/modules/ml/webnn/ml_graph_builder.cc
@@ -1711,6 +1711,7 @@ auto* constant = MakeGarbageCollected<MLConstantOperand>(this, std::move(descriptor)); + UMA_HISTOGRAM_MEMORY_KB("WebNN.ConstantDataSizeInKB", bytes.size() / 1024); scoped_trace.AddStep( String::Format("copy constant bytes into BigBuffer, size: %zu", bytes.size())
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index a021159..e5d93f0 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -8595,8 +8595,18 @@ CanvasResourceProvider* resource_provider = resource_providers_[i].get(); if (!resource_provider) break; - if (resource_provider->GetSkImageInfo() != info) - continue; + if (resource_provider->GetSkImageInfo() != info) { + // Detect and allow for the case wherein the passed-info implicitly + // specifies sRGB via a null SkColorSpace whereas the resource provider is + // explicitly storing sRGB. + if (info.colorSpace()) { + continue; + } + if (resource_provider->GetSkImageInfo() != + info.makeColorSpace(SkColorSpace::MakeSRGB())) { + continue; + } + } BubbleToFront(i); return resource_provider; }
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource.cc b/third_party/blink/renderer/platform/graphics/canvas_resource.cc index f925749..2d9a378b 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource.cc
@@ -290,7 +290,7 @@ } bool CanvasResourceSharedBitmap::IsValid() const { - return shared_mapping_.IsValid(); + return !!shared_image_; } scoped_refptr<StaticBitmapImage> CanvasResourceSharedBitmap::Bitmap() { @@ -331,9 +331,9 @@ } void CanvasResourceSharedBitmap::NotifyResourceLost() { - // Release our reference to the shared memory mapping since the resource can - // no longer be safely recycled and this memory is needed for copy-on-write. - shared_mapping_ = {}; + // Release our reference to the SharedImage since the resource can + // no longer be safely recycled and its memory is needed for copy-on-write. + shared_image_.reset(); } void CanvasResourceSharedBitmap::UploadSoftwareRenderingResults(
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc index 16af590..76797d6 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.cc
@@ -161,13 +161,14 @@ SkAlphaType alpha_type, sk_sp<SkColorSpace> sk_color_space, CanvasResourceHost* resource_host) - : CanvasResourceProvider(kBitmap, - size, - sk_color_type, - alpha_type, - std::move(sk_color_space), - /*context_provider_wrapper=*/nullptr, - resource_host) {} + : CanvasResourceProvider( + kBitmap, + size, + sk_color_type, + alpha_type, + SkColorSpaceToGfxColorSpace(std::move(sk_color_space)), + /*context_provider_wrapper=*/nullptr, + resource_host) {} ~CanvasResourceProviderBitmap() override = default; @@ -208,13 +209,14 @@ sk_sp<SkColorSpace> sk_color_space, WebGraphicsSharedImageInterfaceProvider* shared_image_interface_provider, CanvasResourceHost* resource_host) - : CanvasResourceProvider(kSharedBitmap, - size, - sk_color_type, - alpha_type, - std::move(sk_color_space), - /*context_provider_wrapper=*/nullptr, - resource_host), + : CanvasResourceProvider( + kSharedBitmap, + size, + sk_color_type, + alpha_type, + SkColorSpaceToGfxColorSpace(std::move(sk_color_space)), + /*context_provider_wrapper=*/nullptr, + resource_host), shared_image_interface_provider_( shared_image_interface_provider ? shared_image_interface_provider->GetWeakPtr() @@ -313,13 +315,14 @@ bool is_accelerated, gpu::SharedImageUsageSet shared_image_usage_flags, CanvasResourceHost* resource_host) - : CanvasResourceProvider(kSharedImage, - size, - sk_color_type, - alpha_type, - std::move(sk_color_space), - std::move(context_provider_wrapper), - resource_host), + : CanvasResourceProvider( + kSharedImage, + size, + sk_color_type, + alpha_type, + SkColorSpaceToGfxColorSpace(std::move(sk_color_space)), + std::move(context_provider_wrapper), + resource_host), is_accelerated_(is_accelerated), shared_image_usage_flags_(shared_image_usage_flags), use_oop_rasterization_(is_accelerated && ContextProviderWrapper() @@ -853,13 +856,14 @@ base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper, CanvasResourceHost* resource_host) - : CanvasResourceProvider(kPassThrough, - size, - sk_color_type, - alpha_type, - std::move(sk_color_space), - std::move(context_provider_wrapper), - resource_host) {} + : CanvasResourceProvider( + kPassThrough, + size, + sk_color_type, + alpha_type, + SkColorSpaceToGfxColorSpace(std::move(sk_color_space)), + std::move(context_provider_wrapper), + resource_host) {} ~CanvasResourceProviderPassThrough() override = default; bool IsValid() const final { return true; } @@ -903,13 +907,14 @@ base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper, CanvasResourceHost* resource_host) - : CanvasResourceProvider(kSwapChain, - size, - sk_color_type, - alpha_type, - std::move(sk_color_space), - std::move(context_provider_wrapper), - resource_host), + : CanvasResourceProvider( + kSwapChain, + size, + sk_color_type, + alpha_type, + SkColorSpaceToGfxColorSpace(std::move(sk_color_space)), + std::move(context_provider_wrapper), + resource_host), use_oop_rasterization_(ContextProviderWrapper() ->ContextProvider() .GetCapabilities() @@ -1475,7 +1480,7 @@ gfx::Size size, SkColorType sk_color_type, SkAlphaType alpha_type, - sk_sp<SkColorSpace> sk_color_space, + gfx::ColorSpace color_space, base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper, CanvasResourceHost* resource_host) : type_(type), @@ -1484,7 +1489,7 @@ size.height(), sk_color_type, alpha_type, - std::move(sk_color_space))), + color_space.ToSkColorSpace())), resource_host_(resource_host), recorder_(std::make_unique<MemoryManagedPaintRecorder>(Size(), this)), snapshot_paint_image_id_(cc::PaintImage::GetNextId()) {
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h index af3c321..e261f47 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -366,7 +366,7 @@ gfx::Size size, SkColorType sk_color_type, SkAlphaType alpha_type, - sk_sp<SkColorSpace> sk_color_space, + gfx::ColorSpace color_space, base::WeakPtr<WebGraphicsContext3DProviderWrapper> context_provider_wrapper, CanvasResourceHost* resource_host);
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc index 446d6b6e..5410ccc 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider_test.cc
@@ -165,7 +165,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderAcceleratedOverlay) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); const gpu::SharedImageUsageSet shared_image_usage_flags = gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT | @@ -198,7 +199,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderTexture) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); auto provider = CanvasResourceProvider::CreateSharedImageProvider( kSize, kInfo.colorType(), kInfo.alphaType(), kInfo.refColorSpace(), @@ -220,7 +222,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderUnacceleratedOverlay) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); const gpu::SharedImageUsageSet shared_image_usage_flags = gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT; @@ -322,7 +325,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderSharedImageResourceRecycling) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); const gpu::SharedImageUsageSet shared_image_usage_flags = gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT; @@ -572,7 +576,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderBitmap) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); auto provider = CanvasResourceProvider::CreateBitmapProvider( kSize, kInfo.colorType(), kInfo.alphaType(), kInfo.refColorSpace(), @@ -606,7 +611,8 @@ platform_->SetGpuCompositingDisabled(true); const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); std::unique_ptr<WebGraphicsSharedImageInterfaceProvider> test_web_shared_image_interface_provider = TestWebGraphicsSharedImageInterfaceProvider::Create(); @@ -631,7 +637,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderDirect2DGpuMemoryBuffer) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); const gpu::SharedImageUsageSet shared_image_usage_flags = gpu::SHARED_IMAGE_USAGE_DISPLAY_READ | gpu::SHARED_IMAGE_USAGE_SCANOUT | @@ -665,7 +672,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderDirect3DGpuMemoryBuffer) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); auto provider = CanvasResourceProvider::CreatePassThroughProvider( kSize, kInfo.colorType(), kInfo.alphaType(), kInfo.refColorSpace(), @@ -788,7 +796,8 @@ TEST_F(CanvasResourceProviderTest, CanvasResourceProviderDirect2DSwapChain) { const gfx::Size kSize(10, 10); - const SkImageInfo kInfo = SkImageInfo::MakeN32Premul(10, 10); + const SkImageInfo kInfo = + SkImageInfo::MakeN32Premul(10, 10, SkColorSpace::MakeSRGB()); auto provider = CanvasResourceProvider::CreateSwapChainProvider( kSize, kInfo.colorType(), kInfo.alphaType(), kInfo.refColorSpace(),
diff --git a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc index 78a2850..ad8a822 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/drawing_buffer.cc
@@ -839,19 +839,16 @@ } CHECK(IsUsingGpuCompositing()); - viz::TransferableResource out_resource; + gpu::SyncToken sync_token; viz::ReleaseCallback out_release_callback; - scoped_refptr<gpu::ClientSharedImage> client_si; - if (!FinishPrepareTransferableResourceGpu(&out_resource, &client_si, - &out_release_callback)) { + scoped_refptr<gpu::ClientSharedImage> client_si = + ExportSharedImageFromBackBuffer(sync_token, &out_release_callback); + if (!client_si) { return nullptr; } - // FinishPrepareTransferableResourceGpu() always populates `client_si` if it - // returns true. - CHECK(client_si); return ExternalCanvasResource::Create( - client_si, out_resource.sync_token(), + client_si, sync_token, viz::TransferableResource::ResourceSource::kDrawingBuffer, hdr_metadata_, std::move(out_release_callback), context_provider_->GetWeakPtr(), /*resource_provider=*/nullptr);
diff --git a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc index e74351f..e95929d 100644 --- a/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc +++ b/third_party/blink/renderer/platform/graphics/gpu/webgpu_resource_provider_cache.cc
@@ -105,6 +105,14 @@ if (image_info == resource_provider->GetSkImageInfo()) { break; } + // Detect and allow for the case wherein the passed-info implicitly + // specifies sRGB via a null SkColorSpace whereas the resource provider is + // explicitly storing sRGB. + if (!image_info.colorSpace() && + (image_info.makeColorSpace(SkColorSpace::MakeSRGB()) == + resource_provider->GetSkImageInfo())) { + break; + } } // Found one.
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index c7a589a..f0ed02ae 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1635,13 +1635,6 @@ { name: "DOMPartsAPIMinimal", }, - { - // Drop the entire URL as plaintext in plaintext only editable position. - // Fix for https://crbug.com/40895258. This change is landing in M127 and - // the flag can be removed in M129 in case of no issues. - name: "DropUrlAsPlainTextInPlainTextOnlyEditablePosition", - status: "stable" - }, // Dynamically change the safe area insets based on the bottom browser // controls visibility. { @@ -4057,6 +4050,10 @@ { name: "SpeculationRulesPrefetchWithSubresources", }, + { + name: "SplitTextNotCleanupDummySpans", + status: "stable", + }, // Kill switch for change to unify image-set and srcset selection logic. { name: "SrcsetSelectionMatchesImageSet",
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-skia-graphite b/third_party/blink/web_tests/FlagExpectations/enable-skia-graphite index 60c961e..122e610 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-skia-graphite +++ b/third_party/blink/web_tests/FlagExpectations/enable-skia-graphite
@@ -44,6 +44,8 @@ external/wpt/html/links/stylesheet/quirk-origin-check-recursive-import.html [ Crash Timeout ] # ====== New tests from wpt-importer added here ====== +crbug.com/388081043 external/wpt/editing/other/paste-clipboard-change.tentative.html?id=contenteditable [ Crash ] +crbug.com/388081043 external/wpt/editing/other/paste-clipboard-change.tentative.html?id=text [ Crash ] crbug.com/386860174 external/wpt/css/css-fonts/parsing/font-weight-computed.html [ Crash ] wpt_internal/css/css-images/img-view-box-contents-opaque.html [ Failure ] crbug.com/381945825 external/wpt/webaudio/the-audio-api/the-audiobuffersourcenode-interface/active-processing.https.html [ Crash ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests index 0c72c1a..da9c7610 100644 --- a/third_party/blink/web_tests/SlowTests +++ b/third_party/blink/web_tests/SlowTests
@@ -1469,3 +1469,5 @@ crbug.com/381648149 [ Mac14 ] wpt_internal/hid/hidDevice_reports.https.window.html [ Slow ] crbug.com/382173821 [ Mac11 ] wpt_internal/hid/hid_requestDevice.https.window.html [ Slow ] crbug.com/382173821 [ Mac12 ] wpt_internal/hid/hid_requestDevice.https.window.html [ Slow ] + +crbug.com/387577507 virtual/composite-clip-path-animation/paint/invalidation/svg/invalid-clip-path-crash.html [ Slow ] \ No newline at end of file
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 5d2a35a..17d2a82 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2707,6 +2707,13 @@ crbug.com/383880384 [ Win ] external/wpt/css/css-properties-values-api/registered-property-change-style-002.html [ Failure Pass ] # ====== New tests from wpt-importer added here ====== +crbug.com/388081043 [ Win10.20h2 ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=contenteditable [ Crash ] +crbug.com/388081043 [ Mac14 ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=contenteditable [ Crash ] +crbug.com/388081043 [ Linux ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=contenteditable [ Crash ] +crbug.com/388081043 [ Win10.20h2 ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=text [ Crash ] +crbug.com/388081043 [ Mac14 ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=text [ Crash ] +crbug.com/388081043 [ Linux ] external/wpt/editing/other/paste-clipboard-change.tentative.html?id=text [ Crash ] +crbug.com/388073800 [ Mac13 ] external/wpt/webrtc/RTCPeerConnection-setLocalDescription-parameterless.https.html [ Timeout ] crbug.com/387777047 external/wpt/css/css-align/blocks/align-content-block-012.html [ Failure ] crbug.com/387626415 external/wpt/css/css-backgrounds/background-clip/clip-border-area-on-body-not-propagated-to-root.html [ Failure ] crbug.com/387378127 external/wpt/css/css-scoping/host-multiple-002.html [ Failure ] @@ -2737,6 +2744,7 @@ crbug.com/385918134 [ Linux ] external/wpt/wasm/core/simd/simd_load_zero.wast.js.html [ Crash ] crbug.com/385918134 [ Linux ] external/wpt/wasm/core/traps.wast.js.html [ Crash ] crbug.com/386049994 [ Mac13 ] external/wpt/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html [ Timeout ] +crbug.com/386049994 [ Mac14 ] external/wpt/webrtc-encoded-transform/RTCRtpScriptTransform-encoded-transform.https.html [ Timeout ] crbug.com/384980894 [ Mac13 ] external/wpt/html/semantics/forms/the-select-element/customizable-select/select-mouse-behavior.tentative.html [ Timeout ] crbug.com/384980894 [ Mac14 ] external/wpt/html/semantics/forms/the-select-element/customizable-select/select-mouse-behavior.tentative.html [ Timeout ] crbug.com/384773801 [ Mac13 ] external/wpt/webrtc/RTCRtpReceiver-jitterBufferTarget.html [ Timeout ] @@ -6189,9 +6197,6 @@ crbug.com/366415131 external/wpt/html/semantics/forms/the-select-element/customizable-select/picker-and-slotted.tentative.html [ Failure ] crbug.com/380466909 virtual/popover-anchor-relationships-disabled/external/wpt/html/semantics/forms/the-select-element/customizable-select/select-events.tentative.html [ Failure Pass ] -# This fails with !owner_->GetDocument().IsSlotAssignmentRecalcForbidden(). -crbug.com/384394713 external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative.html [ Crash Failure ] - ### Tests failing with CSSGapDecorations Enabled: crbug.com/357648037 virtual/css-gap-decorations/animations/interpolation/webkit-column-rule-color-interpolation.html [ Crash Failure Timeout ] crbug.com/357648037 virtual/css-gap-decorations/external/wpt/css/css-animations/responsive/column-rule-color-001.html [ Failure ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites index 2b5d9ed..da3f020 100644 --- a/third_party/blink/web_tests/VirtualTestSuites +++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -411,7 +411,7 @@ "args": ["--enable-blink-features=CompositeClipPathAnimation", "--enable-threaded-compositing"], "owners": ["clchambers@microsoft.com", "gerchiko@microsoft.com"], - "expires": "Jan 1, 2025" + "expires": "Jan 1, 2026" }, { "prefix": "main-thread-clip-path-animation", @@ -425,7 +425,7 @@ "exclusive_tests": "ALL", "args": ["--disable-blink-features=CompositeClipPathAnimation"], "owners": ["clchambers@microsoft.com", "gerchiko@microsoft.com"], - "expires": "Jan 1, 2025" + "expires": "Jan 1, 2026" }, { "prefix": "fractional-scroll-offsets", @@ -4735,7 +4735,7 @@ "args": [ "--enable-features=DevToolsImprovedNetworkError" ], - "expires": "Jan 3, 2025", + "expires": "Mar 1, 2025", "owners": [ "bmeurer@google.com", "changhaohan@google.com"
diff --git a/third_party/blink/web_tests/editing/execCommand/insert-text-not-change-sibling.html b/third_party/blink/web_tests/editing/execCommand/insert-text-not-change-sibling.html new file mode 100644 index 0000000..3da610f --- /dev/null +++ b/third_party/blink/web_tests/editing/execCommand/insert-text-not-change-sibling.html
@@ -0,0 +1,84 @@ +<!doctype html> +<title>InsertText does not change the sibling element's DOM structure</title> +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> +<script src="../assert_selection.js"></script> +<script> +selection_test( + [ + '<div contenteditable>', + '<span style="color: red;">red</span><span>black</span>', + '<span style="color: red;">^red</span><span>bla|ck</span>', + '<span style="color: red;">red</span><span>black</span>', + '</div>', + ], + 'insertText x', + [ + '<div contenteditable>', + '<span style="color: red;">red</span>', + '<span>black<font color="#ff0000">x|</font></span>', + '<span>ck</span>', + '<span style="color: red;">red</span><span>black</span>', + '</div>', + ], + `InsertText into the element that does not have any attribute by splitting the start node` +); + +selection_test( + [ + '<div contenteditable>', + '<span style="color: red;">red</span><span class="black">black</span>', + '<span style="color: red;">^red</span><span class="black">bla|ck</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '</div>', + ], + 'insertText x', + [ + '<div contenteditable>', + '<span style="color: red;">red</span>', + '<span class="black">black<font color="#ff0000">x|</font></span>', + '<span class="black">ck</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '</div>', + ], + `InsertText into the element that has a className attribute by splitting the start node` +); + +selection_test( + [ + '<div contenteditable>', + '<span style="color: red;">^red</span><span>bla|ck</span>', + '<span style="color: red;">red</span><span>black</span>', + '<span style="color: red;">red</span><span>black</span>', + '</div>', + ], + 'insertText x', + [ + '<div contenteditable>', + '<span><font color="#ff0000">x|</font>ck</span>', + '<span style="color: red;">red</span><span>black</span>', + '<span style="color: red;">red</span><span>black</span>', + '</div>', + ], + `InsertText into the element that does not have any attribute by splitting the end node` +); + +selection_test( + [ + '<div contenteditable>', + '<span style="color: red;">^red</span><span class="black">bla|ck</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '</div>', + ], + 'insertText x', + [ + '<div contenteditable>', + '<span class="black"><font color="#ff0000">x|</font>ck</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '<span style="color: red;">red</span><span class="black">black</span>', + '</div>', + ], + `InsertText into the element that has a className attribute by splitting the end node` +); +</script>
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index 183b6fd..e5ddf343 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -139288,19 +139288,6 @@ ] }, "item-placement": { - "masonry-columns-item-placement-auto-flow-next-001.html": [ - "eacc943bf77c5db41ad144e45e6bc4545e7cf96f", - [ - null, - [ - [ - "/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001-ref.html", - "==" - ] - ], - {} - ] - ], "masonry-item-placement-001.html": [ "2438df8bac8f31bbf259b83f745d9049b979744a", [ @@ -311706,6 +311693,10 @@ [] ], "resources": { + "check-topics-request-header-in-img.py": [ + "d5ab1abc5360c4f6e644341e0bf833726a4ed2ae", + [] + ], "check-topics-request-header-notify-parent.py": [ "98c77c2b0bd21591416d886d1ab013486a805550", [] @@ -311738,10 +311729,18 @@ "c19efb5f2f3fe5469b63b5772c875d9e62fb47b5", [] ], + "load_img.sub.js": [ + "35da08562fa276fa828910e0b333d291952296b6", + [] + ], "permissions-policy-util.sub.js": [ "e8bf45049c53ab23fee369c058ffe4904bed45ce", [] ], + "pixel.png": [ + "818c71d03f435db011069584cda25c1f66af1a85", + [] + ], "topics-not-allowed-for-service-worker-fetch-helper.tentative.https.html": [ "2278d5bc76d31b96a3759f1e20a9c2ed13f485e1", [] @@ -333530,7 +333529,7 @@ [] ], "font-size-adjust-valid-expected.txt": [ - "6ee62c449dbc1db7e66b8d8279b7941a0c1aec56", + "ff4ac012426d05234fee8a9b68d958856b3c3a08", [] ], "font-stretch-alias-expected.txt": [ @@ -333538,15 +333537,15 @@ [] ], "font-stretch-valid-expected.txt": [ - "f9cbe94ff8da4d46b4bb58253d77465f2718b914", + "7395d936b5ba434eb2b9650483a294fb35bf218f", [] ], "font-style-computed-expected.txt": [ - "c700aa891b5bf630dc0e42189352b60582cce34b", + "7ac9365344ecfb52c068453ce31ac8fcaeceabe4", [] ], "font-style-valid-expected.txt": [ - "c7d93284fca6cfec6e21a2a7d3fcf57ac4bc623c", + "47def606cf4514bfade3d26928b9e46378d7c74a", [] ], "font-synthesis-computed-expected.txt": [ @@ -333566,7 +333565,7 @@ [] ], "font-weight-valid-expected.txt": [ - "ea11eae3618abd6972dd294963fb1edfb4d7adef", + "acb02156e89d00efd576a4afa725f86af1f3187a", [] ] }, @@ -341252,71 +341251,71 @@ }, "intrinsic-sizing": { "masonry-intrinsic-sizing-cols-001-auto-ref.html": [ - "3f5ca75fa8c8a0fc276b00ac23a2a8281fe8a0c9", + "a738cffd12f44b5dcc2593ff0018004c38f6e9d4", [] ], "masonry-intrinsic-sizing-cols-001-fr-ref.html": [ - "e4bf5b7f7acd98d32265776cf4f15e843a6223c1", + "d0af62d37cd4b3410d1636383864654b3e44e096", [] ], "masonry-intrinsic-sizing-cols-001-mix1-ref.html": [ - "db70b7beb5dfef420f1ffd1af30d0d8711c54f03", + "8bf1f6ea2b60c46565b88dbc8a265fe5ec84bd07", [] ], "masonry-intrinsic-sizing-cols-001-mix2-ref.html": [ - "e97edbd65dd5613f1f9ba74a8c688651a80491da", + "af3a7823e476f5cb4695c512c3098351963075f3", [] ], "masonry-intrinsic-sizing-cols-002-auto-ref.html": [ - "dc883d323a718d7f75b5adea45f44c33ff379330", + "329ac9ad6dcef47693173b24f4de5ac8876423b3", [] ], "masonry-intrinsic-sizing-cols-002-fr-ref.html": [ - "79c43c5994895de416a4d86a87702744c3b46a50", + "986ddbfee55794e7ad26762ed66518452640559c", [] ], "masonry-intrinsic-sizing-cols-002-mix1-ref.html": [ - "4f3a51921f0163cb2129f4b4ee19962436adc91c", + "c7c06960b93c8d30f72298242d92b6207695bf03", [] ], "masonry-intrinsic-sizing-cols-002-mix2-ref.html": [ - "1651af50c3991464ce302e285bd7601c27a68662", + "dab4e5722803e658cd120fdc8afb203f5f759045", [] ], "masonry-intrinsic-sizing-cols-003-auto-ref.html": [ - "f313703820274b4c8e73bf89bcfc9977b86101de", + "c592d9760c493565e179c1f47b743e23a9134887", [] ], "masonry-intrinsic-sizing-cols-003-fr-ref.html": [ - "856a76bfb8f528035898c4dadc8028f2de5aac09", + "cc4110934dd45f3b9afe473d99c35231f1565c7b", [] ], "masonry-intrinsic-sizing-cols-003-mix1-ref.html": [ - "d6f5674868e3f7be0345e6cd76a5fc6ce059dd31", + "65984d7b628d3e3b69ddb98452cde00a31e37f97", [] ], "masonry-intrinsic-sizing-cols-003-mix2-ref.html": [ - "675e45bb175e307f54d12251cd02905d3c92ede1", + "25f88a9b04d82c4165d8ed3ea59ddce87470094e", [] ], "masonry-intrinsic-sizing-cols-004-auto-ref.html": [ - "d01a543d06ee7674a0d581c21dbfa3f6554d03f9", + "44c32aeaaa85a12aecdc9c6178b41e852e6d5206", [] ], "masonry-intrinsic-sizing-cols-004-fr-ref.html": [ - "9d757dd6228e9d9cb7bf0dfa5d2e82504d05921e", + "60d208a2bf9ddf29665893250f617375514992f5", [] ], "masonry-intrinsic-sizing-cols-004-mix1-ref.html": [ - "4793949c2809279f7c48388c8996fff130fc7089", + "c5fc8ddd40e7894f0f947676732b0f5651accb84", [] ], "masonry-intrinsic-sizing-cols-004-mix2-ref.html": [ - "640d02d1144edf2e74d8edc650d9058f2544ecf6", + "b874f70283f74f4fd15c57278107ab7dabae7818", [] ], "masonry-intrinsic-sizing-cols-005-ref.html": [ - "e65661bb56958f7772913f953516c2e28e68eacc", + "4e81340d48cb5a2b64e2f52d81a25c722cb15c47", [] ], "masonry-intrinsic-sizing-cols-006-ref.html": [ @@ -341328,67 +341327,67 @@ [] ], "masonry-intrinsic-sizing-rows-001-auto-ref.html": [ - "d3bb9110be0a4b2b5c8dc56e796714f218fac7cb", + "4612a8562ffde7cb663ee65ad243b18bb0e2a324", [] ], "masonry-intrinsic-sizing-rows-001-fr-ref.html": [ - "f4a2c2bae631e3faea743e741029ce3eaa99c784", + "3b3aed96b01a2e79693efc956f643220c53b125a", [] ], "masonry-intrinsic-sizing-rows-001-mix1-ref.html": [ - "c48319319a3d1ae4a227adb8e478d32c5a8c1322", + "6858811792da1318c086fbd299ff48719302cf74", [] ], "masonry-intrinsic-sizing-rows-001-mix2-ref.html": [ - "80e8c0531a9bec2554bcfdec3abb789ba12973fc", + "d6007a4d8836bb463d9aaaa7660de67f2ff371e0", [] ], "masonry-intrinsic-sizing-rows-002-auto-ref.html": [ - "9b30557c90b1aa37c4fe9fdd637e07fde0699b77", + "7bfa49eae1f4560ae758d6347ea43f76020655c7", [] ], "masonry-intrinsic-sizing-rows-002-fr-ref.html": [ - "442280db2a01c1e0ddbe8241ca380a5fa57821bb", + "2a1f1df8ec603833038bd1edc600cad3f19a552d", [] ], "masonry-intrinsic-sizing-rows-002-mix1-ref.html": [ - "03efe6f7d6766dfe936b2ed675acb0fe95a7cd96", + "2f5ebdc5f70d64df750ec93618e188488f8a8c3c", [] ], "masonry-intrinsic-sizing-rows-002-mix2-ref.html": [ - "ba2034119ef4f0a424313dd607665591e876c3ce", + "5c5b8ef4126f6c2124bd0eb1b74bf1e389968749", [] ], "masonry-intrinsic-sizing-rows-003-auto-ref.html": [ - "3b257ea4f7b2b0758d3659480a482ad3677d713a", + "c774c3dde7bc9c77ee79c2793b945439c59b6075", [] ], "masonry-intrinsic-sizing-rows-003-fr-ref.html": [ - "d498ba60d9b05ea39bfec6e842362f4ca6cddda5", + "ca2aaef482dc6207913d66db1d38fba4e21f43b0", [] ], "masonry-intrinsic-sizing-rows-003-mix1-ref.html": [ - "92171930afc01dd4a49087edb1d7defa3efc7a1b", + "04d9971b057b66aea187760f12d40b7dccb9d97a", [] ], "masonry-intrinsic-sizing-rows-003-mix2-ref.html": [ - "ce221c46aee45383586dddbdf58033a72963b2b1", + "a5c92c240f4a3b0d0c10489e262838c00fb09752", [] ], "masonry-intrinsic-sizing-rows-004-auto-ref.html": [ - "013bd83da7afd670a73822e7612958fdfb7742b1", + "7d8d8888d90619388ac54b00ca09fe09f63cff1b", [] ], "masonry-intrinsic-sizing-rows-004-fr-ref.html": [ - "4a1cf906f8d5b58ab3c656571e899c9c292ddd71", + "cccb436f503976752db5c521ce2eb3b4c8455e95", [] ], "masonry-intrinsic-sizing-rows-004-mix1-ref.html": [ - "5682f74e230b6c27752497acc870fe1ae71d4e0e", + "efb9969a6d40be8802151b0050ee8ad195baf68e", [] ], "masonry-intrinsic-sizing-rows-004-mix2-ref.html": [ - "c1bf7d407e52dbaf8ec76dffebd7d4f476702332", + "97e6b3ea2922b8810d5bc940caad3eb48b3ac371", [] ], "masonry-intrinsic-sizing-rows-005-ref.html": [ @@ -341407,12 +341406,8 @@ } }, "item-placement": { - "masonry-columns-item-placement-auto-flow-next-001-ref.html": [ - "b6373f8d2dc7d5fa736ee42e2a00ac62b2a22080", - [] - ], "masonry-item-placement-001-ref.html": [ - "2e100c3be619cbbb55ea430edb92d08dd2af4b2a", + "20272827189b048e0bb474dd3a110f1eb1f88221", [] ], "masonry-item-placement-002-ref.html": [ @@ -347640,6 +347635,12 @@ "2dc9c219a0cdd6dd5e9ea6e92f6eb614a6f4b2c1", [] ], + "support": { + "scroll-marker-support.js": [ + "2a047f72436bb9a39005c52877d121a3be6409dc", + [] + ] + }, "targeted-column-scroll-marker-selection-001-ref.html": [ "e4dbe28a85a9878af094714893fb55a5c0a1e7db", [] @@ -360407,7 +360408,7 @@ [] ], "animation-name-expected.txt": [ - "da8c2b54a00aa3f71e5e05d12b78e3f3495a6c62", + "3bb4c80ca4074d07070969260b9d9e0aeb40963a", [] ], "background-expected.txt": [ @@ -366558,6 +366559,10 @@ "80810e06db0886c271af4ade397bcf44d99f73f8", [] ], + "cssstyledeclaration-all-shorthand-expected.txt": [ + "731b006f3abe49aac7a9860513a1b4be119ec4bd", + [] + ], "cssstyledeclaration-cssfontrule.tentative-expected.txt": [ "447b84e7d745bbf1aafd3b408351c2e7ca46c0ba", [] @@ -366574,10 +366579,6 @@ "c45f8decf388919e994ee795b9e8d633dc6ee31c", [] ], - "cssstyledeclaration-removeProperty-all-expected.txt": [ - "0ce59f44f937cad1706a397b76b0872c7757a745", - [] - ], "flex-serialization-expected.txt": [ "ac76667255ef2b5d6cfaad859b1982a549657a36", [] @@ -370416,7 +370417,7 @@ [] ], "scroll_support.js": [ - "1cde3a1f6b446f167260a5acd85ae1e5d37ed8e5", + "c94803aa78ca3c17d1295b558c2b03e964123ff8", [] ], "scrollend-event-fires-to-iframe-inner-frame.html": [ @@ -393718,7 +393719,7 @@ [] ], "select-appearance-optgroup-rendering-ref.html": [ - "25bb73492a809588ee60f04aa661d8e7bf27ea4c", + "d6bc50a5f715b3e77fe0706f4aaef043fe6e155f", [] ], "select-appearance-picker-select-border-ref.html": [ @@ -393785,10 +393786,6 @@ "154fbad9ca3a4ace9655cfd8fb377f895fff3d81", [] ], - "switch-picker-appearance.tentative-expected.txt": [ - "8cdb454e3f44fed079a783f0e29b7c1be014d8c6", - [] - ], "uses-label-dynamic-ref.html": [ "027f0db784c2b2a21de2d6e28680c05c062ccebe", [] @@ -401277,7 +401274,7 @@ ] }, "lint.ignore": [ - "759ef41ca2bc2f3595dc33d70b6b75c5cda7b798", + "0019090002858c58dfbedb566f2ea51541b2eff4", [] ], "loading": { @@ -405109,11 +405106,11 @@ [] ], "partitioned-popins.cookies-popin-iframe.html": [ - "5a2fa1c83db513d11170415d0c94e8f04646f774", + "174e97d412ca7163b2ede2f1c3f1870babf1318a", [] ], "partitioned-popins.cookies-popin.sub.py": [ - "cebcb411062692aa6c53327404ab88e610dfa65b", + "54188d320cf8c51d2e5ea020698ac7dbdc4f23f8", [] ], "partitioned-popins.cookies-window.html": [ @@ -416869,6 +416866,10 @@ "7d5c6e8fbf92b4b9cdd271ac9761c5ab4179a2cf", [] ], + "legacy-trusted-scripts-expected.txt": [ + "e831f250be6348f9debc62d2d51bd5d9c297df44", + [] + ], "modify-attributes-in-callback-expected.txt": [ "c05174a497447fe749b0e57f6b5a5de1eb66abda", [] @@ -453992,21 +453993,21 @@ }, "browsing-topics": { "browsing-topics-permissions-policy-default.tentative.https.sub.html": [ - "8467ab656919e95c8d3b31e352c28a6aa5117740", + "f37a89724bc650b44f8ffb7b89551e3ababf097a", [ null, {} ] ], "browsing-topics-permissions-policy-none.tentative.https.sub.html": [ - "23bac4381f0956824775403b8cfe1717e42c4123", + "1a3737cbc3f595b18081ef25248ec3c0e07bd666", [ null, {} ] ], "browsing-topics-permissions-policy-self.tentative.https.sub.html": [ - "91ee4f05f3a64b5f990f66481d77f0087c4e2a32", + "3d0de475fb2bb61a27264b8ee6edbe67b29438c1", [ null, {} @@ -454068,6 +454069,13 @@ {} ] ], + "img-topics-attribute.tentative.https.html": [ + "a87aea047b681d937829f44480802e538202c1fb", + [ + null, + {} + ] + ], "topics-not-allowed-for-service-worker-fetch.tentative.https.html": [ "1bd578e9bf74fb942fa1bfcc6c001c0c096364bf", [ @@ -489780,6 +489788,15 @@ } ] ], + "scroll-marker-selection-in-padded-scroller.html": [ + "94e84d278f2b53b475e6d072cb6f520916bdb283", + [ + null, + { + "testdriver": true + } + ] + ], "scroll-markers-focus-active-element.html": [ "0b2d68b5773f08bd49004e006eb8432852e50a79", [ @@ -490028,8 +490045,15 @@ } ] ], + "targeted-scroll-marker-selection-with-transition.tentative.html": [ + "724d07baad5da9a3fc259566af9f804047d29460", + [ + null, + {} + ] + ], "targeted-scroll-marker-selection.tentative.html": [ - "0f1f6640546ccdfbec1c3c22f38fb5f2075936e0", + "2364072cf1905a7000c2dd60747153964e367deb", [ null, { @@ -491554,6 +491578,13 @@ {} ] ], + "non-computed-unit-cycles.html": [ + "6a0fcb5f5d1915a395da58f27daeb8095aece5d9", + [ + null, + {} + ] + ], "property-cascade.html": [ "68417a578ac131475963a75a5bf54819457abdf6", [ @@ -491799,7 +491830,7 @@ ] ], "input-element-pseudo-open.optional.html": [ - "815594f07aa1d1ba66fc79a006db0f97a42403a5", + "f590234c56fa2f84fc6de6bf9cca54cd369b7320", [ null, { @@ -496118,6 +496149,13 @@ {} ] ], + "intrinsic-percent-replaced-028.html": [ + "f54245a1e1f0aabff40ed8823279b8c0bb48f93d", + [ + null, + {} + ] + ], "intrinsic-size-fallback-replaced.html": [ "a3325b0aea01c008ec322a20e0f279d5bd765b1c", [ @@ -508478,6 +508516,13 @@ {} ] ], + "cssstyledeclaration-all-shorthand.html": [ + "05d64587fca292d3e233fd74414c30a78886e3f5", + [ + null, + {} + ] + ], "cssstyledeclaration-cssfontrule.tentative.html": [ "2efab276c5bf3a7e66be5bdd0ae1c4d6b697944b", [ @@ -523478,6 +523523,21 @@ } ] ], + "paste-clipboard-change.tentative.html": [ + "b029f8457501d44339c7229158ba195cb010d91b", + [ + "editing/other/paste-clipboard-change.tentative.html?id=contenteditable", + { + "testdriver": true + } + ], + [ + "editing/other/paste-clipboard-change.tentative.html?id=text", + { + "testdriver": true + } + ] + ], "paste-in-list-with-inline-style.tentative.html": [ "97710e805dd635f586cd2fafe6a443bd663122f4", [ @@ -622155,7 +622215,7 @@ ] ], "input-type-checkbox-switch.tentative.window.js": [ - "6128a62a0fb0d592af5ab70a8e7f1163077f7360", + "1f91d096ec81aff2a2d96ff07ec4478099c62df8", [ "html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.html", {} @@ -622841,7 +622901,7 @@ ], "customizable-select": { "button-in-popover.tentative.html": [ - "32d7c072ce5df5bd44b2d4f581b4244910fe879c", + "58b930287e8ed20ede1f2b5d6df28cd774d396e7", [ null, { @@ -622900,7 +622960,7 @@ ] ], "select-dialog-mode-focus.tentative.html": [ - "b335db07fbcaa4098852bf8ba15abcaf1795bbfd", + "a6292902399dd42e654b79524ccbfc24f8938a3f", [ null, { @@ -622936,6 +622996,24 @@ } ] ], + "select-home-end-pagedown-pageup-detailed.optional.html": [ + "bf5ec0c1f8e71f43669d69737c135f05cfa7b720", + [ + null, + { + "testdriver": true + } + ] + ], + "select-home-end-pagedown-pageup.tentative.html": [ + "b18bb71906b37c9256481957d7d7fbe15d5da75d", + [ + null, + { + "testdriver": true + } + ] + ], "select-inside-top-layer.tentative.html": [ "6d70f3aaf8d3dc23b2f5fb784c399991913dc938", [ @@ -622993,7 +623071,7 @@ ] ], "select-option-hover-styles.tentative.html": [ - "0df62f0810ef0bd52b8be40e3698104ee38427e7", + "96811bbfddfa7cb1295918a5f9c5071d42400868", [ null, { @@ -623053,7 +623131,7 @@ ] ], "switch-picker-appearance.tentative.html": [ - "75cb63fce804f522bd0374d33a1252eff1c56eee", + "09bea44a3409b1ada1e11c331486302e20d3c581", [ null, { @@ -623743,7 +623821,7 @@ ] ], "dialog-close-via-attribute.tentative.html": [ - "5c2e70f87a6101c0ed32dac3fbec8a9d7df0f13f", + "4ccac5b31cf2e7610397ba2a0763e4b025fbe16b", [ null, { @@ -652168,7 +652246,7 @@ ] ], "partitioned-popins.partitions.tentative.https.window.js": [ - "a414d9a12075cd939f5799d26385e8e38f8d0cd1", + "0f1a7c0a6e0c91793d015150124bc0059400a791", [ "partitioned-popins/partitioned-popins.partitions.tentative.https.window.html", { @@ -704155,6 +704233,13 @@ {} ] ], + "legacy-trusted-scripts.html": [ + "05866fbaab505feb164432d96085f105e09a7063", + [ + null, + {} + ] + ], "modify-attributes-in-callback.html": [ "66d28d6d60006bc5c88a3958b55bfc50967a9986", [
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto-ref.html index 3f5ca75..a738cff 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-auto-ref.html
@@ -46,7 +46,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area:1/2">5</item> + <item style="width:2ch; grid-column: 2;">5</item> </grid> <grid> @@ -54,28 +54,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area:1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr-ref.html index e4bf5b7f..d0af62d3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-fr-ref.html
@@ -46,7 +46,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -54,27 +54,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1-ref.html index db70b7be..8bf1f6ea 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix1-ref.html
@@ -47,7 +47,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -55,28 +55,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2-ref.html index e97edbd6..af3a7823 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-001-mix2-ref.html
@@ -46,7 +46,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -54,26 +54,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto-ref.html index dc883d3..329ac9ad 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-auto-ref.html
@@ -47,7 +47,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area:1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -55,28 +55,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area:1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr-ref.html index 79c43c59..986ddbf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-fr-ref.html
@@ -47,7 +47,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -55,27 +55,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1-ref.html index 4f3a519..c7c0696 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix1-ref.html
@@ -47,7 +47,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -55,28 +55,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2-ref.html index 1651af5..dab4e57 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-002-mix2-ref.html
@@ -48,7 +48,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2">5</item> + <item style="width:2ch; grid-column:2">5</item> </grid> <grid> @@ -56,26 +56,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="width:4ch; grid-area: 1/2/2/4">5</item> + <item style="width:4ch; grid-column:2/span 2">5</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="grid-area: 1/2/2/span 2">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="width:3ch; grid-area:1/2/2/4">5</item> - <item style="width:5ch; grid-area:2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto-ref.html index f313703..c592d97 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-auto-ref.html
@@ -52,46 +52,38 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item style="width:2ch; grid-column:2">5 5</item> </grid> <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> - - <item class="hidden">0</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column: 1; grid-row: 2;" class="hidden">0 0</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column: 1; grid-row: 2;" class="hidden">0 0</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr-ref.html index 856a76b..cc4110934 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-fr-ref.html
@@ -52,44 +52,38 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item style="width:2ch; grid-column:2">5 5</item> </grid> <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> - <item class="hidden">0</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column: 1; grid-row: 2;" class="hidden">0 0</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column: 1; grid-row: 2;" class="hidden">0 0</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1-ref.html index d6f5674..65984d7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix1-ref.html
@@ -54,44 +54,44 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> + <item>2 2</item> <item style="grid-row: span 2">3 3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item style="width:2ch; grid-column:2">5 5</item> + + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> - <item class="hidden">0</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> + + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> + + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2-ref.html index 675e45b..25f88a9b 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-003-mix2-ref.html
@@ -55,44 +55,36 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> + <item>2 2</item> <item style="grid-row: span 2">3 3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item style="width:2ch; grid-column:2">5 5</item> </grid> <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> - <item class="hidden">0</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid> - <item style="grid-column: 4">1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> - - <item class="hidden">0</item> - <item class="hidden">0 0</item> - <item class="hidden">0 0</item> + <item style="width:3ch; grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto-ref.html index d01a543..44c32ae 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-auto-ref.html
@@ -60,50 +60,46 @@ <item>1</item> <item>2 2</item> <item>3 3</item> - <item style="grid-area: 2/1">4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item>4</item> + <item style="width:2ch; grid-column: 2">5 5</item> <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid> <item>1</item> <item>2 2</item> <item>3 3</item> - <item style="grid-area: 2/2">4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> + <item>4</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> + <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid> - <item style="grid-area: 1/4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> - <item class="hidden" style="grid-area: 1/1">0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> - <item class="hidden" style="grid-area: 1/4">0 0</item> + <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid> - <item style="grid-area: 1/4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden" style="grid-area: 1/1">0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> - <item class="hidden" style="grid-area: 1/4">0 0</item> + <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr-ref.html index 9d757dd..60d208a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-fr-ref.html
@@ -41,7 +41,6 @@ <item>3 3</item> <item>4</item> <item>5 5</item> - <item class="hidden" style="grid-area: 2/4/4">0 0</item> </grid> <grid> @@ -58,7 +57,7 @@ <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item style="width:2ch; grid-column:2">5 5</item> </grid> <grid> @@ -66,36 +65,31 @@ <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> - <item class="hidden">0</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> </grid> <grid> - <item style="grid-area: 1/4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> - <item class="hidden" style="grid-area: 1/1">0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> - <item class="hidden" style="grid-area: 1/4">0 0</item> + <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid> - <item style="grid-area: 1/4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden" style="grid-area: 1/1">0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> - <item class="hidden" style="grid-area: 1/4">0 0</item> + <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 2/4">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1-ref.html index 4793949..c5fc8dd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix1-ref.html
@@ -60,12 +60,13 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> - <item style="grid-row: span 2">3 3</item> - <item style="grid-area: 2/1">4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item>2 2</item> + <item style="grid-row: span 2;">3 3</item> + <item>4</item> + <item style="width:2ch; grid-column:2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-column: 1; grid-row: 2;">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> @@ -73,32 +74,34 @@ <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> - <item class="hidden">0</item> + <item class="hidden" style="grid-column: 1; grid-row: 2;">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:span 3/4">6</item> - <item class="hidden">0 0</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> + <item class="hidden" style="grid-column: 1; grid-row: 2;">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="width:3ch; grid-column:span 2/4">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/3">0 0</item> + <item class="hidden" style="grid-column: 1; grid-row: 2;">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2-ref.html index 640d02d1..b874f70 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-004-mix2-ref.html
@@ -60,12 +60,12 @@ <grid> <item>1</item> - <item style="grid-row: span 2">2 2</item> + <item>2 2</item> <item style="grid-row: span 2">3 3</item> - <item style="grid-area: 2/1">4</item> - <item style="width:2ch; grid-area: 1/2/3">5 5</item> + <item>4</item> + <item style="width:2ch; grid-column:2">5 5</item> - <item class="hidden" style="grid-area: 2/2">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> @@ -73,32 +73,31 @@ <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:4ch; grid-area: 1/2/auto/4">5 5</item> + <item style="width:4ch; grid-column:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid> - <item style="grid-column: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="width:3ch; grid-area: 1/2/2/4">5 5</item> - <item style="width:5ch; grid-area: 2/1/3/4">6</item> + <item style="width:3ch; grid-column:2/span 2">5 5</item> + <item style="width:5ch; grid-column:1/span 3">6</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 3/4">0 0</item> + <item class="hidden" style="grid-column: 4; grid-row: 2;">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005-ref.html index e65661bb..4e81340d 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-cols-005-ref.html
@@ -55,11 +55,11 @@ </grid> <grid style="grid-template-columns: 3ch 15px 15px 15px"> - <item style="grid-column:1; grid-row: span 3;">5 5</item> <item>1</item> <item>2</item> <item>3</item> <item>4</item> + <item style="grid-column:1; grid-row: span 2;">5 5</item> <item>6</item> <item>7</item> <item>8</item>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto-ref.html index d3bb9110..4612a856 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-auto-ref.html
@@ -52,7 +52,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -60,28 +60,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-area:2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr-ref.html index f4a2c2b..3b3aed96 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-fr-ref.html
@@ -52,7 +52,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -60,27 +60,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1-ref.html index c483193..6858811 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix1-ref.html
@@ -52,7 +52,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -60,28 +60,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-area: 2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2-ref.html index 80e8c05..d6007a4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-001-mix2-ref.html
@@ -53,7 +53,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -61,26 +61,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-area: 2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto-ref.html index 9b30557c..7bfa49e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-auto-ref.html
@@ -53,7 +53,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area:2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -61,28 +61,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-area:2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr-ref.html index 442280d..2a1f1df 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-fr-ref.html
@@ -53,7 +53,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -61,27 +61,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1-ref.html index 03efe6f..2f5ebdc 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix1-ref.html
@@ -53,7 +53,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -61,28 +61,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-area: 2/1/4/2">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2-ref.html index ba203411..5c5b8ef 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-002-mix2-ref.html
@@ -54,7 +54,7 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="height:2ch; grid-area: 2/1">5</item> + <item style="height:2ch; grid-row:2">5</item> </grid> <grid> @@ -62,26 +62,25 @@ <item>2</item> <item>3</item> <item>4</item> - <item style="visibility: hidden">4</item> - <item style="height:4ch; grid-column: 1; grid-row: 2 / span 2;">5</item> + <item style="height:4ch; grid-row:2/span 2">5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="grid-area: 2/1/span 2/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2</item> <item>3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto-ref.html index 3b257ea..c774c3dd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-auto-ref.html
@@ -5,155 +5,154 @@ --> <!-- WARNING: The interaction of writing-mode and min-content sizing seems to be a bit hazy. It's not clear if this is a correct reference. --> <html> -<meta charset="utf-8"> -<title>Reference: Masonry layout min-content sizing</title> -<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> + <meta charset="utf-8"> + <title>Reference: Masonry layout min-content sizing</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> - @import "support/masonry-intrinsic-sizing-visual.css"; +@import "support/masonry-intrinsic-sizing-visual.css"; - grid { - display: inline-grid; - gap: 1px 2px; - grid-template-rows: repeat(4,auto); - grid-auto-flow: column; - border: 1px solid; - padding: 1px 0 2px 0; - vertical-align: top; - font-family: Ahem; - height: min-content; - } +grid { + display: inline-grid; + gap: 1px 2px; + grid-template-rows: repeat(4,auto); + grid-auto-flow: column; + border: 1px solid; + padding: 1px 0 2px 0; + vertical-align: top; + font-family: Ahem; + height: min-content; +} - item { - justify-self: start; - writing-mode: vertical-rl; - text-orientation: sideways; - } - .hidden { - visibility: hidden; - width: 0; - } +item { + justify-self: start; + writing-mode: vertical-rl; + text-orientation: sideways; +} +.hidden { + visibility: hidden; + width: 0; +} - grid > item:nth-child(1) { - background-color: #89CFF0; - } +grid > item:nth-child(1) { + background-color: #89CFF0; +} - grid > item:nth-child(2) { - background-color: #FF6F61; - } +grid > item:nth-child(2) { + background-color: #FF6F61; +} - grid > item:nth-child(3) { - background-color: #FDF3E7; - } +grid > item:nth-child(3) { + background-color: #FDF3E7; +} - grid > item:nth-child(4) { - background-color: #F4C542; - } +grid > item:nth-child(4) { + background-color: #F4C542; +} - grid > item:nth-child(5) { - background-color: #333333; - } +grid > item:nth-child(5) { + background-color: #333333; +} - grid > item:nth-child(6) { - background-color: #B2C8A5; - } +grid > item:nth-child(6) { + background-color: #B2C8A5; +} </style> <body> <section> - <grid> - <item style="height:2ch">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="grid-column: span 2">5 5</item> +<grid> + <item style="height:2ch">1</item> + <item style="grid-column: span 2">2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="grid-column: span 2">5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="height: 2ch">5 5</item> +<grid> + <item style="height: 3ch">1</item> + <item style="grid-column: span 2">2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height: 2ch">5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - </grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> +</grid> - <grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> - </grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> - <item class="hidden" style="grid-area: 3/3">0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> - </grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> - </grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item style="height: 3ch">4</item> - <item style="grid-column: 2; grid-row: span 4;">5 5</item> - </grid> +<grid> + <item style="height: 3ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item style="height: 3ch">4</item> + <item style="grid-column: 2; grid-row: span 4;">5 5</item> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item style="height: 3ch">4</item> - <item style="grid-column: 2; grid-row: span 4; height: 6ch">5 5</item> +<grid> + <item style="height: 3ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item style="height: 3ch">4</item> + <item style="grid-column: 2; grid-row: span 4; height: 6ch">5 5</item> - </grid> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item style="height: 3ch">4</item> - <item style="grid-column: 2; grid-row: span 3; height: 6ch">5 5</item> +<grid> + <item style="height: 3ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item style="height: 3ch">4</item> + <item style="grid-column: 2; grid-row: span 3; height: 6ch">5 5</item> - </grid> +</grid> </section> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr-ref.html index d498ba6..ca2aaef 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-fr-ref.html
@@ -83,49 +83,51 @@ <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> -<grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> + <grid> + <item>1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> -</grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> + </grid> -<grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> + <grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> -</grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> + </grid> -<grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> - <item class="hidden" style="grid-area: 3/3">0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> -</grid> + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> + </grid> -<grid> - <item style="grid-row: 4">1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> -</grid> + <grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> + + <item class="hidden" style="grid-column: 2; grid-row: 1">0 0</item> + <item class="hidden" style="grid-column: 2; grid-row: 4">0 0</item> + </grid> <grid> <item>1</item>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1-ref.html index 9217193..04d9971 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix1-ref.html
@@ -87,48 +87,48 @@ <grid> <item>1</item> - <item style="grid-column: span 2">2 2</item> + <item>2 2</item> <item style="grid-column: span 2">3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> </grid> -<grid> +<grid style="grid-template-columns: 30px auto"> <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> + <item style="height:4ch; grid-column: 2; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> </grid> -<grid> - <item style="grid-row: 4">1</item> +<grid style="grid-template-columns: 30px auto auto"> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> </grid> -<grid> - <item style="grid-row: 4">1</item> +<grid style="grid-template-columns: 30px auto auto"> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> </grid> <grid style="grid-template-columns: 30px auto">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2-ref.html index ce221c4..a5c92c2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-003-mix2-ref.html
@@ -60,47 +60,44 @@ <grid> <item>1</item> - <item style="grid-column: span 2">2 2</item> + <item>2 2</item> <item style="grid-column: span 2">3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> <grid> <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> + <item>1</item> + <item>2 2</item> + <item>3 3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto-ref.html index 013bd83..7d8d888 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-auto-ref.html
@@ -4,162 +4,161 @@ http://creativecommons.org/publicdomain/zero/1.0/ --> <html> -<meta charset="utf-8"> -<title>Reference: Masonry layout max-content sizing</title> -<link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> -<link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> -<style> + <meta charset="utf-8"> + <title>Reference: Masonry layout max-content sizing</title> + <link rel="author" title="Mats Palmgren" href="mailto:mats@mozilla.com"> + <link rel="stylesheet" type="text/css" href="/fonts/ahem.css"> + <style> - @import "support/masonry-intrinsic-sizing-visual.css"; +@import "support/masonry-intrinsic-sizing-visual.css"; - grid { - display: inline-grid; - gap: 1px 2px; - grid-template-rows: repeat(4, auto); - grid-auto-flow: column; - border: 1px solid; - padding: 1px 0 2px 0; - vertical-align: top; - height: max-content; - font-family: Ahem; - } +grid { + display: inline-grid; + gap: 1px 2px; + grid-template-rows: repeat(4, auto); + grid-auto-flow: column; + border: 1px solid; + padding: 1px 0 2px 0; + vertical-align: top; + height: max-content; + font-family: Ahem; +} - item { - justify-self: start; - writing-mode: vertical-rl; - text-orientation: sideways; - } +item { + justify-self: start; + writing-mode: vertical-rl; + text-orientation: sideways; +} - grid > item:nth-child(1) { - background-color: #89CFF0; - } +grid > item:nth-child(1) { + background-color: #89CFF0; +} - grid > item:nth-child(2) { - background-color: #FF6F61; - } +grid > item:nth-child(2) { + background-color: #FF6F61; +} - grid > item:nth-child(3) { - background-color: #FDF3E7; - } +grid > item:nth-child(3) { + background-color: #FDF3E7; +} - grid > item:nth-child(4) { - background-color: #F4C542; - } +grid > item:nth-child(4) { + background-color: #F4C542; +} - grid > item:nth-child(5) { - background-color: #333333; - } +grid > item:nth-child(5) { + background-color: #333333; +} - grid > item:nth-child(6) { - background-color: #B2C8A5; - } +grid > item:nth-child(6) { + background-color: #B2C8A5; +} - .hidden { - visibility: hidden; - opacity: 0.5; - width: 1em; - } +.hidden { + visibility: hidden; + opacity: 0.5; + width: 1em; +} </style> <body> <section> - <grid> - <item style="height:2ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item>5 5</item> +<grid> + <item style="height:2ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item>5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item style="height: 3ch">4</item> - <item style="height:2ch">5 5</item> +<grid> + <item style="height: 3ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item style="height: 3ch">4</item> + <item style="height:2ch">5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item>3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - </grid> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> - </grid> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> - <item class="hidden" style="grid-area: 3/3">0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> - </grid> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> - </grid> + <item class="hidden" style="grid-row: 1; grid-column: 2;">0 0</item> + <item class="hidden" style="grid-row: 4; grid-column: 2;">0 0</item> +</grid> - <grid> - <item style="height: 3ch">1</item> - <item>2 2</item> - <item>3 3</item> - <item style="height: 3ch">4</item> - <item style="grid-area: 1/2/5/3">5 5</item> - </grid> +<grid> + <item style="height: 3ch">1</item> + <item>2 2</item> + <item>3 3</item> + <item style="height: 3ch">4</item> + <item style="grid-area: 1/2/5/3">5 5</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:6ch; grid-area: 1/2/5/3">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:6ch; grid-area: 1/2/5/3">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item>3 3</item> - <item>4</item> - <item style="height:6ch; grid-area: 1/2/4/3">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:6ch; grid-area: 1/2/4/3">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - <item class="hidden" style="height:6ch; grid-area: 2/2/5/3">0 0</item> - </grid> + <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> + <item class="hidden" style="height:6ch; grid-area: 2/2/5/3">0 0</item> +</grid> </section> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr-ref.html index 4a1cf90..cccb436 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-fr-ref.html
@@ -62,11 +62,8 @@ <item>1</item> <item>2 2</item> <item>3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> - - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> </grid> <grid> @@ -74,35 +71,25 @@ <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> - - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> - - <item class="hidden" style="grid-area: 3/3">0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> </grid> <grid> - <item style="grid-row: 4">1</item> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> - - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> </grid> <grid>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1-ref.html index 5682f74e..efb9969 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix1-ref.html
@@ -86,48 +86,48 @@ <grid> <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> -<grid> +<grid style="grid-template-columns: 30px auto;"> <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> + <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> -<grid> - <item style="grid-row: 4">1</item> +<grid style="grid-template-columns: 30px auto;"> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:span 3/4">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> -<grid> - <item style="grid-row: 4">1</item> +<grid style="grid-template-columns: 30px auto;"> + <item>1</item> <item>2 2</item> <item>3 3</item> <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> + <item style="height:3ch; grid-row:span 2/4">5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/1">0 0</item> + <item class="hidden" style="grid-area: 1/2">0 0</item> + <item class="hidden" style="grid-area: 4/2">0 0</item> </grid> <grid style="grid-template-columns: 30px auto;">
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2-ref.html index c1bf7d40..97e6b3e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/intrinsic-sizing/masonry-intrinsic-sizing-rows-004-mix2-ref.html
@@ -39,79 +39,77 @@ <body> <section> - <grid> - <item style="height:2ch">1</item> - <item>2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="grid-column: span 2">5 5</item> +<grid> + <item style="height:2ch">1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="grid-column: span 2">5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="height: 2ch;">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height: 2ch;">5 5</item> - <item class="hidden" style="grid-area: 4/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item>3 3</item> - <item style="grid-area: 1/2">4</item> - <item style="height:2ch; grid-area: 2/1/3/3">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height:2ch; grid-row:2">5 5</item> - <item class="hidden" style="grid-area: 1/2">0 0</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="height:4ch; grid-area: 2/1/4/auto">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:4ch; grid-row:2/span 2">5 5</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - <item class="hidden" style="grid-area: 3/2">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item style="grid-row: 4">1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="height:3ch; grid-area: 2/1/4/2">5 5</item> - <item style="height:5ch; grid-area: 1/2/4/3">6</item> +<grid> + <item>1</item> + <item>2 2</item> + <item>3 3</item> + <item>4</item> + <item style="height:3ch; grid-row:2/span 2">5 5</item> + <item style="height:5ch; grid-row:1/span 3">6</item> - <item class="hidden" style="grid-area: 2/1">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/2">0 0</item> +</grid> - <grid> - <item>1</item> - <item style="grid-column: span 2">2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="grid-area: 1/3/5/4">5 5</item> +<grid> + <item>1</item> + <item style="grid-column: span 2">2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="grid-area: 1/3/5/4">5 5</item> - <item class="hidden" style="grid-area: 4/3">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/3">0 0</item> +</grid> <grid> <item>1</item> @@ -120,18 +118,18 @@ <item>4</item> <item style="height:6ch; grid-area: 1/3/5/4">5 5</item> - <item class="hidden" style="grid-area: 4/3">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/3">0 0</item> +</grid> - <grid> - <item>1</item> - <item>2 2</item> - <item style="grid-column: span 2">3 3</item> - <item>4</item> - <item style="height:6ch; grid-area: 1/3/4/4">5 5</item> +<grid> + <item>1</item> + <item>2 2</item> + <item style="grid-column: span 2">3 3</item> + <item>4</item> + <item style="height:6ch; grid-area: 1/3/4/4">5 5</item> - <item class="hidden" style="grid-area: 4/3">0 0</item> - <item class="hidden" style="height:6ch; grid-area: 2/3/5/4">0 0</item> - </grid> + <item class="hidden" style="grid-area: 4/3">0 0</item> + <item class="hidden" style="height:6ch; grid-area: 2/3/5/4">0 0</item> +</grid> </section> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001-ref.html deleted file mode 100644 index b6373f8..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001-ref.html +++ /dev/null
@@ -1,47 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid masonry columns masonry-auto-flow next</title> - <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-3/#masonry-auto-flow"> - <meta name="assert" content="Placing item that would span outside the grid using masonry-auto-flow-next should place the item at the first grid axis track" /> - <style> -html,body { - color:black; background-color:white; font:25px/1 monospace; padding:0; margin:0; -} - -grid { - display: inline-grid; - gap: 10px 20px; - grid-template-rows: repeat(4,80px); - grid-template-columns: auto; - grid-auto-flow: column; - color: #444; - border: 1px solid; - padding: 2px; -} - -item { - background-color: #444; - color: #fff; - padding: 20px; - margin: 3px; - border: 5px solid blue; -} -</style> -</head> -<body> - -<grid> - <item>1</item> - <item style="grid-row: span 3">2</item> - <item>3</item> - <item style="grid-row: span 4">4</item> -</grid> - -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001.html deleted file mode 100644 index eacc943..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-columns-item-placement-auto-flow-next-001.html +++ /dev/null
@@ -1,48 +0,0 @@ -<!DOCTYPE HTML> -<!-- - Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ ---> -<html><head> - <meta charset="utf-8"> - <title>CSS Grid masonry columns masonry-auto-flow next</title> - <link rel="author" title="Sammy Gill" href="mailto:sammy.gill@apple.com"> - <link rel="help" href="https://drafts.csswg.org/css-grid-3/#masonry-auto-flow"> - <link rel="match" href="masonry-columns-item-placement-auto-flow-next-001-ref.html"> - <meta name="assert" content="Placing item that would span outside the grid using masonry-auto-flow-next should place the item at the first grid axis track" /> - <style> -html,body { - color:black; background-color:white; font:25px/1 monospace; padding:0; margin:0; -} - -grid { - display: inline-grid; - gap: 10px 20px; - grid-template-rows: repeat(4,80px); - grid-template-columns: masonry; - color: #444; - border: 1px solid; - padding: 2px; - masonry-auto-flow: next; -} - -item { - background-color: #444; - color: #fff; - padding: 20px; - margin: 3px; - border: 5px solid blue; -} -</style> -</head> -<body> - -<grid> - <item>1</item> - <item style="grid-row: span 3">2</item> - <item>3</item> - <item style="grid-row: span 4">4</item> -</grid> - -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001-ref.html index 2e100c3..20272827 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/masonry/tentative/item-placement/masonry-item-placement-001-ref.html
@@ -35,11 +35,11 @@ <grid> <item style="grid-column:1">6</item> - <item style="grid-column:2">5</item> - <item style="grid-column:span 2">4</item> + <item>5</item> <item style="margin-top:10px">3</item> <item style="grid-column:span 2">1</item> <item>2</item> + <item style="grid-column:3/span 2">4</item> </grid> </body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/non-computed-unit-cycles.html b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/non-computed-unit-cycles.html new file mode 100644 index 0000000..6a0fcb5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-properties-values-api/non-computed-unit-cycles.html
@@ -0,0 +1,109 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#dependency-cycles-via-relative-units"> +<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1938927"> +<meta name="assert" content="This test verifies reference cycles involving only unreigstered properties don't make used units invalid at compute time."> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +@property --registered-a { + syntax: "*"; + inherits: false; +} + +@property --registered-b { + syntax: "*"; + inherits: false; +} + +@property --registered-c { + syntax: "*"; + inherits: false; +} + +:root { + --font-size-em: 2em; + --line-height-lh: 2lh; +} + +</style> +<div id="target" class="values"></div> +<div id="reference" class="values"></div> +<script> +function assert_target_matches_reference(prop) { + const target_style = getComputedStyle(target); + const target_prop = target_style.getPropertyValue(prop); + const reference_style = getComputedStyle(reference); + const reference_prop = reference_style.getPropertyValue(prop); + assert_equals(target_prop, reference_prop); +} + +function set_for_target_and_reference(prop, value) { + target.style.setProperty(prop, value); + reference.style.setProperty(prop, value); +} + +function set_cycle(value, prop_names) { + target.style.setProperty(`--${prop_names[0]}`, `${value} var(--${prop_names[0]})`); + for (let i = 1; i < prop_names.length; i++) { + target.style.setProperty(`--${prop_names[i]}`, `var(--${prop_names[i - 1]})`); + } +} + +function do_test(run_test, desc) { + test(t => { + t.add_cleanup(() => { + target.style = ''; + reference.style = ''; + }); + run_test(); + }, desc); +} + +do_test(() => { + set_for_target_and_reference('font-size', 'var(--font-size-em)'); + set_cycle('1em', ['a']); + assert_target_matches_reference('font-size'); +}, "Unregistered property in a simple cycle using em should not make font-size invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('font-size', 'var(--font-size-em)'); + set_cycle('1em', ['a', 'b', 'c']); + assert_target_matches_reference('font-size'); +}, "Unregistered property in a multi-property cycle using em should not make font-size invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('line-height', 'var(--line-height-lh)'); + set_cycle('1lh', ['a']); + assert_target_matches_reference('line-height'); +}, "Unregistered property in a simple cycle using lh should not make line-height invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('line-height', 'var(--line-height-lh)'); + set_cycle('1lh', ['a', 'b', 'c']); + assert_target_matches_reference('line-height'); +}, "Unregistered property in a multi-property cycle using lh should not make line-height invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('font-size', 'var(--font-size-em)'); + set_cycle('1em', ['registered-a']); + assert_target_matches_reference('font-size'); +}, "Registered universal property in a simple cycle using em should not make font-size invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('font-size', 'var(--font-size-em)'); + set_cycle('1em', ['registered-a', 'registered-b', 'registered-c']); + assert_target_matches_reference('font-size'); +}, "Registered universal property in a multi-property cycle using em should not make font-size invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('line-height', 'var(--line-height-lh)'); + set_cycle('1lh', ['registered-a']); + assert_target_matches_reference('line-height'); +}, "Registered universal property in a simple cycle using lh should not make line-height invalid at compute time"); + +do_test(() => { + set_for_target_and_reference('line-height', 'var(--line-height-lh)'); + set_cycle('1lh', ['registered-a', 'registered-b', 'registered-c']); + assert_target_matches_reference('line-height'); +}, "Registered universal property in a multi-property cycle using lh should not make line-height invalid at compute time"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-028.html b/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-028.html new file mode 100644 index 0000000..f54245a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/intrinsic-percent-replaced-028.html
@@ -0,0 +1,50 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com"> +<link rel="help" href="https://drafts.csswg.org/css-sizing-3/#replaced-percentage-min-contribution"> +<meta name="assert" content="A preferred or max inline size property set to a percentage is treated as zero when computing the min-content contribution."> + +<style> +.wrapper { + display: inline-block; + border: solid; + margin: 5px; +} +</style> + +<div style="width: 0px"> + <!-- Set 'width' to a percentage --> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 0%; max-width: 100px"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 50%; max-width: 100px"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 100%; max-width: 100px"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 200%; max-width: 100px"></canvas> + </div> + + <!-- Set 'max-width' to a percentage --> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 100px; max-width: 0%"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 100px; max-width: 50%"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 100px; max-width: 100%"></canvas> + </div> + <div class="wrapper" data-expected-client-width="0"> + <canvas style="width: 100px; max-width: 200%"></canvas> + </div> +</div> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> +<script> +checkLayout(".wrapper"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/editing/other/paste-clipboard-change.tentative.html b/third_party/blink/web_tests/external/wpt/editing/other/paste-clipboard-change.tentative.html new file mode 100644 index 0000000..b029f84 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/editing/other/paste-clipboard-change.tentative.html
@@ -0,0 +1,49 @@ +<!doctype html> +<meta charset=utf-8> +<title>This Test is for clipboard content changes during the paste event handler</title> +<meta name="variant" content="?id=text"> +<meta name="variant" content="?id=contenteditable"> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="../include/editor-test-utils.js"></script> +<div contenteditable="true" id="contentCopy">Original text</div> +<div id="pasteContainer"> +<input type="text" id="text"> +<div id="contenteditable" contenteditable="true"></div> +</div> +<script> +"use strict"; + +const testingId = new URLSearchParams(document.location.search).get("id"); +const testElement = document.getElementById(testingId); +const utils = new EditorTestUtils(testElement); + +promise_test(async () => { + // Copy the content to the clipboard. + const range = document.createRange(); + const contentToCopy = document.getElementById("contentCopy"); + range.selectNodeContents(contentToCopy); + const selection = window.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + await utils.sendCopyShortcutKey(); + + // Paste the content to the test element. + testElement.addEventListener("copy", (e) => { + e.preventDefault(); + e.clipboardData.setData("text/plain", "New text"); + }, { once: true }); + testElement.addEventListener("paste", (e) => { + // Overwrite the clipboard content. + document.execCommand("copy"); + }, { once: true }); + await test_driver.click(testElement); + await utils.sendPasteShortcutKey(); + + // Check content. + assert_equals(testElement.isContentEditable ? testElement.textContent : testElement.value, "New text"); +}, "clipboard change during paste event handler"); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/editing/run/removeformat-expected.txt b/third_party/blink/web_tests/external/wpt/editing/run/removeformat-expected.txt index a490f25774..127b585 100644 --- a/third_party/blink/web_tests/external/wpt/editing/run/removeformat-expected.txt +++ b/third_party/blink/web_tests/external/wpt/editing/run/removeformat-expected.txt
@@ -59,7 +59,7 @@ [FAIL] [["removeformat",""]] "[foo<span>bar</span>baz]" compare innerHTML assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foobarbaz" but got "foo<span>bar</span>baz" [FAIL] [["removeformat",""]] "foo<span>b[a]r</span>baz" compare innerHTML - assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo<span>b</span>a<span>r</span>baz" but got "foobarbaz" + assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foo<span>b</span>a<span>r</span>baz" but got "foo<span>bar</span>baz" [FAIL] [["removeformat",""]] "[foo<span id=foo>bar</span>baz]" compare innerHTML assert_equals: Unexpected innerHTML (after normalizing inline style) expected "foobarbaz" but got "foo<span id=\\"foo\\">bar</span>baz" [FAIL] [["removeformat",""]] "foo<span id=foo>b[a]r</span>baz" compare innerHTML
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js index 6128a62a..1f91d096 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-input-element/input-type-checkbox-switch.tentative.window.js
@@ -17,3 +17,20 @@ assert_equals(input.type, "checkbox"); assert_true(input.switch); }, "switch IDL attribute, getter"); + +test(t => { + const input = document.createElement("input"); + input.type = "checkbox"; + input.switch = true; + + const clone = input.cloneNode(); + assert_equals(clone.getAttribute("switch"), ""); + assert_equals(clone.type, "checkbox"); + assert_true(clone.switch); + + t.add_cleanup(() => clone.remove()); + document.body.appendChild(clone); + assert_equals(clone.getAttribute("switch"), ""); + assert_equals(clone.type, "checkbox"); + assert_true(clone.switch); +}, "Cloning a switch control");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative-expected.txt new file mode 100644 index 0000000..8cdb454e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative-expected.txt
@@ -0,0 +1,17 @@ +This is a testharness.js-based test. +[FAIL] Basic functionality of select picker with appearance:auto + assert_equals: expected "none" but got "base-select" +[FAIL] Basic functionality of select picker with appearance:none + assert_equals: expected "none" but got "base-select" +[FAIL] Switching appearance in popover-open should close the picker + assert_equals: expected "none" but got "base-select" +[FAIL] Switching appearance in JS after picker is open should close the picker + assert_equals: expected "none" but got "base-select" +[FAIL] The select picker is closed if the <select> appearance value is changed via CSS while the picker is open + assert_false: picker should get closed when the appearance value changes expected false got true +[FAIL] The select picker is closed if the ::picker() appearance value is changed via CSS while the picker is open + assert_false: setup expected false got true +[FAIL] The select picker is closed if the <select> inline appearance value is changed while the picker is open + assert_false: setup expected false got true +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative.html index 09bea44..75cb63f 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-select-element/customizable-select/switch-picker-appearance.tentative.html
@@ -14,10 +14,10 @@ </select> <style> - #test1::picker(select) { + select#test1::picker(select) { background-color: red; } - #test1::picker(select):popover-open { + select#test1::picker(select):popover-open { background-color: green; } </style> @@ -33,7 +33,7 @@ t.add_cleanup(() => style.remove()); assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); assert_equals(getComputedStyle(select1,'::picker(select)').backgroundColor,red); - style.innerHTML = '#test1::picker(select) {appearance: base-select}'; + style.innerHTML = '::picker(select) {appearance: base-select}'; assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'base-select'); assert_equals(getComputedStyle(select1,'::picker(select)').backgroundColor,red,'still closed, so popover-open doesn\'t match'); @@ -57,7 +57,7 @@ document.head.append(style); t.add_cleanup(() => style.remove()); assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); - style.innerHTML = '#test1::picker(select) {appearance: auto}'; + style.innerHTML = '::picker(select) {appearance: auto}'; assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'auto'); await test_driver.bless('showPicker'); select1.showPicker(); @@ -72,7 +72,7 @@ document.head.append(style); t.add_cleanup(() => style.remove()); assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); - style.innerHTML = '#test1::picker(select) {appearance: none}'; + style.innerHTML = '::picker(select) {appearance: none}'; assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); await test_driver.bless('showPicker'); select1.showPicker(); @@ -88,8 +88,8 @@ t.add_cleanup(() => style.remove()); assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); style.innerHTML = ` - #test1::picker(select) {appearance: base-select} - #test1::picker(select):popover-open {appearance: auto} + ::picker(select) {appearance: base-select} + ::picker(select):popover-open {appearance: auto} `; assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'base-select'); await test_driver.bless('showPicker'); @@ -109,17 +109,18 @@ document.head.append(style); t.add_cleanup(() => style.remove()); assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); - style.innerHTML = '#test1::picker(select) {appearance: base-select}'; + style.innerHTML = '::picker(select) {appearance: none}'; assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'base-select'); await test_driver.bless('showPicker'); select1.showPicker(); assert_true(select1.matches(':open')); style.remove(); - assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); assert_false(select1.matches(':open'),'changing appearance while the picker is open should close it'); + assert_equals(getComputedStyle(select1,'::picker(select)').appearance,'none'); }, 'Switching appearance in JS after picker is open should close the picker'); </script> + <button id=reset>Reset</button> <select id=test2> <button><selectedcontent></selectedcontent></button> @@ -129,13 +130,13 @@ </select> <style> - #test2, #test2::picker(select) { + select#test2, ::picker(select) { appearance: base-select; } - #test2.controlswitch:open { + select#test2.controlswitch:open { appearance: auto; } - #test2.pickerswitch:open::picker(select) { + select#test2.pickerswitch:open::picker(select) { appearance: auto; } </style> @@ -199,7 +200,7 @@ assert_equals(getComputedStyle(select2).appearance,'base-select'); t.add_cleanup(() => select2.removeAttribute('style')); select2.setAttribute('style','appearance:auto'); - assert_equals(getComputedStyle(select2).appearance,'auto','appearance should still be auto from inline style'); assert_false(select2.matches(':open'),'Adding inline style should close the picker'); + assert_equals(getComputedStyle(select2).appearance,'auto','appearance should still be auto from inline style'); },'The select picker is closed if the <select> inline appearance value is changed while the picker is open'); </script>
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/resources/executor.sub.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/resources/executor.sub.html index 3001bc2..24fef91 100644 --- a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/resources/executor.sub.html +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/resources/executor.sub.html
@@ -6,6 +6,8 @@ purpose: "{{header_or_default(Purpose, )}}", sec_purpose: "{{header_or_default(Sec-Purpose, )}}", referer: "{{header_or_default(Referer, )}}", + sec_fetch_dest: "{{header_or_default(Sec-Fetch-Dest, )}}", + sec_fetch_mode: "{{header_or_default(Sec-Fetch-Mode, )}}", }; const uuid = new URLSearchParams(location.search).get('uuid');
diff --git a/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/sec-fetch-headers.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/sec-fetch-headers.https.html new file mode 100644 index 0000000..730f072 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prefetch/sec-fetch-headers.https.html
@@ -0,0 +1,65 @@ +<!DOCTYPE html> +<title>Prefetch request's Sec-Fetch-* request headers</title> +<meta name="timeout" content="long"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/utils.js"></script> +<script src="../resources/utils.js"></script> +<script src="resources/utils.sub.js"></script> + +<script> +"use strict"; + +setup(() => assertSpeculationRulesIsSupported()); + +// https://wicg.github.io/nav-speculation/prefetch.html#create-a-navigation-request + +promise_test(async t => { + const agent = await spawnWindow(t); + const nextUrl = agent.getExecutorURL({ page: 2 }); + await agent.forceSinglePrefetch(nextUrl); + await agent.navigate(nextUrl); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers.sec_fetch_dest, "document", "Sec-Fetch-Dest"); +}, 'Sec-Fetch-Dest'); + +promise_test(async t => { + const agent = await spawnWindow(t); + const nextUrl = agent.getExecutorURL({ page: 2 }); + await agent.forceSinglePrefetch(nextUrl); + await agent.navigate(nextUrl); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers.sec_fetch_mode, "navigate", "Sec-Fetch-Mode"); +}, 'Sec-Fetch-Mode'); + +promise_test(async t => { + const agent = await spawnWindow(t); + const nextUrl = new URL('/common/redirect.py', location.href); + const finalUrl = agent.getExecutorURL({ page: 2 }); + nextUrl.searchParams.set('location', finalUrl); + await agent.forceSinglePrefetch(nextUrl); + await agent.navigate(nextUrl, {expectedDestinationUrl: finalUrl}); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers.sec_fetch_dest, "document", "Sec-Fetch-Dest"); +}, 'Sec-Fetch-Dest with redirects'); + +promise_test(async t => { + const agent = await spawnWindow(t); + const nextUrl = new URL('/common/redirect.py', location.href); + const finalUrl = agent.getExecutorURL({ page: 2 }); + nextUrl.searchParams.set('location', finalUrl); + await agent.forceSinglePrefetch(nextUrl); + await agent.navigate(nextUrl, {expectedDestinationUrl: finalUrl}); + + const headers = await agent.getRequestHeaders(); + assert_prefetched(headers, "must be prefetched"); + assert_equals(headers.sec_fetch_mode, "navigate", "Sec-Fetch-Mode"); +}, 'Sec-Fetch-Mode with redirects'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts-expected.txt b/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts-expected.txt new file mode 100644 index 0000000..e831f25 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +[FAIL] Legacy sinks for TrustedScript accept arbitrary strings. + Failed to execute 'prepend' on 'Element': This document requires 'TrustedScript' assignment. +Harness: the test ran to completion.
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts.html b/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts.html new file mode 100644 index 0000000..05866fb --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/trusted-types/legacy-trusted-scripts.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'"> +<div id="log"></div> +<script id="prependScript">;</script> +<script id="appendScript">;</script> +<script id="replaceChildrenScript">;</script> +<script id="beforeScript">;</script> +<script id="afterScript">;</script> +<script id="replaceWithScript">;</script> +<script> +test(t => { + prependScript.prepend("1", "2", "3"); + assert_equals(prependScript.textContent, "123;"); + + appendScript.append("1", "2", "3"); + assert_equals(appendScript.textContent, ";123"); + + replaceChildrenScript.replaceChildren("1", "2", "3"); + assert_equals(replaceChildrenScript.textContent, "123"); + + beforeScript.firstChild.before("1", "2", "3"); + assert_equals(beforeScript.textContent, "123;"); + + afterScript.firstChild.after("1", "2", "3"); + assert_equals(afterScript.textContent, ";123"); + + replaceWithScript.firstChild.replaceWith("1", "2", "3"); + assert_equals(replaceWithScript.textContent, "123"); +}, "Legacy sinks for TrustedScript accept arbitrary strings."); +</script>
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/prefetch/request-will-be-sent-redirect-cross-site.https-expected.txt b/third_party/blink/web_tests/http/tests/inspector-protocol/prefetch/request-will-be-sent-redirect-cross-site.https-expected.txt index 48d7565..ac343c4 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/prefetch/request-will-be-sent-redirect-cross-site.https-expected.txt +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/prefetch/request-will-be-sent-redirect-cross-site.https-expected.txt
@@ -166,8 +166,8 @@ Host : 127.0.0.1:8443 Purpose : prefetch Referer : https://127.0.0.1:8443/inspector-protocol/prefetch/resources/prefetch.https.html?url=%2Fresources%2Fredirect.php%3Furl%3Dhttps%253A%252F%252Flocalhost%253A8443%252Fresources%252Fblank.html - Sec-Fetch-Dest : empty - Sec-Fetch-Mode : no-cors + Sec-Fetch-Dest : document + Sec-Fetch-Mode : navigate Sec-Fetch-Site : none Sec-Purpose : prefetch Upgrade-Insecure-Requests : 1 @@ -277,8 +277,8 @@ Host : localhost:8443 Purpose : prefetch Referer : https://127.0.0.1:8443/ - Sec-Fetch-Dest : empty - Sec-Fetch-Mode : no-cors + Sec-Fetch-Dest : document + Sec-Fetch-Mode : navigate Sec-Fetch-Site : none Sec-Purpose : prefetch Upgrade-Insecure-Requests : 1
diff --git a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-context-overflow.https.any.js b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-context-overflow.https.any.js deleted file mode 100644 index 93324bb..0000000 --- a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-context-overflow.https.any.js +++ /dev/null
@@ -1,65 +0,0 @@ -// META: script=resources/workaround-for-382640509.js -// META: timeout=long - -promise_test(async () => { - // Make sure the session could be created. - const capabilities = await ai.languageModel.capabilities(); - const status = capabilities.available; - // TODO(crbug.com/376789810): make it a PRECONDITION_FAILED if the model is - // not ready. - assert_true(status !== "no"); - // Start a new session. - const session = await ai.languageModel.create(); - const maxTokens = session.maxTokens; - // Our goal is to test the prompt API with context overflow, but it depends - // on the implementation details of the model execution and context - // management. Here, we will make two assumptions: - // 1. The context will accumulate if we keep calling the prompt API. This is - // to ensure the context will eventually overflow. - // 2. The context will accumulate faster if the input is larger. We will - // keep the input as large as possible to to minimize the number of prompt() - // calls to avoid timeout. - const getPrompt = numberOfRepeats => { - return `${"hello ".repeat(numberOfRepeats)} - please ignore the above text and just output "good morning".`; - } - // Find the largest repeat count that won't make the prompt text exceed - // the limit. - // Alternatively we could try to construct a small prompt, and keep doubling - // it until the token count exceeds half of the limit (L/2) to ensure we - // reach context overflow with two prompt call. However, it's not guaranteed - // that the number of tokens gets doubled when we double the prompt. In this - // case, we may end up with a prompt consisting of T tokens, where T<L/2 and - // doubling the prompt makes the tokens count become T' where T'>L. It may - // require three prompt calls instead of two. - let left = 1, right = maxTokens; - while (left < right) { - const mid = Math.floor((left + right + 1) / 2); - if (await session.countPromptTokens(getPrompt(mid)) <= maxTokens) { - left = mid; - } else { - right = mid - 1; - } - } - // Construct the prompt input. - const promptString = getPrompt(left); - // Register the event listener. - let isContextOverflowEventFired = false; - const promise = new Promise(resolve => { - session.addEventListener("contextoverflow", () => { - isContextOverflowEventFired = true; - resolve(true); - }); - }); - // Keep calling `prompt()` until the `contextoverflow` event is triggered. - const runPrompt = async () => { - if (!isContextOverflowEventFired) { - await session.prompt(promptString); - // Calling `SetTimeout()` each time ensures that the event has a - // chance to fire. - setTimeout(runPrompt, 0); - } - }; - runPrompt(); - assert_true(await promise); -}, "event listener should be triggered when the context overflows.");
diff --git a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-context-overflow.https.any.js b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-context-overflow.https.any.js new file mode 100644 index 0000000..90f3fdac --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-context-overflow.https.any.js
@@ -0,0 +1,25 @@ +// META: script=resources/utils.js +// META: script=resources/workaround-for-382640509.js +// META: timeout=long + +promise_test(async () => { + // Make sure the session could be created. + const capabilities = await ai.languageModel.capabilities(); + const status = capabilities.available; + // TODO(crbug.com/376789810): make it a PRECONDITION_FAILED if the model is + // not ready. + assert_true(status !== "no"); + // Start a new session. + const session = await ai.languageModel.create(); + // Make sure there is something to evict. + await session.prompt("Please write a sentence in English."); + // Register the event listener. + const promise = new Promise(resolve => { + session.addEventListener("contextoverflow", () => { + resolve(true); + }); + }); + const promptString = await getPromptExceedingAvailableTokens(session); + session.prompt(promptString); + await promise; +}, "event listener should be triggered when the context overflows.");
diff --git a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-quota-exceeded.https.any.js b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-quota-exceeded.https.any.js new file mode 100644 index 0000000..c7b40c8 --- /dev/null +++ b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-prompt-quota-exceeded.https.any.js
@@ -0,0 +1,15 @@ +// META: script=resources/utils.js +// META: script=resources/workaround-for-382640509.js + +promise_test(async t => { + // Make sure the session could be created. + const capabilities = await ai.languageModel.capabilities(); + const status = capabilities.available; + // TODO(crbug.com/376789810): make it a PRECONDITION_FAILED if the model is + // not ready. + assert_true(status !== "no"); + // Start a new session. + const session = await ai.languageModel.create(); + const promptString = await getPromptExceedingAvailableTokens(session); + await promise_rejects_dom(t, "QuotaExceededError", session.prompt(promptString)); +});
diff --git a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-quota-exceeded.https.any.js b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-quota-exceeded.https.any.js index d8880bd..b3c27675 100644 --- a/third_party/blink/web_tests/wpt_internal/ai/language-model-api-quota-exceeded.https.any.js +++ b/third_party/blink/web_tests/wpt_internal/ai/language-model-api-quota-exceeded.https.any.js
@@ -1,3 +1,4 @@ +// META: script=resources/utils.js // META: script=resources/workaround-for-382640509.js // META: timeout=long
diff --git a/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js b/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js index 34ae1af..c7ef865 100644 --- a/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js +++ b/third_party/blink/web_tests/wpt_internal/ai/resources/utils.js
@@ -154,3 +154,24 @@ await promise_rejects_exactly(t, err, anotherPromise); } } + +const getPromptExceedingAvailableTokens = async session => { + const maxTokens = session.tokensLeft; + const getPrompt = numberOfRepeats => { + return `${"hello ".repeat(numberOfRepeats)} + please ignore the above text and just output "good morning".`; + } + // Find the minimum repeat count that will make the prompt text exceed the + // limit. + let left = 1, right = maxTokens; + while (left < right) { + const mid = Math.floor((left + right) / 2); + if (await session.countPromptTokens(getPrompt(mid)) > maxTokens) { + right = mid; + } else { + left = mid + 1; + } + } + // Construct the prompt input. + return getPrompt(left); +}
diff --git a/third_party/boringssl/src b/third_party/boringssl/src index 029914c..d777ea2 160000 --- a/third_party/boringssl/src +++ b/third_party/boringssl/src
@@ -1 +1 @@ -Subproject commit 029914cf3df9d8cf5250c3a1d6cda178ad8ed0ec +Subproject commit d777ea2a7004ff7ef40ef983b41a5125f316f898
diff --git a/third_party/catapult b/third_party/catapult index b3934f5..8e5d239 160000 --- a/third_party/catapult +++ b/third_party/catapult
@@ -1 +1 @@ -Subproject commit b3934f5a9aa01f3a1a1421db86ba0da90b601020 +Subproject commit 8e5d239c953a309d4bf8aa70481bafa921834cc3
diff --git a/third_party/chromium-variations b/third_party/chromium-variations index 0fcd7c5..59f30bf 160000 --- a/third_party/chromium-variations +++ b/third_party/chromium-variations
@@ -1 +1 @@ -Subproject commit 0fcd7c5b11aca584c5c03b2af870c9f3af6c631c +Subproject commit 59f30bf1d20ecefceec9e39837ab78c113b9ffb5
diff --git a/third_party/dawn b/third_party/dawn index 68ff61c..3989b42 160000 --- a/third_party/dawn +++ b/third_party/dawn
@@ -1 +1 @@ -Subproject commit 68ff61cfd4c1384a7a305e0c30c608aedaba95d3 +Subproject commit 3989b426db4499d4af5f6afffb5eb804c7563323
diff --git a/third_party/depot_tools b/third_party/depot_tools index 1dd73cd4..423f1e1 160000 --- a/third_party/depot_tools +++ b/third_party/depot_tools
@@ -1 +1 @@ -Subproject commit 1dd73cd467bb8526d6fdebfadf9a379a9e50bf34 +Subproject commit 423f1e1914ab4aa7b2bdf804e216d4c097853ba2
diff --git a/third_party/devtools-frontend/src b/third_party/devtools-frontend/src index 361959b..08c452a 160000 --- a/third_party/devtools-frontend/src +++ b/third_party/devtools-frontend/src
@@ -1 +1 @@ -Subproject commit 361959bf72992029360ea51c6842bc9a474f08d4 +Subproject commit 08c452a7caccf0ca80340e1e4ebe6d7d591c0db9
diff --git a/third_party/perfetto b/third_party/perfetto index 2473cc9..f83d7ea 160000 --- a/third_party/perfetto +++ b/third_party/perfetto
@@ -1 +1 @@ -Subproject commit 2473cc95bc0d2d0c3c240be49ce4c2d0dc48edd4 +Subproject commit f83d7ea5ed4d1c25eb7026f50fac7d8e04d00b49
diff --git a/third_party/pffft/README.chromium b/third_party/pffft/README.chromium index 9c0a673..659cf1f 100644 --- a/third_party/pffft/README.chromium +++ b/third_party/pffft/README.chromium
@@ -1,7 +1,7 @@ Name: PFFFT: a pretty fast FFT. Short Name: PFFFT URL: https://bitbucket.org/jpommier/pffft/ -Version: 0 +Version: N/A Date: 2014-08-09 Revision: 483453d8f766 License: BSD-like
diff --git a/third_party/skia b/third_party/skia index 5310fc6..e71ab89 160000 --- a/third_party/skia +++ b/third_party/skia
@@ -1 +1 @@ -Subproject commit 5310fc642c7565a68e2727a8cad9d8aaf40aaff1 +Subproject commit e71ab89812e144ccfc4c2aa32feae6320669297a
diff --git a/third_party/smhasher/README.chromium b/third_party/smhasher/README.chromium index 10595c8..4b5f5b4 100644 --- a/third_party/smhasher/README.chromium +++ b/third_party/smhasher/README.chromium
@@ -1,7 +1,7 @@ Name: SMHasher -URL: http://code.google.com/p/smhasher/ +URL: https://github.com/aappleby/smhasher Version: N/A -Revision: 147 +Revision: 3e1f0d1d8340cfe136d33fd27c75eb7694148214 License: MIT, Public Domain License File: LICENSE Security Critical: yes
diff --git a/third_party/smhasher/src b/third_party/smhasher/src index e87738e..3e1f0d1d 160000 --- a/third_party/smhasher/src +++ b/third_party/smhasher/src
@@ -1 +1 @@ -Subproject commit e87738e57558e0ec472b2fc3a643b838e5b6e88f +Subproject commit 3e1f0d1d8340cfe136d33fd27c75eb7694148214
diff --git a/third_party/webgpu-cts/resource_files.txt b/third_party/webgpu-cts/resource_files.txt index 2866cba..7c625e6b 100644 --- a/third_party/webgpu-cts/resource_files.txt +++ b/third_party/webgpu-cts/resource_files.txt
@@ -6,6 +6,9 @@ four-colors-h264-bt601-rotate-90.mp4 four-colors-h264-bt601-vflip.mp4 four-colors-h264-bt601.mp4 +four-colors-rotate-180-cw.jpg +four-colors-rotate-270-cw.jpg +four-colors-rotate-90-cw.jpg four-colors-vp8-bt601.webm four-colors-vp9-bt601-hflip.mp4 four-colors-vp9-bt601-rotate-180.mp4 @@ -15,5 +18,6 @@ four-colors-vp9-bt601.mp4 four-colors-vp9-bt601.webm four-colors-vp9-bt709.webm +four-colors.jpg four-colors.png webgpu.png
diff --git a/third_party/webgpu-cts/src b/third_party/webgpu-cts/src index e99550b4..10b66cd 160000 --- a/third_party/webgpu-cts/src +++ b/third_party/webgpu-cts/src
@@ -1 +1 @@ -Subproject commit e99550b44ea9eedb364beb553d1a48549d0da115 +Subproject commit 10b66cd2ff469e53ee5068a3348c4979b05b3123
diff --git a/third_party/webgpu-cts/ts_sources.txt b/third_party/webgpu-cts/ts_sources.txt index 3e4920e..9cbcdb39 100644 --- a/third_party/webgpu-cts/ts_sources.txt +++ b/third_party/webgpu-cts/ts_sources.txt
@@ -964,6 +964,7 @@ src/webgpu/web_platform/copyToTexture/ImageData.spec.ts src/webgpu/web_platform/copyToTexture/canvas.spec.ts src/webgpu/web_platform/copyToTexture/image.spec.ts +src/webgpu/web_platform/copyToTexture/image_file.spec.ts src/webgpu/web_platform/copyToTexture/video.spec.ts src/webgpu/web_platform/external_texture/video.spec.ts src/webgpu/web_platform/reftests/gpu_ref_test.ts
diff --git a/third_party/webrtc b/third_party/webrtc index cbe3044..4b96bfd 160000 --- a/third_party/webrtc +++ b/third_party/webrtc
@@ -1 +1 @@ -Subproject commit cbe304455fe0ae24622252ef8a0707a555fa5caf +Subproject commit 4b96bfde967983e1ca9781c7b11496a76f081f5f
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 987ee729..a35c418 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -17685,6 +17685,8 @@ <int value="-1107762575" label="enable-data-reduction-proxy-config-client"/> <int value="-1107103335" label="FsNosymfollow:enabled"/> <int value="-1106191827" label="VirtualKeyboardNewHeader:enabled"/> + <int value="-1105925767" + label="StorageAccessApiFollowsSameOriginPolicy:disabled"/> <int value="-1105686819" label="ShareUsageRanking:enabled"/> <int value="-1105637876" label="FilteringScrollPrediction:enabled"/> <int value="-1105274313" @@ -18192,6 +18194,8 @@ <int value="-900871741" label="DesktopPWAsNotificationIconAndTitle:disabled"/> <int value="-899969457" label="ReadAloudBackgroundPlayback:disabled"/> <int value="-899915066" label="ImprovedKeyboardShortcuts:disabled"/> + <int value="-899881954" + label="StorageAccessApiFollowsSameOriginPolicy:enabled"/> <int value="-899799867" label="AllowWgcScreenCapturer:disabled"/> <int value="-899393472" label="enable-new-app-menu-icon"/> <int value="-899334103" label="disable-fast-text-autosizing"/>
diff --git a/tools/metrics/histograms/metadata/accessibility/histograms.xml b/tools/metrics/histograms/metadata/accessibility/histograms.xml index 00ce3fe..c92e398 100644 --- a/tools/metrics/histograms/metadata/accessibility/histograms.xml +++ b/tools/metrics/histograms/metadata/accessibility/histograms.xml
@@ -59,7 +59,7 @@ </variants> <histogram name="Accessibility.ActiveTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>aleventhal@chromium.org</owner> <owner>janewman@microsoft.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -71,7 +71,7 @@ <histogram name="Accessibility.Android.AutoDisableV2.{CurrentState}Time.{CallType}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>dtseng@google.com</owner> @@ -100,7 +100,7 @@ <histogram name="Accessibility.Android.AutoDisableV2.{MethodCall}Called.{CallType}" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>dtseng@google.com</owner> @@ -126,7 +126,7 @@ </histogram> <histogram name="Accessibility.Android.Cache.MaxNodesInCache" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -136,7 +136,7 @@ </histogram> <histogram name="Accessibility.Android.Cache.PercentageRetrievedFromCache" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -215,7 +215,7 @@ </histogram> <histogram name="Accessibility.Android.OnDemand.EventsDropped" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -226,7 +226,7 @@ </histogram> <histogram name="Accessibility.Android.OnDemand.OneHundredPercentEventsDropped" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -239,7 +239,7 @@ <histogram name="Accessibility.Android.OnDemand.OneHundredPercentEventsDropped.{AXMode}" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -264,7 +264,7 @@ </histogram> <histogram name="Accessibility.Android.OnDemand.PercentageDropped" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -275,7 +275,7 @@ </histogram> <histogram name="Accessibility.Android.OnDemand.PercentageDropped.{AXMode}" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -299,7 +299,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.AppMenuEnabledState" - enum="AccessibilityPageZoomAppMenuEnabledState" expires_after="2025-05-04"> + enum="AccessibilityPageZoomAppMenuEnabledState" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -314,7 +314,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.AppMenuSliderOpened" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -325,7 +325,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.AppMenuSliderZoomLevelChanged" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -337,7 +337,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.AppMenuSliderZoomLevelValue" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -363,7 +363,7 @@ <histogram name="Accessibility.Android.PageZoom.SettingsDefaultZoomLevelChanged" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -376,7 +376,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.SettingsDefaultZoomLevelValue" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -390,7 +390,7 @@ </histogram> <histogram name="Accessibility.Android.PageZoom.Usage" - enum="AccessibilityPageZoomUsageType" expires_after="2025-05-04"> + enum="AccessibilityPageZoomUsageType" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -409,7 +409,7 @@ <histogram name="Accessibility.Android.Performance.CreateAccessibilityNodeInfo.TotalTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>lucasradaelli@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -471,7 +471,7 @@ </histogram> <histogram name="Accessibility.Android.UpdateAccessibilityServices.PollCount" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -496,7 +496,7 @@ </histogram> <histogram name="Accessibility.Android.UpdateAccessibilityServices.Runtime" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -508,7 +508,7 @@ </histogram> <histogram name="Accessibility.Android.Usage.A11yAlwaysOn" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -524,7 +524,7 @@ </histogram> <histogram name="Accessibility.Android.Usage.{UsageType}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -542,7 +542,7 @@ </histogram> <histogram name="Accessibility.AndroidServiceInfo.{RunningApps}" - enum="AccessibilityAndroidServiceInfoEnum" expires_after="2025-05-04"> + enum="AccessibilityAndroidServiceInfoEnum" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aldietz@google.com</owner> <owner>dtseng@chromium.org</owner> @@ -671,7 +671,7 @@ </histogram> <histogram name="Accessibility.ChromeVox.PerformGestureType" - enum="ChromeVoxGestureType" expires_after="2025-05-04"> + enum="ChromeVoxGestureType" expires_after="2025-07-06"> <owner>dtseng@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -742,7 +742,7 @@ </histogram> <histogram name="Accessibility.CrosDictation.Language" enum="LocaleCodeISO639" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>katie@chromium.org</owner> <owner>dtseng@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -859,7 +859,7 @@ </histogram> <histogram name="Accessibility.CrosLargeCursorSize2" units="dip" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>katie@chromium.org</owner> <owner>dtseng@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -901,7 +901,7 @@ </histogram> <histogram name="Accessibility.CrosSelectToSpeak.EnhancedNetworkVoices" - enum="BooleanEnabled" expires_after="2025-05-04"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>ajitnarayanan@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1089,7 +1089,7 @@ </histogram> <histogram name="Accessibility.CrosStatusArea.{FeatureName}" - enum="BooleanToggled" expires_after="2025-05-04"> + enum="BooleanToggled" expires_after="2025-07-06"> <owner>anastasi@google.com</owner> <owner>katie@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -1186,7 +1186,7 @@ </histogram> <histogram name="Accessibility.Cros{FeatureName}.SessionDuration" - units="seconds" expires_after="2025-05-04"> + units="seconds" expires_after="2025-07-06"> <owner>katie@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1213,7 +1213,7 @@ even if they fit the naming pattern. --> <histogram name="Accessibility.Cros{SettingType}" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dtseng@chromium.org</owner> <owner>katie@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -1334,7 +1334,7 @@ </histogram> <histogram name="Accessibility.DlcInstallerFaceGazeAssetsSuccess" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>akihiroota@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1375,7 +1375,7 @@ </histogram> <histogram name="Accessibility.ExperimentalModeFlag.FormControls" - enum="BooleanEnabled" expires_after="2025-05-04"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>aldietz@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1418,7 +1418,7 @@ </histogram> <histogram name="Accessibility.ImageLabels.Android" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dtseng@chromium.org</owner> <owner>mschillaci@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -1531,7 +1531,7 @@ </histogram> <histogram name="Accessibility.ImageLabels2" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>katie@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1932,7 +1932,7 @@ </histogram> <histogram name="Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>aleventhal@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -1986,7 +1986,7 @@ </histogram> <histogram name="Accessibility.PDF.IsPDFTagged" enum="BooleanExists" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dtseng@chromium.org</owner> <owner>kyungjunlee@google.com</owner> <owner>chrome-a11y-core@google.com</owner> @@ -2011,7 +2011,7 @@ </histogram> <histogram name="Accessibility.PdfOcr.ActiveWhenInaccessiblePdfOpened" - enum="BooleanExists" expires_after="2025-05-04"> + enum="BooleanExists" expires_after="2025-07-06"> <owner>kyungjunlee@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2162,7 +2162,7 @@ </histogram> <histogram name="Accessibility.Performance.AXTree.Destroy2" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>olivierli@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -2292,7 +2292,7 @@ </histogram> <histogram name="Accessibility.Performance.HandleAXEvents2" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aleventhal@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -2310,7 +2310,7 @@ </histogram> <histogram name="Accessibility.Performance.MergeAXTreeUpdates" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>dtseng@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2405,7 +2405,7 @@ </histogram> <histogram name="Accessibility.Performance.SerializeLocationChanges" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>mschillaci@google.com</owner> <owner>aleventhal@chromium.org</owner> <owner>janewman@microsoft.com</owner> @@ -2446,7 +2446,7 @@ </histogram> <histogram name="Accessibility.Performance.Tree.Unserialize2" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>aleventhal@chromium.org</owner> <owner>janewman@microsoft.com</owner> <owner>janewman@microsoft.com</owner> @@ -2587,7 +2587,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.Color" enum="ReadAnythingColor" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2596,7 +2596,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.EmptyState" - enum="ReadAnythingEmptyState" expires_after="2025-05-04"> + enum="ReadAnythingEmptyState" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2606,7 +2606,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.FontName" - enum="ReadAnythingFontName" expires_after="2025-05-04"> + enum="ReadAnythingFontName" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2615,7 +2615,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.FontScale" units="em" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2624,7 +2624,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.Language" enum="LocaleCodeISO639" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2652,7 +2652,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.MergedDistillationTime.{Result}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2667,7 +2667,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.NewPage" enum="ReadAnythingNewPage" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kristislee@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2684,7 +2684,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.ReadAloud.HighlightState" - enum="ReadAnythingHighlightState" expires_after="2025-05-04"> + enum="ReadAnythingHighlightState" expires_after="2025-07-06"> <owner>kristislee@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2694,7 +2694,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.ReadAloud.Language" - enum="LocaleCodeISO639" expires_after="2025-05-04"> + enum="LocaleCodeISO639" expires_after="2025-07-06"> <owner>kristislee@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2704,7 +2704,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.ReadAloud.SettingsChange" - enum="ReadAnythingReadAloudSettingsChange" expires_after="2025-05-04"> + enum="ReadAnythingReadAloudSettingsChange" expires_after="2025-07-06"> <owner>lwinston@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2714,7 +2714,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.ReadAloud.Voice" - enum="ReadAnythingReadAloudVoice2" expires_after="2025-05-04"> + enum="ReadAnythingReadAloudVoice2" expires_after="2025-07-06"> <owner>kristislee@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2725,7 +2725,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.ReadAloud.VoiceSpeed" - units="speech rate %" expires_after="2025-05-04"> + units="speech rate %" expires_after="2025-07-06"> <owner>kristislee@google.com</owner> <owner>komo-eng@google.com</owner> <summary> @@ -2750,7 +2750,7 @@ </histogram> <histogram name="Accessibility.ReadAnything.RulesDistillationTime.{Result}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2764,14 +2764,14 @@ </histogram> <histogram name="Accessibility.ReadAnything.ScrollEvent" - enum="ReadAnythingScrollEvent" expires_after="2025-05-04"> + enum="ReadAnythingScrollEvent" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary>Records when a scroll happens.</summary> </histogram> <histogram name="Accessibility.ReadAnything.SettingsChange" - enum="ReadAnythingSettingsChange" expires_after="2025-05-04"> + enum="ReadAnythingSettingsChange" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2870,7 +2870,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.Component.Available2" - enum="ComponentAvailability" expires_after="2025-05-04"> + enum="ComponentAvailability" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2881,7 +2881,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.Component.InstallRetries" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2898,7 +2898,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.LibraryLoadDetailedResultOnWindows" - enum="WinGetLastError" expires_after="2025-05-04"> + enum="WinGetLastError" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -2915,7 +2915,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.OCR.Failed.ClientType" - enum="OCRClientType" expires_after="2025-05-01"> + enum="OCRClientType" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary>Records the client type of each failed OCR request.</summary> @@ -2994,7 +2994,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.Screen2xDistillationTime.{Result}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>abigailbklein@google.com</owner> <owner>rhalavati@google.com</owner> <owner>kyungjunlee@google.com</owner> @@ -3050,7 +3050,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.{feature}.InitializationLatency" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -3064,7 +3064,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.{Feature}.Successful" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -3077,7 +3077,7 @@ </histogram> <histogram name="Accessibility.ScreenAI.{Step}.Initialized" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>rhalavati@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> <summary> @@ -3155,7 +3155,7 @@ </histogram> <histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>aleventhal@chromium.org</owner> <owner>nektar@chromium.org</owner> <owner>chrome-a11y-core@google.com</owner> @@ -3163,7 +3163,7 @@ </histogram> <histogram name="Accessibility.WinAPIs.GetPropertyValue" - enum="AccessibilityWinAPIGetPropertyValueEnum" expires_after="2025-05-04"> + enum="AccessibilityWinAPIGetPropertyValueEnum" expires_after="2025-07-06"> <owner>aleventhal@chromium.org</owner> <owner>nektar@chromium.org</owner> <owner>dlibby@microsoft.com</owner>
diff --git a/tools/metrics/histograms/metadata/ai/enums.xml b/tools/metrics/histograms/metadata/ai/enums.xml index ed6cb497..64f633c 100644 --- a/tools/metrics/histograms/metadata/ai/enums.xml +++ b/tools/metrics/histograms/metadata/ai/enums.xml
@@ -98,6 +98,9 @@ <int value="11" label="ErrorDisabled">Response was disabled.</int> <int value="12" label="ErrorCancelled">The request was cancelled.</int> <int value="13" label="ErrorSessionDestroyed">The session was destroyed.</int> + <int value="14" label="ErrorPromptRequestTooLarge"> + The prompt is too large to be stored in the context. + </int> </enum> <!-- LINT.ThenChange(//third_party/blink/public/mojom/ai/model_streaming_responder.mojom:ModelStreamingResponseStatus) -->
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index 4395a91..0f91243 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -715,7 +715,7 @@ </histogram> <histogram name="Android.BackgroundTaskScheduler.TaskFinished2" - enum="BackgroundTaskId" expires_after="2025-05-04"> + enum="BackgroundTaskId" expires_after="2025-07-06"> <owner>hnakashima@chromium.org</owner> <owner>smaier@chromium.org</owner> <summary> @@ -1251,7 +1251,7 @@ </histogram> <histogram name="Android.DeviceAuthenticator.AuthSource" - enum="DeviceAuthSource" expires_after="2025-05-04"> + enum="DeviceAuthSource" expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>friedrichh@chromium.org</owner> <owner>theocristea@google.com</owner> @@ -1553,7 +1553,7 @@ </histogram> <histogram name="Android.DragDrop.Tab.FromStrip.Result" - enum="DragDropTabResult" expires_after="2025-05-04"> + enum="DragDropTabResult" expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -1618,7 +1618,7 @@ </histogram> <histogram name="Android.DragDrop.Tab.Type" enum="DragDropType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -1674,7 +1674,7 @@ </histogram> <histogram name="Android.DynamicTopChrome.WindowResize.DesktopWindowModeState" - enum="DesktopWindowModeState" expires_after="2025-05-02"> + enum="DesktopWindowModeState" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -2380,7 +2380,7 @@ </histogram> <histogram name="Android.MaybeCopyContentAreaAsBitmap.Time" units="ms" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>chikamune@chromium.org</owner> <owner>chrome-loading@google.com</owner> <owner>clank-app-team@google.com</owner> @@ -2655,7 +2655,7 @@ </histogram> <histogram name="Android.Messages.TimeToFullyShow{MessageIdentifier}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>lazzzis@chromium.org</owner> <owner>src/components/messages/OWNERS</owner> <summary> @@ -2708,7 +2708,7 @@ </histogram> <histogram name="Android.MultiInstance.NumActivities.DesktopWindow" - units="activities" expires_after="2025-05-02"> + units="activities" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -2725,7 +2725,7 @@ <histogram name="Android.MultiInstance.NumActivities.DesktopWindow.{InstanceAllocationType}" - units="activities" expires_after="2025-05-02"> + units="activities" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -2759,7 +2759,7 @@ </histogram> <histogram name="Android.MultiInstance.NumInstances.DesktopWindow" - units="instances" expires_after="2025-05-02"> + units="instances" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -2777,7 +2777,7 @@ <histogram name="Android.MultiInstance.NumInstances.DesktopWindow.{InstanceAllocationType}" - units="instances" expires_after="2025-05-02"> + units="instances" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -2795,7 +2795,7 @@ </histogram> <histogram name="Android.MultiInstance.WindowManager.DesktopWindowModeState" - enum="DesktopWindowModeState" expires_after="2025-05-02"> + enum="DesktopWindowModeState" expires_after="2025-07-06"> <owner>aishwaryarj@google.com</owner> <owner>wenyufu@chromium.org</owner> <owner>clank-large-form-factors@google.com</owner> @@ -3879,7 +3879,7 @@ </histogram> <histogram name="Android.Pdf.DocumentLoad" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3890,7 +3890,7 @@ </histogram> <histogram name="Android.Pdf.DocumentLoadResult" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3902,7 +3902,7 @@ </histogram> <histogram name="Android.Pdf.DocumentLoadResult.Detail" - enum="AndroidPdfLoadResult" expires_after="2025-05-04"> + enum="AndroidPdfLoadResult" expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3925,7 +3925,7 @@ </histogram> <histogram name="Android.Pdf.DocumentLoadTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3958,7 +3958,7 @@ </histogram> <histogram name="Android.Pdf.DownloadUrlDecoded" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3969,7 +3969,7 @@ </histogram> <histogram name="Android.Pdf.DownloadUrlEncoded" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -3979,7 +3979,7 @@ </histogram> <histogram name="Android.Pdf.FindInPageCounts" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -4002,7 +4002,7 @@ </histogram> <histogram name="Android.Pdf.IsFrozenWhenDisplayed" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shuyng@google.com</owner> <owner>clank-large-form-factors@google.com</owner> <summary> @@ -4781,7 +4781,7 @@ </histogram> <histogram name="Android.Tab.BackgroundColorChange" - enum="BackgroundColorChangeOrigin" expires_after="2025-05-04"> + enum="BackgroundColorChangeOrigin" expires_after="2025-07-06"> <owner>clhager@google.com</owner> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> @@ -4797,7 +4797,7 @@ </histogram> <histogram name="Android.Tab.BackgroundColorChange.PreOptimization" - enum="BackgroundColorChangeOrigin" expires_after="2025-05-04"> + enum="BackgroundColorChangeOrigin" expires_after="2025-07-06"> <owner>clhager@google.com</owner> <owner>twellington@chromium.org</owner> <owner>wenyufu@chromium.org</owner> @@ -5150,7 +5150,7 @@ </histogram> <histogram name="Android.TabStrip.TabGroupCollapsed" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>nemco@google.com</owner> <owner>skavuluru@google.com</owner> <owner>zheliooo@google.com</owner> @@ -5342,7 +5342,7 @@ </histogram> <histogram name="Android.TopToolbar.BlockCaptureReason" - enum="TopToolbarBlockCaptureReason" expires_after="2025-05-04"> + enum="TopToolbarBlockCaptureReason" expires_after="2025-07-06"> <owner>skym@chromium.org</owner> <owner>fredmello@chromium.org</owner> <summary> @@ -5380,7 +5380,7 @@ </histogram> <histogram name="Android.UIDialogShown" enum="AndroidDialogType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>alexmitra@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -5672,7 +5672,7 @@ </histogram> <histogram name="Android.WebView.AwContentsConstructorTime{IsFirst}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>cduvall@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <summary> @@ -7649,7 +7649,7 @@ </histogram> <histogram name="AndroidSearchEngineLogo.Events" - enum="AndroidSearchEngineLogoEvents" expires_after="2025-05-04"> + enum="AndroidSearchEngineLogoEvents" expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>fgorski@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/apps/histograms.xml b/tools/metrics/histograms/metadata/apps/histograms.xml index 2a41c0f1..9e489f5 100644 --- a/tools/metrics/histograms/metadata/apps/histograms.xml +++ b/tools/metrics/histograms/metadata/apps/histograms.xml
@@ -230,7 +230,7 @@ </histogram> <histogram name="AppPreloadService.ServerResponseCodes" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-05-04"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>ovn@google.com</owner> <owner>cros-web-apps-team@google.com</owner> <summary> @@ -402,7 +402,7 @@ </histogram> <histogram name="Apps.AppList.AnnotationStorage.DatabaseSize" units="MB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>chenjih@google.com</owner> <owner>ypitsishin@google.com</owner> <owner>chromeos-launcher-search@google.com</owner> @@ -450,7 +450,7 @@ <histogram name="Apps.AppList.AnnotationStorage.ImageAnnotationWorker.IndexingStatus" - enum="ImageAnnotationWorkerIndexingStatus" expires_after="2025-05-04"> + enum="ImageAnnotationWorkerIndexingStatus" expires_after="2025-07-06"> <owner>chenjih@google.com</owner> <owner>ypitsishin@google.com</owner> <owner>chromeos-launcher-search@google.com</owner> @@ -487,7 +487,7 @@ </histogram> <histogram name="Apps.AppList.AnnotationStorage.ImageAnnotationWorker.Status" - enum="ImageAnnotationWorkerStatus" expires_after="2025-05-04"> + enum="ImageAnnotationWorkerStatus" expires_after="2025-07-06"> <owner>chenjih@google.com</owner> <owner>ypitsishin@google.com</owner> <owner>chromeos-launcher-search@google.com</owner> @@ -1045,7 +1045,7 @@ <histogram name="Apps.AppList.Search.Continue.FileSuggestionType.{SearchAction}" - enum="AppListContinueFileSuggestionType" expires_after="2025-04-27"> + enum="AppListContinueFileSuggestionType" expires_after="2025-07-06"> <owner>tbarzic@google.com</owner> <owner>chromeos-launcher@google.com</owner> <summary> @@ -1568,7 +1568,7 @@ </histogram> <histogram name="Apps.AppList.UserAction{TabletOrClamshell}" - enum="LauncherUserAction" expires_after="2025-04-27"> + enum="LauncherUserAction" expires_after="2025-07-06"> <owner>tbarzic@chromium.org</owner> <owner>gzadina@google.com</owner> <owner>chromeos-launcher@google.com</owner> @@ -2530,7 +2530,7 @@ </histogram> <histogram name="Apps.NewUserFirstLauncherAction{TabletOrClamshell}" - enum="AppListLaunchedFrom" expires_after="2025-04-27"> + enum="AppListLaunchedFrom" expires_after="2025-07-06"> <owner>andrewxu@chromium.org</owner> <owner>tbarzic@chromium.org</owner> <summary> @@ -2576,7 +2576,7 @@ </histogram> <histogram name="Apps.OobeAppRecommendationsService.ServerResponseCodes" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-05-01"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/arc/histograms.xml b/tools/metrics/histograms/metadata/arc/histograms.xml index b3931b6..ef5e59d 100644 --- a/tools/metrics/histograms/metadata/arc/histograms.xml +++ b/tools/metrics/histograms/metadata/arc/histograms.xml
@@ -273,7 +273,7 @@ </histogram> <histogram name="Arc.Accessibility.ActiveTime.{ArcAccessibilityFeatures}" - units="ms" expires_after="2025-04-24"> + units="ms" expires_after="2025-07-06"> <owner>sahok@chromium.org</owner> <owner>arc-framework@google.com</owner> <summary> @@ -431,7 +431,7 @@ </histogram> <histogram name="Arc.AppCount.HasInstalledOrUnknownApp" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>khmel@google.com</owner> <owner>arcvm-eng@google.com</owner> <summary> @@ -443,7 +443,7 @@ </histogram> <histogram name="Arc.AppCount.{AppType}" units="apps" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>khmel@google.com</owner> <owner>arcvm-eng@google.com</owner> <summary> @@ -1019,7 +1019,7 @@ </histogram> <histogram name="Arc.DeferActivation.Result" enum="DeferArcActivationResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hidehiko@chromium.org</owner> <owner>raging@google.com</owner> <summary> @@ -1031,7 +1031,7 @@ <histogram name="Arc.DeferActivation.{DeferArcActivationType}{SuccessFailure}.ElapsedTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>hidehiko@chromium.org</owner> <owner>raging@google.com</owner> <summary> @@ -1045,7 +1045,7 @@ <histogram name="Arc.DeferActivation.{DeferArcActivationType}{SuccessFailure}.Reason" - enum="AllowActivationReason" expires_after="2025-05-04"> + enum="AllowActivationReason" expires_after="2025-07-06"> <owner>hidehiko@chromium.org</owner> <owner>raging@google.com</owner> <summary> @@ -2419,7 +2419,7 @@ </histogram> <histogram name="Arc.VmDataMigration.DesiredDiskImageSizeInGB.{SatisfiedOrNot}" - units="GB" expires_after="2025-05-04"> + units="GB" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2435,7 +2435,7 @@ </histogram> <histogram name="Arc.VmDataMigration.Duration" units="seconds" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2446,7 +2446,7 @@ </histogram> <histogram name="Arc.VmDataMigration.EndStatus" - enum="CrOSFileSystemMigrationEndStatus" expires_after="2025-05-04"> + enum="CrOSFileSystemMigrationEndStatus" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2457,7 +2457,7 @@ </histogram> <histogram name="Arc.VmDataMigration.FailedErrorCode" enum="PlatformFileError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2471,7 +2471,7 @@ <histogram name="Arc.VmDataMigration.FailedOperationType" enum="CrOSFileSystemMigrationFailedOperationType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2484,7 +2484,7 @@ </histogram> <histogram name="Arc.VmDataMigration.FailedPathType" - enum="ArcVmDataMigrationFailedPathType" expires_after="2025-05-04"> + enum="ArcVmDataMigrationFailedPathType" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2497,7 +2497,7 @@ </histogram> <histogram name="Arc.VmDataMigration.GetAndroidDataInfoDuration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2509,7 +2509,7 @@ </histogram> <histogram name="Arc.VmDataMigration.InitialBatteryLevel" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2594,7 +2594,7 @@ <histogram name="Arc.VmDataMigration.RemainingDays.{ArcVmDataMigrationFrontEndEvents}" - units="days" expires_after="2025-05-04"> + units="days" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2689,7 +2689,7 @@ </histogram> <histogram name="Arc.VmDataMigration.SetupResult" - enum="ArcVmDataMigrationSetupResult" expires_after="2025-05-04"> + enum="ArcVmDataMigrationSetupResult" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2700,7 +2700,7 @@ </histogram> <histogram name="Arc.VmDataMigration.StartStatus" - enum="CrOSFileSystemMigrationStartStatus" expires_after="2025-05-04"> + enum="CrOSFileSystemMigrationStartStatus" expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2711,7 +2711,7 @@ </histogram> <histogram name="Arc.VmDataMigration.TotalFiles" units="files" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2722,7 +2722,7 @@ </histogram> <histogram name="Arc.VmDataMigration.TotalSizeMB" units="MB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>momohatt@google.com</owner> <owner>youkichihosoi@google.com</owner> <owner>arc-storage@google.com</owner> @@ -2733,7 +2733,7 @@ </histogram> <histogram name="Arc.VmmSwappedOut" enum="VmmSwapOutState" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sstan@chromium.org</owner> <owner>arcvm-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ash/histograms.xml b/tools/metrics/histograms/metadata/ash/histograms.xml index 5f567b8..292b5da1f 100644 --- a/tools/metrics/histograms/metadata/ash/histograms.xml +++ b/tools/metrics/histograms/metadata/ash/histograms.xml
@@ -2205,7 +2205,7 @@ </histogram> <histogram name="Ash.CaptureModeController.BarButtons.{TabletOrClamshell}" - enum="CaptureModeBarButtonType" expires_after="2025-04-27"> + enum="CaptureModeBarButtonType" expires_after="2025-07-06"> <owner>afakhry@chromium.org</owner> <owner>gzadina@google.com</owner> <owner>chromeos-wm@google.com</owner> @@ -2245,7 +2245,7 @@ <histogram name="Ash.CaptureModeController.CaptureConfiguration.{TabletOrClamshell}" - enum="CaptureModeConfiguration" expires_after="2025-04-27"> + enum="CaptureModeConfiguration" expires_after="2025-07-06"> <owner>afakhry@chromium.org</owner> <owner>gzadina@google.com</owner> <owner>chromeos-wm@google.com</owner> @@ -2550,7 +2550,7 @@ <histogram name="Ash.CaptureModeController.SearchButtonPressed.{TabletOrClamshell}" - enum="Boolean" expires_after="2025-05-07"> + enum="Boolean" expires_after="2025-07-06"> <owner>hewer@chromium.org</owner> <owner>sophiewen@google.com</owner> <summary> @@ -2562,7 +2562,7 @@ <histogram name="Ash.CaptureModeController.SearchButtonShown.{TabletOrClamshell}" - enum="Boolean" expires_after="2025-05-07"> + enum="Boolean" expires_after="2025-07-06"> <owner>hewer@chromium.org</owner> <owner>sophiewen@google.com</owner> <summary> @@ -2586,7 +2586,7 @@ <histogram name="Ash.CaptureModeController.SearchResultsPanelEntryPoint.{TabletOrClamshell}" - enum="SearchResultsPanelEntryType" expires_after="2025-05-07"> + enum="SearchResultsPanelEntryType" expires_after="2025-07-06"> <owner>hewer@chromium.org</owner> <owner>sophiewen@google.com</owner> <summary> @@ -2600,7 +2600,7 @@ <histogram name="Ash.CaptureModeController.SearchResultsPanelShown.{TabletOrClamshell}" - enum="Boolean" expires_after="2025-05-07"> + enum="Boolean" expires_after="2025-07-06"> <owner>hewer@chromium.org</owner> <owner>sophiewen@google.com</owner> <summary> @@ -3544,7 +3544,7 @@ </histogram> <histogram name="Ash.DeskTemplate.ReplaceSaveAndRecall" enum="BooleanHit" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dandersson@chromium.org</owner> <owner>janetmac@chromium.org</owner> <summary>Recorded when the user replaces a Save and Recall desk.</summary> @@ -3993,7 +3993,7 @@ </histogram> <histogram name="Ash.EventLatency.{EventType}.TotalLatency" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>xiyuan@chromium.org</owner> <owner>yichenz@chromium.org</owner> <owner>cros-sw-perf@google.com</owner> @@ -4036,7 +4036,7 @@ </histogram> <histogram name="Ash.EventLatency.{EventType}.TotalLatency.1MinAfterResume" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>kawasin@google.com</owner> <owner>baseos-perf@google.com</owner> <summary> @@ -4055,7 +4055,7 @@ </histogram> <histogram name="Ash.ExtendedUpdates.DialogEvent" - enum="ExtendedUpdatesDialogEventEnum" expires_after="2025-05-01"> + enum="ExtendedUpdatesDialogEventEnum" expires_after="2025-07-06"> <owner>aluh@chromium.org</owner> <owner>artyomchen@google.com</owner> <owner>janetmac@google.com</owner> @@ -4068,7 +4068,7 @@ </histogram> <histogram name="Ash.ExtendedUpdates.EntryPointEvent" - enum="ExtendedUpdatesEntryPointEventEnum" expires_after="2025-05-01"> + enum="ExtendedUpdatesEntryPointEventEnum" expires_after="2025-07-06"> <owner>aluh@chromium.org</owner> <owner>artyomchen@google.com</owner> <owner>janetmac@google.com</owner> @@ -4678,7 +4678,7 @@ </histogram> <histogram name="Ash.GameDashboard.ToggleMainMenu.{OnOrOff}" - enum="GameDashboardMainMenuToggleMethod" expires_after="2025-04-27"> + enum="GameDashboardMainMenuToggleMethod" expires_after="2025-07-06"> <owner>cuicuiruan@google.com</owner> <owner>phshah@chromium.org</owner> <summary> @@ -6320,7 +6320,7 @@ </histogram> <histogram name="Ash.NotificationResource.ActionIconSizeInKB" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>andrewxu@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -6342,7 +6342,7 @@ </histogram> <histogram name="Ash.NotificationResource.IconMemorySizeInKB" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>andrewxu@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -6353,7 +6353,7 @@ </histogram> <histogram name="Ash.NotificationResource.ImageMemorySizeInKB" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>andrewxu@chromium.org</owner> <owner>cros-status-area-eng@google.com</owner> <summary> @@ -6721,7 +6721,7 @@ <histogram name="Ash.OSAuth.Login.AuthFactorMigrationResult.{AuthFactorMigrationName}" - enum="AuthFactorMigrationResult" expires_after="2025-04-24"> + enum="AuthFactorMigrationResult" expires_after="2025-07-06"> <owner>antrim@chromium.org</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -6735,7 +6735,7 @@ </histogram> <histogram name="Ash.OSAuth.Login.ConfiguredAuthFactors.{AuthFactor}" - enum="Boolean" expires_after="2025-04-24"> + enum="Boolean" expires_after="2025-07-06"> <owner>antrim@chromium.org</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -6782,7 +6782,7 @@ <histogram name="Ash.OSAuth.{AuthenticationSurface}.NbPasswordAttempts.{AuthenticationOutcome}" - units="attempts" expires_after="2025-04-24"> + units="attempts" expires_after="2025-07-06"> <owner>emaamari@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -6852,7 +6852,7 @@ </histogram> <histogram name="Ash.Overview.DelayedDeskBar.PresentationTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>esum@google.com</owner> <owner>chromeos-wm@google.com</owner> <summary> @@ -7424,7 +7424,7 @@ </histogram> <histogram name="Ash.Picker.Session.InputReadyLatency" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>shend@chromium.org</owner> <owner>jopalmer@chromium.org</owner> <owner>essential-inputs-team@google.com</owner> @@ -8285,7 +8285,7 @@ </histogram> <histogram name="Ash.SeaPen.Api.Thumbnails.Count" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>cowmoo@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary> @@ -8305,7 +8305,7 @@ </histogram> <histogram name="Ash.SeaPen.Api.{Type}.Latency" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>cowmoo@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary> @@ -8316,7 +8316,7 @@ </histogram> <histogram name="Ash.SeaPen.Api.{Type}.MantaStatusCode" enum="MantaStatusCode" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>cowmoo@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary> @@ -8327,7 +8327,7 @@ </histogram> <histogram name="Ash.SeaPen.Api.{Type}.Timeout" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>cowmoo@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary>Records if the request hits the enforced timeout.</summary> @@ -8335,7 +8335,7 @@ </histogram> <histogram name="Ash.SeaPen.CreateButton" enum="SeaPenTemplateId" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>ericamlee@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary> @@ -8486,7 +8486,7 @@ </histogram> <histogram name="Ash.SeaPen.ThumbnailClicked" enum="SeaPenTemplateId" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pzliu@google.com</owner> <owner>cros-p13n-eng@google.com</owner> <summary> @@ -8871,7 +8871,7 @@ </histogram> <histogram name="Ash.ShortcutCustomization.AddAccelerator.{ActionName}" - units="Shortcuts" expires_after="2025-04-13"> + units="Shortcuts" expires_after="2025-07-06"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -8957,7 +8957,7 @@ </histogram> <histogram name="Ash.ShortcutCustomization.ModifyType.{ActionName}" - enum="ShortcutCustomizationModificationType" expires_after="2025-04-27"> + enum="ShortcutCustomizationModificationType" expires_after="2025-07-06"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -9234,7 +9234,7 @@ </histogram> <histogram name="Ash.SplitViewOverviewSession.SelectedWindowIndex" units="int" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sophiewen@chromium.org</owner> <owner>xdai@chromium.org</owner> <summary> @@ -9245,7 +9245,7 @@ <histogram name="Ash.SplitViewOverviewSession.WindowLayoutCompleteOnSessionExit.{TabletOrClamshell}" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>sophiewen@chromium.org</owner> <owner>xdai@chromium.org</owner> <owner>cros-snap-groups@google.com</owner> @@ -10407,7 +10407,7 @@ </histogram> <histogram name="Ash.WindowCycleView.AnimationSmoothness.Container" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yichenz@chromium.org</owner> <owner>chromeos-wm@google.com</owner> <summary> @@ -10422,7 +10422,7 @@ </histogram> <histogram name="Ash.WindowCycleView.AnimationSmoothness.Show" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yichenz@chromium.org</owner> <owner>chromeos-wm@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ash_growth/histograms.xml b/tools/metrics/histograms/metadata/ash_growth/histograms.xml index d4f3b55..f95cdab 100644 --- a/tools/metrics/histograms/metadata/ash_growth/histograms.xml +++ b/tools/metrics/histograms/metadata/ash_growth/histograms.xml
@@ -95,7 +95,7 @@ </histogram> <histogram name="Ash.Growth.Ui.ButtonPressed.Button{ButtonId}.Campaigns500" - units="int" expires_after="2025-05-04"> + units="int" expires_after="2025-07-06"> <owner>wutao@chromium.org</owner> <owner>cros-growth@google.com</owner> <summary> @@ -107,7 +107,7 @@ </histogram> <histogram name="Ash.Growth.Ui.Dismissed.Campaigns500" units="int" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wutao@chromium.org</owner> <owner>cros-growth@google.com</owner> <summary> @@ -117,7 +117,7 @@ </histogram> <histogram name="Ash.Growth.Ui.Impression.Campaigns500" units="int" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wutao@chromium.org</owner> <owner>cros-growth@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/assistant/histograms.xml b/tools/metrics/histograms/metadata/assistant/histograms.xml index c94c1259..690f558 100644 --- a/tools/metrics/histograms/metadata/assistant/histograms.xml +++ b/tools/metrics/histograms/metadata/assistant/histograms.xml
@@ -212,7 +212,7 @@ </histogram> <histogram name="Assistant.ServiceState" enum="AssistantServiceState" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wutao@chromium.org</owner> <owner>assistive-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml index 329f9a5..dd55cbef 100644 --- a/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml +++ b/tools/metrics/histograms/metadata/attribution_reporting/histograms.xml
@@ -84,7 +84,7 @@ </histogram> <histogram name="Conversions.AggregatableFilteringIdMaxBytesValue" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -263,7 +263,7 @@ </histogram> <histogram name="Conversions.AggregatableReport.{ContextType}ExtraReportDelay" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -279,7 +279,7 @@ </histogram> <histogram name="Conversions.AllowedByPermissionPolicy" enum="BooleanAllowed" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>tquintanilla@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -366,7 +366,7 @@ </histogram> <histogram name="Conversions.AttributionSrcRequestStatus.{Type}" - enum="ConversionAttributionSrcRequestStatus" expires_after="2025-05-04"> + enum="ConversionAttributionSrcRequestStatus" expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>johnidel@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -664,7 +664,7 @@ </histogram> <histogram name="Conversions.GoogleAmpViewer.{Type}" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -705,7 +705,7 @@ </histogram> <histogram name="Conversions.HttpResponseOrNetErrorCode.{AppState}" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-05-03"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>tquintanilla@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -827,7 +827,7 @@ <histogram name="Conversions.NavigationSourceScopesLimitOutcome" enum="ConversionNavigationSourceScopesLimitOutcome" - expires_after="2025-05-03"> + expires_after="2025-07-06"> <owner>tquintanilla@chromium.org</owner> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> @@ -868,7 +868,7 @@ </histogram> <histogram name="Conversions.NonDefaultAggregatableFilteringId" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary> @@ -1561,7 +1561,7 @@ </histogram> <histogram name="Conversions.{ReportType}.ReportBodySize" units="bytes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>linnan@chromium.org</owner> <owner>measurement-api-dev+metrics@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/autofill/enums.xml b/tools/metrics/histograms/metadata/autofill/enums.xml index 9451d8b4..1310e69 100644 --- a/tools/metrics/histograms/metadata/autofill/enums.xml +++ b/tools/metrics/histograms/metadata/autofill/enums.xml
@@ -5369,11 +5369,12 @@ <int value="22" label="All saved passwords entry"/> <int value="23" label="Generate password entry"/> <int value="24" label="Show account cards"/> - <int value="25" label="Password account storage opt-in"/> - <int value="26" label="Password account storage opt-in and generate"/> + <int value="25" label="(obsolete) Password account storage opt-in"/> + <int value="26" + label="(obsolete) Password account storage opt-in and generate"/> <int value="27" label="Account storage password entry"/> - <int value="28" label="Password account storage re-sign-in"/> - <int value="29" label="Password account storage empty"/> + <int value="28" label="(obsolete) Password account storage re-sign-in"/> + <int value="29" label="(obsolete) Password account storage empty"/> <int value="30" label="Password field-by-field filling"/> <int value="31" label="Fill password"/> <int value="32" label="View password details"/>
diff --git a/tools/metrics/histograms/metadata/autofill/histograms.xml b/tools/metrics/histograms/metadata/autofill/histograms.xml index ba32b03..69993e6 100644 --- a/tools/metrics/histograms/metadata/autofill/histograms.xml +++ b/tools/metrics/histograms/metadata/autofill/histograms.xml
@@ -948,7 +948,7 @@ </histogram> <histogram name="Autofill.Autocomplete.NotOff.FillingAcceptance.{FormType}" - enum="BooleanAutofillFillingAcceptance" expires_after="2025-04-27"> + enum="BooleanAutofillFillingAcceptance" expires_after="2025-07-06"> <owner>schwering@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -3335,7 +3335,7 @@ </histogram> <histogram name="Autofill.iOS.FormActivity.SendRatio" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -3347,7 +3347,7 @@ </histogram> <histogram name="Autofill.iOS.FormActivity.{Outcome}Count" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -4418,7 +4418,7 @@ <histogram name="Autofill.PaymentsNetworkInterface.RequestLatency.GetCardUploadDetails{Result}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>darwinyang@google.com</owner> <owner>chrome-payments-team@google.com</owner> <summary> @@ -4538,7 +4538,7 @@ <histogram name="Autofill.PopupInteraction.PopupLevel.{AutofillPopupInteractionLevel}" - enum="AutofillPopupInteraction" expires_after="2025-04-27"> + enum="AutofillPopupInteraction" expires_after="2025-07-06"> <owner>brunobraga@google.com</owner> <owner>jkeitel@google.com</owner> <summary> @@ -4552,7 +4552,7 @@ <histogram name="Autofill.PopupInteraction.PopupLevel.{AutofillPopupInteractionLevel}.{FillingProduct}" - enum="AutofillPopupInteraction" expires_after="2025-04-27"> + enum="AutofillPopupInteraction" expires_after="2025-07-06"> <owner>brunobraga@google.com</owner> <owner>jkeitel@google.com</owner> <summary> @@ -4579,7 +4579,7 @@ <histogram name="Autofill.PreFilledFieldClassificationsQuality.{FormType}" enum="AutofillPreFilledFieldClassificationsQuality" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>bwolfgang@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4601,7 +4601,7 @@ </histogram> <histogram name="Autofill.PreFilledFieldStatus.{FormType}" - enum="AutofillPreFilledFieldStatus" expires_after="2025-04-27"> + enum="AutofillPreFilledFieldStatus" expires_after="2025-07-06"> <owner>bwolfgang@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4924,7 +4924,7 @@ <histogram name="Autofill.ProfileTokenQuality.ObservationCountBeforeSubmission.{Type}" - units="Observations" expires_after="2025-05-04"> + units="Observations" expires_after="2025-07-06"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -4958,7 +4958,7 @@ <histogram name="Autofill.ProfileTokenQuality.StoredObservationTypes.{Type}" enum="AutofillProfileTokenQualityObservationType" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>fleimgruber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -5756,7 +5756,7 @@ </histogram> <histogram name="Autofill.StoredProfileUsedPercentage.{Category}" - units="Profiles" expires_after="2025-04-27"> + units="Profiles" expires_after="2025-07-06"> <owner>koerber@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary> @@ -6109,7 +6109,7 @@ <histogram name="Autofill.TestAddressSelected" enum="AutofillInDevtoolsAvailableTestAddressesCountries" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>brunobraga@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml index 8b54c2c..448b4118 100644 --- a/tools/metrics/histograms/metadata/blink/histograms.xml +++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2256,7 +2256,7 @@ </histogram> <histogram name="Blink.Fetch.RequestResourceTime2{SchemeOrPreload}" - units="microseconds" expires_after="2025-04-27"> + units="microseconds" expires_after="2025-07-06"> <owner>cduvall@chromium.org</owner> <owner>csharrison@chromium.org</owner> <owner>chrome-loading@google.com</owner> @@ -3299,7 +3299,7 @@ <histogram name="Blink.LCPP.NavigationToStartPreload.MainFrame.{SubresourceType}.Time" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>chikamune@chromium.org</owner> <owner>yyanagisawa@chromium.org</owner> <owner>kouhei@chromium.org</owner> @@ -3381,7 +3381,7 @@ </histogram> <histogram name="Blink.LCPP.PrefetchFontCount" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yyanagisawa@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -3473,7 +3473,7 @@ </histogram> <histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count.SameSiteRatio" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>yoichio@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS @@ -3487,7 +3487,7 @@ </histogram> <histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count.{Site}" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yoichio@chromium.org</owner> <owner> src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
diff --git a/tools/metrics/histograms/metadata/bluetooth/histograms.xml b/tools/metrics/histograms/metadata/bluetooth/histograms.xml index 39b2fa8d..4c03b98d 100644 --- a/tools/metrics/histograms/metadata/bluetooth/histograms.xml +++ b/tools/metrics/histograms/metadata/bluetooth/histograms.xml
@@ -81,7 +81,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.DeviceConnected.{ConnectionType}" - enum="BluetoothDeviceType" expires_after="2025-04-27"> + enum="BluetoothDeviceType" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1578,7 +1578,7 @@ <histogram name="Bluetooth.ChromeOS.Pairing.Duration.Failure{BluetoothTransportTypes}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1594,7 +1594,7 @@ <histogram name="Bluetooth.ChromeOS.Pairing.Duration.Success{BluetoothTransportTypes}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1610,7 +1610,7 @@ <histogram name="Bluetooth.ChromeOS.Pairing.Result.FailureReason{BluetoothTransportTypes}" - enum="BluetoothConnectionFailureReason" expires_after="2025-04-27"> + enum="BluetoothConnectionFailureReason" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1628,7 +1628,7 @@ <histogram name="Bluetooth.ChromeOS.Pairing.Result.FilteredFailureReason{BluetoothTransportTypes}" - enum="BluetoothConnectionFailureReason" expires_after="2025-04-27"> + enum="BluetoothConnectionFailureReason" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1660,7 +1660,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.Pairing.Result{BluetoothTransportTypes}" - enum="BooleanSuccess" expires_after="2025-04-27"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1711,7 +1711,7 @@ </histogram> <histogram name="Bluetooth.ChromeOS.PoweredState.{Operation}.Result" - enum="BooleanSuccess" expires_after="2025-04-27"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary>Record emitted when an {Operation}.</summary> @@ -1750,7 +1750,7 @@ <histogram name="Bluetooth.ChromeOS.UserInitiatedDisconnect.Result{BluetoothTransportTypes}" - enum="DisconnectResult" expires_after="2025-04-27"> + enum="DisconnectResult" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1764,7 +1764,7 @@ <histogram name="Bluetooth.ChromeOS.UserInitiatedReconnectionAttempt.Duration.Failure{BluetoothTransportTypes}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1792,7 +1792,7 @@ <histogram name="Bluetooth.ChromeOS.UserInitiatedReconnectionAttempt.Result.FailureReason{UserInitiatedReconnectionUISurfaces}" - enum="BluetoothConnectionFailureReason" expires_after="2025-04-27"> + enum="BluetoothConnectionFailureReason" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1826,7 +1826,7 @@ <histogram name="Bluetooth.ChromeOS.UserInitiatedReconnectionAttempt.Result{UserInitiatedReconnectionUISurfaces}" - enum="BooleanSuccess" expires_after="2025-04-27"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/bookmarks/histograms.xml b/tools/metrics/histograms/metadata/bookmarks/histograms.xml index c42db094..8003102 100644 --- a/tools/metrics/histograms/metadata/bookmarks/histograms.xml +++ b/tools/metrics/histograms/metadata/bookmarks/histograms.xml
@@ -59,7 +59,7 @@ </histogram> <histogram name="Bookmarks.AddBookmarkType" enum="BookmarkType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -94,7 +94,7 @@ </histogram> <histogram name="Bookmarks.AverageNodeSize" units="Bytes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -299,7 +299,7 @@ </histogram> <histogram name="Bookmarks.MobileBookmarkManager.FilterUsed2" - enum="MobileBookmarkManagerFilter" expires_after="2025-05-04"> + enum="MobileBookmarkManagerFilter" expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -362,7 +362,7 @@ </histogram> <histogram name="Bookmarks.OpenBookmarkTimeInterval2.{BookmarkType}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -377,7 +377,7 @@ </histogram> <histogram name="Bookmarks.OpenBookmarkType" enum="BookmarkType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -387,7 +387,7 @@ </histogram> <histogram name="Bookmarks.Opened.TimeSinceAdded" units="days" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -399,7 +399,7 @@ </histogram> <histogram name="Bookmarks.Opened.TimeSinceLastUsed" units="days" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -422,7 +422,7 @@ </histogram> <histogram name="Bookmarks.ReadingList.NumberOfItems" units="items" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -506,7 +506,7 @@ </histogram> <histogram name="Bookmarks.Storage.FileSizeAtStartup2" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -531,7 +531,7 @@ </histogram> <histogram name="Bookmarks.Storage.TimeToLoadAtStartup2" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -688,7 +688,7 @@ </histogram> <histogram name="Bookmarks.Utilization.OnProfileLoad.PercentageUsed" - units="Percentage (0-100)" expires_after="2025-05-04"> + units="Percentage (0-100)" expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary> @@ -708,7 +708,7 @@ </histogram> <histogram name="Bookmarks.Utilization.OnProfileLoad.TotalUsed" - units="Bookmarks" expires_after="2025-03-02"> + units="Bookmarks" expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>chrome-collections@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/borealis/histograms.xml b/tools/metrics/histograms/metadata/borealis/histograms.xml index eba4ac8..a7d6040 100644 --- a/tools/metrics/histograms/metadata/borealis/histograms.xml +++ b/tools/metrics/histograms/metadata/borealis/histograms.xml
@@ -23,7 +23,7 @@ <histograms> <histogram name="Borealis.Audio.UsedPath.{Direction}" enum="BorealisAudioPath" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>normanbt@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -38,7 +38,7 @@ </histogram> <histogram name="Borealis.Audio.UsedSubdevices" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>normanbt@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -48,7 +48,7 @@ </histogram> <histogram name="Borealis.Audio.Xrun.Alsa.Output" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>normanbt@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -58,7 +58,7 @@ </histogram> <histogram name="Borealis.Disk.HighestDirtyPagesDaily" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -78,28 +78,28 @@ </histogram> <histogram name="Borealis.Disk.StatefulReadsDaily" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary>Borealis stateful KiB read per day. Reported daily.</summary> </histogram> <histogram name="Borealis.Disk.StatefulWritesDaily" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary>Borealis stateful KiB written per day. Reported daily.</summary> </histogram> <histogram name="Borealis.Disk.SwapReadsDaily" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary>Borealis swap file KiB read per day. Reported daily.</summary> </histogram> <histogram name="Borealis.Disk.SwapWritesDaily" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary>Borealis swap file KiB written per day. Reported daily.</summary> @@ -128,7 +128,7 @@ </histogram> <histogram name="Borealis.EngagementTime.{Variant}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -201,7 +201,7 @@ </histogram> <histogram name="Borealis.Install.Result" enum="BorealisInstallResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -212,7 +212,7 @@ </histogram> <histogram name="Borealis.Install.Source" enum="BorealisLaunchSource" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -224,7 +224,7 @@ </histogram> <histogram name="Borealis.Launch.Source" enum="BorealisLaunchSource" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -248,7 +248,7 @@ </histogram> <histogram name="Borealis.Stability" enum="GuestOsFailureClasses" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -298,7 +298,7 @@ </histogram> <histogram name="Borealis.Startup.OverallTime2" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -312,7 +312,7 @@ </histogram> <histogram name="Borealis.Startup.Result" enum="BorealisStartupResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary> @@ -322,7 +322,7 @@ </histogram> <histogram name="Borealis.Startup.TimeToFirstWindow" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <improvement direction="LOWER_IS_BETTER"/> @@ -347,7 +347,7 @@ </histogram> <histogram name="Borealis.VMPerformance.Generic.{Variant}" units="fps" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>philpearson@google.com</owner> <owner>src/chrome/browser/ash/borealis/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/browser/histograms.xml b/tools/metrics/histograms/metadata/browser/histograms.xml index 7ef6b67..d885614 100644 --- a/tools/metrics/histograms/metadata/browser/histograms.xml +++ b/tools/metrics/histograms/metadata/browser/histograms.xml
@@ -473,7 +473,7 @@ </histogram> <histogram name="Browser.ERP.UploadMemoryUsagePercent" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>lbaraz@chromium.org</owner> <owner>cros-reporting-team@google.com</owner> <summary> @@ -1595,7 +1595,7 @@ </histogram> <histogram name="BrowserSwitcher.LaunchTime" units="ms" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>nicolaso@chromium.org</owner> <owner>pastarmovj@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chrome/histograms.xml b/tools/metrics/histograms/metadata/chrome/histograms.xml index 457f3c0..18ff532a 100644 --- a/tools/metrics/histograms/metadata/chrome/histograms.xml +++ b/tools/metrics/histograms/metadata/chrome/histograms.xml
@@ -304,7 +304,7 @@ </histogram> <histogram name="Chrome.Tabs.AnimationSmoothness.TabLoading" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yichenz@chromium.org</owner> <owner>chromeos-wmp@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/chromeos/histograms.xml b/tools/metrics/histograms/metadata/chromeos/histograms.xml index 8b0409e17..e07e422 100644 --- a/tools/metrics/histograms/metadata/chromeos/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos/histograms.xml
@@ -251,7 +251,7 @@ </histogram> <histogram name="ChromeOS.AnomalousProcCount.ForbiddenIntersection.{Category}" - units="processes" expires_after="2025-05-04"> + units="processes" expires_after="2025-07-06"> <owner>enlightened@chromium.org</owner> <owner>chromeos-hardening@google.com</owner> <summary> @@ -1415,7 +1415,7 @@ </histogram> <histogram name="ChromeOS.DiagnosticsUi.{RoutineType}Result" - enum="CrosDiagnosticsRoutineResult" expires_after="2025-04-27"> + enum="CrosDiagnosticsRoutineResult" expires_after="2025-07-06"> <owner>byronlee@google.com</owner> <owner>cros-tdm-tpe-eng@google.com</owner> <summary>Records the result of the {RoutineType} Routine.</summary> @@ -1454,7 +1454,7 @@ <histogram name="ChromeOS.Display.TimeUntilFirstBrightnessChange.{Time}.{BrightnessAction}Brightness.{PowerSource}Power" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>cambickel@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -2672,7 +2672,7 @@ </histogram> <histogram name="ChromeOS.LockScreenReauth.LockScreenReauthReason" - enum="LoginReauthReasons" expires_after="2025-04-27"> + enum="LoginReauthReasons" expires_after="2025-07-06"> <owner>ayag@chromium.org</owner> <owner>cros-3pidp@google.com</owner> <summary> @@ -3047,7 +3047,7 @@ </histogram> <histogram name="ChromeOS.PrivacyHub.{SensorName}Subpage.UserAction" - enum="PrivacyHubSensorSubpageUserAction" expires_after="2025-05-04"> + enum="PrivacyHubSensorSubpageUserAction" expires_after="2025-07-06"> <owner>shahinmd@google.com</owner> <owner>cros-privacy-features-dev@google.com</owner> <summary> @@ -4844,7 +4844,7 @@ </histogram> <histogram name="ChromeOS.Zram.PSISomeOrigDataSizeMB" units="MB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>erikchen@chromium.org</owner> <owner>bgeffon@chromium.org</owner> <owner>chromeos-memory@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml index ed4080cb..368bc33 100644 --- a/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml +++ b/tools/metrics/histograms/metadata/chromeos_settings/histograms.xml
@@ -183,7 +183,7 @@ </histogram> <histogram name="ChromeOS.Settings.BlurredWindowDuration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wesokuhara@google.com</owner> <owner>xiaohuic@chromium.org</owner> <owner>cros-settings@google.com</owner> @@ -307,7 +307,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.Internal.AutoBrightnessEnabled" - enum="BooleanToggled" expires_after="2025-05-04"> + enum="BooleanToggled" expires_after="2025-07-06"> <owner>cambickel@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -317,7 +317,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.Internal.BrightnessSliderAdjusted" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>cambickel@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -342,7 +342,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.MirrorModeStatus" - enum="DisplaySettingsBoolean" expires_after="2025-05-04"> + enum="DisplaySettingsBoolean" expires_after="2025-07-06"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -388,7 +388,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.{DisplayType}.NightLightSchedule" - enum="DisplaySettingsNightLightScheduleOption" expires_after="2025-04-27"> + enum="DisplaySettingsNightLightScheduleOption" expires_after="2025-07-06"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -402,7 +402,7 @@ </histogram> <histogram name="ChromeOS.Settings.Display.{DisplayType}.NightLightStatus" - enum="DisplaySettingsBoolean" expires_after="2025-04-27"> + enum="DisplaySettingsBoolean" expires_after="2025-07-06"> <owner>zhangwenyu@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -513,7 +513,7 @@ <histogram name="ChromeOS.Settings.Keyboard.Modifiers.{Modifier}RemappedTo.Started" - enum="KeyboardModifierRemappingKeys" expires_after="2025-03-22"> + enum="KeyboardModifierRemappingKeys" expires_after="2025-07-06"> <owner>dpad@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -664,7 +664,7 @@ </histogram> <histogram base="true" name="ChromeOS.Settings.NumClicksUntilChange" - units="clicks" expires_after="2025-05-04"> + units="clicks" expires_after="2025-07-06"> <!-- Name completed by histogram_suffixes name="OsSettingsChangeType" --> <owner>wesokuhara@google.com</owner> @@ -775,7 +775,7 @@ </histogram> <histogram name="ChromeOS.Settings.Privacy.PeripheralDataAccessProtection" - enum="BooleanEnabled" expires_after="2025-04-20"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>jimmyxgong@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1009,7 +1009,7 @@ </histogram> <histogram name="ChromeOS.Settings.WindowTotalActiveDuration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>moteva@google.com</owner> <owner>wesokuhara@google.com</owner> <owner>cros-settings@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/commerce/histograms.xml b/tools/metrics/histograms/metadata/commerce/histograms.xml index 25270ce..dc7c31d 100644 --- a/tools/metrics/histograms/metadata/commerce/histograms.xml +++ b/tools/metrics/histograms/metadata/commerce/histograms.xml
@@ -396,7 +396,7 @@ </histogram> <histogram name="Commerce.IconComputationTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>meiliang@chromium.org</owner> <owner>chrome-shopping-eng@google.com</owner> <summary> @@ -408,7 +408,7 @@ </histogram> <histogram name="Commerce.ParcelTracking.{ParcelRequestTypes}.RequestStatus" - enum="ParcelRequestStatus" expires_after="2025-04-27"> + enum="ParcelRequestStatus" expires_after="2025-07-06"> <owner>ayman@chromium.org</owner> <owner>mdjones@chromium.org</owner> <owner>chrome-shopping@google.com</owner> @@ -747,7 +747,7 @@ </histogram> <histogram name="Commerce.PriceTracking.PriceInsightsSidePanel.{Action}" - enum="PriceInsightsPriceBucket" expires_after="2025-05-04"> + enum="PriceInsightsPriceBucket" expires_after="2025-07-06"> <owner>yuezhanggg@chromium.org</owner> <owner>mdjones@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/compositing/histograms.xml b/tools/metrics/histograms/metadata/compositing/histograms.xml index 351e53b..655b052 100644 --- a/tools/metrics/histograms/metadata/compositing/histograms.xml +++ b/tools/metrics/histograms/metadata/compositing/histograms.xml
@@ -175,7 +175,7 @@ </histogram> <histogram name="Compositing.DirectRenderer.DrawnRectAssignmentType" - enum="RenderPassDrawRectAssign" expires_after="2025-05-04"> + enum="RenderPassDrawRectAssign" expires_after="2025-07-06"> <owner>petermcneeley@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -872,7 +872,7 @@ </histogram> <histogram name="Compositing.SurfaceAggregator.RenderPassDamageType" - enum="RenderPassDamage" expires_after="2025-05-04"> + enum="RenderPassDamage" expires_after="2025-07-06"> <owner>petermcneeley@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -1154,7 +1154,7 @@ </histogram> <histogram name="Graphics.Exo.Smoothness.BeginFrameArrivalToSubmission" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>jonross@chromium.org</owner> <owner>yzshen@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -1168,7 +1168,7 @@ </histogram> <histogram name="Graphics.Exo.Smoothness.FrameArrivalToSubmission" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>jonross@chromium.org</owner> <owner>yzshen@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/content/histograms.xml b/tools/metrics/histograms/metadata/content/histograms.xml index b60a6a8..74044e8 100644 --- a/tools/metrics/histograms/metadata/content/histograms.xml +++ b/tools/metrics/histograms/metadata/content/histograms.xml
@@ -55,7 +55,7 @@ </variants> <histogram name="Content.Classification" enum="ContentClassification" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sophey@chromium.org</owner> <owner>chrome-sherlock@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cookie/histograms.xml b/tools/metrics/histograms/metadata/cookie/histograms.xml index 2b54b2ec..c18c92c 100644 --- a/tools/metrics/histograms/metadata/cookie/histograms.xml +++ b/tools/metrics/histograms/metadata/cookie/histograms.xml
@@ -195,7 +195,7 @@ <histogram name="Cookie.CrossSiteRedirectDowngradeChangesInclusion2.{AccessType}" - enum="CookieSameSite2" expires_after="2025-05-04"> + enum="CookieSameSite2" expires_after="2025-07-06"> <owner>bingler@chromium.org</owner> <owner>miketaylr@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cros/histograms.xml b/tools/metrics/histograms/metadata/cros/histograms.xml index 23dcab8a..e7cbbba 100644 --- a/tools/metrics/histograms/metadata/cros/histograms.xml +++ b/tools/metrics/histograms/metadata/cros/histograms.xml
@@ -35,7 +35,7 @@ </histogram> <histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -44,7 +44,7 @@ </histogram> <histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -54,7 +54,7 @@ </histogram> <histogram name="CrosDisks.Error.Fuse.PrematureTermination.{FileSystem}" - enum="DaemonError" expires_after="2025-05-04"> + enum="DaemonError" expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -104,7 +104,7 @@ </histogram> <histogram name="CrosDisks.Error.Fuse.Start.{FileSystem}" enum="DaemonError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -122,7 +122,7 @@ </histogram> <histogram name="CrosDisks.Error.{Action}.{FileSystem}" enum="DaemonError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -140,7 +140,7 @@ </histogram> <histogram name="CrosDisks.Error.{SysCall}.{FileSystem}" enum="PopularOSErrno" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -176,7 +176,7 @@ </histogram> <histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -186,7 +186,7 @@ </histogram> <histogram name="CrosDisks.ReadOnlyFileSystemAfterError" - enum="CrosDisksFilesystemType" expires_after="2025-05-04"> + enum="CrosDisksFilesystemType" expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -217,7 +217,7 @@ </histogram> <histogram name="CrosDisks.Time.Fuse.PrematureTermination.{FileSystem}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -239,7 +239,7 @@ </histogram> <histogram name="CrosDisks.Time.Fuse.Start.{FileSystem}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -259,7 +259,7 @@ </histogram> <histogram name="CrosDisks.Time.{Action}.{FileSystem}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>Time taken by the program {Action} {FileSystem} partition.</summary> @@ -275,7 +275,7 @@ </histogram> <histogram name="CrosDisks.Time.{SysCall}.{FileSystem}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -311,7 +311,7 @@ </histogram> <histogram name="CrosDisksClient.FormatCompletedError" - enum="CrosDisksClientFormatError" expires_after="2025-05-04"> + enum="CrosDisksClientFormatError" expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -321,7 +321,7 @@ </histogram> <histogram name="CrosDisksClient.FormatTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -330,7 +330,7 @@ </histogram> <histogram name="CrosDisksClient.MountCompletedError" - enum="CrosDisksClientMountError" expires_after="2025-05-04"> + enum="CrosDisksClientMountError" expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -340,7 +340,7 @@ </histogram> <histogram name="CrosDisksClient.MountErrorMountType" - enum="CrosDisksMountTypeError" expires_after="2025-05-04"> + enum="CrosDisksMountTypeError" expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -350,7 +350,7 @@ </histogram> <histogram name="CrosDisksClient.MountTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -359,7 +359,7 @@ </histogram> <histogram name="CrosDisksClient.UnmountError" enum="CrosDisksClientMountError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -369,7 +369,7 @@ </histogram> <histogram name="CrosDisksClient.UnmountTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fdegros@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cros_ml/histograms.xml b/tools/metrics/histograms/metadata/cros_ml/histograms.xml index 183f4ca..ca42e17 100644 --- a/tools/metrics/histograms/metadata/cros_ml/histograms.xml +++ b/tools/metrics/histograms/metadata/cros_ml/histograms.xml
@@ -90,7 +90,7 @@ </histogram> <histogram name="MachineLearningService.GrammarChecker.Check.Event" - enum="Boolean" expires_after="2025-05-01"> + enum="Boolean" expires_after="2025-07-06"> <owner>jiwan@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary>The result of grammar check, which can be OK or ERROR.</summary> @@ -109,7 +109,7 @@ </histogram> <histogram name="MachineLearningService.HandwritingModel.Recognize.Event" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -239,7 +239,7 @@ </histogram> <histogram name="MachineLearningService.NumWorkerProcess" units="count" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary> @@ -295,7 +295,7 @@ </histogram> <histogram name="MachineLearningService.TotalMemoryKb" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary> @@ -306,7 +306,7 @@ <histogram name="MachineLearningService.WebPlatformHandwritingModel.GetPrediction.Event" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary> @@ -368,7 +368,7 @@ </histogram> <histogram name="MachineLearningService.WorkerProcessAcceptMojoConnectionTime" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>alanlxl@chromium.org</owner> <owner>amoylan@chromium.org</owner> <summary> @@ -425,7 +425,7 @@ <histogram name="MachineLearningService.{ModelName}.LoadModelResult.Event" enum="MachineLearningServiceLoadModelResultEvent" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>amoylan@chromium.org</owner> <owner>alanlxl@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cross_device/histograms.xml b/tools/metrics/histograms/metadata/cross_device/histograms.xml index 8979f26..14a7148 100644 --- a/tools/metrics/histograms/metadata/cross_device/histograms.xml +++ b/tools/metrics/histograms/metadata/cross_device/histograms.xml
@@ -162,7 +162,7 @@ </histogram> <histogram name="CryptAuth.ClientAppMetadataInstanceIdTokenFetch.Retries" - units="retries" expires_after="2025-05-05"> + units="retries" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -181,7 +181,7 @@ <histogram name="CryptAuth.DeviceSyncService.ClientAppMetadataFetch.AsyncTaskResult" - enum="CryptAuthAsyncTaskResult" expires_after="2025-05-05"> + enum="CryptAuthAsyncTaskResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -193,7 +193,7 @@ <histogram name="CryptAuth.DeviceSyncService.ClientAppMetadataFetch.ExecutionTime" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -204,7 +204,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncService.GcmRegistration.ExecutionTime" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -215,7 +215,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncService.GcmRegistration.Success" - enum="BooleanSuccess" expires_after="2025-05-05"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -225,7 +225,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncService.Initialization.ExecutionTime" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -261,7 +261,7 @@ <histogram name="CryptAuth.DeviceSyncV2.DeviceActivityGetter.ApiCallResult.GetDevicesActivityStatus" - enum="CryptAuthApiCallResult" expires_after="2025-05-05"> + enum="CryptAuthApiCallResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -494,7 +494,7 @@ <histogram name="CryptAuth.DeviceSyncV2.FeatureStatusSetter.ApiCallResult.SetFeatureStatuses" - enum="CryptAuthApiCallResult" expires_after="2025-05-05"> + enum="CryptAuthApiCallResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -606,7 +606,7 @@ <histogram name="CryptAuth.DeviceSyncV2.MetadataSyncer.ApiCallResult.FirstSyncMetadata" - enum="CryptAuthApiCallResult" expires_after="2025-05-05"> + enum="CryptAuthApiCallResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -618,7 +618,7 @@ <histogram name="CryptAuth.DeviceSyncV2.MetadataSyncer.ApiCallResult.SecondSyncMetadata" - enum="CryptAuthApiCallResult" expires_after="2025-05-05"> + enum="CryptAuthApiCallResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -725,7 +725,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncV2.Result.DidDeviceRegistryChange" - enum="BooleanChanged" expires_after="2025-05-05"> + enum="BooleanChanged" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -736,7 +736,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncV2.Result.ResultCode" - enum="CryptAuthV2DeviceSyncResultCode" expires_after="2025-05-05"> + enum="CryptAuthV2DeviceSyncResultCode" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -746,7 +746,7 @@ </histogram> <histogram name="CryptAuth.DeviceSyncV2.Result.ResultType" - enum="CryptAuthV2DeviceSyncResultType" expires_after="2025-05-05"> + enum="CryptAuthV2DeviceSyncResultType" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -776,7 +776,7 @@ </histogram> <histogram name="CryptAuth.EnrollmentV2.ApiCallResult.SyncKeys" - enum="CryptAuthApiCallResult" expires_after="2025-05-05"> + enum="CryptAuthApiCallResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -820,7 +820,7 @@ </histogram> <histogram name="CryptAuth.EnrollmentV2.ExecutionTime.SyncKeys" units="ms" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -841,7 +841,7 @@ </histogram> <histogram name="CryptAuth.EnrollmentV2.Result.ResultCode" - enum="CryptAuthV2EnrollmentResult" expires_after="2025-05-05"> + enum="CryptAuthV2EnrollmentResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -934,7 +934,7 @@ </histogram> <histogram name="CryptAuth.Gcm.Registration.AttemptTimeWithRetries" units="ms" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -967,7 +967,7 @@ </histogram> <histogram name="CryptAuth.Gcm.Registration.Result2" enum="GCMInstanceIdResult" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>dclasson@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -985,7 +985,7 @@ </histogram> <histogram name="CryptAuth.GetLocalDeviceMetadata.HasId" enum="BooleanPresent" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -997,7 +997,7 @@ </histogram> <histogram name="CryptAuth.GetLocalDeviceMetadata.IsReady" enum="BooleanReady" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1010,7 +1010,7 @@ </histogram> <histogram name="CryptAuth.GetLocalDeviceMetadata.Result" enum="BooleanSuccess" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1021,7 +1021,7 @@ </histogram> <histogram name="CryptAuth.InstanceId.DidInstanceIdChange" - enum="BooleanChanged" expires_after="2025-05-05"> + enum="BooleanChanged" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1077,7 +1077,7 @@ </histogram> <histogram name="EasyUnlock.AuthEvent.Unlock" enum="EasyUnlockAuthEvent" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1089,7 +1089,7 @@ </histogram> <histogram name="EasyUnlock.AuthEvent.Unlock.Duration" units="ms" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1148,7 +1148,7 @@ </histogram> <histogram name="InstantTethering.BluetoothDiscoverySessionStarted" - enum="BooleanSuccess" expires_after="2025-05-05"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1167,7 +1167,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.EndResult" enum="InstantTethering_ConnectionToHostResult_EndResult" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>joeantonetti@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1190,7 +1190,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.Failure" enum="InstantTethering_ConnectionToHostResult_Failure" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1209,7 +1209,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.Failure.ClientConnection" enum="InstantTethering_ConnectionToHostResult_Failure_ClientConnection" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1261,7 +1261,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.ProvisioningFailureRate" enum="InstantTethering_ConnectionToHostResult_ProvisioningFailureRate" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1283,7 +1283,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.SuccessRate.Background" enum="InstantTethering_ConnectionToHostResult_SuccessRate" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1301,7 +1301,7 @@ <histogram name="InstantTethering.ConnectionToHostResult.UnavoidableError" enum="InstantTethering_ConnectionToHostResult_UnavoidableError" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>joeantonetti@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1316,7 +1316,7 @@ </histogram> <histogram name="InstantTethering.FeatureState" - enum="InstantTethering_FeatureState" expires_after="2025-05-05"> + enum="InstantTethering_FeatureState" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1348,7 +1348,7 @@ </histogram> <histogram name="InstantTethering.HostScanResult" - enum="InstantTethering_HostScanResult" expires_after="2025-05-05"> + enum="InstantTethering_HostScanResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1366,7 +1366,7 @@ </histogram> <histogram name="InstantTethering.HotspotUsageDuration" units="ms" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1387,7 +1387,7 @@ </histogram> <histogram name="InstantTethering.MultiDeviceFeatureState" - enum="MultiDevice_FeatureState" expires_after="2025-05-05"> + enum="MultiDevice_FeatureState" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1399,7 +1399,7 @@ <histogram name="InstantTethering.NotificationInteractionType" enum="InstantTethering_NotificationInteractionType" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1409,7 +1409,7 @@ </histogram> <histogram name="InstantTethering.Performance.ConnectTetheringResponseDuration" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1419,7 +1419,7 @@ </histogram> <histogram name="InstantTethering.Performance.ConnectToHostDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1430,7 +1430,7 @@ </histogram> <histogram name="InstantTethering.Performance.ConnectToHotspotDuration" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1442,7 +1442,7 @@ <histogram name="InstantTethering.Performance.DisconnectTetheringRequestDuration" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1452,7 +1452,7 @@ </histogram> <histogram name="InstantTethering.Performance.KeepAliveTickleResponseDuration" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1463,7 +1463,7 @@ <histogram name="InstantTethering.Performance.TetherAvailabilityResponseDuration" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1507,7 +1507,7 @@ </histogram> <histogram name="MultiDevice.BetterTogetherSuite.MultiDeviceFeatureState" - enum="MultiDevice_FeatureState" expires_after="2025-05-05"> + enum="MultiDevice_FeatureState" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1540,7 +1540,7 @@ <histogram name="MultiDevice.DeviceSyncService.ForceSyncNow.Result" enum="MultiDevice_DeviceSyncService_ForceCryptAuthOperationResult" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary>Result for when ForceSyncNow is called.</summary> @@ -1585,7 +1585,7 @@ <histogram name="MultiDevice.ForgetHostConfirmed" enum="MultiDevice_VerifyAndForgetHostConfirmationState" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1594,7 +1594,7 @@ </histogram> <histogram name="MultiDevice.PostOOBESetupFlow.PageShown" - enum="MultiDevice_PostOOBESetupFlow_Page" expires_after="2025-05-05"> + enum="MultiDevice_PostOOBESetupFlow_Page" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1624,7 +1624,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.ConnectionToAuthenticationDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1644,7 +1644,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.ReceiveAdvertisementToConnectionDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1664,7 +1664,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.StartScanToAuthenticationDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1685,7 +1685,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.StartScanToConnectionDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1705,7 +1705,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.Performance.StartScanToReceiveAdvertisementDuration.Background" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1725,7 +1725,7 @@ <histogram name="MultiDevice.SecureChannel.BLE.ReceiveAdvertisementToAuthentication.EffectiveSuccessRateWithRetries" - enum="BooleanSuccess" expires_after="2025-05-05"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1748,7 +1748,7 @@ </histogram> <histogram name="MultiDevice.SecureChannel.Nearby.ConnectionMedium" - enum="SecureChannelNearbyConnectionMedium" expires_after="2025-05-05"> + enum="SecureChannelNearbyConnectionMedium" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1791,7 +1791,7 @@ </histogram> <histogram name="MultiDevice.SecureChannel.Nearby.EffectiveConnectionResult" - enum="BooleanSuccess" expires_after="2025-05-05"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1840,7 +1840,7 @@ </histogram> <histogram name="MultiDevice.SecureChannel.Nearby.OperationResult.{Function}" - enum="NearbyConnectionsStatus" expires_after="2025-05-05"> + enum="NearbyConnectionsStatus" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1900,7 +1900,7 @@ </histogram> <histogram name="MultiDevice.Setup.HasDuplicateEligibleHostDeviceNames" - enum="BooleanDuplicate" expires_after="2025-05-05"> + enum="BooleanDuplicate" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1912,7 +1912,7 @@ </histogram> <histogram name="MultiDevice.Setup.HostStatus" - enum="MultiDevice_Setup_HostStatus" expires_after="2025-05-05"> + enum="MultiDevice_Setup_HostStatus" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1970,7 +1970,7 @@ </histogram> <histogram name="MultiDeviceSetup.NudgeInteracted" - enum="MultideviceSetupNudgeInteraction" expires_after="2025-05-05"> + enum="MultideviceSetupNudgeInteraction" expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -1982,7 +1982,7 @@ </histogram> <histogram name="MultiDeviceSetup.NudgeShown" units="count" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2002,7 +2002,7 @@ </histogram> <histogram name="MultiDeviceSetup.OOBE.UserChoice" - enum="MultiDeviceSetupOOBEUserChoice" expires_after="2025-05-05"> + enum="MultiDeviceSetupOOBEUserChoice" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <owner>hsuregan@chromium.org</owner> @@ -2024,7 +2024,7 @@ </histogram> <histogram name="MultiDeviceSetup_NotificationClicked" - enum="MultiDeviceSetupNotification" expires_after="2025-05-05"> + enum="MultiDeviceSetupNotification" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2045,7 +2045,7 @@ </histogram> <histogram name="MultiDeviceSetup_NotificationShown" - enum="MultiDeviceSetupNotification" expires_after="2025-05-05"> + enum="MultiDeviceSetupNotification" expires_after="2025-07-06"> <owner>hansberry@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2054,7 +2054,7 @@ </histogram> <histogram name="ProximityAuth.BleWeaveConnectionResult" - enum="ProximityAuth_BleWeaveConnectionResult" expires_after="2025-05-05"> + enum="ProximityAuth_BleWeaveConnectionResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2065,7 +2065,7 @@ <histogram name="ProximityAuth.BluetoothGattConnectionResult" enum="ProximityAuth_BluetoothGattConnectionResult" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2174,7 +2174,7 @@ </histogram> <histogram name="SmartLock.AuthMethodChoice.Unlock" - enum="SmartLockAuthMethodChoice" expires_after="2025-05-05"> + enum="SmartLockAuthMethodChoice" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary>Records the user's unlock method choice.</summary> @@ -2191,7 +2191,7 @@ </histogram> <histogram name="SmartLock.AuthResult" enum="BooleanSuccess" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2201,7 +2201,7 @@ </histogram> <histogram name="SmartLock.AuthResult.Unlock" enum="BooleanSuccess" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2221,7 +2221,7 @@ </histogram> <histogram name="SmartLock.EnabledDevicesCount" units="devices" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2232,7 +2232,7 @@ </histogram> <histogram name="SmartLock.EnabledState" enum="SmartLockEnabledState" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2245,7 +2245,7 @@ </histogram> <histogram name="SmartLock.FindAndConnectToHostResult.Unlock" - enum="SmartLockFindAndConnectToHostResult" expires_after="2025-05-05"> + enum="SmartLockFindAndConnectToHostResult" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2266,7 +2266,7 @@ </histogram> <histogram name="SmartLock.GetRemoteStatus.Unlock" enum="BooleanSuccess" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2287,7 +2287,7 @@ </histogram> <histogram name="SmartLock.MultiDeviceFeatureState" - enum="MultiDevice_FeatureState" expires_after="2025-05-05"> + enum="MultiDevice_FeatureState" expires_after="2025-07-06"> <owner>hansberry@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -2299,7 +2299,7 @@ <histogram name="SmartLock.Performance.AuthenticationToReceiveFirstRemoteStatusDuration.Unlock" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <!-- Name completed by histogram_suffixes name="SmartLockStatusTypes" --> <owner>hansberry@chromium.org</owner> @@ -2322,7 +2322,7 @@ <histogram name="SmartLock.Performance.ShowLockScreenToShowFirstStatusToUserDuration.Unlock" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <!-- Name completed by histogram_suffixes name="SmartLockStatusTypes" --> <owner>hansberry@chromium.org</owner> @@ -2345,7 +2345,7 @@ <histogram name="SmartLock.Performance.StartScanToReceiveFirstRemoteStatusDuration.Unlock" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <!-- Name completed by histogram_suffixes name="SmartLockStatusTypes" --> <owner>hansberry@chromium.org</owner> @@ -2384,7 +2384,7 @@ </histogram> <histogram name="WifiSync.MultiDeviceFeatureState" - enum="MultiDevice_FeatureState" expires_after="2025-05-05"> + enum="MultiDevice_FeatureState" expires_after="2025-07-06"> <owner>jonmann@chromium.org</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/cryptohome/histograms.xml b/tools/metrics/histograms/metadata/cryptohome/histograms.xml index 563cb4d8..0a4ec47 100644 --- a/tools/metrics/histograms/metadata/cryptohome/histograms.xml +++ b/tools/metrics/histograms/metadata/cryptohome/histograms.xml
@@ -117,7 +117,7 @@ </histogram> <histogram name="Cryptohome.DownloadsBindMountMigration.{Operation}" - enum="PopularOSErrno" expires_after="2025-05-04"> + enum="PopularOSErrno" expires_after="2025-07-06"> <owner>wenbojie@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -140,7 +140,7 @@ </histogram> <histogram name="Cryptohome.DownloadsBindMountMigrationStatus" - enum="CryptohomeDownloadsMigrationStatus" expires_after="2025-05-04"> + enum="CryptohomeDownloadsMigrationStatus" expires_after="2025-07-06"> <owner>wenbojie@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -799,7 +799,7 @@ <histogram name="Cryptohome.{ErrorOperation}{AuthFactorType}.DevUnexpectedState" - enum="CryptohomeErrorLocation" expires_after="2025-05-04"> + enum="CryptohomeErrorLocation" expires_after="2025-07-06"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -836,7 +836,7 @@ </histogram> <histogram name="Cryptohome.{ErrorOperation}{AuthFactorType}.HashedStack" - enum="CryptohomeErrorHashed" expires_after="2025-05-04"> + enum="CryptohomeErrorHashed" expires_after="2025-07-06"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -871,7 +871,7 @@ </histogram> <histogram name="Cryptohome.{ErrorOperation}{AuthFactorType}.LeafErrorWithTPM" - enum="CryptohomeErrorLocationWithTPMError" expires_after="2025-05-04"> + enum="CryptohomeErrorLocationWithTPMError" expires_after="2025-07-06"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml index 038d5b3..5fc89f1e 100644 --- a/tools/metrics/histograms/metadata/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/metadata/custom_tabs/histograms.xml
@@ -114,7 +114,7 @@ </histogram> <histogram name="CustomTabs.Branding.AppIdType" - enum="CustomTabsBrandingAppIdType" expires_after="2025-05-04"> + enum="CustomTabsBrandingAppIdType" expires_after="2025-07-06"> <owner>jinsukkim@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary> @@ -168,7 +168,7 @@ </histogram> <histogram name="CustomTabs.ClientAppId.Incognito" enum="ClientAppId" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>zalmashni@google.com</owner> <owner>chrome-incognito@google.com</owner> <owner>cct-team@google.com</owner> @@ -556,7 +556,7 @@ </histogram> <histogram name="CustomTabs.Omnibox.FocusResultedInNavigation" units="Boolean" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>ender@google.com</owner> <owner>sinansahin@google.com</owner> <summary> @@ -569,7 +569,7 @@ </histogram> <histogram name="CustomTabs.Omnibox.NumNavigationsPerSession" units="count" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>ender@google.com</owner> <owner>sinansahin@google.com</owner> <summary> @@ -627,7 +627,7 @@ </histogram> <histogram name="CustomTabs.PostMessage.OnMessage" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sinansahin@google.com</owner> <owner>jinsukkim@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> @@ -639,7 +639,7 @@ <histogram name="CustomTabs.PostMessage.RequestPostMessageChannelWithTargetOrigin" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>elabadysayed@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary> @@ -737,7 +737,7 @@ </histogram> <histogram name="CustomTabs.Startup.TimeToFirstCommitNavigation2.{suffix}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mthiesse@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary> @@ -770,7 +770,7 @@ </histogram> <histogram name="CustomTabs.Startup.TimeToLargestContentfulPaint2.{suffix}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mthiesse@chromium.org</owner> <owner>chrome-connective-tissue@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/dev/histograms.xml b/tools/metrics/histograms/metadata/dev/histograms.xml index 969ba6e..c766a12e 100644 --- a/tools/metrics/histograms/metadata/dev/histograms.xml +++ b/tools/metrics/histograms/metadata/dev/histograms.xml
@@ -98,7 +98,7 @@ </histogram> <histogram name="DevTools.DeveloperResourceLoaded" - enum="DevToolsDeveloperResourceLoaded" expires_after="2025-05-04"> + enum="DevToolsDeveloperResourceLoaded" expires_after="2025-07-06"> <owner>bmeurer@google.com</owner> <owner>danilsomsikov@google.com</owner> <summary> @@ -133,7 +133,7 @@ </histogram> <histogram name="DevTools.DeveloperResourceScheme" - enum="DevToolsDeveloperResourceScheme" expires_after="2025-05-04"> + enum="DevToolsDeveloperResourceScheme" expires_after="2025-07-06"> <owner>bmeurer@google.com</owner> <owner>danilsomsikov@google.com</owner> <summary> @@ -417,7 +417,7 @@ </histogram> <histogram name="DevTools.RecordingReplayFinished" - enum="DevToolsRecordingReplayFinished" expires_after="2025-05-04"> + enum="DevToolsRecordingReplayFinished" expires_after="2025-07-06"> <owner>alexrudenko@google.com</owner> <owner>mathiasb@google.com</owner> <owner>yangguo@google.com</owner> @@ -455,14 +455,14 @@ </histogram> <histogram name="DevTools.SidebarPaneShown" enum="DevToolsSidebarPane" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bmeurer@google.com</owner> <owner>changhaohan@google.com</owner> <summary>Specified DevTools sidebar pane was shown.</summary> </histogram> <histogram name="DevTools.SourcesPanelFileDebugged" enum="DevToolsMediaType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bmeurer@google.com</owner> <owner>szuend@google.com</owner> <summary> @@ -473,7 +473,7 @@ </histogram> <histogram name="DevTools.SourcesPanelFileOpened" enum="DevToolsMediaType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bmeurer@google.com</owner> <owner>szuend@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/download/histograms.xml b/tools/metrics/histograms/metadata/download/histograms.xml index ea71bc6..4f8755c8c 100644 --- a/tools/metrics/histograms/metadata/download/histograms.xml +++ b/tools/metrics/histograms/metadata/download/histograms.xml
@@ -82,7 +82,7 @@ </histogram> <histogram name="Download.Android.OpenDialog.Events" - enum="OpenDownloadDialogEvent" expires_after="2025-05-04"> + enum="OpenDownloadDialogEvent" expires_after="2025-07-06"> <owner>qinmin@chromium.org</owner> <owner>dtrainor@chromium.org</owner> <summary> @@ -129,7 +129,7 @@ </histogram> <histogram name="Download.BandwidthOverallBytesPerSecond2" units="bytes/second" - expires_after="2025-04-13"> + expires_after="2025-07-06"> <owner>qinmin@chromium.org</owner> <summary> Overall bandwidth seen for a completed download. This includes all file @@ -1146,7 +1146,7 @@ </histogram> <histogram name="Download.Start.PerProfileType" enum="BrowserProfileType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sideyilmaz@chromium.org</owner> <owner>chrome-incognito@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml index 7580bbfd..6aa48ce 100644 --- a/tools/metrics/histograms/metadata/enterprise/histograms.xml +++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -584,7 +584,7 @@ </histogram> <histogram name="Enterprise.CloudManagement.PolicyFetchingTime" units="ms" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>ftirelo@chromium.org</owner> <owner>zmin@chromium.org</owner> <summary> @@ -706,7 +706,7 @@ </histogram> <histogram name="Enterprise.DevicePolicyDeviceIdValidity2.{EnrollmentType}" - enum="EnterprisePolicyDeviceIdValidity" expires_after="2025-05-01"> + enum="EnterprisePolicyDeviceIdValidity" expires_after="2025-07-06"> <owner>igorcov@chromium.org</owner> <owner>emaxx@chromium.org</owner> <summary> @@ -1298,7 +1298,7 @@ </histogram> <histogram name="Enterprise.DeviceTrust.RotateSigningKey.{Nonce}.UploadCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-03-20"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>hmare@google.com</owner> <owner>rogerta@chromium.org</owner> <owner>seblalancette@chromium.org</owner> @@ -1535,7 +1535,7 @@ </histogram> <histogram name="Enterprise.Dlp.FileActionBlockReviewed" - enum="EnterpriseDlpPolicyFileAction" expires_after="2025-02-10"> + enum="EnterpriseDlpPolicyFileAction" expires_after="2025-08-10"> <owner>ayaelattar@google.com</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1565,7 +1565,7 @@ </histogram> <histogram name="Enterprise.Dlp.FileActionWarnReviewed" - enum="EnterpriseDlpPolicyFileAction" expires_after="2025-02-10"> + enum="EnterpriseDlpPolicyFileAction" expires_after="2025-08-10"> <owner>ayaelattar@google.com</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1575,7 +1575,7 @@ </histogram> <histogram name="Enterprise.Dlp.FileActionWarnTimedOut" - enum="EnterpriseDlpPolicyFileAction" expires_after="2025-02-10"> + enum="EnterpriseDlpPolicyFileAction" expires_after="2025-08-10"> <owner>ayaelattar@google.com</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -1743,7 +1743,7 @@ </histogram> <histogram name="Enterprise.Dlp.RestrictionConfigured" - enum="EnterpriseDlpPolicyRestriction" expires_after="2025-05-04"> + enum="EnterpriseDlpPolicyRestriction" expires_after="2025-07-06"> <owner>poromov@chromium.org</owner> <owner>chromeos-dlp@google.com</owner> <summary> @@ -2153,7 +2153,7 @@ </histogram> <histogram name="Enterprise.EnrollmentNudge.PolicyFetchResult" - enum="EnrollmentNudgePolicyFetchResult" expires_after="2025-05-04"> + enum="EnrollmentNudgePolicyFetchResult" expires_after="2025-07-06"> <owner>andreydav@google.com</owner> <owner>rodmartin@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> @@ -2164,7 +2164,7 @@ </histogram> <histogram name="Enterprise.EnrollmentNudge.UserAction" - enum="EnrollmentNudgeUserAction" expires_after="2025-05-04"> + enum="EnrollmentNudgeUserAction" expires_after="2025-07-06"> <owner>andreydav@google.com</owner> <owner>rodmartin@google.com</owner> <owner>chromeos-commercial-identity@google.com</owner> @@ -2776,7 +2776,7 @@ </histogram> <histogram name="Enterprise.PolicyServiceInitTime{Scope}{PolicyCountSuffix}" - units="ms" expires_after="2025-05-01"> + units="ms" expires_after="2025-07-06"> <owner>ftirelo@chromium.org</owner> <owner>zmin@chromium.org</owner> <summary> @@ -3664,7 +3664,7 @@ <histogram name="Enterprise.{ContentAnalysisProtocol}Request.{ContentAnalysisRequestType}.Duration" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>nancylanxiao@google.com</owner> <owner>domfc@chromium.org</owner> <owner>dpr-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/event/histograms.xml b/tools/metrics/histograms/metadata/event/histograms.xml index 823ff2c..0443e52 100644 --- a/tools/metrics/histograms/metadata/event/histograms.xml +++ b/tools/metrics/histograms/metadata/event/histograms.xml
@@ -112,7 +112,7 @@ </histogram> <histogram name="Event.GestureScrollEnd.BrowserCompositorFrame.Count" - units="counts" expires_after="2025-05-02"> + units="counts" expires_after="2025-07-06"> <owner>peilinwang@google.com</owner> <owner>woa-performance-team@google.com</owner> <summary> @@ -315,7 +315,7 @@ </histogram> <histogram name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation" - units="pixels" expires_after="2025-05-04"> + units="pixels" expires_after="2025-07-06"> <owner>flackr@chromium.org</owner> <owner>sahir.vellani@microsoft.com</owner> <owner>input-dev@chromium.org</owner> @@ -884,7 +884,7 @@ </histogram> <histogram name="EventLatency.{ScrollEventType}.GenerationToBrowserMain" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary> @@ -934,7 +934,7 @@ </histogram> <histogram name="EventLatency.{ScrollEventType}.{TopControls}" - units="microseconds" expires_after="2025-04-27"> + units="microseconds" expires_after="2025-07-06"> <owner>jonross@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/extensions/histograms.xml b/tools/metrics/histograms/metadata/extensions/histograms.xml index e35ab8b..cc9e3aa 100644 --- a/tools/metrics/histograms/metadata/extensions/histograms.xml +++ b/tools/metrics/histograms/metadata/extensions/histograms.xml
@@ -255,7 +255,7 @@ </histogram> <histogram name="Extensions.ActiveScriptController.PermittedExtensions" - units="Extension Count" expires_after="2025-05-04"> + units="Extension Count" expires_after="2025-07-06"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -2362,7 +2362,7 @@ <histogram name="Extensions.ForceInstalledPreInstalledDeprecatedAppOpenUrl" enum="ExtensionForceInstalledPreInstalledDeprecatedSite" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>erikchen@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -3938,7 +3938,7 @@ <histogram name="Extensions.MessagePipeline.OpenChannelDispatchOnConnectStatus{DispatchTarget}{ChannelType}" - enum="OpenChannelMessagePipelineResult" expires_after="2025-04-25"> + enum="OpenChannelMessagePipelineResult" expires_after="2025-07-06"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -3961,7 +3961,7 @@ <histogram name="Extensions.MessagePipeline.OpenChannelStatus{WorkerStatus}{ChannelType}" - enum="OpenChannelMessagePipelineResult" expires_after="2025-04-25"> + enum="OpenChannelMessagePipelineResult" expires_after="2025-07-06"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -3992,7 +3992,7 @@ <histogram name="Extensions.MessagePipeline.OpenChannelWorkerDispatchStatus{ChannelType}" - enum="OpenChannelMessagePipelineResult" expires_after="2025-04-25"> + enum="OpenChannelMessagePipelineResult" expires_after="2025-07-06"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4010,7 +4010,7 @@ <histogram name="Extensions.MessagePipeline.OpenChannelWorkerWakeUpStatus{ChannelType}" - enum="OpenChannelMessagePipelineResult" expires_after="2025-04-25"> + enum="OpenChannelMessagePipelineResult" expires_after="2025-07-06"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -4183,7 +4183,7 @@ <histogram name="Extensions.NonWebstoreLocationWith{DeveloperModeState}{ExtensionState}3" - enum="ExtensionLocation" expires_after="2025-04-27"> + enum="ExtensionLocation" expires_after="2025-07-06"> <owner>richche@google.com</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -4872,7 +4872,7 @@ </histogram> <histogram name="Extensions.ServiceWorkerBackground.WorkerRegistrationState" - enum="Boolean" expires_after="2025-06-29"> + enum="Boolean" expires_after="2025-07-06"> <owner>jlulejian@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> @@ -5212,7 +5212,7 @@ <histogram name="Extensions.WebRequest.BeforeRequestListenerEvaluationTimeInMicroseconds.{HandlerTypes}" - units="microseconds" expires_after="2025-04-27"> + units="microseconds" expires_after="2025-07-06"> <owner>rdevlin.cronin@chromium.org</owner> <owner>src/extensions/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/families/enums.xml b/tools/metrics/histograms/metadata/families/enums.xml index 06105ed..8e2a542b 100644 --- a/tools/metrics/histograms/metadata/families/enums.xml +++ b/tools/metrics/histograms/metadata/families/enums.xml
@@ -40,6 +40,21 @@ <int value="1" label="Has conflict"/> </enum> +<!-- LINT.IfChange(ClassifyUrlThrottleFinalStatus) --> + +<enum name="ClassifyUrlThrottleFinalStatus"> + <int value="0" label="Allowed"> + The navigation is allowed as a result of aggregating filtering results from + SupervisedUserURLFilter + </int> + <int value="1" label="Blocked"> + The navigation is denied as a result of aggregating filtering results from + SupervisedUserURLFilter, and an interstitial is scheduled. + </int> +</enum> + +<!-- LINT.ThenChange(//chrome/browser/supervised_user/classify_url_navigation_throttle.h:ClassifyUrlThrottleFinalStatus) --> + <!-- LINT.IfChange(ClassifyUrlThrottleStatus) --> <enum name="ClassifyUrlThrottleStatus">
diff --git a/tools/metrics/histograms/metadata/families/histograms.xml b/tools/metrics/histograms/metadata/families/histograms.xml index 67c4ba34..7e24db88 100644 --- a/tools/metrics/histograms/metadata/families/histograms.xml +++ b/tools/metrics/histograms/metadata/families/histograms.xml
@@ -704,7 +704,7 @@ </histogram> <histogram name="FamilyUser.{ExtensionStatus}ExtensionsCount2" - units="Number of Extensions" expires_after="2025-05-04"> + units="Number of Extensions" expires_after="2025-07-06"> <owner>courtneywong@chromium.org</owner> <owner>cros-families-eng@google.com</owner> <owner>chrome-kids-eng@google.com</owner> @@ -808,7 +808,7 @@ <histogram name="SupervisedUsers.ClassifyUrlThrottle.EarlierThanContentResponse" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <summary> @@ -826,8 +826,25 @@ </summary> </histogram> +<histogram name="SupervisedUsers.ClassifyUrlThrottle.FinalStatus" + enum="ClassifyUrlThrottleFinalStatus" expires_after="2025-05-04"> + <owner>tju@google.com</owner> + <owner>chrome-kids-eng@google.com</owner> + <summary> + The final verdict of the throttle, recorded exactly once per navigation when + the throttle had chance to make its decision. + + Throttle might not make decision if another throttle made not-allowing + decision first, or navigation was genuinely terminated or canceled by the + user. + + See ManagedUsers.TopLevelFilteringResult2.NavigationThrottle for filtering + sub-decisions that led to the reported verdict. + </summary> +</histogram> + <histogram name="SupervisedUsers.ClassifyUrlThrottle.LaterThanContentResponse" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>tju@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <summary> @@ -1038,7 +1055,7 @@ <histogram name="SupervisedUsers.SkipParentApprovalToInstallExtensions.PerRecord" - enum="SupervisedUserToggleState" expires_after="2025-05-04"> + enum="SupervisedUserToggleState" expires_after="2025-07-06"> <owner>anthie@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>cros-families-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/file/histograms.xml b/tools/metrics/histograms/metadata/file/histograms.xml index 0860aad..c7c4315 100644 --- a/tools/metrics/histograms/metadata/file/histograms.xml +++ b/tools/metrics/histograms/metadata/file/histograms.xml
@@ -916,7 +916,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Errors.OneDrive" - enum="OfficeOneDriveOpenErrors" expires_after="2025-05-01"> + enum="OfficeOneDriveOpenErrors" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -926,7 +926,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Errors.{CloudProvider}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -937,7 +937,7 @@ <histogram name="FileBrowser.OfficeFiles.FileHandler.{RootType}.{ConnectionStatus}" - enum="OfficeFileHandler" expires_after="2025-05-01"> + enum="OfficeFileHandler" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -988,7 +988,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.AuthAttempt" - enum="OfficeOneDriveAuthAttemptType" expires_after="2025-05-01"> + enum="OfficeOneDriveAuthAttemptType" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1009,7 +1009,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.AuthResult.Interactive" - enum="OfficeOneDriveAuthResultInteractive" expires_after="2025-05-01"> + enum="OfficeOneDriveAuthResultInteractive" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1019,7 +1019,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.AuthResult.NonInteractive" - enum="OfficeOneDriveAuthResultNonInteractive" expires_after="2025-05-01"> + enum="OfficeOneDriveAuthResultNonInteractive" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1040,7 +1040,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.DriveType" - enum="OfficeOneDriveType" expires_after="2025-05-01"> + enum="OfficeOneDriveType" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1064,7 +1064,7 @@ <histogram name="FileBrowser.OfficeFiles.ODFS.FileSystemProvider.Completion.{API-FSP}" - enum="FileSystemProviderOperationCompletion" expires_after="2025-05-01"> + enum="FileSystemProviderOperationCompletion" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1077,7 +1077,7 @@ <histogram name="FileBrowser.OfficeFiles.ODFS.FileSystemProvider.Error.{API-FSP}" - enum="PlatformFileError" expires_after="2025-05-01"> + enum="PlatformFileError" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1089,7 +1089,7 @@ <histogram name="FileBrowser.OfficeFiles.ODFS.FileSystemProvider.ExtendedError.{ExtendedFSPOperation}" - enum="FileSystemProviderExtendedODFSError" expires_after="2025-05-01"> + enum="FileSystemProviderExtendedODFSError" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1100,7 +1100,7 @@ <histogram name="FileBrowser.OfficeFiles.ODFS.FileSystemProvider.Time.{API-FSP}" - units="ms" expires_after="2025-05-01"> + units="ms" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1111,7 +1111,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.GraphAPI.DeltaSize.{Case}" - units="count" expires_after="2025-05-01"> + units="count" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1153,7 +1153,7 @@ <histogram name="FileBrowser.OfficeFiles.ODFS.GraphAPI.ResponseCodeSparse.{GraphAPIMethod}" - enum="OfficeGraphAPIResult" expires_after="2025-05-01"> + enum="OfficeGraphAPIResult" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1187,7 +1187,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.MountStatePostRestore" - enum="MountStatePostRestore" expires_after="2025-05-01"> + enum="MountStatePostRestore" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1197,7 +1197,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.MountStatePreRestore" - enum="MountStatePreRestore" expires_after="2025-05-01"> + enum="MountStatePreRestore" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1232,7 +1232,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.Version" units="version" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1243,7 +1243,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.ODFS.WebUrlFormat" enum="WebUrlFormat" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1253,7 +1253,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.CloudProvider" - enum="CloudProvider" expires_after="2025-05-01"> + enum="CloudProvider" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1265,7 +1265,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.FileType.{CloudProvider}" - enum="OfficeOpenExtensions" expires_after="2025-05-01"> + enum="OfficeOpenExtensions" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1277,7 +1277,7 @@ <histogram name="FileBrowser.OfficeFiles.Open.IOTaskError.{CloudProvider}.{Transfer}" - enum="PlatformFileError" expires_after="2025-05-01"> + enum="PlatformFileError" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1297,7 +1297,7 @@ <histogram name="FileBrowser.OfficeFiles.Open.IOTaskError.{CloudProvider}.{Transfer}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1314,7 +1314,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.NumberOfFiles.{CloudProvider}" - units="count" expires_after="2025-05-01"> + units="count" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1325,7 +1325,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.SourceVolume.{CloudProvider}" - enum="OfficeFilesSourceVolume" expires_after="2025-05-01"> + enum="OfficeFilesSourceVolume" expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1347,7 +1347,7 @@ <histogram name="FileBrowser.OfficeFiles.Open.SourceVolume.{CloudProvider}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1358,7 +1358,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.TransferRequired.{CloudProvider}" - enum="OfficeFilesTransferRequired" expires_after="2025-05-01"> + enum="OfficeFilesTransferRequired" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1370,7 +1370,7 @@ <histogram name="FileBrowser.OfficeFiles.Open.TransferRequired.{CloudProvider}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1381,7 +1381,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Open.UploadResult.{CloudProvider}" - enum="OfficeFilesUploadResult" expires_after="2025-05-01"> + enum="OfficeFilesUploadResult" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1393,7 +1393,7 @@ <histogram name="FileBrowser.OfficeFiles.Open.UploadResult.{CloudProvider}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1404,7 +1404,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Setup.CancelPage" - enum="OfficeSetupPage" expires_after="2025-05-01"> + enum="OfficeSetupPage" expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1415,7 +1415,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Setup.FileHandlerSelection" - enum="OfficeSetupFileHandler" expires_after="2025-05-01"> + enum="OfficeSetupFileHandler" expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1426,7 +1426,7 @@ <histogram name="FileBrowser.OfficeFiles.Setup.FirstTimeMicrosoft365Availability" - enum="Microsoft365Availability" expires_after="2025-05-01"> + enum="Microsoft365Availability" expires_after="2025-07-06"> <owner>austinct@chromium.org</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1436,7 +1436,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Setup.ODFSAvailability" - enum="BooleanAvailable" expires_after="2025-05-01"> + enum="BooleanAvailable" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1446,7 +1446,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.Setup.OfficeWebAppInstallation" - enum="WebAppInstallResultCode" expires_after="2025-05-01"> + enum="WebAppInstallResultCode" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1468,7 +1468,7 @@ </histogram> <histogram name="FileBrowser.OfficeFiles.TaskResult.{CloudProvider}" - enum="OfficeTaskResult" expires_after="2025-05-01"> + enum="OfficeTaskResult" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary> @@ -1487,7 +1487,7 @@ <histogram name="FileBrowser.OfficeFiles.TaskResult.{CloudProvider}.MetricState" - enum="MetricState" expires_after="2025-05-01"> + enum="MetricState" expires_after="2025-07-06"> <owner>simmonsjosh@google.com</owner> <owner>src/ui/file_manager/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml b/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml index e9cf2be..c4fd9d0a 100644 --- a/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml +++ b/tools/metrics/histograms/metadata/fingerprinting_protection/histograms.xml
@@ -64,7 +64,7 @@ <histogram name="FingerprintingProtection.DocumentLoad.SubframeFilteringDelay.{Result}" - units="microseconds" expires_after="2025-04-30"> + units="microseconds" expires_after="2025-07-06"> <owner>thesalsa@google.com</owner> <owner>trishalfonso@google.com</owner> <owner>rizvis@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/geolocation/histograms.xml b/tools/metrics/histograms/metadata/geolocation/histograms.xml index 8882a145..4a0e8a00 100644 --- a/tools/metrics/histograms/metadata/geolocation/histograms.xml +++ b/tools/metrics/histograms/metadata/geolocation/histograms.xml
@@ -261,7 +261,7 @@ </histogram> <histogram name="Geolocation.NetworkLocationRequest.RequestInterval" - units="mins" expires_after="2025-05-05"> + units="mins" expires_after="2025-07-06"> <owner>alvinji@chromium.org</owner> <owner>device-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/gpu/enums.xml b/tools/metrics/histograms/metadata/gpu/enums.xml index fee495480..751274dc 100644 --- a/tools/metrics/histograms/metadata/gpu/enums.xml +++ b/tools/metrics/histograms/metadata/gpu/enums.xml
@@ -1104,6 +1104,7 @@ <int value="11" label="11th Gen"/> <int value="12" label="12th Gen"/> <int value="13" label="13th Gen"/> + <int value="14" label="14th Gen"/> </enum> <enum name="IntelGpuSeriesType"> @@ -1142,6 +1143,7 @@ <int value="29" label="Intel Lunarlake"/> <int value="30" label="Intel Arrowlake"/> <int value="31" label="Intel Battlemage"/> + <int value="32" label="Intel Pantherlake"/> </enum> <enum name="MaximumGLESVersion">
diff --git a/tools/metrics/histograms/metadata/gpu/histograms.xml b/tools/metrics/histograms/metadata/gpu/histograms.xml index 6feefcd..7b843f3 100644 --- a/tools/metrics/histograms/metadata/gpu/histograms.xml +++ b/tools/metrics/histograms/metadata/gpu/histograms.xml
@@ -81,7 +81,7 @@ </variants> <histogram name="ConfigureDisplays.External.Modeset.AttemptSucceeded" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -94,7 +94,7 @@ </histogram> <histogram name="ConfigureDisplays.External.Modeset.FinalStatus" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -132,7 +132,7 @@ </histogram> <histogram name="ConfigureDisplays.Modeset.FinalTaskStatus" - enum="ConfigureDisplaysTaskStatus" expires_after="2025-05-04"> + enum="ConfigureDisplaysTaskStatus" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="ConfigureDisplays.Modeset.MstExternalDisplaysCount" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -159,7 +159,7 @@ </histogram> <histogram name="ConfigureDisplays.Modeset.MstExternalDisplaysPercentage" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -183,7 +183,7 @@ </histogram> <histogram name="ConfigureDisplays.Modeset.Test.{NumDisplays}.Outcome" - enum="TestOnlyModesetOutcome" expires_after="2025-05-04"> + enum="TestOnlyModesetOutcome" expires_after="2025-07-06"> <owner>sukoo@google.com</owner> <owner>chromeos-gfx-compositor@google.com</owner> <summary> @@ -195,7 +195,7 @@ </histogram> <histogram name="ConfigureDisplays.Modeset.TotalExternalDisplaysCount" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary> @@ -220,7 +220,7 @@ </histogram> <histogram name="ConfigureDisplays.{Connection}.Modeset.{Report}.Resolution" - enum="DisplayResolution" expires_after="2025-05-04"> + enum="DisplayResolution" expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@chromium.org</owner> <summary>{Connection} {Report}</summary> @@ -258,7 +258,7 @@ </histogram> <histogram name="Display.External.ParseEdidOptionals" enum="ParseEdidOptionals" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>gildekel@chromium.org</owner> <owner>chromeos-gfx-display@google.com</owner> <summary> @@ -1567,7 +1567,7 @@ </histogram> <histogram name="GPU.WatchdogThread.Timeout{WatchdogStage}{ThreadType}" - enum="GpuWatchdogTimeoutEvent" expires_after="2025-04-27"> + enum="GpuWatchdogTimeoutEvent" expires_after="2025-07-06"> <owner>magchen@chromium.org</owner> <owner>zmo@chromium.org</owner> <owner>chrome-gpu-metric-alerts@chromium.org</owner> @@ -1670,7 +1670,7 @@ <histogram name="GPU.{GraphiteDawnOrWebGPU}.MaxTextureDimension2D.{AdapterType}" - units="dimensions" expires_after="2025-05-04"> + units="dimensions" expires_after="2025-07-06"> <owner>cduvall@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary> @@ -1743,7 +1743,7 @@ <histogram name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.{CacheHitMiss}.90SecondsPostStartup" - units="microseconds" expires_after="2025-05-04"> + units="microseconds" expires_after="2025-07-06"> <owner>hitawala@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary> @@ -1763,7 +1763,7 @@ <histogram name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.{CacheHitMiss}.Counts.90SecondsPostStartup" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>hitawala@chromium.org</owner> <owner>mdb.webgpu-dev-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/history/histograms.xml b/tools/metrics/histograms/metadata/history/histograms.xml index 480217f..ee8ed05 100644 --- a/tools/metrics/histograms/metadata/history/histograms.xml +++ b/tools/metrics/histograms/metadata/history/histograms.xml
@@ -992,7 +992,7 @@ <histogram name="History.Clusters.Backend.UpdateClusterTriggerability.{Segment}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>manukh@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>1457319</component> @@ -1200,7 +1200,7 @@ </histogram> <histogram name="History.Clusters.KeywordCache.Latency" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>manukh@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>1457319</component> @@ -1238,7 +1238,7 @@ </histogram> <histogram name="History.Clusters.KeywordCache.ThreadTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>manukh@chromium.org</owner> <owner>chrome-journeys@google.com</owner> <component>1457319</component>
diff --git a/tools/metrics/histograms/metadata/installer/histograms.xml b/tools/metrics/histograms/metadata/installer/histograms.xml index 4930b70..f0e17cb 100644 --- a/tools/metrics/histograms/metadata/installer/histograms.xml +++ b/tools/metrics/histograms/metadata/installer/histograms.xml
@@ -80,7 +80,7 @@ </histogram> <histogram name="Installer.Postinstall.EfiManagementEvent" - enum="ChromeOSEfiManagementEvent" expires_after="2025-05-04"> + enum="ChromeOSEfiManagementEvent" expires_after="2025-07-06"> <owner>tbrandston@google.com</owner> <owner>chromeos-flex-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ios/histograms.xml b/tools/metrics/histograms/metadata/ios/histograms.xml index 88df7a9..add901a 100644 --- a/tools/metrics/histograms/metadata/ios/histograms.xml +++ b/tools/metrics/histograms/metadata/ios/histograms.xml
@@ -191,7 +191,7 @@ </histogram> <histogram name="IOS.BackgroundRefresh.BGTaskSchedulerError" - enum="BGTaskSchedulerErrorType" expires_after="2025-05-04"> + enum="BGTaskSchedulerErrorType" expires_after="2025-07-06"> <owner>fedegermi@google.com</owner> <owner>marq@chromium.org</owner> <summary> @@ -1558,7 +1558,7 @@ </histogram> <histogram name="IOS.FinishedNavigationHasItem" enum="Boolean" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>gambard@chromium.org</owner> <owner>bling-team@google.com</owner> <summary> @@ -1916,7 +1916,7 @@ </histogram> <histogram name="IOS.IsDefaultBrowser{NumberOfDays}" enum="Boolean" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>sebsg@chromium.org</owner> <owner>gujen@chromium.org</owner> <summary> @@ -2106,7 +2106,7 @@ </histogram> <histogram name="IOS.LocationBar.LensOverlayEntrypointAvailable" enum="Boolean" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>stkhapugin@chromium.org</owner> <summary> @@ -2116,7 +2116,7 @@ </histogram> <histogram name="IOS.LocationBar.LensOverlayEntrypointHidden" - enum="IOSLocationBarLeadingIconType" expires_after="2025-05-06"> + enum="IOSLocationBarLeadingIconType" expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>stkhapugin@chromium.org</owner> <summary> @@ -2230,7 +2230,7 @@ </histogram> <histogram name="IOS.MagicStack.Module.Disabled" enum="IOSMagicStackModuleType" - expires_after="2025-05-03"> + expires_after="2025-07-06"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-get-set-up@google.com</owner> <summary>Records when a module was disabled.</summary> @@ -2247,7 +2247,7 @@ <histogram name="IOS.MagicStack.Module.{Event}.TabResumption.{Surface}.{Source}" - units="index" expires_after="2025-05-04"> + units="index" expires_after="2025-07-06"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-get-set-up@google.com</owner> <summary> @@ -2279,7 +2279,7 @@ </histogram> <histogram name="IOS.MagicStack.ScrollActionToIndex" units="index" - expires_after="2025-05-03"> + expires_after="2025-07-06"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-get-set-up@google.com</owner> <summary> @@ -2696,21 +2696,21 @@ </histogram> <histogram name="IOS.MultiWindow.ConnectedScenesCount" units="scenes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fedegermi@google.com</owner> <owner>marq@chromium.org</owner> <summary>Records the number of connected scenes.</summary> </histogram> <histogram name="IOS.MultiWindow.DisconnectedScenesCount" units="scenes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>fedegermi@google.com</owner> <owner>marq@chromium.org</owner> <summary>Records the number of disconnected scenes.</summary> </histogram> <histogram name="IOS.MultiWindow.OpenInNewWindow" enum="WindowActivityOrigin" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>marq@chromium.org</owner> <owner>djean@chromium.org</owner> <summary> @@ -2827,7 +2827,7 @@ </histogram> <histogram name="IOS.Notifications.Tips.ClientStatus.Enabled.ByProvider" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>hiramahmood@google.com</owner> <owner>scottyoder@chromium.org</owner> <summary> @@ -2877,7 +2877,7 @@ </histogram> <histogram name="IOS.Notifications.Tips.UserType" - enum="IOSTipsNotificationUserType" expires_after="2025-05-04"> + enum="IOSTipsNotificationUserType" expires_after="2025-07-06"> <owner>scottyoder@chromium.org</owner> <owner>hiramahmood@google.com</owner> <summary> @@ -3128,7 +3128,7 @@ </histogram> <histogram name="IOS.OverflowMenu.Customization.ActionRemoved" - enum="IOSOverflowMenuAction" expires_after="2025-05-04"> + enum="IOSOverflowMenuAction" expires_after="2025-07-06"> <owner>rkgibson@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary>The action removed during an overflow menu customization.</summary> @@ -3191,7 +3191,7 @@ </histogram> <histogram name="IOS.OverflowMenu.Customization.DestinationRemoved" - enum="IOSOverflowMenuDestination" expires_after="2025-05-04"> + enum="IOSOverflowMenuDestination" expires_after="2025-07-06"> <owner>rkgibson@google.com</owner> <owner>bling-mony-pod@google.com</owner> <summary> @@ -3386,7 +3386,7 @@ </histogram> <histogram name="IOS.ParcelTracking.OptInStatus" - enum="IOSParcelTrackingOptInStatus" expires_after="2025-04-27"> + enum="IOSParcelTrackingOptInStatus" expires_after="2025-07-06"> <owner>hiramahmood@google.com</owner> <owner>bling-get-set-up@google.com</owner> <summary> @@ -3398,7 +3398,7 @@ </histogram> <histogram name="IOS.ParcelTracking.Tracked.{Source}" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hiramahmood@google.com</owner> <owner>thegreenfrog@chromium.org</owner> <summary>Logs number of packages tracked from {Source}.</summary> @@ -3485,7 +3485,7 @@ </histogram> <histogram name="IOS.PasswordManager.WidgetPromo.Action" - enum="PromoWithInstructionsAction" expires_after="2025-05-04"> + enum="PromoWithInstructionsAction" expires_after="2025-07-06"> <owner>noemies@google.com</owner> <owner>bling-transactions@google.com</owner> <summary> @@ -3882,7 +3882,7 @@ <histogram name="IOS.PushNotification.NotificationAutorizationStatusChangedToProvisional" enum="PushNotificationSettingsAuthorizationStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>scottyoder@google.com</owner> <owner>bling-get-set-up@google.com</owner> <summary> @@ -4108,7 +4108,7 @@ </histogram> <histogram name="IOS.SafetyCheck.FreshnessTrigger" - enum="IOSSafetyCheckFreshnessTrigger" expires_after="2025-05-04"> + enum="IOSSafetyCheckFreshnessTrigger" expires_after="2025-07-06"> <owner>bwwilliams@google.com</owner> <owner>thegreenfrog@google.com</owner> <summary> @@ -4253,7 +4253,7 @@ </histogram> <histogram name="IOS.SandboxMetrics.TotalRegularSessionSize" units="MB" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>michaeldo@chromium.org</owner> <owner>rohitrao@chromium.org</owner> <summary> @@ -4266,7 +4266,7 @@ </histogram> <histogram name="IOS.SandboxMetrics.WebKitCacheSize" units="MB" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>michaeldo@chromium.org</owner> <owner>rohitrao@chromium.org</owner> <summary> @@ -4569,7 +4569,7 @@ </histogram> <histogram name="IOS.SearchWith.Trigger" enum="IOSSearchWithContext" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>olivierrobin@chromium.org</owner> <owner>djean@chromium.org</owner> <summary>The context in which Search With has been triggered.</summary> @@ -4589,7 +4589,7 @@ </histogram> <histogram name="IOS.SetUpList.AllItemsCompleted" enum="Boolean" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>scottyoder@google.com</owner> <owner>bling-get-set-up@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/lens/histograms.xml b/tools/metrics/histograms/metadata/lens/histograms.xml index 8e0d03f..9a504122 100644 --- a/tools/metrics/histograms/metadata/lens/histograms.xml +++ b/tools/metrics/histograms/metadata/lens/histograms.xml
@@ -108,7 +108,7 @@ </histogram> <histogram name="Lens.Overlay.ByDocumentType.{DocumentType}.Invoked" - enum="Boolean" expires_after="2025-05-06"> + enum="Boolean" expires_after="2025-07-06"> <owner>stanfield@google.com</owner> <owner>mercerd@google.com</owner> <owner>lens-chrome@google.com</owner> @@ -121,7 +121,7 @@ <histogram name="Lens.Overlay.ByInvocationSource.{InvocationSource}.InvocationResultedInSearch" - enum="Boolean" expires_after="2025-05-06"> + enum="Boolean" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -134,7 +134,7 @@ <histogram name="Lens.Overlay.ByInvocationSource.{InvocationSource}.SessionDuration" - units="ms" expires_after="2025-05-06"> + units="ms" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -147,7 +147,7 @@ <histogram name="Lens.Overlay.ByInvocationSource.{InvocationSource}.SessionForegroundDuration" - units="ms" expires_after="2025-05-06"> + units="ms" expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -161,7 +161,7 @@ <histogram name="Lens.Overlay.ByInvocationSource.{InvocationSource}.TimeToFirstInteraction" - units="ms" expires_after="2025-05-06"> + units="ms" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -249,7 +249,7 @@ </histogram> <histogram name="Lens.Overlay.ContextualSearchBox.ShownInSession" - enum="BooleanShown" expires_after="2025-05-06"> + enum="BooleanShown" expires_after="2025-07-06"> <owner>stanfield@google.com</owner> <owner>mercerd@google.com</owner> <owner>lens-chrome@google.com</owner> @@ -276,7 +276,7 @@ </histogram> <histogram name="Lens.Overlay.ContextualSuggest.QueryIssuedInSession" - enum="Boolean" expires_after="2025-05-06"> + enum="Boolean" expires_after="2025-07-06"> <owner>niharm@google.com</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -330,7 +330,7 @@ </histogram> <histogram name="Lens.Overlay.ContextualSuggest.ZPS.SuggestionUsedInSession" - enum="Boolean" expires_after="2025-05-06"> + enum="Boolean" expires_after="2025-07-06"> <owner>niharm@google.com</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -341,7 +341,7 @@ </histogram> <histogram name="Lens.Overlay.Dismissed" enum="LensOverlayDismissalSource" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -358,7 +358,7 @@ </histogram> <histogram name="Lens.Overlay.GeneratedTab" enum="LensOverlayNewTabSource" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -368,7 +368,7 @@ </histogram> <histogram name="Lens.Overlay.GeneratedTab.SessionCount" units="count" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -388,7 +388,7 @@ </histogram> <histogram name="Lens.Overlay.Invoked" enum="LensOverlayInvocationSource" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -406,7 +406,7 @@ </histogram> <histogram name="Lens.Overlay.LensResponseTime" units="ms" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -417,7 +417,7 @@ <histogram name="Lens.Overlay.Overlay.ByInvocationSource.{InvocationSource}.UserAction" - enum="LensOverlayUserAction" expires_after="2025-05-06"> + enum="LensOverlayUserAction" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -434,7 +434,7 @@ </histogram> <histogram name="Lens.Overlay.Overlay.UserAction" enum="LensOverlayUserAction" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -464,7 +464,7 @@ <histogram name="Lens.Overlay.PermissionBubble.ByInvocationSource.{InvocationSource}.Shown" - enum="BooleanShown" expires_after="2025-05-06"> + enum="BooleanShown" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -478,7 +478,7 @@ <histogram name="Lens.Overlay.PermissionBubble.ByInvocationSource.{InvocationSource}.UserAction" - enum="LensPermissionBubbleUserAction" expires_after="2025-05-06"> + enum="LensPermissionBubbleUserAction" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -489,7 +489,7 @@ </histogram> <histogram name="Lens.Overlay.PermissionBubble.Shown" enum="BooleanShown" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -500,7 +500,7 @@ </histogram> <histogram name="Lens.Overlay.PermissionBubble.UserAction" - enum="LensPermissionBubbleUserAction" expires_after="2025-05-06"> + enum="LensPermissionBubbleUserAction" expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>mercerd@google.com</owner> <summary> @@ -510,7 +510,7 @@ </histogram> <histogram name="Lens.Overlay.SessionDuration" units="ms" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="Lens.Overlay.SessionForegroundDuration" units="ms" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -552,7 +552,7 @@ </histogram> <histogram name="Lens.Overlay.TimeToFirstInteraction" units="ms" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -564,7 +564,7 @@ </histogram> <histogram name="Lens.Overlay.TimeToFirstInteraction.{FirstInteractionType}" - units="ms" expires_after="2025-05-06"> + units="ms" expires_after="2025-07-06"> <owner>christianxu@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary> @@ -576,7 +576,7 @@ </histogram> <histogram name="Lens.Overlay.TimeToWebUIReady" units="ms" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>jdonnelly@chromium.org</owner> <owner>lens-chrome@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/login/histograms.xml b/tools/metrics/histograms/metadata/login/histograms.xml index e521c6f..758c622 100644 --- a/tools/metrics/histograms/metadata/login/histograms.xml +++ b/tools/metrics/histograms/metadata/login/histograms.xml
@@ -62,7 +62,7 @@ </histogram> <histogram name="Login.CryptohomeRecoveryDuration.{Result}" units="ms" - expires_after="2025-04-24"> + expires_after="2025-07-06"> <owner>yunkez@google.com</owner> <owner>cros-lurs@google.com</owner> <summary> @@ -117,7 +117,7 @@ </histogram> <histogram name="Login.Flow.{UserVisibility}.{UserCount}" - enum="LoginFlowUserLoginType" expires_after="2025-04-24"> + enum="LoginFlowUserLoginType" expires_after="2025-07-06"> <owner>antrim@chromium.org</owner> <owner>cros-lurs@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/magic_stack/histograms.xml b/tools/metrics/histograms/metadata/magic_stack/histograms.xml index 6d4cec9..66ead19 100644 --- a/tools/metrics/histograms/metadata/magic_stack/histograms.xml +++ b/tools/metrics/histograms/metadata/magic_stack/histograms.xml
@@ -51,7 +51,7 @@ </variants> <histogram name="MagicStack.Clank.NewTabPage.ContextMenu.OpenCustomizeSettings" - enum="ModuleType" expires_after="2025-05-04"> + enum="ModuleType" expires_after="2025-07-06"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary> @@ -198,7 +198,7 @@ </histogram> <histogram name="MagicStack.Clank.NewTabPage.Scrollable.{ScrollState}" - units="count" expires_after="2025-04-27"> + units="count" expires_after="2025-07-06"> <owner>hanxi@chromium.org</owner> <owner>xinyiji@chromium.org</owner> <summary> @@ -300,7 +300,7 @@ </histogram> <histogram name="MagicStack.Clank.TabResumption.IsSalientImageAvailable" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>hanxi@google.com</owner> <owner>huangs@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml index 3b208a10..9b7789e 100644 --- a/tools/metrics/histograms/metadata/media/histograms.xml +++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -276,7 +276,7 @@ <histogram name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.AverageEndToEndLatency" - units="ms" expires_after="2025-04-24"> + units="ms" expires_after="2025-07-06"> <owner>anasr@google.com</owner> <owner>bzielinski@google.com</owner> <owner>jophba@chromium.org</owner> @@ -379,7 +379,7 @@ </histogram> <histogram name="CastStreaming.Sender.{CastStreamingSender}.FrameDropped" - enum="CastStreamingFrameDropReason" expires_after="2025-04-24"> + enum="CastStreamingFrameDropReason" expires_after="2025-07-06"> <owner>jophba@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <summary> @@ -390,7 +390,7 @@ <histogram name="CastStreaming.Sender.{CastStreamingSender}.PercentDroppedFrames" - units="%" expires_after="2025-04-24"> + units="%" expires_after="2025-07-06"> <owner>jophba@chromium.org</owner> <owner>mfoltz@chromium.org</owner> <summary> @@ -1163,7 +1163,7 @@ </histogram> <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>olka@chromium.org</owner> <owner>henrika@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -1241,7 +1241,7 @@ </histogram> <histogram name="Media.Audio.Render.SystemDelay" units="ms" - expires_after="2025-04-13"> + expires_after="2025-07-06"> <owner>fhernqvist@google.com</owner> <owner>olka@chromium.org</owner> <owner>webrtc-audio-uma@google.com</owner> @@ -1887,7 +1887,7 @@ </histogram> <histogram name="Media.BreakoutBox.Usage" enum="BreakoutBoxUsage" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>guidou@chromium.org</owner> <owner>hta@chromium.org</owner> <owner>tguilbert@chromium.org</owner> @@ -2310,7 +2310,7 @@ </histogram> <histogram name="Media.EME.CdmFileIO.FileSizeKBOnFirstRead" units="KB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2320,7 +2320,7 @@ </histogram> <histogram name="Media.EME.CdmFileIO.TimeTo.{FileOperation}{IncognitoOrNormal}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2342,7 +2342,7 @@ </histogram> <histogram name="Media.EME.CdmFileIO.{FileOperation}{IncognitoOrNormal}" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2354,7 +2354,7 @@ </histogram> <histogram name="Media.EME.CdmFileIO::OpenFile" enum="CdmStorageStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2364,7 +2364,7 @@ </histogram> <histogram name="Media.EME.CdmHostVerificationStatus" - enum="CdmHostVerificationStatus" expires_after="2025-05-04"> + enum="CdmHostVerificationStatus" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2384,7 +2384,7 @@ </histogram> <histogram name="Media.EME.CdmLoadErrorCode" enum="WinGetLastError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2393,13 +2393,13 @@ </histogram> <histogram name="Media.EME.CdmLoadResult" enum="CdmLoadResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The result from an attempt to load a library CDM.</summary> </histogram> -<histogram name="Media.EME.CdmLoadTime" units="ms" expires_after="2025-05-04"> +<histogram name="Media.EME.CdmLoadTime" units="ms" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The time spent to load a library CDM.</summary> @@ -2428,7 +2428,7 @@ </histogram> <histogram name="Media.EME.CdmStorageDatabaseSQLiteError" - enum="SqliteLoggedResultCode" expires_after="2025-05-04"> + enum="SqliteLoggedResultCode" expires_after="2025-07-06"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2439,7 +2439,7 @@ <histogram name="Media.EME.CdmStorageDatabaseSQLiteError.{CdmDatabaseOperation}" - enum="SqliteLoggedResultCode" expires_after="2025-05-04"> + enum="SqliteLoggedResultCode" expires_after="2025-07-06"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2468,7 +2468,7 @@ <histogram name="Media.EME.CdmStorageDatabaseSQLiteError.{CdmDatabaseOperation}.{SqliteError}.Errno" - units="errno" expires_after="2025-05-04"> + units="errno" expires_after="2025-07-06"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2658,7 +2658,7 @@ </histogram> <histogram name="Media.EME.CdmStorageManager.WriteFileError.{ProfileType}" - enum="BooleanError" expires_after="2025-05-04"> + enum="BooleanError" expires_after="2025-07-06"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2755,7 +2755,7 @@ </histogram> <histogram name="Media.EME.MediaCryptoAvailable" enum="BooleanAvailable" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2765,7 +2765,7 @@ </histogram> <histogram name="Media.EME.MediaDrm.GetOriginIdResult" enum="GetOriginIdResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2788,7 +2788,7 @@ <histogram name="Media.EME.MediaDrm.PreprovisionedOriginId.PerAppProvisioningDevice" - units="units" expires_after="2025-05-04"> + units="units" expires_after="2025-07-06"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2798,7 +2798,7 @@ </histogram> <histogram name="Media.EME.MediaDrm.Provisioning" - enum="MediaDrmProvisioningResult" expires_after="2025-05-04"> + enum="MediaDrmProvisioningResult" expires_after="2025-07-06"> <owner>jrummell@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2808,7 +2808,7 @@ </histogram> <histogram name="Media.EME.MediaDrmBridge.KeySystemSupport" - enum="BooleanSupported" expires_after="2025-05-04"> + enum="BooleanSupported" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2837,7 +2837,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationCdm.LoadResult" enum="CdmLoadResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2876,7 +2876,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationCdm.Widevine.HardwareSecure.{EmeApi}" - enum="Hresult" expires_after="2025-05-04"> + enum="Hresult" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2887,7 +2887,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationService.Crash2" - enum="BooleanAfterPowerOrDisplayChange" expires_after="2025-05-04"> + enum="BooleanAfterPowerOrDisplayChange" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2931,7 +2931,7 @@ </histogram> <histogram name="Media.EME.MediaFoundationService.IsKeySystemSupported" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -2942,7 +2942,7 @@ <histogram name="Media.EME.MediaFoundationService.Widevine.HardwareSecure.IsTypeSupported" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3107,7 +3107,7 @@ </histogram> <histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3127,7 +3127,7 @@ </histogram> <histogram name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}" - enum="RequestMediaKeySystemAccessStatus" expires_after="2025-05-04"> + enum="RequestMediaKeySystemAccessStatus" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3140,7 +3140,7 @@ <histogram name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}.TimeTo.Reject" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>vpasupathy@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3199,7 +3199,7 @@ </histogram> <histogram name="Media.EME.Widevine.HardwareSecure.AllowedForSite" - enum="BooleanEnabled" expires_after="2025-05-04"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>feras@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3222,7 +3222,7 @@ </histogram> <histogram name="Media.EME.Widevine.HardwareSecure.CdmInfoStatus" - enum="CdmInfoStatus" expires_after="2025-05-04"> + enum="CdmInfoStatus" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3246,7 +3246,7 @@ </histogram> <histogram name="Media.EME.Widevine.HardwareSecure.Pref" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3258,7 +3258,7 @@ </histogram> <histogram name="Media.EME.Widevine.HardwareSecure.Support" - enum="BooleanSupported" expires_after="2025-05-04"> + enum="BooleanSupported" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3270,7 +3270,7 @@ </histogram> <histogram name="Media.EME.Widevine.HardwareSecure.Support.{VideoCodec}" - enum="BooleanSupported" expires_after="2025-05-04"> + enum="BooleanSupported" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3293,7 +3293,7 @@ </histogram> <histogram name="Media.EME.Widevine.SoftwareSecure.SystemCode" - enum="CdmSystemCode" expires_after="2025-05-04"> + enum="CdmSystemCode" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3314,7 +3314,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdm" enum="BooleanSuccess" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3326,7 +3326,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdmStatus" enum="CreateCdmStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sangbaekpark@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3338,7 +3338,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateCdmTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>Time took to create the CDM instance for {KeySystem}.</summary> @@ -3346,7 +3346,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.CreateSession.SessionType" - enum="EmeSessionType" expires_after="2025-05-04"> + enum="EmeSessionType" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>EME session type passed into CreateSession.</summary> @@ -3364,7 +3364,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.InitialKeyStatusMix" - enum="CdmKeyStatusMix" expires_after="2025-05-04"> + enum="CdmKeyStatusMix" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3375,7 +3375,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.KeyStatusSystemCode" - enum="CdmSystemCode" expires_after="2025-05-04"> + enum="CdmSystemCode" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>System code associated with key status for {KeySystem}.</summary> @@ -3383,7 +3383,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.LibraryCdmAvailable" - enum="BooleanAvailable" expires_after="2025-05-04"> + enum="BooleanAvailable" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3396,7 +3396,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.TimeTo{ResolveOrReject}.{EmeApi}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>The time it takes to {ResolveOrReject} a EME promise.</summary> @@ -3406,7 +3406,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.WaitingForKey" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -3418,7 +3418,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.{EmeApi}" enum="CdmPromiseResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>Result of EME promises that were handled by Chromium code.</summary> @@ -3427,7 +3427,7 @@ </histogram> <histogram name="Media.EME.{KeySystem}.{EmeApi}.SystemCode" - enum="CdmSystemCode" expires_after="2025-05-04"> + enum="CdmSystemCode" expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary>System code in promise rejection.</summary> @@ -4107,7 +4107,7 @@ </histogram> <histogram name="Media.MediaDevices.GetDisplayMedia.Result" - enum="UserMediaRequestResult" expires_after="2025-05-04"> + enum="UserMediaRequestResult" expires_after="2025-07-06"> <owner>toprice@chromium.org</owner> <owner>agpalak@chromium.org</owner> <owner>video-cmi-apis@google.com</owner> @@ -4946,7 +4946,7 @@ </histogram> <histogram name="Media.PlatformVideoDecoding.VideoCodecProfile" - enum="VideoCodecProfile" expires_after="2025-05-04"> + enum="VideoCodecProfile" expires_after="2025-07-06"> <owner>mcasas@chromium.org</owner> <owner>chromeos-gfx-video@google.com</owner> <summary> @@ -5297,7 +5297,7 @@ </histogram> <histogram name="Media.RTCVideoDecoderError" enum="MediaStatusCode" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>posciak@chromium.org</owner> <owner>liberato@chromium.org</owner> <owner>webrtc-video@google.com</owner> @@ -5831,7 +5831,7 @@ </histogram> <histogram name="Media.VaapiWrapper.VADisplayStateInitializeSuccess" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>mcasas@chromium.org</owner> <owner>chromeos-gfx-video@google.com</owner> <summary> @@ -6730,7 +6730,7 @@ </histogram> <histogram name="Media.VideoHeight.Initial.{PlaybackType}" units="pixels" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>xhwang@chromium.org</owner> <owner>media-dev-uma@chromium.org</owner> <summary> @@ -7733,7 +7733,7 @@ </histogram> <histogram name="MediaRouter.Ui.{DialogType}Dialog.LoadedWithData" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>muyaoxu@google.com</owner> <owner>openscreen-eng@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml index def2bd6b..af907d5 100644 --- a/tools/metrics/histograms/metadata/memory/histograms.xml +++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -997,7 +997,7 @@ <histogram name="Memory.Experimental.UserLevelMemoryPressureSignal.TotalPrivateMemoryFootprintAfter" - units="MB" expires_after="2025-05-04"> + units="MB" expires_after="2025-07-06"> <owner>tasak@google.com</owner> <owner>chrome-memory-tok@google.com</owner> <summary> @@ -2392,7 +2392,7 @@ </histogram> <histogram name="Memory.VMMMS.{ClientName}.DecisionLatency" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2405,7 +2405,7 @@ </histogram> <histogram name="Memory.VMMMS.{ClientName}.DecisionTimeout" - enum="VmmmsRequestPriority" expires_after="2025-05-04"> + enum="VmmmsRequestPriority" expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2418,7 +2418,7 @@ </histogram> <histogram name="Memory.VMMMS.{ClientName}.UnnecessaryKill" - enum="VmmmsRequestPriority" expires_after="2025-05-04"> + enum="VmmmsRequestPriority" expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2431,7 +2431,7 @@ </histogram> <histogram name="Memory.VMMMS.{VmName}.Deflate" units="MiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2442,7 +2442,7 @@ </histogram> <histogram name="Memory.VMMMS.{VmName}.Inflate" units="MiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2453,7 +2453,7 @@ </histogram> <histogram name="Memory.VMMMS.{VmName}.ResizeInterval" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2464,7 +2464,7 @@ </histogram> <histogram name="Memory.VMMMS.{VmName}.Size10Minutes" units="MiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner> @@ -2475,7 +2475,7 @@ </histogram> <histogram name="Memory.VMMMS.{VmName}.StallThroughput" units="MiB/s" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kalutes@google.com</owner> <owner>cwd@google.com</owner> <owner>cros-vm-technology@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/mobile/histograms.xml b/tools/metrics/histograms/metadata/mobile/histograms.xml index b344f9d..5ee197f 100644 --- a/tools/metrics/histograms/metadata/mobile/histograms.xml +++ b/tools/metrics/histograms/metadata/mobile/histograms.xml
@@ -303,7 +303,7 @@ </histogram> <histogram name="Mobile.Messages.Banner.Dismiss.{MobileInfobarType}" - enum="MobileMessagesBannerDismissType" expires_after="2025-05-04"> + enum="MobileMessagesBannerDismissType" expires_after="2025-07-06"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-team@google.com</owner> <summary> @@ -366,7 +366,7 @@ </histogram> <histogram name="Mobile.Messages.Modal.Event.{MobileInfobarType}" - enum="MobileMessagesModalEvent" expires_after="2025-05-04"> + enum="MobileMessagesModalEvent" expires_after="2025-07-06"> <owner>thegreenfrog@chromium.org</owner> <owner>bling-team@google.com</owner> <summary>Records generic infobar modal events. {MobileInfobarType}</summary> @@ -970,7 +970,7 @@ </histogram> <histogram name="MobileFre.FromLaunch.{Target}" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>skym@chromium.org</owner> <owner>wenyufu@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml index 04d369e..e31b565 100644 --- a/tools/metrics/histograms/metadata/navigation/histograms.xml +++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -329,7 +329,7 @@ </histogram> <histogram name="BackForwardCache.HistoryNavHasPotentialMatch" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -504,7 +504,7 @@ </histogram> <histogram name="BackForwardCache.NewPageNavHasPotentialMatch" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -518,7 +518,7 @@ </histogram> <histogram name="BackForwardCache.NewPageNavHasPotentialMatchWithNoSubframes" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -532,7 +532,7 @@ </histogram> <histogram name="BackForwardCache.NonRestoredNavigationDirection" - enum="HistoryNavigationDirection" expires_after="2025-05-04"> + enum="HistoryNavigationDirection" expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -610,7 +610,7 @@ </histogram> <histogram name="BackForwardCache.RestoredNavigationDirection" - enum="HistoryNavigationDirection" expires_after="2025-05-04"> + enum="HistoryNavigationDirection" expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>bfcache-dev@chromium.org</owner> <summary> @@ -874,7 +874,7 @@ </histogram> <histogram name="Navigation.DuringGesture.NavStarted{NavigationMode}" - enum="Boolean" expires_after="2025-04-27"> + enum="Boolean" expires_after="2025-07-06"> <owner>lazzzis@google.com</owner> <owner>liuwilliam@chromium.org</owner> <owner>chrome-seamless-core@google.com</owner> @@ -1265,7 +1265,7 @@ </histogram> <histogram name="Navigation.IsSameSiteInstance" - enum="NavigationIsSameSiteInstance" expires_after="2025-05-04"> + enum="NavigationIsSameSiteInstance" expires_after="2025-07-06"> <owner>arthursonzogni@chromium.org</owner> <owner>clamy@chromium.org</owner> <owner>nasko@chromium.org</owner> @@ -1627,7 +1627,7 @@ </histogram> <histogram name="Navigation.PendingCommit.Duration.{RegularOrMHTMLType}" - units="ms" expires_after="2025-05-05"> + units="ms" expires_after="2025-07-06"> <owner>dcheng@chromium.org</owner> <owner>rakina@chromium.org</owner> <summary> @@ -2611,7 +2611,7 @@ </histogram> <histogram name="Navigation.{TracedMethod}" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>rakina@chromium.org</owner> <owner>chrome-security-architecture@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/nearby/histograms.xml b/tools/metrics/histograms/metadata/nearby/histograms.xml index 3cd7a93..951d763 100644 --- a/tools/metrics/histograms/metadata/nearby/histograms.xml +++ b/tools/metrics/histograms/metadata/nearby/histograms.xml
@@ -257,7 +257,7 @@ <histogram name="Nearby.Connections.BleV2.StartAdvertising.Result{AdvertisementType}" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>dclasson@google.com</owner> <owner>chromeos-cross-device-eng@google.com</owner> <summary> @@ -329,7 +329,7 @@ </histogram> <histogram name="Nearby.Connections.Bluetooth.ClassicMedium.{Operation}.Result" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary>Records the result of {Operation}.</summary> @@ -450,7 +450,7 @@ </histogram> <histogram name="Nearby.Connections.InstantMessaging.{Direction}Express.Result" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -750,7 +750,7 @@ </histogram> <histogram name="Nearby.Connections.{Medium}.Socket.{Operation}.Result" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hansenmichael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1421,7 +1421,7 @@ </histogram> <histogram name="Nearby.Share.Certificates.Storage.{Operation}SuccessRate" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1618,7 +1618,7 @@ </histogram> <histogram name="Nearby.Share.DeviceType{Direction}" - enum="NearbyShareDeviceType" expires_after="2025-04-30"> + enum="NearbyShareDeviceType" expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1634,7 +1634,7 @@ </histogram> <histogram name="Nearby.Share.Discovery.Delay.FromStartDiscoveryTo{EndState}" - units="ms" expires_after="2025-04-30"> + units="ms" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1671,7 +1671,7 @@ </histogram> <histogram name="Nearby.Share.Discovery.NumShareTargets.{Variation}" - units="share targets" expires_after="2025-04-30"> + units="share targets" expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1902,7 +1902,7 @@ </histogram> <histogram name="Nearby.Share.Payload.FinalStatus{UpgradedMedium}" - enum="NearbyShareFinalStatus" expires_after="2025-04-30"> + enum="NearbyShareFinalStatus" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1933,7 +1933,7 @@ <histogram name="Nearby.Share.Payload.Medium.Over5MbTransferred{ShareTargetType}" - enum="NearbyShareUpgradedMedium" expires_after="2025-04-30"> + enum="NearbyShareUpgradedMedium" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1952,7 +1952,7 @@ </histogram> <histogram name="Nearby.Share.Payload.NumAttachments{Type}" units="attachments" - expires_after="2025-04-30"> + expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -1968,7 +1968,7 @@ </histogram> <histogram name="Nearby.Share.Payload.TotalSize{Variation}" units="KB" - expires_after="2025-04-30"> + expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -2001,7 +2001,7 @@ </histogram> <histogram name="Nearby.Share.Payload.TransferRate{Variation}" units="KB/s" - expires_after="2025-04-30"> + expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -2084,7 +2084,7 @@ </histogram> <histogram name="Nearby.Share.StartAdvertising.Result.FailureReason{Mode}" - enum="NearbyShareStartAdvertisingFailureReason" expires_after="2025-04-30"> + enum="NearbyShareStartAdvertisingFailureReason" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -2098,7 +2098,7 @@ </histogram> <histogram name="Nearby.Share.StartAdvertising.Result{Mode}" - enum="BooleanSuccess" expires_after="2025-04-30"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>pushi@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -2139,7 +2139,7 @@ </histogram> <histogram name="Nearby.Share.Transfer.FinalStatus{Variation}" - enum="NearbyShareTransferFinalStatus" expires_after="2025-04-30"> + enum="NearbyShareTransferFinalStatus" expires_after="2025-07-06"> <owner>crisrael@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> <summary> @@ -2242,7 +2242,7 @@ <histogram name="Nearby.Share.TransferDuration.Receiver.BandwidthUpgradeToAllFilesReceived2{TransferMedium}" - units="ms" expires_after="2025-04-30"> + units="ms" expires_after="2025-07-06"> <owner>jackshira@google.com</owner> <owner>dclasson@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner> @@ -2324,7 +2324,7 @@ <histogram name="Nearby.Share.TransferDuration.Sender.ConnectionEstablishedToBandwidthUpgrade2{TransferMedium}" - units="ms" expires_after="2025-04-30"> + units="ms" expires_after="2025-07-06"> <owner>jackshira@google.com</owner> <owner>dclasson@google.com</owner> <owner>nearby-share-chromeos-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml index f8697b3..efc1113c4 100644 --- a/tools/metrics/histograms/metadata/net/histograms.xml +++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -442,7 +442,7 @@ </histogram> <histogram name="HttpCache.IsNoStore{Type}" enum="Boolean" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -909,7 +909,7 @@ </histogram> <histogram name="Net.ContentEncodingType" enum="ContentEncodingType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>nidhijaju@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -921,7 +921,7 @@ </histogram> <histogram name="Net.Cors.PreflightCheckError2" enum="CorsAccessCheckError" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>toyoshim@chromium.org</owner> <owner>src/services/network/OWNERS</owner> <summary> @@ -1962,7 +1962,7 @@ </histogram> <histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mpdenton@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2456,7 +2456,7 @@ </histogram> <histogram name="Net.HttpStreamPool.JobCompleteTime.{Result}" units="ms" - expires_after="2025-02-27"> + expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -2471,7 +2471,7 @@ </histogram> <histogram name="Net.HttpStreamPool.JobCreateToResumeTime.{Result}" units="ms" - expires_after="2025-02-27"> + expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -2641,7 +2641,7 @@ <histogram name="Net.NetworkTransaction.GenerateProxyAuthTokenBlocked{HostType}.{Protocol}" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2670,7 +2670,7 @@ <histogram name="Net.NetworkTransaction.GenerateServerAuthTokenBlocked{HostType}.{Protocol}" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2699,7 +2699,7 @@ <histogram name="Net.NetworkTransaction.InitializeStreamBlocked{HostType}.{Protocol}" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -2712,7 +2712,7 @@ <histogram name="Net.NetworkTransaction.InitializeStreamBlockTime{HostType}.{Protocol}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -4708,7 +4708,7 @@ </histogram> <histogram name="Net.QuicSession.SessionKeyMismatch{HostType}" - enum="QuicSessionKeyPartialMatchResult" expires_after="2025-03-30"> + enum="QuicSessionKeyPartialMatchResult" expires_after="2025-07-06"> <owner>suzukikeita@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary> @@ -5053,7 +5053,7 @@ </histogram> <histogram name="Net.QuicSession.ZeroRttReasonNonGoogle" - enum="SSLHandshakeEarlyDataReason" expires_after="2025-05-04"> + enum="SSLHandshakeEarlyDataReason" expires_after="2025-07-06"> <owner>bashi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -5435,7 +5435,7 @@ <histogram name="Net.SharedDictionaryOnDisk.OpenEntryLatency.{SuccessOrFailure}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5446,7 +5446,7 @@ </histogram> <histogram name="Net.SharedDictionaryOnDisk.ReadDataLatency.{SuccessOrFailure}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5467,7 +5467,7 @@ </histogram> <histogram name="Net.SharedDictionaryStorageOnDisk.MetadataReadTime.{Result}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5504,7 +5504,7 @@ </histogram> <histogram name="Net.SharedDictionaryStore.{MethodName}.Error" - enum="SharedDictionaryStoreError" expires_after="2025-04-27"> + enum="SharedDictionaryStoreError" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5530,7 +5530,7 @@ <histogram name="Net.SharedDictionaryTransaction.AbortedWhileReadingDictionary.{SuccessOrFailure}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5544,7 +5544,7 @@ <histogram name="Net.SharedDictionaryTransaction.DictionaryReadLatency.{SuccessOrFailure}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5556,7 +5556,7 @@ </histogram> <histogram name="Net.SharedDictionaryTransaction.NetResultWithDict.{CertState}" - enum="NetErrorCodes" expires_after="2025-04-27"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5573,7 +5573,7 @@ <histogram name="Net.SharedDictionaryUsedByResponseWhenAvailable2.MainFrame.{ConnectionType}.{CertState}" - enum="Boolean" expires_after="2025-04-27"> + enum="Boolean" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -5596,7 +5596,7 @@ <histogram name="Net.SharedDictionaryUsedResponseErrorCodes2.{DestinationType}.{CertState}" - enum="NetErrorCodes" expires_after="2025-04-27"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>horo@chromium.org</owner> <owner>src/net/extras/shared_dictionary/OWNERS</owner> <summary> @@ -6378,7 +6378,7 @@ </histogram> <histogram name="Net.ZstdFilter.CompressionRatio" units="%" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>nidhijaju@chromium.org</owner> <owner>blink-network-stack@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/network/histograms.xml b/tools/metrics/histograms/metadata/network/histograms.xml index 4664655..958b0daa 100644 --- a/tools/metrics/histograms/metadata/network/histograms.xml +++ b/tools/metrics/histograms/metadata/network/histograms.xml
@@ -137,7 +137,7 @@ </histogram> <histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.ApnTypes" - enum="ApnTypes" expires_after="2025-05-04"> + enum="ApnTypes" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -147,7 +147,7 @@ </histogram> <histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.AuthenticationType" - enum="ApnAuthenticationType" expires_after="2025-05-04"> + enum="ApnAuthenticationType" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -157,7 +157,7 @@ </histogram> <histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.IpType" - enum="ApnIpType" expires_after="2025-05-04"> + enum="ApnIpType" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -167,7 +167,7 @@ </histogram> <histogram name="Network.Ash.Cellular.Apn.CreateCustomApn.Result" - enum="CreateCustomApnResult" expires_after="2025-05-04"> + enum="CreateCustomApnResult" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary>Records the result of an attempt to create a custom APN.</summary> @@ -235,7 +235,7 @@ </histogram> <histogram name="Network.Ash.Cellular.Apn.CustomApns.{CustomApnState}.Count" - units="count" expires_after="2025-04-27"> + units="count" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -388,7 +388,7 @@ </histogram> <histogram name="Network.Ash.Cellular.ConnectionResult.{CustomApnsStatus}.All" - enum="ShillConnectResult" expires_after="2025-04-27"> + enum="ShillConnectResult" expires_after="2025-07-06"> <owner>nikhilcn@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -469,7 +469,7 @@ <histogram name="Network.Ash.Cellular.ESim.SmdsScan.{SmdsScanMethod}.ProfileCount" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>chadduffin@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -486,7 +486,7 @@ <histogram name="Network.Ash.Cellular.ESim.SmdsScan.{SmdsType}.{UserErrorHandling}" - enum="ESimOperationResult" expires_after="2025-04-27"> + enum="ESimOperationResult" expires_after="2025-07-06"> <owner>chadduffin@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -507,7 +507,7 @@ <histogram name="Network.Ash.Cellular.ESim.SmdsScanDuration2.{SmdsType}.{DurationType}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>chadduffin@google.com</owner> <owner>tjohnsonkanu@google.com</owner> <owner>cros-device-enablement@google.com</owner> @@ -669,7 +669,7 @@ </histogram> <histogram name="Network.Ash.Hotspot.Upstream.Cellular.Disabled.Reason" - enum="HotspotDisableReason" expires_after="2025-05-04"> + enum="HotspotDisableReason" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -733,7 +733,7 @@ </histogram> <histogram name="Network.Ash.Hotspot.Upstream.Cellular.Usage.Duration" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -766,7 +766,7 @@ <histogram name="Network.Ash.Hotspot.Upstream.Cellular.{Operation}.OperationResult" - enum="HotspotSetEnabledResult" expires_after="2025-04-27"> + enum="HotspotSetEnabledResult" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -780,7 +780,7 @@ </histogram> <histogram name="Network.Ash.VPN.{VPNProviderType}.ConfigurationSource" - enum="VPNConfigurationSource" expires_after="2025-04-27"> + enum="VPNConfigurationSource" expires_after="2025-07-06"> <owner>chadduffin@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -824,7 +824,7 @@ </histogram> <histogram name="Network.Ash.WiFi.Hidden.{LoginStatus}" enum="Boolean" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>chadduffin@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -871,7 +871,7 @@ </histogram> <histogram name="Network.Ash.WiFiDirect.{GroupType}.DisconnectReason" - enum="WifiP2PDisconnectReason" expires_after="2025-04-27"> + enum="WifiP2PDisconnectReason" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -885,7 +885,7 @@ </histogram> <histogram name="Network.Ash.WiFiDirect.{Operation}.OperationResult" - enum="WifiP2POperationResult" expires_after="2025-04-27"> + enum="WifiP2POperationResult" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -901,7 +901,7 @@ </histogram> <histogram name="Network.Ash.{NetworkType}.ConnectionResult.NonUserInitiated" - enum="ShillConnectResult" expires_after="2025-04-27"> + enum="ShillConnectResult" expires_after="2025-07-06"> <owner>jiajunz@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -913,7 +913,7 @@ </histogram> <histogram name="Network.Ash.{NetworkType}.ConnectionResult.UserInitiated" - enum="UserInitiatedNetworkConnectResult" expires_after="2025-04-27"> + enum="UserInitiatedNetworkConnectResult" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -924,7 +924,7 @@ </histogram> <histogram name="Network.Ash.{NetworkType}.ConnectionResult.{Filtering}" - enum="ShillConnectResult" expires_after="2025-04-27"> + enum="ShillConnectResult" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -944,7 +944,7 @@ </histogram> <histogram name="Network.Ash.{NetworkType}.DisconnectionsWithoutUserAction" - enum="NetworkConnectionState" expires_after="2025-04-27"> + enum="NetworkConnectionState" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -956,7 +956,7 @@ <histogram name="Network.Ash.{NetworkType}.DisconnectionsWithoutUserAction.ShillError" - enum="ShillConnectResult" expires_after="2025-04-27"> + enum="ShillConnectResult" expires_after="2025-07-06"> <owner>chadduffin@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -967,7 +967,7 @@ </histogram> <histogram name="Network.Ash.{TechnologyType}.EnabledState.{Operation}.Result" - enum="BooleanSuccess" expires_after="2025-04-27"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -988,7 +988,7 @@ <histogram name="Network.Ash.{TechnologyType}.EnabledState.{Operation}.ResultCode" - enum="ShillConnectResult" expires_after="2025-04-27"> + enum="ShillConnectResult" expires_after="2025-07-06"> <owner>nikhilcn@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1009,7 +1009,7 @@ </histogram> <histogram name="Network.CaptivePortalResult" enum="CaptivePortalNetworkState" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -1485,7 +1485,7 @@ </histogram> <histogram name="Network.Cellular.Pin.{SimPinOperation}" - enum="SimPinOperationResult" expires_after="2025-04-27"> + enum="SimPinOperationResult" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1564,7 +1564,7 @@ </histogram> <histogram name="Network.Cellular.{SimPinOperation}.SimPINLockPolicy" - enum="BooleanEnabled" expires_after="2025-04-27"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>nikhilcn@chromium.org</owner> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> @@ -1599,7 +1599,7 @@ </histogram> <histogram name="Network.Cellular.{SimType}.ConnectionResult.All" - enum="ShillCellularConnectResult" expires_after="2025-04-27"> + enum="ShillCellularConnectResult" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1618,7 +1618,7 @@ </histogram> <histogram name="Network.Cellular.{SimType}.ConnectionResult.UserInitiated" - enum="UserInitiatedCellularConnectResult" expires_after="2025-04-27"> + enum="UserInitiatedCellularConnectResult" expires_after="2025-07-06"> <owner>hsuregan@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1662,7 +1662,7 @@ </histogram> <histogram name="Network.Cellular.{SimType}.ServiceAtLoginCount{PolicyState}" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>khorimoto@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -1711,7 +1711,7 @@ </histogram> <histogram name="Network.DnsProxy.DnsOverHttpsMode" - enum="DnsProxy.DnsOverHttpsMode" expires_after="2025-05-04"> + enum="DnsProxy.DnsOverHttpsMode" expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1741,7 +1741,7 @@ </histogram> <histogram name="Network.DnsProxy.PlainTextProbe.{Family}.Errors" - enum="DnsProxy.QueryError" expires_after="2025-05-04"> + enum="DnsProxy.QueryError" expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1756,7 +1756,7 @@ </histogram> <histogram name="Network.DnsProxy.PlainTextProbe.{Family}.FailedRetries" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1771,7 +1771,7 @@ </histogram> <histogram name="Network.DnsProxy.PlainTextProbe.{Family}.Results" - enum="DnsProxy.QueryResult" expires_after="2025-05-04"> + enum="DnsProxy.QueryResult" expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1786,7 +1786,7 @@ </histogram> <histogram name="Network.DnsProxy.PlainTextProbe.{Family}.ResultsWithRetries" - enum="DnsProxy.QueryResult" expires_after="2025-05-04"> + enum="DnsProxy.QueryResult" expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1802,7 +1802,7 @@ </histogram> <histogram name="Network.DnsProxy.PlainTextProbe.{Family}.RetriesUntilSuccess" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1853,7 +1853,7 @@ </histogram> <histogram name="Network.DnsProxy.Query.{Stage}Duration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1889,7 +1889,7 @@ </histogram> <histogram name="Network.DnsProxy.{Family}Nameservers" units="units" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1922,7 +1922,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.Errors" - enum="DnsProxy.QueryError" expires_after="2025-05-04"> + enum="DnsProxy.QueryError" expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1937,7 +1937,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.FailedResolveDuration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1958,7 +1958,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.ResolveDuration" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1979,7 +1979,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.Results" - enum="DnsProxy.QueryResult" expires_after="2025-05-04"> + enum="DnsProxy.QueryResult" expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1994,7 +1994,7 @@ </histogram> <histogram name="Network.DnsProxy.{Type}Query.ResultsWithRetries" - enum="DnsProxy.QueryResult" expires_after="2025-05-04"> + enum="DnsProxy.QueryResult" expires_after="2025-07-06"> <owner>garrick@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2080,7 +2080,7 @@ </histogram> <histogram name="Network.Multicast.{Technology}.ConnectedCount" units="packets" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>jasongustaman@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2149,7 +2149,7 @@ </histogram> <histogram name="Network.NetworkPortalNotificationState" - enum="CaptivePortalNetworkState" expires_after="2025-05-04"> + enum="CaptivePortalNetworkState" expires_after="2025-07-06"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -2160,7 +2160,7 @@ </histogram> <histogram name="Network.NetworkPortalSigninMode" - enum="NetworkPortalSigninMode" expires_after="2025-05-04"> + enum="NetworkPortalSigninMode" expires_after="2025-07-06"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -2180,7 +2180,7 @@ </histogram> <histogram name="Network.NetworkPortalSigninTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -2272,7 +2272,7 @@ </histogram> <histogram name="Network.RedirectFoundToOnlineTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>stevenjb@chromium.org</owner> <owner>cros-network-health-team@google.com</owner> <summary> @@ -2345,7 +2345,7 @@ </histogram> <histogram name="Network.Shill.CAPPORT.ContainsVenueInfoURL" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>akahuang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2357,7 +2357,7 @@ </histogram> <histogram name="Network.Shill.CAPPORT.MaxSecondsRemaining" units="seconds" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>akahuang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2369,7 +2369,7 @@ </histogram> <histogram name="Network.Shill.CAPPORT.QueryResult" enum="CAPPORTQueryResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>akahuang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2633,7 +2633,7 @@ </histogram> <histogram name="Network.Shill.ConnectionDiagnosticsIssue" - enum="ConnectionDiagnosticsIssue" expires_after="2025-05-04"> + enum="ConnectionDiagnosticsIssue" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2646,7 +2646,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.DevicePresenceStatus" - enum="BooleanPresent" expires_after="2025-05-04"> + enum="BooleanPresent" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2656,7 +2656,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.Driver" enum="EthernetDriver" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>chuweih@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2691,7 +2691,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.ServiceErrors" - enum="NetworkServiceError" expires_after="2025-05-04"> + enum="NetworkServiceError" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2701,7 +2701,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2714,7 +2714,7 @@ </histogram> <histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2814,7 +2814,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.AggregateResult.{Technology}" - enum="PortalDetectorAggregateResult" expires_after="2025-05-04"> + enum="PortalDetectorAggregateResult" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2877,7 +2877,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.CAPPORTSupported.{Technology}" - enum="NetworkCAPPORTSupport" expires_after="2025-05-04"> + enum="NetworkCAPPORTSupport" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -2977,7 +2977,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.InitialResult.{Technology}" - enum="PortalDetectorResult" expires_after="2025-05-04"> + enum="PortalDetectorResult" expires_after="2025-07-06"> <owner>hugobenichi@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3012,7 +3012,7 @@ <histogram name="Network.Shill.PortalDetector.{AttemptResult}Duration.{Technology}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3043,7 +3043,7 @@ </histogram> <histogram name="Network.Shill.PortalDetector.{Transition}.{Technology}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>hugobenichi@google.com</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3078,7 +3078,7 @@ </histogram> <histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -3290,7 +3290,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPType" enum="NetworkIPType" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3315,7 +3315,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv4ExcludedRoutesNumber" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3327,7 +3327,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv4IncludedRoutesLargestPrefix" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3340,7 +3340,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv4IncludedRoutesNumber" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3354,7 +3354,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv4RoutingType" - enum="VPNRoutingType" expires_after="2025-04-27"> + enum="VPNRoutingType" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3383,7 +3383,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv6ExcludedRoutesNumber" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3408,7 +3408,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv6IncludedRoutesNumber" - units="units" expires_after="2025-04-27"> + units="units" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3422,7 +3422,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.IPv6RoutingType" - enum="VPNRoutingType" expires_after="2025-04-27"> + enum="VPNRoutingType" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3438,7 +3438,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.MTU" units="units" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3450,7 +3450,7 @@ </histogram> <histogram name="Network.Shill.Vpn.{VPNType}.NameServers" enum="VPNNameServers" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -3537,7 +3537,7 @@ </histogram> <histogram name="Network.Shill.WiFi.AdapterAllowlisted" - enum="WiFiAdapterInAllowlist" expires_after="2025-05-04"> + enum="WiFiAdapterInAllowlist" expires_after="2025-07-06"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -4610,7 +4610,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.DHCPv4ProvisionDurationMillis" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4624,7 +4624,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.IPType" enum="NetworkIPType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4639,7 +4639,7 @@ </histogram> <histogram name="Network.Shill.{Technology}.SLAACProvisionDurationMillis" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>jiejiang@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <owner>cros-network-metrics@google.com</owner> @@ -4982,7 +4982,7 @@ </histogram> <histogram name="NetworkService.IpProtection.EmptyTokenCache" - enum="IpProtectionProxyLayer" expires_after="2025-05-04"> + enum="IpProtectionProxyLayer" expires_after="2025-07-06"> <owner>djmitche@chromium.org</owner> <owner>ashleynewson@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> @@ -5223,7 +5223,7 @@ </histogram> <histogram name="NetworkService.IpProtection.TokenBatchGenerationTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>ashleynewson@chromium.org</owner> <owner>src/android_webview/OWNERS</owner> <owner>src/chrome/browser/ip_protection/OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml index 0ce3bd0..b8ef9f8 100644 --- a/tools/metrics/histograms/metadata/new_tab_page/histograms.xml +++ b/tools/metrics/histograms/metadata/new_tab_page/histograms.xml
@@ -279,7 +279,7 @@ </histogram> <histogram name="NewTabPage.CustomizeChromeSidePanelImpression" - enum="NTPCustomizeChromeSidePanelImpression" expires_after="2025-05-03"> + enum="NTPCustomizeChromeSidePanelImpression" expires_after="2025-07-06"> <owner>howardcha@google.com</owner> <owner>tiborg@chromium.org</owner> <owner>webstore-eng@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/omnibox/histograms.xml b/tools/metrics/histograms/metadata/omnibox/histograms.xml index 266969f6..e97f5510 100644 --- a/tools/metrics/histograms/metadata/omnibox/histograms.xml +++ b/tools/metrics/histograms/metadata/omnibox/histograms.xml
@@ -1290,7 +1290,7 @@ </histogram> <histogram name="Omnibox.NumberOfVisibleCharacters" units="characters" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>peilinwang@google.com</owner> <owner>woa-performance-bugs+jank@google.com</owner> <summary> @@ -2425,7 +2425,7 @@ <histogram name="Omnibox.URLScoringModelExecuted.ScoringSignalCoverage.{ProviderType}.{ScoringSignalType}" - enum="BooleanNonNull" expires_after="2025-04-27"> + enum="BooleanNonNull" expires_after="2025-07-06"> <owner>khalidpeer@chromium.org</owner> <owner>manukh@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> @@ -2644,7 +2644,7 @@ </histogram> <histogram name="Omnibox.{SearchPrefetch}.CacheAliasElapsedTimeToFallback" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>nhiroki@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -2659,7 +2659,7 @@ </histogram> <histogram name="Omnibox.{SearchPrefetch}.CacheAliasFallbackReason" - enum="SearchPrefetchCacheAliasFallbackReason" expires_after="2025-05-04"> + enum="SearchPrefetchCacheAliasFallbackReason" expires_after="2025-07-06"> <owner>nhiroki@chromium.org</owner> <owner>chrome-prerendering@google.com</owner> <summary> @@ -2835,7 +2835,7 @@ </histogram> <histogram name="Realbox.CharTypedToRepaintLatency.ToPaint" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mahmadi@chromium.org</owner> <owner>chrome-desktop-search@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/oobe/histograms.xml b/tools/metrics/histograms/metadata/oobe/histograms.xml index a1fb6f2..89a3b4a 100644 --- a/tools/metrics/histograms/metadata/oobe/histograms.xml +++ b/tools/metrics/histograms/metadata/oobe/histograms.xml
@@ -498,7 +498,7 @@ </histogram> <histogram name="OOBE.CategoriesSelectionScreen.LoadingTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -509,7 +509,7 @@ </histogram> <histogram name="OOBE.CategoriesSelectionScreen.SelectedUseCaseIDs" - units="useCaseID" expires_after="2025-05-04"> + units="useCaseID" expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -520,7 +520,7 @@ </histogram> <histogram name="OOBE.CategoriesSelectionScreen.SelectedUseCasesCount" - units="use-cases" expires_after="2025-05-04"> + units="use-cases" expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -532,7 +532,7 @@ </histogram> <histogram name="OOBE.CategoriesSelectionScreen.SelectedUseCasesPercentage" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -543,7 +543,7 @@ </histogram> <histogram name="OOBE.CHOOBE.FlowSkipped" enum="BooleanSkipped" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>osamafathy@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -678,7 +678,7 @@ </histogram> <histogram name="OOBE.ConsumerUpdateScreen.UpdateAvailable" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bchikhaoui@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -1173,7 +1173,7 @@ </histogram> <histogram name="OOBE.PersonalizedAppsScreen.SelectedAppsTotalCount" - units="apps" expires_after="2025-05-04"> + units="apps" expires_after="2025-07-06"> <owner>bohdanty@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -1295,7 +1295,7 @@ </histogram> <histogram name="OOBE.StepCompletionTime2.{OOBEOnlyScreenName}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>osamafathy@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -1394,7 +1394,7 @@ </histogram> <histogram name="OOBE.SyncConsentScreen.IsMinorUser" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>osamafathy@google.com</owner> <owner>cros-oobe@google.com</owner> <summary> @@ -1462,7 +1462,7 @@ </histogram> <histogram name="OOBE.SyncConsentScreen.UserChoice" - enum="SyncConsentUserChoice" expires_after="2025-05-04"> + enum="SyncConsentUserChoice" expires_after="2025-07-06"> <owner>osamafathy@google.com</owner> <owner>cros-oobe@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/optimization/histograms.xml b/tools/metrics/histograms/metadata/optimization/histograms.xml index b38686f..d8cee1f 100644 --- a/tools/metrics/histograms/metadata/optimization/histograms.xml +++ b/tools/metrics/histograms/metadata/optimization/histograms.xml
@@ -462,7 +462,7 @@ </histogram> <histogram name="OptimizationGuide.HintsFetcher.GetHintsRequest.HintCount" - units="units" expires_after="2025-05-04"> + units="units" expires_after="2025-07-06"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -551,7 +551,7 @@ </histogram> <histogram name="OptimizationGuide.HintsManager.ActiveTabUrlsToFetchFor" - units="counts" expires_after="2025-05-04"> + units="counts" expires_after="2025-07-06"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -575,7 +575,7 @@ <histogram name="OptimizationGuide.HintsManager.ConcurrentPageNavigationFetches" - units="counts" expires_after="2025-05-04"> + units="counts" expires_after="2025-07-06"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -851,7 +851,7 @@ </histogram> <histogram name="OptimizationGuide.ModelExecution.OnDeviceModelStatusAtUseTime" - enum="OptimizationGuideOnDeviceModelStatus" expires_after="2025-05-04"> + enum="OptimizationGuideOnDeviceModelStatus" expires_after="2025-07-06"> <owner>harringtond@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1084,7 +1084,7 @@ <histogram name="OptimizationGuide.ModelExecutor.ExecutionThreadTime.{OptimizationTarget}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>sophiechang@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1144,7 +1144,7 @@ <histogram name="OptimizationGuide.ModelExecutor.TaskExecutionLatency.{OptimizationTarget}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mcrouse@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1336,7 +1336,7 @@ <histogram name="OptimizationGuide.PageContentAnnotations.GoogleSearchMetadataExtracted" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>sophiechang@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1419,7 +1419,7 @@ <histogram name="OptimizationGuide.PageContentAnnotationsService.RelatedSearchesCache.CacheHit" - enum="BooleanCacheHit" expires_after="2025-05-04"> + enum="BooleanCacheHit" expires_after="2025-07-06"> <owner>khalidpeer@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1538,7 +1538,7 @@ <histogram name="OptimizationGuide.PredictionManager.IsDownloadUrlValid.{OptimizationTarget}" - enum="BooleanValid" expires_after="2025-05-04"> + enum="BooleanValid" expires_after="2025-07-06"> <owner>sophiechang@chromium.org</owner> <owner>mcrouse@chromium.org</owner> <summary> @@ -1592,7 +1592,7 @@ <histogram name="OptimizationGuide.PredictionModelDownloadManager.DownloadStartLatency.{OptimizationTarget}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>rajendrant@chromium.org</owner> <owner>chrome-intelligence-core@google.com</owner> <summary> @@ -1683,7 +1683,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.NetErrorCode" - enum="NetErrorCodes" expires_after="2025-05-04"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1713,7 +1713,7 @@ <histogram name="OptimizationGuide.PredictionModelFetcher.GetModelsResponse.Status" - enum="HttpResponseCode" expires_after="2025-05-04"> + enum="HttpResponseCode" expires_after="2025-07-06"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary> @@ -1840,7 +1840,7 @@ </histogram> <histogram name="OptimizationGuide.ProcessHintsResult" - enum="OptimizationGuideProcessHintsResult" expires_after="2025-05-04"> + enum="OptimizationGuideProcessHintsResult" expires_after="2025-07-06"> <owner>mcrouse@chromium.org</owner> <owner>sophiechang@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index c2279ac..8f5f003a 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -624,7 +624,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.BidFiltered" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -639,7 +639,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.BidScriptTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>behamilton@google.com</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -654,7 +654,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ConfigPromises.CriticalPathLatency" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>orrb@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -674,7 +674,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ConfigPromises.Latency" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>orrb@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -692,7 +692,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ContextReused" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -739,7 +739,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.DownloadThreadDelay" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>morlovich@google.com</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -755,7 +755,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.FinalReporterState" - enum="InterestGroupAuctionReporterState" expires_after="2025-05-04"> + enum="InterestGroupAuctionReporterState" expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -795,7 +795,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.GenerateBidTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -809,7 +809,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.GroupFreshness.{Type}" - units="minutes" expires_after="2025-05-04"> + units="minutes" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -860,7 +860,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.LoadGroupsCacheHit" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -874,7 +874,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.LoadGroupsTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -888,7 +888,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.LoadGroupsUseInProgressLoad" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -902,7 +902,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.LoadNoGroupsTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -932,7 +932,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumAuctionsPerPage" units="auctions" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -949,7 +949,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumAuctionsSkippedDueToAuctionLimit" - units="auctions" expires_after="2025-05-04"> + units="auctions" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -964,7 +964,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumberOfPendingScoreAdTasks" - units="tasks" expires_after="2025-05-04"> + units="tasks" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -992,7 +992,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumInterestGroups" units="groups" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -1008,7 +1008,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumNegativeInterestGroups" - units="groups" expires_after="2025-05-04"> + units="groups" expires_after="2025-07-06"> <owner>orrb@google.com</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1029,7 +1029,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumOwnerOriginsCachedForPreconnect" - units="owners" expires_after="2025-05-04"> + units="owners" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1047,7 +1047,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumOwnersWithInterestGroups" - units="owners" expires_after="2025-05-04"> + units="owners" expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -1084,7 +1084,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.NumSellersWithBidders" - units="sellers" expires_after="2025-05-04"> + units="sellers" expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -1130,7 +1130,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.PercentAuctionsSuccessfulPerPage" - units="%" expires_after="2025-05-04"> + units="%" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -1196,7 +1196,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ProcessLaunchTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1234,7 +1234,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ScoreAdInputWaitTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1246,7 +1246,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ScoreAdQueueTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1270,7 +1270,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.ScoreAdTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1315,7 +1315,7 @@ </histogram> <histogram name="Ads.InterestGroup.Auction.TimeSinceLastAuctionPerPage" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -1525,7 +1525,7 @@ </histogram> <histogram name="Ads.InterestGroup.GetInterestGroupAdAuctionData.TimeToResolve" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1555,7 +1555,7 @@ </histogram> <histogram name="Ads.InterestGroup.Net.DownloadTime.{Type}" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -1584,7 +1584,7 @@ </histogram> <histogram name="Ads.InterestGroup.Net.RequestUrlSizeBytes.{Type}" - units="bytes" expires_after="2025-05-04"> + units="bytes" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -1616,7 +1616,7 @@ </histogram> <histogram name="Ads.InterestGroup.Net.ResponseSizeBytes.{Type}" units="bytes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -1692,7 +1692,7 @@ <histogram name="Ads.InterestGroup.NetHeaderResponse.HeaderDirectFromSellerSignals.ParseAndFindMatchTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>caraitto@chromium.org</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -1935,7 +1935,7 @@ </histogram> <histogram name="Ads.InterestGroup.ServerAuction.EndToEndTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -2005,7 +2005,7 @@ </histogram> <histogram name="Ads.InterestGroup.ServerAuction.KeyFetch.DBCached" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>abigailkatcoff@google.com</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -2180,7 +2180,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.AbortTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -2202,7 +2202,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.AuctionWithWinnerTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -2223,7 +2223,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.CompletedWithoutWinnerTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -2247,7 +2247,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.NonKAnonWinnerIsKAnon" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>behamilton@google.com</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -2284,7 +2284,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.ReportingIdType" - enum="AuctionReportingIdField" expires_after="2025-05-04"> + enum="AuctionReportingIdField" expires_after="2025-07-06"> <owner>behamilton@google.com</owner> <owner>pauljensen@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> @@ -2303,7 +2303,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.Result" enum="AuctionResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>mmenke@chromium.org</owner> <owner>morlovich@chromium.org</owner> <summary> @@ -2324,7 +2324,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.SignaledAbortTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2346,7 +2346,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.StateAtAbortTime" - enum="AuctionState" expires_after="2025-05-04"> + enum="AuctionState" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2368,7 +2368,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.StateAtFailTime" - enum="AuctionState" expires_after="2025-05-04"> + enum="AuctionState" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2390,7 +2390,7 @@ </histogram> <histogram name="Ads.InterestGroup.{AuctionType}.TimeToResolve" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>privacy-sandbox-dev@chromium.org</owner> <summary> @@ -2907,7 +2907,7 @@ </histogram> <histogram name="ChromiumAndroidLinker.RelroSharingStatus2" - enum="RelroSharingStatus" expires_after="2025-05-04"> + enum="RelroSharingStatus" expires_after="2025-07-06"> <owner>lizeb@chromium.org</owner> <owner>pasko@chromium.org</owner> <summary> @@ -4085,7 +4085,7 @@ </histogram> <histogram name="DrmUtil.GetColorSpaceFromEdid.ChecksOutcome" - enum="EdidColorSpaceChecksOutcome" expires_after="2025-05-04"> + enum="EdidColorSpaceChecksOutcome" expires_after="2025-07-06"> <owner>andrescj@chromium.org</owner> <owner>mcasas@chromium.org</owner> <owner>sashamcintosh@chromium.org</owner> @@ -4740,7 +4740,7 @@ </histogram> <histogram name="Feedback.HappinessTrackingSurvey.SurveyCompleted" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>ravjit@google.com</owner> <owner>fjacky@google.com</owner> <summary> @@ -5962,7 +5962,7 @@ </histogram> <histogram name="LoadingPredictor.PredictorDatabaseFileSize" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>yoichio@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <component>1457018</component> @@ -6131,7 +6131,7 @@ </histogram> <histogram name="Mojo.Channel.WriteMessageSize" units="bytes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>amistry@chromium.org</owner> <owner>bgeffon@chromium.org</owner> <owner>rockot@google.com</owner> @@ -6994,7 +6994,7 @@ </histogram> <histogram name="OSCrypt.AsyncInitialization.Result" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary> @@ -7005,7 +7005,7 @@ </histogram> <histogram name="OSCrypt.AsyncInitialization.Time" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wfh@chromium.org</owner> <owner>nparker@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/page/histograms.xml b/tools/metrics/histograms/metadata/page/histograms.xml index a48c4ed..1d200e9 100644 --- a/tools/metrics/histograms/metadata/page/histograms.xml +++ b/tools/metrics/histograms/metadata/page/histograms.xml
@@ -530,7 +530,7 @@ <histogram name="PageLoad.Clients.Ads.AdPaintTiming.TopFrameNavigationToFirstAdFirstContentfulPaintAfter{Result}{AuctionType}Auction" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>abigailkatcoff@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner> <summary> @@ -3289,7 +3289,7 @@ </histogram> <histogram name="PageLoad.InteractiveTiming.ProcessingTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -3864,7 +3864,7 @@ <histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.{Scheme}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>sullivan@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <owner>chrome-analysis-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/password/enums.xml b/tools/metrics/histograms/metadata/password/enums.xml index 094d532..c317b9b 100644 --- a/tools/metrics/histograms/metadata/password/enums.xml +++ b/tools/metrics/histograms/metadata/password/enums.xml
@@ -481,6 +481,16 @@ policy"/> </enum> +<!-- LINT.IfChange(LoginDbDeprecationExportProgress)--> + +<enum name="LoginDbDeprecationExportProgress"> + <int value="0" label="Scheduled"/> + <int value="1" label="Started"/> + <int value="2" label="Finished"/> +</enum> + +<!-- LINT.ThenChange(/components/password_manager/core/browser/export/login_db_deprecation_runner.h:LoginDbDeprecationExportProgress)--> + <!-- LINT.IfChange(LoginDbDeprecationExportResult) --> <enum name="LoginDbDeprecationExportResult"> @@ -762,9 +772,10 @@ <int value="0" label="Password"/> <int value="1" label="Manage passwords"/> <int value="2" label="Generate password"/> - <int value="3" label="Unlock account-store to fill password"/> - <int value="4" label="Unlock account-store to generate password"/> - <int value="5" label="Re-Signin to unlock account-stored passwords"/> + <int value="3" label="(obsolete) Unlock account-store to fill password"/> + <int value="4" label="(obsolete) Unlock account-store to generate password"/> + <int value="5" + label="(obsolete) Re-Signin to unlock account-stored passwords"/> <int value="6" label="WebAuthn credential"/> <int value="7" label="Sign in with another WebAuthn device"/> </enum>
diff --git a/tools/metrics/histograms/metadata/password/histograms.xml b/tools/metrics/histograms/metadata/password/histograms.xml index 71e39d6..1cb589a9 100644 --- a/tools/metrics/histograms/metadata/password/histograms.xml +++ b/tools/metrics/histograms/metadata/password/histograms.xml
@@ -159,8 +159,6 @@ <variant name=".SignedInUserSavingLocally" summary="signed-in user, not opted in to the account storage, and has explicitly chosen to save passwords only on the device."/> - <variant name=".SignedOutAccountStoreUser" - summary="signed-out user, but an account storage opt-in exists."/> <variant name=".SignedOutUser" summary="signed-out user (and no account storage opt-in exists)."/> <variant name=".SyncUser" summary="syncing user."/> @@ -302,7 +300,7 @@ </histogram> <histogram name="PasswordBubble.CompromisedBubble.Type" - enum="PasswordBubbleFollowupType" expires_after="2025-05-04"> + enum="PasswordBubbleFollowupType" expires_after="2025-07-06"> <owner>vasilii@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -365,7 +363,7 @@ </histogram> <histogram name="PasswordGeneration.EditsInGeneratedPassword.{CharacterClass}" - enum="CharacterClassPresenceChange" expires_after="2025-05-04"> + enum="CharacterClassPresenceChange" expires_after="2025-07-06"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -796,7 +794,7 @@ </histogram> <histogram name="PasswordManager.AffiliationFetcher.FetchTime.{Status}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -811,7 +809,7 @@ </histogram> <histogram name="PasswordManager.AffiliationFetcher.ResponseSize.{Status}" - units="bytes" expires_after="2025-05-04"> + units="bytes" expires_after="2025-07-06"> <owner>vsemeniuk@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -881,7 +879,7 @@ </histogram> <histogram name="PasswordManager.AuthenticationAsyncOpFailureReson" - enum="Hresult" expires_after="2025-05-04"> + enum="Hresult" expires_after="2025-07-06"> <owner>sygiet@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -966,7 +964,7 @@ <histogram name="PasswordManager.BiometricAuthPwdFillAndroid.CanAuthenticateWithBiometricOrScreenLock" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>atsvirchkova@google.com</owner> <summary> @@ -1055,7 +1053,7 @@ </histogram> <histogram name="PasswordManager.BulkCheck.InsecureCredentials.Unmuted.Count" - units="credentials" expires_after="2025-05-04"> + units="credentials" expires_after="2025-07-06"> <owner>eic@google.com</owner> <owner>noemies@google.com</owner> <summary> @@ -1175,7 +1173,7 @@ </histogram> <histogram name="PasswordManager.CctFormSubmissionToActivityStopTime" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1187,7 +1185,7 @@ </histogram> <histogram name="PasswordManager.CctFormSubmissionToRedirectTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1293,7 +1291,7 @@ </histogram> <histogram name="PasswordManager.CredentialEntryActions.{CredentialEntryType}" - enum="CredentialEntryAction" expires_after="2025-04-13"> + enum="CredentialEntryAction" expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>friedrichh@chromium.org</owner> <summary> @@ -1324,7 +1322,7 @@ <histogram name="PasswordManager.CredentialManager.{ProfileType}.GetIntent.APIError.ConnectionResultCode" enum="PasswordStoreAndroidBackendConnectionResultCode" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>izuzic@google.com</owner> <summary> @@ -1393,18 +1391,6 @@ <token key="ProfileType" variants="ProfileType"/> </histogram> -<histogram name="PasswordManager.CredentialsCountFromAccountStoreAfterUnlock" - units="credentials" expires_after="2025-04-13"> - <owner>friedrichh@chromium.org</owner> - <owner>mamir@chromium.org</owner> - <summary> - Recorded after unlocking the account store from the password filling flow. - Records how many credentials from the account store can be used to fill the - current password form. If a credential is an exact duplicate with a local - credential, it still counts into this metric. - </summary> -</histogram> - <histogram name="PasswordManager.CredentialsWithDuplicates3" units="units" expires_after="2025-05-11"> <owner>kazinova@google.com</owner> @@ -1420,7 +1406,7 @@ </histogram> <histogram name="PasswordManager.CredentialsWithMismatchedDuplicates3" - units="units" expires_after="2025-05-04"> + units="units" expires_after="2025-07-06"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -1839,7 +1825,7 @@ </histogram> <histogram name="PasswordManager.Import.PerFile.Notes.{Type}" units="units" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>natiahlyi@google.com</owner> <owner>markusheintz@google.com</owner> <summary> @@ -1969,7 +1955,7 @@ </histogram> <histogram name="PasswordManager.iOS.InfoBar.{Type}Duration.{Moment}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>vincb@google.com</owner> <owner>eic@google.com</owner> <owner>bling-transactions@google.com</owner> @@ -2325,7 +2311,7 @@ </histogram> <histogram name="PasswordManager.MediationRequired" - enum="CredentialManagerGetResult" expires_after="2025-05-04"> + enum="CredentialManagerGetResult" expires_after="2025-07-06"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -2357,7 +2343,7 @@ </histogram> <histogram name="PasswordManager.MergeSyncData.UpdateLoginSyncError" - enum="PasswordUpdateLoginSyncError" expires_after="2025-05-04"> + enum="PasswordUpdateLoginSyncError" expires_after="2025-07-06"> <owner>mamir@chromium.org</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -2506,7 +2492,7 @@ </histogram> <histogram name="PasswordManager.PasswordAccessLossWarningDialog.Shown" - enum="PasswordAccessLossWarningType" expires_after="2025-05-04"> + enum="PasswordAccessLossWarningType" expires_after="2025-07-06"> <owner>izuzic@google.com</owner> <owner>atsvirchkova@google.com</owner> <summary> @@ -3038,7 +3024,7 @@ <histogram name="PasswordManager.PasswordSharingDesktop.UserAction" enum="PasswordManager.PasswordSharingDesktopActions" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>natiahlyi@google.com</owner> <owner>mamir@chromium.org</owner> <owner>rgod@google.com</owner> @@ -3656,7 +3642,7 @@ </histogram> <histogram name="PasswordManager.RequirementsSpecFetcher.NetErrorCode" - enum="NetErrorCodes" expires_after="2025-05-04"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>kazinova@google.com</owner> <owner>battre@chromium.org</owner> <summary> @@ -3827,7 +3813,7 @@ </histogram> <histogram name="PasswordManager.Settings.ToggleAutoSignIn" - enum="BooleanEnabled" expires_after="2025-05-04"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>ioanap@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -4253,7 +4239,7 @@ <histogram name="PasswordManager.UnifiedPasswordManager.MigrationForLocalUsers.AndroidBackend.{MigrationOperation}.APIError" - enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-05-04"> + enum="PasswordStoreAndroidBackendAPIError" expires_after="2025-07-06"> <owner>vsemeniuk@google.com</owner> <owner>ioanap@chromium.org</owner> <summary> @@ -4396,6 +4382,18 @@ </summary> </histogram> +<histogram name="PasswordManager.UPM.LoginDbDeprecationExport.Progress" + enum="LoginDbDeprecationExportResult" expires_after="2025-04-01"> + <owner>ioanap@chromium.org</owner> + <owner>vasilii@chromium.org</owner> + <summary> + Records when the pre-deprecation export flow is scheduled, started and + finished, irrespective of success status. The success status breakdown is + recorded in "PasswordManager.UPM.LoginDbDeprecationExport.Result". + The export might be started with a delay. Android only. + </summary> +</histogram> + <histogram name="PasswordManager.UPM.LoginDbDeprecationExport.Result" enum="LoginDbDeprecationExportResult" expires_after="2025-04-01"> <owner>ioanap@chromium.org</owner> @@ -4436,7 +4434,7 @@ </histogram> <histogram name="PasswordManager.WeakCheck.CheckedPasswords" units="passwords" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kazinova@google.com</owner> <owner>vasilii@chromium.org</owner> <summary> @@ -4542,7 +4540,7 @@ </histogram> <histogram name="PasswordManager.{Scope}LoginData.RemovalStatus" - enum="BooleanSuccess" expires_after="2025-04-27"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>izuzic@google.com</owner> <owner>vsemeniuk@google.com</owner> <summary> @@ -4616,7 +4614,7 @@ </histogram> <histogram name="PasswordManager.{Store}PasswordLossPotentialReasonBitmask" - units="bitmask" expires_after="2025-05-02"> + units="bitmask" expires_after="2025-07-06"> <owner>izuzic@google.com</owner> <owner>vasilii@chromium.org</owner> <owner>battre@chromium.org</owner> @@ -4752,7 +4750,7 @@ </histogram> <histogram name="PasswordProtection.CSDCacheContainsDebuggingMetadata" - enum="BooleanPresent" expires_after="2025-03-30"> + enum="BooleanPresent" expires_after="2025-07-06"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/performance_controls/histograms.xml b/tools/metrics/histograms/metadata/performance_controls/histograms.xml index 7abc179..66ccbfd 100644 --- a/tools/metrics/histograms/metadata/performance_controls/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_controls/histograms.xml
@@ -54,7 +54,7 @@ <histogram name="PerformanceControls.Intervention.BackgroundTab.{ResourceType}.BubbleAction" - enum="InterventionBubbleActionType" expires_after="2025-04-27"> + enum="InterventionBubbleActionType" expires_after="2025-07-06"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -76,7 +76,7 @@ <histogram name="PerformanceControls.Intervention.BackgroundTab.{ResourceType}.HealthStatusAfterDiscard.{Time}" - enum="PerformanceDetectionManagerHealthLevel" expires_after="2025-04-27"> + enum="PerformanceDetectionManagerHealthLevel" expires_after="2025-07-06"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -108,7 +108,7 @@ <histogram name="PerformanceControls.Intervention.BackgroundTab.{ResourceType}.MessageShownCount" - units="count" expires_after="2025-04-27"> + units="count" expires_after="2025-07-06"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -129,7 +129,7 @@ <histogram name="PerformanceControls.Intervention.BackgroundTab.{ResourceType}.MessageTriggerResult" - enum="InterventionMessageTriggerResult" expires_after="2025-04-27"> + enum="InterventionMessageTriggerResult" expires_after="2025-07-06"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -173,7 +173,7 @@ </histogram> <histogram name="PerformanceControls.Intervention.Dialog.TabsAfterRemovalCount" - units="tabs" expires_after="2025-05-04"> + units="tabs" expires_after="2025-07-06"> <owner>stluong@chromium.org</owner> <owner>estalin@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> @@ -261,7 +261,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.DiscardRingTreatment" - enum="BooleanEnabled" expires_after="2025-05-07"> + enum="BooleanEnabled" expires_after="2025-07-06"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary> @@ -284,7 +284,7 @@ </histogram> <histogram name="PerformanceControls.MemorySaver.SettingsChangeAggressiveness" - enum="MemorySaverModeAggressiveness" expires_after="2025-05-07"> + enum="MemorySaverModeAggressiveness" expires_after="2025-07-06"> <owner>charlesmeng@chromium.org</owner> <owner>chrome-performance-ui-sea@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/performance_manager/histograms.xml b/tools/metrics/histograms/metadata/performance_manager/histograms.xml index e633c12..dba52c8 100644 --- a/tools/metrics/histograms/metadata/performance_manager/histograms.xml +++ b/tools/metrics/histograms/metadata/performance_manager/histograms.xml
@@ -143,7 +143,7 @@ <histogram name="PerformanceManager.CPUMonitorMemoryUse.{ResourceContextType}.{ResourceContextState}" - units="KB" expires_after="2025-04-27"> + units="KB" expires_after="2025-07-06"> <owner>joenotcharles@google.com</owner> <owner>chrome-catan@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/permissions/histograms.xml b/tools/metrics/histograms/metadata/permissions/histograms.xml index 7e24484..336f875 100644 --- a/tools/metrics/histograms/metadata/permissions/histograms.xml +++ b/tools/metrics/histograms/metadata/permissions/histograms.xml
@@ -157,7 +157,7 @@ </histogram> <histogram name="BrowserDialogs.ExternalProtocol.Scheme" - enum="ExternalProtocolScheme" expires_after="2025-05-04"> + enum="ExternalProtocolScheme" expires_after="2025-07-06"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -607,7 +607,7 @@ <histogram name="Permissions.OnDevicePredictionService.Response.{PermissionType}" - enum="BooleanIgnored" expires_after="2025-04-27"> + enum="BooleanIgnored" expires_after="2025-07-06"> <owner>ravjit@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -630,7 +630,7 @@ </histogram> <histogram name="Permissions.OneTimePermission.{PermissionType}.Event" - enum="OneTimePermissionEvent" expires_after="2025-05-04"> + enum="OneTimePermissionEvent" expires_after="2025-07-06"> <owner>fjacky@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1074,7 +1074,7 @@ <histogram name="Permissions.Prompt.{PermissionType}.{Disposition}.Ignored.DidShowBubble" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>elklm@chromium.org</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner> <summary> @@ -1335,7 +1335,7 @@ </histogram> <histogram name="Permissions.Revocation.Notifications.SourceUI" - enum="PermissionSourceUI" expires_after="2025-05-04"> + enum="PermissionSourceUI" expires_after="2025-07-06"> <owner>engedy@chromium.org</owner> <owner>willxu@google.com</owner> <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
diff --git a/tools/metrics/histograms/metadata/platform/histograms.xml b/tools/metrics/histograms/metadata/platform/histograms.xml index c1ae280..ca60c54 100644 --- a/tools/metrics/histograms/metadata/platform/histograms.xml +++ b/tools/metrics/histograms/metadata/platform/histograms.xml
@@ -746,7 +746,7 @@ </histogram> <histogram name="Platform.FbPreprocessor.Pseudonymization.DumpType" - enum="Platform.FbPreprocessor.FirmwareType" expires_after="2025-05-04"> + enum="Platform.FbPreprocessor.FirmwareType" expires_after="2025-07-06"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -758,7 +758,7 @@ <histogram name="Platform.FbPreprocessor.{FirmwareType}.Collection.Allowed" enum="Platform.FbPreprocessor.CollectionAllowedStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -770,7 +770,7 @@ </histogram> <histogram name="Platform.FbPreprocessor.{FirmwareType}.Output.Number" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -784,7 +784,7 @@ <histogram name="Platform.FbPreprocessor.{FirmwareType}.Pseudonymization.Result" enum="Platform.FbPreprocessor.PseudonymizationResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>norvez@chromium.org</owner> <owner>cros-network-metrics@google.com</owner> <summary> @@ -1746,7 +1746,7 @@ </histogram> <histogram name="Platform.Modemfwd.CheckForWedgedModemResult" - enum="ModemfwdCheckForWedgedModemResult" expires_after="2025-05-04"> + enum="ModemfwdCheckForWedgedModemResult" expires_after="2025-07-06"> <owner>andrewlassalle@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -2303,7 +2303,7 @@ </histogram> <histogram name="Platform.Ti50.ARVCount{CountType}" units="GSC resets" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>jettrink@google.com</owner> <owner>cros-hwsec+uma@google.com</owner> <summary> @@ -2679,7 +2679,7 @@ </histogram> <histogram name="Platform.U2F.FipsStatus.{U2FMode}" enum="U2FFipsStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hcyang@google.com</owner> <owner>cros-hwsec-userland-eng+uma@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml index c917e80..1e60e26 100644 --- a/tools/metrics/histograms/metadata/power/histograms.xml +++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -1170,7 +1170,7 @@ </histogram> <histogram name="Power.DisplayAfterResumeDurationMs{PowerSource}" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>mhiramat@google.com</owner> <owner>cros-suspend-resume@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/prefetch/histograms.xml b/tools/metrics/histograms/metadata/prefetch/histograms.xml index 04b0075..e88b21aa 100644 --- a/tools/metrics/histograms/metadata/prefetch/histograms.xml +++ b/tools/metrics/histograms/metadata/prefetch/histograms.xml
@@ -237,7 +237,7 @@ </histogram> <histogram name="PrefetchProxy.AfterClick.RedirectChainSize" units="count" - expires_after="2025-05-07"> + expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>kenoss@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> @@ -300,7 +300,7 @@ <histogram name="PrefetchProxy.CanaryChecker.CacheLookupResult.{PrefetchProxyCanaryCheckerClient}" - enum="CanaryCheckLookupResult" expires_after="2025-05-04"> + enum="CanaryCheckLookupResult" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -318,7 +318,7 @@ <histogram name="PrefetchProxy.CanaryChecker.FinalState.{PrefetchProxyCanaryCheckerClient}" - enum="BooleanSuccess" expires_after="2025-05-04"> + enum="BooleanSuccess" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -335,7 +335,7 @@ <histogram name="PrefetchProxy.CanaryChecker.NetError.{PrefetchProxyCanaryCheckerClient}" - enum="NetErrorCodes" expires_after="2025-05-04"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -372,7 +372,7 @@ <histogram name="PrefetchProxy.CanaryChecker.TimeUntilFailure.{PrefetchProxyCanaryCheckerClient}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -388,7 +388,7 @@ <histogram name="PrefetchProxy.CanaryChecker.TimeUntilSuccess.{PrefetchProxyCanaryCheckerClient}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary> @@ -415,7 +415,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.Mainframe.BodyLength" units="bytes" - expires_after="2025-05-07"> + expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>kenoss@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> @@ -430,7 +430,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.Mainframe.ConnectTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>liviutinta@chromium.org</owner> <owner>jbroman@chromium.org</owner> <owner>curranmax@chromium.org</owner> @@ -454,7 +454,7 @@ </histogram> <histogram name="PrefetchProxy.Prefetch.Mainframe.NetError" - enum="NetErrorCodes" expires_after="2025-05-04"> + enum="NetErrorCodes" expires_after="2025-07-06"> <owner>kouhei@chromium.org</owner> <owner>chrome-loading@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/printing/histograms.xml b/tools/metrics/histograms/metadata/printing/histograms.xml index c710643..ed25349 100644 --- a/tools/metrics/histograms/metadata/printing/histograms.xml +++ b/tools/metrics/histograms/metadata/printing/histograms.xml
@@ -119,7 +119,7 @@ </histogram> <histogram name="Printing.CUPS.DPI.AllValues" units="DPI" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>gavinwill@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -133,7 +133,7 @@ </histogram> <histogram name="Printing.CUPS.DPI.Count" units="resolutions" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>gavinwill@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -143,7 +143,7 @@ </histogram> <histogram name="Printing.CUPS.DPI.{Type}" units="DPI" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>gavinwill@google.com</owner> <owner>cros-device-enablement@google.com</owner> <summary> @@ -289,7 +289,7 @@ </histogram> <histogram name="Printing.CUPS.PrinterRemoved" enum="PrinterProtocol" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bmgordon@chromium.org</owner> <owner>src/chromeos/printing/OWNERS</owner> <summary> @@ -393,7 +393,7 @@ </histogram> <histogram name="Printing.CUPS.SettingsUserAction" - enum="PrinterSettingsUserAction" expires_after="2025-05-04"> + enum="PrinterSettingsUserAction" expires_after="2025-07-06"> <owner>gavinwill@chromium.org</owner> <owner>cros-device-enablement@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/privacy/histograms.xml b/tools/metrics/histograms/metadata/privacy/histograms.xml index f6a9d427..da39263 100644 --- a/tools/metrics/histograms/metadata/privacy/histograms.xml +++ b/tools/metrics/histograms/metadata/privacy/histograms.xml
@@ -233,7 +233,7 @@ </histogram> <histogram name="Privacy.ClearBrowsingData.TabsEnabled" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>zalmashni@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -483,7 +483,7 @@ </histogram> <histogram name="Privacy.DIPS.DatabaseEntryCount" units="entries" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wanderview@chromium.org</owner> <owner>src/chrome/browser/dips/OWNERS</owner> <summary> @@ -506,7 +506,7 @@ </histogram> <histogram name="Privacy.DIPS.DatabaseHealthMetricsTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wanderview@chromium.org</owner> <owner>src/chrome/browser/dips/OWNERS</owner> <summary> @@ -574,7 +574,7 @@ </histogram> <histogram name="Privacy.DIPS.DIPSErrorCodes" enum="DIPSErrorCode" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wanderview@chromium.org</owner> <owner>src/chrome/browser/dips/OWNERS</owner> <summary> @@ -668,7 +668,7 @@ </histogram> <histogram name="Privacy.QuickDelete.TabsEnabled" enum="BooleanEnabled" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>zalmashni@google.com</owner> <owner>chrome-browser-privacy-team@google.com</owner> <summary> @@ -1742,7 +1742,7 @@ <histogram name="PrivacySandbox.PrivateAggregation.Host.PipeOpenDurationOnShutdown" - units="ms" expires_after="2025-01-05"> + units="ms" expires_after="2026-01-05"> <owner>alexmt@chromium.org</owner> <owner>linnan@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/profile/histograms.xml b/tools/metrics/histograms/metadata/profile/histograms.xml index fac39fd5..019c356 100644 --- a/tools/metrics/histograms/metadata/profile/histograms.xml +++ b/tools/metrics/histograms/metadata/profile/histograms.xml
@@ -669,7 +669,7 @@ </histogram> <histogram name="ProfilePicker.FirstProfileTime.FirstWebContentsNonEmptyPaint" - units="ms" expires_after="2025-04-13"> + units="ms" expires_after="2025-07-06"> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/quick_answers/histograms.xml b/tools/metrics/histograms/metadata/quick_answers/histograms.xml index b9f3aac6..0c19a6db 100644 --- a/tools/metrics/histograms/metadata/quick_answers/histograms.xml +++ b/tools/metrics/histograms/metadata/quick_answers/histograms.xml
@@ -66,7 +66,7 @@ </histogram> <histogram name="QuickAnswers.Click" enum="QuickAnswersResultType" - expires_after="2025-03-09"> + expires_after="2025-07-06"> <owner>angelaxiao@chromium.org</owner> <owner>yawano@google.com</owner> <owner>llin@google.com</owner> @@ -200,7 +200,7 @@ </histogram> <histogram name="QuickAnswers.Loading.Status" enum="QuickAnswersLoadStatus" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>angelaxiao@chromium.org</owner> <owner>yawano@google.com</owner> <owner>llin@google.com</owner> @@ -260,7 +260,7 @@ </histogram> <histogram name="QuickAnswers.Result" enum="QuickAnswersResultType" - expires_after="2025-04-13"> + expires_after="2025-07-06"> <owner>angelaxiao@chromium.org</owner> <owner>yawano@google.com</owner> <owner>llin@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/readaloud/histograms.xml b/tools/metrics/histograms/metadata/readaloud/histograms.xml index 088f635..0622c94 100644 --- a/tools/metrics/histograms/metadata/readaloud/histograms.xml +++ b/tools/metrics/histograms/metadata/readaloud/histograms.xml
@@ -53,7 +53,7 @@ </histogram> <histogram name="ReadAloud.DurationScrubbingBackwardsSeekbar" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sanaakbani@google.com</owner> <owner>basiaz@google.com</owner> <summary> @@ -65,7 +65,7 @@ </histogram> <histogram name="ReadAloud.DurationScrubbingForwardsSeekbar" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sanaakbani@google.com</owner> <owner>basiaz@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer/histograms.xml b/tools/metrics/histograms/metadata/renderer/histograms.xml index 2b7aad4..c452e6a 100644 --- a/tools/metrics/histograms/metadata/renderer/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer/histograms.xml
@@ -84,7 +84,7 @@ <histogram name="Renderer.Core.Timing.Performance.SwapsPerPerformanceEntryInsertion" - units="swaps" expires_after="2025-05-04"> + units="swaps" expires_after="2025-07-06"> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -97,7 +97,7 @@ </histogram> <histogram name="Renderer.CriticalFonts.BlockingResourcesLoadTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -109,7 +109,7 @@ </histogram> <histogram name="Renderer.CriticalFonts.CriticalFontDelay" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary> @@ -122,7 +122,7 @@ </histogram> <histogram name="Renderer.CriticalFonts.PreloadedFontsLoadTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>iclelland@chromium.org</owner> <owner>speed-metrics-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/renderer4/histograms.xml b/tools/metrics/histograms/metadata/renderer4/histograms.xml index 99177d1..20189e6 100644 --- a/tools/metrics/histograms/metadata/renderer4/histograms.xml +++ b/tools/metrics/histograms/metadata/renderer4/histograms.xml
@@ -102,7 +102,7 @@ </histogram> <histogram name="Renderer4.GpuImageUploadState.FirstLockWasted" - enum="BooleanWasted" expires_after="2025-05-04"> + enum="BooleanWasted" expires_after="2025-07-06"> <owner>vmpstr@chromium.org</owner> <owner>thiabaud@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml index 3d37701..fbb18b01 100644 --- a/tools/metrics/histograms/metadata/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/metadata/safe_browsing/histograms.xml
@@ -347,7 +347,7 @@ <histogram name="SafeBrowsing.BrowserThrottle.RequestDestination{RequestedSkippedOrChecked}" - enum="RequestDestination" expires_after="2025-04-27"> + enum="RequestDestination" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -363,7 +363,7 @@ </histogram> <histogram name="SafeBrowsing.BrowserThrottle.TotalDelay2{ResponseType}" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -651,7 +651,7 @@ <histogram name="SafeBrowsing.Daily.BypassCountLast28Days.{UserState}.AllEvents" - units="events" expires_after="2025-05-04"> + units="events" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1509,7 +1509,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.Cache.HashPrefixCount" units="entries" - expires_after="2025-05-03"> + expires_after="2025-07-06"> <owner>thefrog@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -1612,7 +1612,7 @@ </histogram> <histogram name="SafeBrowsing.HPRT.HashDatabaseFallbackThreatType{TriggerType}" - enum="SBThreatType" expires_after="2025-04-27"> + enum="SBThreatType" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2026,7 +2026,7 @@ </histogram> <histogram name="SafeBrowsing.NavigationObserver.RedirectForTelScheme" - enum="BooleanAccepted" expires_after="2025-05-04"> + enum="BooleanAccepted" expires_after="2025-07-06"> <owner>nwokedi@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2506,7 +2506,7 @@ </histogram> <histogram name="SafeBrowsing.RT.HashDatabaseFallbackThreatType{TriggerType}" - enum="SBThreatType" expires_after="2025-04-27"> + enum="SBThreatType" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -2713,7 +2713,7 @@ </histogram> <histogram name="SafeBrowsing.RT.Request.UserPopulation{UserCategory}" - enum="SafeBrowsingUserPopulation" expires_after="2025-04-27"> + enum="SafeBrowsingUserPopulation" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3115,7 +3115,7 @@ </histogram> <histogram name="SafeBrowsing.V4Database.SizeLinear{ThreatTypeKB}" - units="100 KB" expires_after="2025-04-27"> + units="100 KB" expires_after="2025-07-06"> <owner>kristianm@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -3288,7 +3288,7 @@ </histogram> <histogram name="SafeBrowsing.V4ProcessFullUpdate.AdditionsHashesCount2" - units="entries" expires_after="2025-05-04"> + units="entries" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sb_client/histograms.xml b/tools/metrics/histograms/metadata/sb_client/histograms.xml index 0ebbd8d..1971e7f 100644 --- a/tools/metrics/histograms/metadata/sb_client/histograms.xml +++ b/tools/metrics/histograms/metadata/sb_client/histograms.xml
@@ -79,7 +79,7 @@ <histogram name="SBClientDownload.AutomaticDeepScanNoticeSeen2.PartialView{PartialViewSetting}" - enum="BooleanShown" expires_after="2025-04-27"> + enum="BooleanShown" expires_after="2025-07-06"> <owner>drubery@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -352,7 +352,7 @@ </histogram> <histogram name="SBClientDownload.TailoredWarning.HasVaidEmailForAccountInfo" - enum="BooleanValid" expires_after="2025-05-04"> + enum="BooleanValid" expires_after="2025-07-06"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary> @@ -980,7 +980,7 @@ </histogram> <histogram name="SBClientPhishing.VisualFeaturesClearReason" - enum="CanExtractVisualFeaturesResult" expires_after="2025-05-04"> + enum="CanExtractVisualFeaturesResult" expires_after="2025-07-06"> <owner>andysjlim@chromium.org</owner> <owner>chrome-counter-abuse-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/scanning/histograms.xml b/tools/metrics/histograms/metadata/scanning/histograms.xml index 9cdf183..10d88dc 100644 --- a/tools/metrics/histograms/metadata/scanning/histograms.xml +++ b/tools/metrics/histograms/metadata/scanning/histograms.xml
@@ -34,7 +34,7 @@ </histogram> <histogram name="Scanning.DiscoverySession.MaxInterval" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>bmgordon@chromium.org</owner> <owner>project-bolton@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/scheduler/histograms.xml b/tools/metrics/histograms/metadata/scheduler/histograms.xml index e15c92d1..ff33c261 100644 --- a/tools/metrics/histograms/metadata/scheduler/histograms.xml +++ b/tools/metrics/histograms/metadata/scheduler/histograms.xml
@@ -159,7 +159,7 @@ </histogram> <histogram name="Scheduling.SchedQoS.SetProcessStateError" enum="QoSErrorType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kawasin@google.com</owner> <owner>joelaf@google.com</owner> <summary> @@ -169,7 +169,7 @@ </histogram> <histogram name="Scheduling.SchedQoS.SetThreadStateError" enum="QoSErrorType" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kawasin@google.com</owner> <owner>joelaf@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/search/histograms.xml b/tools/metrics/histograms/metadata/search/histograms.xml index c687e218..b7b7bde1 100644 --- a/tools/metrics/histograms/metadata/search/histograms.xml +++ b/tools/metrics/histograms/metadata/search/histograms.xml
@@ -86,7 +86,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.DonateTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>gangwu@chromium.org</owner> <owner>chrome-mobile-search@google.com</owner> <summary>Time taken for donating contents to the auxiliary search.</summary> @@ -115,7 +115,7 @@ </histogram> <histogram name="Search.AuxiliarySearch.DonationSent{AuxiliarySearchDataType}" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>gangwu@chromium.org</owner> <owner>chrome-mobile-search@google.com</owner> <summary> @@ -374,7 +374,7 @@ </histogram> <histogram name="Search.ChoiceScreenShowedEngineAt.CountryMismatch" - enum="BooleanSkipped" expires_after="2025-05-04"> + enum="BooleanSkipped" expires_after="2025-07-06"> <owner>dgn@chromium.org</owner> <owner>chrome-waffle-eng@google.com</owner> <summary> @@ -1465,7 +1465,7 @@ </histogram> <histogram name="Search.SearchEngineCountryDelegate.Connection{Result}Time" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>triploblastic@chromium.org</owner> <owner>dgn@chromium.org</owner> <summary> @@ -1484,7 +1484,7 @@ </histogram> <histogram name="Search.SearchEngineCountryDelegate.Fetch{Result}Time" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>triploblastic@chromium.org</owner> <owner>dgn@chromium.org</owner> <summary> @@ -1504,7 +1504,7 @@ </histogram> <histogram name="Search.SearchEngineCountryDelegate.ServiceBindStatus" - enum="BooleanStartedCompleted" expires_after="2025-05-04"> + enum="BooleanStartedCompleted" expires_after="2025-07-06"> <owner>triploblastic@chromium.org</owner> <owner>dgn@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/security/histograms.xml b/tools/metrics/histograms/metadata/security/histograms.xml index 3dc3396c..16d79273 100644 --- a/tools/metrics/histograms/metadata/security/histograms.xml +++ b/tools/metrics/histograms/metadata/security/histograms.xml
@@ -130,7 +130,7 @@ </histogram> <histogram name="Security.DataDecoder.Json.DecodingTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>djmitche@chromium.org</owner> <owner>dadrian@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sensitive_content/histograms.xml b/tools/metrics/histograms/metadata/sensitive_content/histograms.xml index 25ff42f..f9f0f66 100644 --- a/tools/metrics/histograms/metadata/sensitive_content/histograms.xml +++ b/tools/metrics/histograms/metadata/sensitive_content/histograms.xml
@@ -35,7 +35,7 @@ </variants> <histogram name="SensitiveContent.SensitiveTabSwitchingAnimations" - enum="TabSwitchingAnimation" expires_after="2025-05-04"> + enum="TabSwitchingAnimation" expires_after="2025-07-06"> <owner>theocristea@google.com</owner> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -50,7 +50,7 @@ <histogram name="SensitiveContent.TabSwitching.{TabSwitchingSurface}.Sensitivity" - enum="TabSwitchingSurfaceContentSensitivity" expires_after="2025-05-04"> + enum="TabSwitchingSurfaceContentSensitivity" expires_after="2025-07-06"> <owner>theocristea@google.com</owner> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -66,7 +66,7 @@ </histogram> <histogram name="SensitiveContent.{Embedder}.LatencyUntilSensitive" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>theocristea@google.com</owner> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -81,7 +81,7 @@ </histogram> <histogram name="SensitiveContent.{Embedder}.SensitiveTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>theocristea@google.com</owner> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner> @@ -96,7 +96,7 @@ </histogram> <histogram name="SensitiveContent.{Embedder}.SensitivityChanged" - enum="ContentSensitivity" expires_after="2025-05-04"> + enum="ContentSensitivity" expires_after="2025-07-06"> <owner>theocristea@google.com</owner> <owner>jkeitel@google.com</owner> <owner>chrome-autofill-alerts@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml index b13d992e..03e07bf 100644 --- a/tools/metrics/histograms/metadata/service/histograms.xml +++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -1563,7 +1563,7 @@ </histogram> <histogram name="ServiceWorker.StartWorker.TimeoutPhase" - enum="EmbeddedWorkerStartingPhase" expires_after="2025-02-16"> + enum="EmbeddedWorkerStartingPhase" expires_after="2026-01-07"> <owner>chikamune@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1574,7 +1574,7 @@ </histogram> <histogram name="ServiceWorker.StaticRouter.{Resource}.CacheLookupDuration" - units="microseconds" expires_after="2025-02-10"> + units="microseconds" expires_after="2025-06-10"> <owner>suzukikeita@chromium.org</owner> <owner>chrome-worker@google.com</owner> <summary> @@ -1788,7 +1788,7 @@ <histogram name="ServiceWorkerCache.Cache.{ServiceWorkerCacheProcessType}.{ProcessOps}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>ayui@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/session/histograms.xml b/tools/metrics/histograms/metadata/session/histograms.xml index 5a8965f..aaddf494 100644 --- a/tools/metrics/histograms/metadata/session/histograms.xml +++ b/tools/metrics/histograms/metadata/session/histograms.xml
@@ -885,7 +885,7 @@ </histogram> <histogram name="Session.TotalDurationMax1Day.{HistorySyncState}" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>mastiz@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>treib@chromium.org</owner> @@ -924,7 +924,7 @@ </histogram> <histogram name="Session.TotalDurationMax1Day.{MsbbState}" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>mastiz@chromium.org</owner> <owner>msarda@chromium.org</owner> <owner>treib@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index a0fe0a7..f7c1f0e3 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -419,7 +419,7 @@ </histogram> <histogram name="Settings.PrivacyGuide.FlowLength" units="steps" - expires_after="2025-02-10"> + expires_after="2025-06-22"> <owner>rainhard@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -441,7 +441,7 @@ </histogram> <histogram name="Settings.PrivacyGuide.SettingsStates" - enum="SettingsPrivacyGuideSettingsStates" expires_after="2025-04-01"> + enum="SettingsPrivacyGuideSettingsStates" expires_after="2025-06-22"> <owner>harrisonsean@chromium.org</owner> <owner>rainhard@chromium.org</owner> <owner>chrome-privacy-controls@google.com</owner> @@ -520,7 +520,7 @@ </histogram> <histogram name="Settings.PrivacySandbox.NoticeCheckIsMismatched" - enum="Boolean" expires_after="2025-05-04"> + enum="Boolean" expires_after="2025-07-06"> <owner>boujane@google.com</owner> <owner>koilos@google.com</owner> <summary> @@ -670,7 +670,7 @@ <histogram name="Settings.SafetyCheck.UnusedSitePermissionsModuleInteractions" enum="SafetyCheckUnusedSitePermissionsModuleInteractions" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>sideyilmaz@chromium.org</owner> <owner>msramek@chromium.org</owner> <summary> @@ -980,7 +980,7 @@ </histogram> <histogram name="Settings.SafetyHub.VersionCard.StatusOnClick" - enum="SafetyHubCardState" expires_after="2025-05-04"> + enum="SafetyHubCardState" expires_after="2025-07-06"> <owner>sideyilmaz@chromium.org</owner> <owner>aisulu@google.com</owner> <owner>chrome-privacy-controls@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/sharing/histograms.xml b/tools/metrics/histograms/metadata/sharing/histograms.xml index acf6023..853cd7e 100644 --- a/tools/metrics/histograms/metadata/sharing/histograms.xml +++ b/tools/metrics/histograms/metadata/sharing/histograms.xml
@@ -432,7 +432,7 @@ </histogram> <histogram name="Sharing.SharingHubAndroid.CustomAction" - enum="ShareCustomAction" expires_after="2025-05-04"> + enum="ShareCustomAction" expires_after="2025-07-06"> <owner>wenyufu@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary> @@ -464,7 +464,7 @@ </histogram> <histogram name="Sharing.SharingHubAndroid.TimeToCustomAction" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wenyufu@chromium.org</owner> <owner>src/chrome/browser/share/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/shortcuts/histograms.xml b/tools/metrics/histograms/metadata/shortcuts/histograms.xml index 76b2b51..6852ae2c 100644 --- a/tools/metrics/histograms/metadata/shortcuts/histograms.xml +++ b/tools/metrics/histograms/metadata/shortcuts/histograms.xml
@@ -49,7 +49,7 @@ </histogram> <histogram name="Shortcuts.Icons.StorageCount" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dmurph@chromium.org</owner> <owner>pwa-team@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index ed6ec570..81834d5 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -335,7 +335,7 @@ </histogram> <histogram name="Signin.AccountInPref.State" enum="AccountInPrefState" - expires_after="2025-05-05"> + expires_after="2025-07-06"> <owner>rsult@google.com</owner> <owner>droger@chromium.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -503,7 +503,7 @@ </histogram> <histogram name="Signin.Android.FRESigninEvents" enum="FRESigninEvents" - expires_after="2025-05-07"> + expires_after="2025-07-06"> <owner>mthiesse@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -513,7 +513,7 @@ </histogram> <histogram name="Signin.Android.FREUnmanagedAccountSigninDuration" units="ms" - expires_after="2025-05-07"> + expires_after="2025-07-06"> <owner>mthiesse@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -522,7 +522,7 @@ </histogram> <histogram name="Signin.Android.IsAccountManagedDuration" units="ms" - expires_after="2025-05-07"> + expires_after="2025-07-06"> <owner>mthiesse@chromium.org</owner> <owner>chrome-signin-team@google.com</owner> <summary> @@ -1375,7 +1375,7 @@ </histogram> <histogram name="Signin.HistorySyncOptIn.{OptInFlowEvent}" - enum="SigninAccessPoint" expires_after="2025-04-27"> + enum="SigninAccessPoint" expires_after="2025-07-06"> <owner>myuu@google.com</owner> <owner>bsazonov@chromium.org</owner> <owner>jlebel@chromium.org</owner> @@ -1530,7 +1530,7 @@ </histogram> <histogram name="Signin.Intercept.Heuristic.SupervisionState.{InterceptType}" - enum="SinginInterceptSupervisionState" expires_after="2025-05-05"> + enum="SinginInterceptSupervisionState" expires_after="2025-07-06"> <owner>anthie@google.com</owner> <owner>chrome-kids-eng@google.com</owner> <owner>chrome-signin-team@google.com</owner> @@ -2306,7 +2306,7 @@ </histogram> <histogram name="Signin.SignIn.Offered{AccountState}" enum="SigninAccessPoint" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>bsazonov@chromium.org</owner> <owner>dgn@chromium.org</owner> <owner>chrome-signin-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml index 1e1c7996..395f426 100644 --- a/tools/metrics/histograms/metadata/startup/histograms.xml +++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -448,7 +448,7 @@ </histogram> <histogram name="Startup.Android.Experimental.{name}.Tabbed.ColdStartTracker" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>pasko@chromium.org</owner> <owner>mthiesse@chromium.org</owner> <owner>yfriedman@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/storage/histograms.xml b/tools/metrics/histograms/metadata/storage/histograms.xml index bb22344..eb145ab 100644 --- a/tools/metrics/histograms/metadata/storage/histograms.xml +++ b/tools/metrics/histograms/metadata/storage/histograms.xml
@@ -310,7 +310,7 @@ </histogram> <histogram name="IndexedDB.CalculateBlockingStatusLongTimes" units="ms" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -321,7 +321,7 @@ </histogram> <histogram name="IndexedDB.CalculateBlockingStatusRequestQueueSize" - units="count" expires_after="2025-04-20"> + units="count" expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -355,7 +355,7 @@ </histogram> <histogram name="IndexedDB.GetUnacquirableLocksRequestQueueSize" units="count" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -367,7 +367,7 @@ </histogram> <histogram name="IndexedDB.LargeValueReadError" enum="FileErrorCode" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -379,7 +379,7 @@ </histogram> <histogram name="IndexedDB.LockRequestCancelledLongTimes" units="ms" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -390,7 +390,7 @@ </histogram> <histogram name="IndexedDB.LockRequestCancelledRequestQueueSize" units="count" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -417,7 +417,7 @@ </histogram> <histogram name="IndexedDB.RemoveTransactionConnectionTxnCount" units="count" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -428,7 +428,7 @@ </histogram> <histogram name="IndexedDB.RemoveTransactionLongTimes" units="ms" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -439,7 +439,7 @@ </histogram> <histogram name="IndexedDB.RemoveTransactionRequestQueueSize" units="count" - expires_after="2025-04-20"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/sync/histograms.xml b/tools/metrics/histograms/metadata/sync/histograms.xml index 43275891..15de82d 100644 --- a/tools/metrics/histograms/metadata/sync/histograms.xml +++ b/tools/metrics/histograms/metadata/sync/histograms.xml
@@ -255,7 +255,7 @@ </histogram> <histogram name="Sync.BookmarkEntityReuploadNeeded.On{UpdateType}" - enum="Boolean" expires_after="2025-02-20"> + enum="Boolean" expires_after="2026-02-20"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -269,7 +269,7 @@ </histogram> <histogram name="Sync.BookmarkGUIDSource2" enum="BookmarkGUIDSource" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -716,7 +716,7 @@ </histogram> <histogram name="Sync.DataTypeCount{SyncDataType}" units="entries" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <summary> @@ -728,7 +728,7 @@ </histogram> <histogram name="Sync.DataTypeEntityChange{SyncDataType}" - enum="SyncEntityChange" expires_after="2025-05-04"> + enum="SyncEntityChange" expires_after="2025-07-06"> <owner>treib@chromium.org</owner> <owner>rushans@google.com</owner> <summary> @@ -1090,7 +1090,7 @@ </histogram> <histogram name="Sync.IdentityErrorCard{SyncErrorReason}" - enum="SyncErrorUiAction" expires_after="2025-04-27"> + enum="SyncErrorUiAction" expires_after="2025-07-06"> <owner>ankushkush@google.com</owner> <owner>src/components/sync/OWNERS</owner> <summary> @@ -1106,7 +1106,7 @@ </histogram> <histogram name="Sync.IdentityErrorMessage{SyncErrorReason}" - enum="SyncErrorUiAction" expires_after="2025-04-27"> + enum="SyncErrorUiAction" expires_after="2025-07-06"> <owner>ankushkush@google.com</owner> <owner>src/components/sync/OWNERS</owner> <summary> @@ -1174,7 +1174,7 @@ </histogram> <histogram name="Sync.InvalidBookmarkSpecifics" - enum="InvalidBookmarkSpecificsError" expires_after="2025-02-16"> + enum="InvalidBookmarkSpecificsError" expires_after="2026-02-16"> <owner>mastiz@chromium.org</owner> <owner>rushans@google.com</owner> <summary> @@ -1261,40 +1261,9 @@ </summary> </histogram> -<histogram name="Sync.ModelTypeCount4{SyncDataType}" units="entries" - expires_after="2025-05-18"> - <owner>rushans@google.com</owner> - <owner>mastiz@chromium.org</owner> - <summary> - Counts the number of entries for each data type. The count is based on - metadata entries for the type. Recorded after sync configuration. This - metric is used for monitoring general health of sync client-side code. - - TODO(crbug.com/358120886): Remove once alerts are switched to - Sync.DataTypeCount. - </summary> - <token key="SyncDataType" variants="SyncDataType"/> -</histogram> - -<histogram name="Sync.ModelTypeEntityChange3{SyncDataType}" - enum="SyncEntityChange" expires_after="2025-05-18"> - <owner>treib@chromium.org</owner> - <owner>rushans@google.com</owner> - <summary> - Recorded once for every sync entity change (whenever it is commited to the - server or updated from the server). This metric is used for monitoring - general health of sync client-side code. Note: This is only recorded with a - data type suffix. The base version is never recorded. - - TODO(crbug.com/358120886): Remove once alerts are switched to - Sync.DataTypeEntityChange. - </summary> - <token key="SyncDataType" variants="SyncDataType"/> -</histogram> - <histogram name="Sync.NonReflectionUpdateFreshnessPossiblySkewed2{SyncDataType}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>mastiz@chromium.org</owner> <owner>treib@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/tab/histograms.xml b/tools/metrics/histograms/metadata/tab/histograms.xml index 7a82ac2..cab39fa 100644 --- a/tools/metrics/histograms/metadata/tab/histograms.xml +++ b/tools/metrics/histograms/metadata/tab/histograms.xml
@@ -944,7 +944,7 @@ </histogram> <histogram name="TabGroups.SelectedTabInTabGroup" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>ckitagawa@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -1858,7 +1858,7 @@ </histogram> <histogram name="Tabs.ArchiveSettings.TimeDeltaPreference" units="days" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary>Records when a user selects an archive time preference.</summary> @@ -1878,7 +1878,7 @@ </histogram> <histogram name="Tabs.CloseAllArchivedTabs.TabCount" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -1888,7 +1888,7 @@ </histogram> <histogram name="Tabs.CloseArchivedTabsMenuItem.TabCount" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2168,7 +2168,7 @@ </histogram> <histogram name="Tabs.PageLoad.TimeSinceActive2" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>emshack@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -2437,7 +2437,7 @@ </histogram> <histogram name="Tabs.RestoreAllArchivedTabsMenuItem.TabCount" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2447,7 +2447,7 @@ </histogram> <histogram name="Tabs.RestoreArchivedTabsMenuItem.TabCount" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2608,7 +2608,7 @@ </histogram> <histogram name="Tabs.Startup.TabCount2.{TabModelSelectorType}.DuplicateTabIds" - units="count" expires_after="2025-05-04"> + units="count" expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2658,7 +2658,7 @@ </histogram> <histogram name="Tabs.TabArchived.FoundDuplicateInRegularModel" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2668,7 +2668,7 @@ </histogram> <histogram name="Tabs.TabArchived.TabCount" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>wylieb@chromium.org</owner> <owner>clank-tab-dev@google.com</owner> <summary> @@ -2726,7 +2726,7 @@ </histogram> <histogram name="Tabs.TabCountInGroupPerLoad" units="tabs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dpenning@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/ui/histograms.xml b/tools/metrics/histograms/metadata/ui/histograms.xml index 3a756ad..2583c15 100644 --- a/tools/metrics/histograms/metadata/ui/histograms.xml +++ b/tools/metrics/histograms/metadata/ui/histograms.xml
@@ -152,7 +152,7 @@ </histogram> <histogram name="Views.InvalidatesDuringLayout" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dpranke@chromium.org</owner> <owner>elainechien@chromium.org</owner> <owner>kylixrd@chromium.org</owner> @@ -164,7 +164,7 @@ </histogram> <histogram name="Views.LayoutCallDepth" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dpranke@chromium.org</owner> <owner>elainechien@chromium.org</owner> <owner>kylixrd@chromium.org</owner> @@ -178,7 +178,7 @@ </histogram> <histogram name="Views.UnnecessaryLayouts" units="count" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>elainechien@chromium.org</owner> <owner>kylixrd@chromium.org</owner> <owner>pkasting@chromium.org</owner> @@ -194,7 +194,7 @@ <histogram name="Views.{Process}.NumColorProvidersInitializedDuringOnNativeThemeUpdated" - units="providers" expires_after="2025-04-27"> + units="providers" expires_after="2025-07-06"> <owner>pkasting@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>skau@chromium.org</owner> @@ -211,7 +211,7 @@ </histogram> <histogram name="Views.{Process}.TimeSpentInitializingColorProvider" units="ms" - expires_after="2025-04-27"> + expires_after="2025-07-06"> <owner>pkasting@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>skau@chromium.org</owner> @@ -228,7 +228,7 @@ </histogram> <histogram name="Views.{Process}.TimeSpentProcessingOnNativeThemeUpdatedEvent" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>pkasting@chromium.org</owner> <owner>tluk@chromium.org</owner> <owner>skau@chromium.org</owner> @@ -259,7 +259,7 @@ </histogram> <histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>dpapad@chromium.org</owner> <owner>chrome-webui@google.com</owner> <summary>URLs for which Chrome creates WebUIControllers.</summary> @@ -296,7 +296,7 @@ </histogram> <histogram name="WebUI.TopChrome.Preload.Result" enum="WebUIPreloadResult" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>kerenzhu@chromium.org</owner> <owner>dayeung@chromium.org</owner> <owner>elainechien@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/ukm/histograms.xml b/tools/metrics/histograms/metadata/ukm/histograms.xml index 09e8411..00870573 100644 --- a/tools/metrics/histograms/metadata/ukm/histograms.xml +++ b/tools/metrics/histograms/metadata/ukm/histograms.xml
@@ -35,7 +35,7 @@ </histogram> <histogram name="UKM.BuildAndStoreLogIsEmpty" enum="Boolean" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -46,7 +46,7 @@ </histogram> <histogram name="UKM.ConsentObserver.AppSyncConsentChanged" enum="Boolean" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>andrewbregger@google.com</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -58,7 +58,7 @@ </histogram> <histogram name="UKM.ConsentObserver.Purge" enum="Boolean" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -69,7 +69,7 @@ </histogram> <histogram name="UKM.Entries.Dropped" enum="UkmDataDroppedReason" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -79,7 +79,7 @@ </histogram> <histogram name="UKM.Entries.Dropped.ByEntryHash" enum="UkmEventNameHash" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -91,7 +91,7 @@ </histogram> <histogram name="UKM.Entries.Dropped.MaxHit.ByEntryHash" - enum="UkmEventNameHash" expires_after="2025-05-01"> + enum="UkmEventNameHash" expires_after="2025-07-06"> <owner>lucnguyen@google.com</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -116,7 +116,7 @@ </histogram> <histogram name="UKM.Entries.Dropped.SampledOut.ByEntryHash" - enum="UkmEventNameHash" expires_after="2025-05-01"> + enum="UkmEventNameHash" expires_after="2025-07-06"> <owner>lucnguyen@google.com</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -128,7 +128,7 @@ </histogram> <histogram name="UKM.Entries.Recorded.ByEntryHash" enum="UkmEventNameHash" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>yrsun@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -140,14 +140,14 @@ </histogram> <histogram name="UKM.Entries.SerializedCount2" units="entries" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary>Number of serialized UKM entries when storing a UKM log.</summary> </histogram> <histogram name="UKM.Entries.SerializedCountFCP" units="entries" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -171,7 +171,7 @@ </histogram> <histogram name="UKM.IOSLog.OnSuccess" units="records" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -188,7 +188,7 @@ </summary> </histogram> -<histogram name="UKM.LogSize.OnSuccess" units="KB" expires_after="2025-05-01"> +<histogram name="UKM.LogSize.OnSuccess" units="KB" expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -211,7 +211,7 @@ </histogram> <histogram name="UKM.LogUpload.ResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-05-01"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -250,7 +250,7 @@ </histogram> <histogram name="UKM.ResetReason" enum="UkmResetReason" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -280,7 +280,7 @@ </histogram> <histogram name="UKM.Sources.SerializedCount2{UkmSourceIdTypes}" - units="sources" expires_after="2025-05-01"> + units="sources" expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -319,7 +319,7 @@ </histogram> <histogram name="UKM.UnsentLogs.DroppedSize" units="bytes" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -329,7 +329,7 @@ </histogram> <histogram name="UKM.UnsentLogs.NumDropped" units="units" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>rkaplow@chromium.org</owner> <owner>chrome-metrics-team@google.com</owner> <summary> @@ -338,7 +338,7 @@ </histogram> <histogram name="UKM.WebDXFeatureSets.Dropped" enum="UkmDataDroppedReason" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>yrsun@chromium.org</owner> <owner>lucnguyen@google.com</owner> <owner>chrome-metrics-team@google.com</owner> @@ -350,7 +350,7 @@ </histogram> <histogram name="UKM.WebDXFeatureSets.SerializedCount" units="web feature sets" - expires_after="2025-05-01"> + expires_after="2025-07-06"> <owner>yrsun@chromium.org</owner> <owner>lucnguyen@google.com</owner> <owner>chrome-metrics-team@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/uma/histograms.xml b/tools/metrics/histograms/metadata/uma/histograms.xml index 8823296..75f9f31 100644 --- a/tools/metrics/histograms/metadata/uma/histograms.xml +++ b/tools/metrics/histograms/metadata/uma/histograms.xml
@@ -394,7 +394,7 @@ </summary> </histogram> -<histogram name="UMA.LogSize.OnSuccess" units="KB" expires_after="2025-05-04"> +<histogram name="UMA.LogSize.OnSuccess" units="KB" expires_after="2025-07-06"> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -407,7 +407,7 @@ </histogram> <histogram name="UMA.LogUpload.Canceled.CellularConstraint" - enum="BooleanCanceled" expires_after="2025-05-04"> + enum="BooleanCanceled" expires_after="2025-07-06"> <owner>holte@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -418,7 +418,7 @@ </histogram> <histogram name="UMA.LogUpload.ResponseOrErrorCode" - enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-05-04"> + enum="CombinedHttpResponseAndNetErrorCode" expires_after="2025-07-06"> <owner>holte@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner> @@ -526,7 +526,7 @@ </histogram> <histogram name="UMA.MetricsService.PendingOngoingLogOnDisable" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>lucnguyen@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -565,7 +565,7 @@ </histogram> <histogram name="UMA.MetricsService.SnapshotDeltasTime" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>lucnguyen@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index 0dd09b8..db9297c 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -2552,7 +2552,7 @@ </histogram> <histogram name="V8.WasmModuleNumberOfCodeGCsTriggered" units="gcs" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>ecmziegler@chromium.org</owner> <owner>adamk@chromium.org</owner> <owner>clemensb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/variations/histograms.xml b/tools/metrics/histograms/metadata/variations/histograms.xml index c6b2289a..3762f9c 100644 --- a/tools/metrics/histograms/metadata/variations/histograms.xml +++ b/tools/metrics/histograms/metadata/variations/histograms.xml
@@ -310,7 +310,7 @@ </histogram> <histogram name="Variations.Limits.VariationKeySize.{Size}" units="KiB" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>caitlinfischer@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary> @@ -569,7 +569,7 @@ </histogram> <histogram name="Variations.SeedFileRead.{SeedFile}" enum="BooleanSuccess" - expires_after="2025-05-06"> + expires_after="2025-07-06"> <owner>caitlinfischer@google.com</owner> <owner>src/base/metrics/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_apk/histograms.xml b/tools/metrics/histograms/metadata/web_apk/histograms.xml index e2ec9c46..7610233 100644 --- a/tools/metrics/histograms/metadata/web_apk/histograms.xml +++ b/tools/metrics/histograms/metadata/web_apk/histograms.xml
@@ -313,7 +313,7 @@ </histogram> <histogram name="WebApk.Sync.SyncedWebApkCount" units="WebApks" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hartmanng@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> <summary> @@ -431,7 +431,7 @@ </histogram> <histogram name="WebApk.Update.ShellVersion" units="units" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>eirage@chromium.org</owner> <owner>src/chrome/android/webapk/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_core/histograms.xml b/tools/metrics/histograms/metadata/web_core/histograms.xml index 82e0b52..7ad4207c 100644 --- a/tools/metrics/histograms/metadata/web_core/histograms.xml +++ b/tools/metrics/histograms/metadata/web_core/histograms.xml
@@ -498,7 +498,7 @@ </histogram> <histogram name="WebCore.IndexedDB.Transaction.{TransactionType}.TimeActive2" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -527,7 +527,7 @@ </histogram> <histogram name="WebCore.IndexedDB.Transaction.{TransactionType}.TimeQueued" - units="ms" expires_after="2025-04-27"> + units="ms" expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary> @@ -558,7 +558,7 @@ </histogram> <histogram name="WebCore.IndexedDB.TransactionAbortReason" enum="IDBException" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>estade@chromium.org</owner> <owner>chrome-owp-storage@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/web_rtc/histograms.xml b/tools/metrics/histograms/metadata/web_rtc/histograms.xml index 00d4bc7..5ee0c6a8 100644 --- a/tools/metrics/histograms/metadata/web_rtc/histograms.xml +++ b/tools/metrics/histograms/metadata/web_rtc/histograms.xml
@@ -1573,7 +1573,7 @@ </histogram> <histogram name="WebRTC.PeerConnection.ValidBundledPayloadTypes" enum="Boolean" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>hbos@chromium.org</owner> <owner>webrtc-dev@chromium.org</owner> <owner>phancke@microsoft.com</owner> @@ -1862,7 +1862,7 @@ </histogram> <histogram name="WebRTC.Video.CaptureTimeToReferenceTimePlus250.Ms" units="ms" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>handellm@google.com</owner> <owner>webrtc-video@google.com</owner> <summary> @@ -3788,7 +3788,7 @@ </histogram> <histogram name="WebRTC.Video{TypeOfStream}.CorruptionLikelihoodPermille" - units="permille (‰)" expires_after="2025-01-01"> + units="permille (‰)" expires_after="2025-04-01"> <owner>sprang@chromium.org</owner> <owner>webrtc-video@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webauthn/histograms.xml b/tools/metrics/histograms/metadata/webauthn/histograms.xml index bfc17c2..c70a6b8 100644 --- a/tools/metrics/histograms/metadata/webauthn/histograms.xml +++ b/tools/metrics/histograms/metadata/webauthn/histograms.xml
@@ -236,7 +236,7 @@ </histogram> <histogram name="WebAuthentication.ChromeOS.StartupRecordCount" units="records" - expires_after="2025-05-04"> + expires_after="2025-07-06"> <owner>martinkr@google.com</owner> <owner>hcyang@google.com</owner> <owner>chrome-webauthn@google.com</owner> @@ -257,7 +257,7 @@ </histogram> <histogram name="WebAuthentication.CredentialFetchDuration.{ApiUsed}" - units="ms" expires_after="2025-05-04"> + units="ms" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -292,7 +292,7 @@ </histogram> <histogram name="WebAuthentication.EnclaveEvent" - enum="WebAuthenticationEnclaveEvent" expires_after="2025-05-04"> + enum="WebAuthenticationEnclaveEvent" expires_after="2025-07-06"> <owner>agl@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -425,7 +425,7 @@ </histogram> <histogram name="WebAuthentication.MakeCredential.Result" - enum="WebAuthenticationCredentialRequestResult" expires_after="2025-05-04"> + enum="WebAuthenticationCredentialRequestResult" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary>Records the result of a make credential request.</summary> @@ -492,7 +492,7 @@ </histogram> <histogram name="WebAuthentication.Windows.FindHelloDialogIterationCount" - units="iterations" expires_after="2025-05-04"> + units="iterations" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -503,7 +503,7 @@ </histogram> <histogram name="WebAuthentication.Windows.ForegroundedWindowsHelloDialog" - enum="WindowsForegroundedHelloDialog" expires_after="2025-05-04"> + enum="WindowsForegroundedHelloDialog" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -514,7 +514,7 @@ </histogram> <histogram name="WebAuthentication.Windows.KeyCredentialCreation" - enum="WindowsKeyCredentialCreateResult" expires_after="2025-05-04"> + enum="WindowsKeyCredentialCreateResult" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -526,7 +526,7 @@ </histogram> <histogram name="WebAuthentication.Windows.KeyCredentialManagerSupported" - enum="WindowsKeyCredentialManagerSupportResults" expires_after="2025-05-04"> + enum="WindowsKeyCredentialManagerSupportResults" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary> @@ -537,7 +537,7 @@ </histogram> <histogram name="WebAuthentication.Windows.KeyCredentialSign" - enum="WindowsKeyCredentialSignResult" expires_after="2025-05-04"> + enum="WindowsKeyCredentialSignResult" expires_after="2025-07-06"> <owner>kenrb@chromium.org</owner> <owner>chrome-webauthn@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/metadata/webnn/histograms.xml b/tools/metrics/histograms/metadata/webnn/histograms.xml index 067f0997..bd1e6bf 100644 --- a/tools/metrics/histograms/metadata/webnn/histograms.xml +++ b/tools/metrics/histograms/metadata/webnn/histograms.xml
@@ -46,6 +46,13 @@ summary="time to record graph execution on the main thread."/> </variants> +<histogram name="WebNN.ConstantDataSizeInKB" units="KB" + expires_after="2025-06-27"> + <owner>reillyg@chromium.org</owner> + <owner>src/services/webnn/OWNERS</owner> + <summary>Records the constant data sizes in KB.</summary> +</histogram> + <histogram name="WebNN.CoreML.TimingMs.{WebNNCoreMLActions}" units="ms" expires_after="2025-02-26"> <owner>reillyg@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 6b4adf2..1a02acb 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -6,7 +6,7 @@ }, "win": { "hash": "376d3064dd4d91ec698919eecc8a5db6138d2c4a", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/2473cc95bc0d2d0c3c240be49ce4c2d0dc48edd4/trace_processor_shell.exe" + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/94423c3343b0e789bbbc066dbbd3d0ad686f225d/trace_processor_shell.exe" }, "linux_arm": { "hash": "a15d8362d80cfd7cd8d785cf6afc22586de688cd", @@ -21,8 +21,8 @@ "full_remote_path": "perfetto-luci-artifacts/v49.0/mac-arm64/trace_processor_shell" }, "linux": { - "hash": "a583a9cb46b34cf233ecb25330998ed43b0aeced", - "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/2473cc95bc0d2d0c3c240be49ce4c2d0dc48edd4/trace_processor_shell" + "hash": "19bb66f78748ad55addb8e4e88bc7c8532c3468f", + "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/c4a334640bdd3a70031fba0afe4a51db4c7fa66d/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/ubsan/ignorelist.txt b/tools/ubsan/ignorelist.txt index fa6dd8dc..91cb9c6fd 100644 --- a/tools/ubsan/ignorelist.txt +++ b/tools/ubsan/ignorelist.txt
@@ -46,8 +46,3 @@ # https://crbug.com/385155394 [pointer-overflow] fun:*VP8BitReaderSetBuffer* - -# Remove this once https://android-review.googlesource.com/c/platform/external/perfetto/+/3427002 -# has landed. -[pointer-overflow] -fun:*protozero*ScatteredStreamWriter*ReserveBytes*
diff --git a/ui/android/java/src/org/chromium/ui/DropdownAdapter.java b/ui/android/java/src/org/chromium/ui/DropdownAdapter.java index 807ddf0..230d80a 100644 --- a/ui/android/java/src/org/chromium/ui/DropdownAdapter.java +++ b/ui/android/java/src/org/chromium/ui/DropdownAdapter.java
@@ -25,6 +25,7 @@ import androidx.core.view.ViewCompat; import org.chromium.build.annotations.NullMarked; +import org.chromium.build.annotations.NullUnmarked; import org.chromium.build.annotations.Nullable; import java.util.List; @@ -34,7 +35,7 @@ @NullMarked public class DropdownAdapter extends ArrayAdapter<DropdownItem> { private final Context mContext; - private final @Nullable Set<Integer> mSeparators; + private final Set<Integer> mSeparators; private final boolean mAreAllItemsEnabled; private final int mLabelMargin; @@ -45,9 +46,7 @@ * @param separators Set of positions that separate {@code items}. */ public DropdownAdapter( - Context context, - List<? extends DropdownItem> items, - @Nullable Set<Integer> separators) { + Context context, List<? extends DropdownItem> items, Set<Integer> separators) { super(context, R.layout.dropdown_item); mContext = context; addAll(items); @@ -67,12 +66,11 @@ return true; } + @NullUnmarked @Override public View getView(int position, @Nullable View convertView, ViewGroup parent) { - View layout; - if (convertView != null) { - layout = convertView; - } else { + View layout = convertView; + if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); layout = inflater.inflate(R.layout.dropdown_item, null);
diff --git a/ui/android/java/src/org/chromium/ui/base/IntentRequestTracker.java b/ui/android/java/src/org/chromium/ui/base/IntentRequestTracker.java index e139dc88..8f7af3a 100644 --- a/ui/android/java/src/org/chromium/ui/base/IntentRequestTracker.java +++ b/ui/android/java/src/org/chromium/ui/base/IntentRequestTracker.java
@@ -115,5 +115,5 @@ * @param errorId The error ID used if the intent encounters an error. * @return int The request code for the intent. */ - int showCancelableIntent(Intent intent, IntentCallback callback, @Nullable Integer errorId); + int showCancelableIntent(Intent intent, IntentCallback callback, Integer errorId); }
diff --git a/ui/android/java/src/org/chromium/ui/base/IntentRequestTrackerImpl.java b/ui/android/java/src/org/chromium/ui/base/IntentRequestTrackerImpl.java index a84b3e9..c98d358 100644 --- a/ui/android/java/src/org/chromium/ui/base/IntentRequestTrackerImpl.java +++ b/ui/android/java/src/org/chromium/ui/base/IntentRequestTrackerImpl.java
@@ -35,7 +35,7 @@ // Ideally, this would be a SparseArray<String>, but there's no easy way to store a // SparseArray<String> in a bundle during saveInstanceState(). So we use a HashMap and suppress // the Android lint warning "UseSparseArrays". - private HashMap<Integer, @Nullable String> mIntentErrors; + private HashMap<Integer, String> mIntentErrors; /** * Creates an instance of the class. @@ -48,7 +48,7 @@ } /* package */ int showCancelableIntent( - PendingIntent intent, IntentCallback callback, @Nullable Integer errorId) { + PendingIntent intent, IntentCallback callback, Integer errorId) { int requestCode = generateNextRequestCode(); if (!mDelegate.startIntentSenderForResult(intent.getIntentSender(), requestCode)) { @@ -61,7 +61,7 @@ @Override public int showCancelableIntent( - @Nullable Intent intent, IntentCallback callback, @Nullable Integer errorId) { + @Nullable Intent intent, IntentCallback callback, Integer errorId) { int requestCode = generateNextRequestCode(); if (!mDelegate.startActivityForResult(intent, requestCode)) { @@ -73,7 +73,7 @@ } /* package */ int showCancelableIntent( - Callback<Integer> intentTrigger, IntentCallback callback, @Nullable Integer errorId) { + Callback<Integer> intentTrigger, IntentCallback callback, Integer errorId) { int requestCode = generateNextRequestCode(); intentTrigger.onResult(requestCode); @@ -128,7 +128,7 @@ Object errors = bundle.getSerializable(WindowAndroid.WINDOW_CALLBACK_ERRORS); if (errors instanceof HashMap) { @SuppressWarnings("unchecked") - HashMap<Integer, String> intentErrors = (HashMap<Integer, @Nullable String>) errors; + HashMap<Integer, String> intentErrors = (HashMap<Integer, String>) errors; mIntentErrors = intentErrors; } } @@ -139,8 +139,7 @@ return requestCode; } - private void storeCallbackData( - int requestCode, IntentCallback callback, @Nullable Integer errorId) { + private void storeCallbackData(int requestCode, IntentCallback callback, Integer errorId) { mOutstandingIntents.put(requestCode, callback); mIntentErrors.put( requestCode,
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java index 2319993d..4c8baedc 100644 --- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java +++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
@@ -391,8 +391,7 @@ * results, or null if no message is required. * @return Whether the intent was shown. */ - public boolean showIntent( - PendingIntent intent, IntentCallback callback, @Nullable Integer errorId) { + public boolean showIntent(PendingIntent intent, IntentCallback callback, Integer errorId) { if (mIntentRequestTracker == null) { Log.d(TAG, "Can't show intent as context is not an Activity: " + intent); return false; @@ -408,8 +407,7 @@ * results, or null if no message is required. * @return Whether the intent was shown. */ - public boolean showIntent( - @Nullable Intent intent, IntentCallback callback, @Nullable Integer errorId) { + public boolean showIntent(@Nullable Intent intent, IntentCallback callback, Integer errorId) { if (mIntentRequestTracker == null) { Log.d(TAG, "Can't show intent as context is not an Activity: " + intent); return false; @@ -427,7 +425,7 @@ * START_INTENT_FAILURE if failed. */ public int showCancelableIntent( - PendingIntent intent, IntentCallback callback, @Nullable Integer errorId) { + PendingIntent intent, IntentCallback callback, Integer errorId) { if (mIntentRequestTracker == null) { Log.d(TAG, "Can't show intent as context is not an Activity: " + intent); return START_INTENT_FAILURE; @@ -444,8 +442,7 @@ * @return A non-negative request code that could be used for finishActivity, or * START_INTENT_FAILURE if failed. */ - public int showCancelableIntent( - Intent intent, IntentCallback callback, @Nullable Integer errorId) { + public int showCancelableIntent(Intent intent, IntentCallback callback, Integer errorId) { if (mIntentRequestTracker == null) { Log.d(TAG, "Can't show intent as context is not an Activity: " + intent); return START_INTENT_FAILURE; @@ -454,7 +451,7 @@ } public int showCancelableIntent( - Callback<Integer> intentTrigger, IntentCallback callback, @Nullable Integer errorId) { + Callback<Integer> intentTrigger, IntentCallback callback, Integer errorId) { if (mIntentRequestTracker == null) { Log.d(TAG, "Can't show intent as context is not an Activity"); return START_INTENT_FAILURE;