diff --git a/BUILD.gn b/BUILD.gn index 7bcdd498d..6a73d50 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -12,7 +12,6 @@ import("//build/config/compiler/compiler.gni") import("//build/config/dcheck_always_on.gni") import("//build/config/features.gni") -import("//build/config/rust.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") import("//build/gn_logs.gni")
diff --git a/DEPS b/DEPS index 56e12364..a61c64f9 100644 --- a/DEPS +++ b/DEPS
@@ -232,7 +232,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'b69ef7d9f6484f1fd202561fcd677a225bb9988d', + 'v8_revision': '4188a00e1ad9b6078fe320ee5338ff3e6ae11c91', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. @@ -275,7 +275,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': 'efa1a35907ec678186e0828a78e6d1ee96896404', + 'freetype_revision': '7482c98f1533d1b685113a060f4588f703a81b79', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. @@ -303,7 +303,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': '6e94bcb84f0f51a7a0580fb57862a116506aebb7', + 'devtools_frontend_revision': '41f410b4cfcc66baefa655ecc7fcc392e8dac9e4', # 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. @@ -343,7 +343,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': '749e14490ea642ce21393ac72cf9c769e893cc3a', + 'dawn_revision': '1f86ce30b6fe8ece5925206e79d00b644ac6ed34', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -387,11 +387,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'libcxxabi_revision': '9f0517e2406c1405e6992f4ea155f0ad343ca413', + 'libcxxabi_revision': '7de86cbf37e0cf76ffe786ab6a21a728b1027bc2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'libunwind_revision': '0517d86d521b69fb860a3d255442e3b76159a976', + 'libunwind_revision': 'edf77b2d2d2253052f1a3410c7a97e049fc70807', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -773,7 +773,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'ZdxRIiFx3aei0omc-gTvzy16PuFYcMZAXddPEAtH1pwC', + 'version': 'TnotTDnWGUJDh0mSOMrgnIwzbfWFiwo2NTtr2SlUJ0MC', }, ], 'condition': 'checkout_android', @@ -989,7 +989,7 @@ # Tools used when building Chrome for Chrome OS. This affects both the Simple # Chrome workflow, as well as the chromeos-chrome ebuild. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8ac10e140917831029283df41c369e2940d1f981', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'aaa25984f3c971b3cf5333e861ac1caca2000700', 'condition': 'checkout_chromeos', }, @@ -1492,7 +1492,7 @@ }, 'src/third_party/re2/src': - Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + '8e08f47b11b413302749c0d8b17a1c94777495d5', + Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + 'df4dccfb1b31b44500748f7e8a49219e3bce426b', 'src/third_party/r8': { 'packages': [ @@ -1674,7 +1674,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c067cc56a7a40819da72644f3df109fc57702016', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@7e9081b8b4998e252974c9d988e66b160ce22a20', 'condition': 'checkout_src_internal', }, @@ -3353,7 +3353,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib', - 'version': 'version:2@1.5.21.cr0', + 'version': 'version:2@1.5.30.cr0', }, ], 'condition': 'checkout_android', @@ -3364,7 +3364,7 @@ 'packages': [ { 'package': 'chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common', - 'version': 'version:2@1.5.21.cr0', + 'version': 'version:2@1.5.30.cr0', }, ], 'condition': 'checkout_android',
diff --git a/WATCHLISTS b/WATCHLISTS index 0fbbb375..09dd63e 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -2089,6 +2089,11 @@ '|content/public/browser/host_zoom_map.h' \ '|content/public/browser/storage_partition.h' }, + 'zte': { + 'filepath': 'chrome/browser/ash/login/enrollment/*auto_enrollment*|' \ + 'chrome/browser/ash/policy/enrollment/*auto_enrollment*|' \ + 'chrome/browser/ash/policy/enrollment/private_membership/' + }, }, ############################################################################## @@ -2889,5 +2894,6 @@ 'yusukes+watch@chromium.org'], 'zlib': ['cblume+zlib@chromium.org'], 'zoom': ['wjmaclean@chromium.org'], + 'zte': ['amraboelkher+watch@chromium.org'], }, }
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn index 6a5afb6d..e630d451 100644 --- a/android_webview/BUILD.gn +++ b/android_webview/BUILD.gn
@@ -587,6 +587,8 @@ "java/src/org/chromium/android_webview/BrowserSafeModeActionList.java", "java/src/org/chromium/android_webview/CleanupReference.java", "java/src/org/chromium/android_webview/ClientCertLookupTable.java", + "java/src/org/chromium/android_webview/DarkModeHelper.java", + "java/src/org/chromium/android_webview/DarkModeHistogramRecorder.java", "java/src/org/chromium/android_webview/DefaultVideoPosterRequestHandler.java", "java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java", "java/src/org/chromium/android_webview/FindAddress.java", @@ -666,6 +668,7 @@ "//services/network/public/mojom:url_loader_base_java", "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/androidx:androidx_annotation_annotation_java", + "//third_party/androidx:androidx_core_core_java", "//third_party/blink/public:blink_headers_java", "//third_party/blink/public/mojom:mojom_platform_java", "//ui/android:ui_no_recycler_view_java",
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 cee5233..601dbaf 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -483,6 +483,8 @@ // attached to the Window and size tracking is enabled. It will be null otherwise. private AwWindowCoverageTracker mAwWindowCoverageTracker; + private DarkModeHistogramRecorder mDarkModeHistogramRecorder; + private static class WebContentsInternalsHolder implements WebContents.InternalsHolder { private final WeakReference<AwContents> mAwContentsRef; @@ -1476,6 +1478,11 @@ mWebContentsObserver.destroy(); } mWebContentsObserver = new AwWebContentsObserver(mWebContents, this, mContentsClient); + if (mDarkModeHistogramRecorder != null) { + mDarkModeHistogramRecorder.destroy(); + } + mDarkModeHistogramRecorder = + new DarkModeHistogramRecorder(mWebContents, mContext, mSettings); } /** @@ -1645,6 +1652,8 @@ mWebContentsObserver.destroy(); mWebContentsObserver = null; + mDarkModeHistogramRecorder.destroy(); + mDarkModeHistogramRecorder = null; mNativeAwContents = 0; mWebContents = null; mWebContentsInternals = null;
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 689ee2af..671c65a 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -46,13 +46,6 @@ private static final String TAG = "AwSettings"; - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. - private static final int OS_NIGHT_MODE_UNDEFINED = 0 * AwSettings.FORCE_DARK_MODES_COUNT; - private static final int OS_NIGHT_MODE_NO = 1 * AwSettings.FORCE_DARK_MODES_COUNT; - private static final int OS_NIGHT_MODE_YES = 2 * AwSettings.FORCE_DARK_MODES_COUNT; - private static final int UMA_FORCE_DARK_MODE_MAX_VALUE = 3 * AwSettings.FORCE_DARK_MODES_COUNT; - /* See {@link android.webkit.WebSettings}. */ @Retention(RetentionPolicy.SOURCE) @IntDef({LAYOUT_ALGORITHM_NORMAL, @@ -313,6 +306,10 @@ // Defer initializing the native side until a native WebContents instance is set. } + public int getUiModeNight() { + return mContext.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + } + @CalledByNative private void nativeAwSettingsGone(long nativeAwSettings) { assert mNativeAwSettings != 0 && mNativeAwSettings == nativeAwSettings; @@ -1743,7 +1740,7 @@ } public void setForceDarkMode(@ForceDarkMode int forceDarkMode) { - recordForceDarkMode(forceDarkMode); + DarkModeHistogramRecorder.recordForceDarkModeAPIUsage(mContext, forceDarkMode); synchronized (mAwSettingsLock) { if (mForceDarkMode != forceDarkMode) { mForceDarkMode = forceDarkMode; @@ -1752,26 +1749,6 @@ } } - private int getOsNightMode() { - int osNightMode = mContext.getResources().getConfiguration().uiMode - & Configuration.UI_MODE_NIGHT_MASK; - switch (osNightMode) { - case Configuration.UI_MODE_NIGHT_NO: - return OS_NIGHT_MODE_NO; - case Configuration.UI_MODE_NIGHT_YES: - return OS_NIGHT_MODE_YES; - case Configuration.UI_MODE_NIGHT_UNDEFINED: - default: - return OS_NIGHT_MODE_UNDEFINED; - } - } - - private void recordForceDarkMode(int forceDarkMode) { - int value = getOsNightMode() + forceDarkMode; - RecordHistogram.recordEnumeratedHistogram( - "Android.WebView.ForceDarkMode", value, UMA_FORCE_DARK_MODE_MAX_VALUE); - } - public boolean isDarkMode() { synchronized (mAwSettingsLock) { assert mNativeAwSettings != 0; @@ -1794,7 +1771,7 @@ } public void setForceDarkBehavior(@ForceDarkBehavior int forceDarkBehavior) { - recordForceDarkBehavior(forceDarkBehavior); + DarkModeHistogramRecorder.recordForceDarkBehaviorAPIUsage(forceDarkBehavior); synchronized (mAwSettingsLock) { if (mForceDarkBehavior != forceDarkBehavior) { mForceDarkBehavior = forceDarkBehavior; @@ -1803,11 +1780,6 @@ } } - private void recordForceDarkBehavior(@ForceDarkBehavior int forceDarkBehavior) { - RecordHistogram.recordEnumeratedHistogram("Android.WebView.ForceDarkBehavior", - forceDarkBehavior, AwSettings.FORCE_DARK_STRATEGY_COUNT); - } - @CalledByNative private boolean getAllowRunningInsecureContentLocked() { assert Thread.holdsLock(mAwSettingsLock);
diff --git a/android_webview/java/src/org/chromium/android_webview/DarkModeHelper.java b/android_webview/java/src/org/chromium/android_webview/DarkModeHelper.java new file mode 100644 index 0000000..ac48ade4 --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/DarkModeHelper.java
@@ -0,0 +1,93 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.android_webview; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; + +import androidx.core.graphics.ColorUtils; + +import org.chromium.base.Log; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * This class provides the utility methods for dark mode. + */ +public class DarkModeHelper { + private static final String TAG = "DarkModeHelper"; + + @Retention(RetentionPolicy.SOURCE) + public @interface LightTheme { + int LIGHT_THEME_UNDEFINED = 0; + int LIGHT_THEME_FALSE = 1; + int LIGHT_THEME_TRUE = 2; + int LIGHT_THEME_COUNT = 3; + } + + @Retention(RetentionPolicy.SOURCE) + public @interface TextLuminance { + int TEXT_LUMINACE_UNDEFINED = 0; + int TEXT_LUMINACE_LIGHT = 1; + int TEXT_LUMINACE_DARK = 2; + int TEXT_LUMINACE_COUNT = 3; + } + + @Retention(RetentionPolicy.SOURCE) + public @interface NightMode { + int NGITH_MODE_UNDEFINED = 0; + int NIGHT_MODE_ON = 1; + int NIGHT_MODE_OFF = 2; + int NIGHT_MODE_COUNT = 3; + } + + @NightMode + public static int getNightMode(Context context) { + int nightMode = + context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; + switch (nightMode) { + case Configuration.UI_MODE_NIGHT_NO: + return NightMode.NIGHT_MODE_OFF; + case Configuration.UI_MODE_NIGHT_YES: + return NightMode.NIGHT_MODE_ON; + case Configuration.UI_MODE_NIGHT_UNDEFINED: + default: + return NightMode.NGITH_MODE_UNDEFINED; + } + } + + @LightTheme + public static int getLightTheme(Context context) { + int lightTheme = LightTheme.LIGHT_THEME_UNDEFINED; + TypedArray a = + context.getTheme().obtainStyledAttributes(new int[] {android.R.attr.isLightTheme}); + if (a.hasValue(0)) { + lightTheme = a.getBoolean(0, true) ? LightTheme.LIGHT_THEME_TRUE + : LightTheme.LIGHT_THEME_FALSE; + } + a.recycle(); + return lightTheme; + } + + @TextLuminance + public static int getPrimaryTextLuminace(Context context) { + int textColor = TextLuminance.TEXT_LUMINACE_UNDEFINED; + TypedArray a = context.getTheme().obtainStyledAttributes( + new int[] {android.R.attr.textColorPrimary}); + if (a.hasValue(0)) { + try { + textColor = ColorUtils.calculateLuminance(a.getColor(0, 0)) < 0.5 + ? TextLuminance.TEXT_LUMINACE_DARK + : TextLuminance.TEXT_LUMINACE_LIGHT; + } catch (UnsupportedOperationException e) { + Log.e(TAG, "Wrong color format", e); + } + } + a.recycle(); + return textColor; + } +}
diff --git a/android_webview/java/src/org/chromium/android_webview/DarkModeHistogramRecorder.java b/android_webview/java/src/org/chromium/android_webview/DarkModeHistogramRecorder.java new file mode 100644 index 0000000..157f55c --- /dev/null +++ b/android_webview/java/src/org/chromium/android_webview/DarkModeHistogramRecorder.java
@@ -0,0 +1,104 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.android_webview; + +import android.content.Context; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.android_webview.settings.ForceDarkBehavior; +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.content_public.browser.LoadCommittedDetails; +import org.chromium.content_public.browser.WebContents; +import org.chromium.content_public.browser.WebContentsObserver; + +import java.lang.ref.WeakReference; + +/** + * This class to record various dark mode metrics. + */ +public class DarkModeHistogramRecorder extends WebContentsObserver { + private WeakReference<Context> mContext; + private WeakReference<AwSettings> mAwSettings; + + public DarkModeHistogramRecorder( + WebContents webContents, Context context, AwSettings awSettings) { + super(webContents); + mContext = new WeakReference<Context>(context); + mAwSettings = new WeakReference<AwSettings>(awSettings); + } + + @Override + public void navigationEntryCommitted(LoadCommittedDetails details) { + if (!details.isMainFrame()) return; + recordDarkModeMetrics(); + } + + private void recordDarkModeMetrics() { + Context context = mContext.get(); + if (context == null) return; + + AwSettings awSettings = mAwSettings.get(); + if (awSettings == null) return; + + int nightMode = DarkModeHelper.getNightMode(context); + int lightTheme = DarkModeHelper.getLightTheme(context); + boolean isDarkMode = awSettings.isDarkMode(); + int forceDarkMode = awSettings.getForceDarkMode(); + int forceDarkBehavior = awSettings.getForceDarkBehavior(); + int textLuminance = DarkModeHelper.getPrimaryTextLuminace(context); + recordDarkModeMetrics( + nightMode, lightTheme, isDarkMode, forceDarkMode, forceDarkBehavior, textLuminance); + } + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + public static void recordDarkModeMetrics(int nightMode, int lightTheme, boolean isDarkMode, + int forceDarkMode, int forceDarkBehavior, int textLuminance) { + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.ForceDarkBehavior", + forceDarkBehavior, AwSettings.FORCE_DARK_STRATEGY_COUNT); + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.ForceDarkMode", + forceDarkMode, AwSettings.FORCE_DARK_MODES_COUNT); + RecordHistogram.recordBooleanHistogram("Android.WebView.DarkMode.InDarkMode", isDarkMode); + // Refer to WebViewInDarkModeVsLightTheme in enums.xml. + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.InDarkModeVsLightTheme", + (isDarkMode ? 0 : 1) * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT + lightTheme, + 2 * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT); + // Refer to WebViewInDarkModeVsNightMode in enums.xml. + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.InDarkModeVsNightMode", + (isDarkMode ? 0 : 1) * DarkModeHelper.NightMode.NIGHT_MODE_COUNT + nightMode, + 2 * DarkModeHelper.NightMode.NIGHT_MODE_COUNT); + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.LightTheme", lightTheme, + DarkModeHelper.LightTheme.LIGHT_THEME_COUNT); + RecordHistogram.recordEnumeratedHistogram( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme", + textLuminance * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT + lightTheme, + DarkModeHelper.TextLuminance.TEXT_LUMINACE_COUNT + * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT); + RecordHistogram.recordEnumeratedHistogram( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode", + textLuminance * DarkModeHelper.NightMode.NIGHT_MODE_COUNT + nightMode, + DarkModeHelper.TextLuminance.TEXT_LUMINACE_COUNT + * DarkModeHelper.NightMode.NIGHT_MODE_COUNT); + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.NightMode", nightMode, + DarkModeHelper.NightMode.NIGHT_MODE_COUNT); + RecordHistogram.recordEnumeratedHistogram("Android.WebView.DarkMode.NightModeVsLightTheme", + nightMode * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT + lightTheme, + DarkModeHelper.NightMode.NIGHT_MODE_COUNT + * DarkModeHelper.LightTheme.LIGHT_THEME_COUNT); + } + + public static void recordForceDarkModeAPIUsage(Context context, int forceDarkMode) { + int value = DarkModeHelper.getNightMode(context) * AwSettings.FORCE_DARK_MODES_COUNT + + forceDarkMode; + System.out.println("recordForce value " + value); + RecordHistogram.recordEnumeratedHistogram("Android.WebView.ForceDarkMode", value, + DarkModeHelper.NightMode.NIGHT_MODE_COUNT * AwSettings.FORCE_DARK_MODES_COUNT); + } + + public static void recordForceDarkBehaviorAPIUsage(@ForceDarkBehavior int forceDarkBehavior) { + RecordHistogram.recordEnumeratedHistogram("Android.WebView.ForceDarkBehavior", + forceDarkBehavior, AwSettings.FORCE_DARK_STRATEGY_COUNT); + } +}
diff --git a/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java b/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java new file mode 100644 index 0000000..4a5b2f3 --- /dev/null +++ b/android_webview/junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java
@@ -0,0 +1,167 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.android_webview.robolectric; + +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; + +import androidx.test.filters.SmallTest; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.robolectric.annotation.Config; + +import org.chromium.android_webview.AwSettings; +import org.chromium.android_webview.DarkModeHelper; +import org.chromium.android_webview.DarkModeHistogramRecorder; +import org.chromium.base.metrics.RecordHistogram; +import org.chromium.base.metrics.test.ShadowRecordHistogram; +import org.chromium.base.test.util.Feature; +import org.chromium.testing.local.LocalRobolectricTestRunner; + +/** + * Junit tests for DarkModeHistogrmRecorder. + */ +@RunWith(LocalRobolectricTestRunner.class) +@Config(manifest = Config.NONE, shadows = {ShadowRecordHistogram.class}) +public class DarkModeHistogramRecorderTest { + @Before + public void setUp() { + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.ForceDarkBehavior"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.ForceDarkMode"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.InDarkMode"); + RecordHistogram.forgetHistogramForTesting( + "Android.WebView.DarkMode.InDarkModeVsLightTheme"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.InDarkModeVsNightMode"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.LightTheme"); + RecordHistogram.forgetHistogramForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme"); + RecordHistogram.forgetHistogramForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.NightMode"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.DarkMode.NightModeVsLightTheme"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.ForceDarkMode"); + RecordHistogram.forgetHistogramForTesting("Android.WebView.ForceDarkBehavior"); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testRecordDarkModeMetrics() { + // The hardcode numbers can't be changed, they are written to histogram. + DarkModeHistogramRecorder.recordDarkModeMetrics(DarkModeHelper.NightMode.NIGHT_MODE_ON, + DarkModeHelper.LightTheme.LIGHT_THEME_TRUE, /*isDarkMode=*/true, + AwSettings.FORCE_DARK_ON, AwSettings.MEDIA_QUERY_ONLY, + DarkModeHelper.TextLuminance.TEXT_LUMINACE_LIGHT); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.ForceDarkBehavior")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.ForceDarkBehavior", 1 /*MEDIA_QUERY_ONLY*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.ForceDarkMode")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.ForceDarkMode", 2 /*FORCE_DARK_ON*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.InDarkMode")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.InDarkMode", 1 /*isDarkMode=true*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.InDarkModeVsLightTheme")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.InDarkModeVsLightTheme", + 2 /*isDarkMode=true && LIGHT_THEME_TRUE*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.InDarkModeVsNightMode")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.InDarkModeVsNightMode", + 1 /*isDarkMode=true && NIGHT_MODE_ON*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.LightTheme")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.LightTheme", 2 /*LIGHT_THEME_TRUE*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme", + 5 /*TEXT_LUMINACE_LIGHT && LIGHT_THEME_TRUE*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode", + 4 /*TEXT_LUMINACE_LIGHT && NIGHT_MODE_ON*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.NightMode")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.NightMode", 1 /*NIGHT_MODE_ON*/)); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.DarkMode.NightModeVsLightTheme")); + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.DarkMode.NightModeVsLightTheme", + 5 /*NIGHT_MODE_ON && LIGHT_THEME_TRUE*/)); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testRecordForceDarkModeAPIUsage() { + Configuration mockedConfiguration = Mockito.mock(Configuration.class); + mockedConfiguration.uiMode = Configuration.UI_MODE_NIGHT_NO; + Resources mockedResource = Mockito.mock(Resources.class); + when(mockedResource.getConfiguration()).thenReturn(mockedConfiguration); + Context mockedContext = Mockito.mock(Context.class); + when(mockedContext.getResources()).thenReturn(mockedResource); + + DarkModeHistogramRecorder.recordForceDarkModeAPIUsage( + mockedContext, AwSettings.FORCE_DARK_AUTO); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting("Android.WebView.ForceDarkMode")); + // The hardcode numbers can't be changed, they are written to histogram. + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.ForceDarkMode", 7 /* NIGHT_MODE_OFF && FOCE_DARK_AUTO*/)); + } + + @Test + @SmallTest + @Feature({"AndroidWebView"}) + public void testRecordForceDarkBehaviorAPIUsage() { + DarkModeHistogramRecorder.recordForceDarkBehaviorAPIUsage( + AwSettings.PREFER_MEDIA_QUERY_OVER_FORCE_DARK); + Assert.assertEquals(1, + RecordHistogram.getHistogramTotalCountForTesting( + "Android.WebView.ForceDarkBehavior")); + // The hardcode numbers can't be changed, they are written to histogram. + Assert.assertEquals(1, + RecordHistogram.getHistogramValueCountForTesting( + "Android.WebView.ForceDarkBehavior", + 2 /* PREFER_MEDIA_QUERY_OVER_FORCE_DARK*/)); + } +}
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index 0912987c..4a87b41d 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -605,6 +605,7 @@ "../junit/src/org/chromium/android_webview/robolectric/AwDisplayModeControllerTest.java", "../junit/src/org/chromium/android_webview/robolectric/AwLayoutSizerTest.java", "../junit/src/org/chromium/android_webview/robolectric/AwScrollOffsetManagerTest.java", + "../junit/src/org/chromium/android_webview/robolectric/DarkModeHistogramRecorderTest.java", "../junit/src/org/chromium/android_webview/robolectric/FindAddressTest.java", "../junit/src/org/chromium/android_webview/robolectric/RectUtilsTest.java", "../junit/src/org/chromium/android_webview/robolectric/common/FlagOverrideHelperTest.java",
diff --git a/android_webview/tools/system_webview_shell/test/data/webexposed/global-interface-listing-expected.txt b/android_webview/tools/system_webview_shell/test/data/webexposed/global-interface-listing-expected.txt index d253a5c..88eb8fa 100644 --- a/android_webview/tools/system_webview_shell/test/data/webexposed/global-interface-listing-expected.txt +++ b/android_webview/tools/system_webview_shell/test/data/webexposed/global-interface-listing-expected.txt
@@ -1388,6 +1388,7 @@ method querySelector method querySelectorAll method releaseEvents + method reportError method webkitCancelFullScreen method webkitExitFullscreen method write
diff --git a/ash/app_list/views/search_result_suggestion_chip_view.cc b/ash/app_list/views/search_result_suggestion_chip_view.cc index 66f1950..d579c7e 100644 --- a/ash/app_list/views/search_result_suggestion_chip_view.cc +++ b/ash/app_list/views/search_result_suggestion_chip_view.cc
@@ -58,7 +58,6 @@ AppListViewDelegate* view_delegate) : view_delegate_(view_delegate) { SetFocusBehavior(FocusBehavior::ALWAYS); - set_suppress_default_focus_handling(); SetCallback( base::BindRepeating(&SearchResultSuggestionChipView::OnButtonPressed, base::Unretained(this))); @@ -158,9 +157,7 @@ void SearchResultSuggestionChipView::OnFocus() { SchedulePaint(); - // TODO(pbos): See if this can be removed along with - // set_suppress_default_focus_handling() in the constructor. - NotifyAccessibilityEvent(ax::mojom::Event::kFocus, true); + SearchResultBaseView::OnFocus(); } void SearchResultSuggestionChipView::OnBlur() {
diff --git a/ash/display/shared_display_edge_indicator.cc b/ash/display/shared_display_edge_indicator.cc index d86834d..174deb1 100644 --- a/ash/display/shared_display_edge_indicator.cc +++ b/ash/display/shared_display_edge_indicator.cc
@@ -61,7 +61,8 @@ animation_ = std::make_unique<gfx::ThrobAnimation>(this); gfx::AnimationContainer* container = new gfx::AnimationContainer(); container->SetAnimationRunner( - std::make_unique<views::CompositorAnimationRunner>(src_widget_.get())); + std::make_unique<views::CompositorAnimationRunner>(src_widget_.get(), + FROM_HERE)); animation_->SetContainer(container); animation_->SetThrobDuration(base::TimeDelta::FromMilliseconds(1000)); animation_->StartThrobbing(/*infinite=*/-1);
diff --git a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc index e3cef36..b14f4283 100644 --- a/ash/shortcut_viewer/views/keyboard_shortcut_view.cc +++ b/ash/shortcut_viewer/views/keyboard_shortcut_view.cc
@@ -102,7 +102,6 @@ public: ShortcutsListScrollView() { GetViewAccessibility().OverrideRole(ax::mojom::Role::kScrollView); - set_suppress_default_focus_handling(); } ~ShortcutsListScrollView() override = default; @@ -110,9 +109,7 @@ // views::View: void OnFocus() override { SetHasFocusIndicator(true); - // TODO(pbos): See if this can be removed along with - // set_suppress_default_focus_handling() in the constructor. - NotifyAccessibilityEvent(ax::mojom::Event::kFocus, true); + views::ScrollView::OnFocus(); } void OnBlur() override { SetHasFocusIndicator(false); }
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc index f28a9317..979e252 100644 --- a/ash/wm/splitview/split_view_controller.cc +++ b/ash/wm/splitview/split_view_controller.cc
@@ -332,7 +332,7 @@ gfx::AnimationContainer* container = new gfx::AnimationContainer(); container->SetAnimationRunner( - std::make_unique<views::CompositorAnimationRunner>(widget)); + std::make_unique<views::CompositorAnimationRunner>(widget, FROM_HERE)); SetContainer(container); tracker_.emplace(widget->GetCompositor()->RequestNewThroughputTracker());
diff --git a/base/android/java/src/org/chromium/base/compat/ApiHelperForR.java b/base/android/java/src/org/chromium/base/compat/ApiHelperForR.java index 8db52cd..6a5b85d 100644 --- a/base/android/java/src/org/chromium/base/compat/ApiHelperForR.java +++ b/base/android/java/src/org/chromium/base/compat/ApiHelperForR.java
@@ -6,6 +6,7 @@ import android.annotation.TargetApi; import android.content.Context; +import android.graphics.Rect; import android.hardware.input.InputManager; import android.net.Uri; import android.os.Build; @@ -13,6 +14,7 @@ import android.view.Display; import android.view.InputEvent; import android.view.VerifiedInputEvent; +import android.view.WindowManager; import org.chromium.base.annotations.VerifiesOnR; @@ -46,4 +48,12 @@ public static VerifiedInputEvent verifyInputEvent(InputManager manager, InputEvent inputEvent) { return manager.verifyInputEvent(inputEvent); } + + /** + * See {@link WindowManager#getMaximumWindowMetrics()}. + * See {@link WindowMetrics#getBounds()}. + */ + public static Rect getMaximumWindowMetricsBounds(WindowManager manager) { + return manager.getMaximumWindowMetrics().getBounds(); + } }
diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index d3b007a..62e7e4b 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn
@@ -145,14 +145,6 @@ # every toolchain can pass through the "global" value via toolchain_args(). host_toolchain = "" - # Whether to allow Rust code to be part of the Chromium *build process*. - # This can be used to create Rust test binaries, even if the flag below - # is false. - enable_rust = false - - # Whether to allow Rust code to contribute to the main Chromium binaries. - enable_rust_in_chromium = false - # DON'T ADD MORE FLAGS HERE. Read the comment above. }
diff --git a/build/config/fuchsia/test/network_capabilities.test-cmx b/build/config/fuchsia/test/network_capabilities.test-cmx index 1f2d1214..7218c3f 100644 --- a/build/config/fuchsia/test/network_capabilities.test-cmx +++ b/build/config/fuchsia/test/network_capabilities.test-cmx
@@ -2,7 +2,6 @@ "facets": { "fuchsia.test": { "injected-services": { - "fuchsia.net.NameLookup": "fuchsia-pkg://fuchsia.com/dns-resolver#meta/dns-resolver.cmx", "fuchsia.net.interfaces.State": "fuchsia-pkg://fuchsia.com/netstack#meta/netstack.cmx", "fuchsia.net.name.Lookup": "fuchsia-pkg://fuchsia.com/dns-resolver#meta/dns-resolver.cmx", "fuchsia.posix.socket.Provider": "fuchsia-pkg://fuchsia.com/netstack#meta/netstack.cmx" @@ -19,7 +18,6 @@ "services": [ "fuchsia.device.NameProvider", "fuchsia.net.name.Lookup", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider" ]
diff --git a/build/config/rust.gni b/build/config/rust.gni index d563815..864c176c 100644 --- a/build/config/rust.gni +++ b/build/config/rust.gni
@@ -11,6 +11,14 @@ } declare_args() { + # Whether to allow Rust code to be part of the Chromium *build process*. + # This can be used to create Rust test binaries, even if the flag below + # is false. + enable_rust = false + + # Whether to allow Rust code to contribute to the main Chromium binaries. + enable_rust_in_chromium = false + # Use unverified, untrusted, Rust toolchains from the internet # (which support more platforms and options than those we trust for real # builds).
diff --git a/build/fuchsia/common_args.py b/build/fuchsia/common_args.py index 847f2be..691fad6 100644 --- a/build/fuchsia/common_args.py +++ b/build/fuchsia/common_args.py
@@ -168,6 +168,6 @@ if args.device: device = args.device else: - device = 'fvdl' if args.target_cpu == 'x64' else 'qemu' + device = 'aemu' if args.target_cpu == 'x64' else 'qemu' return _LoadTargetClass(_GetPathToBuiltinTarget(device)).CreateFromArgs(args)
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index a73348e..1f95d08 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -6.20210902.0.1 +6.20210902.1.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index e379d41..1f95d08 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -6.20210901.3.1 +6.20210902.1.1
diff --git a/chrome/android/chrome_java_resources.gni b/chrome/android/chrome_java_resources.gni index aa6ab732..77c3cd6 100644 --- a/chrome/android/chrome_java_resources.gni +++ b/chrome/android/chrome_java_resources.gni
@@ -474,7 +474,6 @@ "java/res/drawable/checkerboard_background.xml", "java/res/drawable/computer_black_24dp.xml", "java/res/drawable/contextual_search_panel_help_background.xml", - "java/res/drawable/contextual_search_promo_background.xml", "java/res/drawable/custom_tabs_handle_view_shape.xml", "java/res/drawable/data_reduction_big.xml", "java/res/drawable/data_reduction_illustration.xml", @@ -715,6 +714,7 @@ "java/res/layout/send_tab_to_self_device_picker_list.xml", "java/res/layout/send_tab_to_self_device_picker_toolbar.xml", "java/res/layout/send_tab_to_self_feature_unavailable_prompt.xml", + "java/res/layout/send_tab_to_self_manage_devices_link.xml", "java/res/layout/settings_activity.xml", "java/res/layout/share_sheet_content.xml", "java/res/layout/share_sheet_item.xml",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java index 8d344a4..84233a0 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantKeyboardIntegrationTest.java
@@ -83,6 +83,7 @@ @Test @MediumTest + @DisabledTest(message = "https://crbug.com/1245563") public void keyboardDoesNotShowOnElementClick() throws Exception { ArrayList<ActionProto> list = new ArrayList<>();
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java index 5c01bb57..d663c8a 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/StartSurfaceTest.java
@@ -1525,7 +1525,8 @@ @Feature({"StartSurface"}) // clang-format off @CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/false" - + "/new_home_surface_from_home_button/hide_mv_tiles_and_tab_switcher"}) + + "/new_home_surface_from_home_button/hide_mv_tiles_and_tab_switcher" + + "/tab_count_button_on_start_surface/true"}) public void testNewSurfaceFromHomeButton(){ // clang-format on ChromeTabbedActivity cta = mActivityTestRule.getActivity(); @@ -1559,7 +1560,8 @@ @Feature({"StartSurface"}) // clang-format off @CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/false" - + "/new_home_surface_from_home_button/hide_tab_switcher_only"}) + + "/new_home_surface_from_home_button/hide_tab_switcher_only" + + "/tab_count_button_on_start_surface/true"}) public void testNewSurfaceHideTabOnlyFromHomeButton() { // clang-format on ChromeTabbedActivity cta = mActivityTestRule.getActivity();
diff --git a/chrome/android/features/start_surface/public/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java b/chrome/android/features/start_surface/public/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java index de9939e8..c3ff876b 100644 --- a/chrome/android/features/start_surface/public/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java +++ b/chrome/android/features/start_surface/public/java/src/org/chromium/chrome/features/start_surface/StartSurfaceConfiguration.java
@@ -68,6 +68,12 @@ new BooleanCachedFieldTrialParameter(ChromeFeatureList.START_SURFACE_ANDROID, HOME_BUTTON_ON_GRID_TAB_SWITCHER_PARAM, false); + private static final String TAB_COUNT_BUTTON_ON_START_SURFACE_PARAM = + "tab_count_button_on_start_surface"; + public static final BooleanCachedFieldTrialParameter TAB_COUNT_BUTTON_ON_START_SURFACE = + new BooleanCachedFieldTrialParameter(ChromeFeatureList.START_SURFACE_ANDROID, + TAB_COUNT_BUTTON_ON_START_SURFACE_PARAM, false); + private static final String NEW_SURFACE_PARAM = "new_home_surface_from_home_button"; public static final StringCachedFieldTrialParameter NEW_SURFACE_FROM_HOME_BUTTON = new StringCachedFieldTrialParameter(
diff --git a/chrome/android/java/res/drawable/contextual_search_promo_background.xml b/chrome/android/java/res/drawable/contextual_search_promo_background.xml deleted file mode 100644 index 2db4fcd..0000000 --- a/chrome/android/java/res/drawable/contextual_search_promo_background.xml +++ /dev/null
@@ -1,5 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<inset - xmlns:android="http://schemas.android.com/apk/res/android" - android:drawable="@color/contextual_search_promo_background_color" - android:insetTop="9dp" />
diff --git a/chrome/android/java/res/layout/contextual_search_promo_view.xml b/chrome/android/java/res/layout/contextual_search_promo_view.xml index 5ecc73c..91151981 100644 --- a/chrome/android/java/res/layout/contextual_search_promo_view.xml +++ b/chrome/android/java/res/layout/contextual_search_promo_view.xml
@@ -2,65 +2,69 @@ <!-- Copyright 2016 The Chromium Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> - -<RelativeLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/contextual_search_promo" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@drawable/contextual_search_promo_background" - android:orientation="vertical" + android:paddingTop="8dp" + android:paddingBottom="16dp" + android:paddingStart="16dp" + android:paddingEnd="16dp" android:visibility="invisible"> - - <!-- The top margin is supposed to be 16d, but the promo background already sets a - insetTop of 9dp (see contextual_search_promo_background.xml). For this reason, - we only should set the remaining margin top, which is 7dp --> - <org.chromium.ui.widget.TextViewWithClickableSpans - android:id="@+id/contextual_search_promo_text" - android:layout_alignParentTop="true" - android:layout_alignParentStart="true" - android:layout_alignParentEnd="true" + + <org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="7dp" - android:layout_marginStart="16dp" - android:layout_marginEnd="16dp" - android:bufferType="spannable" - android:textAppearance="@style/TextAppearance.TextLarge.Primary" /> - - <org.chromium.ui.widget.ButtonCompat - android:id="@+id/contextual_search_allow_button" - android:layout_below="@id/contextual_search_promo_text" - android:layout_alignParentEnd="true" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:layout_marginTop="16dp" - android:layout_marginEnd="16dp" - android:paddingStart="8dp" - android:paddingEnd="8dp" - android:text="@string/contextual_search_allow_button" - style="@style/FilledButton" /> - - <org.chromium.ui.widget.ButtonCompat - android:id="@+id/contextual_search_no_thanks_button" - android:layout_below="@id/contextual_search_promo_text" - android:layout_toStartOf="@id/contextual_search_allow_button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:layout_marginTop="16dp" - android:layout_marginEnd="16dp" - android:paddingStart="8dp" - android:paddingEnd="8dp" - android:text="@string/contextual_search_no_thanks_button" - style="@style/TextButton" /> - - <View - android:layout_below="@id/contextual_search_allow_button" - android:layout_width="match_parent" - android:layout_height="1px" - android:layout_marginTop="16dp" - android:background="@color/contextual_search_promo_border_color" /> - -</RelativeLayout> + style="@style/MaterialCardStyle"> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <org.chromium.ui.widget.TextViewWithClickableSpans + android:id="@+id/contextual_search_promo_text" + android:layout_alignParentTop="true" + android:layout_alignParentStart="true" + android:layout_alignParentEnd="true" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:bufferType="spannable" + android:textAppearance="@style/TextAppearance.TextLarge.Primary" /> + + <org.chromium.ui.widget.ButtonCompat + android:id="@+id/contextual_search_allow_button" + android:layout_below="@id/contextual_search_promo_text" + android:layout_alignParentEnd="true" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + android:layout_marginEnd="16dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" + android:text="@string/contextual_search_allow_button" + style="@style/FilledButton" /> + + <org.chromium.ui.widget.ButtonCompat + android:id="@+id/contextual_search_no_thanks_button" + android:layout_below="@id/contextual_search_promo_text" + android:layout_toStartOf="@id/contextual_search_allow_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:layout_marginTop="16dp" + android:layout_marginBottom="16dp" + android:layout_marginEnd="16dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" + android:text="@string/contextual_search_no_thanks_button" + style="@style/TextButton" /> + </RelativeLayout> + </org.chromium.components.browser_ui.widget.MaterialCardViewNoShadow> +</FrameLayout> \ No newline at end of file
diff --git a/chrome/android/java/res/layout/send_tab_to_self_device_picker_list.xml b/chrome/android/java/res/layout/send_tab_to_self_device_picker_list.xml index c99b896..1f0b172b 100644 --- a/chrome/android/java/res/layout/send_tab_to_self_device_picker_list.xml +++ b/chrome/android/java/res/layout/send_tab_to_self_device_picker_list.xml
@@ -20,4 +20,4 @@ android:paddingTop="@dimen/min_touch_target_size" android:divider="@null" android:dividerHeight="0dp" /> -</LinearLayout> \ No newline at end of file +</LinearLayout>
diff --git a/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml b/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml new file mode 100644 index 0000000..344b9a7 --- /dev/null +++ b/chrome/android/java/res/layout/send_tab_to_self_manage_devices_link.xml
@@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2021 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> + +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingStart="10dp"> + + <View + style="@style/HorizontalDivider" + android:layout_width="match_parent" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:paddingTop="10dp" + android:paddingBottom="10dp"> + + <org.chromium.components.browser_ui.widget.RoundedCornerImageView + android:id="@+id/account_avatar" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center_vertical" /> + + <TextView + android:id="@+id/manage_devices_link" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="@style/TextAppearance.TextMedium.Secondary" + android:gravity="center_vertical" + android:paddingStart="20dp" /> + + </LinearLayout> +</LinearLayout>
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml index 3b4dfe4c..442608f 100644 --- a/chrome/android/java/res/values/colors.xml +++ b/chrome/android/java/res/values/colors.xml
@@ -56,7 +56,6 @@ <!-- Contextual Search colors --> <color name="contextual_search_promo_background_color">@color/default_bg_color_elev_0</color> - <color name="contextual_search_promo_border_color">#C2C2C2</color> <!-- Find in Page colors --> <color name="find_in_page_query_white_color">@android:color/white</color>
diff --git a/chrome/android/java/res/xml/contextual_search_preferences.xml b/chrome/android/java/res/xml/contextual_search_preferences.xml index 1bf11c8..43b5ad53 100644 --- a/chrome/android/java/res/xml/contextual_search_preferences.xml +++ b/chrome/android/java/res/xml/contextual_search_preferences.xml
@@ -18,6 +18,7 @@ android:summary="@string/contextual_search_see_better_results_summary" /> <org.chromium.components.browser_ui.settings.TextMessagePreference + android:key="contextual_search_description" android:title="@string/contextual_search_description" app:allowDividerBelow="false" />
diff --git a/chrome/android/java/res/xml/contextual_search_tap_preferences.xml b/chrome/android/java/res/xml/contextual_search_tap_preferences.xml index 41d8c7d..cfa0306 100644 --- a/chrome/android/java/res/xml/contextual_search_tap_preferences.xml +++ b/chrome/android/java/res/xml/contextual_search_tap_preferences.xml
@@ -18,6 +18,7 @@ android:summary="@string/contextual_search_see_better_results_summary" /> <org.chromium.components.browser_ui.settings.TextMessagePreference + android:key="contextual_search_description" android:title="@string/contextual_search_tap_description" app:allowDividerBelow="false" />
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java index f47a3a4..1f6eec1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -138,6 +138,7 @@ add(StartSurfaceConfiguration.START_SURFACE_OPEN_NTP_INSTEAD_OF_START); add(StartSurfaceConfiguration.START_SURFACE_VARIATION); add(StartSurfaceConfiguration.SUPPORT_ACCESSIBILITY); + add(StartSurfaceConfiguration.TAB_COUNT_BUTTON_ON_START_SURFACE); add(StartSurfaceConfiguration.WARM_UP_RENDERER); add(StartupPaintPreviewHelper.ACCESSIBILITY_SUPPORT_PARAM); add(CommerceSubscriptionsServiceConfig.STALE_TAB_LOWER_BOUND_SECONDS);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java index 50a3efe..7fe6e4a8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchPreferenceFragment.java
@@ -14,6 +14,7 @@ import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference; import org.chromium.components.browser_ui.settings.SettingsUtils; +import org.chromium.components.browser_ui.settings.TextMessagePreference; /** * Fragment to manage the Contextual Search preference in Chrome Settings, and to explain to the @@ -22,6 +23,7 @@ public class ContextualSearchPreferenceFragment extends PreferenceFragmentCompat { static final String PREF_CONTEXTUAL_SEARCH_SWITCH = "contextual_search_switch"; static final String PREF_WAS_FULLY_ENABLED_SWITCH = "see_better_results_switch"; + static final String PREF_CONTEXTUAL_SEARCH_DESCRIPTION = "contextual_search_description"; @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { @@ -65,5 +67,11 @@ seeBetterResultsSwitch.setVisible(ContextualSearchPolicy.shouldShowMultilevelSettingsUI() && isContextualSearchEnabled); + + if (ContextualSearchPolicy.shouldShowMultilevelSettingsUI()) { + TextMessagePreference contextualSearchDescription = + (TextMessagePreference) findPreference(PREF_CONTEXTUAL_SEARCH_DESCRIPTION); + contextualSearchDescription.setTitle(R.string.contextual_search_description_revised); + } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java index 9bdf24bf..d04c4f4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
@@ -347,7 +347,7 @@ mSyncPromoPreference.getState() == State.PERSONALIZED_SIGNIN_PROMO; findPreference(PREF_ACCOUNT_AND_GOOGLE_SERVICES_SECTION) .setVisible(!isShowingPersonalizedSigninPromo); - mSignInPreference.setVisible(!isShowingPersonalizedSigninPromo); + mSignInPreference.setIsShowingPersonalizedSigninPromo(isShowingPersonalizedSigninPromo); } // TemplateUrlService.LoadListener implementation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java index f663e02..6df6cfdd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -46,6 +46,7 @@ public class SignInPreference extends Preference implements SignInStateObserver, ProfileDataCache.Observer, SyncStateChangedListener, AccountsChangeObserver { + // TODO(https://crbug.com/1245603): Remove state @IntDef({State.SIGNIN_DISABLED_BY_POLICY, State.SIGNIN_DISALLOWED, State.GENERIC_PROMO, State.SIGNED_IN}) @Retention(RetentionPolicy.SOURCE) @@ -59,6 +60,7 @@ private final PrefService mPrefService; private boolean mWasGenericSigninPromoDisplayed; private boolean mViewEnabled; + private boolean mIsShowingSigninPromo; private final ProfileDataCache mProfileDataCache; private final AccountManagerFacade mAccountManagerFacade; private @State int mState; @@ -76,6 +78,7 @@ // State will be updated in registerForUpdates. mState = State.SIGNED_IN; + mIsShowingSigninPromo = false; } @Override @@ -117,8 +120,18 @@ return mState; } + /** + * Sets whether Personalized Signin Promo is being shown in {@link + * org.chromium.chrome.browser.settings.MainSettings} page + */ + public void setIsShowingPersonalizedSigninPromo(boolean isShowingSigninPromo) { + mIsShowingSigninPromo = isShowingSigninPromo; + update(); + } + /** Updates the title, summary, and image based on the current sign-in state. */ private void update() { + setVisible(!mIsShowingSigninPromo); if (IdentityServicesProvider.get() .getSigninManager(Profile.getLastUsedRegularProfile()) .isSigninDisabledByPolicy()) { @@ -127,6 +140,9 @@ setupSigninDisabledByPolicy(); } else { setupSigninDisallowed(); + assert !mIsShowingSigninPromo + : "Signin Promo should not be shown when signin is not allowed"; + setVisible(false); } return; } @@ -159,15 +175,7 @@ } private void setupSigninDisallowed() { - // TODO(https://crbug.com/1133743): Revise the preference behavior. mState = State.SIGNIN_DISALLOWED; - setTitle(R.string.signin_pref_disallowed_title); - setSummary(null); - setFragment(null); - setIcon(AppCompatResources.getDrawable(getContext(), R.drawable.logo_avatar_anonymous)); - setWidgetLayoutResource(0); - setViewEnabled(false); - setOnPreferenceClickListener(null); mWasGenericSigninPromoDisplayed = false; }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java index 4b2af06..99af7a59 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SigninFirstRunFragmentTest.java
@@ -18,6 +18,7 @@ import android.accounts.AccountManager; import android.app.Activity; import android.content.Intent; +import android.graphics.drawable.Drawable; import android.support.test.runner.lifecycle.Stage; import androidx.test.filters.MediumTest; @@ -33,6 +34,7 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.chrome.R; import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.signin.services.DisplayableProfileData; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; @@ -93,15 +95,7 @@ mAccountManagerTestRule.addAccount(TEST_EMAIL1, FULL_NAME1, GIVEN_NAME1, null); - CriteriaHelper.pollUiThread( - mFragment.getView().findViewById(R.id.signin_fre_selected_account)::isShown); - onView(withText(R.string.fre_welcome)).check(matches(isDisplayed())); - onView(withText(TEST_EMAIL1)).check(matches(isDisplayed())); - onView(withText(FULL_NAME1)).check(matches(isDisplayed())); - final String continueAsText = mChromeActivityTestRule.getActivity().getString( - R.string.signin_promo_continue_as, GIVEN_NAME1); - onView(withText(continueAsText)).check(matches(isDisplayed())); - onView(withText(R.string.signin_fre_dismiss_button)).check(matches(isDisplayed())); + checkFragmentWithSelectedAccount(TEST_EMAIL1, FULL_NAME1, GIVEN_NAME1); } @Test @@ -111,13 +105,7 @@ launchActivityWithFragment(); - onView(withText(R.string.fre_welcome)).check(matches(isDisplayed())); - onView(withText(TEST_EMAIL1)).check(matches(isDisplayed())); - onView(withText(FULL_NAME1)).check(matches(isDisplayed())); - final String continueAsText = mChromeActivityTestRule.getActivity().getString( - R.string.signin_promo_continue_as, GIVEN_NAME1); - onView(withText(continueAsText)).check(matches(isDisplayed())); - onView(withText(R.string.signin_fre_dismiss_button)).check(matches(isDisplayed())); + checkFragmentWithSelectedAccount(TEST_EMAIL1, FULL_NAME1, GIVEN_NAME1); } @Test @@ -131,11 +119,7 @@ onView(withText(TEST_EMAIL2)).inRoot(isDialog()).perform(click()); - onView(withText(TEST_EMAIL2)).check(matches(isDisplayed())); - final String continueAsText = mChromeActivityTestRule.getActivity().getString( - R.string.signin_promo_continue_as, TEST_EMAIL2); - onView(withText(continueAsText)).check(matches(isDisplayed())); - onView(withText(R.string.signin_fre_dismiss_button)).check(matches(isDisplayed())); + checkFragmentWithSelectedAccount(TEST_EMAIL2, /* fullName= */ null, /* givenName= */ null); } @Test @@ -173,11 +157,7 @@ SigninFirstRunFragment.ADD_ACCOUNT_REQUEST_CODE, Activity.RESULT_OK, data)); - onView(withText(TEST_EMAIL2)).check(matches(isDisplayed())); - final String continueAsText = mChromeActivityTestRule.getActivity().getString( - R.string.signin_promo_continue_as, TEST_EMAIL2); - onView(withText(continueAsText)).check(matches(isDisplayed())); - onView(withText(R.string.signin_fre_dismiss_button)).check(matches(isDisplayed())); + checkFragmentWithSelectedAccount(TEST_EMAIL2, /* fullName= */ null, /* givenName= */ null); } @Test @@ -194,9 +174,21 @@ SigninFirstRunFragment.ADD_ACCOUNT_REQUEST_CODE, Activity.RESULT_OK, data)); - onView(withText(TEST_EMAIL1)).check(matches(isDisplayed())); - final String continueAsText = mChromeActivityTestRule.getActivity().getString( - R.string.signin_promo_continue_as, TEST_EMAIL1); + checkFragmentWithSelectedAccount(TEST_EMAIL1, /* fullName= */ null, /* givenName= */ null); + } + + private void checkFragmentWithSelectedAccount(String email, String fullName, String givenName) { + CriteriaHelper.pollUiThread( + mFragment.getView().findViewById(R.id.signin_fre_selected_account)::isShown); + final DisplayableProfileData profileData = + new DisplayableProfileData(email, mock(Drawable.class), fullName, givenName); + onView(withText(R.string.fre_welcome)).check(matches(isDisplayed())); + onView(withText(email)).check(matches(isDisplayed())); + if (fullName != null) { + onView(withText(fullName)).check(matches(isDisplayed())); + } + final String continueAsText = mFragment.getString( + R.string.signin_promo_continue_as, profileData.getGivenNameOrFullNameOrEmail()); onView(withText(continueAsText)).check(matches(isDisplayed())); onView(withText(R.string.signin_fre_dismiss_button)).check(matches(isDisplayed())); } @@ -212,4 +204,4 @@ ApplicationTestUtils.waitForActivityState( mChromeActivityTestRule.getActivity(), Stage.RESUMED); } -} +} \ No newline at end of file
diff --git a/chrome/app/chrome.cml b/chrome/app/chrome.cml index 33a6cde..c45609c3 100644 --- a/chrome/app/chrome.cml +++ b/chrome/app/chrome.cml
@@ -33,7 +33,6 @@ "fuchsia.memorypressure.Provider", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", - "fuchsia.net.NameLookup", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sysmem.Allocator",
diff --git a/chrome/app/chrome_v1.cmx b/chrome/app/chrome_v1.cmx index 3930e2a..dcfe49351 100644 --- a/chrome/app/chrome_v1.cmx +++ b/chrome/app/chrome_v1.cmx
@@ -20,7 +20,6 @@ "fuchsia.memorypressure.Provider", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", - "fuchsia.net.NameLookup", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher", "fuchsia.sysmem.Allocator",
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index 49629297..427ab39 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -701,7 +701,7 @@ <translation id="1729533290416704613">Upravlja i time koja se stranica prikazuje prilikom pretraživanja putem višenamjenskog okvira.</translation> <translation id="1730917990259790240"><ph name="BEGIN_PARAGRAPH1" />Za uklanjanje aplikacija idite na Postavke > Trgovina Play > Upravljanje postavkama Androida > Aplikacije ili Upravitelj aplikacija. Zatim dodirnite aplikaciju koju želite deinstalirati (možda ćete morati prijeći prstom udesno ili ulijevo kako biste pronašli aplikaciju). Zatim dodirnite Deinstaliraj ili Onemogući.<ph name="END_PARAGRAPH1" /></translation> <translation id="1731911755844941020">Slanje zahtjeva u tijeku...</translation> -<translation id="1733383495376208985">Kriptirajte sinkronizirane podatke vlastitom <ph name="BEGIN_LINK" />šifrom za sinkronizaciju<ph name="END_LINK" />. To ne uključuje načine plaćanja i adrese s Google Paya.</translation> +<translation id="1733383495376208985">Šifriraj sinkronizirane podatke vlastitom <ph name="BEGIN_LINK" />šifrom za sinkronizaciju<ph name="END_LINK" />. To ne uključuje načine plaćanja i adrese s Google Paya.</translation> <translation id="1734212868489994726">Svijetloplava</translation> <translation id="1734230530703461088">Učitavanje proširenja u vremenski ograničenom roku nije uspjelo. Obratite se administratoru.</translation> <translation id="1734824808160898225"><ph name="PRODUCT_NAME" /> možda se neće moći sam ažurirati</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index d2bce49..ea2ebf7 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -1014,7 +1014,7 @@ <translation id="204497730941176055">Microsoft тастыктамасынын калыбынын аталышы</translation> <translation id="2045117674524495717">Ыкчам баскычтар боюнча жардам алуу</translation> <translation id="2045969484888636535">Кукилер бөгөттөлө берсин</translation> -<translation id="204622017488417136">Түзмөгүңүз Chrome'дун буга чейин орнотулган версиясына кайтарылат. Колдонуучу каттоо эсептеринин жана жергиликтүү дайындардын бардыгы өчүрүлөт. Бул аракетти артка кайруу мүмкүн эмес.</translation> +<translation id="204622017488417136">Түзмөгүңүз Chrome'дун буга чейин орнотулган версиясына кайтарылат. Колдонуучу аккаунттарынын жана жергиликтүү дайындардын бардыгы өчүрүлөт. Бул аракетти артка кайруу мүмкүн эмес.</translation> <translation id="2046702855113914483">Рамён</translation> <translation id="2046770133657639077">Түзмөктүн EID номерин көрсөтүү</translation> <translation id="204706822916043810">Виртуалдык машина текшерилүүдө</translation> @@ -2067,7 +2067,7 @@ <translation id="3127882968243210659">Google Play'ди иштетүү үчүн <ph name="MANAGER" /> дайын-даректериңиздин камдык көчүрмөсүн сактап, Chromebook'ту демейки жөндөөлөргө кайтарууну талап кылууда.</translation> <translation id="3129173833825111527">Сол жак чети</translation> <translation id="3129215702932019810">Колдонмону иштетүү катасы</translation> -<translation id="3130528281680948470">Түзмөгүңүз баштапкы абалга келтирилип, колдонуучу каттоо эсептеринин жана жергиликтүү дайындандын бардыгы өчүрүлөт. Бул аракетти артка кайтаруу мүмкүн эмес.</translation> +<translation id="3130528281680948470">Түзмөгүңүз баштапкы абалга келтирилип, колдонуучу аккаунттарынын жана жергиликтүү дайындандын бардыгы өчүрүлөт. Бул аракетти артка кайтаруу мүмкүн эмес.</translation> <translation id="313205617302240621">Сырсөздү унутуп калдыңызбы?</translation> <translation id="3132277757485842847">Телефонуңузга туташпай калды. Телефонуңуз жакын жерде турганын жана анын кулпусу ачык болуп, Bluetooth менен Wi-Fi күйгүзүлгөнүн текшериңиз.</translation> <translation id="3132996321662585180">Күндө жаңыртылсын</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index de033fdb..61f0a50 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -2108,7 +2108,7 @@ <translation id="3201422919974259695">उपलब्ध USB यन्त्रहरू यहाँ देखिने छन्।</translation> <translation id="3202131003361292969">पथ</translation> <translation id="3202173864863109533">यस ट्याबको अडियो म्युट गरिएको छ।</translation> -<translation id="3202879084005596395">तपाईं जुनसुकै बेला अतिरिक्त सेटिङ बदल्न वा "स्विचमार्फत पहुँच" सम्बन्धी सेटिङमा गई सेटअप गाइड फेरि खोल्न सक्नुहुन्छ।</translation> +<translation id="3202879084005596395">तपाईं जुनसुकै बेला अतिरिक्त सेटिङ बदल्न वा "स्विच एक्सेस" सम्बन्धी सेटिङमा गई सेटअप गाइड फेरि खोल्न सक्नुहुन्छ।</translation> <translation id="3208321278970793882">एप</translation> <translation id="3208584281581115441">अहिले नै जाँच्नुहोस्</translation> <translation id="3208703785962634733">प्रमाणित नगरिएको</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index a3f525d..23014bde 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -5801,7 +5801,7 @@ <translation id="7251979364707973467"><ph name="WEBSITE" /> உங்கள் பாதுகாப்பு விசையைப் பெற்றுள்ளது, மேலும் அதன் ஐடி எண்ணைத் தெரிந்துகொள்ள விரும்புகிறது. நீங்கள் எந்தப் பாதுகாப்பு விசையைப் பயன்படுத்துகிறீர்கள் என்பதைத் தளம் அறிந்துகொள்ளும்.</translation> <translation id="7253521419891527137">&மேலும் அறிக</translation> <translation id="7254951428499890870">சரிபார்ப்பு பயன்முறையில் "<ph name="APP_NAME" />" ஐத் துவக்க விருப்பமா?</translation> -<translation id="725497546968438223">புக்மார்க் கோப்புறைக்கான பட்டன்</translation> +<translation id="725497546968438223">புக்மார்க் ஃபோல்டருக்கான பட்டன்</translation> <translation id="7255002516883565667">தற்போது, இந்தச் சாதனத்தில் மட்டுமே பயன்படுத்தக்கூடிய ஒரு கார்டு உள்ளது</translation> <translation id="7255935316994522020">பயன்படுத்து</translation> <translation id="7256069762010468647">தளமானது உங்கள் கேமராவைப் பயன்படுத்துகிறது</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 2ee43b96..b73a644a 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -7197,7 +7197,7 @@ <translation id="8737914367566358838">請選擇網頁的譯文語言</translation> <translation id="8737916108453753541">系統會將網址提供給 Google,藉此瞭解瀏覽行為</translation> <translation id="8740247629089392745">你可以將這部 Chromebook 交給「<ph name="SUPERVISED_USER_NAME" />」。設定即將完成,完成後即可開始探索。</translation> -<translation id="8741944563400125534">開關功能設定導覽</translation> +<translation id="8741944563400125534">開關功能設定指南</translation> <translation id="8742998548129056176">這個頁面會顯示裝置和裝置使用情況的一般資訊 (例如電池電量、系統和應用程式活動,以及錯誤資訊)。這些資料將用於改善 Android,且部分匯總資訊還能協助 Google 應用程式和合作夥伴 (例如 Android 開發人員) 提高應用程式和產品的服務品質。</translation> <translation id="8746654918629346731">你已要求安裝「<ph name="EXTENSION_NAME" />」</translation> <translation id="874689135111202667">{0,plural, =1{要將 1 個檔案上傳到這個網站嗎?}other{要將 # 個檔案上傳到這個網站嗎?}}</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 9183bfa..007d994 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -2518,6 +2518,9 @@ <message name="IDS_SETTINGS_COOKIES_CLEAR_ON_EXIT" desc="Label for the toggle that allows the user to automatically delete their cookies and site data when they close all browser windows."> Clear cookies and site data when you close all windows </message> + <message name="IDS_SETTINGS_COOKIES_ALL_SITES_LINK" desc="Label for the link row which takes the user to the page listing all sites with storage and permissions"> + See all site data and permissions + </message> <message name="IDS_SETTINGS_COOKIES_SITE_SPECIFIC_EXCEPTIONS" desc="Title of cookies page section for managing site specific cookie settings"> Manage site specific exceptions </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_ALL_SITES_LINK.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_ALL_SITES_LINK.png.sha1 new file mode 100644 index 0000000..4d5479e --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_COOKIES_ALL_SITES_LINK.png.sha1
@@ -0,0 +1 @@ +bf25e0730707120b32add0afa963e1d75c62ecd6 \ No newline at end of file
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index efc0e0d..6d042b4 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -77,6 +77,7 @@ #include "components/autofill/core/common/autofill_switches.h" #include "components/autofill/core/common/autofill_util.h" #include "components/autofill_assistant/browser/features.h" +#include "components/bookmarks/browser/features.h" #include "components/browser_sync/browser_sync_switches.h" #include "components/browsing_data/core/features.h" #include "components/cloud_devices/common/cloud_devices_switches.h" @@ -1878,6 +1879,7 @@ {"start_surface_variation", "single"}, {"omnibox_focused_on_new_tab", "true"}, {"home_button_on_grid_tab_switcher", "true"}, + {"tab_count_button_on_start_surface", "true"}, {"new_home_surface_from_home_button", "hide_tab_switcher_only"}, {"hide_switch_when_no_incognito_tabs", "true"}, {"show_tabs_in_mru_order", "true"}, @@ -1889,6 +1891,7 @@ {"omnibox_focused_on_new_tab", "true"}, {"show_ntp_tiles_on_omnibox", "true"}, {"home_button_on_grid_tab_switcher", "true"}, + {"tab_count_button_on_start_surface", "true"}, {"new_home_surface_from_home_button", "hide_mv_tiles_and_tab_switcher"}, {"hide_switch_when_no_incognito_tabs", "true"}, {"show_tabs_in_mru_order", "true"}, @@ -1905,6 +1908,7 @@ {"show_last_active_tab_only", "true"}, {"omnibox_focused_on_new_tab", "true"}, {"home_button_on_grid_tab_switcher", "true"}, + {"tab_count_button_on_start_surface", "true"}, {"new_home_surface_from_home_button", "hide_tab_switcher_only"}, {"enable_tab_groups_continuation", "true"}}; @@ -1915,6 +1919,7 @@ {"omnibox_focused_on_new_tab", "true"}, {"show_ntp_tiles_on_omnibox", "true"}, {"home_button_on_grid_tab_switcher", "true"}, + {"tab_count_button_on_start_surface", "true"}, {"new_home_surface_from_home_button", "hide_mv_tiles_and_tab_switcher"}, {"enable_tab_groups_continuation", "true"}}; @@ -1923,7 +1928,22 @@ {"show_last_active_tab_only", "true"}, {"hide_switch_when_no_incognito_tabs", "true"}}; +const FeatureEntry::FeatureParam kStartSurfaceAndroid_CandidateA[] = { + {"start_surface_variation", "single"}, + {"show_last_active_tab_only", "true"}, + {"tab_count_button_on_start_surface", "true"}}; + +const FeatureEntry::FeatureParam kStartSurfaceAndroid_CandidateB[] = { + {"start_surface_variation", "single"}, + {"show_last_active_tab_only", "true"}, + {"tab_count_button_on_start_surface", "true"}, + {"open_ntp_instead_of_start", "true"}}; + const FeatureEntry::FeatureVariation kStartSurfaceAndroidVariations[] = { + {"Canidate A", kStartSurfaceAndroid_CandidateA, + base::size(kStartSurfaceAndroid_CandidateA), nullptr}, + {"Canidate B", kStartSurfaceAndroid_CandidateB, + base::size(kStartSurfaceAndroid_CandidateB), nullptr}, {"Single Surface", kStartSurfaceAndroid_SingleSurface, base::size(kStartSurfaceAndroid_SingleSurface), nullptr}, {"Single Surface Finale", kStartSurfaceAndroid_SingleSurfaceFinale, @@ -3248,6 +3268,15 @@ kOsAll, FEATURE_VALUE_TYPE(media::kEnableMediaInternals), }, +#if defined(OS_WIN) + { + "enable-hardware-secure-decryption", + flag_descriptions::kHardwareSecureDecryptionName, + flag_descriptions::kHardwareSecureDecryptionDescription, + kOsWin, + FEATURE_VALUE_TYPE(media::kHardwareSecureDecryption), + }, +#endif #if BUILDFLAG(IS_CHROMEOS_ASH) { "zero-copy-video-capture", @@ -4770,6 +4799,11 @@ FEATURE_VALUE_TYPE(chrome::android::kBookmarkBottomSheet)}, #endif + {"apps-shortcut-default-off", + flag_descriptions::kAppsShortcutDefaultOffName, + flag_descriptions::kAppsShortcutDefaultOffDescription, kOsDesktop, + FEATURE_VALUE_TYPE(bookmarks::features::kAppsShortcutDefaultOff)}, + {"tab-groups-auto-create", flag_descriptions::kTabGroupsAutoCreateName, flag_descriptions::kTabGroupsAutoCreateDescription, kOsDesktop, FEATURE_VALUE_TYPE(features::kTabGroupsAutoCreate)},
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 29bef1e..d6bf58bd 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm
@@ -85,8 +85,8 @@ #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_mac.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_paths_internal.h" #include "chrome/common/chrome_switches.h"
diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm index fcc5607..17e9f53 100644 --- a/chrome/browser/app_controller_mac_browsertest.mm +++ b/chrome/browser/app_controller_mac_browsertest.mm
@@ -56,12 +56,12 @@ #include "chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_view.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/webui/welcome/helpers.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" -#include "chrome/browser/web_applications/components/url_handler_manager_impl.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/fake_web_app_origin_association_manager.h" #include "chrome/browser/web_applications/test/test_web_app_provider.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/url_handler_manager.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/apps/app_service/app_icon_factory_unittest.cc b/chrome/browser/apps/app_service/app_icon_factory_unittest.cc index 37cede4..11faec2d 100644 --- a/chrome/browser/apps/app_service/app_icon_factory_unittest.cc +++ b/chrome/browser/apps/app_service/app_icon_factory_unittest.cc
@@ -20,12 +20,12 @@ #include "chrome/browser/apps/app_service/app_icon_factory.h" #include "chrome/browser/extensions/chrome_app_icon.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" #include "chrome/browser/web_applications/test/test_file_utils.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/apps/app_service/launch_utils.cc b/chrome/browser/apps/app_service/launch_utils.cc index 7d2d297c..9d008f2 100644 --- a/chrome/browser/apps/app_service/launch_utils.cc +++ b/chrome/browser/apps/app_service/launch_utils.cc
@@ -13,9 +13,9 @@ #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/webui_url_constants.h" #include "components/sessions/core/session_id.h"
diff --git a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc index 26659109..82f2df54 100644 --- a/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc +++ b/chrome/browser/apps/app_service/publishers/extension_apps_chromeos.cc
@@ -44,7 +44,7 @@ #include "chrome/browser/ui/ash/multi_user/multi_user_util.h" #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_helper.h" #include "chrome/browser/ui/ash/session_controller_client_impl.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/extension_metrics.h"
diff --git a/chrome/browser/apps/app_service/web_contents_app_id_utils.cc b/chrome/browser/apps/app_service/web_contents_app_id_utils.cc index 3923fb1..f1bdd5ec 100644 --- a/chrome/browser/apps/app_service/web_contents_app_id_utils.cc +++ b/chrome/browser/apps/app_service/web_contents_app_id_utils.cc
@@ -14,14 +14,14 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/extensions/bookmark_app_util.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "content/public/browser/web_contents.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h"
diff --git a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc index b777cde..b323446 100644 --- a/chrome/browser/apps/app_shim/app_shim_manager_mac.cc +++ b/chrome/browser/apps/app_shim/app_shim_manager_mac.cc
@@ -42,8 +42,8 @@ #include "chrome/browser/ui/profile_picker.h" #include "chrome/browser/ui/ui_features.h" #include "chrome/browser/web_applications/components/app_shim_registry_mac.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_mac.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_features.h" #include "components/crx_file/id_util.h"
diff --git a/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc b/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc index 9f5865b..e272d84 100644 --- a/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc +++ b/chrome/browser/apps/app_shim/app_shim_manager_mac_unittest.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/avatar_menu.h" #include "chrome/browser/web_applications/components/app_shim_registry_mac.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/common/mac/app_shim.mojom.h" #include "chrome/test/base/test_browser_window.h"
diff --git a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc index e98247b..3979950 100644 --- a/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc +++ b/chrome/browser/apps/intent_helper/apps_navigation_throttle.cc
@@ -18,8 +18,8 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_tab_helper.h"
diff --git a/chrome/browser/apps/intent_helper/intent_picker_internal.cc b/chrome/browser/apps/intent_helper/intent_picker_internal.cc index 6667cac..a7964d6 100644 --- a/chrome/browser/apps/intent_helper/intent_picker_internal.cc +++ b/chrome/browser/apps/intent_helper/intent_picker_internal.cc
@@ -12,7 +12,7 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/intent_picker_tab_helper.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/apps/platform_apps/app_shim_interactive_uitest_mac.mm b/chrome/browser/apps/platform_apps/app_shim_interactive_uitest_mac.mm index 57189d12..8b9aa272 100644 --- a/chrome/browser/apps/platform_apps/app_shim_interactive_uitest_mac.mm +++ b/chrome/browser/apps/platform_apps/app_shim_interactive_uitest_mac.mm
@@ -35,9 +35,9 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_mac.h" #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/mac/app_mode_common.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.cc b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.cc index 800b83c..6f0359e 100644 --- a/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.cc +++ b/chrome/browser/ash/app_mode/web_app/web_kiosk_app_manager.cc
@@ -11,8 +11,8 @@ #include "chrome/browser/ash/app_mode/kiosk_cryptohome_remover.h" #include "chrome/browser/ash/policy/core/device_local_account.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chromeos/settings/cros_settings_names.h" #include "components/prefs/pref_registry_simple.h"
diff --git a/chrome/browser/ash/apps/apk_web_app_service.cc b/chrome/browser/ash/apps/apk_web_app_service.cc index e3478fd..9107e35 100644 --- a/chrome/browser/ash/apps/apk_web_app_service.cc +++ b/chrome/browser/ash/apps/apk_web_app_service.cc
@@ -14,12 +14,12 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/ash/shelf/chrome_shelf_controller.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/arc/mojom/app.mojom.h" #include "components/arc/session/connection_holder.h"
diff --git a/chrome/browser/ash/apps/apk_web_app_service_factory.cc b/chrome/browser/ash/apps/apk_web_app_service_factory.cc index 75810795..1e4b592 100644 --- a/chrome/browser/ash/apps/apk_web_app_service_factory.cc +++ b/chrome/browser/ash/apps/apk_web_app_service_factory.cc
@@ -9,8 +9,8 @@ #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" namespace ash {
diff --git a/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc b/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc index 22357e1e..e2050c4 100644 --- a/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc +++ b/chrome/browser/ash/apps/intent_helper/common_apps_navigation_throttle.cc
@@ -18,8 +18,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id_constants.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/browser_resources.h"
diff --git a/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc b/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc index c3e567e..264eb714 100644 --- a/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc +++ b/chrome/browser/ash/child_accounts/time_limits/app_service_wrapper_unittest.cc
@@ -25,10 +25,10 @@ #include "chrome/browser/extensions/test_extension_system.h" #include "chrome/browser/ui/app_list/arc/arc_app_test.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_manager.h" #include "chrome/browser/web_applications/test/test_web_app_provider.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/ash/child_accounts/time_limits/web_time_limit_enforcer.cc b/chrome/browser/ash/child_accounts/time_limits/web_time_limit_enforcer.cc index 347f631..875d44d 100644 --- a/chrome/browser/ash/child_accounts/time_limits/web_time_limit_enforcer.cc +++ b/chrome/browser/ash/child_accounts/time_limits/web_time_limit_enforcer.cc
@@ -14,7 +14,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "components/policy/core/browser/url_util.h" #include "components/url_matcher/url_matcher.h"
diff --git a/chrome/browser/ash/child_accounts/time_limits/web_time_navigation_observer.cc b/chrome/browser/ash/child_accounts/time_limits/web_time_navigation_observer.cc index 7cf7d16..d5951e04 100644 --- a/chrome/browser/ash/child_accounts/time_limits/web_time_navigation_observer.cc +++ b/chrome/browser/ash/child_accounts/time_limits/web_time_navigation_observer.cc
@@ -8,8 +8,8 @@ #include "chrome/browser/ash/child_accounts/time_limits/app_time_controller.h" #include "chrome/browser/ash/child_accounts/time_limits/web_time_limit_enforcer.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc index 0006a196..a585e3a 100644 --- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc +++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -72,9 +72,9 @@ #include "chrome/browser/ui/views/extensions/extension_dialog.h" #include "chrome/browser/ui/views/select_file_dialog_extension.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_types.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h"
diff --git a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc index 8c30282..8f09455d1 100644 --- a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc +++ b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.cc
@@ -378,8 +378,8 @@ AutoEnrollmentController::AutoEnrollmentController() : system_clock_sync_waiter_(std::make_unique<SystemClockSyncWaiter>()) { - // Create the PSM RLWE client factory depending on whether - // switches::kEnterpriseUseFakePsmRlweClient is set. + // Create the PSM (private set membership) RLWE client factory depending on + // whether switches::kEnterpriseUseFakePsmRlweClient is set. if (ShouldUseFakePsmRlweClient()) { psm_rlwe_client_factory_ = std::make_unique< policy::FakePrivateMembershipRlweClient::FactoryImpl>();
diff --git a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h index cfe588a6..0c3f55c9 100644 --- a/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h +++ b/chrome/browser/ash/login/enrollment/auto_enrollment_controller.h
@@ -98,8 +98,8 @@ // Returns true if any either FRE or initial enrollment are enabled. static bool IsEnabled(); - // Returns true if it is determined to use the fake PSM RLWE client based on - // command-line flags. + // Returns true if it is determined to use the fake PSM (private set + // membership) RLWE client based on command-line flags. static bool ShouldUseFakePsmRlweClient(); // Returns whether the FRE auto-enrollment check is required. When
diff --git a/chrome/browser/ash/login/enrollment/enrollment_local_policy_server_browsertest.cc b/chrome/browser/ash/login/enrollment/enrollment_local_policy_server_browsertest.cc index 2efad5da..a80a577e 100644 --- a/chrome/browser/ash/login/enrollment/enrollment_local_policy_server_browsertest.cc +++ b/chrome/browser/ash/login/enrollment/enrollment_local_policy_server_browsertest.cc
@@ -264,7 +264,7 @@ void SetUpCommandLine(base::CommandLine* command_line) override { EnrollmentLocalPolicyServerBase::SetUpCommandLine(command_line); - // Enable usage of fake PSM RLWE client. + // Enable usage of fake PSM (private set membership) RLWE client. command_line->AppendSwitch( switches::kEnterpriseUseFakePsmRlweClientForTesting);
diff --git a/chrome/browser/ash/login/oobe_interactive_ui_test.cc b/chrome/browser/ash/login/oobe_interactive_ui_test.cc index 0930b0a3..e41ed2d 100644 --- a/chrome/browser/ash/login/oobe_interactive_ui_test.cc +++ b/chrome/browser/ash/login/oobe_interactive_ui_test.cc
@@ -771,8 +771,8 @@ void SetUpCommandLine(base::CommandLine* command_line) override { OobeInteractiveUITest::SetUpCommandLine(command_line); - // Enable usage of fake PSM RLWE client (for tests checking initial - // enrollment). + // Enable usage of fake PSM (private set membership) RLWE client (for tests + // checking initial enrollment). command_line->AppendSwitch( switches::kEnterpriseUseFakePsmRlweClientForTesting);
diff --git a/chrome/browser/ash/login/wizard_controller_browsertest.cc b/chrome/browser/ash/login/wizard_controller_browsertest.cc index a3fd736..310620a 100644 --- a/chrome/browser/ash/login/wizard_controller_browsertest.cc +++ b/chrome/browser/ash/login/wizard_controller_browsertest.cc
@@ -1448,8 +1448,8 @@ void SetUpCommandLine(base::CommandLine* command_line) override { WizardControllerDeviceStateTest::SetUpCommandLine(command_line); - // Enable usage of fake PSM RLWE client (for tests checking initial - // enrollment). + // Enable usage of fake PSM (private set membership) RLWE client (for tests + // checking initial enrollment). command_line->AppendSwitch( switches::kEnterpriseUseFakePsmRlweClientForTesting);
diff --git a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc index 3f1b491..031ecdc 100644 --- a/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc +++ b/chrome/browser/ash/policy/enrollment/auto_enrollment_client_impl_unittest.cc
@@ -529,10 +529,10 @@ EXPECT_EQ(GetAutoEnrollmentProtocol(), AutoEnrollmentProtocol::kFRE); histogram_tester_.ExpectUniqueTimeSample( - kUMAHashDanceProtocolTimeStr + GetAutoEnrollmentProtocolUmaSuffix(), + kUMAHashDanceProtocolTime + GetAutoEnrollmentProtocolUmaSuffix(), expected_time_recorded, /*expected_count=*/1); histogram_tester_.ExpectUniqueTimeSample( - kUMAHashDanceSuccessTimeStr + GetAutoEnrollmentProtocolUmaSuffix(), + kUMAHashDanceSuccessTime + GetAutoEnrollmentProtocolUmaSuffix(), expected_time_recorded, success_time_recorded ? 1 : 0); } @@ -577,8 +577,6 @@ DeviceManagementService::JobConfiguration::TYPE_INVALID; private: - const std::string kUMAHashDanceProtocolTimeStr = kUMAHashDanceProtocolTime; - const std::string kUMAHashDanceSuccessTimeStr = kUMAHashDanceSuccessTime; network::TestURLLoaderFactory url_loader_factory_; scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_; std::unique_ptr<AutoEnrollmentClient> client_;
diff --git a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc index f180c502..2ae8a44 100644 --- a/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc +++ b/chrome/browser/ash/web_applications/media_app/media_app_integration_browsertest.cc
@@ -20,8 +20,8 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_paths.h" #include "chromeos/components/media_app_ui/buildflags.h" #include "chromeos/components/media_app_ui/test/media_app_ui_browsertest.h"
diff --git a/chrome/browser/ash/web_applications/shimless_rma_integration_browsertest.cc b/chrome/browser/ash/web_applications/shimless_rma_integration_browsertest.cc index fd4b57279..7c69c5b4 100644 --- a/chrome/browser/ash/web_applications/shimless_rma_integration_browsertest.cc +++ b/chrome/browser/ash/web_applications/shimless_rma_integration_browsertest.cc
@@ -9,8 +9,8 @@ #include "chrome/browser/ash/web_applications/system_web_app_integration_test.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "content/public/test/browser_test.h" #include "content/public/test/test_navigation_observer.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/ash/web_applications/system_web_app_integration_test.cc b/chrome/browser/ash/web_applications/system_web_app_integration_test.cc index ed1f348d..1cf28ba 100644 --- a/chrome/browser/ash/web_applications/system_web_app_integration_test.cc +++ b/chrome/browser/ash/web_applications/system_web_app_integration_test.cc
@@ -11,8 +11,8 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "content/public/browser/web_ui.h" #include "content/public/test/test_navigation_observer.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/banners/app_banner_manager_desktop.cc b/chrome/browser/banners/app_banner_manager_desktop.cc index e32141a..0f70793 100644 --- a/chrome/browser/banners/app_banner_manager_desktop.cc +++ b/chrome/browser/banners/app_banner_manager_desktop.cc
@@ -17,8 +17,8 @@ #include "chrome/browser/ui/intent_picker_tab_helper.h" #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/extensions/bookmark_app_util.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "components/webapps/browser/banners/app_banner_metrics.h" #include "components/webapps/browser/banners/app_banner_settings_helper.h"
diff --git a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc index f6918a1..1e2e9a9 100644 --- a/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc +++ b/chrome/browser/banners/app_banner_manager_desktop_browsertest.cc
@@ -28,8 +28,8 @@ #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 9c63519..97f6ff9 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -5390,6 +5390,27 @@ chrome::kChromeUIHelpHost); } + if (base::FeatureList::IsEnabled( + features::kConsolidatedSiteStorageControls)) { + // Replace deprecated Site Data page URL with the All Sites page, which + // contains storage controls for sites. + if (url->SchemeIs(content::kChromeUIScheme) && + url->host() == chrome::kChromeUISettingsHost) { + if (url->path() == chrome::kChromeUISiteDataDeprecatedPath) { + url::Replacements<char> replacements; + replacements.SetPath( + chrome::kChromeUIAllSitesPath, + url::Component(0, strlen(chrome::kChromeUIAllSitesPath))); + *url = url->ReplaceComponents(replacements); + UMA_HISTOGRAM_BOOLEAN("Settings.AllSites.DeprecatedRedirect", true); + } else if (url->path() == chrome::kChromeUIAllSitesPath) { + // Log un-redirected navigations to the page as well to provide context + // for the raw number of redirects. + UMA_HISTOGRAM_BOOLEAN("Settings.AllSites.DeprecatedRedirect", false); + } + } + } + #if defined(OS_WIN) // TODO(crbug.com/1003960): Remove when issue is resolved. if (url->SchemeIs(content::kChromeUIScheme) &&
diff --git a/chrome/browser/chrome_content_browser_client_unittest.cc b/chrome/browser/chrome_content_browser_client_unittest.cc index 569ce3d6..2341aac 100644 --- a/chrome/browser/chrome_content_browser_client_unittest.cc +++ b/chrome/browser/chrome_content_browser_client_unittest.cc
@@ -16,11 +16,14 @@ #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/gtest_util.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.h" #include "chrome/browser/captive_portal/captive_portal_service_factory.h" #include "chrome/browser/search_engines/template_url_service_factory.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/webui_url_constants.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h" @@ -42,6 +45,7 @@ #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_render_process_host.h" #include "media/media_buildflags.h" +#include "net/base/url_util.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/switches.h" @@ -461,6 +465,33 @@ &profile_)); } +TEST_F(ChromeContentBrowserClientTest, RedirectSiteDataURL) { + base::test::ScopedFeatureList feature_list( + features::kConsolidatedSiteStorageControls); + + TestChromeContentBrowserClient test_content_browser_client; + base::HistogramTester histogram_tester; + const std::string histogram_name = "Settings.AllSites.DeprecatedRedirect"; + + GURL settings_url = GURL(chrome::kChromeUISettingsURL); + settings_url = net::AppendQueryParameter(settings_url, "foo", "bar"); + + GURL::Replacements replacements; + replacements.SetPathStr(chrome::kChromeUISiteDataDeprecatedPath); + GURL site_data_url = settings_url.ReplaceComponents(replacements); + + replacements.SetPathStr(chrome::kChromeUIAllSitesPath); + GURL all_sites_url = settings_url.ReplaceComponents(replacements); + + test_content_browser_client.HandleWebUI(&site_data_url, &profile_); + EXPECT_EQ(all_sites_url, site_data_url); + histogram_tester.ExpectUniqueSample(histogram_name, true, 1); + + test_content_browser_client.HandleWebUI(&all_sites_url, &profile_); + histogram_tester.ExpectBucketCount(histogram_name, false, 1); + histogram_tester.ExpectTotalCount(histogram_name, 2); +} + #if BUILDFLAG(IS_CHROMEOS_ASH) class ChromeContentSettingsRedirectTest : public ChromeContentBrowserClientTest {
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc index 524f91c..3bc6dca 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.cc
@@ -16,7 +16,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chromeos/components/multidevice/logging/logging.h"
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc index f1cba3a2..1ec0b97b 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl_unittest.cc
@@ -24,9 +24,9 @@ #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/test/test_externally_managed_app_manager.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/test/base/testing_profile.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc b/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc index b1ebeae..64200fb 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc +++ b/chrome/browser/chromeos/android_sms/android_sms_service_factory.cc
@@ -11,9 +11,9 @@ #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chromeos/services/multidevice_setup/public/cpp/prefs.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" #include "components/keyed_service/content/browser_context_dependency_manager.h"
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index f48acde3..d70f071 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -31,7 +31,6 @@ #include "chrome/browser/ash/drive/file_system_util.h" #include "chrome/browser/ash/file_manager/fileapi_util.h" #include "chrome/browser/ash/file_manager/path_util.h" -#include "chrome/browser/ash/file_manager/url_util.h" #include "chrome/browser/ash/file_manager/volume_manager.h" #include "chrome/browser/ash/file_system_provider/mount_path_util.h" #include "chrome/browser/ash/file_system_provider/service.h" @@ -54,7 +53,6 @@ #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_helper.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h" -#include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/webui/settings/chromeos/constants/routes_util.h" #include "chrome/common/extensions/api/file_manager_private_internal.h" #include "chrome/common/extensions/api/manifest_types.h" @@ -79,7 +77,6 @@ #include "storage/common/file_system/file_system_types.h" #include "storage/common/file_system/file_system_util.h" #include "ui/base/webui/web_ui_util.h" -#include "ui/shell_dialogs/select_file_dialog.h" #include "url/gurl.h" namespace extensions { @@ -1249,36 +1246,4 @@ base::Value(tablet_mode ? tablet_mode->InTabletMode() : false))); } -ExtensionFunction::ResponseAction FileManagerPrivateOpenWindowFunction::Run() { - using extensions::api::file_manager_private::OpenWindow::Params; - const std::unique_ptr<Params> params(Params::Create(args())); - EXTENSION_FUNCTION_VALIDATE(params); - - const GURL destination_folder(params->params.current_directory_url - ? (*params->params.current_directory_url) - : ""); - const GURL selection_url( - params->params.selection_url ? (*params->params.selection_url) : ""); - - GURL files_swa_url = - ::file_manager::util::GetFileManagerMainPageUrlWithParams( - ui::SelectFileDialog::SELECT_NONE, /*title=*/{}, destination_folder, - selection_url, - /*target_name=*/{}, - /*file_types=*/nullptr, - /*file_type_index=*/0, - /*search_query=*/{}, - /*show_android_picker_apps=*/false); - - web_app::SystemAppLaunchParams launch_params; - launch_params.url = files_swa_url; - - Profile* profile = Profile::FromBrowserContext(browser_context()); - - web_app::LaunchSystemWebAppAsync( - profile, web_app::SystemAppType::FILE_MANAGER, launch_params); - - return RespondNow(OneArgument(base::Value(true))); -} - } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h index 6b6d53ac..9b61579 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.h
@@ -559,19 +559,6 @@ ResponseAction Run() override; }; -// Implements the chrome.fileManagerPrivate.openWindow method. -class FileManagerPrivateOpenWindowFunction : public LoggedExtensionFunction { - public: - DECLARE_EXTENSION_FUNCTION("fileManagerPrivate.openWindow", - FILEMANAGERPRIVATE_OPENWINDOW) - - protected: - ~FileManagerPrivateOpenWindowFunction() override = default; - - private: - ResponseAction Run() override; -}; - } // namespace extensions #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_MISC_H_
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc index c2f2ac9..cd5e0e7 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.cc
@@ -47,6 +47,9 @@ case ash::health::mojom::DiagnosticRoutineEnum::kCpuStress: *out = api::os_diagnostics::RoutineType::ROUTINE_TYPE_CPU_STRESS; return true; + case ash::health::mojom::DiagnosticRoutineEnum::kMemory: + *out = api::os_diagnostics::RoutineType::ROUTINE_TYPE_MEMORY; + return true; default: return false; } @@ -265,4 +268,20 @@ return RespondLater(); } +// runMemoryRoutine ------------------------------------------------------------ + +OsDiagnosticsRunMemoryRoutineFunction::OsDiagnosticsRunMemoryRoutineFunction() = + default; +OsDiagnosticsRunMemoryRoutineFunction:: + ~OsDiagnosticsRunMemoryRoutineFunction() = default; + +ExtensionFunction::ResponseAction OsDiagnosticsRunMemoryRoutineFunction::Run() { + auto cb = + base::BindOnce(&DiagnosticsApiRunRoutineFunctionBase::OnResult, this); + + remote_diagnostics_service_->RunMemoryRoutine(std::move(cb)); + + return RespondLater(); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h index 23f55f04..7e75069 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h +++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api.h
@@ -182,6 +182,25 @@ ResponseAction Run() override; }; +class OsDiagnosticsRunMemoryRoutineFunction + : public DiagnosticsApiRunRoutineFunctionBase { + public: + DECLARE_EXTENSION_FUNCTION("os.diagnostics.runMemoryRoutine", + OS_DIAGNOSTICS_RUNMEMORYROUTINE) + + OsDiagnosticsRunMemoryRoutineFunction(); + OsDiagnosticsRunMemoryRoutineFunction( + const OsDiagnosticsRunMemoryRoutineFunction&) = delete; + OsDiagnosticsRunMemoryRoutineFunction& operator=( + const OsDiagnosticsRunMemoryRoutineFunction&) = delete; + + private: + ~OsDiagnosticsRunMemoryRoutineFunction() override; + + // ExtensionFunction: + ResponseAction Run() override; +}; + } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_TELEMETRY_API_DIAGNOSTICS_API_H_
diff --git a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc index 01010cf..d6b584d 100644 --- a/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc +++ b/chrome/browser/chromeos/extensions/telemetry/api/diagnostics_api_browsertest.cc
@@ -22,6 +22,7 @@ cros_healthd::mojom::DiagnosticRoutineEnum::kBatteryHealth, cros_healthd::mojom::DiagnosticRoutineEnum::kCpuCache, cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress, + cros_healthd::mojom::DiagnosticRoutineEnum::kMemory, }); CreateExtensionAndRunServiceWorker(R"( @@ -37,7 +38,8 @@ "battery_discharge", "battery_health", "cpu_cache", - "cpu_stress" + "cpu_stress", + "memory" ] }, response); chrome.test.succeed(); @@ -160,4 +162,20 @@ cros_healthd::mojom::DiagnosticRoutineEnum::kCpuStress); } +IN_PROC_BROWSER_TEST_F(TelemetryExtensionDiagnosticsApiBrowserTest, + RunMemoryRoutineSuccess) { + CreateExtensionAndRunServiceWorker(R"( + chrome.test.runTests([ + async function runMemoryRoutine() { + const response = + await chrome.os.diagnostics.runMemoryRoutine(); + chrome.test.assertEq({id: 0, status: "ready"}, response); + chrome.test.succeed(); + } + ]); + )"); + EXPECT_EQ(cros_healthd::FakeCrosHealthdClient::Get()->GetLastRunRoutine(), + cros_healthd::mojom::DiagnosticRoutineEnum::kMemory); +} + } // namespace chromeos
diff --git a/chrome/browser/content_settings/chrome_content_settings_utils.cc b/chrome/browser/content_settings/chrome_content_settings_utils.cc index 7f6b81f..9c0f773 100644 --- a/chrome/browser/content_settings/chrome_content_settings_utils.cc +++ b/chrome/browser/content_settings/chrome_content_settings_utils.cc
@@ -12,7 +12,7 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/location_bar/location_bar.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_contents.h" #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/devtools/protocol/page_handler.cc b/chrome/browser/devtools/protocol/page_handler.cc index e03dadc..71daeb906 100644 --- a/chrome/browser/devtools/protocol/page_handler.cc +++ b/chrome/browser/devtools/protocol/page_handler.cc
@@ -5,7 +5,7 @@ #include "chrome/browser/devtools/protocol/page_handler.h" #include "base/strings/utf_string_conversions.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/subresource_filter/content/browser/devtools_interaction_tracker.h" #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/manifest/manifest_util.h"
diff --git a/chrome/browser/engagement/important_sites_util.cc b/chrome/browser/engagement/important_sites_util.cc index a856c25..1d08721 100644 --- a/chrome/browser/engagement/important_sites_util.cc +++ b/chrome/browser/engagement/important_sites_util.cc
@@ -19,7 +19,7 @@ #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/installable/installable_utils.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/pref_names.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/url_and_title.h"
diff --git a/chrome/browser/enterprise/connectors/connectors_service.cc b/chrome/browser/enterprise/connectors/connectors_service.cc index 0f3cec46..68177625 100644 --- a/chrome/browser/enterprise/connectors/connectors_service.cc +++ b/chrome/browser/enterprise/connectors/connectors_service.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/profiles/profile_attributes_entry.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/profiles/reporting_util.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/managed_ui.h" #include "components/embedder_support/user_agent_utils.h" @@ -54,28 +55,11 @@ namespace { -const enterprise_management::PolicyData* GetProfilePolicyData( - Profile* profile) { - DCHECK(profile); - auto* manager = -#if BUILDFLAG(IS_CHROMEOS_ASH) - profile->GetUserCloudPolicyManagerAsh(); -#else - profile->GetUserCloudPolicyManager(); -#endif - if (manager && manager->core()->store() && - manager->core()->store()->has_policy()) { - return manager->core()->store()->policy(); - } - return nullptr; -} - void PopulateBrowserMetadata(bool include_device_info, ClientMetadata::Browser* browser_proto) { base::FilePath browser_id; if (base::PathService::Get(base::DIR_EXE, &browser_id)) browser_proto->set_browser_id(browser_id.AsUTF8Unsafe()); - browser_proto->set_user_agent(embedder_support::GetUserAgent()); browser_proto->set_chrome_version(version_info::GetVersionNumber()); if (include_device_info) browser_proto->set_machine_user(policy::GetOSUsername()); @@ -101,33 +85,6 @@ device_proto->set_name(policy::GetDeviceName()); } -void PopulateProfileMetadata(const ReportingSettings& reporting_settings, - Profile* profile, - ClientMetadata::Profile* profile_proto) { - if (reporting_settings.per_profile) - profile_proto->set_dm_token(reporting_settings.dm_token); - auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); - if (identity_manager) { - profile_proto->set_gaia_email( - identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) - .email); - } - profile_proto->set_profile_path(profile->GetPath().AsUTF8Unsafe()); - ProfileAttributesEntry* entry = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath()); - if (entry) { - profile_proto->set_profile_name(base::UTF16ToUTF8(entry->GetName())); - } - const enterprise_management::PolicyData* profile_policy = - GetProfilePolicyData(profile); - if (profile_policy) { - if (profile_policy->has_device_id()) - profile_proto->set_client_id(profile_policy->device_id()); - } -} - bool IsURLExemptFromAnalysis(const GURL& url) { if (url.SchemeIs(content::kChromeUIScheme)) return true; @@ -565,14 +522,13 @@ bool include_device_info = !reporting_settings.value().per_profile; Profile* profile = Profile::FromBrowserContext(context_); - auto metadata = std::make_unique<ClientMetadata>(); + auto metadata = std::make_unique<ClientMetadata>( + reporting::GetContextAsClientMetadata(profile)); PopulateBrowserMetadata(include_device_info, metadata->mutable_browser()); if (include_device_info) { PopulateDeviceMetadata(reporting_settings.value(), profile, metadata->mutable_device()); } - PopulateProfileMetadata(reporting_settings.value(), profile, - metadata->mutable_profile()); return metadata; }
diff --git a/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc b/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc index 45a8683..4de0e52 100644 --- a/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc +++ b/chrome/browser/enterprise/connectors/connectors_service_browsertest.cc
@@ -14,6 +14,7 @@ #include "chrome/browser/enterprise/connectors/connectors_prefs.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" #include "chrome/browser/policy/dm_token_utils.h" +#include "chrome/browser/profiles/reporting_util.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_browsertest_base.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_test_utils.h" #include "chrome/browser/ui/browser.h" @@ -21,11 +22,17 @@ #include "components/enterprise/browser/enterprise_switches.h" #include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h" +#include "components/policy/core/common/cloud/reporting_job_configuration_base.h" #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" #include "components/policy/core/common/policy_switches.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" +#include "components/version_info/version_info.h" #include "content/public/test/browser_test.h" +#if BUILDFLAG(IS_CHROMEOS_ASH) +#include "chrome/browser/ash/policy/core/user_cloud_policy_manager_ash.h" +#endif + namespace enterprise_connectors { namespace { @@ -46,19 +53,19 @@ ])"; #if !BUILDFLAG(IS_CHROMEOS_ASH) -constexpr char kFakeProfileDMToken[] = "fake-profile-dm-token"; constexpr char kFakeEnrollmentToken[] = "fake-enrollment-token"; -constexpr char kFakeBrowserClientId[] = "fake-browser-client-id"; -constexpr char kFakeProfileClientId[] = "fake-profile-client-id"; -constexpr char kAffiliationId1[] = "affiliation-id-1"; constexpr char kAffiliationId2[] = "affiliation-id-2"; constexpr char kUsername1[] = "user@domain1.com"; constexpr char kUsername2[] = "admin@domain2.com"; -constexpr char kDomain1[] = "domain1.com"; constexpr char kDomain2[] = "domain2.com"; #endif constexpr char kFakeBrowserDMToken[] = "fake-browser-dm-token"; +constexpr char kFakeProfileDMToken[] = "fake-profile-dm-token"; +constexpr char kFakeBrowserClientId[] = "fake-browser-client-id"; +constexpr char kFakeProfileClientId[] = "fake-profile-client-id"; +constexpr char kAffiliationId1[] = "affiliation-id-1"; +constexpr char kDomain1[] = "domain1.com"; constexpr char kTestUrl[] = "https://foo.com"; } // namespace @@ -108,23 +115,30 @@ scoped_feature_list_.InitWithFeatures({kEnterpriseConnectorsEnabled}, {}); } -#if !BUILDFLAG(IS_CHROMEOS_ASH) void SetUpOnMainThread() override { safe_browsing::DeepScanningBrowserTestBase::SetUpOnMainThread(); +#if !BUILDFLAG(IS_CHROMEOS_ASH) safe_browsing::SetProfileDMToken(browser()->profile(), kFakeProfileDMToken); +#endif // Set profile/browser affiliation IDs. auto* profile_policy_manager = +#if BUILDFLAG(IS_CHROMEOS_ASH) + browser()->profile()->GetUserCloudPolicyManagerAsh(); +#else browser()->profile()->GetUserCloudPolicyManager(); +#endif auto profile_policy_data = std::make_unique<enterprise_management::PolicyData>(); profile_policy_data->add_user_affiliation_ids(kAffiliationId1); profile_policy_data->set_managed_by(kDomain1); profile_policy_data->set_device_id(kFakeProfileClientId); + profile_policy_data->set_request_token(kFakeProfileDMToken); profile_policy_manager->core()->store()->set_policy_data_for_testing( std::move(profile_policy_data)); +#if !BUILDFLAG(IS_CHROMEOS_ASH) if (management_status_ != ManagementStatus::UNMANAGED) { auto* browser_policy_manager = g_browser_process->browser_policy_connector() @@ -141,17 +155,16 @@ browser_policy_manager->core()->store()->set_policy_data_for_testing( std::move(browser_policy_data)); } +#endif } -#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) +#if !BUILDFLAG(GOOGLE_CHROME_BRANDING) && !BUILDFLAG(IS_CHROMEOS_ASH) void SetUpDefaultCommandLine(base::CommandLine* command_line) override { InProcessBrowserTest::SetUpDefaultCommandLine(command_line); command_line->AppendSwitch(::switches::kEnableChromeBrowserCloudManagement); } #endif -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) - void SetPrefs(const char* pref, const char* scope_pref, const char* pref_value, @@ -246,32 +259,109 @@ : ConnectorsServiceProfileBrowserTest(std::get<1>(GetParam())) {} AnalysisConnector connector() { return std::get<0>(GetParam()); } + // Returns the Value the "normal" reporting workflow uses to validate that it + // is in sync with the information sent through analysis-reporting. + base::Value ReportingMetadata(bool include_device_info) { + base::Value output = base::Value(base::Value::Type::DICTIONARY); + output.SetKey( + "browser", + policy::ReportingJobConfigurationBase::BrowserDictionaryBuilder:: + BuildBrowserDictionary(include_device_info)); + base::Value context = reporting::GetContext(browser()->profile()); + output.MergeDictionary(&context); + if (include_device_info) { + base::Value device = base::Value(base::Value::Type::DICTIONARY); + device.SetKey( + "device", + policy::ReportingJobConfigurationBase::DeviceDictionaryBuilder :: + BuildDeviceDictionary(kFakeBrowserDMToken, kFakeBrowserClientId)); + output.MergeDictionary(&device); + } + + return output; + } + void ValidateClientMetadata(const ClientMetadata& metadata, bool profile_reporting) { + base::Value reporting_metadata = ReportingMetadata(!profile_reporting); + ASSERT_TRUE(metadata.has_browser()); + ASSERT_TRUE(metadata.browser().has_browser_id()); + ASSERT_EQ(metadata.browser().browser_id(), + *reporting_metadata.FindStringPath("browser.browserId")); + ASSERT_TRUE(metadata.browser().has_user_agent()); + ASSERT_EQ(metadata.browser().user_agent(), + *reporting_metadata.FindStringPath("browser.userAgent")); + ASSERT_TRUE(metadata.browser().has_chrome_version()); + ASSERT_EQ(metadata.browser().chrome_version(), + version_info::GetVersionNumber()); + ASSERT_EQ(metadata.browser().chrome_version(), + *reporting_metadata.FindStringPath("browser.chromeVersion")); + ASSERT_NE(profile_reporting, metadata.browser().has_machine_user()); + ASSERT_NE(profile_reporting, + !!reporting_metadata.FindStringPath("browser.machineUser")); + if (metadata.browser().has_machine_user()) { + ASSERT_EQ(metadata.browser().machine_user(), + *reporting_metadata.FindStringPath("browser.machineUser")); + } ASSERT_NE(profile_reporting, metadata.has_device()); if (!profile_reporting) { // The device DM token should only be populated when reporting is set at // the device level, aka not the profile level. - ASSERT_NE(profile_reporting, metadata.device().has_dm_token()); + ASSERT_TRUE(metadata.device().has_dm_token()); + ASSERT_EQ(metadata.device().dm_token(), kFakeBrowserDMToken); + ASSERT_TRUE(reporting_metadata.FindStringPath("device.dmToken")); + ASSERT_EQ(metadata.device().dm_token(), + *reporting_metadata.FindStringPath("device.dmToken")); + +#if !BUILDFLAG(IS_CHROMEOS_ASH) ASSERT_TRUE(metadata.device().has_client_id()); + ASSERT_EQ(metadata.device().client_id(), + *reporting_metadata.FindStringPath("device.clientId")); +#endif + ASSERT_TRUE(metadata.device().has_os_version()); + ASSERT_EQ(metadata.device().os_version(), + *reporting_metadata.FindStringPath("device.osVersion")); + ASSERT_TRUE(metadata.device().has_os_platform()); + ASSERT_EQ(metadata.device().os_platform(), + *reporting_metadata.FindStringPath("device.osPlatform")); + ASSERT_TRUE(metadata.device().has_name()); + ASSERT_EQ(metadata.device().name(), + *reporting_metadata.FindStringPath("device.name")); } ASSERT_TRUE(metadata.has_profile()); - ASSERT_EQ(profile_reporting, metadata.profile().has_dm_token()); + + ASSERT_TRUE(metadata.profile().has_dm_token()); + ASSERT_EQ(metadata.profile().dm_token(), kFakeProfileDMToken); + ASSERT_EQ(metadata.profile().dm_token(), + *reporting_metadata.FindStringPath("profile.dmToken")); + ASSERT_TRUE(metadata.profile().has_gaia_email()); + ASSERT_EQ(metadata.profile().gaia_email(), + *reporting_metadata.FindStringPath("profile.gaiaEmail")); + ASSERT_TRUE(metadata.profile().has_profile_path()); + ASSERT_EQ(metadata.profile().profile_path(), + *reporting_metadata.FindStringPath("profile.profilePath")); + ASSERT_TRUE(metadata.profile().has_profile_name()); + ASSERT_EQ(metadata.profile().profile_name(), + *reporting_metadata.FindStringPath("profile.profileName")); + #if !BUILDFLAG(IS_CHROMEOS_ASH) ASSERT_TRUE(metadata.profile().has_client_id()); + ASSERT_EQ(metadata.profile().client_id(), kFakeProfileClientId); + ASSERT_EQ(metadata.profile().client_id(), + *reporting_metadata.FindStringPath("profile.clientId")); #endif } };
diff --git a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc index 1b68de2..757abb9 100644 --- a/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc +++ b/chrome/browser/extensions/api/management/chrome_management_api_delegate.cc
@@ -33,14 +33,14 @@ #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/ui/webui/extensions/extension_icon_source.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_install_params.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/extension_metrics.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
diff --git a/chrome/browser/extensions/api/management/management_apitest.cc b/chrome/browser/extensions/api/management/management_apitest.cc index 40a7a31..8f87875 100644 --- a/chrome/browser/extensions/api/management/management_apitest.cc +++ b/chrome/browser/extensions/api/management/management_apitest.cc
@@ -17,9 +17,9 @@ #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/test_web_app_ui_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc index c56a5da..d0043b13 100644 --- a/chrome/browser/extensions/api/tabs/tabs_api.cc +++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -59,7 +59,7 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_utils.h" #include "chrome/browser/ui/window_sizer/window_sizer.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/extensions/api/tabs.h" #include "chrome/common/extensions/api/windows.h" #include "chrome/common/extensions/extension_constants.h"
diff --git a/chrome/browser/extensions/browsertest_util.cc b/chrome/browser/extensions/browsertest_util.cc index b0da322..82eff6fc 100644 --- a/chrome/browser/extensions/browsertest_util.cc +++ b/chrome/browser/extensions/browsertest_util.cc
@@ -21,7 +21,7 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/notification_service.h" #include "content/public/test/test_utils.h"
diff --git a/chrome/browser/extensions/preinstalled_apps_browsertest.cc b/chrome/browser/extensions/preinstalled_apps_browsertest.cc index 3dbdd5e..890b32f9 100644 --- a/chrome/browser/extensions/preinstalled_apps_browsertest.cc +++ b/chrome/browser/extensions/preinstalled_apps_browsertest.cc
@@ -17,7 +17,6 @@ #include "chrome/browser/extensions/pending_extension_manager.h" #include "chrome/browser/web_applications/components/preinstalled_app_install_features.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/extension_status_utils.h" #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h" #include "chrome/browser/web_applications/preinstalled_web_app_manager.h" @@ -25,6 +24,7 @@ #include "chrome/browser/web_applications/test/test_os_integration_manager.h" #include "chrome/browser/web_applications/test/test_web_app_provider.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_installation_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/extensions/tab_helper.cc b/chrome/browser/extensions/tab_helper.cc index 6c262c16..0ce80d7 100644 --- a/chrome/browser/extensions/tab_helper.cc +++ b/chrome/browser/extensions/tab_helper.cc
@@ -27,7 +27,7 @@ #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/browser_finder.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/buildflags.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 06087d4..15499ff 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -183,6 +183,11 @@ "owners": [ "chromeos-apps-foundation-team@google.com" ], "expiry_milestone": 96 }, + { + "name": "apps-shortcut-default-off", + "owners": [ "chrome-desktop-ui-sea@google.com", "cyan" ], + "expiry_milestone": 95 + }, { "name": "arc-custom-tabs-experiment", "owners": [ "hashimoto", "dominickn" ], @@ -2050,6 +2055,17 @@ "expiry_milestone": 114 }, { + "name": "enable-hardware-secure-decryption", + "owners": [ + "xhwang", "media-dev" + ], + // This flag does not expire because the feature depends on the OS, GPU + // driver and hardware, and the flag allows users to disable HW secure + // decryption for debugging purpose and/or temporarily working around OS + // or driver issues. + "expiry_milestone": -1 + }, + { "name": "enable-heavy-ad-intervention", "owners": [ "johnidel", "jkarlin" ], "expiry_milestone": 90 @@ -4539,7 +4555,7 @@ { "name": "photo-picker-video-support", "owners": [ "finnur" ], - "expiry_milestone": 92 + "expiry_milestone": 105 }, { "name": "playback-speed-button", @@ -5760,7 +5776,7 @@ { "name": "webui-feedback", "owners": [ "xiangdongkong@google.com", "dpapad@chromium.org" ], - "expiry_milestone": 94 + "expiry_milestone": 106 }, { "name": "webui-tab-strip",
diff --git a/chrome/browser/flag-never-expire-list.json b/chrome/browser/flag-never-expire-list.json index 51f2b677..1129a8a 100644 --- a/chrome/browser/flag-never-expire-list.json +++ b/chrome/browser/flag-never-expire-list.json
@@ -39,6 +39,7 @@ "enable-future-v8-vm-features", "enable-gpu-rasterization", "enable-gpu-service-logging", + "enable-hardware-secure-decryption", "enable-input-event-logging", "enable-javascript-harmony", "enable-lite-video",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 4a62b044..e71753c9 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2474,6 +2474,10 @@ "Allows users to see an animation when entering or leaving the " "Grid Tab Switcher on phones."; +const char kAppsShortcutDefaultOffName[] = "Apps Shortcut Default Off"; +const char kAppsShortcutDefaultOffDescription[] = + "Changes the apps shortcut on the bookmarks bar to default to off."; + const char kTabGroupsAutoCreateName[] = "Tab Groups Auto Create"; const char kTabGroupsAutoCreateDescription[] = "Automatically creates groups for users, if tab groups are enabled."; @@ -3790,6 +3794,11 @@ "Enable/Disable the usage of MediaFoundation for video capture. Fall back " "to DirectShow if disabled."; +const char kHardwareSecureDecryptionName[] = "Hardware Secure Decryption"; +const char kHardwareSecureDecryptionDescription[] = + "Enable/Disable the use of hardware secure Content Decryption Module (CDM) " + "for protected content playback."; + const char kRawAudioCaptureName[] = "Raw audio capture"; const char kRawAudioCaptureDescription[] = "Enable/Disable the usage of WASAPI raw audio capture. When enabled, the "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 454452e..0d2e807 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1421,6 +1421,9 @@ extern const char kTabToGTSAnimationAndroidName[]; extern const char kTabToGTSAnimationAndroidDescription[]; +extern const char kAppsShortcutDefaultOffName[]; +extern const char kAppsShortcutDefaultOffDescription[]; + extern const char kTabGroupsAutoCreateName[]; extern const char kTabGroupsAutoCreateDescription[]; @@ -2164,6 +2167,9 @@ extern const char kEnableMediaFoundationVideoCaptureName[]; extern const char kEnableMediaFoundationVideoCaptureDescription[]; +extern const char kHardwareSecureDecryptionName[]; +extern const char kHardwareSecureDecryptionDescription[]; + extern const char kRawAudioCaptureName[]; extern const char kRawAudioCaptureDescription[];
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index 6de68d5..886ef143 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -330,6 +330,7 @@ &query_tiles::features::kQueryTilesSegmentation, &reading_list::switches::kReadLater, &send_tab_to_self::kSendTabToSelfV2, + &send_tab_to_self::kSendTabToSelfManageDevicesLink, &signin::kMobileIdentityConsistencyPromos, &switches::kDeprecateMenagerieAPI, &switches::kForceStartupSigninPromo,
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java index 128081d..441f02f 100644 --- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java +++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -482,6 +482,8 @@ public static final String SEARCH_ENGINE_PROMO_NEW_DEVICE = "SearchEnginePromo.NewDevice"; public static final String SEARCH_HISTORY_LINK = "SearchHistoryLink"; public static final String SEND_TAB_TO_SELF_V2 = "SendTabToSelfV2"; + public static final String SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK = + "SendTabToSelfManageDevicesLink"; public static final String SERVICE_MANAGER_FOR_BACKGROUND_PREFETCH = "ServiceManagerForBackgroundPrefetch"; public static final String SERVICE_MANAGER_FOR_DOWNLOAD = "ServiceManagerForDownload";
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc index c82d2fbb..29f513a 100644 --- a/chrome/browser/media/encrypted_media_browsertest.cc +++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -844,7 +844,7 @@ #else #define MAYBE_FrameSizeChangeVideo FrameSizeChangeVideo #endif -IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, FrameSizeChangeVideo) { +IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, MAYBE_FrameSizeChangeVideo) { if (!IsPlayBackPossible(CurrentKeySystem())) GTEST_SKIP() << "FrameSizeChange test requires video playback.";
diff --git a/chrome/browser/media/encrypted_media_supported_types_browsertest.cc b/chrome/browser/media/encrypted_media_supported_types_browsertest.cc index 937549e..e4798a34 100644 --- a/chrome/browser/media/encrypted_media_supported_types_browsertest.cc +++ b/chrome/browser/media/encrypted_media_supported_types_browsertest.cc
@@ -791,7 +791,7 @@ #define MAYBE_EncryptionScheme EncryptionScheme #endif IN_PROC_BROWSER_TEST_F(EncryptedMediaSupportedTypesClearKeyTest, - EncryptionScheme) { + MAYBE_EncryptionScheme) { EXPECT_SUCCESS(IsAudioEncryptionSchemeSupported(kClearKey, nullptr)); EXPECT_SUCCESS(IsAudioEncryptionSchemeSupported(kClearKey, "cenc")); EXPECT_SUCCESS(IsAudioEncryptionSchemeSupported(kClearKey, "cbcs"));
diff --git a/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer.cc b/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer.cc index a5401b3e..9e73fed8 100644 --- a/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer.cc +++ b/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer.cc
@@ -60,7 +60,7 @@ blink::LoadingBehaviorFlag::kLoadingBehaviorVuePressFrameworkUsed) != 0); if (base::FeatureList::IsEnabled( - blink::features::kReportAllJavascriptFrameworks)) { + blink::features::kReportAllJavaScriptFrameworks)) { builder .SetAngularPageLoad((frameworks_detected_ & blink::LoadingBehaviorFlag::
diff --git a/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer_browsertest.cc index 809b37d5..a978c85 100644 --- a/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/javascript_frameworks_ukm_observer_browsertest.cc
@@ -48,14 +48,14 @@ kSveltePageLoad, kVuePageLoad, }; -enum class ReportAllJavascriptFrameworks { kDisabled, kEnabled }; +enum class ReportAllJavaScriptFrameworks { kDisabled, kEnabled }; std::string ToString( - const testing::TestParamInfo<ReportAllJavascriptFrameworks>& info) { + const testing::TestParamInfo<ReportAllJavaScriptFrameworks>& info) { switch (info.param) { - case ReportAllJavascriptFrameworks::kDisabled: + case ReportAllJavaScriptFrameworks::kDisabled: return "Disabled"; - case ReportAllJavascriptFrameworks::kEnabled: + case ReportAllJavaScriptFrameworks::kEnabled: return "Enabled"; } } @@ -119,7 +119,7 @@ void RunSingleFrameworkDetectionTest(const std::string& test_url, const char* framework_name, - ReportAllJavascriptFrameworks param) { + ReportAllJavaScriptFrameworks param) { page_load_metrics::PageLoadMetricsTestWaiter waiter( browser()->tab_strip_model()->GetActiveWebContents()); waiter.AddPageExpectation( @@ -130,7 +130,7 @@ waiter.Wait(); CloseAllTabs(); RunFrameworkDetection(simpler_frameworks, framework_name, url); - if (param == ReportAllJavascriptFrameworks::kEnabled) { + if (param == ReportAllJavaScriptFrameworks::kEnabled) { RunFrameworkDetection(harder_frameworks, framework_name, url); } } @@ -154,19 +154,19 @@ class ParametrizedJavascriptFrameworksUkmObserverBrowserTest : public JavascriptFrameworksUkmObserverBrowserTest, - public ::testing::WithParamInterface<ReportAllJavascriptFrameworks> { + public ::testing::WithParamInterface<ReportAllJavaScriptFrameworks> { public: ParametrizedJavascriptFrameworksUkmObserverBrowserTest() { std::vector<base::Feature> enabled_features; std::vector<base::Feature> disabled_features; switch (GetParam()) { - case ReportAllJavascriptFrameworks::kDisabled: + case ReportAllJavaScriptFrameworks::kDisabled: disabled_features.push_back( - blink::features::kReportAllJavascriptFrameworks); + blink::features::kReportAllJavaScriptFrameworks); break; - case ReportAllJavascriptFrameworks::kEnabled: + case ReportAllJavaScriptFrameworks::kEnabled: enabled_features.push_back( - blink::features::kReportAllJavascriptFrameworks); + blink::features::kReportAllJavaScriptFrameworks); break; } feature_list_.InitWithFeatures(enabled_features, disabled_features); @@ -180,8 +180,8 @@ INSTANTIATE_TEST_SUITE_P( /* No prefix. */, ParametrizedJavascriptFrameworksUkmObserverBrowserTest, - testing::Values(ReportAllJavascriptFrameworks::kDisabled, - ReportAllJavascriptFrameworks::kEnabled), + testing::Values(ReportAllJavaScriptFrameworks::kDisabled, + ReportAllJavaScriptFrameworks::kEnabled), ToString); IN_PROC_BROWSER_TEST_P(ParametrizedJavascriptFrameworksUkmObserverBrowserTest, @@ -199,7 +199,7 @@ ExpectMetricCountForUrl(url, framework, 1); ExpectMetricValueForUrl(url, framework, false); } - if (GetParam() == ReportAllJavascriptFrameworks::kEnabled) { + if (GetParam() == ReportAllJavaScriptFrameworks::kEnabled) { for (const char* framework : harder_frameworks) { ExpectMetricCountForUrl(url, framework, 1); ExpectMetricValueForUrl(url, framework, false); @@ -268,7 +268,7 @@ public: JavascriptFrameworksUkmObserverBrowserTestEnabled() { feature_list_.InitAndEnableFeature( - blink::features::kReportAllJavascriptFrameworks); + blink::features::kReportAllJavaScriptFrameworks); } ~JavascriptFrameworksUkmObserverBrowserTestEnabled() override = default; @@ -280,82 +280,82 @@ AngularFrameworkDetected) { RunSingleFrameworkDetectionTest("/page_load_metrics/angular_page.html", kAngularPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, PreactFrameworkDetected) { RunSingleFrameworkDetectionTest("/page_load_metrics/preact_page.html", kPreactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected1) { RunSingleFrameworkDetectionTest("/page_load_metrics/react1_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected2) { RunSingleFrameworkDetectionTest("/page_load_metrics/react2_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected3) { RunSingleFrameworkDetectionTest("/page_load_metrics/react3_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected4) { RunSingleFrameworkDetectionTest("/page_load_metrics/react4_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected5) { RunSingleFrameworkDetectionTest("/page_load_metrics/react5_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, ReactFrameworkDetected6) { RunSingleFrameworkDetectionTest("/page_load_metrics/react6_page.html", kReactPageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, SvelteFrameworkDetected) { RunSingleFrameworkDetectionTest("/page_load_metrics/svelte_page.html", kSveltePageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, VueFrameworkDetected1) { RunSingleFrameworkDetectionTest("/page_load_metrics/vue1_page.html", kVuePageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, VueFrameworkDetected2) { RunSingleFrameworkDetectionTest("/page_load_metrics/vue2_page.html", kVuePageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); } IN_PROC_BROWSER_TEST_F(JavascriptFrameworksUkmObserverBrowserTestEnabled, VueFrameworkDetected3) { RunSingleFrameworkDetectionTest("/page_load_metrics/vue3_page.html", kVuePageLoad, - ReportAllJavascriptFrameworks::kEnabled); + ReportAllJavaScriptFrameworks::kEnabled); }
diff --git a/chrome/browser/password_manager/BUILD.gn b/chrome/browser/password_manager/BUILD.gn index f48d326..a109991 100644 --- a/chrome/browser/password_manager/BUILD.gn +++ b/chrome/browser/password_manager/BUILD.gn
@@ -16,8 +16,10 @@ if (is_android && enable_chrome_android_internal) { sources = [ "password_store_android_backend_factory.cc" ] - deps += [ "//components/password_manager/core/common:common" ] - public_deps = [ "//chrome/browser/password_manager/android:backend" ] + deps += [ + "//chrome/browser/password_manager/android:backend", + "//components/password_manager/core/common:common", + ] } else { sources = [ "password_store_local_backend_factory.cc" ] }
diff --git a/chrome/browser/password_manager/android/BUILD.gn b/chrome/browser/password_manager/android/BUILD.gn index 53aeac4..66ea786d 100644 --- a/chrome/browser/password_manager/android/BUILD.gn +++ b/chrome/browser/password_manager/android/BUILD.gn
@@ -64,10 +64,8 @@ ] if (enable_chrome_android_internal) { - sources += [ - "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java", - "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java", - ] + sources += [ "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java" ] + public_deps = [ ":backend_interface_java" ] } annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] @@ -114,6 +112,14 @@ ] } +android_library("backend_interface_java") { + deps = [ "//base:base_java" ] + sources = [ + "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java", + "java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendFactory.java", + ] +} + source_set("unit_tests") { testonly = true sources = [
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java index 46b0601..715870d 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackend.java
@@ -5,21 +5,18 @@ package org.chromium.chrome.browser.password_manager; import org.chromium.base.Callback; -import org.chromium.base.task.PostTask; -import org.chromium.base.task.TaskTraits; -import org.chromium.components.sync.protocol.ListPasswordsResult; /** - * Java implementation of the backend. Uses a Google Mobile Services API to fulfill password store + * Interface to send backend requests to a downstream implementation to fulfill password store * tasks. All methods are expected to respond asynchronously to callbacks. */ -class PasswordStoreAndroidBackend { - PasswordStoreAndroidBackend() {} - - public void getAllLogins(Callback<byte[]> loginsReply) { - // TODO(crbug.com/1229654): Call actual API. - PostTask.postTask(TaskTraits.THREAD_POOL_USER_VISIBLE, () -> { - loginsReply.onResult(ListPasswordsResult.getDefaultInstance().toByteArray()); - }); - } +public interface PasswordStoreAndroidBackend { + /** + * Triggers an async list call to retrieve all logins. + * + * @param loginsReply Callback that is called on success with serialized {@link + * org.chromium.components.sync.protocol.ListPasswordsResult} data. + * @param failureCallback A callback that is called on failure for any reason. May return sync. + */ + void getAllLogins(Callback<byte[]> loginsReply, Callback<Exception> failureCallback); }
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java index c0c8efc3..5ea5be93 100644 --- a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendBridgeImpl.java
@@ -14,7 +14,7 @@ /** * Java-counterpart of the native PasswordStoreAndroidBackendBridgeImpl. It's part of the password - * store backend that forwards password store operations to Google Mobile Services. + * store backend that forwards password store operations to a downstream implementation. */ class PasswordStoreAndroidBackendBridgeImpl { /** @@ -28,23 +28,32 @@ private final PasswordStoreAndroidBackend mBackend; private long mNativeBackendBridge; - private PasswordStoreAndroidBackendBridgeImpl(long nativeBackendBridge) { + PasswordStoreAndroidBackendBridgeImpl( + long nativeBackendBridge, PasswordStoreAndroidBackend backend) { mNativeBackendBridge = nativeBackendBridge; - mBackend = new PasswordStoreAndroidBackend(); + mBackend = backend; + assert mBackend != null; } @CalledByNative - private static PasswordStoreAndroidBackendBridgeImpl create(long nativeBackendBridge) { - return new PasswordStoreAndroidBackendBridgeImpl(nativeBackendBridge); + static PasswordStoreAndroidBackendBridgeImpl create(long nativeBackendBridge) { + return new PasswordStoreAndroidBackendBridgeImpl(nativeBackendBridge, + PasswordStoreAndroidBackendFactory.getInstance().createBackend()); } @CalledByNative - private void getAllLogins(@TaskId int taskId) { - mBackend.getAllLogins(passwords -> { - if (mNativeBackendBridge == 0) return; - PasswordStoreAndroidBackendBridgeImplJni.get().onCompleteWithLogins( - mNativeBackendBridge, taskId, passwords); - }); + void getAllLogins(@TaskId int taskId) { + mBackend.getAllLogins( + passwords + -> { + if (mNativeBackendBridge == 0) return; + PasswordStoreAndroidBackendBridgeImplJni.get().onCompleteWithLogins( + mNativeBackendBridge, taskId, passwords); + }, + exception + -> { + // TODO(crbug.com/1229654): Clear failed tasks and record failures. + }); } @CalledByNative
diff --git a/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendFactory.java b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendFactory.java new file mode 100644 index 0000000..2d0fb11 --- /dev/null +++ b/chrome/browser/password_manager/android/java/src/org/chromium/chrome/browser/password_manager/PasswordStoreAndroidBackendFactory.java
@@ -0,0 +1,34 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.password_manager; + +/** + * This factory returns an implementation for the backend. The factory itself is implemented + * downstream, too. + */ +public abstract class PasswordStoreAndroidBackendFactory { + private static PasswordStoreAndroidBackendFactory sInstance; + + /** + * Returns a backend factory to be invoked whenever {@link #createBackend()} is called. If no + * factory was used yet, it is created. + * + * @return The shared {@link PasswordStoreAndroidBackendFactory} instance. + */ + public static PasswordStoreAndroidBackendFactory getInstance() { + // TODO(crbug.com/1229654): Create new PasswordStoreAndroidBackendFactoryImpl(). + return sInstance; + } + + /** + * Returns the downstream implementation provided by subclasses. + * + * @return A non-null implementation of the {@link PasswordStoreAndroidBackend}. + */ + public PasswordStoreAndroidBackend createBackend() { + assert false : "No implementation of the backend for password store found."; + return null; + } +}
diff --git a/chrome/browser/profiles/reporting_util.cc b/chrome/browser/profiles/reporting_util.cc index 6fe35d5a..5179e872 100644 --- a/chrome/browser/profiles/reporting_util.cc +++ b/chrome/browser/profiles/reporting_util.cc
@@ -8,6 +8,7 @@ #include <vector> #include "base/callback.h" +#include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/browser_process.h" @@ -17,6 +18,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "components/account_id/account_id.h" #include "components/embedder_support/user_agent_utils.h" +#include "components/enterprise/common/proto/connectors.pb.h" #include "components/policy/core/common/cloud/cloud_policy_store.h" #include "components/policy/core/common/cloud/user_cloud_policy_manager.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -149,4 +151,46 @@ return context; } +enterprise_connectors::ClientMetadata GetContextAsClientMetadata( + Profile* profile) { + enterprise_connectors::ClientMetadata metadata; + metadata.mutable_browser()->set_user_agent(embedder_support::GetUserAgent()); + + if (!profile) + return metadata; + + ProfileAttributesStorage& storage = + g_browser_process->profile_manager()->GetProfileAttributesStorage(); + ProfileAttributesEntry* entry = + storage.GetProfileAttributesWithPath(profile->GetPath()); + if (entry) { + metadata.mutable_profile()->set_profile_name( + base::UTF16ToUTF8(entry->GetName())); + metadata.mutable_profile()->set_gaia_email( + base::UTF16ToUTF8(entry->GetUserName())); + } + + metadata.mutable_profile()->set_profile_path( + profile->GetPath().AsUTF8Unsafe()); + + const enterprise_management::PolicyData* policy = GetPolicyData(profile); + + if (policy) { + if (policy->has_device_id()) + metadata.mutable_profile()->set_client_id(policy->device_id()); + +#if BUILDFLAG(IS_CHROMEOS_ASH) + std::string device_dm_token = GetDeviceDmToken(profile); + if (!device_dm_token.empty()) + metadata.mutable_device()->set_dm_token(device_dm_token); +#endif + + std::string user_dm_token = GetUserDmToken(profile); + if (!user_dm_token.empty()) + metadata.mutable_profile()->set_dm_token(user_dm_token); + } + + return metadata; +} + } // namespace reporting
diff --git a/chrome/browser/profiles/reporting_util.h b/chrome/browser/profiles/reporting_util.h index bac3202..f7efd3d 100644 --- a/chrome/browser/profiles/reporting_util.h +++ b/chrome/browser/profiles/reporting_util.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_PROFILES_REPORTING_UTIL_H_ #define CHROME_BROWSER_PROFILES_REPORTING_UTIL_H_ +#include "components/enterprise/common/proto/connectors.pb.h" + class Profile; namespace base { @@ -18,6 +20,11 @@ // google3/google/internal/chrome/reporting/v1/chromereporting.proto. base::Value GetContext(Profile* profile); +// Fetches the same information as GetContext, but in a protobuf instead of a +// Value. +enterprise_connectors::ClientMetadata GetContextAsClientMetadata( + Profile* profile); + } // namespace reporting #endif // CHROME_BROWSER_PROFILES_REPORTING_UTIL_H_
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index b6abd417..987a2ee 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -87,9 +87,9 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/webui/history/foreign_session_handler.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_delegate.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js index 7e3abb2..0da516c 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_method_options_page.js
@@ -73,6 +73,9 @@ this.id_ = queryParams.get('id') || ''; this.parentNode.pageTitle = this.languageHelper.getInputMethodDisplayName(this.id_); + assert( + this.parentNode.pageTitle !== '', + `Input method ID '${this.id_}' is invalid`); this.engineId_ = settings.input_method_util.getFirstPartyInputMethodEngineId(this.id_); this.populateOptionSections_();
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js index e849edd..dd1e11e 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/os_languages_section.js
@@ -118,12 +118,7 @@ if (id === ACCESSIBILITY_COMMON_IME_ID) { return ''; } - // LanguageHelper.getInputMethodDisplayName will throw an error if the ID - // isn't found, such as when using CrOS on Linux. - try { - return languageHelper.getInputMethodDisplayName(id); - } catch (_) { - return ''; - } + + return languageHelper.getInputMethodDisplayName(id); }, });
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js index 2f861eb..350281c 100644 --- a/chrome/browser/resources/settings/languages_page/languages.js +++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -1374,7 +1374,9 @@ */ getInputMethodDisplayName(id) { const inputMethod = this.supportedInputMethodMap_.get(id); - assert(inputMethod); + if (inputMethod === undefined) { + return ''; + } return inputMethod.displayName; } // </if>
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.html b/chrome/browser/resources/settings/privacy_page/cookies_page.html index 7dc7cc4..514991d 100644 --- a/chrome/browser/resources/settings/privacy_page/cookies_page.html +++ b/chrome/browser/resources/settings/privacy_page/cookies_page.html
@@ -145,7 +145,7 @@ on-settings-boolean-control-change="onNetworkPredictionChange_"> </settings-toggle-button> <cr-link-row id="site-data-trigger" class="hr" - on-click="onSiteDataClick_" label="$i18n{siteSettingsCookieLink}" + on-click="onSiteDataClick_" label="[[getSiteDataLabel_()]]" role-description="$i18n{subpageArrowRoleDescription}"> </cr-link-row> <div id="exceptionHeader">
diff --git a/chrome/browser/resources/settings/privacy_page/cookies_page.js b/chrome/browser/resources/settings/privacy_page/cookies_page.js index 7c228eb..2ee6075 100644 --- a/chrome/browser/resources/settings/privacy_page/cookies_page.js +++ b/chrome/browser/resources/settings/privacy_page/cookies_page.js
@@ -21,6 +21,7 @@ import {assert} from 'chrome://resources/js/assert.m.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; +import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js'; import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -60,12 +61,14 @@ /** * @constructor * @extends {PolymerElement} + * @implements {I18nBehaviorInterface} * @implements {PrefsBehaviorInterface} * @implements {RouteObserverMixinInterface} * @implements {WebUIListenerBehaviorInterface} */ const SettingsCookiesPageElementBase = mixinBehaviors( - [PrefsBehavior, WebUIListenerBehavior], RouteObserverMixin(PolymerElement)); + [I18nBehavior, PrefsBehavior, WebUIListenerBehavior], + RouteObserverMixin(PolymerElement)); /** @polymer */ export class SettingsCookiesPageElement extends SettingsCookiesPageElementBase { @@ -145,6 +148,13 @@ }, }, + /** @private */ + enableConsolidatedSiteStorageControls_: { + type: Boolean, + value: () => + loadTimeData.getBoolean('consolidatedSiteStorageControlsEnabled'), + }, + /** @type {!Map<string, (string|Function)>} */ focusConfig: { type: Object, @@ -174,10 +184,17 @@ focusConfigChanged_(newConfig, oldConfig) { assert(!oldConfig); assert(routes.SITE_SETTINGS_SITE_DATA); - this.focusConfig.set(routes.SITE_SETTINGS_SITE_DATA.path, () => { + const selectSiteDataLinkRow = () => { focusWithoutInk( assert(this.shadowRoot.querySelector('#site-data-trigger'))); - }); + }; + this.focusConfig.set( + routes.SITE_SETTINGS_SITE_DATA.path, selectSiteDataLinkRow); + if (this.enableConsolidatedSiteStorageControls_) { + this.focusConfig.set( + `${routes.SITE_SETTINGS_ALL.path}_${routes.COOKIES.path}`, + selectSiteDataLinkRow); + } } /** @override */ @@ -187,9 +204,23 @@ } } + /** + * @return {string} + * @private + */ + getSiteDataLabel_() { + return this.enableConsolidatedSiteStorageControls_ ? + this.i18n('cookiePageAllSitesLink') : + this.i18n('siteSettingsCookieLink'); + } + /** @private */ onSiteDataClick_() { - Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA); + if (this.enableConsolidatedSiteStorageControls_) { + Router.getInstance().navigateTo(routes.SITE_SETTINGS_ALL); + } else { + Router.getInstance().navigateTo(routes.SITE_SETTINGS_SITE_DATA); + } } /** @private */ @@ -201,12 +232,13 @@ this.exceptionListsReadOnly_ = sessionOnlyPref.enforcement === chrome.settingsPrivate.Enforcement.ENFORCED; - // It is not currently possible to represent multiple management sources - // for a single a preference. In all management scenarios, the blockAll - // setting shares the same controlledBy as the cookie_session_only pref. - // To support this, the controlledBy fields for the |cookie_primary_setting| - // pref provided to the blockAll control are overwritten with values from - // the session_only preference. + // It is not currently possible to represent multiple management + // sources for a single a preference. In all management scenarios, + // the blockAll setting shares the same controlledBy as the + // cookie_session_only pref. To support this, the controlledBy + // fields for the |cookie_primary_setting| pref provided to the + // blockAll control are overwritten with values from the session_only + // preference. this.set( 'blockAllPref_', Object.assign(this.getPref('generated.cookie_primary_setting'), { @@ -236,8 +268,8 @@ } // If this change resulted in the user now blocking 3P cookies where they - // previously were not, and privacy sandbox APIs are enabled, the privacy - // sandbox toast should be shown. + // previously were not, and privacy sandbox APIs are enabled, + // the privacy sandbox toast should be shown. const currentCookieSetting = this.getPref('generated.cookie_primary_setting').value; if (this.getPref('privacy_sandbox.apis_enabled').value &&
diff --git a/chrome/browser/resources/settings/route.js b/chrome/browser/resources/settings/route.js index c0b0b02..b2207f0 100644 --- a/chrome/browser/resources/settings/route.js +++ b/chrome/browser/resources/settings/route.js
@@ -50,9 +50,11 @@ r.SITE_SETTINGS.createChild('backgroundSync'); r.SITE_SETTINGS_CAMERA = r.SITE_SETTINGS.createChild('camera'); r.SITE_SETTINGS_CLIPBOARD = r.SITE_SETTINGS.createChild('clipboard'); - r.SITE_SETTINGS_SITE_DATA = r.COOKIES.createChild('/siteData'); - r.SITE_SETTINGS_DATA_DETAILS = - r.SITE_SETTINGS_SITE_DATA.createChild('/cookies/detail'); + if (!loadTimeData.getBoolean('consolidatedSiteStorageControlsEnabled')) { + r.SITE_SETTINGS_SITE_DATA = r.COOKIES.createChild('/siteData'); + r.SITE_SETTINGS_DATA_DETAILS = + r.SITE_SETTINGS_SITE_DATA.createChild('/cookies/detail'); + } r.SITE_SETTINGS_IDLE_DETECTION = r.SITE_SETTINGS.createChild('idleDetection'); r.SITE_SETTINGS_IMAGES = r.SITE_SETTINGS.createChild('images'); r.SITE_SETTINGS_MIXEDSCRIPT = r.SITE_SETTINGS.createChild('insecureContent');
diff --git a/chrome/browser/safe_browsing/BUILD.gn b/chrome/browser/safe_browsing/BUILD.gn index e4ddd14b..a34d83f 100644 --- a/chrome/browser/safe_browsing/BUILD.gn +++ b/chrome/browser/safe_browsing/BUILD.gn
@@ -100,6 +100,8 @@ "certificate_reporting_service_factory.h", "chrome_client_side_detection_host_delegate.cc", "chrome_client_side_detection_host_delegate.h", + "chrome_client_side_detection_service_delegate.cc", + "chrome_client_side_detection_service_delegate.h", "chrome_password_protection_service.cc", "chrome_password_protection_service.h", "chrome_password_protection_service_factory.cc", @@ -108,8 +110,6 @@ "chrome_safe_browsing_blocking_page_factory.h", "chrome_ui_manager_delegate.cc", "chrome_ui_manager_delegate.h", - "client_side_detection_service_delegate.cc", - "client_side_detection_service_delegate.h", "client_side_detection_service_factory.cc", "client_side_detection_service_factory.h", "delayed_warning_navigation_throttle.cc",
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_delegate.cc b/chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.cc similarity index 62% rename from chrome/browser/safe_browsing/client_side_detection_service_delegate.cc rename to chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.cc index 2234bd6..dcf5300 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_delegate.cc +++ b/chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.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/safe_browsing/client_side_detection_service_delegate.h" +#include "chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/policy/chrome_browser_policy_connector.h" @@ -14,21 +14,21 @@ namespace safe_browsing { -ClientSideDetectionServiceDelegate::ClientSideDetectionServiceDelegate( - Profile* profile) +ChromeClientSideDetectionServiceDelegate:: + ChromeClientSideDetectionServiceDelegate(Profile* profile) : profile_(profile) {} -ClientSideDetectionServiceDelegate::~ClientSideDetectionServiceDelegate() = - default; +ChromeClientSideDetectionServiceDelegate:: + ~ChromeClientSideDetectionServiceDelegate() = default; -PrefService* ClientSideDetectionServiceDelegate::GetPrefs() { +PrefService* ChromeClientSideDetectionServiceDelegate::GetPrefs() { if (profile_) { return profile_->GetPrefs(); } return nullptr; } scoped_refptr<network::SharedURLLoaderFactory> -ClientSideDetectionServiceDelegate::GetURLLoaderFactory() { +ChromeClientSideDetectionServiceDelegate::GetURLLoaderFactory() { if (profile_) { return profile_->GetURLLoaderFactory(); } @@ -36,7 +36,7 @@ } scoped_refptr<network::SharedURLLoaderFactory> -ClientSideDetectionServiceDelegate::GetSafeBrowsingURLLoaderFactory() { +ChromeClientSideDetectionServiceDelegate::GetSafeBrowsingURLLoaderFactory() { if (g_browser_process->safe_browsing_service()) { return g_browser_process->safe_browsing_service()->GetURLLoaderFactory( profile_); @@ -44,8 +44,9 @@ return nullptr; } -ChromeUserPopulation ClientSideDetectionServiceDelegate::GetUserPopulation() { - return ::safe_browsing::GetUserPopulation(profile_); +ChromeUserPopulation +ChromeClientSideDetectionServiceDelegate::GetUserPopulation() { + return ::safe_browsing::GetUserPopulationForProfile(profile_); } } // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_delegate.h b/chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h similarity index 63% rename from chrome/browser/safe_browsing/client_side_detection_service_delegate.h rename to chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h index d5df8da..ca5423f 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_delegate.h +++ b/chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.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_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ -#define CHROME_BROWSER_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#ifndef CHROME_BROWSER_SAFE_BROWSING_CHROME_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#define CHROME_BROWSER_SAFE_BROWSING_CHROME_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ #include "components/safe_browsing/content/browser/client_side_detection_service.h" @@ -13,11 +13,11 @@ // Delegate class which implements chrome specific bits for configuring // the ClientSideDetectionService class. -class ClientSideDetectionServiceDelegate +class ChromeClientSideDetectionServiceDelegate : public ClientSideDetectionService::Delegate { public: - explicit ClientSideDetectionServiceDelegate(Profile* profile); - ~ClientSideDetectionServiceDelegate() override; + explicit ChromeClientSideDetectionServiceDelegate(Profile* profile); + ~ChromeClientSideDetectionServiceDelegate() override; // ClientSideDetectionService::Delegate implementation. PrefService* GetPrefs() override; @@ -29,9 +29,9 @@ private: Profile* profile_; - DISALLOW_COPY_AND_ASSIGN(ClientSideDetectionServiceDelegate); + DISALLOW_COPY_AND_ASSIGN(ChromeClientSideDetectionServiceDelegate); }; } // namespace safe_browsing -#endif // CHROME_BROWSER_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#endif // CHROME_BROWSER_SAFE_BROWSING_CHROME_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_
diff --git a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_factory.cc b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_factory.cc index 269c800..08976941 100644 --- a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_factory.cc +++ b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_factory.cc
@@ -69,7 +69,7 @@ return new ChromeEnterpriseRealTimeUrlLookupService( network::SharedURLLoaderFactory::Create(std::move(url_loader_factory)), VerdictCacheManagerFactory::GetForProfile(profile), profile, - base::BindRepeating(&safe_browsing::GetUserPopulation, profile), + base::BindRepeating(&safe_browsing::GetUserPopulationForProfile, profile), enterprise_connectors::ConnectorsServiceFactory::GetForBrowserContext( profile), SafeBrowsingNavigationObserverManagerFactory::GetForBrowserContext(
diff --git a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_unittest.cc b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_unittest.cc index 6684c87..5b444cf 100644 --- a/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_unittest.cc +++ b/chrome/browser/safe_browsing/chrome_enterprise_url_lookup_service_unittest.cc
@@ -90,7 +90,8 @@ test_shared_loader_factory_, cache_manager_.get(), test_profile_.get(), base::BindRepeating( [](Profile* profile, syncer::TestSyncService* test_sync_service) { - ChromeUserPopulation population = GetUserPopulation(profile); + ChromeUserPopulation population = + GetUserPopulationForProfile(profile); population.set_is_history_sync_enabled( safe_browsing::SyncUtils::IsHistorySyncEnabled( test_sync_service));
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index 74e187b..14fe6ef 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -1572,7 +1572,7 @@ void ChromePasswordProtectionService::FillUserPopulation( LoginReputationClientRequest* request_proto) { - *request_proto->mutable_population() = GetUserPopulation(profile_); + *request_proto->mutable_population() = GetUserPopulationForProfile(profile_); } bool ChromePasswordProtectionService::IsPrimaryAccountSyncing() const {
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_browsertest.cc b/chrome/browser/safe_browsing/client_side_detection_service_browsertest.cc index d96a071a..f2928410 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_browsertest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_service_browsertest.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/safe_browsing/client_side_detection_service_delegate.h" +#include "chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h" #include "base/test/bind.h" #include "chrome/browser/profiles/profile.h"
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_factory.cc b/chrome/browser/safe_browsing/client_side_detection_service_factory.cc index 4b15c5f..91d4a16 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_factory.cc +++ b/chrome/browser/safe_browsing/client_side_detection_service_factory.cc
@@ -7,7 +7,7 @@ #include "base/command_line.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/safe_browsing/client_side_detection_service_delegate.h" +#include "chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h" #include "chrome/common/chrome_switches.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/safe_browsing/buildflags.h" @@ -55,7 +55,7 @@ Profile* profile = Profile::FromBrowserContext(context); return new ClientSideDetectionService( - std::make_unique<ClientSideDetectionServiceDelegate>(profile)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile)); } content::BrowserContext*
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc index 6952cad..9335468 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_service_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/safe_browsing/client_side_detection_service_delegate.h" +#include "chrome/browser/safe_browsing/chrome_client_side_detection_service_delegate.h" #include <stdint.h> @@ -211,7 +211,7 @@ TEST_F(ClientSideDetectionServiceTest, ServiceObjectDeletedBeforeCallbackDone) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); profile_->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, true); EXPECT_NE(csd_service_.get(), nullptr); // We delete the client-side detection service class even though the callbacks @@ -225,7 +225,7 @@ TEST_F(ClientSideDetectionServiceTest, SendClientReportPhishingRequest) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); csd_service_->SetURLLoaderFactoryForTesting(test_shared_loader_factory_); GURL url("http://a.com/"); @@ -284,7 +284,7 @@ SendClientReportPhishingRequestWithToken) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); csd_service_->SetURLLoaderFactoryForTesting(test_shared_loader_factory_); profile_->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, true); @@ -309,7 +309,7 @@ SendClientReportPhishingRequestWithoutToken) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); csd_service_->SetURLLoaderFactoryForTesting(test_shared_loader_factory_); profile_->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, true); @@ -332,7 +332,7 @@ TEST_F(ClientSideDetectionServiceTest, GetNumReportTest) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); base::Time now = base::Time::Now(); base::TimeDelta twenty_five_hours = base::TimeDelta::FromHours(25); @@ -348,7 +348,7 @@ TEST_F(ClientSideDetectionServiceTest, CacheTest) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); TestCache(); } @@ -356,7 +356,7 @@ TEST_F(ClientSideDetectionServiceTest, IsPrivateIPAddress) { SetModelFetchResponses(); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); EXPECT_TRUE(csd_service_->IsPrivateIPAddress("10.1.2.3")); EXPECT_TRUE(csd_service_->IsPrivateIPAddress("127.0.0.1")); @@ -383,7 +383,7 @@ false); profile_->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnhanced, false); csd_service_ = std::make_unique<ClientSideDetectionService>( - std::make_unique<ClientSideDetectionServiceDelegate>(profile_)); + std::make_unique<ChromeClientSideDetectionServiceDelegate>(profile_)); // Safe Browsing is not enabled. EXPECT_FALSE(csd_service_->enabled());
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_request.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_request.cc index 5b812cf..431403f 100644 --- a/chrome/browser/safe_browsing/download_protection/deep_scanning_request.cc +++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_request.cc
@@ -272,6 +272,10 @@ /* static */ absl::optional<enterprise_connectors::AnalysisSettings> DeepScanningRequest::ShouldUploadBinary(download::DownloadItem* item) { + // Files already on the disk shouldn't be uploaded for scanning. + if (item->GetURL().SchemeIsFile()) + return absl::nullopt; + auto* service = enterprise_connectors::ConnectorsServiceFactory::GetForBrowserContext( content::DownloadItemUtils::GetBrowserContext(item));
diff --git a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc index ac86a34..1ebb5900 100644 --- a/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc +++ b/chrome/browser/safe_browsing/download_protection/deep_scanning_request_unittest.cc
@@ -1352,6 +1352,34 @@ EXPECT_FALSE(settings().has_value()); } +TEST_F(DeepScanningRequestTest, ShouldUploadBinary_FileURLs) { + SetFeatures(/*enabled*/ {enterprise_connectors::kEnterpriseConnectorsEnabled}, + /*disabled*/ {}); + SetAnalysisConnector(profile_->GetPrefs(), + enterprise_connectors::FILE_DOWNLOADED, + kScanForDlpAndMalware); + + content::DownloadItemUtils::AttachInfo(&item_, profile_, nullptr); + + // Even if the policy indicates scanning should occur, file:/// URLs should + // never return settings. + GURL url_1("file:///a/path/to/a/file"); + EXPECT_CALL(item_, GetURL()).WillRepeatedly(ReturnRef(url_1)); + EXPECT_FALSE(settings().has_value()); + + GURL url_2("file:///file.txt"); + EXPECT_CALL(item_, GetURL()).WillRepeatedly(ReturnRef(url_2)); + EXPECT_FALSE(settings().has_value()); + + GURL url_3("file:///C:\\a\\path\\to\\a\\file"); + EXPECT_CALL(item_, GetURL()).WillRepeatedly(ReturnRef(url_3)); + EXPECT_FALSE(settings().has_value()); + + GURL url_4("file:///C:\\file.txt"); + EXPECT_CALL(item_, GetURL()).WillRepeatedly(ReturnRef(url_4)); + EXPECT_FALSE(settings().has_value()); +} + TEST_F(DeepScanningRequestTest, PopulatesRequest) { SetAnalysisConnector(profile_->GetPrefs(), enterprise_connectors::FILE_DOWNLOADED,
diff --git a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc index 8aa8288..35a5d7a 100644 --- a/chrome/browser/safe_browsing/download_protection/download_request_maker.cc +++ b/chrome/browser/safe_browsing/download_protection/download_request_maker.cc
@@ -156,7 +156,7 @@ profile && AdvancedProtectionStatusManagerFactory::GetForProfile(profile) ->IsUnderAdvancedProtection(); - *request_->mutable_population() = GetUserPopulation(profile); + *request_->mutable_population() = GetUserPopulationForProfile(profile); request_->set_request_ap_verdicts(is_under_advanced_protection); request_->set_locale(g_browser_process->GetApplicationLocale()); request_->set_file_basename(target_file_path_.BaseName().AsUTF8Unsafe());
diff --git a/chrome/browser/safe_browsing/url_lookup_service_factory.cc b/chrome/browser/safe_browsing/url_lookup_service_factory.cc index 30a1de2b..d817446 100644 --- a/chrome/browser/safe_browsing/url_lookup_service_factory.cc +++ b/chrome/browser/safe_browsing/url_lookup_service_factory.cc
@@ -70,7 +70,7 @@ return new RealTimeUrlLookupService( network::SharedURLLoaderFactory::Create(std::move(url_loader_factory)), VerdictCacheManagerFactory::GetForProfile(profile), - base::BindRepeating(&safe_browsing::GetUserPopulation, profile), + base::BindRepeating(&safe_browsing::GetUserPopulationForProfile, profile), profile->GetPrefs(), std::make_unique<SafeBrowsingPrimaryAccountTokenFetcher>( IdentityManagerFactory::GetForProfile(profile)),
diff --git a/chrome/browser/safe_browsing/user_population.cc b/chrome/browser/safe_browsing/user_population.cc index ce244206..ba7719b 100644 --- a/chrome/browser/safe_browsing/user_population.cc +++ b/chrome/browser/safe_browsing/user_population.cc
@@ -23,7 +23,7 @@ namespace safe_browsing { -ChromeUserPopulation GetUserPopulation(Profile* profile) { +ChromeUserPopulation GetUserPopulationForProfile(Profile* profile) { ChromeUserPopulation population; // |profile| may be null in tests.
diff --git a/chrome/browser/safe_browsing/user_population.h b/chrome/browser/safe_browsing/user_population.h index 0f09b111..3bb60e9 100644 --- a/chrome/browser/safe_browsing/user_population.h +++ b/chrome/browser/safe_browsing/user_population.h
@@ -11,7 +11,7 @@ namespace safe_browsing { // Creates a ChromeUserPopulation proto for the given |profile|. -ChromeUserPopulation GetUserPopulation(Profile* profile); +ChromeUserPopulation GetUserPopulationForProfile(Profile* profile); } // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/user_population_unittest.cc b/chrome/browser/safe_browsing/user_population_unittest.cc index c7214d7c..705def19 100644 --- a/chrome/browser/safe_browsing/user_population_unittest.cc +++ b/chrome/browser/safe_browsing/user_population_unittest.cc
@@ -36,19 +36,19 @@ TestingProfile profile; SetSafeBrowsingState(profile.GetPrefs(), SafeBrowsingState::STANDARD_PROTECTION); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_EQ(population.user_population(), ChromeUserPopulation::SAFE_BROWSING); SetSafeBrowsingState(profile.GetPrefs(), SafeBrowsingState::ENHANCED_PROTECTION); - population = GetUserPopulation(&profile); + population = GetUserPopulationForProfile(&profile); EXPECT_EQ(population.user_population(), ChromeUserPopulation::ENHANCED_PROTECTION); SetSafeBrowsingState(profile.GetPrefs(), SafeBrowsingState::STANDARD_PROTECTION); SetExtendedReportingPrefForTests(profile.GetPrefs(), true); - population = GetUserPopulation(&profile); + population = GetUserPopulationForProfile(&profile); EXPECT_EQ(population.user_population(), ChromeUserPopulation::EXTENDED_REPORTING); } @@ -58,25 +58,25 @@ TestingProfile profile; profile.GetPrefs()->SetBoolean( unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled, false); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_mbb_enabled()); profile.GetPrefs()->SetBoolean( unified_consent::prefs::kUrlKeyedAnonymizedDataCollectionEnabled, true); - population = GetUserPopulation(&profile); + population = GetUserPopulationForProfile(&profile); EXPECT_TRUE(population.is_mbb_enabled()); } TEST(GetUserPopulationTest, PopulatesIncognito) { content::BrowserTaskEnvironment task_environment; TestingProfile profile; - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_incognito()); Profile* incognito_profile = profile.GetOffTheRecordProfile( Profile::OTRProfileID::CreateUniqueForTesting(), /*create_if_needed=*/true); - population = GetUserPopulation(incognito_profile); + population = GetUserPopulationForProfile(incognito_profile); EXPECT_TRUE(population.is_incognito()); } @@ -93,7 +93,7 @@ sync_service->SetLocalSyncEnabled(false); sync_service->SetActiveDataTypes(syncer::ModelTypeSet::All()); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_TRUE(population.is_history_sync_enabled()); } @@ -103,7 +103,7 @@ sync_service->SetLocalSyncEnabled(false); sync_service->SetActiveDataTypes(syncer::ModelTypeSet::All()); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_history_sync_enabled()); } @@ -113,7 +113,7 @@ sync_service->SetLocalSyncEnabled(true); sync_service->SetActiveDataTypes(syncer::ModelTypeSet::All()); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_history_sync_enabled()); } @@ -123,7 +123,7 @@ sync_service->SetLocalSyncEnabled(false); sync_service->SetActiveDataTypes(syncer::ModelTypeSet()); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_history_sync_enabled()); } } @@ -135,12 +135,12 @@ AdvancedProtectionStatusManagerFactory::GetForProfile(&profile) ->SetAdvancedProtectionStatusForTesting(true); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_TRUE(population.is_under_advanced_protection()); AdvancedProtectionStatusManagerFactory::GetForProfile(&profile) ->SetAdvancedProtectionStatusForTesting(false); - population = GetUserPopulation(&profile); + population = GetUserPopulationForProfile(&profile); EXPECT_FALSE(population.is_under_advanced_protection()); } #endif @@ -154,7 +154,7 @@ feature_list.InitWithFeatures( /* enabled_features = */ {}, /* disabled_features = */ {kBetterTelemetryAcrossReports}); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_EQ(population.user_agent(), ""); } { @@ -165,7 +165,7 @@ std::string user_agent = version_info::GetProductNameAndVersionForUserAgent() + "/" + version_info::GetOSType(); - ChromeUserPopulation population = GetUserPopulation(&profile); + ChromeUserPopulation population = GetUserPopulationForProfile(&profile); EXPECT_EQ(population.user_agent(), user_agent); } }
diff --git a/chrome/browser/sessions/session_restore_browsertest_chromeos.cc b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc index 1ef70743..9702718 100644 --- a/chrome/browser/sessions/session_restore_browsertest_chromeos.cc +++ b/chrome/browser/sessions/session_restore_browsertest_chromeos.cc
@@ -19,9 +19,9 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h" #include "chrome/browser/web_applications/test/web_app_test.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index ae53445..dc996b5 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc
@@ -13,12 +13,16 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/containers/contains.h" +#include "base/debug/alias.h" +#include "base/debug/dump_without_crashing.h" #include "base/metrics/histogram_functions.h" +#include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/apps/app_service/launch_utils.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/buildflags.h" #include "chrome/browser/lifetime/application_lifetime.h" +#include "chrome/browser/lifetime/browser_shutdown.h" #include "chrome/browser/prefs/session_startup_pref.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_entry.h" @@ -37,7 +41,7 @@ #include "chrome/browser/ui/startup/launch_mode_recorder.h" #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/sessions/content/content_serialized_navigation_builder.h" #include "components/sessions/content/session_tab_helper.h" #include "components/sessions/core/command_storage_manager.h" @@ -64,10 +68,53 @@ using sessions::ContentSerializedNavigationBuilder; using sessions::SerializedNavigationEntry; +namespace { + +const void* const kInstanceTrackerKey = &kInstanceTrackerKey; + +// An instance of this class is created pre-profile. It is used to track how +// many SessionServices have been created. +class InstanceTracker : public base::SupportsUserData::Data { + public: + InstanceTracker() = default; + InstanceTracker(const InstanceTracker&) = delete; + InstanceTracker& operator=(const InstanceTracker&) = delete; + ~InstanceTracker() override = default; + + // Registers a new instance. Returns true is this is the first time called + // with the specified profile. + static bool RegisterNewSessionService(Profile* profile) { + InstanceTracker* tracker = static_cast<InstanceTracker*>( + profile->GetUserData(kInstanceTrackerKey)); + if (!tracker) { + profile->SetUserData(kInstanceTrackerKey, + std::make_unique<InstanceTracker>()); + tracker = static_cast<InstanceTracker*>( + profile->GetUserData(kInstanceTrackerKey)); + } + return tracker->IncrementSessionServiceCount(); + } + + private: + bool IncrementSessionServiceCount() { + const bool is_first = session_service_count_ == 0; + ++session_service_count_; + return is_first; + } + + int session_service_count_ = 0; +}; + +} // namespace + SessionService::SessionService(Profile* profile) : SessionServiceBase( profile, - SessionServiceBase::SessionServiceType::kSessionRestore) { + SessionServiceBase::SessionServiceType::kSessionRestore), + is_first_session_service_( + InstanceTracker::RegisterNewSessionService(profile)) { + if (is_first_session_service_) + LogSessionServiceStartEvent(profile, HasPendingUncleanExit(profile)); closing_all_browsers_subscription_ = chrome::AddClosingAllBrowsersCallback( base::BindRepeating(&SessionService::OnClosingAllBrowsersChanged, base::Unretained(this))); @@ -387,6 +434,24 @@ return Browser::Type::TYPE_NORMAL; } +void SessionService::DidScheduleCommand() { + if (did_schedule_command_) + return; + did_schedule_command_ = true; + if (is_first_session_service_) + return; + + // TODO(https://crbug.com/1245816): for debugging, remove once tracked down + // source of problem. + // A command has been scheduled for a SessionService other than the first. + // Recreating the SessionService happens if shutdown is canceled, which is + // valid, but bugs seem to indicate we are getting here in scenarios we don't + // expect. This debug code is attempting to identify how that is happening. + const bool shutdown_started = browser_shutdown::HasShutdownStarted(); + base::debug::Alias(&shutdown_started); + base::debug::DumpWithoutCrashing(); +} + bool SessionService::ShouldRestoreWindowOfType( sessions::SessionWindow::WindowType window_type) const { // TYPE_APP and TYPE_APP_POPUP are handled by app_session_service. @@ -577,7 +642,8 @@ } } did_log_exit_ = true; - LogSessionServiceExitEvent(profile(), browser_count, tab_count); + LogSessionServiceExitEvent(profile(), browser_count, tab_count, + is_first_session_service_, did_schedule_command_); } void SessionService::RemoveExitEvent() {
diff --git a/chrome/browser/sessions/session_service.h b/chrome/browser/sessions/session_service.h index 88c4e08c..0b28383e 100644 --- a/chrome/browser/sessions/session_service.h +++ b/chrome/browser/sessions/session_service.h
@@ -130,6 +130,7 @@ protected: Browser::Type GetDesiredBrowserTypeForWebContents() override; + void DidScheduleCommand() override; private: // Allow tests to access our innards for testing purposes. @@ -241,6 +242,14 @@ int unrecoverable_write_error_count_ = 0; + // True if this is the first SessionService created for the Profile. A value + // of false means the first SessionService was destroyed and a new one + // created. + const bool is_first_session_service_; + + // Set to true once a valid command has been scheduled. + bool did_schedule_command_ = false; + base::WeakPtrFactory<SessionService> weak_factory_{this}; DISALLOW_COPY_AND_ASSIGN(SessionService);
diff --git a/chrome/browser/sessions/session_service_base.cc b/chrome/browser/sessions/session_service_base.cc index ee168a5..120f7c8 100644 --- a/chrome/browser/sessions/session_service_base.cc +++ b/chrome/browser/sessions/session_service_base.cc
@@ -642,6 +642,7 @@ !is_closing_command) { ScheduleResetCommands(); } + DidScheduleCommand(); } bool SessionServiceBase::ShouldTrackChangesToWindow(
diff --git a/chrome/browser/sessions/session_service_base.h b/chrome/browser/sessions/session_service_base.h index a425a31..b7673d5 100644 --- a/chrome/browser/sessions/session_service_base.h +++ b/chrome/browser/sessions/session_service_base.h
@@ -246,6 +246,8 @@ // Schedules the specified command. void ScheduleCommand(std::unique_ptr<sessions::SessionCommand> command); + virtual void DidScheduleCommand() {} + // Returns true if changes to tabs in the specified window should be tracked. bool ShouldTrackChangesToWindow(const SessionID& window_id) const;
diff --git a/chrome/browser/sessions/session_service_log.cc b/chrome/browser/sessions/session_service_log.cc index 615698e6..d5d0b7ac 100644 --- a/chrome/browser/sessions/session_service_log.cc +++ b/chrome/browser/sessions/session_service_log.cc
@@ -22,6 +22,8 @@ constexpr char kRestoreEventErroredReadingKey[] = "errored_reading"; constexpr char kExitEventWindowCountKey[] = "window_count"; constexpr char kExitEventTabCountKey[] = "tab_count"; +constexpr char kExitEventIsFirstSessionServiceKey[] = "first_session_service"; +constexpr char kExitEventDidScheduleCommandKey[] = "did_schedule_command"; constexpr char kWriteErrorEventErrorCountKey[] = "error_count"; constexpr char kWriteErrorEventUnrecoverableErrorCountKey[] = "unrecoverable_error_count"; @@ -54,6 +56,10 @@ event.data.exit.window_count); serialized_event.SetIntKey(kExitEventTabCountKey, event.data.exit.tab_count); + serialized_event.SetBoolKey(kExitEventIsFirstSessionServiceKey, + event.data.exit.is_first_session_service); + serialized_event.SetBoolKey(kExitEventDidScheduleCommandKey, + event.data.exit.did_schedule_command); break; case SessionServiceEventLogType::kWriteError: serialized_event.SetIntKey(kWriteErrorEventErrorCountKey, @@ -125,6 +131,17 @@ if (!tab_count) return false; event.data.exit.tab_count = *tab_count; + + // The remaining values were added later on. Don't error if not found. + auto is_first_session_service = + serialized_event.FindBoolKey(kExitEventIsFirstSessionServiceKey); + event.data.exit.is_first_session_service = + !is_first_session_service || *is_first_session_service; + + auto did_schedule_command = + serialized_event.FindBoolKey(kExitEventDidScheduleCommandKey); + event.data.exit.did_schedule_command = + !did_schedule_command || *did_schedule_command; break; } case SessionServiceEventLogType::kWriteError: { @@ -182,12 +199,16 @@ void LogSessionServiceExitEvent(Profile* profile, int window_count, - int tab_count) { + int tab_count, + bool is_first_session_service, + bool did_schedule_command) { SessionServiceEvent event; event.type = SessionServiceEventLogType::kExit; event.time = base::Time::Now(); event.data.exit.window_count = window_count; event.data.exit.tab_count = tab_count; + event.data.exit.is_first_session_service = is_first_session_service; + event.data.exit.did_schedule_command = did_schedule_command; LogSessionServiceEvent(profile, event); }
diff --git a/chrome/browser/sessions/session_service_log.h b/chrome/browser/sessions/session_service_log.h index afa8d29..9476f27 100644 --- a/chrome/browser/sessions/session_service_log.h +++ b/chrome/browser/sessions/session_service_log.h
@@ -66,6 +66,13 @@ // The total number of tabs open at the time of exit. int tab_count; + + // True if this the first SessionService created for the Profile. False + // means the first SessionService was destroyed and a new one created. + bool is_first_session_service; + + // True if at least one command was scheduled + bool did_schedule_command; }; struct WriteErrorData { @@ -97,7 +104,9 @@ void LogSessionServiceStartEvent(Profile* profile, bool after_crash); void LogSessionServiceExitEvent(Profile* profile, int window_count, - int tab_count); + int tab_count, + bool is_first_session_service, + bool did_schedule_command); void LogSessionServiceRestoreEvent(Profile* profile, int window_count, int tab_count,
diff --git a/chrome/browser/sessions/session_service_log_unittest.cc b/chrome/browser/sessions/session_service_log_unittest.cc index eaf26b2..0f4078f 100644 --- a/chrome/browser/sessions/session_service_log_unittest.cc +++ b/chrome/browser/sessions/session_service_log_unittest.cc
@@ -46,7 +46,7 @@ TEST_F(SessionServiceLogTest, LogSessionServiceExitEvent) { const base::Time start_time = base::Time::Now(); - LogSessionServiceExitEvent(&testing_profile_, 1, 2); + LogSessionServiceExitEvent(&testing_profile_, 1, 2, true, false); auto events = GetSessionServiceEvents(&testing_profile_); ASSERT_EQ(1u, events.size()); auto restored_event = *events.begin(); @@ -54,6 +54,22 @@ EXPECT_LE(start_time, restored_event.time); EXPECT_EQ(1, restored_event.data.exit.window_count); EXPECT_EQ(2, restored_event.data.exit.tab_count); + EXPECT_TRUE(restored_event.data.exit.is_first_session_service); + EXPECT_FALSE(restored_event.data.exit.did_schedule_command); +} + +TEST_F(SessionServiceLogTest, LogSessionServiceExitEvent2) { + const base::Time start_time = base::Time::Now(); + LogSessionServiceExitEvent(&testing_profile_, 1, 2, false, true); + auto events = GetSessionServiceEvents(&testing_profile_); + ASSERT_EQ(1u, events.size()); + auto restored_event = *events.begin(); + EXPECT_EQ(SessionServiceEventLogType::kExit, restored_event.type); + EXPECT_LE(start_time, restored_event.time); + EXPECT_EQ(1, restored_event.data.exit.window_count); + EXPECT_EQ(2, restored_event.data.exit.tab_count); + EXPECT_FALSE(restored_event.data.exit.is_first_session_service); + EXPECT_TRUE(restored_event.data.exit.did_schedule_command); } TEST_F(SessionServiceLogTest, LogSessionServiceRestoreEvent) { @@ -108,9 +124,9 @@ } TEST_F(SessionServiceLogTest, RemoveLastSessionServiceEventOfType) { - LogSessionServiceExitEvent(&testing_profile_, 1, 2); + LogSessionServiceExitEvent(&testing_profile_, 1, 2, true, true); LogSessionServiceWriteErrorEvent(&testing_profile_, false); - LogSessionServiceExitEvent(&testing_profile_, 2, 3); + LogSessionServiceExitEvent(&testing_profile_, 2, 3, true, true); LogSessionServiceWriteErrorEvent(&testing_profile_, false); RemoveLastSessionServiceEventOfType(&testing_profile_, SessionServiceEventLogType::kExit);
diff --git a/chrome/browser/sessions/tab_restore_service_browsertest.cc b/chrome/browser/sessions/tab_restore_service_browsertest.cc index d04aa82..6396214c 100644 --- a/chrome/browser/sessions/tab_restore_service_browsertest.cc +++ b/chrome/browser/sessions/tab_restore_service_browsertest.cc
@@ -13,8 +13,8 @@ #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_installation.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java index e8b0e898..a92967a 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/send_tab_to_self/DevicePickerBottomSheetContent.java
@@ -5,7 +5,13 @@ package org.chromium.chrome.browser.share.send_tab_to_self; import android.content.Context; +import android.content.Intent; import android.content.res.Resources; +import android.graphics.Bitmap; +import android.net.Uri; +import android.provider.Browser; +import android.text.SpannableString; +import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -15,13 +21,24 @@ import android.widget.TextView; import org.chromium.base.ContextUtils; +import org.chromium.base.IntentUtils; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; +import org.chromium.chrome.browser.browserservices.intents.WebappConstants; +import org.chromium.chrome.browser.document.ChromeLauncherActivity; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.settings.SettingsLauncher; +import org.chromium.components.browser_ui.widget.RoundedCornerImageView; +import org.chromium.components.embedder_support.util.UrlConstants; +import org.chromium.components.signin.base.AccountInfo; +import org.chromium.components.signin.identitymanager.ConsentLevel; +import org.chromium.components.signin.identitymanager.IdentityManager; +import org.chromium.ui.text.NoUnderlineClickableSpan; +import org.chromium.ui.text.SpanApplier; import org.chromium.ui.widget.ButtonCompat; import org.chromium.ui.widget.Toast; @@ -47,6 +64,8 @@ private final SettingsLauncher mSettingsLauncher; private final boolean mIsSyncEnabled; + private static final int ACCOUNT_AVATAR_SIZE_DP = 24; + public DevicePickerBottomSheetContent(Context context, String url, String title, long navigationTime, BottomSheetController controller, SettingsLauncher settingsLauncher, boolean isSyncEnabled) { @@ -81,7 +100,10 @@ R.layout.send_tab_to_self_feature_unavailable_prompt, null); mToolbarView.setVisibility(View.GONE); enableSettingsButton(); - } else if (targetDeviceList.isEmpty()) { + return; + } + + if (targetDeviceList.isEmpty()) { RecordUserAction.record("SharingHubAndroid.SendTabToSelf.NoTargetDevices"); mContentView = (ViewGroup) LayoutInflater.from(mContext).inflate( R.layout.send_tab_to_self_feature_unavailable_prompt, null); @@ -89,13 +111,59 @@ TextView textView = mContentView.findViewById(R.id.enable_sync_text_field); textView.setText(mContext.getResources().getString( R.string.sharing_hub_no_devices_available_text)); - } else { - mContentView = (ViewGroup) LayoutInflater.from(mContext).inflate( - R.layout.send_tab_to_self_device_picker_list, null); - ListView listView = mContentView.findViewById(R.id.device_picker_list); - listView.setAdapter(mAdapter); - listView.setOnItemClickListener(this); + return; } + + mContentView = (ViewGroup) LayoutInflater.from(mContext).inflate( + R.layout.send_tab_to_self_device_picker_list, null); + ListView listView = mContentView.findViewById(R.id.device_picker_list); + listView.setAdapter(mAdapter); + listView.setOnItemClickListener(this); + + if (ChromeFeatureList.isEnabled(ChromeFeatureList.SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK)) { + createManageDevicesLink(listView); + } + } + + private void createManageDevicesLink(ListView deviceListView) { + ViewGroup containerView = (ViewGroup) LayoutInflater.from(mContext).inflate( + R.layout.send_tab_to_self_manage_devices_link, null); + deviceListView.addFooterView(containerView); + + AccountInfo account = getSharingAccountInfo(); + assert account != null : "The user must be signed in to share a tab"; + + RoundedCornerImageView avatarView = containerView.findViewById(R.id.account_avatar); + avatarView.setImageBitmap(Bitmap.createScaledBitmap( + account.getAccountImage(), ACCOUNT_AVATAR_SIZE_DP, ACCOUNT_AVATAR_SIZE_DP, false)); + avatarView.setRoundedCorners(ACCOUNT_AVATAR_SIZE_DP / 2, ACCOUNT_AVATAR_SIZE_DP / 2, + ACCOUNT_AVATAR_SIZE_DP / 2, ACCOUNT_AVATAR_SIZE_DP / 2); + + Resources resources = mContext.getResources(); + // The link is opened in a new tab to avoid exiting the current page, which the user + // possibly wants to share (maybe they just clicked "Manage devices" by mistake). + SpannableString linkText = SpanApplier.applySpans( + resources.getString( + R.string.send_tab_to_self_manage_devices_link, account.getEmail()), + new SpanApplier.SpanInfo("<link>", "</link>", + new NoUnderlineClickableSpan( + resources, this::openManageDevicesPageInNewTab))); + TextView linkView = containerView.findViewById(R.id.manage_devices_link); + linkView.setText(linkText); + linkView.setMovementMethod(LinkMovementMethod.getInstance()); + } + + private void openManageDevicesPageInNewTab(View unused) { + Intent intent = + new Intent() + .setAction(Intent.ACTION_VIEW) + .setData(Uri.parse(UrlConstants.GOOGLE_ACCOUNT_DEVICE_ACTIVITY_URL)) + .setClass(mContext, ChromeLauncherActivity.class) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + .putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName()) + .putExtra(WebappConstants.REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, true); + IntentUtils.addTrustedIntentExtras(intent); + mContext.startActivity(intent); } private void enableSettingsButton() { @@ -204,4 +272,11 @@ mController.hideContent(this, true); } + + private static AccountInfo getSharingAccountInfo() { + IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager( + Profile.getLastUsedRegularProfile()); + return identityManager.findExtendedAccountInfoByEmailAddress( + identityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN).getEmail()); + } }
diff --git a/chrome/browser/shell_integration_linux_unittest.cc b/chrome/browser/shell_integration_linux_unittest.cc index 1a9cc47..89ea7bd 100644 --- a/chrome/browser/shell_integration_linux_unittest.cc +++ b/chrome/browser/shell_integration_linux_unittest.cc
@@ -23,9 +23,9 @@ #include "base/strings/utf_string_conversions.h" #include "base/test/scoped_path_override.h" #include "build/branding_buildflags.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_app_shortcut.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_constants.h" #include "components/services/app_service/public/cpp/file_handler.h" #include "content/public/test/browser_task_environment.h"
diff --git a/chrome/browser/shell_integration_win.cc b/chrome/browser/shell_integration_win.cc index cb817c7..fc1687d 100644 --- a/chrome/browser/shell_integration_win.cc +++ b/chrome/browser/shell_integration_win.cc
@@ -44,8 +44,8 @@ #include "base/win/windows_version.h" #include "chrome/browser/policy/policy_path_parser.h" #include "chrome/browser/shell_integration.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_win.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/win/settings_app_monitor.h" #include "chrome/browser/win/util_win_service.h" #include "chrome/common/chrome_constants.h"
diff --git a/chrome/browser/shell_integration_win_unittest.cc b/chrome/browser/shell_integration_win_unittest.cc index 35ca0fee..71e9559 100644 --- a/chrome/browser/shell_integration_win_unittest.cc +++ b/chrome/browser/shell_integration_win_unittest.cc
@@ -19,8 +19,8 @@ #include "base/test/test_shortcut_win.h" #include "base/win/scoped_com_initializer.h" #include "chrome/browser/shell_integration.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_win.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths_internal.h" #include "chrome/install_static/install_util.h"
diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheRenderTest.java b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheRenderTest.java index 6bfb9c4..f832ae2d 100644 --- a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheRenderTest.java +++ b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheRenderTest.java
@@ -46,11 +46,9 @@ import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.JniMocker; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; import org.chromium.chrome.test.DummyUiChromeActivityTestCase; import org.chromium.chrome.test.util.ChromeRenderTestRule; -import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.components.signin.base.AccountInfo; import org.chromium.components.signin.base.CoreAccountId; @@ -70,7 +68,6 @@ */ @RunWith(ParameterizedRunner.class) @UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) -@Features.EnableFeatures({ChromeFeatureList.DEPRECATE_MENAGERIE_API}) @Batch(ProfileDataCacheRenderTest.PROFILE_DATA_BATCH_NAME) public class ProfileDataCacheRenderTest extends DummyUiChromeActivityTestCase { public static final String PROFILE_DATA_BATCH_NAME = "profile_data"; @@ -93,9 +90,6 @@ ChromeRenderTestRule.Builder.withPublicCorpus().build(); @Rule - public final Features.JUnitProcessor mProcessor = new Features.JUnitProcessor(); - - @Rule public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(); @Rule
diff --git a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheWithBadgeRenderTest.java b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheWithBadgeRenderTest.java index 13a6f24a..becb30f 100644 --- a/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheWithBadgeRenderTest.java +++ b/chrome/browser/signin/services/android/java/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheWithBadgeRenderTest.java
@@ -21,20 +21,14 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; -import org.mockito.quality.Strictness; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CriteriaHelper; import org.chromium.base.test.util.Feature; import org.chromium.chrome.R; -import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.DummyUiChromeActivityTestCase; import org.chromium.chrome.test.util.ChromeRenderTestRule; -import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.components.signin.test.util.FakeAccountInfoService; import org.chromium.content_public.browser.test.util.TestThreadUtils; @@ -48,7 +42,6 @@ */ @RunWith(ChromeJUnit4ClassRunner.class) @Batch(ProfileDataCacheRenderTest.PROFILE_DATA_BATCH_NAME) -@Features.EnableFeatures({ChromeFeatureList.DEPRECATE_MENAGERIE_API}) public class ProfileDataCacheWithBadgeRenderTest extends DummyUiChromeActivityTestCase { private static final String TEST_ACCOUNT_NAME = "test@example.com"; @@ -57,18 +50,9 @@ ChromeRenderTestRule.Builder.withPublicCorpus().build(); @Rule - public final Features.JUnitProcessor mProcessor = new Features.JUnitProcessor(); - - @Rule public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(new FakeAccountInfoService()); - @Rule - public final MockitoRule mMockitoRule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS); - - @Mock - private ProfileDataCache.Observer mObserver; - private FrameLayout mContentView; private ImageView mImageView; private ProfileDataCache mProfileDataCache;
diff --git a/chrome/browser/signin/services/android/junit/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheUnitTest.java b/chrome/browser/signin/services/android/junit/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheUnitTest.java index 710e882..d96117d 100644 --- a/chrome/browser/signin/services/android/junit/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheUnitTest.java +++ b/chrome/browser/signin/services/android/junit/src/org/chromium/chrome/browser/signin/services/ProfileDataCacheUnitTest.java
@@ -18,8 +18,6 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; -import org.chromium.chrome.browser.flags.ChromeFeatureList; -import org.chromium.chrome.test.util.browser.Features; import org.chromium.chrome.test.util.browser.signin.AccountManagerTestRule; import org.chromium.components.signin.base.AccountInfo; import org.chromium.components.signin.base.CoreAccountId; @@ -32,7 +30,6 @@ * Unit tests for {@link ProfileDataCache} */ @RunWith(BaseRobolectricTestRunner.class) -@Features.EnableFeatures({ChromeFeatureList.DEPRECATE_MENAGERIE_API}) public class ProfileDataCacheUnitTest { private static final long NATIVE_IDENTITY_MANAGER = 10001L; private static final String ACCOUNT_EMAIL = "test@gmail.com"; @@ -44,9 +41,6 @@ public final JniMocker mocker = new JniMocker(); @Rule - public final Features.JUnitProcessor processor = new Features.JUnitProcessor(); - - @Rule public final AccountManagerTestRule mAccountManagerTestRule = new AccountManagerTestRule(); @Mock
diff --git a/chrome/browser/signin/ui/android/java/res/layout/signin_first_run_view.xml b/chrome/browser/signin/ui/android/java/res/layout/signin_first_run_view.xml index b1b392a6..c6dfc026 100644 --- a/chrome/browser/signin/ui/android/java/res/layout/signin_first_run_view.xml +++ b/chrome/browser/signin/ui/android/java/res/layout/signin_first_run_view.xml
@@ -59,11 +59,7 @@ <include android:id="@+id/signin_fre_continue_button" - layout="@layout/account_picker_bottom_sheet_continue_button" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginStart="24dp" - android:layout_marginEnd="24dp" /> + layout="@layout/account_picker_bottom_sheet_continue_button" /> <org.chromium.ui.widget.ButtonCompat android:id="@+id/signin_fre_dismiss_button" @@ -78,12 +74,13 @@ <org.chromium.ui.widget.TextViewWithLeading android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="12dp" android:layout_marginStart="24dp" android:layout_marginEnd="24dp" - android:layout_marginBottom="8dp" + android:layout_marginBottom="24dp" android:gravity="center_horizontal" - android:textAppearance="@style/TextAppearance.TextMedium.Secondary" + android:textAppearance="@style/TextAppearance.TextSmall.Secondary" android:text="@string/signin_account_picker_bottom_sheet_subtitle" - app:leading="@dimen/text_size_medium_leading" /> + app:leading="@dimen/text_size_small_leading" /> </LinearLayout> </RelativeLayout> \ No newline at end of file
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc index fd64763..afd2c4c4 100644 --- a/chrome/browser/sync/chrome_sync_client.cc +++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -651,7 +651,10 @@ ->GetControllerDelegate(); #if BUILDFLAG(ENABLE_EXTENSIONS) case syncer::WEB_APPS: { - auto* provider = web_app::WebAppProvider::GetDeprecated(profile_); + auto* provider = web_app::WebAppProvider::GetForWebApps(profile_); + + // CreateWebAppsModelTypeController(), and therefore this code, should + // never be called when GetForWebApps() returns nullptr. DCHECK(provider); return provider->sync_bridge()
diff --git a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc index b5f51c1..07fa3c0 100644 --- a/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_web_apps_sync_test.cc
@@ -6,8 +6,8 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/sync/test/integration/apps_helper.h" #include "chrome/browser/sync/test/integration/sync_test.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_proto_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc b/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc index 15f93b9..03d3d99 100644 --- a/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_web_apps_sync_test.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" @@ -24,6 +23,7 @@ #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index 6c97075..25dfbeb 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -281,9 +281,6 @@ <message name="IDS_PREFS_MANAGE_SYNC_SETTINGS_CONTENT_DESCRIPTION" is_accessibility_with_no_ui="true" desc="The accessibility text to read when the 'Manage Sync Settings' page is opened from the sign-in page. This text is attached to the 'Navigate Up' button shown at the top of the screen. The first two sentences describe the screen that is currently shown to the user, while 'Navigate up' is a description for the button this text is attached to. 'Navigate up' should match TC ID 6794660482873516081."> You are currently customizing your Sync settings. To finish turning on sync, tap the Confirm button near the bottom of the screen. Navigate up </message> - <message name="IDS_SIGNIN_PREF_DISALLOWED_TITLE" desc="Title for the signin entry in Settings when signin is disallowed."> - Not signed in - </message> <message name="IDS_SIGNIN_PREF_SUMMARY" desc="Summary for the entry in Settings to sign in to Chrome, explaining benefits of signing in."> Sync and personalize across devices </message> @@ -741,6 +738,9 @@ Touch & hold any word to search. To refine your search, select more or fewer words. To edit your search, open the panel, tap the icon to open in a new tab, and make your changes in the search box. </message> + <message name="IDS_CONTEXTUAL_SEARCH_DESCRIPTION_REVISED" desc="Description for Contextual Search preference"> + Learn about a topic without leaving the page. Select one or more words on the page to search for them. To edit your search, look at the results and open them in a new tab. + </message> <message name="IDS_CONTEXTUAL_SEARCH_SHORT_DESCRIPTION" desc="A promo message shown to users with Touch to Search to explain the new behavior and provide an option to opt in or out"> Touch to Search sends the selected word and the current page as context to Google Search. You can turn it off in <ph name="BEGIN_LINK"><link></ph>Settings<ph name="END_LINK"></link></ph>. </message> @@ -772,7 +772,7 @@ See better results </message> <message name="IDS_CONTEXTUAL_SEARCH_SEE_BETTER_RESULTS_SUMMARY" desc="Summary for the see better results switch in Contextual Search preference."> - Let Google also also consider some of the page’s text + Let Google also consider some of the page’s text </message> <message name="IDS_DO_NOT_TRACK_TITLE" desc="Title for 'Do Not Track' preference"> “Do Not Track” @@ -4307,6 +4307,10 @@ <message name="IDS_SEND_TAB_TO_SELF_V2_TOAST" desc="Toast message shown after a device is selected from the device picker."> Page sent. To see it, open Chrome on your <ph name="device_type">%1$s<ex>phone</ex></ph> </message> + <message name="IDS_SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK" desc="Text with a link to a page where the user can manage the devices they can share a tab to."> + <ph name="BEGIN_LINK"><link></ph>Your devices<ph name="END_LINK"></link></ph> · <ph name="EMAIL">%1$s<ex>foo@gmail.com</ex></ph> + </message> + <!-- Sharing --> <message name="IDS_SHARING_SENDING_NOTIFICATION_TITLE" desc="Title text displayed in a sharing sending notification.">
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_DESCRIPTION_REVISED.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_DESCRIPTION_REVISED.png.sha1 new file mode 100644 index 0000000..2f810698 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_DESCRIPTION_REVISED.png.sha1
@@ -0,0 +1 @@ +165b8646a0f42ae5a12f89ad2685f7fccffeae84 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_SEE_BETTER_RESULTS_SUMMARY.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_SEE_BETTER_RESULTS_SUMMARY.png.sha1 index 51006b1..2f810698 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_SEE_BETTER_RESULTS_SUMMARY.png.sha1 +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_CONTEXTUAL_SEARCH_SEE_BETTER_RESULTS_SUMMARY.png.sha1
@@ -1 +1 @@ -c4edee7a48fc45d96fd547f85e0de802713c3cae \ No newline at end of file +165b8646a0f42ae5a12f89ad2685f7fccffeae84 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK.png.sha1 new file mode 100644 index 0000000..0d9aed75 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SEND_TAB_TO_SELF_MANAGE_DEVICES_LINK.png.sha1
@@ -0,0 +1 @@ +2a69abc115dc3dc021aca4e58ad82cc6611dcec1 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_PREF_DISALLOWED_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_PREF_DISALLOWED_TITLE.png.sha1 deleted file mode 100644 index 1845c9a..0000000 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_SIGNIN_PREF_DISALLOWED_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -e4990b938eb30925f7d9de02045af0864fd11f01 \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 817c2a3..380e007 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -1225,7 +1225,7 @@ <translation id="8443209985646068659">Chrome nije ažuriran</translation> <translation id="8445448999790540984">Izvoz zaporki nije moguć</translation> <translation id="8453310803815879010">Pokrenite igru s dinosaurom</translation> -<translation id="8461694314515752532">Kriptiraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation> +<translation id="8461694314515752532">Šifriraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation> <translation id="8466613982764129868">Provjerite je li <ph name="TARGET_DEVICE_NAME" /> povezan s internetom</translation> <translation id="8473863474539038330">Adrese i više</translation> <translation id="8481921391193215807">Kada je Privacy Sandbox uključen, za pružanje svog sadržaja i svojih usluga web-lokacije mogu primjenjivati ovdje prikazane tehnike kojima se čuva privatnost. Te tehnike uključuju alternative praćenju na različitim web-lokacijama. U budućnosti će se možda dodati još probnih značajki.
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java index 35a74c7..deff15c 100644 --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/StartSurfaceToolbarCoordinator.java
@@ -96,7 +96,7 @@ menuButtonCoordinator, identityDiscStateSupplier, identityDiscButtonSupplier, homepageEnabledSupplier, startSurfaceAsHomepageSupplier, homepageManagedByPolicySupplier, homeButtonOnClickHandler, - StartSurfaceConfiguration.shouldShowNewSurfaceFromHomeButton(), + StartSurfaceConfiguration.TAB_COUNT_BUTTON_ON_START_SURFACE.getValue(), isTabGroupsAndroidContinuationEnabled, userEducationHelper, isIncognitoModeEnabledSupplier, StartSurfaceConfiguration.shouldShowAnimationsForFinale() @@ -266,7 +266,7 @@ mToolbarMediator.setHomeButtonView(mView.findViewById(R.id.home_button_on_tab_switcher)); - if (StartSurfaceConfiguration.shouldShowNewSurfaceFromHomeButton()) { + if (StartSurfaceConfiguration.TAB_COUNT_BUTTON_ON_START_SURFACE.getValue()) { mTabSwitcherButtonView = mView.findViewById(R.id.start_tab_switcher_button); if (mTabSwitcherLongClickListener != null) { mTabSwitcherButtonView.setOnLongClickListener(mTabSwitcherLongClickListener);
diff --git a/chrome/browser/ui/ash/chrome_new_window_client.cc b/chrome/browser/ui/ash/chrome_new_window_client.cc index 48dbb0fd..2f74c75 100644 --- a/chrome/browser/ui/ash/chrome_new_window_client.cc +++ b/chrome/browser/ui/ash/chrome_new_window_client.cc
@@ -53,9 +53,9 @@ #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/webui/chrome_web_contents_handler.h" #include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/extensions/extension_constants.h"
diff --git a/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc b/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc index 45fa9b0..5ac393b 100644 --- a/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc +++ b/chrome/browser/ui/ash/shelf/app_shortcut_shelf_item_controller.cc
@@ -30,7 +30,7 @@ #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
diff --git a/chrome/browser/ui/ash/shelf/browser_status_monitor.cc b/chrome/browser/ui/ash/shelf/browser_status_monitor.cc index 47e6f9c..52ceaf1 100644 --- a/chrome/browser/ui/ash/shelf/browser_status_monitor.cc +++ b/chrome/browser/ui/ash/shelf/browser_status_monitor.cc
@@ -20,7 +20,7 @@ #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller.cc b/chrome/browser/ui/ash/shelf/chrome_shelf_controller.cc index 176aac0..497eb6c9 100644 --- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller.cc +++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller.cc
@@ -78,7 +78,7 @@ #include "chrome/browser/ui/settings_window_manager_chromeos.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc index 65de12d..dd378991 100644 --- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc +++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_browsertest.cc
@@ -77,7 +77,6 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" @@ -85,6 +84,7 @@ #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_util.cc b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_util.cc index c59692b..b7313e0c 100644 --- a/chrome/browser/ui/ash/shelf/chrome_shelf_controller_util.cc +++ b/chrome/browser/ui/ash/shelf/chrome_shelf_controller_util.cc
@@ -20,9 +20,9 @@ #include "chrome/browser/ui/ash/shelf/chrome_shelf_item_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h"
diff --git a/chrome/browser/ui/browser_commands.cc b/chrome/browser/ui/browser_commands.cc index bcee5a0..5a25ba57 100644 --- a/chrome/browser/ui/browser_commands.cc +++ b/chrome/browser/ui/browser_commands.cc
@@ -145,7 +145,7 @@ #include "chrome/browser/ui/extensions/app_launch_params.h" #include "chrome/browser/ui/extensions/application_launch.h" #include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/extensions/extension_metrics.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "extensions/browser/extension_registry.h"
diff --git a/chrome/browser/ui/browser_live_tab_context.cc b/chrome/browser/ui/browser_live_tab_context.cc index 4cfb16c..150ee51 100644 --- a/chrome/browser/ui/browser_live_tab_context.cc +++ b/chrome/browser/ui/browser_live_tab_context.cc
@@ -24,7 +24,7 @@ #include "chrome/browser/ui/tabs/tab_group_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/ui_features.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/sessions/content/content_live_tab.h" #include "components/sessions/content/content_platform_specific_tab_data.h" #include "components/tab_groups/tab_group_id.h"
diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index 1c87457..b304e3eb 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc
@@ -36,7 +36,6 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/common/url_constants.h" #include "components/captive_portal/core/buildflags.h" #include "components/no_state_prefetch/browser/no_state_prefetch_manager.h" @@ -71,7 +70,7 @@ #if BUILDFLAG(ENABLE_EXTENSIONS) #include "chrome/browser/apps/app_service/web_contents_app_id_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "extensions/common/extension.h" #endif
diff --git a/chrome/browser/ui/browser_navigator_browsertest.cc b/chrome/browser/ui/browser_navigator_browsertest.cc index 065e8bc..a71e26c4 100644 --- a/chrome/browser/ui/browser_navigator_browsertest.cc +++ b/chrome/browser/ui/browser_navigator_browsertest.cc
@@ -28,8 +28,8 @@ #include "chrome/browser/ui/search/ntp_test_utils.h" #include "chrome/browser/ui/singleton_tabs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm index 65aabd9d..24ae2bee 100644 --- a/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm +++ b/chrome/browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm
@@ -14,7 +14,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/grit/generated_resources.h" #include "extensions/browser/app_window/app_window.h" #include "extensions/browser/app_window/native_app_window.h"
diff --git a/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc b/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc index 3f9c1f3..2598940 100644 --- a/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc +++ b/chrome/browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc
@@ -17,7 +17,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "chrome/grit/chrome_unscaled_resources.h"
diff --git a/chrome/browser/ui/extensions/application_launch.cc b/chrome/browser/ui/extensions/application_launch.cc index 24099566a..188d17d 100644 --- a/chrome/browser/ui/extensions/application_launch.cc +++ b/chrome/browser/ui/extensions/application_launch.cc
@@ -37,7 +37,7 @@ #include "chrome/browser/ui/extensions/extension_enable_flow.h" #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/url_constants.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc index 633f65f4..a411a5d 100644 --- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc +++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -17,7 +17,7 @@ #include "chrome/browser/ui/location_bar/location_bar.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/api/url_handlers/url_handlers_parser.h" #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
diff --git a/chrome/browser/ui/extensions/hosted_app_browsertest.cc b/chrome/browser/ui/extensions/hosted_app_browsertest.cc index 1a5e047c..fab26b19 100644 --- a/chrome/browser/ui/extensions/hosted_app_browsertest.cc +++ b/chrome/browser/ui/extensions/hosted_app_browsertest.cc
@@ -42,11 +42,11 @@ #include "chrome/browser/ui/web_applications/web_app_menu_model.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/ui/settings_window_manager_chromeos.cc b/chrome/browser/ui/settings_window_manager_chromeos.cc index af3108c..e231c174 100644 --- a/chrome/browser/ui/settings_window_manager_chromeos.cc +++ b/chrome/browser/ui/settings_window_manager_chromeos.cc
@@ -20,8 +20,8 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/webui_url_constants.h" #include "content/public/browser/web_contents.h" #include "ui/aura/client/aura_constants.h"
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc index fee3d10..a821036 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -125,11 +125,11 @@ (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS)) #include "chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_view.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" -#include "chrome/browser/web_applications/components/url_handler_manager_impl.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/fake_web_app_origin_association_manager.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/url_handler_manager.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include "components/services/app_service/public/cpp/url_handler_info.h" #include "extensions/browser/extension_dialog_auto_confirm.h" #include "third_party/blink/public/common/features.h"
diff --git a/chrome/browser/ui/startup/startup_browser_creator_impl.cc b/chrome/browser/ui/startup/startup_browser_creator_impl.cc index 9ebf889..30ea003 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_impl.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_impl.cc
@@ -32,7 +32,6 @@ #include "chrome/browser/profiles/profile_io_data.h" #include "chrome/browser/sessions/session_service.h" #include "chrome/browser/sessions/session_service_factory.h" -#include "chrome/browser/sessions/session_service_log.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_finder.h" @@ -341,7 +340,6 @@ const bool is_incognito_or_guest = profile_->IsOffTheRecord(); bool is_post_crash_launch = HasPendingUncleanExit(profile_); bool has_incompatible_applications = false; - LogSessionServiceStartEvent(profile_, is_post_crash_launch); #if defined(OS_WIN) #if BUILDFLAG(GOOGLE_CHROME_BRANDING) if (is_post_crash_launch) {
diff --git a/chrome/browser/ui/startup/web_app_url_handling_startup_utils.cc b/chrome/browser/ui/startup/web_app_url_handling_startup_utils.cc index 56fdbeb..a7a26a7f 100644 --- a/chrome/browser/ui/startup/web_app_url_handling_startup_utils.cc +++ b/chrome/browser/ui/startup/web_app_url_handling_startup_utils.cc
@@ -23,7 +23,7 @@ #include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/startup/startup_browser_creator_impl.h" #include "chrome/browser/web_applications/components/url_handler_launch_params.h" -#include "chrome/browser/web_applications/components/url_handler_manager_impl.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include "chrome/common/chrome_switches.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h"
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc index 729050c..841a28f 100644 --- a/chrome/browser/ui/tab_helpers.cc +++ b/chrome/browser/ui/tab_helpers.cc
@@ -85,7 +85,6 @@ #include "chrome/browser/ui/tab_ui_helper.h" #include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h" #include "chrome/browser/vr/vr_tab_helper.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/common/buildflags.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" @@ -181,8 +180,8 @@ #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/ui/web_applications/web_app_metrics.h" #include "chrome/browser/ui/web_applications/web_app_metrics_tab_helper.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "extensions/browser/view_type_utils.h" #include "extensions/common/mojom/view_type.mojom.h" #endif
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc index 04fdea2..6b84dcb 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_aura.cc
@@ -12,7 +12,7 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/ui/views/apps/app_window_easy_resize_window_targeter.h" #include "chrome/browser/ui/views/apps/shaped_app_window_targeter.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/window.h" #include "ui/aura/window_observer.h"
diff --git a/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc b/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc index c247c106..6a7fbbb 100644 --- a/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc +++ b/chrome/browser/ui/views/apps/chrome_native_app_window_views_win.cc
@@ -12,8 +12,8 @@ #include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/views/apps/app_window_desktop_native_widget_aura_win.h" #include "chrome/browser/ui/views/apps/glass_app_window_frame_view_win.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_switches.h" #include "content/public/browser/browser_thread.h" #include "extensions/browser/app_window/app_window.h"
diff --git a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc index 1801830..ebe0713 100644 --- a/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc +++ b/chrome/browser/ui/views/frame/browser_window_property_manager_win.cc
@@ -14,8 +14,8 @@ #include "chrome/browser/profiles/profile_shortcut_manager_win.h" #include "chrome/browser/shell_integration_win.h" #include "chrome/browser/ui/views/frame/browser_view.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/extensions/web_app_extension_shortcut.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/pref_names.h" #include "components/prefs/pref_service.h" #include "extensions/browser/extension_registry.h"
diff --git a/chrome/browser/ui/views/page_action/pwa_install_view.cc b/chrome/browser/ui/views/page_action/pwa_install_view.cc index da0ff2e..268a7bc 100644 --- a/chrome/browser/ui/views/page_action/pwa_install_view.cc +++ b/chrome/browser/ui/views/page_action/pwa_install_view.cc
@@ -21,8 +21,8 @@ #include "chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.h" #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/grit/generated_resources.h" #include "components/feature_engagement/public/feature_constants.h" #include "components/omnibox/browser/vector_icons.h"
diff --git a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc index 623486e..1b7174ba 100644 --- a/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc +++ b/chrome/browser/ui/views/page_action/pwa_install_view_browsertest.cc
@@ -22,9 +22,9 @@ #include "chrome/browser/ui/views/user_education/feature_promo_controller_views.h" #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/web_applications/components/install_bounce_metric.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/os_integration_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/ui/views/permission_bubble/file_handling_permission_prompt.cc b/chrome/browser/ui/views/permission_bubble/file_handling_permission_prompt.cc index eb229b1..8beef14c 100644 --- a/chrome/browser/ui/views/permission_bubble/file_handling_permission_prompt.cc +++ b/chrome/browser/ui/views/permission_bubble/file_handling_permission_prompt.cc
@@ -6,7 +6,7 @@ #include "base/bind.h" #include "chrome/browser/ui/views/permission_bubble/file_handling_permission_request_dialog.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/browser/web_launch/web_launch_files_helper.h" #include "components/constrained_window/constrained_window_views.h" #include "components/permissions/permission_uma_util.h"
diff --git a/chrome/browser/ui/views/permission_bubble/file_handling_permission_request_dialog.cc b/chrome/browser/ui/views/permission_bubble/file_handling_permission_request_dialog.cc index 3084f96..97254b4 100644 --- a/chrome/browser/ui/views/permission_bubble/file_handling_permission_request_dialog.cc +++ b/chrome/browser/ui/views/permission_bubble/file_handling_permission_request_dialog.cc
@@ -11,7 +11,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/views/chrome_layout_provider.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/grit/generated_resources.h" #include "components/permissions/permission_uma_util.h" #include "components/permissions/permission_util.h"
diff --git a/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_toolbar_bubble_view.cc b/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_toolbar_bubble_view.cc index e064345..468a5230 100644 --- a/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_toolbar_bubble_view.cc +++ b/chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_toolbar_bubble_view.cc
@@ -42,8 +42,7 @@ SendTabToSelfToolbarIconView* parent, const SendTabToSelfEntry& entry, base::OnceCallback<void(NavigateParams*)> navigate_callback) - : views::BubbleDialogDelegateView(dynamic_cast<views::View*>(parent), - views::BubbleBorder::TOP_RIGHT), + : views::BubbleDialogDelegateView(parent, views::BubbleBorder::TOP_RIGHT), toolbar_button_(parent), navigate_callback_(std::move(navigate_callback)), profile_(profile),
diff --git a/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc b/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc index ce70aed..d1faa961 100644 --- a/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc +++ b/chrome/browser/ui/views/tooltip/tooltip_browsertest.cc
@@ -110,6 +110,8 @@ tooltip_monitor_ = std::make_unique<TooltipWidgetMonitor>(); } + content::WebContents* web_contents() { return web_contents_; } + protected: void NavigateToURL(const std::string& relative_url) { ui_test_utils::NavigateToURL( @@ -325,3 +327,62 @@ tooltip_monitor()->WaitUntilTooltipClosed(); EXPECT_FALSE(helper()->IsTooltipVisible()); } + +#if defined(OS_CHROMEOS) +// https://crbug.com/1212403. Flaky on linux-chromeos-rel. +#define MAYBE_ScriptFocusHidesKeyboardTriggeredTooltip \ + DISABLED_ScriptFocusHidesKeyboardTriggeredTooltip +#else +#define MAYBE_ScriptFocusHidesKeyboardTriggeredTooltip \ + ScriptFocusHidesKeyboardTriggeredTooltip +#endif +IN_PROC_BROWSER_TEST_F(TooltipBrowserTest, + MAYBE_ScriptFocusHidesKeyboardTriggeredTooltip) { + if (SkipTestForOldWinVersion()) + return; + + NavigateToURL("/tooltip_two_buttons.html"); + std::u16string expected_text_1 = u"my tooltip 1"; + std::u16string expected_text_2 = u"my tooltip 2"; + + // Trigger the tooltip from the keyboard with a TAB keypress. + event_generator()->PressKey(ui::VKEY_TAB, ui::EF_NONE); + event_generator()->ReleaseKey(ui::VKEY_TAB, ui::EF_NONE); + tooltip_monitor()->WaitUntilTooltipShown(); + EXPECT_TRUE(helper()->IsTooltipVisible()); + EXPECT_EQ(expected_text_1, helper()->GetTooltipText()); + EXPECT_TRUE(tooltip_monitor()->IsWidgetActive()); + + // Validate that a blur event on another element than our focused one doesn't + // hide the tooltip. + std::string javascript = "document.getElementById('b2').blur();"; + EXPECT_TRUE(content::ExecuteScript(web_contents(), javascript)); + + EXPECT_TRUE(helper()->IsTooltipVisible()); + EXPECT_EQ(expected_text_1, helper()->GetTooltipText()); + EXPECT_TRUE(tooltip_monitor()->IsWidgetActive()); + + // Validate that a focus on another element will hide the tooltip. + javascript = "document.getElementById('b2').focus();"; + EXPECT_TRUE(content::ExecuteScript(web_contents(), javascript)); + + tooltip_monitor()->WaitUntilTooltipClosed(); + EXPECT_FALSE(tooltip_monitor()->IsWidgetActive()); + EXPECT_FALSE(helper()->IsTooltipVisible()); + + // Move the focus again to the first button to test the blur on the focused + // element. + event_generator()->PressKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN); + event_generator()->ReleaseKey(ui::VKEY_TAB, ui::EF_SHIFT_DOWN); + tooltip_monitor()->WaitUntilTooltipShown(); + EXPECT_TRUE(helper()->IsTooltipVisible()); + EXPECT_EQ(expected_text_1, helper()->GetTooltipText()); + EXPECT_TRUE(tooltip_monitor()->IsWidgetActive()); + + // Validate that the blur call hides the tooltip. + javascript = "document.getElementById('b1').blur();"; + EXPECT_TRUE(content::ExecuteScript(web_contents(), javascript)); + + EXPECT_FALSE(tooltip_monitor()->IsWidgetActive()); + EXPECT_FALSE(helper()->IsTooltipVisible()); +}
diff --git a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc index 1badfa6..73ff1b8 100644 --- a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc +++ b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.cc
@@ -21,8 +21,8 @@ #include "chrome/browser/ui/views/page_action/page_action_icon_view.h" #include "chrome/browser/ui/views/web_apps/web_app_info_image_source.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_features.h" #include "chrome/grit/generated_resources.h" #include "components/feature_engagement/public/event_constants.h"
diff --git a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc index ecb2503b3..702ece5 100644 --- a/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view_browsertest.cc
@@ -12,11 +12,11 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/views/web_apps/pwa_confirmation_bubble_view.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/components/web_application_info.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" #include "chrome/common/pref_names.h" #include "chrome/test/base/in_process_browser_test.h"
diff --git a/chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_browsertest.cc b/chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_browsertest.cc index a506764..4f33ba0 100644 --- a/chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_browsertest.cc +++ b/chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_browsertest.cc
@@ -20,11 +20,11 @@ #include "chrome/browser/ui/test/test_browser_dialog.h" #include "chrome/browser/ui/views/web_apps/web_app_url_handler_intent_picker_dialog_view.h" #include "chrome/browser/web_applications/components/url_handler_launch_params.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/test/base/in_process_browser_test.h" #include "components/keep_alive_registry/keep_alive_types.h"
diff --git a/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc b/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc index 55c8717..15009e4 100644 --- a/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc +++ b/chrome/browser/ui/web_applications/app_browser_controller_browsertest.cc
@@ -23,12 +23,12 @@ #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_installation.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/webui_url_constants.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/ui/web_applications/sub_apps_renderer_host.cc b/chrome/browser/ui/web_applications/sub_apps_renderer_host.cc index e2cea5a..1a0458c 100644 --- a/chrome/browser/ui/web_applications/sub_apps_renderer_host.cc +++ b/chrome/browser/ui/web_applications/sub_apps_renderer_host.cc
@@ -8,7 +8,7 @@ #include "base/check.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc index 069162e..bb1dc693 100644 --- a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc +++ b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
@@ -24,9 +24,9 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/web_app_launch_manager.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_launch/web_launch_files_helper.h"
diff --git a/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc b/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc index 739c3ae..12f5d4a 100644 --- a/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc +++ b/chrome/browser/ui/web_applications/test/system_web_app_interactive_uitest.cc
@@ -26,10 +26,10 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_installation.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/webui_url_constants.h" #include "chrome/test/base/interactive_test_utils.h" #include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc index 01a06d9..a1e3ce55 100644 --- a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc +++ b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
@@ -30,11 +30,11 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" #include "chrome/browser/web_applications/test/service_worker_registration_waiter.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_install_params.h"
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc index 1f39408..41db7c2 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -21,8 +21,8 @@ #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/ui/web_applications/web_app_browsertest.cc b/chrome/browser/ui/web_applications/web_app_browsertest.cc index 828875a..f47ce82 100644 --- a/chrome/browser/ui/web_applications/web_app_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_browsertest.cc
@@ -52,11 +52,11 @@ #include "chrome/browser/ui/web_applications/web_app_menu_model.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc index 1f8e4570..64540b07 100644 --- a/chrome/browser/ui/web_applications/web_app_dialog_utils.cc +++ b/chrome/browser/ui/web_applications/web_app_dialog_utils.cc
@@ -17,13 +17,13 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_install_params.h" #include "chrome/browser/web_applications/web_app_provider.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/webapps/browser/banners/app_banner_manager.h" #include "components/webapps/browser/installable/installable_metrics.h" #include "content/public/browser/navigation_entry.h"
diff --git a/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc b/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc index 27f0043c..9c893cca 100644 --- a/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_engagement_browsertest.cc
@@ -22,9 +22,9 @@ #include "chrome/browser/ui/web_applications/web_app_controller_browsertest.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/ui_test_utils.h" #include "components/services/app_service/public/mojom/types.mojom-shared.h"
diff --git a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc index d4491d5..4013e0b 100644 --- a/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_file_handling_browsertest.cc
@@ -30,7 +30,6 @@ #include "chrome/browser/ui/webui/settings/site_settings_helper.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_install_test_utils.h" @@ -38,6 +37,7 @@ #include "chrome/browser/web_applications/web_app_file_handler_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/embedder_support/switches.h" #include "components/permissions/test/permission_request_observer.h"
diff --git a/chrome/browser/ui/web_applications/web_app_launch_manager.cc b/chrome/browser/ui/web_applications/web_app_launch_manager.cc index d7acf9ce..8ad76290 100644 --- a/chrome/browser/ui/web_applications/web_app_launch_manager.cc +++ b/chrome/browser/ui/web_applications/web_app_launch_manager.cc
@@ -33,11 +33,11 @@ #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/ui/web_applications/web_app_launch_utils.cc b/chrome/browser/ui/web_applications/web_app_launch_utils.cc index aab0128..f5f07bb 100644 --- a/chrome/browser/ui/web_applications/web_app_launch_utils.cc +++ b/chrome/browser/ui/web_applications/web_app_launch_utils.cc
@@ -21,8 +21,8 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/web_applications/web_app_browser_controller.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc index 4715b98..b1326c60 100644 --- a/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_link_capturing_browsertest.cc
@@ -17,11 +17,11 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/ui/web_applications/test/web_app_navigation_browsertest.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/manifest_update_manager.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/ui/web_applications/web_app_metrics_factory.cc b/chrome/browser/ui/web_applications/web_app_metrics_factory.cc index 9073569..a7d502e 100644 --- a/chrome/browser/ui/web_applications/web_app_metrics_factory.cc +++ b/chrome/browser/ui/web_applications/web_app_metrics_factory.cc
@@ -7,8 +7,8 @@ #include "chrome/browser/engagement/site_engagement_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/web_applications/web_app_metrics.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" namespace web_app {
diff --git a/chrome/browser/ui/web_applications/web_app_metrics_tab_helper.cc b/chrome/browser/ui/web_applications/web_app_metrics_tab_helper.cc index ed0811f..1e3e557 100644 --- a/chrome/browser/ui/web_applications/web_app_metrics_tab_helper.cc +++ b/chrome/browser/ui/web_applications/web_app_metrics_tab_helper.cc
@@ -6,7 +6,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/web_applications/web_app_metrics.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" namespace content { class WebContents;
diff --git a/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc b/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc index 5deb11c..7afd500 100644 --- a/chrome/browser/ui/web_applications/web_app_navigate_browsertest.cc +++ b/chrome/browser/ui/web_applications/web_app_navigate_browsertest.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/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h"
diff --git a/chrome/browser/ui/webui/internals/sessions/session_service_internals_handler.cc b/chrome/browser/ui/webui/internals/sessions/session_service_internals_handler.cc index 51298d0..0dfa2d5 100644 --- a/chrome/browser/ui/webui/internals/sessions/session_service_internals_handler.cc +++ b/chrome/browser/ui/webui/internals/sessions/session_service_internals_handler.cc
@@ -50,7 +50,11 @@ return base::StrCat( {EventTimeToString(event), " exit (shutdown) windows=", base::NumberToString(event.data.exit.window_count), - " tabs=", base::NumberToString(event.data.exit.tab_count)}); + " tabs=", base::NumberToString(event.data.exit.tab_count), + " is_first_service=", + base::NumberToString(event.data.exit.is_first_session_service), + " did_schedule_command=", + base::NumberToString(event.data.exit.did_schedule_command)}); case SessionServiceEventLogType::kWriteError: return base::StrCat( {EventTimeToString(event), " write errors (",
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 456a681a..e7284b42 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1491,6 +1491,9 @@ html_source->AddBoolean( "driveSuggestAvailable", base::FeatureList::IsEnabled(omnibox::kDocumentProvider)); + html_source->AddBoolean( + "consolidatedSiteStorageControlsEnabled", + base::FeatureList::IsEnabled(features::kConsolidatedSiteStorageControls)); bool show_secure_dns = IsSecureDnsAvailable(); bool link_secure_dns = ShouldLinkSecureDnsOsSettings(); @@ -1864,6 +1867,7 @@ {"cookiePageBlockAllBulTwo", IDS_SETTINGS_COOKIES_BLOCK_ALL_BULLET_TWO}, {"cookiePageBlockAllBulThree", IDS_SETTINGS_COOKIES_BLOCK_ALL_BULLET_THREE}, {"cookiePageClearOnExit", IDS_SETTINGS_COOKIES_CLEAR_ON_EXIT}, + {"cookiePageAllSitesLink", IDS_SETTINGS_COOKIES_ALL_SITES_LINK}, {"cookiePageAllowExceptions", IDS_SETTINGS_COOKIES_ALLOW_EXCEPTIONS}, {"cookiePageBlockExceptions", IDS_SETTINGS_COOKIES_BLOCK_EXCEPTIONS}, {"cookiePageSessionOnlyExceptions",
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 20aff1f..2c80b6f 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -33,7 +33,7 @@ #include "chrome/browser/ui/webui/settings/site_settings_helper.h" #include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context_factory.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" #include "chrome/test/base/browser_with_test_window_test.h"
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc index 999d4766..2c5ea2b 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
@@ -28,7 +28,7 @@ #include "chrome/browser/subresource_filter/subresource_filter_profile_context_factory.h" #include "chrome/browser/usb/usb_chooser_context.h" #include "chrome/browser/usb/usb_chooser_context_factory.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/pref_names.h" #include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/common/content_settings.h"
diff --git a/chrome/browser/ui/webui/settings/url_handlers_handler_unittest.cc b/chrome/browser/ui/webui/settings/url_handlers_handler_unittest.cc index 2226c4978..d7dd6ff4af 100644 --- a/chrome/browser/ui/webui/settings/url_handlers_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/url_handlers_handler_unittest.cc
@@ -12,9 +12,9 @@ #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/web_applications/components/url_handler_prefs.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/scoped_testing_local_state.h"
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 2eff400..17f9b799 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -26,7 +26,6 @@ "components/preinstalled_app_install_features.cc", "components/preinstalled_app_install_features.h", "components/protocol_handler_manager.h", - "components/url_handler_manager.h", "components/web_app_audio_focus_id_map.cc", "components/web_app_audio_focus_id_map.h", "components/web_app_callback_app_identity.h", @@ -38,7 +37,6 @@ "components/web_app_data_retriever.h", "components/web_app_file_handler_registration.cc", "components/web_app_file_handler_registration.h", - "components/web_app_helpers.h", "components/web_app_icon_generator.cc", "components/web_app_icon_generator.h", "components/web_app_id.h", @@ -67,7 +65,6 @@ "components/web_app_uninstallation_via_os_settings_registration.h", "components/web_app_url_loader.cc", "components/web_app_url_loader.h", - "components/web_app_utils.h", "components/web_application_info.cc", "components/web_application_info.h", @@ -126,6 +123,7 @@ "system_web_apps/system_web_app_manager.h", "system_web_apps/system_web_app_types.h", "url_handler_manager.cc", + "url_handler_manager.h", "web_app.cc", "web_app.h", "web_app_database.cc", @@ -135,6 +133,7 @@ "web_app_file_handler_manager.cc", "web_app_file_handler_manager.h", "web_app_helpers.cc", + "web_app_helpers.h", "web_app_icon_manager.cc", "web_app_icon_manager.h", "web_app_install_finalizer.cc", @@ -169,6 +168,7 @@ "web_app_tab_helper.cc", "web_app_tab_helper.h", "web_app_utils.cc", + "web_app_utils.h", ] if (is_chromeos_ash || is_chromeos_lacros) { @@ -222,10 +222,10 @@ sources += [ "components/url_handler_launch_params.cc", "components/url_handler_launch_params.h", - "components/url_handler_manager_impl.h", "components/url_handler_prefs.cc", "components/url_handler_prefs.h", "url_handler_manager_impl.cc", + "url_handler_manager_impl.h", ] } @@ -464,14 +464,12 @@ "components/protocol_handler_manager_unittest.cc", "components/web_app_constants_unittest.cc", "components/web_app_data_retriever_unittest.cc", - "components/web_app_helpers_unittest.cc", "components/web_app_icon_downloader_unittest.cc", "components/web_app_icon_generator_unittest.cc", "components/web_app_install_utils_unittest.cc", "components/web_app_prefs_utils_unittest.cc", "components/web_app_shortcut_unittest.cc", "components/web_app_url_loader_unittest.cc", - "components/web_app_utils_unittest.cc", "daily_metrics_helper_unittest.cc", "external_install_options_unittest.cc", "externally_managed_app_manager_impl_unittest.cc", @@ -485,6 +483,7 @@ "system_web_apps/test/system_web_app_manager_unittest.cc", "web_app_database_unittest.cc", "web_app_file_handler_manager_unittest.cc", + "web_app_helpers_unittest.cc", "web_app_icon_manager_unittest.cc", "web_app_install_finalizer_unittest.cc", "web_app_install_manager_unittest.cc", @@ -495,6 +494,7 @@ "web_app_registrar_unittest.cc", "web_app_sync_bridge_unittest.cc", "web_app_unittest.cc", + "web_app_utils_unittest.cc", ] if (is_win) { @@ -526,8 +526,8 @@ if (is_win || is_mac || (is_linux && !is_chromeos_lacros)) { sources += [ - "components/url_handler_manager_impl_unittest.cc", "components/url_handler_prefs_unittest.cc", + "url_handler_manager_impl_unittest.cc", ] }
diff --git a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc index 75e6c1af..e942bde7 100644 --- a/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc +++ b/chrome/browser/web_applications/app_service/web_app_publisher_helper.cc
@@ -20,15 +20,15 @@ #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/web_applications/web_app_launch_manager.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/common/extensions/extension_constants.h" #include "components/content_settings/core/common/content_settings.h"
diff --git a/chrome/browser/web_applications/app_service/web_apps.cc b/chrome/browser/web_applications/app_service/web_apps.cc index 412785d2..acdb267 100644 --- a/chrome/browser/web_applications/app_service/web_apps.cc +++ b/chrome/browser/web_applications/app_service/web_apps.cc
@@ -17,13 +17,13 @@ #include "chrome/browser/ui/web_applications/web_app_dialog_manager.h" #include "chrome/browser/ui/web_applications/web_app_ui_manager_impl.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_pattern.h"
diff --git a/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc b/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc index 4cc816b..d8f26df 100644 --- a/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc +++ b/chrome/browser/web_applications/app_service/web_apps_publisher_host.cc
@@ -16,8 +16,8 @@ #include "chrome/browser/apps/app_service/browser_app_instance_tracker.h" #include "chrome/browser/apps/app_service/menu_item_constants.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h"
diff --git a/chrome/browser/web_applications/components/protocol_handler_manager_unittest.cc b/chrome/browser/web_applications/components/protocol_handler_manager_unittest.cc index a43a66d8..dd2b40b 100644 --- a/chrome/browser/web_applications/components/protocol_handler_manager_unittest.cc +++ b/chrome/browser/web_applications/components/protocol_handler_manager_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 "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/test/fake_protocol_handler_manager.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/custom_handlers/protocol_handler.h" #include "net/base/escape.h"
diff --git a/chrome/browser/web_applications/components/url_handler_prefs_unittest.cc b/chrome/browser/web_applications/components/url_handler_prefs_unittest.cc index 57923bce9d..c36a522 100644 --- a/chrome/browser/web_applications/components/url_handler_prefs_unittest.cc +++ b/chrome/browser/web_applications/components/url_handler_prefs_unittest.cc
@@ -10,9 +10,9 @@ #include "base/files/file_path.h" #include "base/test/values_test_util.h" #include "base/time/time.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/testing_browser_process.h"
diff --git a/chrome/browser/web_applications/components/web_app_icon_downloader.cc b/chrome/browser/web_applications/components/web_app_icon_downloader.cc index 31ac4711..2ff44f81 100644 --- a/chrome/browser/web_applications/components/web_app_icon_downloader.cc +++ b/chrome/browser/web_applications/components/web_app_icon_downloader.cc
@@ -7,7 +7,7 @@ #include "base/bind.h" #include "base/metrics/histogram_functions.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "third_party/blink/public/mojom/favicon/favicon_url.mojom.h"
diff --git a/chrome/browser/web_applications/components/web_app_install_utils.cc b/chrome/browser/web_applications/components/web_app_install_utils.cc index d3855e4..8adfd41e 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils.cc +++ b/chrome/browser/web_applications/components/web_app_install_utils.cc
@@ -15,8 +15,8 @@ #include "chrome/browser/banners/app_banner_manager_desktop.h" #include "chrome/browser/web_applications/components/web_app_file_handler_registration.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/services/app_service/public/cpp/share_target.h" #include "components/webapps/browser/banners/app_banner_manager.h"
diff --git a/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc b/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc index 1a1f0a5..14ec039 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc +++ b/chrome/browser/web_applications/components/web_app_install_utils_unittest.cc
@@ -13,10 +13,10 @@ #include "base/test/scoped_feature_list.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/features.h"
diff --git a/chrome/browser/web_applications/components/web_app_shortcut.cc b/chrome/browser/web_applications/components/web_app_shortcut.cc index ee2e8e6..c5c063a 100644 --- a/chrome/browser/web_applications/components/web_app_shortcut.cc +++ b/chrome/browser/web_applications/components/web_app_shortcut.cc
@@ -13,7 +13,7 @@ #include "base/task/task_traits.h" #include "base/task/thread_pool.h" #include "build/build_config.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_constants.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h"
diff --git a/chrome/browser/web_applications/components/web_app_shortcuts_menu_win.cc b/chrome/browser/web_applications/components/web_app_shortcuts_menu_win.cc index f89d48ac..227aea7 100644 --- a/chrome/browser/web_applications/components/web_app_shortcuts_menu_win.cc +++ b/chrome/browser/web_applications/components/web_app_shortcuts_menu_win.cc
@@ -23,9 +23,9 @@ #include "base/task/post_task.h" #include "base/task/thread_pool.h" #include "chrome/browser/shell_integration_win.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/win/jumplist_updater.h" #include "chrome/common/chrome_switches.h" #include "third_party/skia/include/core/SkBitmap.h"
diff --git a/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration_win.cc b/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration_win.cc index e641281c..652cf50 100644 --- a/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration_win.cc +++ b/chrome/browser/web_applications/components/web_app_uninstallation_via_os_settings_registration_win.cc
@@ -12,8 +12,8 @@ #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_shortcut_win.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/win/uninstallation_via_os_settings.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths.h"
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_browsertest.cc b/chrome/browser/web_applications/extensions/bookmark_app_browsertest.cc index 2d31a9a5..03a66a23 100644 --- a/chrome/browser/web_applications/extensions/bookmark_app_browsertest.cc +++ b/chrome/browser/web_applications/extensions/bookmark_app_browsertest.cc
@@ -7,7 +7,7 @@ #include "base/threading/thread_restrictions.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "content/public/test/browser_test.h" #include "extensions/common/extension.h" #include "extensions/common/file_util.h"
diff --git a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc index 5a13da8..baf2b24 100644 --- a/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc +++ b/chrome/browser/web_applications/extensions/web_app_policy_manager_unittest.cc
@@ -17,7 +17,6 @@ #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/policy/web_app_policy_constants.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager_observer.h" @@ -25,6 +24,7 @@ #include "chrome/browser/web_applications/test/test_externally_managed_app_manager.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h"
diff --git a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc index f629099..d252253 100644 --- a/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc +++ b/chrome/browser/web_applications/externally_managed_app_manager_unittest.cc
@@ -12,12 +12,12 @@ #include "base/run_loop.h" #include "base/test/bind.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/test/test_externally_managed_app_manager.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" namespace web_app {
diff --git a/chrome/browser/web_applications/file_handlers_permission_helper.cc b/chrome/browser/web_applications/file_handlers_permission_helper.cc index ca16fdb..7c61337 100644 --- a/chrome/browser/web_applications/file_handlers_permission_helper.cc +++ b/chrome/browser/web_applications/file_handlers_permission_helper.cc
@@ -7,7 +7,6 @@ #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/permissions/permission_manager_factory.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/manifest_update_task.h" #include "chrome/browser/web_applications/web_app.h" @@ -15,6 +14,7 @@ #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/permissions/permission_manager.h" #include "components/permissions/permission_result.h" #include "url/gurl.h"
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc index 23e3a5b..1556b53 100644 --- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc +++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -28,7 +28,6 @@ #include "chrome/browser/ui/browser_dialogs.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_installation.h" @@ -43,6 +42,7 @@ #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" @@ -62,8 +62,8 @@ #if defined(OS_WIN) || defined(OS_MAC) || \ (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS)) #include "base/command_line.h" -#include "chrome/browser/web_applications/components/url_handler_manager_impl.h" #include "chrome/browser/web_applications/test/fake_web_app_origin_association_manager.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #endif namespace web_app {
diff --git a/chrome/browser/web_applications/manifest_update_task.cc b/chrome/browser/web_applications/manifest_update_task.cc index 3d68c1d..84dd6fe 100644 --- a/chrome/browser/web_applications/manifest_update_task.cc +++ b/chrome/browser/web_applications/manifest_update_task.cc
@@ -14,12 +14,12 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/browser_features.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_installation_utils.h"
diff --git a/chrome/browser/web_applications/os_integration_manager.h b/chrome/browser/web_applications/os_integration_manager.h index 54855cb..033de69 100644 --- a/chrome/browser/web_applications/os_integration_manager.h +++ b/chrome/browser/web_applications/os_integration_manager.h
@@ -14,11 +14,11 @@ #include "base/memory/weak_ptr.h" #include "base/strings/string_piece_forward.h" #include "chrome/browser/web_applications/components/protocol_handler_manager.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_app_run_on_os_login.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h" #include "components/services/app_service/public/cpp/file_handler.h"
diff --git a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc index 04f872bd..4871e98 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/preinstalled_web_app_manager_browsertest.cc
@@ -16,7 +16,6 @@ #include "chrome/browser/ui/web_applications/test/ssl_test_utils.h" #include "chrome/browser/ui/web_applications/test/web_app_browsertest_util.h" #include "chrome/browser/web_applications/components/preinstalled_app_install_features.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.h" @@ -24,6 +23,7 @@ #include "chrome/browser/web_applications/test/test_os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h"
diff --git a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc index f73b7d3..b25681e 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc +++ b/chrome/browser/web_applications/preinstalled_web_app_migration_browsertest.cc
@@ -20,10 +20,10 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/web_applications/test/ssl_test_utils.h" #include "chrome/browser/web_applications/components/preinstalled_app_install_features.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/preinstalled_web_app_manager.h" #include "chrome/browser/web_applications/preinstalled_web_apps/preinstalled_web_apps.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/test/browser_test.h"
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc index 8eb0915..c30df9fb 100644 --- a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc
@@ -31,7 +31,6 @@ #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -39,6 +38,7 @@ #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h"
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc index c54311f..2ca04a8 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_browsertest_base.cc
@@ -12,7 +12,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/services/app_service/public/cpp/types_util.h" #include "content/public/test/test_navigation_observer.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc index 672cc0e..9546ebe 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc
@@ -34,11 +34,11 @@ #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/proto/web_app.pb.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_installation.h" #include "chrome/browser/web_applications/test/test_web_app_provider.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_tab_helper.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc index b4ed9032..1cf8c53 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc
@@ -20,9 +20,7 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/externally_managed_app_manager_impl.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -41,10 +39,12 @@ #include "chrome/browser/web_applications/test/web_app_icon_test_utils.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "content/public/browser/navigation_handle.h" #include "content/public/test/test_utils.h"
diff --git a/chrome/browser/web_applications/test/fake_url_handler_manager.h b/chrome/browser/web_applications/test/fake_url_handler_manager.h index 5fdc439..656df244 100644 --- a/chrome/browser/web_applications/test/fake_url_handler_manager.h +++ b/chrome/browser/web_applications/test/fake_url_handler_manager.h
@@ -5,8 +5,8 @@ #ifndef CHROME_BROWSER_WEB_APPLICATIONS_TEST_FAKE_URL_HANDLER_MANAGER_H_ #define CHROME_BROWSER_WEB_APPLICATIONS_TEST_FAKE_URL_HANDLER_MANAGER_H_ -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/components/web_app_id.h" +#include "chrome/browser/web_applications/url_handler_manager.h" class Profile;
diff --git a/chrome/browser/web_applications/test/test_install_finalizer.cc b/chrome/browser/web_applications/test/test_install_finalizer.cc index 5f81af43..1678b49 100644 --- a/chrome/browser/web_applications/test/test_install_finalizer.cc +++ b/chrome/browser/web_applications/test/test_install_finalizer.cc
@@ -13,9 +13,9 @@ #include "base/test/bind.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/crx_file/id_util.h" #include "components/webapps/browser/installable/installable_metrics.h"
diff --git a/chrome/browser/web_applications/test/test_os_integration_manager.cc b/chrome/browser/web_applications/test/test_os_integration_manager.cc index 889c978e..750b972 100644 --- a/chrome/browser/web_applications/test/test_os_integration_manager.cc +++ b/chrome/browser/web_applications/test/test_os_integration_manager.cc
@@ -7,12 +7,12 @@ #include "base/containers/contains.h" #include "base/threading/sequenced_task_runner_handle.h" #include "chrome/browser/web_applications/components/protocol_handler_manager.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" #include "chrome/browser/web_applications/test/fake_protocol_handler_manager.h" #include "chrome/browser/web_applications/test/fake_url_handler_manager.h" #include "chrome/browser/web_applications/test/test_web_app_file_handler_manager.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h"
diff --git a/chrome/browser/web_applications/test/test_web_app_database_factory.cc b/chrome/browser/web_applications/test/test_web_app_database_factory.cc index 56270a0..3ab05c74 100644 --- a/chrome/browser/web_applications/test/test_web_app_database_factory.cc +++ b/chrome/browser/web_applications/test/test_web_app_database_factory.cc
@@ -6,10 +6,10 @@ #include "base/run_loop.h" #include "base/test/bind.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/proto/web_app.pb.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_database.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/sync/model/model_error.h" #include "components/sync/model/model_type_store.h" #include "components/sync/test/model/model_type_store_test_util.h"
diff --git a/chrome/browser/web_applications/test/test_web_app_provider.cc b/chrome/browser/web_applications/test/test_web_app_provider.cc index 907242de..e0e6532 100644 --- a/chrome/browser/web_applications/test/test_web_app_provider.cc +++ b/chrome/browser/web_applications/test/test_web_app_provider.cc
@@ -9,7 +9,6 @@ #include "base/bind.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/externally_managed_app_manager.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -20,6 +19,7 @@ #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_provider_factory.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" namespace web_app {
diff --git a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc index 8b03f55..257e05c 100644 --- a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc +++ b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc
@@ -6,11 +6,11 @@ #include "base/run_loop.h" #include "base/test/bind.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/test_os_integration_manager.h" #include "chrome/browser/web_applications/test/test_web_app_database_factory.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" #include "third_party/skia/include/core/SkColor.h"
diff --git a/chrome/browser/web_applications/test/web_app_icon_test_utils.cc b/chrome/browser/web_applications/test/web_app_icon_test_utils.cc index d83e2a9..a0815cb 100644 --- a/chrome/browser/web_applications/test/web_app_icon_test_utils.cc +++ b/chrome/browser/web_applications/test/web_app_icon_test_utils.cc
@@ -13,9 +13,9 @@ #include "base/test/bind.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/file_utils_wrapper.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/color_utils.h"
diff --git a/chrome/browser/web_applications/test/web_app_install_test_utils.cc b/chrome/browser/web_applications/test/web_app_install_test_utils.cc index 4873dda..2a0de84 100644 --- a/chrome/browser/web_applications/test/web_app_install_test_utils.cc +++ b/chrome/browser/web_applications/test/web_app_install_test_utils.cc
@@ -10,11 +10,11 @@ #include "base/test/bind.h" #include "build/build_config.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/system_web_apps/test/test_system_web_app_manager.h" #include "chrome/browser/web_applications/test/test_web_app_provider.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_manager.h" #include "chrome/browser/web_applications/web_app_provider.h" @@ -25,8 +25,8 @@ #if defined(OS_WIN) || defined(OS_MAC) || \ (defined(OS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS)) -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/os_integration_manager.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include "components/services/app_service/public/cpp/url_handler_info.h" #endif
diff --git a/chrome/browser/web_applications/test/web_app_test_utils.cc b/chrome/browser/web_applications/test/web_app_test_utils.cc index 42ed99c..a70f928c 100644 --- a/chrome/browser/web_applications/test/web_app_test_utils.cc +++ b/chrome/browser/web_applications/test/web_app_test_utils.cc
@@ -8,9 +8,9 @@ #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/services/app_service/public/cpp/url_handler_info.h" #include "third_party/blink/public/common/manifest/manifest.h" #include "url/gurl.h"
diff --git a/chrome/browser/web_applications/url_handler_manager.cc b/chrome/browser/web_applications/url_handler_manager.cc index 6fc2ffc..916c88c4 100644 --- a/chrome/browser/web_applications/url_handler_manager.cc +++ b/chrome/browser/web_applications/url_handler_manager.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/web_applications/components/url_handler_manager.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include <utility>
diff --git a/chrome/browser/web_applications/components/url_handler_manager.h b/chrome/browser/web_applications/url_handler_manager.h similarity index 89% rename from chrome/browser/web_applications/components/url_handler_manager.h rename to chrome/browser/web_applications/url_handler_manager.h index 345f86e4..3f811bf 100644 --- a/chrome/browser/web_applications/components/url_handler_manager.h +++ b/chrome/browser/web_applications/url_handler_manager.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_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_H_ -#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_H_ +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_H_ #include <memory> @@ -60,4 +60,4 @@ } // namespace web_app -#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_H_ +#endif // CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_H_
diff --git a/chrome/browser/web_applications/url_handler_manager_impl.cc b/chrome/browser/web_applications/url_handler_manager_impl.cc index 497a236..9a408914 100644 --- a/chrome/browser/web_applications/url_handler_manager_impl.cc +++ b/chrome/browser/web_applications/url_handler_manager_impl.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/web_applications/components/url_handler_manager_impl.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include <utility> #include <vector>
diff --git a/chrome/browser/web_applications/components/url_handler_manager_impl.h b/chrome/browser/web_applications/url_handler_manager_impl.h similarity index 88% rename from chrome/browser/web_applications/components/url_handler_manager_impl.h rename to chrome/browser/web_applications/url_handler_manager_impl.h index 95646f2..146b0184 100644 --- a/chrome/browser/web_applications/components/url_handler_manager_impl.h +++ b/chrome/browser/web_applications/url_handler_manager_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 CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_IMPL_H_ -#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_IMPL_H_ +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_IMPL_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_IMPL_H_ #include <memory> #include <vector> @@ -12,8 +12,8 @@ #include "base/command_line.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/web_applications/components/url_handler_launch_params.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" #include "chrome/browser/web_applications/components/web_app_id.h" +#include "chrome/browser/web_applications/url_handler_manager.h" #include "components/services/app_service/public/cpp/url_handler_info.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" @@ -74,4 +74,4 @@ } // namespace web_app -#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_URL_HANDLER_MANAGER_IMPL_H_ +#endif // CHROME_BROWSER_WEB_APPLICATIONS_URL_HANDLER_MANAGER_IMPL_H_
diff --git a/chrome/browser/web_applications/components/url_handler_manager_impl_unittest.cc b/chrome/browser/web_applications/url_handler_manager_impl_unittest.cc similarity index 98% rename from chrome/browser/web_applications/components/url_handler_manager_impl_unittest.cc rename to chrome/browser/web_applications/url_handler_manager_impl_unittest.cc index cb2f3a1..09d9ec4f 100644 --- a/chrome/browser/web_applications/components/url_handler_manager_impl_unittest.cc +++ b/chrome/browser/web_applications/url_handler_manager_impl_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/web_applications/components/url_handler_manager_impl.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include <vector> @@ -12,11 +12,11 @@ #include "base/test/scoped_feature_list.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/url_handler_prefs.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/test/fake_web_app_origin_association_manager.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/testing_browser_process.h"
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc index 3e9719e4..b596204 100644 --- a/chrome/browser/web_applications/web_app.cc +++ b/chrome/browser/web_applications/web_app.cc
@@ -15,8 +15,8 @@ #include "base/strings/string_util.h" #include "chrome/browser/web_applications/components/web_app_chromeos_data.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/sync/base/time.h" #include "third_party/blink/public/common/manifest/manifest_util.h" #include "third_party/blink/public/mojom/manifest/manifest.mojom.h"
diff --git a/chrome/browser/web_applications/web_app_database.cc b/chrome/browser/web_applications/web_app_database.cc index 208cc5a..7ee591e 100644 --- a/chrome/browser/web_applications/web_app_database.cc +++ b/chrome/browser/web_applications/web_app_database.cc
@@ -13,16 +13,16 @@ #include "base/containers/contains.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/web_applications/components/web_app_chromeos_data.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_types.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_database_factory.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_proto_utils.h" #include "chrome/browser/web_applications/web_app_registry_update.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/services/app_service/public/cpp/file_handler.h" #include "components/services/app_service/public/cpp/protocol_handler_info.h" #include "components/services/app_service/public/cpp/share_target.h"
diff --git a/chrome/browser/web_applications/web_app_database_factory.cc b/chrome/browser/web_applications/web_app_database_factory.cc index d072428..4f9bb39 100644 --- a/chrome/browser/web_applications/web_app_database_factory.cc +++ b/chrome/browser/web_applications/web_app_database_factory.cc
@@ -6,7 +6,7 @@ #include "base/feature_list.h" #include "chrome/browser/sync/model_type_store_service_factory.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/sync/model/model_type_store_service_impl.h"
diff --git a/chrome/browser/web_applications/web_app_database_unittest.cc b/chrome/browser/web_applications/web_app_database_unittest.cc index d3220ee..84dce11f 100644 --- a/chrome/browser/web_applications/web_app_database_unittest.cc +++ b/chrome/browser/web_applications/web_app_database_unittest.cc
@@ -15,8 +15,6 @@ #include "base/test/bind.h" #include "base/time/time.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/proto/web_app.pb.h" #include "chrome/browser/web_applications/test/test_web_app_database_factory.h" @@ -24,10 +22,12 @@ #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_proto_utils.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/services/app_service/public/cpp/file_handler.h" #include "components/services/app_service/public/cpp/protocol_handler_info.h" #include "components/services/app_service/public/cpp/share_target.h"
diff --git a/chrome/browser/web_applications/web_app_helpers.cc b/chrome/browser/web_applications/web_app_helpers.cc index 88d6a99..e032c55 100644 --- a/chrome/browser/web_applications/web_app_helpers.cc +++ b/chrome/browser/web_applications/web_app_helpers.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/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "base/base64.h" #include "base/strings/strcat.h"
diff --git a/chrome/browser/web_applications/components/web_app_helpers.h b/chrome/browser/web_applications/web_app_helpers.h similarity index 92% rename from chrome/browser/web_applications/components/web_app_helpers.h rename to chrome/browser/web_applications/web_app_helpers.h index 93ffd5c..80e044a 100644 --- a/chrome/browser/web_applications/components/web_app_helpers.h +++ b/chrome/browser/web_applications/web_app_helpers.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_WEB_APPLICATIONS_COMPONENTS_WEB_APP_HELPERS_H_ -#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_HELPERS_H_ +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_HELPERS_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_HELPERS_H_ #include <string> @@ -69,4 +69,4 @@ } // namespace web_app -#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_HELPERS_H_ +#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_HELPERS_H_
diff --git a/chrome/browser/web_applications/components/web_app_helpers_unittest.cc b/chrome/browser/web_applications/web_app_helpers_unittest.cc similarity index 97% rename from chrome/browser/web_applications/components/web_app_helpers_unittest.cc rename to chrome/browser/web_applications/web_app_helpers_unittest.cc index 4df7f37c..3089f2a 100644 --- a/chrome/browser/web_applications/components/web_app_helpers_unittest.cc +++ b/chrome/browser/web_applications/web_app_helpers_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/web_applications/components/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/chrome/browser/web_applications/web_app_icon_manager.cc b/chrome/browser/web_applications/web_app_icon_manager.cc index 0a9e1f5..206e8256 100644 --- a/chrome/browser/web_applications/web_app_icon_manager.cc +++ b/chrome/browser/web_applications/web_app_icon_manager.cc
@@ -22,11 +22,11 @@ #include "base/task/task_traits.h" #include "base/task/thread_pool.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/file_utils_wrapper.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "content/public/browser/browser_thread.h" #include "skia/ext/image_operations.h"
diff --git a/chrome/browser/web_applications/web_app_icon_manager_unittest.cc b/chrome/browser/web_applications/web_app_icon_manager_unittest.cc index 14b0bc3..5fda442 100644 --- a/chrome/browser/web_applications/web_app_icon_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_icon_manager_unittest.cc
@@ -17,9 +17,7 @@ #include "base/test/bind.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/test/test_file_utils.h" #include "chrome/browser/web_applications/test/test_web_app_database_factory.h" @@ -28,9 +26,11 @@ #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_profile.h" #include "extensions/common/constants.h"
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc index 6446ffe..b74bf34 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.cc +++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -19,25 +19,25 @@ #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/components/web_app_shortcuts_menu.h" #include "chrome/browser/web_applications/components/web_app_system_web_app_data.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/file_handlers_permission_helper.h" #include "chrome/browser/web_applications/isolation_prefs_utils.h" #include "chrome/browser/web_applications/manifest_update_task.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_installation_utils.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/webapps/browser/installable/installable_metrics.h"
diff --git a/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc b/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc index 9329f4b..ad1bfae 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_finalizer_unittest.cc
@@ -10,7 +10,6 @@ #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/test/bind.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -18,6 +17,7 @@ #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/test_web_app_ui_manager.h" #include "chrome/browser/web_applications/test/web_app_test.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h"
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc index 4e0aab8..17cf657 100644 --- a/chrome/browser/web_applications/web_app_install_manager.cc +++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -14,12 +14,12 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_data_retriever.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_task.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/webapps/browser/installable/installable_metrics.h" #include "content/public/browser/web_contents.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc index 26de8c6c..0d14c73 100644 --- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -19,9 +19,7 @@ #include "base/test/scoped_feature_list.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" @@ -36,11 +34,13 @@ #include "chrome/browser/web_applications/test/web_app_test_observers.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_task.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/test/base/testing_profile.h" #include "components/webapps/browser/installable/installable_metrics.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/web_applications/web_app_install_task.cc b/chrome/browser/web_applications/web_app_install_task.cc index 05a8f1b..a2cc61e 100644 --- a/chrome/browser/web_applications/web_app_install_task.cc +++ b/chrome/browser/web_applications/web_app_install_task.cc
@@ -20,14 +20,14 @@ #include "chrome/browser/web_applications/components/install_bounce_metric.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_data_retriever.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" #include "chrome/browser/web_applications/components/web_app_url_loader.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_installation_utils.h" #include "chrome/browser/web_applications/web_app_registrar.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/webapps/browser/installable/installable_manager.h" #include "components/webapps/browser/installable/installable_metrics.h"
diff --git a/chrome/browser/web_applications/web_app_install_task_unittest.cc b/chrome/browser/web_applications/web_app_install_task_unittest.cc index 680bcfa..0a18f6b 100644 --- a/chrome/browser/web_applications/web_app_install_task_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_task_unittest.cc
@@ -21,10 +21,8 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_icon_generator.h" #include "chrome/browser/web_applications/components/web_app_install_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/test/test_data_retriever.h" @@ -39,11 +37,13 @@ #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" #include "chrome/browser/web_applications/web_app_install_finalizer.h" #include "chrome/browser/web_applications/web_app_install_params.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h"
diff --git a/chrome/browser/web_applications/web_app_installation_utils_unittest.cc b/chrome/browser/web_applications/web_app_installation_utils_unittest.cc index 80420c9..3c93f28 100644 --- a/chrome/browser/web_applications/web_app_installation_utils_unittest.cc +++ b/chrome/browser/web_applications/web_app_installation_utils_unittest.cc
@@ -11,9 +11,9 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "components/services/app_service/public/cpp/share_target.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/abseil-cpp/absl/types/optional.h"
diff --git a/chrome/browser/web_applications/web_app_mover_browsertest.cc b/chrome/browser/web_applications/web_app_mover_browsertest.cc index 6b74468..736f1b8 100644 --- a/chrome/browser/web_applications/web_app_mover_browsertest.cc +++ b/chrome/browser/web_applications/web_app_mover_browsertest.cc
@@ -8,11 +8,11 @@ #include "base/test/bind.h" #include "base/test/scoped_feature_list.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/common/chrome_features.h"
diff --git a/chrome/browser/web_applications/web_app_proto_utils_unittest.cc b/chrome/browser/web_applications/web_app_proto_utils_unittest.cc index 9631ef3..c06e77a5 100644 --- a/chrome/browser/web_applications/web_app_proto_utils_unittest.cc +++ b/chrome/browser/web_applications/web_app_proto_utils_unittest.cc
@@ -7,9 +7,9 @@ #include <memory> #include "base/base64.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/proto/web_app.pb.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registrar.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc index defdfbd9..be95192a 100644 --- a/chrome/browser/web_applications/web_app_provider.cc +++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -12,12 +12,9 @@ #include "build/chromeos_buildflags.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/install_bounce_metric.h" -#include "chrome/browser/web_applications/components/url_handler_manager.h" -#include "chrome/browser/web_applications/components/url_handler_manager_impl.h" #include "chrome/browser/web_applications/components/web_app_audio_focus_id_map.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/components/web_app_ui_manager.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/daily_metrics_helper.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/externally_managed_app_manager_impl.h" @@ -28,6 +25,8 @@ #include "chrome/browser/web_applications/policy/web_app_policy_manager.h" #include "chrome/browser/web_applications/preinstalled_web_app_manager.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_manager.h" +#include "chrome/browser/web_applications/url_handler_manager.h" +#include "chrome/browser/web_applications/url_handler_manager_impl.h" #include "chrome/browser/web_applications/web_app_database_factory.h" #include "chrome/browser/web_applications/web_app_file_handler_manager.h" #include "chrome/browser/web_applications/web_app_icon_manager.h" @@ -39,6 +38,7 @@ #include "chrome/browser/web_applications/web_app_registrar.h" #include "chrome/browser/web_applications/web_app_shortcut_manager.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "components/pref_registry/pref_registry_syncable.h" #include "content/public/browser/web_contents.h"
diff --git a/chrome/browser/web_applications/web_app_provider_factory.cc b/chrome/browser/web_applications/web_app_provider_factory.cc index 27940c9..b3d6c60 100644 --- a/chrome/browser/web_applications/web_app_provider_factory.cc +++ b/chrome/browser/web_applications/web_app_provider_factory.cc
@@ -8,8 +8,8 @@ #include "chrome/browser/metrics/ukm_background_recorder_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/model_type_store_service_factory.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app_provider.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" namespace web_app {
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc index c2e03be..6b9b3ce 100644 --- a/chrome/browser/web_applications/web_app_registrar.cc +++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -19,12 +19,12 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/web_applications/components/app_registrar_observer.h" #include "chrome/browser/web_applications/components/install_bounce_metric.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/chrome_features.h" #include "content/public/common/content_features.h"
diff --git a/chrome/browser/web_applications/web_app_registrar_unittest.cc b/chrome/browser/web_applications/web_app_registrar_unittest.cc index eeaec823..8107a15 100644 --- a/chrome/browser/web_applications/web_app_registrar_unittest.cc +++ b/chrome/browser/web_applications/web_app_registrar_unittest.cc
@@ -17,11 +17,11 @@ #include "base/strings/string_number_conversions.h" #include "base/test/bind.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/test/test_web_app_database_factory.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc index 309a34c..54c6719 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -15,16 +15,16 @@ #include "base/metrics/user_metrics.h" #include "base/types/pass_key.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/web_applications/web_app_database.h" #include "chrome/browser/web_applications/web_app_database_factory.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_proto_utils.h" #include "chrome/browser/web_applications/web_app_registry_update.h" #include "chrome/browser/web_applications/web_app_sync_bridge.h" #include "chrome/browser/web_applications/web_app_sync_install_delegate.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "chrome/common/channel_info.h" #include "components/sync/base/model_type.h" #include "components/sync/base/report_unrecoverable_error.h"
diff --git a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc index 6ea96ef..177b8a4 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc
@@ -14,16 +14,16 @@ #include "base/strings/string_number_conversions.h" #include "base/test/bind.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/os_integration_manager.h" #include "chrome/browser/web_applications/test/test_web_app_database_factory.h" #include "chrome/browser/web_applications/test/test_web_app_registry_controller.h" #include "chrome/browser/web_applications/test/web_app_test.h" #include "chrome/browser/web_applications/test/web_app_test_observers.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/browser/web_applications/web_app_helpers.h" #include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/browser/web_applications/web_app_registry_update.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "components/sync/model/data_batch.h" #include "components/sync/model/entity_change.h" #include "components/sync/protocol/web_app_specifics.pb.h"
diff --git a/chrome/browser/web_applications/web_app_unittest.cc b/chrome/browser/web_applications/web_app_unittest.cc index 1693ac8..f10c16ad 100644 --- a/chrome/browser/web_applications/web_app_unittest.cc +++ b/chrome/browser/web_applications/web_app_unittest.cc
@@ -9,9 +9,9 @@ #include "base/json/json_reader.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/web_applications/components/web_app_constants.h" -#include "chrome/browser/web_applications/components/web_app_helpers.h" -#include "chrome/browser/web_applications/components/web_app_utils.h" #include "chrome/browser/web_applications/test/web_app_test_utils.h" +#include "chrome/browser/web_applications/web_app_helpers.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h"
diff --git a/chrome/browser/web_applications/web_app_utils.cc b/chrome/browser/web_applications/web_app_utils.cc index 911a3d93..b7c00af 100644 --- a/chrome/browser/web_applications/web_app_utils.cc +++ b/chrome/browser/web_applications/web_app_utils.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/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include "base/containers/contains.h" #include "base/files/file_path.h"
diff --git a/chrome/browser/web_applications/components/web_app_utils.h b/chrome/browser/web_applications/web_app_utils.h similarity index 95% rename from chrome/browser/web_applications/components/web_app_utils.h rename to chrome/browser/web_applications/web_app_utils.h index cfbd12f..eaeb769 100644 --- a/chrome/browser/web_applications/components/web_app_utils.h +++ b/chrome/browser/web_applications/web_app_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 CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_UTILS_H_ -#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_UTILS_H_ +#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UTILS_H_ +#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UTILS_H_ #include <string> #include <vector> @@ -116,4 +116,4 @@ } // namespace web_app -#endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_UTILS_H_ +#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UTILS_H_
diff --git a/chrome/browser/web_applications/components/web_app_utils_unittest.cc b/chrome/browser/web_applications/web_app_utils_unittest.cc similarity index 98% rename from chrome/browser/web_applications/components/web_app_utils_unittest.cc rename to chrome/browser/web_applications/web_app_utils_unittest.cc index 1fcc502..4f71a4a 100644 --- a/chrome/browser/web_applications/components/web_app_utils_unittest.cc +++ b/chrome/browser/web_applications/web_app_utils_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/web_applications/components/web_app_utils.h" +#include "chrome/browser/web_applications/web_app_utils.h" #include <memory>
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index b93f426d..a5d9035 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1630562205-935ac2899a7a40e9cf2810b331c845eaee47af07.profdata +chrome-linux-main-1630583822-9dbd587d31f3e4987f75fcf88083443cf148523d.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index 360e60e6..903ae7b 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1630562205-a0d8783e812a0eecc31190088aa6bf3fe775d82d.profdata +chrome-mac-main-1630583822-92e7205fa34df710b52afe6b864d52e3180dfb90.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index da4bc5a..36cdd2b 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1630572715-a520f799b4a590063e2b9767260b8ba9578ce5bd.profdata +chrome-win32-main-1630583822-7ff327a9188c7134808f4c1b8171faeb9efb4ef0.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index f27b4c4..58cab3c 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1630572715-b24172da1f6d16039e5278ece5673f54e2057688.profdata +chrome-win64-main-1630594347-1a86efde69553e51f9251c297be00a2db41152c6.profdata
diff --git a/chrome/common/chromeos/extensions/api/diagnostics.idl b/chrome/common/chromeos/extensions/api/diagnostics.idl index be5d0c6..408cd5b 100644 --- a/chrome/common/chromeos/extensions/api/diagnostics.idl +++ b/chrome/common/chromeos/extensions/api/diagnostics.idl
@@ -14,7 +14,8 @@ battery_discharge, battery_health, cpu_cache, - cpu_stress + cpu_stress, + memory }; enum RoutineStatus { @@ -87,5 +88,8 @@ // Starts CPU stress routine. [supportsPromises] static void runCpuStressRoutine(RunCpuRoutineRequest request, RunRoutineCallback callback); + + // Starts memory routine. + [supportsPromises] static void runMemoryRoutine(RunRoutineCallback callback); }; };
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl index 3588fac..2c483138 100644 --- a/chrome/common/extensions/api/file_manager_private.idl +++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -898,16 +898,6 @@ DOMString[] itemUrls; }; -dictionary OpenWindowParams { - // The desired target directory when opening a new window. If omitted Files - // app displays the default directory: MyFiles. - DOMString? currentDirectoryURL; - - // The URL for a file or directory to be selected once a new window is - // spawned. - DOMString? selectionURL; -}; - // Callback that does not take arguments. callback SimpleCallback = void(); @@ -1525,9 +1515,6 @@ // Notifies the browser of the result of a dialog displayed earlier as a // result of the onDriveConfirmDialog event. static void notifyDriveDialogResult(DriveDialogResult result); - - // Creates a new Files app window in the directory provided in `params`. - static void openWindow(OpenWindowParams params, BooleanCallback callback); }; // Events supported by fileManagerPrivate API. These events are broadcasted.
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc index 8acd468..4b97c29 100644 --- a/chrome/common/webui_url_constants.cc +++ b/chrome/common/webui_url_constants.cc
@@ -22,6 +22,7 @@ const char kChromeUIAboutHost[] = "about"; const char kChromeUIAboutURL[] = "chrome://about/"; const char kChromeUIAccessibilityHost[] = "accessibility"; +const char kChromeUIAllSitesPath[] = "/content/all"; const char kChromeUIAppIconHost[] = "app-icon"; const char kChromeUIAppIconURL[] = "chrome://app-icon/"; const char kChromeUIAppLauncherPageHost[] = "apps"; @@ -162,6 +163,7 @@ const char kChromeUISigninErrorURL[] = "chrome://signin-error/"; const char kChromeUISigninReauthHost[] = "signin-reauth"; const char kChromeUISigninReauthURL[] = "chrome://signin-reauth/"; +const char kChromeUISiteDataDeprecatedPath[] = "/siteData"; const char kChromeUISiteDetailsPrefixURL[] = "chrome://settings/content/siteDetails?site="; const char kChromeUISiteEngagementHost[] = "site-engagement";
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h index 6ba3390..aaa59a8 100644 --- a/chrome/common/webui_url_constants.h +++ b/chrome/common/webui_url_constants.h
@@ -30,6 +30,7 @@ extern const char kChromeUIAboutHost[]; extern const char kChromeUIAboutURL[]; extern const char kChromeUIAccessibilityHost[]; +extern const char kChromeUIAllSitesPath[]; extern const char kChromeUIAppIconHost[]; extern const char kChromeUIAppIconURL[]; extern const char kChromeUIAppLauncherPageHost[]; @@ -163,6 +164,7 @@ extern const char kChromeUISigninErrorURL[]; extern const char kChromeUISigninReauthHost[]; extern const char kChromeUISigninReauthURL[]; +extern const char kChromeUISiteDataDeprecatedPath[]; extern const char kChromeUISiteDetailsPrefixURL[]; extern const char kChromeUISiteEngagementHost[]; extern const char kChromeUISupervisedUserPassphrasePageHost[];
diff --git a/chrome/services/mac_notifications/mac_notification_service_un.h b/chrome/services/mac_notifications/mac_notification_service_un.h index 6b906d5..a0b73f6 100644 --- a/chrome/services/mac_notifications/mac_notification_service_un.h +++ b/chrome/services/mac_notifications/mac_notification_service_un.h
@@ -5,9 +5,14 @@ #ifndef CHROME_SERVICES_MAC_NOTIFICATIONS_MAC_NOTIFICATION_SERVICE_UN_H_ #define CHROME_SERVICES_MAC_NOTIFICATIONS_MAC_NOTIFICATION_SERVICE_UN_H_ +#include <vector> + +#include "base/containers/flat_map.h" #include "base/mac/scoped_nsobject.h" #include "base/memory/weak_ptr.h" #include "base/sequence_checker.h" +#include "base/time/time.h" +#include "base/timer/timer.h" #include "chrome/common/notifications/notification_image_retainer.h" #import "chrome/services/mac_notifications/notification_category_manager.h" #include "chrome/services/mac_notifications/public/mojom/mac_notifications.mojom.h" @@ -26,6 +31,10 @@ class API_AVAILABLE(macos(10.14)) MacNotificationServiceUN : public mojom::MacNotificationService { public: + // Timer interval used to synchronize displayed notifications. + static constexpr auto kSynchronizationInterval = + base::TimeDelta::FromMinutes(10); + MacNotificationServiceUN( mojo::PendingReceiver<mojom::MacNotificationService> service, mojo::PendingRemote<mojom::MacNotificationActionHandler> handler, @@ -49,6 +58,12 @@ // to accept permissions if not granted or denied already. void RequestPermission(); + // Called regularly while we think that notifications are on screen to detect + // when they get closed. + void ScheduleSynchronizeNotifications(); + void DoSynchronizeNotifications( + std::vector<mojom::NotificationIdentifierPtr> notifications); + // Called by |delegate_| when a user interacts with a notification. void OnNotificationAction(mojom::NotificationActionInfoPtr action); @@ -65,6 +80,11 @@ // Image retainer to pass image attachments to notifications. NotificationImageRetainer image_retainer_; + // Keeps track of delivered notifications to detect closed notifications. + base::flat_map<std::string, mojom::NotificationMetadataPtr> + delivered_notifications_ GUARDED_BY_CONTEXT(sequence_checker_); + base::RepeatingTimer synchronize_displayed_notifications_timer_; + // Ensures that the methods in this class are called on the same sequence. SEQUENCE_CHECKER(sequence_checker_); base::WeakPtrFactory<MacNotificationServiceUN> weak_factory_{this};
diff --git a/chrome/services/mac_notifications/mac_notification_service_un.mm b/chrome/services/mac_notifications/mac_notification_service_un.mm index 4c5ea639..2f94b9b 100644 --- a/chrome/services/mac_notifications/mac_notification_service_un.mm +++ b/chrome/services/mac_notifications/mac_notification_service_un.mm
@@ -84,6 +84,9 @@ namespace mac_notifications { +// static +constexpr base::TimeDelta MacNotificationServiceUN::kSynchronizationInterval; + MacNotificationServiceUN::MacNotificationServiceUN( mojo::PendingReceiver<mojom::MacNotificationService> service, mojo::PendingRemote<mojom::MacNotificationActionHandler> handler, @@ -100,6 +103,8 @@ LogUNNotificationSettings(notification_center_.get()); // TODO(crbug.com/1129366): Determine when to ask for permissions. RequestPermission(); + // Schedule a timer to regularly check for any closed notifications. + ScheduleSynchronizeNotifications(); } MacNotificationServiceUN::~MacNotificationServiceUN() { @@ -120,6 +125,9 @@ std::string notification_id = DeriveMacNotificationId(notification->meta->id); NSString* notification_id_ns = base::SysUTF8ToNSString(notification_id); + // Keep track of delivered notifications to detect when they get closed. + delivered_notifications_[notification_id] = notification->meta.Clone(); + // TODO(knollr): Also pass placeholder once we support inline replies. NotificationCategoryManager::Buttons buttons; for (const auto& button : notification->buttons) @@ -287,6 +295,7 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); [notification_center_ removeAllDeliveredNotifications]; category_manager_.ReleaseAllCategories(); + delivered_notifications_.clear(); } void MacNotificationServiceUN::RequestPermission() { @@ -306,6 +315,55 @@ completionHandler:resultHandler]; } +void MacNotificationServiceUN::ScheduleSynchronizeNotifications() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // base::Unretained is safe in the initial timer callback as the timer is + // owned by |this|. We use a weak ptr in the final result callback as that + // might be called by the system after |this| got deleted. + synchronize_displayed_notifications_timer_.Start( + FROM_HERE, kSynchronizationInterval, + base::BindRepeating( + &MacNotificationServiceUN::GetDisplayedNotifications, + base::Unretained(this), + /*profile=*/nullptr, + base::BindRepeating( + &MacNotificationServiceUN::DoSynchronizeNotifications, + weak_factory_.GetWeakPtr()))); +} + +void MacNotificationServiceUN::DoSynchronizeNotifications( + std::vector<mojom::NotificationIdentifierPtr> notifications) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + base::flat_map<std::string, mojom::NotificationMetadataPtr> + remaining_notifications; + + for (const auto& identifier : notifications) { + std::string notification_id = DeriveMacNotificationId(identifier); + auto existing = delivered_notifications_.find(notification_id); + if (existing == delivered_notifications_.end()) + continue; + + remaining_notifications[notification_id] = std::move(existing->second); + delivered_notifications_.erase(existing); + } + + auto closed_notifications = std::move(delivered_notifications_); + delivered_notifications_ = std::move(remaining_notifications); + std::vector<std::string> closed_notification_ids; + + for (auto& entry : closed_notifications) { + closed_notification_ids.push_back(entry.first); + auto action_info = mojom::NotificationActionInfo::New( + std::move(entry.second), NotificationOperation::kClose, + kNotificationInvalidButtonIndex, + /*reply=*/absl::nullopt); + action_handler_->OnNotificationAction(std::move(action_info)); + } + + if (!closed_notification_ids.empty()) + OnNotificationsClosed(closed_notification_ids); +} + void MacNotificationServiceUN::OnNotificationAction( mojom::NotificationActionInfoPtr action) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -320,6 +378,8 @@ const std::vector<std::string>& notification_ids) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); category_manager_.ReleaseCategories(notification_ids); + for (const auto& notification_id : notification_ids) + delivered_notifications_.erase(notification_id); } } // namespace mac_notifications
diff --git a/chrome/services/mac_notifications/mac_notification_service_un_unittest.mm b/chrome/services/mac_notifications/mac_notification_service_un_unittest.mm index 7aac942..5c35ba4 100644 --- a/chrome/services/mac_notifications/mac_notification_service_un_unittest.mm +++ b/chrome/services/mac_notifications/mac_notification_service_un_unittest.mm
@@ -145,7 +145,7 @@ for (const auto& notification : notifications) [notifications_ns addObject:notification.get()]; - [[[mock_notification_center_ expect] andDo:^(NSInvocation* invocation) { + [[[mock_notification_center_ stub] andDo:^(NSInvocation* invocation) { __unsafe_unretained void (^callback)(NSArray* _Nonnull toasts); [invocation getArgument:&callback atIndex:2]; callback(notifications_ns); @@ -207,7 +207,8 @@ /*icon=*/gfx::ImageSkia()); } - base::test::TaskEnvironment task_environment_; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::TimeSource::MOCK_TIME}; MockNotificationActionHandler mock_handler_; mojo::Receiver<mojom::MacNotificationActionHandler> handler_receiver_{ &mock_handler_}; @@ -318,6 +319,35 @@ } } +TEST_F(MacNotificationServiceUNTest, SynchronizesNotifications) { + if (@available(macOS 10.14, *)) { + // Setup 4 notifications that are being returned by system APIs too. + auto notifications = SetupNotifications(); + ASSERT_EQ(4u, GetDisplayedNotificationsSync(/*profile=*/nullptr).size()); + + // Display a notification which won't be reflected in the system APIs. + DisplayNotificationSync("notificationId3", "profileId", /*incognito=*/true); + ASSERT_EQ(4u, GetDisplayedNotificationsSync(/*profile=*/nullptr).size()); + + // Wait until the notification synchronization timer kicks in and expect it + // to detect the missing notification. + base::RunLoop run_loop; + base::Time start_time = base::Time::Now(); + EXPECT_CALL(mock_handler_, OnNotificationAction) + .WillOnce([&](mojom::NotificationActionInfoPtr action_info) { + EXPECT_EQ(NotificationOperation::kClose, action_info->operation); + EXPECT_EQ(kNotificationInvalidButtonIndex, action_info->button_index); + EXPECT_EQ("notificationId3", action_info->meta->id->id); + EXPECT_EQ("profileId", action_info->meta->id->profile->id); + EXPECT_EQ(MacNotificationServiceUN::kSynchronizationInterval, + base::Time::Now() - start_time); + run_loop.Quit(); + }); + run_loop.Run(); + testing::Mock::VerifyAndClearExpectations(&mock_handler_); + } +} + TEST_F(MacNotificationServiceUNTest, CloseProfileNotifications) { if (@available(macOS 10.14, *)) { auto notifications = SetupNotifications();
diff --git a/chrome/test/data/tooltip_two_buttons.html b/chrome/test/data/tooltip_two_buttons.html new file mode 100644 index 0000000..f4c0975caf --- /dev/null +++ b/chrome/test/data/tooltip_two_buttons.html
@@ -0,0 +1,6 @@ +<html> + <body> + <button id="b1" title="my tooltip 1">Button 1</button> + <button id="b2" title="my tooltip 2">Button 2</button> + </body> +</html> \ No newline at end of file
diff --git a/chrome/test/data/webui/chromeos/scanning/scanner_select_test.js b/chrome/test/data/webui/chromeos/scanning/scanner_select_test.js index 6d5df9a..73c79a1 100644 --- a/chrome/test/data/webui/chromeos/scanning/scanner_select_test.js +++ b/chrome/test/data/webui/chromeos/scanning/scanner_select_test.js
@@ -10,7 +10,7 @@ import {getScannerDisplayName, tokenToString} from 'chrome://scanning/scanning_app_util.js'; import {assertEquals, assertFalse, assertTrue} from '../../chai_assert.js'; -import {flushTasks} from '../../test_util.js'; +import {waitAfterNextRender} from '../../test_util.js'; import {assertOrderedAlphabetically, createScanner} from './scanning_app_test_utils.js'; @@ -97,7 +97,7 @@ scannerSelect.lastUsedScannerId = secondScannerIdString; scannerSelect.scanners = scanners; - return flushTasks().then(() => { + return waitAfterNextRender(scannerSelect).then(() => { assertEquals(secondScannerIdString, scannerSelect.selectedScannerId); assertEquals(secondScannerIdString, scannerSelect.$$('select').value); }); @@ -119,7 +119,7 @@ scannerSelect.scanners = scanners; const firstScannerIdString = tokenToString(firstScannerId); - return flushTasks().then(() => { + return waitAfterNextRender(scannerSelect).then(() => { assertEquals(firstScannerIdString, scannerSelect.selectedScannerId); assertEquals(firstScannerIdString, scannerSelect.$$('select').value); });
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js index ac14ff0a..96dd518 100644 --- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js +++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -12,7 +12,7 @@ import {ScanningBrowserProxyImpl} from 'chrome://scanning/scanning_browser_proxy.js'; import {assertArrayEquals, assertEquals, assertFalse, assertNotEquals, assertTrue} from '../../chai_assert.js'; -import {flushTasks, isVisible} from '../../test_util.js'; +import {flushTasks, isVisible, waitAfterNextRender} from '../../test_util.js'; import {changeSelect, createScanner, createScannerSource} from './scanning_app_test_utils.js'; import {TestScanningBrowserProxy} from './test_scanning_browser_proxy.js'; @@ -571,7 +571,7 @@ */ function getScannerCapabilities() { return fakeScanService_.whenCalled('getScannerCapabilities').then(() => { - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }); } @@ -852,7 +852,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -936,7 +936,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -1083,7 +1083,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -1154,7 +1154,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -1222,7 +1222,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -1315,7 +1315,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -1414,7 +1414,7 @@ .then(() => { scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { scanningApp.multiPageScanChecked = true; @@ -2418,7 +2418,7 @@ .then(() => { scanningApp.selectedSource = ADF_DUPLEX; scanningApp.selectedFileType = FileType.PNG.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { assertFalse(isVisible( @@ -2427,7 +2427,7 @@ scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PNG.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { assertFalse(isVisible( @@ -2436,7 +2436,7 @@ scanningApp.selectedSource = ADF_DUPLEX; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { assertFalse(isVisible( @@ -2445,7 +2445,7 @@ scanningApp.selectedSource = PLATEN; scanningApp.selectedFileType = FileType.PDF.toString(); - return flushTasks(); + return waitAfterNextRender(/** @type {!HTMLElement} */ (scanningApp)); }) .then(() => { assertTrue(isVisible(
diff --git a/chrome/test/data/webui/settings/cookies_page_test.js b/chrome/test/data/webui/settings/cookies_page_test.js index dd1904f8..42dc37e 100644 --- a/chrome/test/data/webui/settings/cookies_page_test.js +++ b/chrome/test/data/webui/settings/cookies_page_test.js
@@ -27,6 +27,12 @@ /** @type {!SettingsCookiesPageElement} */ let page; + suiteSetup(function() { + loadTimeData.overrideValues({ + consolidatedSiteStorageControlsEnabled: false, + }); + }); + setup(function() { testMetricsBrowserProxy = new TestMetricsBrowserProxy(); MetricsBrowserProxyImpl.setInstance(testMetricsBrowserProxy); @@ -51,6 +57,7 @@ teardown(function() { page.remove(); + Router.getInstance().resetRouteForTesting(); }); test('ElementVisibility', async function() { @@ -69,12 +76,6 @@ assertEquals(PrivacyElementInteractions.NETWORK_PREDICTION, result); }); - test('CookiesSiteDataSubpageRoute', function() { - page.shadowRoot.querySelector('#site-data-trigger').click(); - assertEquals( - Router.getInstance().getCurrentRoute(), routes.SITE_SETTINGS_SITE_DATA); - }); - test('CookiesRadioClicksRecorded', async function() { page.shadowRoot.querySelector('#blockAll').click(); let result = @@ -254,4 +255,66 @@ await flushTasks(); assertFalse(page.shadowRoot.querySelector('#toast').open); }); + + test('AllSiteDataLink_consolidatedControlsDisabled', function() { + const siteDataLinkRow = page.shadowRoot.querySelector('#site-data-trigger'); + assertEquals(siteDataLinkRow.label, page.i18n('siteSettingsCookieLink')); + + siteDataLinkRow.click(); + assertEquals( + Router.getInstance().getCurrentRoute(), routes.SITE_SETTINGS_SITE_DATA); + }); +}); + +suite('CrSettingsCookiesPageTest_consolidatedControlsEnabled', function() { + /** @type {!TestSiteSettingsPrefsBrowserProxy} */ + let siteSettingsBrowserProxy; + + /** @type {!TestMetricsBrowserProxy} */ + let testMetricsBrowserProxy; + + /** @type {!SettingsCookiesPageElement} */ + let page; + + suiteSetup(function() { + loadTimeData.overrideValues({ + consolidatedSiteStorageControlsEnabled: true, + }); + }); + + setup(function() { + testMetricsBrowserProxy = new TestMetricsBrowserProxy(); + MetricsBrowserProxyImpl.setInstance(testMetricsBrowserProxy); + siteSettingsBrowserProxy = new TestSiteSettingsPrefsBrowserProxy(); + SiteSettingsPrefsBrowserProxyImpl.instance_ = siteSettingsBrowserProxy; + document.body.innerHTML = ''; + page = /** @type {!SettingsCookiesPageElement} */ ( + document.createElement('settings-cookies-page')); + page.prefs = { + generated: { + cookie_session_only: {value: false}, + cookie_primary_setting: + {type: chrome.settingsPrivate.PrefType.NUMBER, value: 0}, + }, + privacy_sandbox: { + apis_enabled: {value: true}, + } + }; + document.body.appendChild(page); + flush(); + }); + + teardown(function() { + page.remove(); + Router.getInstance().resetRouteForTesting(); + }); + + test('AllSiteDataLink_consolidatedControlsEnabled', function() { + const siteDataLinkRow = page.shadowRoot.querySelector('#site-data-trigger'); + assertEquals(siteDataLinkRow.label, page.i18n('cookiePageAllSitesLink')); + + siteDataLinkRow.click(); + assertEquals( + Router.getInstance().getCurrentRoute(), routes.SITE_SETTINGS_ALL); + }); });
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index 6c77c94..ce5bb2f7 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -1399,6 +1399,9 @@ <message name="IDS_NETWORK_DIAGNOSTICS_GOOGLE_SERVICES_GROUP" desc="Label for the group of network diagnostic routines about connecting to Google services"> Google Services </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_GROUP" desc="Label for the group of network diagnostic routines about connectivity inside Android"> + Android + </message> <message name="IDS_NETWORK_DIAGNOSTICS_LAN_CONNECTIVITY" desc="Label for Network diagnostics `LAN connectivity` test. This test determines if the device is connected to a Local Area Network (LAN)"> Lan Connectivity </message> @@ -1435,6 +1438,9 @@ <message name="IDS_NETWORK_DIAGNOSTICS_VIDEO_CONFERENCING" desc="Label for Network diagnostics `Video Conferencing` test. This test ensures that the device can communicate with Google's video conferencing servers"> Video Conferencing </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_LATENCY" desc="Label for Network diagnostics `ARC HTTP` test. This test ensures that the device's http requests inside ARC have an acceptable amount of latency"> + HTTP Latency + </message> <message name="IDS_NETWORK_DIAGNOSTICS_PASSED" desc="Label shown when a Network diagnostics routine passed"> Passed </message> @@ -1534,6 +1540,21 @@ <message name="IDS_NETWORK_DIAGNOSTICS_HTTPS_LATENCY_PROBLEM_VERY_HIGH_LATENCY" desc="Error message shown when HTTPS requests have a very high latency"> Very high HTTPS latency </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_FAILED_HTTP_REQUESTS" desc="Error message shown when there are one or more failed HTTP requests"> + Failed HTTP requests + </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_HIGH_LATENCY" desc="Error message shown when HTTP requests inside ARC have a high latency"> + High HTTP latency + </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_VERY_HIGH_LATENCY" desc="Error message shown when HTTP requests inside ARC have a very high latency"> + Very high HTTP latency + </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_INTERNAL_ERROR" desc="Error message shown when ARC diagnostic test fails due to an unexpected internal problem"> + Internal error + </message> + <message name="IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_ARC_NOT_RUNNING" desc="Error message shown when ARC diagnostic test cannot run because ARC is either disabled or crashed"> + Android not running + </message> <message name="IDS_NETWORK_DIAGNOSTICS_CAPTIVE_PORTAL_PROBLEM_NO_ACTIVE_NETWORKS" desc="Error message shown when the device is not actively connected to a network"> No active networks </message>
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_GROUP.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_GROUP.png.sha1 new file mode 100644 index 0000000..353bf8a --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_GROUP.png.sha1
@@ -0,0 +1 @@ +a9fcc5cd8aac1fccf901a1d686de9761082abffa \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_LATENCY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_LATENCY.png.sha1 new file mode 100644 index 0000000..353bf8a --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_LATENCY.png.sha1
@@ -0,0 +1 @@ +a9fcc5cd8aac1fccf901a1d686de9761082abffa \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_FAILED_HTTP_REQUESTS.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_FAILED_HTTP_REQUESTS.png.sha1 new file mode 100644 index 0000000..9337952 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_FAILED_HTTP_REQUESTS.png.sha1
@@ -0,0 +1 @@ +071365b1d634e7140bffbee620950464de1ecb8f \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_HIGH_LATENCY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_HIGH_LATENCY.png.sha1 new file mode 100644 index 0000000..e573d22 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_HIGH_LATENCY.png.sha1
@@ -0,0 +1 @@ +3047266dc45c99d366f951993b101cd3123cb513 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_VERY_HIGH_LATENCY.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_VERY_HIGH_LATENCY.png.sha1 new file mode 100644 index 0000000..f24fce3 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_VERY_HIGH_LATENCY.png.sha1
@@ -0,0 +1 @@ +877f337b1cc1c860522263b6e5f921b10d49d9be \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_ARC_NOT_RUNNING.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_ARC_NOT_RUNNING.png.sha1 new file mode 100644 index 0000000..b04d564 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_ARC_NOT_RUNNING.png.sha1
@@ -0,0 +1 @@ +327ad4d8ba7da07c2b4186a179160fd05c922748 \ No newline at end of file
diff --git a/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_INTERNAL_ERROR.png.sha1 b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_INTERNAL_ERROR.png.sha1 new file mode 100644 index 0000000..5696d67 --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_INTERNAL_ERROR.png.sha1
@@ -0,0 +1 @@ +839ab98ab8c6b7c2a1bf984c0d12983f641daed4 \ No newline at end of file
diff --git a/chromeos/components/network_ui/network_diagnostics_resource_provider.cc b/chromeos/components/network_ui/network_diagnostics_resource_provider.cc index 0f1d45e..9cb7a87 100644 --- a/chromeos/components/network_ui/network_diagnostics_resource_provider.cc +++ b/chromeos/components/network_ui/network_diagnostics_resource_provider.cc
@@ -34,6 +34,11 @@ {"NetworkDiagnosticsCaptivePortal", IDS_NETWORK_DIAGNOSTICS_CAPTIVE_PORTAL}, {"NetworkDiagnosticsVideoConferencing", IDS_NETWORK_DIAGNOSTICS_VIDEO_CONFERENCING}, + {"ArcNetworkDiagnosticsPing", + IDS_NETWORK_DIAGNOSTICS_GATEWAY_CAN_BE_PINGED}, + {"ArcNetworkDiagnosticsHttp", IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_LATENCY}, + {"ArcNetworkDiagnosticsDnsResolution", + IDS_NETWORK_DIAGNOSTICS_DNS_RESOLUTION}, {"NetworkDiagnosticsConnectionGroup", IDS_NETWORK_DIAGNOSTICS_CONNECTION_GROUP}, {"NetworkDiagnosticsWifiGroup", IDS_NETWORK_DIAGNOSTICS_WIFI_GROUP}, @@ -42,6 +47,7 @@ {"NetworkDiagnosticsDnsGroup", IDS_NETWORK_DIAGNOSTICS_DNS_GROUP}, {"NetworkDiagnosticsGoogleServicesGroup", IDS_NETWORK_DIAGNOSTICS_GOOGLE_SERVICES_GROUP}, + {"NetworkDiagnosticsArcGroup", IDS_NETWORK_DIAGNOSTICS_ARC_GROUP}, {"NetworkDiagnosticsPassed", IDS_NETWORK_DIAGNOSTICS_PASSED}, {"NetworkDiagnosticsFailed", IDS_NETWORK_DIAGNOSTICS_FAILED}, {"NetworkDiagnosticsNotRun", IDS_NETWORK_DIAGNOSTICS_NOT_RUN}, @@ -97,6 +103,16 @@ IDS_NETWORK_DIAGNOSTICS_HTTPS_LATENCY_PROBLEM_HIGH_LATENCY}, {"HttpsLatencyProblem_VeryHighLatency", IDS_NETWORK_DIAGNOSTICS_HTTPS_LATENCY_PROBLEM_VERY_HIGH_LATENCY}, + {"ArcHttpProblem_FailedHttpRequests", + IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_FAILED_HTTP_REQUESTS}, + {"ArcHttpProblem_HighLatency", + IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_HIGH_LATENCY}, + {"ArcHttpProblem_VeryHighLatency", + IDS_NETWORK_DIAGNOSTICS_ARC_HTTP_PROBLEM_VERY_HIGH_LATENCY}, + {"ArcRoutineProblem_InternalError", + IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_INTERNAL_ERROR}, + {"ArcRoutineProblem_ArcNotRunning", + IDS_NETWORK_DIAGNOSTICS_ARC_ROUTINE_PROBLEM_ARC_NOT_RUNNING}, {"CaptivePortalProblem_NoActiveNetworks", IDS_NETWORK_DIAGNOSTICS_CAPTIVE_PORTAL_PROBLEM_NO_ACTIVE_NETWORKS}, {"CaptivePortalProblem_UnknownPortalState",
diff --git a/chromeos/components/personalization_app/resources/untrusted/collections_grid.html b/chromeos/components/personalization_app/resources/untrusted/collections_grid.html index 66daf5d7..145d781f 100644 --- a/chromeos/components/personalization_app/resources/untrusted/collections_grid.html +++ b/chromeos/components/personalization_app/resources/untrusted/collections_grid.html
@@ -47,14 +47,15 @@ tabindex$="[[tabIndex]]" role="button"> <div class$="[[getClassForImagesContainer_(item)]]"> <template is="dom-repeat" items="[[item.preview]]" as="preview"> - <img src="[[preview.url]]" aria-hidden="true"> + <img src="[[preview.url]]" aria-hidden="true" + on-load="onImgLoad_" on-error="onImgLoad_"> </template> </div> - <div class="photo-text-container"> + <div class="photo-text-container" hidden> <p title$="[[item.name]]">[[item.name]]</p> <p title$="[[item.count]]">[[item.count]]</p> </div> - <div class="photo-gradient-mask"></div> + <div class="photo-gradient-mask" hidden></div> </div> </template> </div>
diff --git a/chromeos/components/personalization_app/resources/untrusted/collections_grid.js b/chromeos/components/personalization_app/resources/untrusted/collections_grid.js index fd302e2..ebbc91a7 100644 --- a/chromeos/components/personalization_app/resources/untrusted/collections_grid.js +++ b/chromeos/components/personalization_app/resources/untrusted/collections_grid.js
@@ -125,7 +125,7 @@ }; } -class CollectionsGrid extends PolymerElement { +export class CollectionsGrid extends PolymerElement { static get is() { return 'collections-grid'; } @@ -414,6 +414,20 @@ getLoadingPlaceholderAnimationDelay(index) { return getLoadingPlaceholderAnimationDelay(index); } + + /** + * Make the text and background gradient visible again after the image has + * finished loading. This is called for both on-load and on-error, as either + * event should make the text visible again. + * @param {!Event} event + * @private + */ + onImgLoad_(event) { + const parent = event.currentTarget.closest('.photo-inner-container'); + for (const elem of parent.querySelectorAll('[hidden]')) { + elem.removeAttribute('hidden'); + } + } } customElements.define(CollectionsGrid.is, CollectionsGrid);
diff --git a/chromeos/components/phonehub/proto/phonehub_api.proto b/chromeos/components/phonehub/proto/phonehub_api.proto index 4d148ad..40b4c757 100644 --- a/chromeos/components/phonehub/proto/phonehub_api.proto +++ b/chromeos/components/phonehub/proto/phonehub_api.proto
@@ -284,3 +284,36 @@ // The up-to-date set of camera roll items that should be displayed. repeated CameraRollItem items = 1; } + +// A command to request a full-quality photo or video file from the connected +// Android device. +message FetchCameraRollItemDataRequest { + // Metadata of the requested camera roll item. + CameraRollItemMetadata metadata = 1; +} + +message FetchCameraRollItemDataResponse { + enum FileAvailability { + UNKNOWN = 0; + AVAILABLE = 1; + NOT_FOUND = 2; + } + // Indicates whether the requested file is available and can be sent to the + // Chrome OS device. + FileAvailability file_availability = 1; + // A payload ID that the Chrome OS device should use to create a new local + // file for storing the incoming file content via the Nearby Connections API. + int64 payload_id = 2; +} + +// A command to let the connected Android device start transferring the +// requested camera roll item via Nearby Connections. This should be issued +// after the Chrome OS device has allocated a new file with the provided payload +// ID. +message InitiateCameraRollItemTransferRequest { + // Metadata of the camera roll item requested. + CameraRollItemMetadata metadata = 1; + // The payload ID provided by the connected Android device for the requested + // camera roll item. + int64 payload_id = 2; +}
diff --git a/components/accuracy_tips/accuracy_service.cc b/components/accuracy_tips/accuracy_service.cc index 1fad4a0..f93b2ac 100644 --- a/components/accuracy_tips/accuracy_service.cc +++ b/components/accuracy_tips/accuracy_service.cc
@@ -160,7 +160,8 @@ bool show_opt_out = pref_service_->GetList(GetPreviousInteractionsPrefName(disable_ui_)) - ->GetSize() >= static_cast<size_t>(features::kNumIgnorePrompts.Get()); + ->GetList() + .size() >= static_cast<size_t>(features::kNumIgnorePrompts.Get()); url_for_last_shown_tip_ = web_contents->GetLastCommittedURL(); @@ -283,7 +284,8 @@ int interactions_count = pref_service_->GetList(GetPreviousInteractionsPrefName(disable_ui_)) - ->GetSize(); + ->GetList() + .size(); return interactions_count >= features::kMinPromptCountRequiredForSurvey.Get(); }
diff --git a/components/autofill_assistant/browser/service/service_request_sender_impl.cc b/components/autofill_assistant/browser/service/service_request_sender_impl.cc index d7763cf..5ba58ae 100644 --- a/components/autofill_assistant/browser/service/service_request_sender_impl.cc +++ b/components/autofill_assistant/browser/service/service_request_sender_impl.cc
@@ -72,7 +72,7 @@ auto loader = loader_factory->CreateLoader(std::move(request), kTrafficAnnotation); loader->AttachStringForUpload(request_body, "application/x-protobuffer"); -#ifdef DEBUG +#ifndef NDEBUG loader->SetAllowHttpErrorResults(true); #endif auto* const loader_ptr = loader.get(); @@ -106,7 +106,11 @@ add_key.SetQueryStr(query_str); GURL modified_url = url.ReplaceComponents(add_key); +#ifdef NDEBUG VLOG(2) << "Sending request with api key to backend"; +#else + VLOG(2) << "Sending request with api key to backend: " << modified_url; +#endif SendRequestImpl(CreateResourceRequest(modified_url), request_body, context, loader_factory, std::move(callback)); } @@ -193,7 +197,11 @@ weak_ptr_factory_.GetWeakPtr(), url, access_token, request_body, std::move(callback)); } +#ifdef NDEBUG VLOG(2) << "Sending request with access token to backend"; +#else + VLOG(2) << "Sending request with access token to backend: " << url; +#endif SendRequestImpl(std::move(resource_request), request_body, context_, loader_factory_.get(), std::move(callback)); }
diff --git a/components/bookmarks/browser/BUILD.gn b/components/bookmarks/browser/BUILD.gn index bbed618f..a4d632e 100644 --- a/components/bookmarks/browser/BUILD.gn +++ b/components/bookmarks/browser/BUILD.gn
@@ -21,6 +21,7 @@ "bookmark_undo_delegate.h", "bookmark_undo_provider.h", "bookmark_utils.h", + "features.h", "history_bookmark_model.h", "model_loader.h", "scoped_group_bookmark_actions.h", @@ -43,6 +44,7 @@ "bookmark_node_data.cc", "bookmark_storage.cc", "bookmark_utils.cc", + "features.cc", "model_loader.cc", "scoped_group_bookmark_actions.cc", "titled_url_index.cc",
diff --git a/components/bookmarks/browser/bookmark_utils.cc b/components/bookmarks/browser/bookmark_utils.cc index 615cd9e..9180fa9 100644 --- a/components/bookmarks/browser/bookmark_utils.cc +++ b/components/bookmarks/browser/bookmark_utils.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/containers/contains.h" +#include "base/feature_list.h" #include "base/files/file_path.h" #include "base/guid.h" #include "base/i18n/case_conversion.h" @@ -24,6 +25,7 @@ #include "build/build_config.h" #include "components/bookmarks/browser/bookmark_client.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "components/bookmarks/browser/features.h" #include "components/bookmarks/browser/scoped_group_bookmark_actions.h" #include "components/bookmarks/common/bookmark_pref_names.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -440,7 +442,8 @@ registry->RegisterBooleanPref(prefs::kEditBookmarksEnabled, true); registry->RegisterBooleanPref( prefs::kShowAppsShortcutInBookmarkBar, - true, + base::FeatureList::IsEnabled(features::kAppsShortcutDefaultOff) ? false + : true, user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); registry->RegisterBooleanPref( prefs::kShowReadingListInBookmarkBar, true,
diff --git a/components/bookmarks/browser/features.cc b/components/bookmarks/browser/features.cc new file mode 100644 index 0000000..40f5bf9f --- /dev/null +++ b/components/bookmarks/browser/features.cc
@@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/bookmarks/browser/features.h" + +namespace bookmarks { +namespace features { + +// Changes the apps shortcut on the bookmarks bar to default to off. +// https://crbug.com/1236793 +const base::Feature kAppsShortcutDefaultOff{"AppsShortcutDefaultOff", + base::FEATURE_DISABLED_BY_DEFAULT}; + +} // namespace features +} // namespace bookmarks
diff --git a/components/bookmarks/browser/features.h b/components/bookmarks/browser/features.h new file mode 100644 index 0000000..5aa1e1ffc --- /dev/null +++ b/components/bookmarks/browser/features.h
@@ -0,0 +1,18 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_BOOKMARKS_BROWSER_FEATURES_H_ +#define COMPONENTS_BOOKMARKS_BROWSER_FEATURES_H_ + +#include "base/feature_list.h" + +namespace bookmarks { +namespace features { + +extern const base::Feature kAppsShortcutDefaultOff; + +} // namespace features +} // namespace bookmarks + +#endif // COMPONENTS_BOOKMARKS_BROWSER_FEATURES_H_
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc index ab94feb..24a54b3 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats.cc
@@ -484,7 +484,7 @@ const char* pref_name) { ContentLengthList content_lengths; const base::ListValue* list_value = GetList(pref_name); - if (list_value->GetSize() == kNumDaysInHistory) { + if (list_value->GetList().size() == kNumDaysInHistory) { for (size_t i = 0; i < kNumDaysInHistory; ++i) content_lengths.push_back(GetInt64PrefValue(*list_value, i)); } @@ -503,8 +503,8 @@ const base::ListValue* received_list = GetList(prefs::kDailyHttpReceivedContentLength); - if (original_list->GetSize() != kNumDaysInHistory || - received_list->GetSize() != kNumDaysInHistory) { + if (original_list->GetList().size() != kNumDaysInHistory || + received_list->GetList().size() != kNumDaysInHistory) { *original_content_length = 0L; *received_content_length = 0L; *last_update_time = 0L;
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc index 5d5c9878..6b82c93 100644 --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_compression_stats_unittest.cc
@@ -186,8 +186,8 @@ void VerifyPrefListWasWritten(const char* pref) { const base::ListValue* delayed_list = compression_stats_->GetList(pref); const base::ListValue* written_list = pref_service()->GetList(pref); - ASSERT_EQ(delayed_list->GetSize(), written_list->GetSize()); - size_t count = delayed_list->GetSize(); + ASSERT_EQ(delayed_list->GetList().size(), written_list->GetList().size()); + size_t count = delayed_list->GetList().size(); for (size_t i = 0; i < count; ++i) { EXPECT_EQ(GetListPrefInt64Value(*delayed_list, i), @@ -231,7 +231,8 @@ size_t num_days_in_history) { ASSERT_GE(num_days_in_history, count); base::ListValue* update = compression_stats_->GetList(pref); - ASSERT_EQ(num_days_in_history, update->GetSize()) << "Pref: " << pref; + ASSERT_EQ(num_days_in_history, update->GetList().size()) + << "Pref: " << pref; for (size_t i = 0; i < count; ++i) { EXPECT_EQ(values[i],
diff --git a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java index 400c55c..9bb3eb9 100644 --- a/components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java +++ b/components/embedder_support/android/java/src/org/chromium/components/embedder_support/util/UrlConstants.java
@@ -77,6 +77,9 @@ public static final String GOOGLE_ACCOUNT_ACTIVITY_CONTROLS_URL = "https://myaccount.google.com/activitycontrols/search"; + public static final String GOOGLE_ACCOUNT_DEVICE_ACTIVITY_URL = + "https://myaccount.google.com/device-activity"; + public static final String GOOGLE_SEARCH_HISTORY_URL_IN_CBD = "https://myactivity.google.com/product/search?utm_source=chrome_cbd";
diff --git a/components/embedder_support/origin_trials/component_updater_utils_unittest.cc b/components/embedder_support/origin_trials/component_updater_utils_unittest.cc index f43931f..2744acb 100644 --- a/components/embedder_support/origin_trials/component_updater_utils_unittest.cc +++ b/components/embedder_support/origin_trials/component_updater_utils_unittest.cc
@@ -96,7 +96,7 @@ embedder_support::prefs::kOriginTrialDisabledFeatures); ASSERT_TRUE(disabled_feature_list); - ASSERT_EQ(features.size(), disabled_feature_list->GetSize()); + ASSERT_EQ(features.size(), disabled_feature_list->GetList().size()); std::string disabled_feature; for (size_t i = 0; i < features.size(); ++i) { @@ -130,7 +130,7 @@ embedder_support::prefs::kOriginTrialDisabledTokens); ASSERT_TRUE(disabled_token_list); - ASSERT_EQ(tokens.size(), disabled_token_list->GetSize()); + ASSERT_EQ(tokens.size(), disabled_token_list->GetList().size()); std::string disabled_token; for (size_t i = 0; i < tokens.size(); ++i) {
diff --git a/components/login/base_screen_handler_utils.cc b/components/login/base_screen_handler_utils.cc index 232705347..f08da2a 100644 --- a/components/login/base_screen_handler_utils.cc +++ b/components/login/base_screen_handler_utils.cc
@@ -16,8 +16,8 @@ const base::ListValue* list = nullptr; if (!value->GetAsList(&list)) return false; - out_value->resize(list->GetSize()); - for (size_t i = 0; i < list->GetSize(); ++i) { + out_value->resize(list->GetList().size()); + for (size_t i = 0; i < list->GetList().size(); ++i) { if (!list->GetString(i, &((*out_value)[i]))) return false; }
diff --git a/components/login/base_screen_handler_utils.h b/components/login/base_screen_handler_utils.h index 4f38955..49518d89 100644 --- a/components/login/base_screen_handler_utils.h +++ b/components/login/base_screen_handler_utils.h
@@ -87,7 +87,7 @@ const base::ListValue* args, std::index_sequence<Ns...> indexes) { DCHECK(args); - DCHECK_EQ(sizeof...(Args), args->GetSize()); + DCHECK_EQ(sizeof...(Args), args->GetList().size()); callback.Run(ParseArg<Args, Ns>(args)...); }
diff --git a/components/media_message_center/media_notification_view_modern_impl.cc b/components/media_message_center/media_notification_view_modern_impl.cc index 731f91b1..a844c144 100644 --- a/components/media_message_center/media_notification_view_modern_impl.cc +++ b/components/media_message_center/media_notification_view_modern_impl.cc
@@ -29,8 +29,10 @@ #include "ui/gfx/paint_vector_icon.h" #include "ui/gfx/skia_util.h" #include "ui/message_center/public/cpp/message_center_constants.h" +#include "ui/views/animation/ink_drop.h" #include "ui/views/border.h" #include "ui/views/controls/button/image_button_factory.h" +#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/layout/box_layout.h" #include "ui/views/style/typography.h" #include "ui/views/view_class_properties.h" @@ -71,7 +73,6 @@ constexpr gfx::Size kPlayPauseButtonSize = {32, 32}; constexpr int kMediaButtonIconSize = 14; constexpr int kPlayPauseIconSize = 20; -constexpr int kMediaButtonBorderThickness = 1; constexpr gfx::Size kFaviconSize = {20, 20}; constexpr gfx::Size kVolumeSliderSize = {50, 20}; @@ -167,23 +168,22 @@ public: MediaButton(PressedCallback callback, int icon_size, gfx::Size button_size) : ImageButton(callback), icon_size_(icon_size) { - SetImageHorizontalAlignment(views::ImageButton::ALIGN_CENTER); - SetImageVerticalAlignment(views::ImageButton::ALIGN_MIDDLE); + SetHasInkDropActionOnClick(true); + views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(), + button_size.height() / 2); + views::InkDrop::Get(this)->SetMode(views::InkDropHost::InkDropMode::ON); + views::InkDrop::Get(this)->SetBaseColorCallback(base::BindRepeating( + &MediaButton::GetForegroundColor, base::Unretained(this))); + SetImageHorizontalAlignment(ImageButton::ALIGN_CENTER); + SetImageVerticalAlignment(ImageButton::ALIGN_MIDDLE); SetFocusBehavior(views::View::FocusBehavior::ALWAYS); SetFlipCanvasOnPaintForRTLUI(false); SetPreferredSize(button_size); - SetBorder(views::CreateRoundedRectBorder( - kMediaButtonBorderThickness, - std::min(button_size.width(), button_size.height()) / 2, - SK_ColorWHITE)); } - void SetButtonColor(SkColor foreground_color, SkColor disabled_color) { + void SetButtonColor(SkColor foreground_color) { foreground_color_ = foreground_color; - disabled_color_ = disabled_color; - GetBorder()->set_color(IsMouseHovered() ? foreground_color - : disabled_color_); views::SetImageFromVectorIconWithColor( this, *GetVectorIconForMediaAction(GetActionFromButtonTag(*this)), icon_size_, foreground_color_); @@ -203,19 +203,10 @@ icon_size_, foreground_color_); } - void OnMouseEntered(const ui::MouseEvent& event) override { - GetBorder()->set_color(foreground_color_); - SchedulePaint(); - } - - void OnMouseExited(const ui::MouseEvent& event) override { - GetBorder()->set_color(disabled_color_); - SchedulePaint(); - } - private: + SkColor GetForegroundColor() { return foreground_color_; } + SkColor foreground_color_ = gfx::kPlaceholderColor; - SkColor disabled_color_ = gfx::kPlaceholderColor; int icon_size_; }; @@ -690,10 +681,10 @@ // Update the colors for the toggle buttons (play/pause and // picture-in-picture) - play_pause_button_->SetButtonColor(foreground, disabled_icon_color); + play_pause_button_->SetButtonColor(foreground); if (picture_in_picture_button_) - picture_in_picture_button_->SetButtonColor(foreground, disabled_icon_color); + picture_in_picture_button_->SetButtonColor(foreground); // Update the colors for the media control buttons. for (views::View* child : media_controls_container_->children()) { @@ -703,7 +694,7 @@ MediaButton* button = static_cast<MediaButton*>(child); - button->SetButtonColor(foreground, disabled_icon_color); + button->SetButtonColor(foreground); } SchedulePaint();
diff --git a/components/metrics/file_metrics_provider.cc b/components/metrics/file_metrics_provider.cc index 35e068a..26727fe 100644 --- a/components/metrics/file_metrics_provider.cc +++ b/components/metrics/file_metrics_provider.cc
@@ -943,7 +943,7 @@ mutable_list[0].GetInt() + count); pref_service_->SetInteger( metrics::prefs::kStabilityFileMetricsUnsentFilesCount, - list_value->GetSize() - 1); + list_value->GetList().size() - 1); list_value->EraseListIter(mutable_list.begin()); return true;
diff --git a/components/metrics/metrics_log_store_unittest.cc b/components/metrics/metrics_log_store_unittest.cc index 5a3b16e..fc1d3cd 100644 --- a/components/metrics/metrics_log_store_unittest.cc +++ b/components/metrics/metrics_log_store_unittest.cc
@@ -55,7 +55,7 @@ const char* pref = log_type == MetricsLog::INITIAL_STABILITY_LOG ? prefs::kMetricsInitialLogs : prefs::kMetricsOngoingLogs; - return pref_service_.GetList(pref)->GetSize(); + return pref_service_.GetList(pref)->GetList().size(); } TestMetricsServiceClient client_;
diff --git a/components/metrics/unsent_log_store.cc b/components/metrics/unsent_log_store.cc index ff50718..52623a5 100644 --- a/components/metrics/unsent_log_store.cc +++ b/components/metrics/unsent_log_store.cc
@@ -243,7 +243,7 @@ return; } - const size_t log_count = list_value.GetSize(); + const size_t log_count = list_value.GetList().size(); DCHECK(list_.empty()); list_.resize(log_count);
diff --git a/components/metrics/unsent_log_store_unittest.cc b/components/metrics/unsent_log_store_unittest.cc index 30e80ad6..bb0d412b 100644 --- a/components/metrics/unsent_log_store_unittest.cc +++ b/components/metrics/unsent_log_store_unittest.cc
@@ -140,7 +140,7 @@ unsent_log_store.TrimAndPersistUnsentLogs(); const base::ListValue* list_value = prefs_.GetList(kTestPrefName); - EXPECT_EQ(0U, list_value->GetSize()); + EXPECT_EQ(0U, list_value->GetList().size()); TestUnsentLogStore result_unsent_log_store(&prefs_, kLogByteLimit); result_unsent_log_store.LoadPersistedUnsentLogs();
diff --git a/components/net_log/net_export_file_writer_unittest.cc b/components/net_log/net_export_file_writer_unittest.cc index 96fa9085..ad661544 100644 --- a/components/net_log/net_export_file_writer_unittest.cc +++ b/components/net_log/net_export_file_writer_unittest.cc
@@ -802,7 +802,7 @@ ASSERT_TRUE(root->GetList("events", &events)); // Check there is at least one event as a result of the ongoing request. - ASSERT_GE(events->GetSize(), 1u); + ASSERT_GE(events->GetList().size(), 1u); // Check the URL in the params of the first event. base::DictionaryValue* event;
diff --git a/components/ntp_snippets/category_rankers/click_based_category_ranker.cc b/components/ntp_snippets/category_rankers/click_based_category_ranker.cc index 108e269..6b0b2a3 100644 --- a/components/ntp_snippets/category_rankers/click_based_category_ranker.cc +++ b/components/ntp_snippets/category_rankers/click_based_category_ranker.cc
@@ -349,7 +349,7 @@ result_categories->clear(); const base::ListValue* list = pref_service_->GetList(prefs::kClickBasedCategoryRankerOrderWithClicks); - if (!list || list->GetSize() == 0) { + if (!list || list->GetList().size() == 0) { return false; }
diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc index 98e7ed9..c0a48650 100644 --- a/components/ntp_tiles/popular_sites_impl.cc +++ b/components/ntp_tiles/popular_sites_impl.cc
@@ -117,7 +117,7 @@ PopularSites::SitesVector ParseSiteList(const base::ListValue& list) { PopularSites::SitesVector sites; - for (size_t i = 0; i < list.GetSize(); i++) { + for (size_t i = 0; i < list.GetList().size(); i++) { const base::DictionaryValue* item; if (!list.GetDictionary(i, &item)) continue; @@ -159,7 +159,7 @@ // Valid lists would have contained at least the PERSONALIZED section. std::map<SectionType, PopularSites::SitesVector> sections = { std::make_pair(SectionType::PERSONALIZED, PopularSites::SitesVector{})}; - for (size_t i = 0; i < list.GetSize(); i++) { + for (size_t i = 0; i < list.GetList().size(); i++) { const base::DictionaryValue* item; if (!list.GetDictionary(i, &item)) { LOG(WARNING) << "Parsed SitesExploration list contained an invalid "
diff --git a/components/ntp_tiles/webui/ntp_tiles_internals_message_handler.cc b/components/ntp_tiles/webui/ntp_tiles_internals_message_handler.cc index 59066a2..2cda5d0 100644 --- a/components/ntp_tiles/webui/ntp_tiles_internals_message_handler.cc +++ b/components/ntp_tiles/webui/ntp_tiles_internals_message_handler.cc
@@ -98,7 +98,7 @@ SendTiles(NTPTilesVector(), FaviconResultMap()); return; } - DCHECK_EQ(0u, args->GetSize()); + DCHECK_EQ(0u, args->GetList().size()); popular_sites_json_.clear(); most_visited_sites_ = client_->MakeMostVisitedSites(); @@ -113,7 +113,7 @@ } const base::Value* dict = nullptr; - DCHECK_EQ(1u, args->GetSize()); + DCHECK_EQ(1u, args->GetList().size()); args->Get(0, &dict); DCHECK(dict && dict->is_dict()); @@ -169,7 +169,7 @@ void NTPTilesInternalsMessageHandler::HandleViewPopularSitesJson( const base::ListValue* args) { - DCHECK_EQ(0u, args->GetSize()); + DCHECK_EQ(0u, args->GetList().size()); if (!most_visited_sites_ || !most_visited_sites_->DoesSourceExist(ntp_tiles::TileSource::POPULAR)) { return;
diff --git a/components/omnibox/browser/document_provider.cc b/components/omnibox/browser/document_provider.cc index b17d268..5fa27e79 100644 --- a/components/omnibox/browser/document_provider.cc +++ b/components/omnibox/browser/document_provider.cc
@@ -697,7 +697,7 @@ if (!root_dict->GetList("results", &results_list)) { return matches; } - size_t num_results = results_list->GetSize(); + size_t num_results = results_list->GetList().size(); UMA_HISTOGRAM_COUNTS_1M("Omnibox.DocumentSuggest.ResultCount", num_results); // During development/quality iteration we may wish to defeat server scores.
diff --git a/components/omnibox/browser/search_suggestion_parser.cc b/components/omnibox/browser/search_suggestion_parser.cc index c332cf5..54b9599f 100644 --- a/components/omnibox/browser/search_suggestion_parser.cc +++ b/components/omnibox/browser/search_suggestion_parser.cc
@@ -506,7 +506,8 @@ results->experiment_stats.clear(); if (extras->GetList("google:experimentstats", &experiment_stats) && experiment_stats) { - for (size_t index = 0; index < experiment_stats->GetSize(); index++) { + for (size_t index = 0; index < experiment_stats->GetList().size(); + index++) { const base::Value* experiment_stat = nullptr; if (experiment_stats->Get(index, &experiment_stat) && experiment_stat) { results->experiment_stats.push_back(experiment_stat->Clone()); @@ -541,7 +542,7 @@ client_data->GetInteger("phi", &prefetch_index); if (extras->GetList("google:suggestdetail", &suggestion_details) && - suggestion_details->GetSize() != results_list.size()) + suggestion_details->GetList().size() != results_list.size()) suggestion_details = nullptr; // Legacy code: Get subtype identifiers.
diff --git a/components/payments/content/utility/payment_manifest_parser.cc b/components/payments/content/utility/payment_manifest_parser.cc index 65aefcba..4e5e529 100644 --- a/components/payments/content/utility/payment_manifest_parser.cc +++ b/components/payments/content/utility/payment_manifest_parser.cc
@@ -86,7 +86,7 @@ return false; } - size_t apps_number = list->GetSize(); + size_t apps_number = list->GetList().size(); if (apps_number > kMaximumNumberOfItems) { log.Error(base::StringPrintf("\"%s\" must contain at most %zu entries.", kDefaultApplications, kMaximumNumberOfItems)); @@ -140,7 +140,7 @@ return false; } - size_t supported_origins_number = list->GetSize(); + size_t supported_origins_number = list->GetList().size(); if (supported_origins_number > kMaximumNumberOfSupportedOrigins) { log.Error(base::StringPrintf("\"%s\" must contain at most %zu entires.", kSupportedOrigins, @@ -270,7 +270,7 @@ return; } - size_t size = related_applications->GetSize(); + size_t size = related_applications->GetList().size(); if (size == 0) { log.Warn(base::StringPrintf( "Did not find any entries in \"%s\", even though \"%s\" is true.", @@ -413,7 +413,7 @@ return false; } - size_t related_applications_size = list->GetSize(); + size_t related_applications_size = list->GetList().size(); for (size_t i = 0; i < related_applications_size; ++i) { base::DictionaryValue* related_application = nullptr; if (!list->GetDictionary(i, &related_application) || !related_application) { @@ -472,7 +472,7 @@ base::ListValue* fingerprints_list = nullptr; if (!related_application->GetList(kFingerprints, &fingerprints_list) || fingerprints_list->GetList().empty() || - fingerprints_list->GetSize() > kMaximumNumberOfItems) { + fingerprints_list->GetList().size() > kMaximumNumberOfItems) { log.Error(base::StringPrintf( "\"%s\" must be a non-empty list of at most %zu items.", kFingerprints, kMaximumNumberOfItems)); @@ -480,7 +480,7 @@ return false; } - size_t fingerprints_size = fingerprints_list->GetSize(); + size_t fingerprints_size = fingerprints_list->GetList().size(); for (size_t j = 0; j < fingerprints_size; ++j) { base::DictionaryValue* fingerprint_dict = nullptr; std::string fingerprint_type; @@ -575,7 +575,8 @@ const base::ListValue* delegation_list = nullptr; if (payment_dict->GetList(kSupportedDelegations, &delegation_list)) { if (delegation_list->GetList().empty() || - delegation_list->GetSize() > kMaximumNumberOfSupportedDelegations) { + delegation_list->GetList().size() > + kMaximumNumberOfSupportedDelegations) { log.Error(base::StringPrintf( "\"%s.%s\" must be a non-empty list of at most %zu entries.", kPayment, kSupportedDelegations,
diff --git a/components/plugins/renderer/webview_plugin.cc b/components/plugins/renderer/webview_plugin.cc index e91b75d7..2afeaede 100644 --- a/components/plugins/renderer/webview_plugin.cc +++ b/components/plugins/renderer/webview_plugin.cc
@@ -323,6 +323,13 @@ UpdateTooltip(tooltip_text); } +void WebViewPlugin::WebViewHelper::ClearKeyboardTriggeredTooltip() { + // This is an exception to the "only clear it if its set from keyboard" since + // there are no way of knowing whether the tooltips were set from keyboard or + // cursor in this class. In any case, this will clear the tooltip. + UpdateTooltip(std::u16string()); +} + void WebViewPlugin::WebViewHelper::UpdateTooltip( const std::u16string& tooltip_text) { if (plugin_->container_) {
diff --git a/components/plugins/renderer/webview_plugin.h b/components/plugins/renderer/webview_plugin.h index 1c93d362..98a21b1 100644 --- a/components/plugins/renderer/webview_plugin.h +++ b/components/plugins/renderer/webview_plugin.h
@@ -189,6 +189,7 @@ void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, base::i18n::TextDirection hint, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void TextInputStateChanged(ui::mojom::TextInputStatePtr state) override {} void SelectionBoundsChanged(const gfx::Rect& anchor_rect, base::i18n::TextDirection anchor_dir,
diff --git a/components/policy/core/browser/url_allowlist_policy_handler.h b/components/policy/core/browser/url_allowlist_policy_handler.h index 3dd9d8c9..062dd791 100644 --- a/components/policy/core/browser/url_allowlist_policy_handler.h +++ b/components/policy/core/browser/url_allowlist_policy_handler.h
@@ -22,7 +22,7 @@ ~URLAllowlistPolicyHandler() override; // Validates that policy follows official pattern - // https://chromeenterprise.google/policies/url-patterns + // https://www.chromium.org/administrators/url-blocklist-filter-format bool ValidatePolicy(const std::string& policy); // ConfigurationPolicyHandler methods:
diff --git a/components/policy/core/browser/url_blocklist_policy_handler.h b/components/policy/core/browser/url_blocklist_policy_handler.h index c54614a..afd8bed 100644 --- a/components/policy/core/browser/url_blocklist_policy_handler.h +++ b/components/policy/core/browser/url_blocklist_policy_handler.h
@@ -29,7 +29,7 @@ ~URLBlocklistPolicyHandler() override; // Validates that policy follows official pattern - // https://chromeenterprise.google/policies/url-patterns + // https://www.chromium.org/administrators/url-blocklist-filter-format bool ValidatePolicy(const std::string& policy); // ConfigurationPolicyHandler methods:
diff --git a/components/policy/core/browser/url_util.cc b/components/policy/core/browser/url_util.cc index 88abc41..255fe07 100644 --- a/components/policy/core/browser/url_util.cc +++ b/components/policy/core/browser/url_util.cc
@@ -400,7 +400,7 @@ std::map<url_matcher::URLMatcherConditionSet::ID, url_util::FilterComponents>* filters) { URLMatcherConditionSet::Vector all_conditions; - size_t size = std::min(kMaxFiltersPerPolicy, patterns->GetSize()); + size_t size = std::min(kMaxFiltersPerPolicy, patterns->GetList().size()); std::string pattern; scoped_refptr<URLMatcherConditionSet> condition_set; for (size_t i = 0; i < size; ++i) {
diff --git a/components/policy/core/common/mac_util_unittest.cc b/components/policy/core/common/mac_util_unittest.cc index 75d6136..e9ca407 100644 --- a/components/policy/core/common/mac_util_unittest.cc +++ b/components/policy/core/common/mac_util_unittest.cc
@@ -42,7 +42,7 @@ base::ListValue list; for (base::DictionaryValue::Iterator it(root); !it.IsAtEnd(); it.Advance()) list.Append(std::make_unique<base::Value>(it.value().Clone())); - EXPECT_EQ(root.DictSize(), list.GetSize()); + EXPECT_EQ(root.DictSize(), list.GetList().size()); list.Append(std::make_unique<base::Value>(root.Clone())); root.SetKey("list", list.Clone());
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 757b676..991796f 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -3562,6 +3562,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable Safe Browsing', + }, + { + 'value': False, + 'caption': 'Disable Safe Browsing', + }, + ], 'deprecated': True, 'example_value': True, 'id': 14, @@ -3648,6 +3658,16 @@ 'dynamic_refresh': False, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable reporting of usage and crash-related data', + }, + { + 'value': False, + 'caption': 'Disable reporting of usage and crash-related data', + }, + ], 'example_value': True, 'id': 15, 'caption': '''Enable reporting of usage and crash-related data''', @@ -3678,6 +3698,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable saving passwords using the password manager', + }, + { + 'value': False, + 'caption': 'Disable saving passwords using the password manager', + }, + ], 'example_value': True, 'id': 16, 'caption': '''Enable saving passwords to the password manager''', @@ -3727,6 +3757,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable password leak detection', + }, + { + 'value': False, + 'caption': 'Disable password leak detection', + }, + ], 'example_value': True, 'id': 580, 'caption': '''Enable leak detection for entered credentials''', @@ -3752,12 +3792,22 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable AutoFill', + }, + { + 'value': False, + 'caption': 'Disable AutoFill', + }, + ], 'deprecated': True, 'example_value': False, 'id': 18, 'caption': '''Enable AutoFill''', 'tags': [], - 'desc': '''This policy is deprecated in M70, please use AutofillAddressEnabled and AutofillCreditCardEnabled instead. + 'desc': '''This policy is deprecated in M70, please use <ph name="AUTOFILL_ADDRESS_ENABLED_POLICY_NAME">AutofillAddressEnabled</ph> and <ph name="AUTOFILL_CREDIT_CARD_ENABLED_POLICY_NAME">AutofillCreditCardEnabled</ph> instead. Enables <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>'s AutoFill feature and allows users to auto complete web forms using previously stored information such as address or credit card information. @@ -3781,6 +3831,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable AutoFill for addresses', + }, + { + 'value': False, + 'caption': 'Disable AutoFill for addresses', + }, + ], 'example_value': False, 'id': 459, 'caption': '''Enable AutoFill for addresses''', @@ -3805,6 +3865,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable AutoFill for credit cards', + }, + { + 'value': False, + 'caption': 'Disable AutoFill for credit cards', + }, + ], 'example_value': False, 'id': 392, 'caption': '''Enable AutoFill for credit cards''', @@ -3919,6 +3989,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Always open PDF files using an external PDF viewer', + }, + { + 'value': False, + 'caption': 'Always open PDF files using the internal PDF viewer', + }, + ], 'example_value': True, 'id': 347, 'caption': '''Always Open PDF files externally''', @@ -3939,6 +4019,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable the plugin finder', + }, + { + 'value': False, + 'caption': 'Disable the plugin finder', + }, + ], 'deprecated': True, 'example_value': True, 'id': 66, @@ -3960,6 +4050,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Disable <ph name="CHROME_SYNC_NAME">Chrome Sync</ph>', + }, + { + 'value': False, + 'caption': 'Allow users to choose whether to enable <ph name="CHROME_SYNC_NAME">Chrome Sync</ph>', + }, + ], 'example_value': True, 'id': 20, 'caption': '''Disable synchronization of data with Google''', @@ -4004,6 +4104,16 @@ 'dynamic_refresh': False, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Enable creation of roaming profiles', + }, + { + 'value': False, + 'caption': 'Disable creation of roaming profiles', + }, + ], 'example_value': True, 'id': 358, 'caption': '''Enable the creation of roaming copies for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> profile data''', @@ -4048,6 +4158,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Allow users to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>', + }, + { + 'value': False, + 'caption': 'Prevent users from signing in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>', + }, + ], 'deprecated': True, 'example_value': True, 'id': 190, @@ -4415,6 +4535,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Allow captive portal authentication to ignore proxy settings', + }, + { + 'value': False, + 'caption': 'Prevent captive portal authentication from ignoring proxy settings', + }, + ], 'example_value': True, 'default_for_enterprise_users': False, 'id': 295, @@ -4740,6 +4870,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Disable CNAME lookup during Kerberos authentication', + }, + { + 'value': False, + 'caption': 'Use CNAME lookup during Kerberos authentication', + }, + ], 'example_value': False, 'id': 27, 'caption': '''Disable CNAME lookup when negotiating Kerberos authentication''', @@ -4758,6 +4898,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Include non-standard port in generated Kerberos SPN', + }, + { + 'value': False, + 'caption': 'Do not include port in generated Kerberos SPN', + }, + ], 'example_value': False, 'id': 28, 'caption': '''Include non-standard port in Kerberos SPN''', @@ -4889,6 +5039,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Use KDC policy approval during HTTP authentication', + }, + { + 'value': False, + 'caption': 'Ignore KDC policy approval during HTTP authentication', + }, + ], 'example_value': True, 'id': 528, 'caption': '''Use KDC policy to delegate credentials.''', @@ -4976,6 +5136,16 @@ 'dynamic_refresh': True, 'per_profile': False, }, + 'items': [ + { + 'value': True, + 'caption': 'Allow third-party images to show an authentication prompt', + }, + { + 'value': False, + 'caption': 'Prevent third-party images from showing an authentication prompt', + }, + ], 'example_value': False, 'id': 89, 'caption': '''Cross-origin HTTP Authentication prompts''', @@ -5185,6 +5355,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Allow installation and updates for extensions hosted outside of Chrome Web Store', + }, + { + 'value': False, + 'caption': 'Prevent installation and updates for extensions hosted outside of Chrome Web Store', + }, + ], 'example_value': False, 'id': 516, 'caption': '''Allow insecure algorithms in integrity checks on extension updates and installs''', @@ -5416,6 +5596,16 @@ 'dynamic_refresh': False, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Block installation of external extensions', + }, + { + 'value': False, + 'caption': 'Allow installation of external extensions', + }, + ], 'example_value': True, 'id': 637, 'caption': '''Blocks external extensions from being installed''', @@ -5440,6 +5630,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Show the Home button on the toolbar', + }, + { + 'value': False, + 'caption': 'Hide the Home button from the toolbar', + }, + ], 'example_value': True, 'id': 35, 'caption': '''Show Home button on toolbar''', @@ -5458,6 +5658,16 @@ 'dynamic_refresh': True, 'per_profile': True, }, + 'items': [ + { + 'value': True, + 'caption': 'Disable Developer Tools', + }, + { + 'value': False, + 'caption': 'Enable Developer Tools', + }, + ], 'deprecated': True, 'example_value': False, 'id': 36,
diff --git a/components/policy/tools/generate_policy_source.py b/components/policy/tools/generate_policy_source.py index 6727b79..a0051ad 100755 --- a/components/policy/tools/generate_policy_source.py +++ b/components/policy/tools/generate_policy_source.py
@@ -1581,7 +1581,7 @@ if (type not in ['user', 'device', 'both']): raise RuntimeError('Unsupported type "%s"' % type) - return filter(partial(_IsSupportedChromeOSPolicy, type), policies) + return list(filter(partial(_IsSupportedChromeOSPolicy, type), policies)) # Returns the list of all policy.policy_protobuf_type strings from |policies|.
diff --git a/components/safe_browsing/android/safe_browsing_api_handler_util.cc b/components/safe_browsing/android/safe_browsing_api_handler_util.cc index 0c4c81c..511059f3 100644 --- a/components/safe_browsing/android/safe_browsing_api_handler_util.cc +++ b/components/safe_browsing/android/safe_browsing_api_handler_util.cc
@@ -149,7 +149,7 @@ // Go through each matched threat type and pick the most severe. JavaThreatTypes worst_threat_type = JAVA_THREAT_TYPE_MAX_VALUE; const base::DictionaryValue* worst_match = nullptr; - for (size_t i = 0; i < matches->GetSize(); i++) { + for (size_t i = 0; i < matches->GetList().size(); i++) { // Get the threat number const base::DictionaryValue* match; std::string threat_num_str;
diff --git a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc index 41fcbbca..a78f1c8 100644 --- a/components/safe_search_api/safe_search/safe_search_url_checker_client.cc +++ b/components/safe_search_api/safe_search/safe_search_url_checker_client.cc
@@ -52,7 +52,7 @@ DLOG(WARNING) << "ParseResponse failed to parse classifications list"; return false; } - if (classifications_list->GetSize() != 1) { + if (classifications_list->GetList().size() != 1) { DLOG(WARNING) << "ParseResponse expected exactly one result"; return false; }
diff --git a/components/search_engines/template_url_data.cc b/components/search_engines/template_url_data.cc index 877ab23..122e11e 100644 --- a/components/search_engines/template_url_data.cc +++ b/components/search_engines/template_url_data.cc
@@ -95,7 +95,7 @@ SetKeyword(keyword); SetURL(std::string(search_url)); input_encodings.push_back(std::string(encoding)); - for (size_t i = 0; i < alternate_urls_list.GetSize(); ++i) { + for (size_t i = 0; i < alternate_urls_list.GetList().size(); ++i) { std::string alternate_url; alternate_urls_list.GetString(i, &alternate_url); DCHECK(!alternate_url.empty());
diff --git a/components/search_engines/template_url_prepopulate_data.cc b/components/search_engines/template_url_prepopulate_data.cc index f7495f04..d7b54c3 100644 --- a/components/search_engines/template_url_prepopulate_data.cc +++ b/components/search_engines/template_url_prepopulate_data.cc
@@ -1338,7 +1338,7 @@ if (!list) return t_urls; - size_t num_engines = list->GetSize(); + size_t num_engines = list->GetList().size(); for (size_t i = 0; i != num_engines; ++i) { const base::DictionaryValue* engine; if (list->GetDictionary(i, &engine)) {
diff --git a/components/send_tab_to_self/features.cc b/components/send_tab_to_self/features.cc index 37c3999..c1337ef 100644 --- a/components/send_tab_to_self/features.cc +++ b/components/send_tab_to_self/features.cc
@@ -12,6 +12,8 @@ const base::Feature kSendTabToSelfWhenSignedIn{ "SendTabToSelfWhenSignedIn", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSendTabToSelfManageDevicesLink{ + "SendTabToSelfManageDevicesLink", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kSendTabToSelfUseFakeBackend{ "SendTabToSelfUseFakeBackend", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kSendTabToSelfV2{"SendTabToSelfV2",
diff --git a/components/send_tab_to_self/features.h b/components/send_tab_to_self/features.h index 6413c7e6..e7838b7d 100644 --- a/components/send_tab_to_self/features.h +++ b/components/send_tab_to_self/features.h
@@ -16,6 +16,10 @@ // of whether they have the sync feature enabled. extern const base::Feature kSendTabToSelfWhenSignedIn; +// If this feature is enabled, a link to manage the user's devices will be shown +// below the device list when sharing. +extern const base::Feature kSendTabToSelfManageDevicesLink; + // If this feature is enabled, use a fake backend implementation that supplies a // hardcoded list of share targets, for UI work & debugging. extern const base::Feature kSendTabToSelfUseFakeBackend;
diff --git a/components/signin/internal/identity_manager/account_tracker_service.cc b/components/signin/internal/identity_manager/account_tracker_service.cc index 3e42432..e26930ef 100644 --- a/components/signin/internal/identity_manager/account_tracker_service.cc +++ b/components/signin/internal/identity_manager/account_tracker_service.cc
@@ -524,7 +524,7 @@ base::DictionaryValue* dict = nullptr; ListPrefUpdate update(pref_service_, prefs::kAccountInfo); - for (size_t i = 0; i < update->GetSize(); ++i, dict = nullptr) { + for (size_t i = 0; i < update->GetList().size(); ++i, dict = nullptr) { if (update->GetDictionary(i, &dict)) { std::string value; if (dict->GetString(kAccountKeyPath, &value) && @@ -550,7 +550,7 @@ void AccountTrackerService::LoadFromPrefs() { const base::ListValue* list = pref_service_->GetList(prefs::kAccountInfo); std::set<CoreAccountId> to_remove; - for (size_t i = 0; i < list->GetSize(); ++i) { + for (size_t i = 0; i < list->GetList().size(); ++i) { const base::DictionaryValue* dict = nullptr; if (list->GetDictionary(i, &dict)) { std::string value; @@ -659,7 +659,7 @@ base::DictionaryValue* dict = nullptr; ListPrefUpdate update(pref_service_, prefs::kAccountInfo); - for (size_t i = 0; i < update->GetSize(); ++i, dict = nullptr) { + for (size_t i = 0; i < update->GetList().size(); ++i, dict = nullptr) { if (update->GetDictionary(i, &dict)) { std::string value; if (dict->GetString(kAccountKeyPath, &value) && @@ -672,7 +672,7 @@ dict = new base::DictionaryValue(); update->Append(base::WrapUnique(dict)); // |dict| is invalidated at this point, so it needs to be reset. - update->GetDictionary(update->GetSize() - 1, &dict); + update->GetDictionary(update->GetList().size() - 1, &dict); dict->SetString(kAccountKeyPath, account_info.account_id.ToString()); }
diff --git a/components/spellcheck/browser/spelling_service_client.cc b/components/spellcheck/browser/spelling_service_client.cc index a8a62757..b4db47f 100644 --- a/components/spellcheck/browser/spelling_service_client.cc +++ b/components/spellcheck/browser/spelling_service_client.cc
@@ -264,7 +264,7 @@ if (!value->GetList(kMisspellingsRestPath, &misspellings)) return true; - for (size_t i = 0; i < misspellings->GetSize(); ++i) { + for (size_t i = 0; i < misspellings->GetList().size(); ++i) { // Retrieve the i-th misspelling region and put it to the given vector. When // the Spelling service sends two or more suggestions, we read only the // first one because SpellCheckResult can store only one suggestion.
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb index a3b9802..e11abe4 100644 --- a/components/strings/components_strings_hr.xtb +++ b/components/strings/components_strings_hr.xtb
@@ -2208,7 +2208,7 @@ <translation id="8438786541497918448">Koristiti kameru i mikrofon?</translation> <translation id="8446884382197647889">Saznajte više</translation> <translation id="8457125768502047971">Neodređeno</translation> -<translation id="8461694314515752532">Kriptiraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation> +<translation id="8461694314515752532">Šifriraj sinkronizirane podatke vlastitom šifrom za sinkronizaciju</translation> <translation id="8466379296835108687">{COUNT,plural, =1{1 kreditna kartica}one{# kreditna kartica}few{# kreditne kartice}other{# kreditnih kartica}}</translation> <translation id="8471007934814342455"><ph name="MANAGE_GOOGLE_AD_SETTINGS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Upravljaj mojim postavkama Google oglasa</translation> <translation id="8473863474539038330">Adrese i više</translation>
diff --git a/components/sync/base/model_type_unittest.cc b/components/sync/base/model_type_unittest.cc index 2576da68..d1fa0e7 100644 --- a/components/sync/base/model_type_unittest.cc +++ b/components/sync/base/model_type_unittest.cc
@@ -30,7 +30,7 @@ const ModelTypeSet model_types(BOOKMARKS, APPS); std::unique_ptr<base::ListValue> value(ModelTypeSetToValue(model_types)); - EXPECT_EQ(2u, value->GetSize()); + EXPECT_EQ(2u, value->GetList().size()); std::string types[2]; EXPECT_TRUE(value->GetString(0, &types[0])); EXPECT_TRUE(value->GetString(1, &types[1]));
diff --git a/components/sync/driver/BUILD.gn b/components/sync/driver/BUILD.gn index b2828a03..5397307 100644 --- a/components/sync/driver/BUILD.gn +++ b/components/sync/driver/BUILD.gn
@@ -71,6 +71,8 @@ "syncable_service_based_model_type_controller.cc", "syncable_service_based_model_type_controller.h", "trusted_vault_client.h", + "trusted_vault_histograms.cc", + "trusted_vault_histograms.h", ] public_deps = [
diff --git a/components/sync/driver/trusted_vault_histograms.cc b/components/sync/driver/trusted_vault_histograms.cc new file mode 100644 index 0000000..6233d94 --- /dev/null +++ b/components/sync/driver/trusted_vault_histograms.cc
@@ -0,0 +1,28 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/sync/driver/trusted_vault_histograms.h" + +#include "base/metrics/histogram_functions.h" + +namespace syncer { + +void RecordTrustedVaultDeviceRegistrationState( + TrustedVaultDeviceRegistrationStateForUMA registration_state) { + base::UmaHistogramEnumeration("Sync.TrustedVaultDeviceRegistrationState", + registration_state); +} + +// Records url fetch response status (combined http and net error code). +// Either |http_status| or |net_error| must be non zero. +void RecordTrustedVaultURLFetchResponse(int http_response_code, int net_error) { + DCHECK_LE(net_error, 0); + DCHECK_GE(http_response_code, 0); + + base::UmaHistogramSparse( + "Sync.TrustedVaultURLFetchResponse", + http_response_code == 0 ? net_error : http_response_code); +} + +} // namespace syncer
diff --git a/components/sync/driver/trusted_vault_histograms.h b/components/sync/driver/trusted_vault_histograms.h new file mode 100644 index 0000000..b3b5bd6c --- /dev/null +++ b/components/sync/driver/trusted_vault_histograms.h
@@ -0,0 +1,33 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_SYNC_DRIVER_TRUSTED_VAULT_HISTOGRAMS_H_ +#define COMPONENTS_SYNC_DRIVER_TRUSTED_VAULT_HISTOGRAMS_H_ + +namespace syncer { + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// Exposed publicly for testing. +enum class TrustedVaultDeviceRegistrationStateForUMA { + kAlreadyRegistered = 0, + kLocalKeysAreStale = 1, + kThrottledClientSide = 2, + kAttemptingRegistrationWithNewKeyPair = 3, + kAttemptingRegistrationWithExistingKeyPair = 4, + kAttemptingRegistrationWithPersistentAuthError = 5, + kMaxValue = kAttemptingRegistrationWithPersistentAuthError, +}; + +void RecordTrustedVaultDeviceRegistrationState( + TrustedVaultDeviceRegistrationStateForUMA registration_state); + +// Records url fetch response status (combined http and net error code). If +// |http_response_code| is non-zero, it will be recorded, otherwise |net_error| +// will be recorded. +void RecordTrustedVaultURLFetchResponse(int http_response_code, int net_error); + +} // namespace syncer + +#endif // COMPONENTS_SYNC_DRIVER_TRUSTED_VAULT_HISTOGRAMS_H_
diff --git a/components/sync/protocol/proto_value_conversions_unittest.cc b/components/sync/protocol/proto_value_conversions_unittest.cc index dd9b75c..1a4ca7b 100644 --- a/components/sync/protocol/proto_value_conversions_unittest.cc +++ b/components/sync/protocol/proto_value_conversions_unittest.cc
@@ -168,7 +168,7 @@ EXPECT_EQ(icon_url, encoded_icon_url); base::ListValue* meta_info_list; ASSERT_TRUE(value->GetList("meta_info", &meta_info_list)); - EXPECT_EQ(2u, meta_info_list->GetSize()); + EXPECT_EQ(2u, meta_info_list->GetList().size()); base::DictionaryValue* meta_info; std::string meta_key; std::string meta_value;
diff --git a/components/sync/test/fake_server/fake_server_verifier.cc b/components/sync/test/fake_server/fake_server_verifier.cc index 65ee50e8..2a04430 100644 --- a/components/sync/test/fake_server/fake_server_verifier.cc +++ b/components/sync/test/fake_server/fake_server_verifier.cc
@@ -80,8 +80,8 @@ base::ListValue* entity_list = nullptr; if (!entities->GetList(model_type_string, &entity_list)) { return UnknownTypeAssertionFailure(model_type_string); - } else if (expected_count != entity_list->GetSize()) { - return VerificationCountAssertionFailure(entity_list->GetSize(), + } else if (expected_count != entity_list->GetList().size()) { + return VerificationCountAssertionFailure(entity_list->GetList().size(), expected_count) << "\n\n" << ConvertFakeServerContentsToString(*entities);
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc index bf866b2..c946299 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -16,7 +16,6 @@ #include "base/files/file_util.h" #include "base/files/important_file_writer.h" #include "base/logging.h" -#include "base/metrics/histogram_functions.h" #include "base/sequence_checker.h" #include "base/stl_util.h" #include "base/time/clock.h" @@ -250,14 +249,13 @@ per_user_vault->set_gaia_id(primary_account->gaia); } - const absl::optional<DeviceRegistrationStateForUMA> registration_state = - MaybeRegisterDevice(has_persistent_auth_error); + const absl::optional<TrustedVaultDeviceRegistrationStateForUMA> + registration_state = MaybeRegisterDevice(has_persistent_auth_error); if (registration_state.has_value() && !device_registration_state_recorded_to_uma_) { device_registration_state_recorded_to_uma_ = true; - base::UmaHistogramEnumeration("Sync.TrustedVaultDeviceRegistrationState", - *registration_state); + RecordTrustedVaultDeviceRegistrationState(*registration_state); } if (pending_trusted_recovery_method_.has_value()) { @@ -424,7 +422,7 @@ clock_ = clock; } -absl::optional<StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA> +absl::optional<TrustedVaultDeviceRegistrationStateForUMA> StandaloneTrustedVaultBackend::MaybeRegisterDevice( bool has_persistent_auth_error_for_uma) { // TODO(crbug.com/1102340): in case of transient failure this function is @@ -453,17 +451,17 @@ } if (per_user_vault->local_device_registration_info().device_registered()) { - return DeviceRegistrationStateForUMA::kAlreadyRegistered; + return TrustedVaultDeviceRegistrationStateForUMA::kAlreadyRegistered; } if (per_user_vault->keys_are_stale()) { // Client already knows that existing vault keys (or their absence) isn't // sufficient for device registration. Fresh keys should be obtained first. - return DeviceRegistrationStateForUMA::kLocalKeysAreStale; + return TrustedVaultDeviceRegistrationStateForUMA::kLocalKeysAreStale; } if (AreConnectionRequestsThrottled()) { - return DeviceRegistrationStateForUMA::kThrottledClientSide; + return TrustedVaultDeviceRegistrationStateForUMA::kThrottledClientSide; } std::unique_ptr<SecureBoxKeyPair> key_pair; @@ -513,12 +511,12 @@ DCHECK(ongoing_connection_request_); if (has_persistent_auth_error_for_uma) { - return DeviceRegistrationStateForUMA:: + return TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithPersistentAuthError; } - return had_generated_key_pair ? DeviceRegistrationStateForUMA:: + return had_generated_key_pair ? TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithExistingKeyPair - : DeviceRegistrationStateForUMA:: + : TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithNewKeyPair; }
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.h b/components/sync/trusted_vault/standalone_trusted_vault_backend.h index 720c85b..9c2fcfb 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend.h +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.h
@@ -16,6 +16,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "components/signin/public/identity_manager/account_info.h" +#include "components/sync/driver/trusted_vault_histograms.h" #include "components/sync/protocol/local_trusted_vault.pb.h" #include "components/sync/trusted_vault/trusted_vault_connection.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -117,19 +118,6 @@ void SetClockForTesting(base::Clock* clock); - // These values are persisted to logs. Entries should not be renumbered and - // numeric values should never be reused. - // Exposed publicly for testing. - enum class DeviceRegistrationStateForUMA { - kAlreadyRegistered = 0, - kLocalKeysAreStale = 1, - kThrottledClientSide = 2, - kAttemptingRegistrationWithNewKeyPair = 3, - kAttemptingRegistrationWithExistingKeyPair = 4, - kAttemptingRegistrationWithPersistentAuthError = 5, - kMaxValue = kAttemptingRegistrationWithPersistentAuthError, - }; - private: friend class base::RefCountedThreadSafe<StandaloneTrustedVaultBackend>; @@ -144,7 +132,7 @@ // registration is desirable (i.e. feature toggle enabled and user signed in), // it returns an enum representing the registration state, intended to be used // for metric recording. Otherwise it returns nullopt. - absl::optional<DeviceRegistrationStateForUMA> MaybeRegisterDevice( + absl::optional<TrustedVaultDeviceRegistrationStateForUMA> MaybeRegisterDevice( bool has_persistent_auth_error_for_uma); // Called when device registration for |gaia_id| is completed (either
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc index 6baf476b..5615bae 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
@@ -493,7 +493,7 @@ histogram_tester.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: + TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithNewKeyPair, /*expected_bucket_count=*/1); @@ -534,7 +534,7 @@ histogram_tester.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: + TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithPersistentAuthError, /*expected_bucket_count=*/1); } @@ -559,8 +559,7 @@ histogram_tester.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: - kLocalKeysAreStale, + TrustedVaultDeviceRegistrationStateForUMA::kLocalKeysAreStale, /*expected_bucket_count=*/1); } @@ -619,8 +618,7 @@ histogram_tester.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: - kAlreadyRegistered, + TrustedVaultDeviceRegistrationStateForUMA::kAlreadyRegistered, /*expected_bucket_count=*/1); } @@ -667,8 +665,7 @@ histogram_tester.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: - kThrottledClientSide, + TrustedVaultDeviceRegistrationStateForUMA::kThrottledClientSide, /*expected_bucket_count=*/1); // Mimic a restart after sufficient time has passed, to trigger another device @@ -683,7 +680,7 @@ histogram_tester2.ExpectUniqueSample( "Sync.TrustedVaultDeviceRegistrationState", /*sample=*/ - StandaloneTrustedVaultBackend::DeviceRegistrationStateForUMA:: + TrustedVaultDeviceRegistrationStateForUMA:: kAttemptingRegistrationWithExistingKeyPair, /*expected_bucket_count=*/1); }
diff --git a/components/sync/trusted_vault/trusted_vault_request.cc b/components/sync/trusted_vault/trusted_vault_request.cc index d5fe5e7..7a2178b 100644 --- a/components/sync/trusted_vault/trusted_vault_request.cc +++ b/components/sync/trusted_vault/trusted_vault_request.cc
@@ -9,6 +9,7 @@ #include "base/metrics/histogram_functions.h" #include "base/strings/stringprintf.h" #include "components/signin/public/identity_manager/access_token_info.h" +#include "components/sync/driver/trusted_vault_histograms.h" #include "components/sync/trusted_vault/trusted_vault_access_token_fetcher.h" #include "net/base/url_util.h" #include "net/http/http_request_headers.h" @@ -123,19 +124,14 @@ void TrustedVaultRequest::OnURLLoadComplete( std::unique_ptr<std::string> response_body) { - const int net_error = url_loader_->NetError(); int http_response_code = 0; if (url_loader_->ResponseInfo() && url_loader_->ResponseInfo()->headers) { http_response_code = url_loader_->ResponseInfo()->headers->response_code(); } - DCHECK_LE(net_error, 0); - DCHECK_GE(http_response_code, 0); - - base::UmaHistogramSparse( - "Sync.TrustedVaultURLFetchResponse", - http_response_code == 0 ? net_error : http_response_code); + RecordTrustedVaultURLFetchResponse(/*http_response_code=*/http_response_code, + /*net_error=*/url_loader_->NetError()); std::string response_content = response_body ? *response_body : std::string(); if (http_response_code == net::HTTP_BAD_REQUEST) {
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc index ff63eb6d..606d749 100644 --- a/components/ukm/ukm_service_unittest.cc +++ b/components/ukm/ukm_service_unittest.cc
@@ -141,7 +141,7 @@ int GetPersistedLogCount() { const base::ListValue* list_value = prefs_.GetList(prefs::kUkmUnsentLogStore); - return list_value->GetSize(); + return list_value->GetList().size(); } Report GetPersistedReport() {
diff --git a/components/user_manager/known_user.cc b/components/user_manager/known_user.cc index bb9cadf..df311a5 100644 --- a/components/user_manager/known_user.cc +++ b/components/user_manager/known_user.cc
@@ -223,7 +223,7 @@ return false; const base::ListValue* known_users = local_state_->GetList(kKnownUsers); - for (size_t i = 0; i < known_users->GetSize(); ++i) { + for (size_t i = 0; i < known_users->GetList().size(); ++i) { const base::DictionaryValue* element = nullptr; if (known_users->GetDictionary(i, &element)) { if (UserMatches(account_id, *element)) { @@ -249,7 +249,7 @@ return; ListPrefUpdate update(local_state_, kKnownUsers); - for (size_t i = 0; i < update->GetSize(); ++i) { + for (size_t i = 0; i < update->GetList().size(); ++i) { base::DictionaryValue* element = nullptr; if (update->GetDictionary(i, &element)) { if (UserMatches(account_id, *element)) { @@ -425,7 +425,7 @@ std::vector<AccountId> result; const base::ListValue* known_users = local_state_->GetList(kKnownUsers); - for (size_t i = 0; i < known_users->GetSize(); ++i) { + for (size_t i = 0; i < known_users->GetList().size(); ++i) { const base::DictionaryValue* element = nullptr; if (known_users->GetDictionary(i, &element)) { std::string email;
diff --git a/components/user_manager/user_manager_base.cc b/components/user_manager/user_manager_base.cc index 2fa9eba..0c039643 100644 --- a/components/user_manager/user_manager_base.cc +++ b/components/user_manager/user_manager_base.cc
@@ -514,7 +514,7 @@ std::set<AccountId>* users_set) { users_vector->clear(); users_set->clear(); - for (size_t i = 0; i < users_list.GetSize(); ++i) { + for (size_t i = 0; i < users_list.GetList().size(); ++i) { std::string email; if (!users_list.GetString(i, &email) || email.empty()) { LOG(ERROR) << "Corrupt entry in user list at index " << i << "."; @@ -864,7 +864,7 @@ bool UserManagerBase::UserExistsInList(const AccountId& account_id) const { const base::ListValue* user_list = GetLocalState()->GetList(kRegularUsersPref); - for (size_t i = 0; i < user_list->GetSize(); ++i) { + for (size_t i = 0; i < user_list->GetList().size(); ++i) { std::string email; if (user_list->GetString(i, &email) && (account_id.GetUserEmail() == email)) return true;
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc index fa78416..2c9faf76 100644 --- a/components/variations/service/variations_field_trial_creator.cc +++ b/components/variations/service/variations_field_trial_creator.cc
@@ -354,7 +354,7 @@ // Determine if the saved pref value is present and valid. const bool is_pref_empty = list_value->GetList().empty(); - const bool is_pref_valid = list_value->GetSize() == 2 && + const bool is_pref_valid = list_value->GetList().size() == 2 && list_value->GetString(0, &stored_version_string) && list_value->GetString(1, &stored_country) && base::Version(stored_version_string).IsValid();
diff --git a/components/variations/service/variations_service.cc b/components/variations/service/variations_service.cc index 26074316..10bd293 100644 --- a/components/variations/service/variations_service.cc +++ b/components/variations/service/variations_service.cc
@@ -1016,7 +1016,7 @@ local_state_->GetList(prefs::kVariationsPermanentConsistencyCountry); std::string stored_country; - if (list_value->GetSize() == 2) { + if (list_value->GetList().size() == 2) { list_value->GetString(1, &stored_country); }
diff --git a/components/viz/common/java/src/org/chromium/components/viz/common/display/DeJellyUtils.java b/components/viz/common/java/src/org/chromium/components/viz/common/display/DeJellyUtils.java index fbfb178..3761012 100644 --- a/components/viz/common/java/src/org/chromium/components/viz/common/display/DeJellyUtils.java +++ b/components/viz/common/java/src/org/chromium/components/viz/common/display/DeJellyUtils.java
@@ -8,15 +8,19 @@ import android.content.Context; import android.content.res.Configuration; import android.graphics.Point; +import android.graphics.Rect; import android.hardware.display.DisplayManager; +import android.os.Build; import android.provider.Settings.Global; import android.view.Display; import android.view.Surface; +import android.view.WindowManager; import org.chromium.base.ContextUtils; import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.MainDex; +import org.chromium.base.compat.ApiHelperForR; import java.lang.reflect.Field; @@ -89,9 +93,15 @@ int rotation = display.getRotation(); mRotationOk = rotation == Surface.ROTATION_0; - Point realSize = new Point(); - display.getRealSize(realSize); - mScreenWidth = realSize.x; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + Rect realSize = ApiHelperForR.getMaximumWindowMetricsBounds( + ContextUtils.getApplicationContext().getSystemService(WindowManager.class)); + mScreenWidth = realSize.width(); + } else { + Point realSize = new Point(); + display.getRealSize(realSize); + mScreenWidth = realSize.x; + } } @Override public void onDisplayRemoved(int displayId) {}
diff --git a/components/webcrypto/algorithms/aes_cbc_unittest.cc b/components/webcrypto/algorithms/aes_cbc_unittest.cc index 1774087..bed09e1 100644 --- a/components/webcrypto/algorithms/aes_cbc_unittest.cc +++ b/components/webcrypto/algorithms/aes_cbc_unittest.cc
@@ -93,7 +93,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("aes_cbc.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/components/webcrypto/algorithms/aes_ctr_unittest.cc b/components/webcrypto/algorithms/aes_ctr_unittest.cc index 01eeddcb..06809333 100644 --- a/components/webcrypto/algorithms/aes_ctr_unittest.cc +++ b/components/webcrypto/algorithms/aes_ctr_unittest.cc
@@ -33,7 +33,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("aes_ctr.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/components/webcrypto/algorithms/aes_gcm_unittest.cc b/components/webcrypto/algorithms/aes_gcm_unittest.cc index c94c362..b6729a5 100644 --- a/components/webcrypto/algorithms/aes_gcm_unittest.cc +++ b/components/webcrypto/algorithms/aes_gcm_unittest.cc
@@ -137,7 +137,8 @@ ASSERT_TRUE(ReadJsonTestFileToList("aes_gcm.json", &tests)); // Note that WebCrypto appends the authentication tag to the ciphertext. - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/components/webcrypto/algorithms/aes_kw_unittest.cc b/components/webcrypto/algorithms/aes_kw_unittest.cc index b620490..41d94c8 100644 --- a/components/webcrypto/algorithms/aes_kw_unittest.cc +++ b/components/webcrypto/algorithms/aes_kw_unittest.cc
@@ -189,7 +189,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("aes_kw.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/components/webcrypto/algorithms/ecdh_unittest.cc b/components/webcrypto/algorithms/ecdh_unittest.cc index b20b45ba..c6b85b1 100644 --- a/components/webcrypto/algorithms/ecdh_unittest.cc +++ b/components/webcrypto/algorithms/ecdh_unittest.cc
@@ -78,7 +78,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("ecdh.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test; @@ -123,7 +124,8 @@ const base::DictionaryValue* test = nullptr; bool valid_p521_keys = false; - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); EXPECT_TRUE(tests.GetDictionary(test_index, &test)); absl::optional<bool> keys = test->FindBoolKey("valid_p521_keys");
diff --git a/components/webcrypto/algorithms/ecdsa_unittest.cc b/components/webcrypto/algorithms/ecdsa_unittest.cc index 273d4f9..8776010 100644 --- a/components/webcrypto/algorithms/ecdsa_unittest.cc +++ b/components/webcrypto/algorithms/ecdsa_unittest.cc
@@ -154,7 +154,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("ecdsa.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test; @@ -235,7 +236,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("bad_ec_keys.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test; @@ -265,7 +267,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("ec_private_keys.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test;
diff --git a/components/webcrypto/algorithms/hmac_unittest.cc b/components/webcrypto/algorithms/hmac_unittest.cc index 8be0f4d8..5ac05f5 100644 --- a/components/webcrypto/algorithms/hmac_unittest.cc +++ b/components/webcrypto/algorithms/hmac_unittest.cc
@@ -52,7 +52,8 @@ TEST_F(WebCryptoHmacTest, HMACSampleSets) { base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("hmac.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/components/webcrypto/algorithms/rsa_oaep_unittest.cc b/components/webcrypto/algorithms/rsa_oaep_unittest.cc index 0ebb170..3856692 100644 --- a/components/webcrypto/algorithms/rsa_oaep_unittest.cc +++ b/components/webcrypto/algorithms/rsa_oaep_unittest.cc
@@ -158,7 +158,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("rsa_oaep.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test = nullptr;
diff --git a/components/webcrypto/algorithms/rsa_pss_unittest.cc b/components/webcrypto/algorithms/rsa_pss_unittest.cc index 8e313bc..1d9e5191 100644 --- a/components/webcrypto/algorithms/rsa_pss_unittest.cc +++ b/components/webcrypto/algorithms/rsa_pss_unittest.cc
@@ -175,7 +175,8 @@ const base::ListValue* tests = nullptr; ASSERT_TRUE(test_data.GetList("tests", &tests)); - for (size_t test_index = 0; test_index < tests->GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests->GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test;
diff --git a/components/webcrypto/algorithms/rsa_ssa_unittest.cc b/components/webcrypto/algorithms/rsa_ssa_unittest.cc index f2d8329..35e7b18 100644 --- a/components/webcrypto/algorithms/rsa_ssa_unittest.cc +++ b/components/webcrypto/algorithms/rsa_ssa_unittest.cc
@@ -209,7 +209,8 @@ // new keys. std::vector<blink::WebCryptoKey> live_keys; - for (size_t key_index = 0; key_index < key_list.GetSize(); ++key_index) { + for (size_t key_index = 0; key_index < key_list.GetList().size(); + ++key_index) { SCOPED_TRACE(key_index); base::DictionaryValue* key_values; @@ -651,7 +652,8 @@ // Validate the signatures are computed and verified as expected. std::vector<uint8_t> signature; - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; @@ -989,7 +991,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("bad_rsa_keys.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); const base::DictionaryValue* test;
diff --git a/components/webcrypto/algorithms/sha_unittest.cc b/components/webcrypto/algorithms/sha_unittest.cc index 6d2896f..f438afd 100644 --- a/components/webcrypto/algorithms/sha_unittest.cc +++ b/components/webcrypto/algorithms/sha_unittest.cc
@@ -25,7 +25,8 @@ base::ListValue tests; ASSERT_TRUE(ReadJsonTestFileToList("sha.json", &tests)); - for (size_t test_index = 0; test_index < tests.GetSize(); ++test_index) { + for (size_t test_index = 0; test_index < tests.GetList().size(); + ++test_index) { SCOPED_TRACE(test_index); base::DictionaryValue* test; ASSERT_TRUE(tests.GetDictionary(test_index, &test));
diff --git a/content/OWNERS b/content/OWNERS index 6ceb518..8af2fd7 100644 --- a/content/OWNERS +++ b/content/OWNERS
@@ -29,31 +29,30 @@ # NOTE: keep this in sync with lsc-owners-override@chromium.org owners # per-file rules: -# These are for the common case of adding or renaming files. If you're doing + +# This is for the common case of adding or renaming files. If you're doing # structural changes, please get a review from a reviewer in this file. per-file BUILD.gn=* -# For threading (BrowserThread, BrowserMainLoop, ThreadPool, etc.) -per-file *browser_main_loop*=gab@chromium.org -per-file *browser_task_environment*=gab@chromium.org -per-file *browser_thread*=gab@chromium.org +# The remaining rules are for platform-specific implementation changes. +# Do NOT add other per-file changes as they would also apply to public/. # For Fuchsia-specific changes: per-file ...fuchsia*=file://build/fuchsia/OWNERS # For Mac-specific changes: -per-file *_mac.*=ellyjones@chromium.org -per-file *_mac.*=mark@chromium.org -per-file *_mac.*=rsesek@chromium.org -per-file *_mac.*=tapted@chromium.org -per-file *_mac_*=ellyjones@chromium.org -per-file *_mac_*=mark@chromium.org -per-file *_mac_*=rsesek@chromium.org -per-file *_mac_*=tapted@chromium.org -per-file *.mm=ellyjones@chromium.org -per-file *.mm=mark@chromium.org -per-file *.mm=rsesek@chromium.org -per-file *.mm=tapted@chromium.org +per-file ..._mac.*=ellyjones@chromium.org +per-file ..._mac.*=mark@chromium.org +per-file ..._mac.*=rsesek@chromium.org +per-file ..._mac.*=tapted@chromium.org +per-file ..._mac_*=ellyjones@chromium.org +per-file ..._mac_*=mark@chromium.org +per-file ..._mac_*=rsesek@chromium.org +per-file ..._mac_*=tapted@chromium.org +per-file ....mm=ellyjones@chromium.org +per-file ....mm=mark@chromium.org +per-file ....mm=rsesek@chromium.org +per-file ....mm=tapted@chromium.org # Translation artifacts: per-file ....xtb=file://tools/translation/TRANSLATION_OWNERS
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 7ce4046..6dee1c0d 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -352,6 +352,8 @@ "after_startup_task_utils.cc", "after_startup_task_utils.h", "aggregation_service/aggregatable_report_manager.h", + "aggregation_service/aggregatable_report_sender.cc", + "aggregation_service/aggregatable_report_sender.h", "aggregation_service/aggregation_service_key_fetcher.cc", "aggregation_service/aggregation_service_key_fetcher.h", "aggregation_service/aggregation_service_key_storage.h",
diff --git a/content/browser/OWNERS b/content/browser/OWNERS index d5709b0..0950cc4 100644 --- a/content/browser/OWNERS +++ b/content/browser/OWNERS
@@ -60,3 +60,7 @@ # Network Service. per-file network_service_*=file://services/network/OWNERS per-file network_context_*=file://services/network/OWNERS + +# For threading (BrowserThread, BrowserMainLoop, etc.) +per-file *browser_main_loop*=gab@chromium.org +per-file *browser_thread*=gab@chromium.org
diff --git a/content/browser/aggregation_service/aggregatable_report_sender.cc b/content/browser/aggregation_service/aggregatable_report_sender.cc new file mode 100644 index 0000000..d726f63 --- /dev/null +++ b/content/browser/aggregation_service/aggregatable_report_sender.cc
@@ -0,0 +1,148 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/browser/aggregation_service/aggregatable_report_sender.h" + +#include <memory> +#include <string> +#include <utility> + +#include "base/callback.h" +#include "base/check.h" +#include "base/json/json_string_value_serializer.h" +#include "base/memory/scoped_refptr.h" +#include "base/metrics/histogram_functions.h" +#include "base/time/time.h" +#include "base/values.h" +#include "content/public/browser/storage_partition.h" +#include "net/base/load_flags.h" +#include "net/base/net_errors.h" +#include "net/http/http_request_headers.h" +#include "net/http/http_response_headers.h" +#include "net/http/http_status_code.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "services/network/public/cpp/resource_request.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/simple_url_loader.h" +#include "url/gurl.h" + +namespace content { + +AggregatableReportSender::AggregatableReportSender( + StoragePartition* storage_partition) + : storage_partition_(storage_partition) {} + +AggregatableReportSender::~AggregatableReportSender() = default; + +void AggregatableReportSender::SendReport(const GURL& url, + const base::Value& contents, + ReportSentCallback callback) { + // The browser process URLLoaderFactory is not created by default, so don't + // create it until it is directly needed. + if (!url_loader_factory_) { + url_loader_factory_ = + storage_partition_->GetURLLoaderFactoryForBrowserProcess(); + } + + auto resource_request = std::make_unique<network::ResourceRequest>(); + resource_request->url = url; + resource_request->method = net::HttpRequestHeaders::kPostMethod; + resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; + resource_request->load_flags = + net::LOAD_DISABLE_CACHE | net::LOAD_BYPASS_CACHE; + + // TODO(crbug.com/1238343): Update the "policy" field in the traffic + // annotation when a setting to disable the API is properly + // surfaced/implemented. + net::NetworkTrafficAnnotationTag traffic_annotation = + net::DefineNetworkTrafficAnnotation("aggregation_service_report", R"( + semantics { + sender: "Aggregation Service" + description: + "Sends the aggregatable report to reporting endpoint requested by " + "APIs that rely on private, secure aggregation (e.g. Attribution " + "Reporting API, see " + "https://github.com/WICG/conversion-measurement-api)." + trigger: + "When an aggregatable report has become eligible for reporting." + data: + "The aggregatable report encoded in JSON format." + destination: OTHER + } + policy { + cookies_allowed: NO + setting: + "This feature cannot be disabled by settings." + policy_exception_justification: + "Not implemented yet. The feature is used by a command line tool, " + "but not yet integrated with the browser." + })"); + + auto simple_url_loader = network::SimpleURLLoader::Create( + std::move(resource_request), traffic_annotation); + network::SimpleURLLoader* simple_url_loader_ptr = simple_url_loader.get(); + + auto it = loaders_in_progress_.insert(loaders_in_progress_.begin(), + std::move(simple_url_loader)); + simple_url_loader_ptr->SetTimeoutDuration(base::TimeDelta::FromSeconds(30)); + + std::string contents_json; + JSONStringValueSerializer serializer(&contents_json); + + // TODO(crbug.com/1244991): Check for required fields of contents. + bool succeeded = serializer.Serialize(contents); + DCHECK(succeeded); + simple_url_loader_ptr->AttachStringForUpload(contents_json, + "application/json"); + + const int kMaxRetries = 1; + + // Retry on a network change. A network change during DNS resolution + // results in a DNS error rather than a network change error, so retry in + // those cases as well. + int retry_mode = network::SimpleURLLoader::RETRY_ON_NETWORK_CHANGE | + network::SimpleURLLoader::RETRY_ON_NAME_NOT_RESOLVED; + simple_url_loader_ptr->SetRetryOptions(kMaxRetries, retry_mode); + + // Allow bodies of non-2xx responses to be returned. + simple_url_loader_ptr->SetAllowHttpErrorResults(true); + + // Unretained is safe because the URLLoader is owned by `this` and will be + // deleted before `this`. + simple_url_loader_ptr->DownloadHeadersOnly( + url_loader_factory_.get(), + base::BindOnce(&AggregatableReportSender::OnReportSent, + base::Unretained(this), std::move(it), + std::move(callback))); +} + +void AggregatableReportSender::SetURLLoaderFactoryForTesting( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { + url_loader_factory_ = url_loader_factory; +} + +void AggregatableReportSender::OnReportSent( + UrlLoaderList::iterator it, + ReportSentCallback callback, + scoped_refptr<net::HttpResponseHeaders> headers) { + RequestStatus status; + + network::SimpleURLLoader* loader = it->get(); + if (loader->NetError() != net::OK) { + status = RequestStatus::kNetworkError; + } else if (headers && + headers->response_code() == net::HttpStatusCode::HTTP_OK) { + status = RequestStatus::kOk; + } else { + status = RequestStatus::kServerError; + } + + base::UmaHistogramEnumeration( + "PrivacySandbox.AggregationService.ReportStatus", status); + + loaders_in_progress_.erase(it); + std::move(callback).Run(status); +} + +} // namespace content \ No newline at end of file
diff --git a/content/browser/aggregation_service/aggregatable_report_sender.h b/content/browser/aggregation_service/aggregatable_report_sender.h new file mode 100644 index 0000000..fce045a1 --- /dev/null +++ b/content/browser/aggregation_service/aggregatable_report_sender.h
@@ -0,0 +1,88 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATABLE_REPORT_SENDER_H_ +#define CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATABLE_REPORT_SENDER_H_ + +#include <list> +#include <memory> + +#include "base/callback_forward.h" +#include "base/memory/scoped_refptr.h" +#include "content/common/content_export.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/simple_url_loader.h" + +class GURL; + +namespace base { +class Value; +} // namespace base + +namespace net { +class HttpResponseHeaders; +} // namespace net + +namespace content { + +class StoragePartition; + +// This class is responsible for sending aggregatable reports to the reporting +// endpoints over the network. +class CONTENT_EXPORT AggregatableReportSender { + public: + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. + enum class RequestStatus { + kOk = 0, + // Corresponds to a non-zero NET_ERROR indicating error occurred reading or + // consuming the response body. + kNetworkError = 1, + // Corresponds to a non-200 HTTP response code from the reporting endpoint. + kServerError = 2, + kMaxValue = kServerError, + }; + + explicit AggregatableReportSender(StoragePartition* storage_partition); + AggregatableReportSender(const AggregatableReportSender&) = delete; + AggregatableReportSender& operator=(const AggregatableReportSender&) = delete; + ~AggregatableReportSender(); + + // Callback used to notify caller that the requested report has been sent. + using ReportSentCallback = base::OnceCallback<void(RequestStatus)>; + + // Sends an aggregatable report to the reporting endpoint `url`. This should + // generate a secure POST request with no-credentials. + void SendReport(const GURL& url, + const base::Value& contents, + ReportSentCallback callback); + + // Tests inject a TestURLLoaderFactory so they can mock the network response. + // Also called by the aggregation service tool to inject a + // network::mojom::URLLoaderFactory. + void SetURLLoaderFactoryForTesting( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory); + + private: + // This is a std::list so that iterators remain valid during modifications. + using UrlLoaderList = std::list<std::unique_ptr<network::SimpleURLLoader>>; + + // Called when headers are available for a sent report. + void OnReportSent(UrlLoaderList::iterator it, + ReportSentCallback callback, + scoped_refptr<net::HttpResponseHeaders> headers); + + // Reports that are actively being sent. + UrlLoaderList loaders_in_progress_; + + // Must outlive `this`. + StoragePartition* storage_partition_; + + // Lazily accessed URLLoaderFactory used for network requests. + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; +}; + +} // namespace content + +#endif // CONTENT_BROWSER_AGGREGATION_SERVICE_AGGREGATABLE_REPORT_SENDER_H_ \ No newline at end of file
diff --git a/content/browser/aggregation_service/aggregatable_report_sender_unittest.cc b/content/browser/aggregation_service/aggregatable_report_sender_unittest.cc new file mode 100644 index 0000000..fdfc2ea8 --- /dev/null +++ b/content/browser/aggregation_service/aggregatable_report_sender_unittest.cc
@@ -0,0 +1,263 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/browser/aggregation_service/aggregatable_report_sender.h" + +#include <memory> + +#include "base/callback_helpers.h" +#include "base/memory/scoped_refptr.h" +#include "base/test/bind.h" +#include "base/test/metrics/histogram_tester.h" +#include "content/public/test/browser_task_environment.h" +#include "net/base/load_flags.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" +#include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" +#include "services/network/public/mojom/url_response_head.mojom.h" +#include "services/network/test/test_url_loader_factory.h" +#include "services/network/test/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" +#include "url/origin.h" + +namespace content { + +namespace { +const char kExampleURL[] = "https://a.com/"; + +base::Value GetExampleContents() { + base::Value contents(base::Value::Type::DICTIONARY); + contents.SetStringKey("id", "1234"); + return contents; +} + +} // namespace + +class AggregatableReportSenderTest : public testing::Test { + public: + AggregatableReportSenderTest() + : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME), + sender_(std::make_unique<AggregatableReportSender>( + /*storage_partition=*/nullptr)), + shared_url_loader_factory_( + base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>( + &test_url_loader_factory_)) { + sender_->SetURLLoaderFactoryForTesting(shared_url_loader_factory_); + } + + protected: + content::BrowserTaskEnvironment task_environment_; + std::unique_ptr<AggregatableReportSender> sender_; + network::TestURLLoaderFactory test_url_loader_factory_; + + private: + scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory_; +}; + +TEST_F(AggregatableReportSenderTest, ReportSent_RequestAttributesSet) { + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + + const network::ResourceRequest* pending_request; + EXPECT_TRUE( + test_url_loader_factory_.IsPending(kExampleURL, &pending_request)); + + EXPECT_EQ(pending_request->url, GURL(kExampleURL)); + EXPECT_EQ(pending_request->method, net::HttpRequestHeaders::kPostMethod); + EXPECT_EQ(pending_request->credentials_mode, + network::mojom::CredentialsMode::kOmit); + + int load_flags = pending_request->load_flags; + EXPECT_TRUE(load_flags & net::LOAD_BYPASS_CACHE); + EXPECT_TRUE(load_flags & net::LOAD_DISABLE_CACHE); +} + +TEST_F(AggregatableReportSenderTest, ReportSent_UploadDataCorrect) { + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + + const network::ResourceRequest* pending_request; + EXPECT_TRUE( + test_url_loader_factory_.IsPending(kExampleURL, &pending_request)); + EXPECT_EQ(network::GetUploadData(*pending_request), R"({"id":"1234"})"); +} + +TEST_F(AggregatableReportSenderTest, ReportSent_StatusOk) { + sender_->SendReport( + GURL(kExampleURL), GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, AggregatableReportSender::RequestStatus::kOk); + })); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "")); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 0); +} + +TEST_F(AggregatableReportSenderTest, SenderDeletedDuringRequest_NoCrash) { + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + sender_.reset(); + EXPECT_FALSE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "")); +} + +TEST_F(AggregatableReportSenderTest, ReportRequestHangs_Timeout) { + sender_->SendReport( + GURL(kExampleURL), GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, + AggregatableReportSender::RequestStatus::kNetworkError); + })); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + + // The request should time out after 30 seconds. + task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(30)); + + EXPECT_EQ(test_url_loader_factory_.NumPending(), 0); +} + +TEST_F(AggregatableReportSenderTest, + ReportRequestFailsDueToNetworkChange_Retries) { + // Retry fails + { + sender_->SendReport( + GURL(kExampleURL), GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, + AggregatableReportSender::RequestStatus::kNetworkError); + })); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + + // Simulate the request failing due to network change. + test_url_loader_factory_.SimulateResponseForPendingRequest( + GURL(kExampleURL), + network::URLLoaderCompletionStatus(net::ERR_NETWORK_CHANGED), + network::mojom::URLResponseHead::New(), std::string()); + + // The sender should automatically retry. + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + + // Simulate a second request failure due to network change. + test_url_loader_factory_.SimulateResponseForPendingRequest( + GURL(kExampleURL), + network::URLLoaderCompletionStatus(net::ERR_NETWORK_CHANGED), + network::mojom::URLResponseHead::New(), std::string()); + + // We should not retry again. + EXPECT_EQ(test_url_loader_factory_.NumPending(), 0); + } + + // Retry succeeds + { + sender_->SendReport( + GURL(kExampleURL), GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, AggregatableReportSender::RequestStatus::kOk); + })); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + + // Simulate the request failing due to network change. + test_url_loader_factory_.SimulateResponseForPendingRequest( + GURL(kExampleURL), + network::URLLoaderCompletionStatus(net::ERR_NETWORK_CHANGED), + network::mojom::URLResponseHead::New(), std::string()); + + // The sender should automatically retry. + EXPECT_EQ(test_url_loader_factory_.NumPending(), 1); + + // Simulate a second request with respoonse. + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "")); + } +} + +TEST_F(AggregatableReportSenderTest, HttpError_CallbackRuns) { + bool callback_run = false; + sender_->SendReport( + GURL(kExampleURL), GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, + AggregatableReportSender::RequestStatus::kServerError); + callback_run = true; + })); + + // We should run the callback even if there is an http error. + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "", net::HttpStatusCode::HTTP_BAD_REQUEST)); + + EXPECT_TRUE(callback_run); +} + +TEST_F(AggregatableReportSenderTest, ManyReports_AllSentSuccessfully) { + GURL url = GURL(kExampleURL); + int num_callbacks_run = 0; + for (int i = 0; i < 10; i++) { + sender_->SendReport( + url, GetExampleContents(), + base::BindLambdaForTesting( + [&](AggregatableReportSender::RequestStatus status) { + EXPECT_EQ(status, AggregatableReportSender::RequestStatus::kOk); + ++num_callbacks_run; + })); + } + + EXPECT_EQ(test_url_loader_factory_.NumPending(), 10); + + for (int i = 0; i < 10; i++) { + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "")); + } + + EXPECT_EQ(num_callbacks_run, 10); + EXPECT_EQ(test_url_loader_factory_.NumPending(), 0); +} + +TEST_F(AggregatableReportSenderTest, StatusHistoram_Expected) { + // All OK. + { + base::HistogramTester histograms; + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, "")); + histograms.ExpectUniqueSample( + "PrivacySandbox.AggregationService.ReportStatus", + AggregatableReportSender::RequestStatus::kOk, 1); + } + + // Network error. + { + base::HistogramTester histograms; + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + network::URLLoaderCompletionStatus completion_status(net::ERR_FAILED); + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + GURL(kExampleURL), completion_status, + network::mojom::URLResponseHead::New(), std::string())); + histograms.ExpectUniqueSample( + "PrivacySandbox.AggregationService.ReportStatus", + AggregatableReportSender::RequestStatus::kNetworkError, 1); + } + + // Server error. + { + base::HistogramTester histograms; + sender_->SendReport(GURL(kExampleURL), GetExampleContents(), + base::DoNothing()); + EXPECT_TRUE(test_url_loader_factory_.SimulateResponseForPendingRequest( + kExampleURL, std::string(), net::HTTP_UNAUTHORIZED)); + histograms.ExpectUniqueSample( + "PrivacySandbox.AggregationService.ReportStatus", + AggregatableReportSender::RequestStatus::kServerError, 1); + } +} + +} // namespace content
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 41118db..094d0dc 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -11550,7 +11550,9 @@ INSTANTIATE_TEST_SUITE_P(All, BackForwardCacheUnloadStrategyBrowserTest, - testing::Values("always", "opt_in_header_required")); + testing::Values("always", + "opt_in_header_required", + "no")); IN_PROC_BROWSER_TEST_P(BackForwardCacheUnloadStrategyBrowserTest, UnloadHandlerPresentWithOptInHeader) { @@ -11572,7 +11574,13 @@ web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectRestored(FROM_HERE); + if (GetParam() == "always" || GetParam() == "opt_in_header_required") { + ExpectRestored(FROM_HERE); + } else { + ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason:: + kUnloadHandlerExistsInMainFrame}, + {}, {}, {}, FROM_HERE); + } // 4) Go forward. web_contents()->GetController().GoForward(); @@ -11600,11 +11608,14 @@ if (GetParam() == "always") { ExpectRestored(FROM_HERE); - } else { - EXPECT_EQ(GetParam(), "opt_in_header_required"); + } else if (GetParam() == "opt_in_header_required") { ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason:: kOptInUnloadHeaderNotPresent}, {}, {}, {}, FROM_HERE); + } else { + ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason:: + kUnloadHandlerExistsInMainFrame}, + {}, {}, {}, FROM_HERE); } // 4) Go forward. @@ -11634,7 +11645,14 @@ web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); - ExpectRestored(FROM_HERE); + if (GetParam() == "always" || GetParam() == "opt_in_header_required") { + ExpectRestored(FROM_HERE); + } else { + ASSERT_EQ("no", GetParam()); + ExpectNotRestored({BackForwardCacheMetrics::NotRestoredReason:: + kUnloadHandlerExistsInSubFrame}, + {}, {}, {}, FROM_HERE); + } // 4) Go forward. web_contents()->GetController().GoForward();
diff --git a/content/browser/cross_origin_opener_policy_browsertest.cc b/content/browser/cross_origin_opener_policy_browsertest.cc index 837148e..5016332 100644 --- a/content/browser/cross_origin_opener_policy_browsertest.cc +++ b/content/browser/cross_origin_opener_policy_browsertest.cc
@@ -2716,6 +2716,107 @@ popup_web_contents->GetMainFrame()->cross_origin_opener_policy()); } +// Regression test for https://crbug.com/1239540. +IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest, + ReloadCrossOriginIsolatedPageWhileOffline) { + GURL isolated_page( + https_server()->GetURL("a.com", + "/set-header?" + "Cross-Origin-Opener-Policy: same-origin&" + "Cross-Origin-Embedder-Policy: require-corp")); + + // Initial cross origin isolated page. + EXPECT_TRUE(NavigateToURL(shell(), isolated_page)); + SiteInstanceImpl* main_si = current_frame_host()->GetSiteInstance(); + EXPECT_TRUE(main_si->IsCrossOriginIsolated()); + + // Simulate being offline by failing all network requests. + auto url_loader_interceptor = + std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating( + [](content::URLLoaderInterceptor::RequestParams* params) { + network::URLLoaderCompletionStatus status; + status.error_code = net::Error::ERR_CONNECTION_FAILED; + params->client->OnComplete(status); + return true; + })); + + // Reload and end up with an error page to verify we do not violate any cross + // origin isolation invariant. + ReloadBlockUntilNavigationsComplete(shell(), 1); +} + +// Regression test for https://crbug.com/1239540. +IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest, + ReloadCoopPageWhileOffline) { + GURL isolated_page( + https_server()->GetURL("a.com", + "/set-header?" + "Cross-Origin-Opener-Policy: same-origin")); + + // Initial coop isolated page. + EXPECT_TRUE(NavigateToURL(shell(), isolated_page)); + RenderFrameHostImpl* main_rfh = current_frame_host(); + EXPECT_EQ(main_rfh->cross_origin_opener_policy(), CoopSameOrigin()); + + // Simulate being offline by failing all network requests. + auto url_loader_interceptor = + std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating( + [](content::URLLoaderInterceptor::RequestParams* params) { + network::URLLoaderCompletionStatus status; + status.error_code = net::Error::ERR_CONNECTION_FAILED; + params->client->OnComplete(status); + return true; + })); + + // Reload and end up with an error page to verify we do not violate any cross + // origin isolation invariant. + ReloadBlockUntilNavigationsComplete(shell(), 1); +} + +// Regression test for https://crbug.com/1239540. +IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest, + BackNavigationToCrossOriginIsolatedPageWhileOffline) { + GURL isolated_page( + https_server()->GetURL("a.com", + "/set-header?" + "Cross-Origin-Opener-Policy: same-origin&" + "Cross-Origin-Embedder-Policy: require-corp")); + + GURL same_origin_isolated_page( + https_server()->GetURL("a.com", "/cross-origin-isolated.html")); + + // Put the initial isolated page in history. + EXPECT_TRUE(NavigateToURL(shell(), isolated_page)); + SiteInstanceImpl* main_si = current_frame_host()->GetSiteInstance(); + EXPECT_TRUE(main_si->IsCrossOriginIsolated()); + + // This test relies on actually doing the back navigation from network. + // We disable BFCache on the initial to ensure that happens. + DisableBFCacheForRFHForTesting(current_frame_host()->GetGlobalId()); + + // Navigate to a same origin isolated page, staying in the same + // BrowsingInstance. This is also ensured by having the BFCache disabled on + // the initial page, avoiding special same-site proactive swaps. + EXPECT_TRUE(NavigateToURL(shell(), same_origin_isolated_page)); + main_si = current_frame_host()->GetSiteInstance(); + EXPECT_TRUE(main_si->IsCrossOriginIsolated()); + + // Simulate being offline by failing all network requests. + auto url_loader_interceptor = + std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating( + [](content::URLLoaderInterceptor::RequestParams* params) { + network::URLLoaderCompletionStatus status; + status.error_code = net::Error::ERR_CONNECTION_FAILED; + params->client->OnComplete(status); + return true; + })); + + // Go back and end up with an error page to verify we do not violate any cross + // origin isolation invariant. + web_contents()->GetController().GoBack(); + EXPECT_FALSE(WaitForLoadStop(web_contents())); +} + IN_PROC_BROWSER_TEST_P(CrossOriginOpenerPolicyBrowserTest, CrossOriginRedirectHasProperCrossOriginIsolatedState) { GURL non_isolated_page(
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc index fe8242c3..7529652 100644 --- a/content/browser/devtools/protocol/page_handler.cc +++ b/content/browser/devtools/protocol/page_handler.cc
@@ -1384,6 +1384,9 @@ case Reason::kOptInUnloadHeaderNotPresent: return Page::BackForwardCacheNotRestoredReasonEnum:: OptInUnloadHeaderNotPresent; + case Reason::kUnloadHandlerExistsInMainFrame: + return Page::BackForwardCacheNotRestoredReasonEnum:: + UnloadHandlerExistsInMainFrame; case Reason::kUnloadHandlerExistsInSubFrame: return Page::BackForwardCacheNotRestoredReasonEnum:: UnloadHandlerExistsInSubFrame; @@ -1674,6 +1677,7 @@ case Reason::kNoResponseHead: return Page::BackForwardCacheNotRestoredReasonTypeEnum::Circumstantial; case Reason::kOptInUnloadHeaderNotPresent: + case Reason::kUnloadHandlerExistsInMainFrame: case Reason::kUnloadHandlerExistsInSubFrame: return Page::BackForwardCacheNotRestoredReasonTypeEnum::PageSupportNeeded; case Reason::kNetworkRequestDatapipeDrainedAsBytesConsumer:
diff --git a/content/browser/loader/navigation_early_hints_browsertest.cc b/content/browser/loader/navigation_early_hints_browsertest.cc index 7a145dc..ed16ecf 100644 --- a/content/browser/loader/navigation_early_hints_browsertest.cc +++ b/content/browser/loader/navigation_early_hints_browsertest.cc
@@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/memory/weak_ptr.h" #include "base/run_loop.h" #include "base/strings/strcat.h" #include "base/strings/stringprintf.h" @@ -26,6 +27,7 @@ #include "net/http/http_status_code.h" #include "net/test/cert_test_util.h" #include "net/test/embedded_test_server/embedded_test_server.h" +#include "net/test/embedded_test_server/embedded_test_server_connection_listener.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" #include "net/test/quic_simple_test_server.h" @@ -93,6 +95,46 @@ const char kEmptyPagePath[] = "/empty.html"; const char kEmptyPageBody[] = "<html></html>"; +// Listens to sockets on an EmbeddedTestServer for preconnect tests. Created +// on the UI thread. EmbeddedTestServerConnectionListener methods are called +// from a different thread than the UI thread. +class PreconnectListener + : public net::test_server::EmbeddedTestServerConnectionListener { + public: + PreconnectListener() + : task_runner_(base::ThreadTaskRunnerHandle::Get()), + weak_ptr_factory_(this) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + } + ~PreconnectListener() override = default; + + // net::test_server::EmbeddedTestServerConnectionListener implementation: + std::unique_ptr<net::StreamSocket> AcceptedSocket( + std::unique_ptr<net::StreamSocket> connection) override { + task_runner_->PostTask( + FROM_HERE, base::BindOnce(&PreconnectListener::AcceptedSocketOnUIThread, + weak_ptr_factory_.GetWeakPtr())); + return connection; + } + void ReadFromSocket(const net::StreamSocket& connection, int rv) override {} + + size_t num_accepted_sockets() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + return num_accepted_sockets_; + } + + private: + void AcceptedSocketOnUIThread() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + ++num_accepted_sockets_; + } + + scoped_refptr<base::SequencedTaskRunner> task_runner_; + size_t num_accepted_sockets_ = 0; + + base::WeakPtrFactory<PreconnectListener> weak_ptr_factory_; +}; + } // namespace // Most tests use EmbeddedTestServer but this uses QuicSimpleTestServer because @@ -106,6 +148,13 @@ ContentBrowserTest::SetUpOnMainThread(); ConfigureMockCertVerifier(); host_resolver()->AddRule("*", "127.0.0.1"); + + cross_origin_server_.RegisterRequestHandler( + base::BindRepeating(&NavigationEarlyHintsTest::HandleCrossOriginRequest, + base::Unretained(this))); + preconnect_listener_ = std::make_unique<PreconnectListener>(); + cross_origin_server().SetConnectionListener(preconnect_listener_.get()); + ASSERT_TRUE(cross_origin_server_.Start()); } void SetUpCommandLine(base::CommandLine* command_line) override { @@ -116,11 +165,6 @@ net::features::kSplitCacheByNetworkIsolationKey}, {}); - cross_origin_server_.RegisterRequestHandler( - base::BindRepeating(&NavigationEarlyHintsTest::HandleCrossOriginRequest, - base::Unretained(this))); - ASSERT_TRUE(cross_origin_server_.Start()); - ASSERT_TRUE(net::QuicSimpleTestServer::Start()); ContentBrowserTest::SetUpCommandLine(command_line); @@ -139,6 +183,8 @@ protected: base::test::ScopedFeatureList& feature_list() { return feature_list_; } + PreconnectListener& preconnect_listener() { return *preconnect_listener_; } + void SetUpInProcessBrowserTestFixture() override { mock_cert_verifier_.SetUpInProcessBrowserTestFixture(); } @@ -331,6 +377,7 @@ // For tests that fetch resources from a cross origin server. net::EmbeddedTestServer cross_origin_server_; + std::unique_ptr<PreconnectListener> preconnect_listener_; }; IN_PROC_BROWSER_TEST_F(NavigationEarlyHintsTest, Basic) { @@ -636,6 +683,23 @@ ASSERT_FALSE(is_cached.value()); } +IN_PROC_BROWSER_TEST_F(NavigationEarlyHintsTest, SimplePreconnect) { + const char kPageWithPreconnect[] = "/page_with_preconnect.html"; + const GURL kPreconnectUrl = cross_origin_server().GetURL("/"); + ResponseEntry page_entry(kPageWithPreconnect, net::HTTP_OK); + HeaderField link_header = + HeaderField("link", base::StringPrintf("<%s>; rel=preconnect", + kPreconnectUrl.spec().c_str())); + page_entry.AddEarlyHints({std::move(link_header)}); + RegisterResponse(page_entry); + + ASSERT_TRUE(NavigateToURL( + shell(), net::QuicSimpleTestServer::GetFileURL(kPageWithPreconnect))); + ASSERT_TRUE(WaitForLoadStop(shell()->web_contents())); + + EXPECT_EQ(preconnect_listener().num_accepted_sockets(), 1UL); +} + class NavigationEarlyHintsAddressSpaceTest : public NavigationEarlyHintsTest { public: NavigationEarlyHintsAddressSpaceTest() = default;
diff --git a/content/browser/loader/navigation_early_hints_manager.cc b/content/browser/loader/navigation_early_hints_manager.cc index 213a03e..a84ccd3 100644 --- a/content/browser/loader/navigation_early_hints_manager.cc +++ b/content/browser/loader/navigation_early_hints_manager.cc
@@ -9,6 +9,7 @@ #include "base/metrics/field_trial_params.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/global_request_id.h" +#include "content/public/browser/storage_partition.h" #include "content/public/browser/url_loader_throttles.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_features.h" @@ -22,6 +23,7 @@ #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/public/mojom/fetch_api.mojom.h" +#include "services/network/public/mojom/network_context.mojom.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "services/network/public/mojom/url_response_head.mojom.h" #include "third_party/blink/public/common/loader/throttling_url_loader.h" @@ -186,6 +188,47 @@ NavigationEarlyHintsManagerParams& NavigationEarlyHintsManagerParams::operator=( NavigationEarlyHintsManagerParams&&) = default; +// Represents a preconnect. +struct NavigationEarlyHintsManager::PreconnectEntry { + PreconnectEntry(const url::Origin& origin, + network::mojom::CrossOriginAttribute cross_origin); + ~PreconnectEntry(); + PreconnectEntry(const PreconnectEntry&); + PreconnectEntry& operator=(const PreconnectEntry&); + + bool operator==(const PreconnectEntry&); + bool operator<(const PreconnectEntry&) const; + + url::Origin origin; + network::mojom::CrossOriginAttribute cross_origin; +}; + +NavigationEarlyHintsManager::PreconnectEntry::PreconnectEntry( + const url::Origin& origin, + network::mojom::CrossOriginAttribute cross_origin) + : origin(origin), cross_origin(cross_origin) {} + +NavigationEarlyHintsManager::PreconnectEntry::~PreconnectEntry() = default; + +NavigationEarlyHintsManager::PreconnectEntry::PreconnectEntry( + const PreconnectEntry&) = default; + +NavigationEarlyHintsManager::PreconnectEntry& +NavigationEarlyHintsManager::PreconnectEntry::operator=( + const PreconnectEntry&) = default; + +bool NavigationEarlyHintsManager::PreconnectEntry::operator==( + const PreconnectEntry& other) { + return origin == other.origin && cross_origin == other.cross_origin; +} + +bool NavigationEarlyHintsManager::PreconnectEntry::operator<( + const PreconnectEntry& other) const { + if (origin == other.origin) + return cross_origin < other.cross_origin; + return origin < other.origin; +} + NavigationEarlyHintsManager::PreloadedResource::PreloadedResource() = default; NavigationEarlyHintsManager::PreloadedResource::~PreloadedResource() = default; @@ -291,9 +334,11 @@ NavigationEarlyHintsManager::NavigationEarlyHintsManager( BrowserContext& browser_context, + StoragePartition& storage_partition, int frame_tree_node_id, NavigationEarlyHintsManagerParams params) : browser_context_(browser_context), + storage_partition_(storage_partition), frame_tree_node_id_(frame_tree_node_id), loader_factory_(std::move(params.loader_factory)), origin_(params.origin), @@ -313,8 +358,10 @@ for (const auto& link : early_hints->headers->link_headers) { // TODO(crbug.com/671310): Support other `rel` attributes. - if (link->rel == network::mojom::LinkRelAttribute::kPreload || - link->rel == network::mojom::LinkRelAttribute::kModulePreload) { + if (link->rel == network::mojom::LinkRelAttribute::kPreconnect) { + MaybePreconnect(link, enabled_by_origin_trial); + } else if (link->rel == network::mojom::LinkRelAttribute::kPreload || + link->rel == network::mojom::LinkRelAttribute::kModulePreload) { MaybePreloadHintedResource(link, navigation_request, enabled_by_origin_trial); } @@ -351,6 +398,21 @@ preloads_completion_callback_for_testing_ = std::move(callback); } +void NavigationEarlyHintsManager::SetNetworkContextForTesting( + network::mojom::NetworkContext* network_context) { + DCHECK(!network_context_for_testing_); + DCHECK(network_context); + network_context_for_testing_ = network_context; +} + +network::mojom::NetworkContext* +NavigationEarlyHintsManager::GetNetworkContext() { + if (network_context_for_testing_) + return network_context_for_testing_; + + return storage_partition_.GetNetworkContext(); +} + bool NavigationEarlyHintsManager::IsPreloadForNavigationEnabledByOriginTrial( const std::vector<std::string>& raw_tokens) { if (!blink::TrialTokenValidator::IsTrialPossibleOnOrigin(origin_.GetURL())) @@ -375,18 +437,45 @@ return false; } +void NavigationEarlyHintsManager::MaybePreconnect( + const network::mojom::LinkHeaderPtr& link, + bool enabled_by_origin_trial) { + if (!ShouldHandleResourceHints(link, enabled_by_origin_trial)) + return; + + PreconnectEntry entry(url::Origin::Create(link->href), link->cross_origin); + if (preconnect_entries_.contains(entry)) + return; + + network::mojom::NetworkContext* network_context = GetNetworkContext(); + if (!network_context) + return; + + bool allow_credentials = + link->cross_origin != network::mojom::CrossOriginAttribute::kAnonymous; + network_context->PreconnectSockets(/*num_streams=*/1, link->href, + allow_credentials, + isolation_info_.network_isolation_key()); + preconnect_entries_.insert(std::move(entry)); +} + void NavigationEarlyHintsManager::MaybePreloadHintedResource( const network::mojom::LinkHeaderPtr& link, const network::ResourceRequest& navigation_request, bool enabled_by_origin_trial) { DCHECK(navigation_request.is_main_frame); + DCHECK(navigation_request.url.SchemeIsHTTPOrHTTPS()); was_preload_link_header_received_ = true; - if (!ShouldPreload(link, enabled_by_origin_trial)) + if (!ShouldHandleResourceHints(link, enabled_by_origin_trial)) return; - DCHECK(navigation_request.url.SchemeIsHTTPOrHTTPS()); + if (inflight_preloads_.contains(link->href) || + preloaded_resources_.contains(link->href)) { + return; + } + auto preload_origin = url::Origin::Create(link->href); net::SiteForCookies site_for_cookies = @@ -431,7 +520,7 @@ was_preload_triggered_by_origin_trial_ = true; } -bool NavigationEarlyHintsManager::ShouldPreload( +bool NavigationEarlyHintsManager::ShouldHandleResourceHints( const network::mojom::LinkHeaderPtr& link, bool enabled_by_origin_trial) { if (IsDisabledEarlyHintsPreloadForcibly()) @@ -446,11 +535,6 @@ if (!link->href.SchemeIsHTTPOrHTTPS()) return false; - if (inflight_preloads_.contains(link->href) || - preloaded_resources_.contains(link->href)) { - return false; - } - return true; }
diff --git a/content/browser/loader/navigation_early_hints_manager.h b/content/browser/loader/navigation_early_hints_manager.h index 9adb74d5..21b41c8 100644 --- a/content/browser/loader/navigation_early_hints_manager.h +++ b/content/browser/loader/navigation_early_hints_manager.h
@@ -7,6 +7,7 @@ #include "base/callback_forward.h" #include "base/containers/flat_map.h" +#include "base/containers/flat_set.h" #include "content/common/content_export.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/base/isolation_info.h" @@ -22,6 +23,10 @@ } // namespace blink namespace network { +namespace mojom { +class NetworkContext; +} // namespace mojom + struct ResourceRequest; class SharedURLLoaderFactory; } // namespace network @@ -29,6 +34,7 @@ namespace content { class BrowserContext; +class StoragePartition; // Contains parameters to create NavigationEarlyHintsManager. struct CONTENT_EXPORT NavigationEarlyHintsManagerParams { @@ -52,8 +58,8 @@ mojo::Remote<network::mojom::URLLoaderFactory> loader_factory; }; -// Handles 103 Early Hints responses for navigation. Responsible for preloads -// requested by Early Hints responses. Created when the first 103 response is +// Handles 103 Early Hints responses for navigation. Responsible for resource +// hints in Early Hints responses. Created when the first 103 response is // received and owned by NavigationURLLoaderImpl until the final response to the // navigation request is received. NavigationURLLoaderImpl transfers the // ownership of this instance to RenderFrameHostImpl via NavigationRequest when @@ -79,6 +85,7 @@ using PreloadedResources = base::flat_map<GURL, PreloadedResource>; NavigationEarlyHintsManager(BrowserContext& browser_context, + StoragePartition& storage_partition, int frame_tree_node_id, NavigationEarlyHintsManagerParams params); @@ -109,34 +116,46 @@ void WaitForPreloadsFinishedForTesting( base::OnceCallback<void(PreloadedResources)> callback); + void SetNetworkContextForTesting( + network::mojom::NetworkContext* network_context); + private: class PreloadURLLoaderClient; + struct PreconnectEntry; + + network::mojom::NetworkContext* GetNetworkContext(); + bool IsPreloadForNavigationEnabledByOriginTrial( const std::vector<std::string>& raw_tokens); + void MaybePreconnect(const network::mojom::LinkHeaderPtr& link, + bool enabled_by_origin_trial); + void MaybePreloadHintedResource( const network::mojom::LinkHeaderPtr& link, const network::ResourceRequest& navigation_request, bool enabled_by_origin_trial); - // Determines whether the linked resource should be preloaded. - // Currently we are running two trials: The field trial and the origin trial. - // When the field trial forcibly disables preloads, always returns false. - // Otherwise, returns true when either of trials is enabled and there is - // no inflight preload for the resource, with additional checks. - bool ShouldPreload(const network::mojom::LinkHeaderPtr& link, - bool enabled_by_origin_trial); + // Determines whether resource hints like preload and preconnect should be + // handled or not. Currently we are running two trials: The field trial and + // the origin trial. When the field trial forcibly disables preloads, always + // returns false. Otherwise, returns true when either of trials is enabled. + bool ShouldHandleResourceHints(const network::mojom::LinkHeaderPtr& link, + bool enabled_by_origin_trial); void OnPreloadComplete(const GURL& url, const PreloadedResource& result); BrowserContext& browser_context_; + StoragePartition& storage_partition_; const int frame_tree_node_id_; scoped_refptr<network::SharedURLLoaderFactory> shared_loader_factory_; mojo::Remote<network::mojom::URLLoaderFactory> loader_factory_; const url::Origin origin_; const net::IsolationInfo isolation_info_; + base::flat_set<PreconnectEntry> preconnect_entries_; + struct InflightPreload { InflightPreload(std::unique_ptr<blink::ThrottlingURLLoader> loader, std::unique_ptr<PreloadURLLoaderClient> client); @@ -165,6 +184,8 @@ base::OnceCallback<void(PreloadedResources)> preloads_completion_callback_for_testing_; + + network::mojom::NetworkContext* network_context_for_testing_ = nullptr; }; } // namespace content
diff --git a/content/browser/loader/navigation_early_hints_manager_unittest.cc b/content/browser/loader/navigation_early_hints_manager_unittest.cc index f9eaddd..860a2fb 100644 --- a/content/browser/loader/navigation_early_hints_manager_unittest.cc +++ b/content/browser/loader/navigation_early_hints_manager_unittest.cc
@@ -13,6 +13,7 @@ #include "content/browser/renderer_host/frame_tree_node.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" +#include "content/public/test/test_storage_partition.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/cpp/resource_request.h" @@ -20,6 +21,7 @@ #include "services/network/public/mojom/early_hints.mojom.h" #include "services/network/public/mojom/link_header.mojom.h" #include "services/network/public/mojom/parsed_headers.mojom.h" +#include "services/network/test/test_network_context.h" #include "services/network/test/test_url_loader_factory.h" #include "testing/gtest/include/gtest/gtest.h" @@ -33,17 +35,58 @@ const char kPreloadPath[] = "https://a.test/script.js"; const std::string kPreloadBody = "/*empty*/"; +struct PreconnectRequest { + PreconnectRequest(const GURL& url, + bool allow_credentials, + const net::NetworkIsolationKey& network_isolation_key) + : url(url), + allow_credentials(allow_credentials), + network_isolation_key(network_isolation_key) {} + + GURL const url; + bool const allow_credentials; + net::NetworkIsolationKey const network_isolation_key; +}; + +class FakeNetworkContext : public network::TestNetworkContext { + public: + FakeNetworkContext() = default; + ~FakeNetworkContext() override = default; + + void PreconnectSockets( + uint32_t num_streams, + const GURL& url, + bool allow_credentials, + const net::NetworkIsolationKey& network_isolation_key) override { + preconnect_requests_.emplace_back(url, allow_credentials, + network_isolation_key); + } + + std::vector<PreconnectRequest>& preconnect_requests() { + return preconnect_requests_; + } + + private: + std::vector<PreconnectRequest> preconnect_requests_; +}; + } // namespace class NavigationEarlyHintsManagerTest : public testing::Test { public: NavigationEarlyHintsManagerTest() : task_environment_(base::test::TaskEnvironment::MainThreadType::IO) { + url::Origin origin = url::Origin::Create(GURL(kNavigationPath)); + auto isolation_info = net::IsolationInfo::CreateForInternalRequest(origin); + + network_isolation_key_ = isolation_info.network_isolation_key(); + mojo::Remote<network::mojom::URLLoaderFactory> remote; loader_factory_.Clone(remote.BindNewPipeAndPassReceiver()); early_hints_manager_ = std::make_unique<NavigationEarlyHintsManager>( - browser_context_, FrameTreeNode::kFrameTreeNodeInvalidId, - NavigationEarlyHintsManagerParams(url::Origin(), net::IsolationInfo(), + browser_context_, storage_partition_, + FrameTreeNode::kFrameTreeNodeInvalidId, + NavigationEarlyHintsManagerParams(origin, std::move(isolation_info), std::move(remote))); } @@ -52,6 +95,9 @@ void SetUp() override { feature_list_.InitAndEnableFeature( features::kEarlyHintsPreloadForNavigation); + fake_network_context_ = std::make_unique<FakeNetworkContext>(); + early_hints_manager().SetNetworkContextForTesting( + fake_network_context_.get()); } protected: @@ -61,6 +107,12 @@ return *early_hints_manager_; } + FakeNetworkContext& fake_network_context() { return *fake_network_context_; } + + net::NetworkIsolationKey& network_isolation_key() { + return network_isolation_key_; + } + network::mojom::URLResponseHeadPtr CreatePreloadResponseHead() { auto head = network::mojom::URLResponseHead::New(); head->headers = @@ -105,8 +157,11 @@ BrowserTaskEnvironment task_environment_; TestBrowserContext browser_context_; + TestStoragePartition storage_partition_; network::TestURLLoaderFactory loader_factory_; std::unique_ptr<NavigationEarlyHintsManager> early_hints_manager_; + std::unique_ptr<FakeNetworkContext> fake_network_context_; + net::NetworkIsolationKey network_isolation_key_; }; TEST_F(NavigationEarlyHintsManagerTest, SimpleResponse) { @@ -187,4 +242,96 @@ EXPECT_FALSE(early_hints_manager().HasInflightPreloads()); } +TEST_F(NavigationEarlyHintsManagerTest, SinglePreconnect) { + auto preconnect_url = GURL("https://b.test"); + auto link_header = network::mojom::LinkHeader::New( + preconnect_url, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kUnspecified, + /*mime_type=*/absl::nullopt); + auto hints = network::mojom::EarlyHints::New(); + hints->headers = network::mojom::ParsedHeaders::New(); + hints->headers->link_headers.push_back(std::move(link_header)); + + early_hints_manager().HandleEarlyHints(std::move(hints), + CreateNavigationResourceRequest()); + + std::vector<PreconnectRequest>& requests = + fake_network_context().preconnect_requests(); + ASSERT_EQ(requests.size(), 1UL); + EXPECT_EQ(requests[0].url, preconnect_url); + EXPECT_TRUE(requests[0].allow_credentials); + EXPECT_EQ(requests[0].network_isolation_key, network_isolation_key()); +} + +TEST_F(NavigationEarlyHintsManagerTest, MultiplePreconnects) { + auto preconnect_url1 = GURL("https://b.test"); + auto preconnect_url2 = GURL("https://c.test"); + + auto hints = network::mojom::EarlyHints::New(); + hints->headers = network::mojom::ParsedHeaders::New(); + + // Add four preconnect Link headers. The first three Links have the same + // origin. The third and fourth Links specify crossorigin attribute. The + // second Link should be skipped since it is a duplication of the first one. + hints->headers->link_headers.push_back(network::mojom::LinkHeader::New( + preconnect_url1, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kUnspecified, + /*mime_type=*/absl::nullopt)); + hints->headers->link_headers.push_back(network::mojom::LinkHeader::New( + preconnect_url1, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kUnspecified, + /*mime_type=*/absl::nullopt)); + hints->headers->link_headers.push_back(network::mojom::LinkHeader::New( + preconnect_url1, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kAnonymous, + /*mime_type=*/absl::nullopt)); + hints->headers->link_headers.push_back(network::mojom::LinkHeader::New( + preconnect_url2, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kAnonymous, + /*mime_type=*/absl::nullopt)); + + early_hints_manager().HandleEarlyHints(std::move(hints), + CreateNavigationResourceRequest()); + + std::vector<PreconnectRequest>& requests = + fake_network_context().preconnect_requests(); + ASSERT_EQ(requests.size(), 3UL); + + EXPECT_EQ(requests[0].url, preconnect_url1); + EXPECT_TRUE(requests[0].allow_credentials); + EXPECT_EQ(requests[0].network_isolation_key, network_isolation_key()); + + EXPECT_EQ(requests[1].url, preconnect_url1); + EXPECT_FALSE(requests[1].allow_credentials); + EXPECT_EQ(requests[1].network_isolation_key, network_isolation_key()); + + EXPECT_EQ(requests[2].url, preconnect_url2); + EXPECT_FALSE(requests[2].allow_credentials); + EXPECT_EQ(requests[2].network_isolation_key, network_isolation_key()); +} + +TEST_F(NavigationEarlyHintsManagerTest, InvalidPreconnectLink) { + auto preconnect_url = GURL("file:///"); + auto link_header = network::mojom::LinkHeader::New( + preconnect_url, network::mojom::LinkRelAttribute::kPreconnect, + network::mojom::LinkAsAttribute::kUnspecified, + network::mojom::CrossOriginAttribute::kUnspecified, + /*mime_type=*/absl::nullopt); + auto hints = network::mojom::EarlyHints::New(); + hints->headers = network::mojom::ParsedHeaders::New(); + hints->headers->link_headers.push_back(std::move(link_header)); + + early_hints_manager().HandleEarlyHints(std::move(hints), + CreateNavigationResourceRequest()); + + std::vector<PreconnectRequest>& requests = + fake_network_context().preconnect_requests(); + EXPECT_TRUE(requests.empty()); +} + } // namespace content
diff --git a/content/browser/loader/navigation_url_loader_impl.cc b/content/browser/loader/navigation_url_loader_impl.cc index 653395a..33822b2 100644 --- a/content/browser/loader/navigation_url_loader_impl.cc +++ b/content/browser/loader/navigation_url_loader_impl.cc
@@ -777,7 +777,8 @@ if (!params) return; early_hints_manager_ = std::make_unique<NavigationEarlyHintsManager>( - *browser_context_, frame_tree_node_id_, std::move(*params)); + *browser_context_, *storage_partition_, frame_tree_node_id_, + std::move(*params)); } early_hints_manager_->HandleEarlyHints(std::move(early_hints),
diff --git a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc index 8958bfd..f7b1abe 100644 --- a/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc +++ b/content/browser/renderer_host/back_forward_cache_can_store_document_result.cc
@@ -229,6 +229,9 @@ case Reason::kOptInUnloadHeaderNotPresent: return "BFCache-Opt-In header not present, or does not include `unload` " "token, and an experimental config which requires it is active."; + case Reason::kUnloadHandlerExistsInMainFrame: + return "Unload handler exists in the main frame, and the current " + "experimental config doesn't permit it to be BFCached."; case Reason::kUnloadHandlerExistsInSubFrame: return "Unload handler exists in a sub frame, and the current " "experimental config doesn't permit it to be BFCached.";
diff --git a/content/browser/renderer_host/back_forward_cache_impl.cc b/content/browser/renderer_host/back_forward_cache_impl.cc index 499eea23..c54af059 100644 --- a/content/browser/renderer_host/back_forward_cache_impl.cc +++ b/content/browser/renderer_host/back_forward_cache_impl.cc
@@ -135,6 +135,7 @@ {BackForwardCacheImpl::UnloadSupportStrategy::kAlways, "always"}, {BackForwardCacheImpl::UnloadSupportStrategy::kOptInHeaderRequired, "opt_in_header_required"}, + {BackForwardCacheImpl::UnloadSupportStrategy::kNo, "no"}, }; BackForwardCacheImpl::UnloadSupportStrategy GetUnloadSupportStrategy() { @@ -142,7 +143,7 @@ #if defined(OS_ANDROID) BackForwardCacheImpl::UnloadSupportStrategy::kAlways; #else - BackForwardCacheImpl::UnloadSupportStrategy::kOptInHeaderRequired; + BackForwardCacheImpl::UnloadSupportStrategy::kNo; #endif if (!IsBackForwardCacheEnabled()) @@ -737,6 +738,15 @@ } } break; + case BackForwardCacheImpl::UnloadSupportStrategy::kNo: + if (has_unload_handler) { + result->No(rfh->GetParent() + ? BackForwardCacheMetrics::NotRestoredReason:: + kUnloadHandlerExistsInSubFrame + : BackForwardCacheMetrics::NotRestoredReason:: + kUnloadHandlerExistsInMainFrame); + } + break; } // When it's not the final decision for putting a page in the back-forward
diff --git a/content/browser/renderer_host/back_forward_cache_impl.h b/content/browser/renderer_host/back_forward_cache_impl.h index 8a8b8d8..0bd04630 100644 --- a/content/browser/renderer_host/back_forward_cache_impl.h +++ b/content/browser/renderer_host/back_forward_cache_impl.h
@@ -148,6 +148,7 @@ enum class UnloadSupportStrategy { kAlways, kOptInHeaderRequired, + kNo, }; BackForwardCacheImpl();
diff --git a/content/browser/renderer_host/back_forward_cache_metrics.h b/content/browser/renderer_host/back_forward_cache_metrics.h index df1d7100..56cbed9 100644 --- a/content/browser/renderer_host/back_forward_cache_metrics.h +++ b/content/browser/renderer_host/back_forward_cache_metrics.h
@@ -103,8 +103,7 @@ kBrowsingInstanceNotSwapped = 47, kBackForwardCacheDisabledForDelegate = 48, kOptInUnloadHeaderNotPresent = 49, - // 50: kUnloadHandlerExistsInMainFrame = 50 was removed, such cases would - // report kOptInUnloadHeaderNotPresent. + kUnloadHandlerExistsInMainFrame = 50, kUnloadHandlerExistsInSubFrame = 51, kServiceWorkerUnregistration = 52, kCacheControlNoStore = 53,
diff --git a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc index 1c3f6fb9..8f190a9 100644 --- a/content/browser/renderer_host/render_frame_host_impl_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_impl_browsertest.cc
@@ -6018,8 +6018,9 @@ std::unique_ptr<net::EmbeddedTestServer> alternate_test_server_; }; +// Failing on some builders, see https://crbug.com/1245980. IN_PROC_BROWSER_TEST_F(RenderFrameHostImplAnonymousIframeNikBrowserTest, - AnonymousIframeHasPartitionedNetworkState) { + DISABLED_AnonymousIframeHasPartitionedNetworkState) { GURL main_url = embedded_test_server()->GetURL("/title1.html"); for (bool anonymous : {false, true}) {
diff --git a/content/browser/renderer_host/render_frame_host_manager.cc b/content/browser/renderer_host/render_frame_host_manager.cc index 680efc8..4dfb49c 100644 --- a/content/browser/renderer_host/render_frame_host_manager.cc +++ b/content/browser/renderer_host/render_frame_host_manager.cc
@@ -1531,6 +1531,13 @@ // If new_entry already has a SiteInstance, assume it is correct. We only // need to force a swap if it is in a different BrowsingInstance. if (destination_instance) { + // If we are doing an history navigation/reload and end up failing, it might + // not be suitable to host the error page in the original SiteInstance. + // Error pages have a Cross-Origin-Opener-Policy of 'unsafe-none' and might + // end up in a different BrowsingInstance. + if (is_failure && cross_origin_opener_policy_mismatch) + return ShouldSwapBrowsingInstance::kYes_ForceSwap; + bool should_swap = !destination_instance->IsRelatedSiteInstance( render_frame_host_->GetSiteInstance()); if (should_swap) {
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc index 731cef8..d04421d2 100644 --- a/content/browser/renderer_host/render_widget_host_impl.cc +++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -2571,6 +2571,13 @@ GetWrappedTooltipText(tooltip_text, text_direction_hint), bounds); } +void RenderWidgetHostImpl::ClearKeyboardTriggeredTooltip() { + if (!GetView()) + return; + + view_->ClearKeyboardTriggeredTooltip(); +} + void RenderWidgetHostImpl::OnUpdateScreenRectsAck() { waiting_for_screen_rects_ack_ = false; if (!view_)
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h index 59b0439a..98699ac8 100644 --- a/content/browser/renderer_host/render_widget_host_impl.h +++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -310,6 +310,7 @@ void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, base::i18n::TextDirection text_direction_hint, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void TextInputStateChanged(ui::mojom::TextInputStatePtr state) override; void SelectionBoundsChanged(const gfx::Rect& anchor_rect, base::i18n::TextDirection anchor_dir,
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc index b03607e..3ec249d 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.cc +++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1109,7 +1109,11 @@ void RenderWidgetHostViewAndroid::UpdateTooltipFromKeyboard( const std::u16string& tooltip_text, const gfx::Rect& bounds) { - // Tooltips don't makes sense on Android. + // Tooltips don't make sense on Android. +} + +void RenderWidgetHostViewAndroid::ClearKeyboardTriggeredTooltip() { + // Tooltips don't make sense on Android. } void RenderWidgetHostViewAndroid::UpdateBackgroundColor() {
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h index 5075f33d..7165044b 100644 --- a/content/browser/renderer_host/render_widget_host_view_android.h +++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -144,6 +144,7 @@ void UpdateTooltipUnderCursor(const std::u16string& tooltip_text) override; void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void TransformPointToRootSurface(gfx::PointF* point) override; gfx::Rect GetBoundsInRootWindow() override; void ProcessAckedTouchEvent(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 2f508cb..28e9a059 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -798,6 +798,19 @@ } } +void RenderWidgetHostViewAura::ClearKeyboardTriggeredTooltip() { + if (!window_ || !window_->GetHost()) + return; + + wm::TooltipClient* tooltip_client = + wm::GetTooltipClient(window_->GetRootWindow()); + if (!tooltip_client || !tooltip_client->IsTooltipSetFromKeyboard(window_)) + return; + + SetTooltipText(std::u16string()); + tooltip_client->UpdateTooltipFromKeyboard(gfx::Rect(), window_); +} + uint32_t RenderWidgetHostViewAura::GetCaptureSequenceNumber() const { return latest_capture_sequence_number_; }
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h index 5be38eb..7819ece 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.h +++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -137,6 +137,7 @@ void UpdateTooltip(const std::u16string& tooltip_text) override; void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; uint32_t GetCaptureSequenceNumber() const override; bool IsSurfaceAvailableForCopy() override; void CopyFromSurface(
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h index 5e1fbd0..c30a571 100644 --- a/content/browser/renderer_host/render_widget_host_view_base.h +++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -470,6 +470,10 @@ virtual void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, const gfx::Rect& bounds) {} + // Hides tooltips that are still visible and were triggered from a keypress. + // Doesn't impact tooltips that were triggered from the cursor. + virtual void ClearKeyboardTriggeredTooltip() {} + // Transforms |point| to be in the coordinate space of browser compositor's // surface. This is in DIP. virtual void TransformPointToRootSurface(gfx::PointF* point);
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc index 3e8e67e..175c9ff 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -435,6 +435,17 @@ root_view->UpdateTooltipFromKeyboard(tooltip_text, adjusted_bounds); } +void RenderWidgetHostViewChildFrame::ClearKeyboardTriggeredTooltip() { + if (!frame_connector_) + return; + + auto* root_view = frame_connector_->GetRootRenderWidgetHostView(); + if (!root_view) + return; + + root_view->ClearKeyboardTriggeredTooltip(); +} + RenderWidgetHostViewBase* RenderWidgetHostViewChildFrame::GetParentView() { if (!frame_connector_) return nullptr;
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h index 0670758e..c4496eda 100644 --- a/content/browser/renderer_host/render_widget_host_view_child_frame.h +++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -110,6 +110,7 @@ void UpdateTooltipUnderCursor(const std::u16string& tooltip_text) override; void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void GestureEventAck(const blink::WebGestureEvent& event, blink::mojom::InputEventResultState ack_result) override; // Since the URL of content rendered by this class is not displayed in
diff --git a/content/public/test/OWNERS b/content/public/test/OWNERS index d4676847..46cb6be 100644 --- a/content/public/test/OWNERS +++ b/content/public/test/OWNERS
@@ -4,6 +4,9 @@ per-file *download*=file://components/download/OWNERS per-file *test_file_error_injector*=file://components/download/OWNERS +# For threading tests support review. +per-file *browser_task_environment*=gab@chromium.org + # For Android-specific changes. per-file *android*=file://content/public/test/android/OWNERS
diff --git a/content/public/test/fake_render_widget_host.cc b/content/public/test/fake_render_widget_host.cc index b2bd73b..cdbbcb73 100644 --- a/content/public/test/fake_render_widget_host.cc +++ b/content/public/test/fake_render_widget_host.cc
@@ -57,6 +57,8 @@ base::i18n::TextDirection text_direction_hint, const gfx::Rect& bounds) {} +void FakeRenderWidgetHost::ClearKeyboardTriggeredTooltip() {} + void FakeRenderWidgetHost::TextInputStateChanged( ui::mojom::TextInputStatePtr state) {}
diff --git a/content/public/test/fake_render_widget_host.h b/content/public/test/fake_render_widget_host.h index ea079544..0863400 100644 --- a/content/public/test/fake_render_widget_host.h +++ b/content/public/test/fake_render_widget_host.h
@@ -60,6 +60,7 @@ void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, base::i18n::TextDirection text_direction_hint, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void TextInputStateChanged(ui::mojom::TextInputStatePtr state) override; void SelectionBoundsChanged(const gfx::Rect& anchor_rect, base::i18n::TextDirection anchor_dir,
diff --git a/content/shell/fuchsia/content_shell.cmx b/content/shell/fuchsia/content_shell.cmx index 0b213d5..578b485 100644 --- a/content/shell/fuchsia/content_shell.cmx +++ b/content/shell/fuchsia/content_shell.cmx
@@ -20,7 +20,6 @@ "fuchsia.media.drm.Widevine", "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider",
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index db5ba94..71f3d3c2 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1867,6 +1867,7 @@ "../browser/accessibility/browser_accessibility_unittest.cc", "../browser/accessibility/one_shot_accessibility_tree_search_unittest.cc", "../browser/accessibility/touch_passthrough_manager_unittest.cc", + "../browser/aggregation_service/aggregatable_report_sender_unittest.cc", "../browser/aggregation_service/aggregation_service_key_fetcher_unittest.cc", "../browser/aggregation_service/aggregation_service_storage_unittest.cc", "../browser/aggregation_service/public_key_parsing_utils_unittest.cc",
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt index 57d5c2f6..21b65845 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -938,13 +938,6 @@ crbug.com/1215700 [ linux intel display-server-wayland no-passthrough ] deqp/functional/gles3/negativetextureapi.html [ Failure ] crbug.com/1218607 [ linux intel display-server-wayland no-passthrough ] conformance2/reading/read-pixels-from-fbo-test.html [ Failure ] crbug.com/1231736 [ linux intel display-server-wayland no-passthrough ] deqp/functional/gles3/clipping.html [ Failure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-2d-rg8ui-rg_integer-unsigned_byte.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-2d-rgb10_a2-rgba-unsigned_int_2_10_10_10_rev.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-2d-rgb565-rgb-unsigned_byte.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-2d-rgba16f-rgba-float.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-3d-r32f-red-float.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-3d-rg16f-rg-float.html [ RetryOnFailure ] -crbug.com/1240707 [ linux intel display-server-wayland no-passthrough ] conformance2/textures/video/tex-3d-rg16f-rg-half_float.html [ RetryOnFailure ] # Conflicting expectations to test that the # "Expectations have no collisions" unittest works.
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h index 6f9fedb..2fee3357 100644 --- a/content/test/test_render_view_host.h +++ b/content/test/test_render_view_host.h
@@ -111,6 +111,7 @@ void UpdateTooltipUnderCursor(const std::u16string& tooltip_text) override {} void UpdateTooltipFromKeyboard(const std::u16string& tooltip_text, const gfx::Rect& bounds) override {} + void ClearKeyboardTriggeredTooltip() override {} gfx::Rect GetBoundsInRootWindow() override; blink::mojom::PointerLockResult LockMouse(bool) override; blink::mojom::PointerLockResult ChangeMouseLock(bool) override;
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index bb8a78c..31ee0b6 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1648,6 +1648,7 @@ OS_DIAGNOSTICS_RUNCPUCACHEROUTINE = 1585, SCRIPTING_UPDATECONTENTSCRIPTS = 1586, FILEMANAGERPRIVATE_OPENWINDOW = 1587, + OS_DIAGNOSTICS_RUNMEMORYROUTINE = 1588, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/fuchsia/engine/browser/web_engine_memory_inspector.cc b/fuchsia/engine/browser/web_engine_memory_inspector.cc index 847e6ddb..fa8523a 100644 --- a/fuchsia/engine/browser/web_engine_memory_inspector.cc +++ b/fuchsia/engine/browser/web_engine_memory_inspector.cc
@@ -38,6 +38,62 @@ return *allocator_dump_names; } +// Returns true if every field in the supplied |dump|, and those of its +// children, are zero. Generally parent nodes summarize the total usage across +// all of their children, such that if the parent is all-zero then the children +// must also be all-zero. This implementation is optimized for the case in +// which that property holds, but also copes gracefully when it does not. +bool AreAllDumpEntriesZero( + const memory_instrumentation::mojom::AllocatorMemDump* dump) { + for (auto& it : dump->numeric_entries) { + if (it.second != 0u) + return false; + } + for (auto& it : dump->children) { + if (!AreAllDumpEntriesZero(it.second.get())) + return false; + } + return true; +} + +// Creates a node |name|, under |parent|, populated recursively with the +// contents of |dump|. The returned tree of Nodes are emplace()d to be owned by +// the specified |owner|. +inspect::Node NodeFromAllocatorMemDump( + inspect::Inspector* owner, + inspect::Node* parent, + const std::string& name, + const memory_instrumentation::mojom::AllocatorMemDump* dump) { + auto node = parent->CreateChild(name); + + // Add subordinate nodes for any children. + std::vector<const memory_instrumentation::mojom::AllocatorMemDump*> children; + children.reserve(dump->children.size()); + for (auto& it : dump->children) { + // If a child contains no information then omit it. + if (AreAllDumpEntriesZero(it.second.get())) + continue; + + children.push_back(it.second.get()); + owner->emplace( + NodeFromAllocatorMemDump(owner, &node, it.first, it.second.get())); + } + + // Publish the allocator-provided fields into the node. Entries are not + // published if there is a single child, with identical entries, to avoid + // redundancy in the emitted output. + bool same_as_child = + (children.size() == 1u && + (*children.begin())->numeric_entries == dump->numeric_entries); + if (!same_as_child) { + for (auto& it : dump->numeric_entries) { + node.CreateUint(it.first, it.second, owner); + } + } + + return node; +} + } // namespace WebEngineMemoryInspector::WebEngineMemoryInspector(inspect::Node& parent_node) { @@ -78,12 +134,14 @@ base::trace_event::MemoryDumpLevelOfDetail::BACKGROUND, base::trace_event::MemoryDumpDeterminism::NONE, AllocatorDumpNames(), base::BindOnce(&WebEngineMemoryInspector::OnMemoryDumpComplete, - weak_this_.GetWeakPtr(), context.suspend_task())); + weak_this_.GetWeakPtr(), base::TimeTicks::Now(), + context.suspend_task())); return fpromise::pending(); } void WebEngineMemoryInspector::OnMemoryDumpComplete( + base::TimeTicks requested_at, fpromise::suspended_task task, bool success, memory_instrumentation::mojom::GlobalMemoryDumpPtr raw_dump) { @@ -97,6 +155,18 @@ return; } + // Note the delay between requesting the dump, and it being started. + dump_results_->GetRoot().CreateDouble( + "dump_queued_duration_ms", + (raw_dump->start_time - requested_at).InMillisecondsF(), + dump_results_.get()); + + // Note the delay between starting the dump, and it completing. + dump_results_->GetRoot().CreateDouble( + "dump_duration_ms", + (base::TimeTicks::Now() - raw_dump->start_time).InMillisecondsF(), + dump_results_.get()); + for (const auto& process_dump : raw_dump->process_dumps) { auto node = dump_results_->GetRoot().CreateChild( base::NumberToString(process_dump->pid)); @@ -121,19 +191,12 @@ dump_results_.get()); // If provided, include detail from individual allocators. - auto detail_node = node.CreateChild("allocator_dump"); if (!process_dump->chrome_allocator_dumps.empty()) { + auto detail_node = node.CreateChild("allocator_dump"); + for (auto& it : process_dump->chrome_allocator_dumps) { - // Create a node using the allocator dump name. - auto allocator_node = detail_node.CreateChild(it.first); - - // Publish the allocator-provided fields into the node. - for (auto& field : it.second->numeric_entries) { - allocator_node.CreateUint(field.first, field.second, - dump_results_.get()); - } - - dump_results_->emplace(std::move(allocator_node)); + dump_results_->emplace(NodeFromAllocatorMemDump( + dump_results_.get(), &detail_node, it.first, it.second.get())); } dump_results_->emplace(std::move(detail_node));
diff --git a/fuchsia/engine/browser/web_engine_memory_inspector.h b/fuchsia/engine/browser/web_engine_memory_inspector.h index d14523a..eb5a12e 100644 --- a/fuchsia/engine/browser/web_engine_memory_inspector.h +++ b/fuchsia/engine/browser/web_engine_memory_inspector.h
@@ -9,6 +9,7 @@ #include <memory> #include "base/memory/weak_ptr.h" +#include "base/time/time.h" #include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" namespace fpromise { @@ -36,6 +37,7 @@ // Handles completion of a memory dump request. void OnMemoryDumpComplete( + base::TimeTicks requested_at, fpromise::suspended_task task, bool success, memory_instrumentation::mojom::GlobalMemoryDumpPtr raw_dump);
diff --git a/fuchsia/engine/test/web_engine_shell.cmx b/fuchsia/engine/test/web_engine_shell.cmx index 5ed4b1f3..075436d09 100644 --- a/fuchsia/engine/test/web_engine_shell.cmx +++ b/fuchsia/engine/test/web_engine_shell.cmx
@@ -18,7 +18,6 @@ "fuchsia.media.drm.Widevine", "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider",
diff --git a/fuchsia/engine/web_instance.cmx b/fuchsia/engine/web_instance.cmx index 3e1c2d3..377aba0a 100644 --- a/fuchsia/engine/web_instance.cmx +++ b/fuchsia/engine/web_instance.cmx
@@ -25,7 +25,6 @@ "fuchsia.media.drm.Widevine", "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider",
diff --git a/fuchsia/http/http.cmx b/fuchsia/http/http.cmx index 2b62f86..339f979b 100644 --- a/fuchsia/http/http.cmx +++ b/fuchsia/http/http.cmx
@@ -9,7 +9,6 @@ "fuchsia.intl.PropertyProvider", "fuchsia.logger.LogSink", "fuchsia.media.ProfileProvider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider"
diff --git a/fuchsia/runners/cast/cast_runner.cc b/fuchsia/runners/cast/cast_runner.cc index 954a79a..0f17461 100644 --- a/fuchsia/runners/cast/cast_runner.cc +++ b/fuchsia/runners/cast/cast_runner.cc
@@ -49,7 +49,6 @@ "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", "fuchsia.net.name.Lookup", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.posix.socket.Provider", "fuchsia.process.Launcher",
diff --git a/fuchsia/runners/cast/cast_runner.cmx b/fuchsia/runners/cast/cast_runner.cmx index 072a417..ce1cadc 100644 --- a/fuchsia/runners/cast/cast_runner.cmx +++ b/fuchsia/runners/cast/cast_runner.cmx
@@ -22,7 +22,6 @@ "fuchsia.media.drm.Widevine", "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider",
diff --git a/fuchsia/runners/web/web_runner.cmx b/fuchsia/runners/web/web_runner.cmx index e659d837..f4ae21f9 100644 --- a/fuchsia/runners/web/web_runner.cmx +++ b/fuchsia/runners/web/web_runner.cmx
@@ -19,7 +19,6 @@ "fuchsia.media.drm.Widevine", "fuchsia.mediacodec.CodecFactory", "fuchsia.memorypressure.Provider", - "fuchsia.net.NameLookup", "fuchsia.net.interfaces.State", "fuchsia.net.name.Lookup", "fuchsia.posix.socket.Provider",
diff --git a/infra/config/PRESUBMIT.py b/infra/config/PRESUBMIT.py index ee26ee6..e698865 100644 --- a/infra/config/PRESUBMIT.py +++ b/infra/config/PRESUBMIT.py
@@ -12,8 +12,8 @@ USE_PYTHON3 = True def CheckLintLuciMilo(input_api, output_api): - if ('infra/config/generated/luci-milo.cfg' in input_api.LocalPaths() or - 'infra/config/lint-luci-milo.py' in input_api.LocalPaths()): + if ('infra/config/generated/luci/luci-milo.cfg' in input_api.LocalPaths() + or 'infra/config/lint-luci-milo.py' in input_api.LocalPaths()): return input_api.RunTests([ input_api.Command( name='lint-luci-milo', @@ -24,8 +24,9 @@ return [] def CheckTestingBuildbot(input_api, output_api): - if ('infra/config/generated/luci-milo.cfg' in input_api.LocalPaths() or - 'infra/config/generated/luci-milo-dev.cfg' in input_api.LocalPaths()): + if ('infra/config/generated/luci/luci-milo.cfg' in input_api.LocalPaths() or + 'infra/config/generated/luci/luci-milo-dev.cfg' in input_api.LocalPaths() + ): return input_api.RunTests([ input_api.Command( name='testing/buildbot config checks',
diff --git a/infra/config/README.md b/infra/config/README.md index 45f8fe92..f77119e 100644 --- a/infra/config/README.md +++ b/infra/config/README.md
@@ -4,7 +4,7 @@ This directory contains chromium project-wide configurations for Chrome Operations services. -For example, [cr-buildbucket.cfg](generated/cr-buildbucket.cfg) defines +For example, [cr-buildbucket.cfg](generated/luci/cr-buildbucket.cfg) defines builders. Currently active version can be checked at
diff --git a/infra/config/console-header.star b/infra/config/console-header.star index b49c852..cf330aa 100644 --- a/infra/config/console-header.star +++ b/infra/config/console-header.star
@@ -299,7 +299,7 @@ headers.link( text = "customize", branch_selector = branches.ALL_BRANCHES, - url = "https://chromium.googlesource.com/chromium/src/+/{}/infra/config/generated/luci-milo.cfg".format(settings.ref), + url = "https://chromium.googlesource.com/chromium/src/+/{}/infra/config/generated/luci/luci-milo.cfg".format(settings.ref), alt = "Customize this console", ), ],
diff --git a/infra/config/dev.star b/infra/config/dev.star index 315917fa..8ef5c68 100755 --- a/infra/config/dev.star +++ b/infra/config/dev.star
@@ -20,11 +20,11 @@ lucicfg.config( config_dir = "generated", tracked_files = [ - "cr-buildbucket-dev.cfg", - "luci-logdog-dev.cfg", - "luci-milo-dev.cfg", - "luci-scheduler-dev.cfg", - "realms-dev.cfg", + "luci/cr-buildbucket-dev.cfg", + "luci/luci-logdog-dev.cfg", + "luci/luci-milo-dev.cfg", + "luci/luci-scheduler-dev.cfg", + "luci/realms-dev.cfg", ], fail_on_warnings = True, )
diff --git a/infra/config/dev/chromium-header.textpb b/infra/config/dev/chromium-header.textpb index 447c56ef..5dfa835 100644 --- a/infra/config/dev/chromium-header.textpb +++ b/infra/config/dev/chromium-header.textpb
@@ -93,7 +93,7 @@ } links: { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci-milo-dev.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci/luci-milo-dev.cfg" alt: "Customize this console" } }
diff --git a/infra/config/dev/dev.star b/infra/config/dev/dev.star index 0f5d37e8..b10a9229 100644 --- a/infra/config/dev/dev.star +++ b/infra/config/dev/dev.star
@@ -7,6 +7,7 @@ luci.project( name = "chromium", + config_dir = "luci", dev = True, buildbucket = "cr-buildbucket-dev.appspot.com", logdog = "luci-logdog-dev.appspot.com",
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/luci/commit-queue.cfg similarity index 100% rename from infra/config/generated/commit-queue.cfg rename to infra/config/generated/luci/commit-queue.cfg
diff --git a/infra/config/generated/cr-buildbucket-dev.cfg b/infra/config/generated/luci/cr-buildbucket-dev.cfg similarity index 100% rename from infra/config/generated/cr-buildbucket-dev.cfg rename to infra/config/generated/luci/cr-buildbucket-dev.cfg
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg similarity index 98% rename from infra/config/generated/cr-buildbucket.cfg rename to infra/config/generated/luci/cr-buildbucket.cfg index 916427a2b..d18d764 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -47581,6 +47581,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -47666,6 +47670,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -47751,6 +47759,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -47836,6 +47848,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -47921,6 +47937,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -48006,6 +48026,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51180,6 +51204,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51275,6 +51303,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51370,6 +51402,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51465,6 +51501,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51560,6 +51600,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51655,6 +51699,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51750,6 +51798,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51845,6 +51897,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -51954,6 +52010,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52049,6 +52109,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52144,6 +52208,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52239,6 +52307,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52334,6 +52406,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52429,6 +52505,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52524,6 +52604,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52631,6 +52715,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52731,6 +52819,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52826,6 +52918,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -52922,6 +53018,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53017,6 +53117,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53112,6 +53216,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53207,6 +53315,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53302,6 +53414,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53401,6 +53517,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53500,6 +53620,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53595,6 +53719,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53691,6 +53819,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53786,6 +53918,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53882,6 +54018,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -53977,6 +54117,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54072,6 +54216,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54167,6 +54315,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54262,6 +54414,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54357,6 +54513,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54452,6 +54612,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54547,6 +54711,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54642,6 +54810,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54737,6 +54909,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54832,6 +55008,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -54927,6 +55107,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55022,6 +55206,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55117,6 +55305,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55212,6 +55404,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55307,6 +55503,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55403,6 +55603,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55498,6 +55702,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55593,6 +55801,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55689,6 +55901,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55784,6 +56000,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55879,6 +56099,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -55974,6 +56198,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56068,6 +56296,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56163,6 +56395,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56258,6 +56494,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56353,6 +56593,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56448,6 +56692,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56540,6 +56788,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56661,6 +56913,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56764,6 +57020,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56858,6 +57118,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -56953,6 +57217,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57051,6 +57319,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57146,6 +57418,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57241,6 +57517,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57336,6 +57616,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57430,6 +57714,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57525,6 +57813,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57619,6 +57911,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57714,6 +58010,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57808,6 +58108,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57903,6 +58207,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -57998,6 +58306,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58092,6 +58404,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58185,6 +58501,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58277,6 +58597,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58369,6 +58693,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58462,6 +58790,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58555,6 +58887,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58648,6 +58984,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58741,6 +59081,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58836,6 +59180,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -58931,6 +59279,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59026,6 +59378,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59121,6 +59477,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59216,6 +59576,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59311,6 +59675,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59406,6 +59774,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59501,6 +59873,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59596,6 +59972,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59691,6 +60071,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59786,6 +60170,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59880,6 +60268,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -59974,6 +60366,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60068,6 +60464,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60162,6 +60562,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60253,6 +60657,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60344,6 +60752,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60435,6 +60847,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60526,6 +60942,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60617,6 +61037,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60708,6 +61132,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60799,6 +61227,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60890,6 +61322,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -60981,6 +61417,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61072,6 +61512,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61163,6 +61607,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61254,6 +61702,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61345,6 +61797,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61436,6 +61892,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61527,6 +61987,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61618,6 +62082,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61709,6 +62177,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61800,6 +62272,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61891,6 +62367,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -61982,6 +62462,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62073,6 +62557,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62164,6 +62652,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62255,6 +62747,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62346,6 +62842,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62437,6 +62937,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62528,6 +63032,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62617,6 +63125,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62706,6 +63218,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62795,6 +63311,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62884,6 +63404,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -62973,6 +63497,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63062,6 +63590,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63151,6 +63683,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63240,6 +63776,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63329,6 +63869,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63418,6 +63962,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63507,6 +64055,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63596,6 +64148,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63685,6 +64241,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63776,6 +64336,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63867,6 +64431,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -63958,6 +64526,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64049,6 +64621,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64140,6 +64716,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64231,6 +64811,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64322,6 +64906,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64413,6 +65001,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64504,6 +65096,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64595,6 +65191,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64686,6 +65286,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64777,6 +65381,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64868,6 +65476,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -64959,6 +65571,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65050,6 +65666,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65141,6 +65761,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65230,6 +65854,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65319,6 +65947,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65410,6 +66042,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65504,6 +66140,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65601,6 +66241,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65706,6 +66350,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65803,6 +66451,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -65908,6 +66560,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66005,6 +66661,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66102,6 +66762,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66199,6 +66863,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66303,6 +66971,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66400,6 +67072,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66497,6 +67173,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66594,6 +67274,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66691,6 +67375,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66785,6 +67473,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66879,6 +67571,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -66974,6 +67670,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67069,6 +67769,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67167,6 +67871,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67262,6 +67970,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67357,6 +68069,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67452,6 +68168,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67547,6 +68267,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67642,6 +68366,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67737,6 +68465,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67833,6 +68565,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -67928,6 +68664,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68023,6 +68763,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68118,6 +68862,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68213,6 +68961,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68308,6 +69060,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68403,6 +69159,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68495,6 +69255,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68590,6 +69354,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68684,6 +69452,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68779,6 +69551,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68874,6 +69650,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -68973,6 +69753,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69075,6 +69859,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69171,6 +69959,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69267,6 +70059,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69360,6 +70156,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69455,6 +70255,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69550,6 +70354,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69645,6 +70453,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69734,6 +70546,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69829,6 +70645,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -69924,6 +70744,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70020,6 +70844,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70116,6 +70944,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70211,6 +71043,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70306,6 +71142,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70400,6 +71240,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70495,6 +71339,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70590,6 +71438,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70685,6 +71537,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70779,6 +71635,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70874,6 +71734,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -70976,6 +71840,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71081,6 +71949,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71183,6 +72055,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71281,6 +72157,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71379,6 +72259,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71471,6 +72355,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71563,6 +72451,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71655,6 +72547,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71747,6 +72643,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71843,6 +72743,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -71938,6 +72842,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72033,6 +72941,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72128,6 +73040,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72223,6 +73139,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72318,6 +73238,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72414,6 +73338,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72509,6 +73437,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72604,6 +73536,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72699,6 +73635,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72794,6 +73734,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72894,6 +73838,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -72989,6 +73937,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73085,6 +74037,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73181,6 +74137,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73276,6 +74236,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73371,6 +74335,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73466,6 +74434,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73565,6 +74537,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73660,6 +74636,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73759,6 +74739,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73855,6 +74839,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -73954,6 +74942,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74049,6 +75041,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74144,6 +75140,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74239,6 +75239,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74334,6 +75338,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74429,6 +75437,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74523,6 +75535,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74612,6 +75628,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74707,6 +75727,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74800,6 +75824,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74893,6 +75921,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -74987,6 +76019,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75079,6 +76115,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75172,6 +76212,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75264,6 +76308,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75357,6 +76405,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75454,6 +76506,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75551,6 +76607,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75640,6 +76700,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75732,6 +76796,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75824,6 +76892,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -75917,6 +76989,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76010,6 +77086,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76103,6 +77183,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76196,6 +77280,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76289,6 +77377,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76382,6 +77474,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76475,6 +77571,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76568,6 +77668,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76661,6 +77765,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76754,6 +77862,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76847,6 +77959,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -76940,6 +78056,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77033,6 +78153,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77127,6 +78251,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77221,6 +78349,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77314,6 +78446,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77407,6 +78543,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77499,6 +78639,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77587,6 +78731,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77675,6 +78823,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77770,6 +78922,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77865,6 +79021,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -77960,6 +79120,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78055,6 +79219,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78150,6 +79318,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78245,6 +79417,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78340,6 +79516,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78435,6 +79615,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78530,6 +79714,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78625,6 +79813,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78721,6 +79913,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78813,6 +80009,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -78912,6 +80112,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79005,6 +80209,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79099,6 +80307,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79194,6 +80406,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79286,6 +80502,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79378,6 +80598,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79470,6 +80694,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79562,6 +80790,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79654,6 +80886,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79746,6 +80982,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79838,6 +81078,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -79933,6 +81177,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80028,6 +81276,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80123,6 +81375,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80229,6 +81485,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80331,6 +81591,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80426,6 +81690,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80521,6 +81789,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80622,6 +81894,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80717,6 +81993,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80820,6 +82100,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -80914,6 +82198,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81012,6 +82300,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81107,6 +82399,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81202,6 +82498,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81298,6 +82598,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81393,6 +82697,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81489,6 +82797,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81584,6 +82896,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81679,6 +82995,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81774,6 +83094,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81869,6 +83193,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -81964,6 +83292,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -82052,6 +83384,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 } @@ -82147,6 +83483,10 @@ value: 50 } experiments { + key: "chromium.chromium_tests.use_rdb_results" + value: 1 + } + experiments { key: "luci.use_realms" value: 100 }
diff --git a/infra/config/generated/luci-logdog-dev.cfg b/infra/config/generated/luci/luci-logdog-dev.cfg similarity index 100% rename from infra/config/generated/luci-logdog-dev.cfg rename to infra/config/generated/luci/luci-logdog-dev.cfg
diff --git a/infra/config/generated/luci-logdog.cfg b/infra/config/generated/luci/luci-logdog.cfg similarity index 100% rename from infra/config/generated/luci-logdog.cfg rename to infra/config/generated/luci/luci-logdog.cfg
diff --git a/infra/config/generated/luci-milo-dev.cfg b/infra/config/generated/luci/luci-milo-dev.cfg similarity index 98% rename from infra/config/generated/luci-milo-dev.cfg rename to infra/config/generated/luci/luci-milo-dev.cfg index 73536f5..fd7b3b3d 100644 --- a/infra/config/generated/luci-milo-dev.cfg +++ b/infra/config/generated/luci/luci-milo-dev.cfg
@@ -119,7 +119,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci-milo-dev.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci/luci-milo-dev.cfg" alt: "Customize this console" } } @@ -229,7 +229,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci-milo-dev.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/HEAD/infra/config/generated/luci/luci-milo-dev.cfg" alt: "Customize this console" } }
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg similarity index 99% rename from infra/config/generated/luci-milo.cfg rename to infra/config/generated/luci/luci-milo.cfg index d028ea4..48813cd 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -848,7 +848,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -1597,7 +1597,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -1993,7 +1993,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -2303,7 +2303,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -2878,7 +2878,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -3422,7 +3422,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -3777,7 +3777,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -4227,7 +4227,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -4610,7 +4610,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -5130,7 +5130,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -5550,7 +5550,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -5994,7 +5994,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -6803,7 +6803,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -7190,7 +7190,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -7551,7 +7551,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -7902,7 +7902,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -8527,7 +8527,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -8952,7 +8952,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -9317,7 +9317,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -9707,7 +9707,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -10017,7 +10017,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -10332,7 +10332,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -10627,7 +10627,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -10978,7 +10978,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -11428,7 +11428,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -11768,7 +11768,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -12149,7 +12149,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -12499,7 +12499,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -12863,7 +12863,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -13198,7 +13198,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } } @@ -13506,7 +13506,7 @@ } links { text: "customize" - url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci-milo.cfg" + url: "https://chromium.googlesource.com/chromium/src/+/refs/heads/main/infra/config/generated/luci/luci-milo.cfg" alt: "Customize this console" } }
diff --git a/infra/config/generated/luci-notify.cfg b/infra/config/generated/luci/luci-notify.cfg similarity index 100% rename from infra/config/generated/luci-notify.cfg rename to infra/config/generated/luci/luci-notify.cfg
diff --git a/infra/config/generated/luci-notify/email-templates/tree_closure_email_template.template b/infra/config/generated/luci/luci-notify/email-templates/tree_closure_email_template.template similarity index 100% rename from infra/config/generated/luci-notify/email-templates/tree_closure_email_template.template rename to infra/config/generated/luci/luci-notify/email-templates/tree_closure_email_template.template
diff --git a/infra/config/generated/luci-scheduler-dev.cfg b/infra/config/generated/luci/luci-scheduler-dev.cfg similarity index 100% rename from infra/config/generated/luci-scheduler-dev.cfg rename to infra/config/generated/luci/luci-scheduler-dev.cfg
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg similarity index 100% rename from infra/config/generated/luci-scheduler.cfg rename to infra/config/generated/luci/luci-scheduler.cfg
diff --git a/infra/config/generated/project.cfg b/infra/config/generated/luci/project.cfg similarity index 100% rename from infra/config/generated/project.cfg rename to infra/config/generated/luci/project.cfg
diff --git a/infra/config/generated/realms-dev.cfg b/infra/config/generated/luci/realms-dev.cfg similarity index 100% rename from infra/config/generated/realms-dev.cfg rename to infra/config/generated/luci/realms-dev.cfg
diff --git a/infra/config/generated/realms.cfg b/infra/config/generated/luci/realms.cfg similarity index 100% rename from infra/config/generated/realms.cfg rename to infra/config/generated/luci/realms.cfg
diff --git a/infra/config/generated/tricium-prod.cfg b/infra/config/generated/luci/tricium-prod.cfg similarity index 100% rename from infra/config/generated/tricium-prod.cfg rename to infra/config/generated/luci/tricium-prod.cfg
diff --git a/infra/config/generators/cq-builders-md.star b/infra/config/generators/cq-builders-md.star index 59296ee0..d42ab44 100644 --- a/infra/config/generators/cq-builders-md.star +++ b/infra/config/generators/cq-builders-md.star
@@ -49,7 +49,7 @@ _REGEX_PREFIX = ".+/[+]/" def _get_main_config_group_builders(ctx): - cq_cfg = ctx.output["commit-queue.cfg"] + cq_cfg = ctx.output["luci/commit-queue.cfg"] for c in cq_cfg.config_groups: if len(c.gerrit) != 1:
diff --git a/infra/config/generators/cq-usage.star b/infra/config/generators/cq-usage.star index fa2c281..29be5d6 100644 --- a/infra/config/generators/cq-usage.star +++ b/infra/config/generators/cq-usage.star
@@ -56,7 +56,7 @@ ) def _generate_cq_usage(ctx): - cfg = ctx.output["commit-queue.cfg"] + cfg = ctx.output["luci/commit-queue.cfg"] ctx.output["cq-usage/default.cfg"] = cq_pb.Config(config_groups = _remove_none( [_trim_config_group(g, include_path_based = False) for g in cfg.config_groups], ))
diff --git a/infra/config/generators/scheduler-noop-jobs.star b/infra/config/generators/scheduler-noop-jobs.star index 867a5bd..992bef4a 100644 --- a/infra/config/generators/scheduler-noop-jobs.star +++ b/infra/config/generators/scheduler-noop-jobs.star
@@ -56,7 +56,7 @@ def _add_noop_jobs(ctx): if settings.is_main: return - cfg = ctx.output["luci-scheduler.cfg"] + cfg = ctx.output["luci/luci-scheduler.cfg"] for j in _TESTER_NOOP_JOBS: cfg.job.append(j)
diff --git a/infra/config/generators/sort-consoles.star b/infra/config/generators/sort-consoles.star index b0981ae..1a93f51 100644 --- a/infra/config/generators/sort-consoles.star +++ b/infra/config/generators/sort-consoles.star
@@ -1,5 +1,5 @@ def _sort_consoles(ctx): - milo = ctx.output["luci-milo.cfg"] + milo = ctx.output["luci/luci-milo.cfg"] # Sort so that the overview consoles appear at the top of the console list # The overview consoles specify a title, so checking c.id == c.name will put
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index a408f87..4ced2bac 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -864,7 +864,7 @@ """ cfg = None for f in ctx.output: - if f.startswith("cr-buildbucket"): + if f.startswith("luci/cr-buildbucket"): cfg = ctx.output[f] break if cfg == None:
diff --git a/infra/config/lib/consoles.star b/infra/config/lib/consoles.star index 3c8c36fd..15f1256 100644 --- a/infra/config/lib/consoles.star +++ b/infra/config/lib/consoles.star
@@ -392,7 +392,7 @@ ) def _sort_consoles(ctx): - milo = ctx.output["luci-milo.cfg"] + milo = ctx.output["luci/luci-milo.cfg"] consoles = [] for console in milo.consoles: if not console.builders:
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star index a56699f..cdf4d8f 100644 --- a/infra/config/lib/try.star +++ b/infra/config/lib/try.star
@@ -114,6 +114,9 @@ experiments = experiments or {} + # TODO(crbug.com/1135718): Promote out of experiment for all builders. + experiments.setdefault("chromium.chromium_tests.use_rdb_results", 1) + merged_resultdb_bigquery_exports = [ resultdb.export_test_results( bq_table = "chrome-luci-data.chromium.try_test_results",
diff --git a/infra/config/lint-luci-milo.py b/infra/config/lint-luci-milo.py index a91c6f3..dd31078 100755 --- a/infra/config/lint-luci-milo.py +++ b/infra/config/lint-luci-milo.py
@@ -55,7 +55,8 @@ def main(): project = project_pb2.Project() - with open(os.path.join(THIS_DIR, 'generated', 'luci-milo.cfg'), 'rb') as f: + with open(os.path.join(THIS_DIR, 'generated', 'luci', 'luci-milo.cfg'), + 'rb') as f: google.protobuf.text_format.Parse(f.read(), project, allow_unknown_field=True)
diff --git a/infra/config/main.star b/infra/config/main.star index d6306d5..72f0710 100755 --- a/infra/config/main.star +++ b/infra/config/main.star
@@ -22,21 +22,21 @@ config_dir = "generated", tracked_files = [ "builders/*/*/*", - "commit-queue.cfg", "cq-builders.md", "cq-usage/default.cfg", "cq-usage/full.cfg", - "cr-buildbucket.cfg", - "luci-logdog.cfg", - "luci-milo.cfg", - "luci-notify.cfg", - "luci-notify/email-templates/*.template", - "luci-scheduler.cfg", + "luci/commit-queue.cfg", + "luci/cr-buildbucket.cfg", + "luci/luci-logdog.cfg", + "luci/luci-milo.cfg", + "luci/luci-notify.cfg", + "luci/luci-notify/email-templates/*.template", + "luci/luci-scheduler.cfg", + "luci/project.cfg", + "luci/realms.cfg", + "luci/tricium-prod.cfg", "outages.pyl", - "project.cfg", "project.pyl", - "realms.cfg", - "tricium-prod.cfg", ], fail_on_warnings = True, lint_checks = [ @@ -52,12 +52,13 @@ # Just copy tricium-prod.cfg to the generated outputs lucicfg.emit( - dest = "tricium-prod.cfg", + dest = "luci/tricium-prod.cfg", data = io.read_file("tricium-prod.cfg"), ) luci.project( name = settings.project, + config_dir = "luci", buildbucket = "cr-buildbucket.appspot.com", logdog = "luci-logdog.appspot.com", milo = "luci-milo.appspot.com",
diff --git a/infra/config/outages/outages.star b/infra/config/outages/outages.star index cf2dd0c..1673612 100644 --- a/infra/config/outages/outages.star +++ b/infra/config/outages/outages.star
@@ -24,7 +24,7 @@ if not config.disable_cq_experiments: return - for c in ctx.output["commit-queue.cfg"].config_groups: + for c in ctx.output["luci/commit-queue.cfg"].config_groups: if c.verifiers.tryjob == cq_pb.Verifiers.Tryjob(): # Accessing the tryjob field where it wasn't set causes it to be set # to an empty message and added to the output
diff --git a/infra/config/subprojects/chromium/fallback-cq.star b/infra/config/subprojects/chromium/fallback-cq.star index 79a2ff6..675ade72 100644 --- a/infra/config/subprojects/chromium/fallback-cq.star +++ b/infra/config/subprojects/chromium/fallback-cq.star
@@ -34,7 +34,7 @@ # the empty CQ group until it's exposed in lucicfg or there is a better way to # create a CQ group for all of the canary branches def _generate_cq_group_fallback(ctx): - cq_cfg = ctx.output["commit-queue.cfg"] + cq_cfg = ctx.output["luci/commit-queue.cfg"] for c in cq_cfg.config_groups: if c.name == "fallback-empty-cq":
diff --git a/infra/config/validators/builders-in-consoles.star b/infra/config/validators/builders-in-consoles.star index e5c87ea..b55c2ff 100644 --- a/infra/config/validators/builders-in-consoles.star +++ b/infra/config/validators/builders-in-consoles.star
@@ -5,7 +5,7 @@ def _validate_builders_in_console(ctx): builders = {} - for console in ctx.output["luci-milo.cfg"].consoles: + for console in ctx.output["luci/luci-milo.cfg"].consoles: for builder in console.builders: _, long_bucket, builder_name = builder.name.split("/") _, _, bucket = long_bucket.split(".", 2) @@ -13,7 +13,7 @@ builders_without_console = [] - for bucket in ctx.output["cr-buildbucket.cfg"].buckets: + for bucket in ctx.output["luci/cr-buildbucket.cfg"].buckets: bucket_builders = builders.get(bucket.name, {}) for builder in bucket.swarming.builders: if builder.name not in bucket_builders:
diff --git a/ios/chrome/app/application_delegate/app_state.mm b/ios/chrome/app/application_delegate/app_state.mm index 9df12e08..38f9150 100644 --- a/ios/chrome/app/application_delegate/app_state.mm +++ b/ios/chrome/app/application_delegate/app_state.mm
@@ -151,7 +151,7 @@ // while queueTransitionToNextInitStage is already on the call stack. @property(nonatomic, assign) BOOL needsIncrementInitStage; -// Redefined internaly as readwrite. +// Redefined internally as readwrite. @property(nonatomic, assign, readwrite) InitStage initStage; @end
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 0774ab7..34c9b3e 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -2482,6 +2482,18 @@ <message name="IDS_IOS_SYNC_UPDATE_CREDENTIALS_BUTTON" desc="Button title displayed when the signed in user needs to update its credentials. [Length: 20em] [iOS only]"> Update </message> + <message name="IDS_IOS_SYNC_SYNC_DISABLED" desc="The header message in a one-time alert when sync is disabled by policy [iOS only]."> + Your organization turned off sync. + </message> + <message name="IDS_IOS_SYNC_SYNC_DISABLED_DESCRIPTION" desc="The description in a one-time alert when sync is disabled by policy [iOS only]."> + When sync is off, you can still see all your bookmarks, history, passwords and other settings on this device. If you make changes, they won’t sync to your account. + </message> + <message name="IDS_IOS_SYNC_SYNC_DISABLED_CONTINUE" desc="The text in the 'Continue' button, displayed in a one-time alert when sync is disabled by policy."> + Continue + </message> + <message name="IDS_IOS_SYNC_SYNC_DISABLED_LEARN_MORE" desc="The text in the 'Learn More' button, displayed in a one-time alert when sync is disabled by policy."> + Learn More + </message> <message name="IDS_IOS_TAB_GRID_DONE_BUTTON" desc="Title of the Done button in the tab grid UI. [iOS only]"> Done </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED.png.sha1 new file mode 100644 index 0000000..f50fa8a --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED.png.sha1
@@ -0,0 +1 @@ +fdfd45b6cce332ad9400bf3b9de9a8b99ad1e420 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_CONTINUE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_CONTINUE.png.sha1 new file mode 100644 index 0000000..f50fa8a --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_CONTINUE.png.sha1
@@ -0,0 +1 @@ +fdfd45b6cce332ad9400bf3b9de9a8b99ad1e420 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_DESCRIPTION.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..f50fa8a --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +fdfd45b6cce332ad9400bf3b9de9a8b99ad1e420 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_LEARN_MORE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_LEARN_MORE.png.sha1 new file mode 100644 index 0000000..9814c9b --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SYNC_SYNC_DISABLED_LEARN_MORE.png.sha1
@@ -0,0 +1 @@ +a755a337af3282f46c79b9bb98acd0a4f9d21d08 \ No newline at end of file
diff --git a/ios/chrome/browser/main/browser_agent_util.mm b/ios/chrome/browser/main/browser_agent_util.mm index 2026730..2c2ef6e 100644 --- a/ios/chrome/browser/main/browser_agent_util.mm +++ b/ios/chrome/browser/main/browser_agent_util.mm
@@ -52,7 +52,10 @@ ClosingWebStateObserverBrowserAgent::CreateForBrowser(browser); SnapshotBrowserAgent::CreateForBrowser(browser); - PolicyWatcherBrowserAgent::CreateForBrowser(browser); + + // PolicyWatcher is non-OTR only. + if (!browser->GetBrowserState()->IsOffTheRecord()) + PolicyWatcherBrowserAgent::CreateForBrowser(browser); // Send Tab To Self is non-OTR only. if (!browser->GetBrowserState()->IsOffTheRecord())
diff --git a/ios/chrome/browser/policy/policy_watcher_browser_agent.h b/ios/chrome/browser/policy/policy_watcher_browser_agent.h index 75bb1d9..7033950c 100644 --- a/ios/chrome/browser/policy/policy_watcher_browser_agent.h +++ b/ios/chrome/browser/policy/policy_watcher_browser_agent.h
@@ -21,6 +21,9 @@ class PolicyWatcherBrowserAgentObserver; class PrefChangeRegistrar; +// NSUserDefault global key to track if the sync disable alert was shown. +extern NSString* kSyncDisabledAlertShownKey; + // Service that listens for policy-controlled prefs changes and sends commands // to update the UI accordingly. class PolicyWatcherBrowserAgent @@ -51,6 +54,10 @@ // UI. void ForceSignOutIfSigninDisabled(); + // Handler for change to kSyncManaged. When the pref changes to |true|, + // sends a command to the handler to show an alert. + void ShowSyncDisabledAlertIfNeeded(); + // Callback called when the sign out is complete. void OnSignOutComplete(); @@ -63,9 +70,12 @@ // The AuthenticationService. AuthenticationService* auth_service_ = nullptr; - // Registrar for pref change notifications. + // Registrar for local state pref change notifications. std::unique_ptr<PrefChangeRegistrar> prefs_change_observer_; + // Registrar for browser state pref change notifications. + std::unique_ptr<PrefChangeRegistrar> browser_prefs_change_observer_; + // List of observers notified of changes to the policy. base::ObserverList<PolicyWatcherBrowserAgentObserver, true> observers_;
diff --git a/ios/chrome/browser/policy/policy_watcher_browser_agent.mm b/ios/chrome/browser/policy/policy_watcher_browser_agent.mm index 1bdeaea..65c1b007 100644 --- a/ios/chrome/browser/policy/policy_watcher_browser_agent.mm +++ b/ios/chrome/browser/policy/policy_watcher_browser_agent.mm
@@ -9,6 +9,7 @@ #include "base/metrics/histogram_functions.h" #include "components/prefs/pref_change_registrar.h" #include "components/prefs/pref_service.h" +#include "components/sync/base/pref_names.h" #import "ios/chrome/app/application_delegate/app_state.h" #include "ios/chrome/browser/application_context.h" #import "ios/chrome/browser/browser_state/chrome_browser_state.h" @@ -24,12 +25,17 @@ #error "This file requires ARC support." #endif +NSString* kSyncDisabledAlertShownKey = @"SyncDisabledAlertShown"; + BROWSER_USER_DATA_KEY_IMPL(PolicyWatcherBrowserAgent) PolicyWatcherBrowserAgent::PolicyWatcherBrowserAgent(Browser* browser) : browser_(browser), - prefs_change_observer_(std::make_unique<PrefChangeRegistrar>()) { + prefs_change_observer_(std::make_unique<PrefChangeRegistrar>()), + browser_prefs_change_observer_(std::make_unique<PrefChangeRegistrar>()) { + DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); prefs_change_observer_->Init(GetApplicationContext()->GetLocalState()); + browser_prefs_change_observer_->Init(browser->GetBrowserState()->GetPrefs()); } PolicyWatcherBrowserAgent::~PolicyWatcherBrowserAgent() {} @@ -52,13 +58,9 @@ DCHECK(auth_service_); auth_service_observation_.Observe(auth_service_); - // BrowserSignin policy: start observing the kSigninAllowed pref for non-OTR - // browsers. When the pref becomes false, send a UI command to sign the user - // out. This requires the given command dispatcher to be fully configured. - if (browser_->GetBrowserState()->IsOffTheRecord()) { - return; - } - + // BrowserSignin policy: start observing the kSigninAllowed pref. When the + // pref becomes false, send a UI command to sign the user out. This requires + // the given command dispatcher to be fully configured. prefs_change_observer_->Add( prefs::kBrowserSigninPolicy, base::BindRepeating( @@ -68,12 +70,20 @@ // Try to sign out in case the policy changed since last time. This should be // done after the handler is set to make sure the UI can be displayed. ForceSignOutIfSigninDisabled(); + + browser_prefs_change_observer_->Add( + syncer::prefs::kSyncManaged, + base::BindRepeating( + &PolicyWatcherBrowserAgent::ShowSyncDisabledAlertIfNeeded, + base::Unretained(this))); + + // Try to show the alert in case the policy changed since last time. + ShowSyncDisabledAlertIfNeeded(); } void PolicyWatcherBrowserAgent::ForceSignOutIfSigninDisabled() { DCHECK(handler_); DCHECK(auth_service_); - if (!signin::IsSigninAllowedByPolicy()) { if (auth_service_->HasPrimaryIdentity(signin::ConsentLevel::kSignin)) { sign_out_in_progress_ = true; @@ -97,6 +107,24 @@ } } +void PolicyWatcherBrowserAgent::ShowSyncDisabledAlertIfNeeded() { + NSUserDefaults* standard_defaults = [NSUserDefaults standardUserDefaults]; + BOOL syncDisabledAlertShown = + [standard_defaults boolForKey:kSyncDisabledAlertShownKey]; + BOOL isSyncDisabledByAdministrator = + browser_->GetBrowserState()->GetPrefs()->GetBoolean( + syncer::prefs::kSyncManaged); + + if (!syncDisabledAlertShown && isSyncDisabledByAdministrator) { + [handler_ showSyncDisabledAlert]; + // Will never trigger again unless policy changes. + [standard_defaults setBool:YES forKey:kSyncDisabledAlertShownKey]; + } else if (syncDisabledAlertShown && !isSyncDisabledByAdministrator) { + // Will trigger again, if policy is turned back on. + [standard_defaults setBool:NO forKey:kSyncDisabledAlertShownKey]; + } +} + void PolicyWatcherBrowserAgent::AddObserver( PolicyWatcherBrowserAgentObserver* observer) { observers_.AddObserver(observer);
diff --git a/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm b/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm index 43576f4..4d120ed3 100644 --- a/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm +++ b/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm
@@ -8,6 +8,7 @@ #include "build/build_config.h" #import "components/pref_registry/pref_registry_syncable.h" #import "components/prefs/pref_service.h" +#include "components/sync/base/pref_names.h" #import "components/sync_preferences/pref_service_mock_factory.h" #import "components/sync_preferences/pref_service_syncable.h" #import "ios/chrome/app/application_delegate/app_state.h" @@ -342,3 +343,95 @@ EXPECT_OCMOCK_VERIFY(mockHandler); } + +// Tests that the handler is called and the alert shown as expected. +TEST_F(PolicyWatcherBrowserAgentTest, AlertIfSyncDisabledChanges) { + // Make sure shown if off. + NSUserDefaults* standard_defaults = [NSUserDefaults standardUserDefaults]; + [standard_defaults setBool:NO forKey:kSyncDisabledAlertShownKey]; + browser_->GetBrowserState()->GetPrefs()->SetBoolean( + syncer::prefs::kSyncManaged, false); + + // Browser Agent under test. + // Set up the test browser and attach the browser agents. + std::unique_ptr<Browser> browser = + std::make_unique<TestBrowser>(chrome_browser_state_.get()); + + // Browser Agent under test. + PolicyWatcherBrowserAgent::CreateForBrowser(browser.get()); + PolicyWatcherBrowserAgent* agent = + PolicyWatcherBrowserAgent::FromBrowser(browser.get()); + + // SceneState Browser Agent. + AppState* app_state = [[AppState alloc] initWithBrowserLauncher:nil + startupInformation:nil + applicationDelegate:nil]; + FakeSceneState* scene_state = + [[FakeSceneState alloc] initWithAppState:app_state]; + scene_state.activationLevel = SceneActivationLevelForegroundActive; + SceneStateBrowserAgent::CreateForBrowser(browser.get(), scene_state); + + id mockHandler = OCMProtocolMock(@protocol(PolicyChangeCommands)); + OCMExpect([mockHandler showSyncDisabledAlert]); + agent->Initialize(mockHandler); + + // Update the pref. + browser_->GetBrowserState()->GetPrefs()->SetBoolean( + syncer::prefs::kSyncManaged, true); + + EXPECT_OCMOCK_VERIFY(mockHandler); + EXPECT_TRUE([standard_defaults boolForKey:kSyncDisabledAlertShownKey]); + + [[mockHandler reject] showSyncDisabledAlert]; + + // Update the pref. + browser_->GetBrowserState()->GetPrefs()->SetBoolean( + syncer::prefs::kSyncManaged, false); + + EXPECT_OCMOCK_VERIFY(mockHandler); + EXPECT_FALSE([standard_defaults boolForKey:kSyncDisabledAlertShownKey]); +} + +// Tests that the handler is called and the alert shown at startup as expected. +TEST_F(PolicyWatcherBrowserAgentTest, AlertIfSyncDisabledChangedAtColdStart) { + // Make sure shown if off. + NSUserDefaults* standard_defaults = [NSUserDefaults standardUserDefaults]; + [standard_defaults setBool:NO forKey:kSyncDisabledAlertShownKey]; + browser_->GetBrowserState()->GetPrefs()->SetBoolean( + syncer::prefs::kSyncManaged, true); + + // Browser Agent under test. + // Set up the test browser and attach the browser agents. + std::unique_ptr<Browser> browser = + std::make_unique<TestBrowser>(chrome_browser_state_.get()); + + // Browser Agent under test. + PolicyWatcherBrowserAgent::CreateForBrowser(browser.get()); + PolicyWatcherBrowserAgent* agent = + PolicyWatcherBrowserAgent::FromBrowser(browser.get()); + + // SceneState Browser Agent. + AppState* app_state = [[AppState alloc] initWithBrowserLauncher:nil + startupInformation:nil + applicationDelegate:nil]; + FakeSceneState* scene_state = + [[FakeSceneState alloc] initWithAppState:app_state]; + scene_state.activationLevel = SceneActivationLevelForegroundActive; + SceneStateBrowserAgent::CreateForBrowser(browser.get(), scene_state); + + id mockHandler = OCMProtocolMock(@protocol(PolicyChangeCommands)); + OCMExpect([mockHandler showSyncDisabledAlert]); + agent->Initialize(mockHandler); + + EXPECT_OCMOCK_VERIFY(mockHandler); + EXPECT_TRUE([standard_defaults boolForKey:kSyncDisabledAlertShownKey]); + + [[mockHandler reject] showSyncDisabledAlert]; + + // Update the pref. + browser_->GetBrowserState()->GetPrefs()->SetBoolean( + syncer::prefs::kSyncManaged, false); + + EXPECT_OCMOCK_VERIFY(mockHandler); + EXPECT_FALSE([standard_defaults boolForKey:kSyncDisabledAlertShownKey]); +}
diff --git a/ios/chrome/browser/ui/activity_services/activities/copy_activity.mm b/ios/chrome/browser/ui/activity_services/activities/copy_activity.mm index 2d99c8e..bccdf3d 100644 --- a/ios/chrome/browser/ui/activity_services/activities/copy_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/copy_activity.mm
@@ -66,6 +66,7 @@ } - (void)performActivity { + [self activityDidFinish:YES]; if (self.dataItems.count == 1 && self.dataItems.firstObject.additionalText) { StoreInPasteboard(self.dataItems.firstObject.additionalText, self.dataItems.firstObject.shareURL); @@ -76,7 +77,6 @@ } StoreURLsInPasteboard(urls); } - [self activityDidFinish:YES]; } @end
diff --git a/ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.mm b/ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.mm index d958b4b..015de99 100644 --- a/ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.mm
@@ -64,8 +64,8 @@ } - (void)performActivity { - [self.handler openFindInPage]; [self activityDidFinish:YES]; + [self.handler openFindInPage]; } @end
diff --git a/ios/chrome/browser/ui/activity_services/activities/generate_qr_code_activity.mm b/ios/chrome/browser/ui/activity_services/activities/generate_qr_code_activity.mm index c7900566..079bc664 100644 --- a/ios/chrome/browser/ui/activity_services/activities/generate_qr_code_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/generate_qr_code_activity.mm
@@ -63,10 +63,10 @@ } - (void)performActivity { + [self activityDidFinish:YES]; [self.handler generateQRCode:[[GenerateQRCodeCommand alloc] initWithURL:_activityURL title:self.title]]; - [self activityDidFinish:YES]; } @end
diff --git a/ios/chrome/browser/ui/activity_services/activities/reading_list_activity.mm b/ios/chrome/browser/ui/activity_services/activities/reading_list_activity.mm index 1a242b2..b9416f4 100644 --- a/ios/chrome/browser/ui/activity_services/activities/reading_list_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/reading_list_activity.mm
@@ -70,10 +70,10 @@ } - (void)performActivity { + [self activityDidFinish:YES]; ReadingListAddCommand* command = [[ReadingListAddCommand alloc] initWithURL:_activityURL title:_title]; [_dispatcher addToReadingList:command]; - [self activityDidFinish:YES]; } @end
diff --git a/ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.mm b/ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.mm index 5a16425..9532eaa4 100644 --- a/ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/request_desktop_or_mobile_site_activity.mm
@@ -69,6 +69,7 @@ } - (void)performActivity { + [self activityDidFinish:YES]; if (self.userAgent == web::UserAgentType::MOBILE) { base::RecordAction( base::UserMetricsAction("MobileShareActionRequestDesktop")); @@ -78,7 +79,6 @@ base::UserMetricsAction("MobileShareActionRequestMobile")); [self.handler requestMobileSite]; } - [self activityDidFinish:YES]; } @end
diff --git a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm index e67e31f..7aafb28 100644 --- a/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm +++ b/ios/chrome/browser/ui/activity_services/activities/send_tab_to_self_activity.mm
@@ -65,8 +65,8 @@ } - (void)performActivity { - [self.handler showSendTabToSelfUI]; [self activityDidFinish:YES]; + [self.handler showSendTabToSelfUI]; } @end
diff --git a/ios/chrome/browser/ui/autofill/BUILD.gn b/ios/chrome/browser/ui/autofill/BUILD.gn index 3a2ae40..fd700c3e 100644 --- a/ios/chrome/browser/ui/autofill/BUILD.gn +++ b/ios/chrome/browser/ui/autofill/BUILD.gn
@@ -171,6 +171,7 @@ "//base", "//base/test:test_support", "//build:branding_buildflags", + "//components/autofill/core/common:features", "//components/autofill/ios/browser:autofill_test_bundle_data", "//components/strings:components_strings_grit", "//ios/chrome/app/strings:ios_strings_grit",
diff --git a/ios/chrome/browser/ui/autofill/save_card_infobar_egtest.mm b/ios/chrome/browser/ui/autofill/save_card_infobar_egtest.mm index 0a9e3dfe..b9ab0ab 100644 --- a/ios/chrome/browser/ui/autofill/save_card_infobar_egtest.mm +++ b/ios/chrome/browser/ui/autofill/save_card_infobar_egtest.mm
@@ -6,6 +6,7 @@ #import "base/test/ios/wait_util.h" #include "build/branding_buildflags.h" +#include "components/autofill/core/common/autofill_features.h" #include "components/strings/grit/components_strings.h" #include "ios/chrome/browser/metrics/metrics_app_interface.h" #import "ios/chrome/browser/ui/autofill/autofill_app_interface.h" @@ -101,6 +102,22 @@ @implementation SaveCardInfobarEGTest +// TODO(crbug.com/1245213) +// Some tests are not compatible with explicit save prompts for addresses. +- (AppLaunchConfiguration)appConfigurationForTestCase { + AppLaunchConfiguration config; + if ([self isRunningTest:@selector(testUserData_LocalSave_UserAccepts)] || + [self + isRunningTest:@selector(testOfferLocalSave_FullData_RequestFails)] || + [self isRunningTest:@selector(testUserData_LocalSave_UserDeclines)] || + [self isRunningTest:@selector + (testOfferLocalSave_FullData_PaymentsDeclines)]) { + config.features_disabled.push_back( + autofill::features::kAutofillAddressProfileSavePrompt); + } + return config; +} + - (void)setUp { [super setUp]; // Observe histograms in tests.
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index e14a65e..12a2253 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -24,6 +24,7 @@ #import "ios/chrome/browser/tabs/tab_title_util.h" #import "ios/chrome/browser/ui/activity_services/activity_params.h" #import "ios/chrome/browser/ui/activity_services/requirements/activity_service_positioner.h" +#import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h" #import "ios/chrome/browser/ui/alert_coordinator/repost_form_coordinator.h" #import "ios/chrome/browser/ui/authentication/signin/user_signin/user_policy_signout_coordinator.h" #import "ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h" @@ -88,8 +89,9 @@ #import "ios/chrome/browser/web/web_navigation_browser_agent.h" #include "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" +#include "ios/chrome/grit/ios_strings.h" #import "ios/public/provider/chrome/browser/text_zoom/text_zoom_api.h" -#include "ui/base/l10n/l10n_util_mac.h" +#include "ui/base/l10n/l10n_util.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." @@ -216,6 +218,9 @@ @property(nonatomic, strong) UserPolicySignoutCoordinator* policySignoutPromptCoordinator; +// The coordinator that manages alerts for enterprise sync policy changes. +@property(nonatomic, strong) AlertCoordinator* syncDisabledAlertCoordinator; + @end @implementation BrowserCoordinator { @@ -1072,6 +1077,45 @@ [self.policySignoutPromptCoordinator start]; } +- (void)showSyncDisabledAlert { + if (self.syncDisabledAlertCoordinator) { + [self.syncDisabledAlertCoordinator stop]; + } + self.syncDisabledAlertCoordinator = [[AlertCoordinator alloc] + initWithBaseViewController:self.viewController + browser:self.browser + title:l10n_util::GetNSString( + IDS_IOS_SYNC_SYNC_DISABLED) + message:l10n_util::GetNSString( + IDS_IOS_SYNC_SYNC_DISABLED_DESCRIPTION)]; + + __weak BrowserCoordinator* weakSelf = self; + [self.syncDisabledAlertCoordinator + addItemWithTitle:l10n_util::GetNSString( + IDS_IOS_SYNC_SYNC_DISABLED_CONTINUE) + action:^{ + [weakSelf.syncDisabledAlertCoordinator stop]; + weakSelf.syncDisabledAlertCoordinator = nil; + } + style:UIAlertActionStyleCancel]; + [self.syncDisabledAlertCoordinator + addItemWithTitle:l10n_util::GetNSString( + IDS_IOS_SYNC_SYNC_DISABLED_LEARN_MORE) + action:^{ + if (weakSelf) { + UrlLoadParams params = + UrlLoadParams::InNewTab(GURL(kChromeUIManagementURL)); + UrlLoadingBrowserAgent::FromBrowser(weakSelf.browser) + ->Load(params); + [weakSelf.syncDisabledAlertCoordinator stop]; + weakSelf.syncDisabledAlertCoordinator = nil; + } + } + style:UIAlertActionStyleDefault]; + + [self.syncDisabledAlertCoordinator start]; +} + #pragma mark - UserPolicySignoutCoordinatorDelegate - (void)hidePolicySignoutPromptForLearnMore:(BOOL)learnMore {
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 2c9c693..8905a1e7 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1697,8 +1697,10 @@ [weakSelf completedTransition]; }]; - id<CRWWebViewProxy> webViewProxy = self.currentWebState->GetWebViewProxy(); - [webViewProxy surfaceSizeChanged]; + if (self.currentWebState) { + id<CRWWebViewProxy> webViewProxy = self.currentWebState->GetWebViewProxy(); + [webViewProxy surfaceSizeChanged]; + } crash_keys::SetCurrentOrientation(GetInterfaceOrientation(), [[UIDevice currentDevice] orientation]);
diff --git a/ios/chrome/browser/ui/commands/policy_change_commands.h b/ios/chrome/browser/ui/commands/policy_change_commands.h index c7634f20..510ca4c 100644 --- a/ios/chrome/browser/ui/commands/policy_change_commands.h +++ b/ios/chrome/browser/ui/commands/policy_change_commands.h
@@ -12,6 +12,11 @@ // on-screen until the user dismisses it. - (void)showPolicySignoutPrompt; +// Command to show an alert to warn the user that sync has been disabled due to +// a policy change. The alert is shown immediately and stays on-screen until the +// user dismisses it. +- (void)showSyncDisabledAlert; + @end #endif // IOS_CHROME_BROWSER_UI_COMMANDS_POLICY_CHANGE_COMMANDS_H_
diff --git a/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm index ed57ca3..3ce9dbf 100644 --- a/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm +++ b/ios/chrome/browser/ui/first_run/signin/signin_screen_coordinator.mm
@@ -84,6 +84,7 @@ self = [super initWithBaseViewController:navigationController browser:browser]; if (self) { + DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); _baseNavigationController = navigationController; _delegate = delegate; _policyWatcherObserverBridge =
diff --git a/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator.mm b/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator.mm index bd4fb9fb4..25fc46b 100644 --- a/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator.mm +++ b/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator.mm
@@ -6,6 +6,7 @@ #import "base/metrics/histogram_functions.h" #include "components/sync/driver/sync_service.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/first_run/first_run_metrics.h" #include "ios/chrome/browser/main/browser.h" #import "ios/chrome/browser/policy/policy_watcher_browser_agent.h" @@ -73,6 +74,7 @@ self = [super initWithBaseViewController:navigationController browser:browser]; if (self) { + DCHECK(!browser->GetBrowserState()->IsOffTheRecord()); _baseNavigationController = navigationController; _delegate = delegate; _policyWatcherObserverBridge =
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn index 09649c64..3186ba5 100644 --- a/ios/chrome/browser/ui/main/BUILD.gn +++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -98,13 +98,13 @@ configs += [ "//build/config/compiler:enable_arc" ] sources = [ "connection_information.h", - "policy_signout_scene_agent.h", - "policy_signout_scene_agent.mm", "scene_controller.h", "scene_controller.mm", "scene_delegate.h", "scene_delegate.mm", "scene_state.mm", + "signin_policy_scene_agent.h", + "signin_policy_scene_agent.mm", "ui_blocker_scene_agent.h", "ui_blocker_scene_agent.mm", ] @@ -121,9 +121,14 @@ "//components/breadcrumbs/core", "//components/breadcrumbs/core:feature_flags", "//components/infobars/core", + "//components/prefs", + "//components/prefs/ios", "//components/previous_session_info", "//components/signin/ios/browser:features", + "//components/signin/public/base", "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager", + "//components/signin/public/identity_manager/objc", "//components/url_formatter", "//components/version_info", "//components/web_resource", @@ -138,6 +143,7 @@ "//ios/chrome/browser", "//ios/chrome/browser:chrome_url_constants", "//ios/chrome/browser/browser_state", + "//ios/chrome/browser/browser_state", "//ios/chrome/browser/browsing_data", "//ios/chrome/browser/crash_report", "//ios/chrome/browser/crash_report:crash_report_internal", @@ -169,6 +175,7 @@ "//ios/chrome/browser/ui/first_run:utils", "//ios/chrome/browser/ui/history", "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent", + "//ios/chrome/browser/ui/main:browser_interface_provider", "//ios/chrome/browser/ui/reading_list:features", "//ios/chrome/browser/ui/settings:settings_root", "//ios/chrome/browser/ui/settings/sync",
diff --git a/ios/chrome/browser/ui/main/policy_signout_scene_agent.h b/ios/chrome/browser/ui/main/policy_signout_scene_agent.h deleted file mode 100644 index bc0c3ba2f..0000000 --- a/ios/chrome/browser/ui/main/policy_signout_scene_agent.h +++ /dev/null
@@ -1,20 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef IOS_CHROME_BROWSER_UI_MAIN_POLICY_SIGNOUT_SCENE_AGENT_H_ -#define IOS_CHROME_BROWSER_UI_MAIN_POLICY_SIGNOUT_SCENE_AGENT_H_ - -#import "ios/chrome/browser/ui/main/observing_scene_state_agent.h" - -@class CommandDispatcher; - -// A scene agent that shows the sign-out prompt (due to policy change) on the -// SceneActivationLevel changes. -@interface PolicySignoutSceneAgent : ObservingSceneAgent - -- (instancetype)initWithCommandDispatcher:(CommandDispatcher*)dispatcher; - -@end - -#endif // IOS_CHROME_BROWSER_UI_MAIN_POLICY_SIGNOUT_SCENE_AGENT_H_
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm index e9abff3..88e962a 100644 --- a/ios/chrome/browser/ui/main/scene_controller.mm +++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -99,8 +99,8 @@ #import "ios/chrome/browser/ui/main/browser_view_wrangler.h" #import "ios/chrome/browser/ui/main/default_browser_scene_agent.h" #import "ios/chrome/browser/ui/main/incognito_blocker_scene_agent.h" -#import "ios/chrome/browser/ui/main/policy_signout_scene_agent.h" #import "ios/chrome/browser/ui/main/reading_list_background_session_scene_agent.h" +#import "ios/chrome/browser/ui/main/signin_policy_scene_agent.h" #import "ios/chrome/browser/ui/main/ui_blocker_scene_agent.h" #import "ios/chrome/browser/ui/scoped_ui_blocker/scoped_ui_blocker.h" #import "ios/chrome/browser/ui/settings/settings_navigation_controller.h" @@ -840,7 +840,7 @@ } [self.sceneState - addAgent:[[PolicySignoutSceneAgent alloc] + addAgent:[[SigninPolicySceneAgent alloc] initWithCommandDispatcher:mainCommandDispatcher]]; // Create and start the BVC.
diff --git a/ios/chrome/browser/ui/main/signin_policy_scene_agent.h b/ios/chrome/browser/ui/main/signin_policy_scene_agent.h new file mode 100644 index 0000000..e722fa7c --- /dev/null +++ b/ios/chrome/browser/ui/main/signin_policy_scene_agent.h
@@ -0,0 +1,35 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_MAIN_SIGNIN_POLICY_SCENE_AGENT_H_ +#define IOS_CHROME_BROWSER_UI_MAIN_SIGNIN_POLICY_SCENE_AGENT_H_ + +#import "ios/chrome/browser/ui/main/observing_scene_state_agent.h" + +@class CommandDispatcher; + +// A scene agent that monitors the state of the app and policy updates to show +// the sign-out and sign-in prompts. Will show prompts when determined to be +// needed the UI of the scene is available (i.e., the states of the app and +// the scene allow it). +// +// The UI is considered as available when the following conditions are met: +// (1) the app initialization is over (the stage InitStageFinal is reached), (2) +// the scene is in the foreground, (3) there is no UI blocker, and (4) the app +// isn't shutting down. +// +// There are 4 events that can trigger the prompt: (1) a policy update, (2) +// reaching the InitStageFinal init stage, (3) the scene becomes active in the +// foreground, and (4) the UI blocker is removed. +// +// In a multi-window context, only one scene will present the prompt. The first +// scene to receive the event that triggers the prompt will be the one selected. +// Another scene will be selected if the presenting scene is dismissed. +@interface SigninPolicySceneAgent : ObservingSceneAgent + +- (instancetype)initWithCommandDispatcher:(CommandDispatcher*)dispatcher; + +@end + +#endif // IOS_CHROME_BROWSER_UI_MAIN_SIGNIN_POLICY_SCENE_AGENT_H_
diff --git a/ios/chrome/browser/ui/main/signin_policy_scene_agent.mm b/ios/chrome/browser/ui/main/signin_policy_scene_agent.mm new file mode 100644 index 0000000..2cdf0c35 --- /dev/null +++ b/ios/chrome/browser/ui/main/signin_policy_scene_agent.mm
@@ -0,0 +1,218 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/main/signin_policy_scene_agent.h" + +#include "components/prefs/ios/pref_observer_bridge.h" +#include "components/prefs/pref_change_registrar.h" +#include "components/prefs/pref_service.h" +#include "components/signin/public/base/signin_metrics.h" +#include "components/signin/public/base/signin_pref_names.h" +#import "ios/chrome/app/application_delegate/app_state.h" +#import "ios/chrome/app/application_delegate/app_state_observer.h" +#include "ios/chrome/browser/application_context.h" +#import "ios/chrome/browser/policy/policy_util.h" +#import "ios/chrome/browser/policy/policy_watcher_browser_agent.h" +#import "ios/chrome/browser/policy/policy_watcher_browser_agent_observer_bridge.h" +#include "ios/chrome/browser/pref_names.h" +#import "ios/chrome/browser/signin/authentication_service.h" +#import "ios/chrome/browser/signin/authentication_service_factory.h" +#import "ios/chrome/browser/ui/authentication/signin/signin_utils.h" +#import "ios/chrome/browser/ui/commands/application_commands.h" +#import "ios/chrome/browser/ui/commands/command_dispatcher.h" +#import "ios/chrome/browser/ui/commands/policy_change_commands.h" +#import "ios/chrome/browser/ui/commands/show_signin_command.h" +#import "ios/chrome/browser/ui/main/browser_interface_provider.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +// TODO(crbug.com/1244632): Use the Authentication Service sign-in status API +// instead of this when available. +bool IsSigninForcedByPolicy() { + BrowserSigninMode policy_mode = static_cast<BrowserSigninMode>( + GetApplicationContext()->GetLocalState()->GetInteger( + prefs::kBrowserSigninPolicy)); + return policy_mode == BrowserSigninMode::kForced; +} + +} // namespace + +@interface SigninPolicySceneAgent () <AppStateObserver, PrefObserverDelegate> { + // Pref observer to track changes to prefs. + std::unique_ptr<PrefObserverBridge> _prefsObserverBridge; + // Registrar for pref change notifications. + std::unique_ptr<PrefChangeRegistrar> _prefChangeRegistrar; +} + +@property(nonatomic, weak) CommandDispatcher* dispatcher; + +// Browser of the main interface of the scene. +@property(nonatomic, assign) Browser* mainBrowser; + +@end + +// TODO(crbug.com/1236593): Add an handler to prompt to sign-in when removing +// the primary account. + +@implementation SigninPolicySceneAgent + +- (instancetype)initWithCommandDispatcher:(CommandDispatcher*)dispatcher { + if ([super init]) + _dispatcher = dispatcher; + return self; +} + +#pragma mark - ObservingSceneAgent + +- (void)setSceneState:(SceneState*)sceneState { + [super setSceneState:sceneState]; + + [self.sceneState.appState addObserver:self]; +} + +#pragma mark - SceneStateObserver + +- (void)sceneStateDidDisableUI:(SceneState*)sceneState { + // Tear down objects tied to the scene state before it is deleted. + [self tearDownObservers]; + [self.sceneState.appState removeObserver:self]; + [self.sceneState removeObserver:self]; + self.mainBrowser = nullptr; +} + +- (void)sceneStateDidEnableUI:(SceneState*)sceneState { + // Setup objects that need the browser UI objects before being set. + self.mainBrowser = self.sceneState.interfaceProvider.mainInterface.browser; + [self setupObservers]; +} + +- (void)sceneState:(SceneState*)sceneState + transitionedToActivationLevel:(SceneActivationLevel)level { + // Monitor the scene activation level to consider showing the sign-in prompt + // when the scene becomes active and in the foreground. In which case the + // scene is visible and interactable. + [self handleSigninPromptsIfUIAvailable]; +} + +- (void)sceneStateDidHideModalOverlay:(SceneState*)sceneState { + // Reconsider showing the forced sign-in prompt if the UI blocker is + // dismissed which might be because the scene that was displaying the + // sign-in prompt previously was closed. Choosing a new scene to prompt + // is needed in that case. + [self handleSigninPromptsIfUIAvailable]; +} + +#pragma mark - AppStateObserver + +- (void)appState:(AppState*)appState + didTransitionFromInitStage:(InitStage)previousInitStage { + // Monitor the app intialization stages to consider showing the sign-in + // prompts at a point in the initialization of the app that allows it. + [self handleSigninPromptsIfUIAvailable]; +} + +#pragma mark - PrefObserverDelegate + +// TODO(crbug.com/1244632): Use the Authentication Service sign-in status API +// instead of this when available. +- (void)onPreferenceChanged:(const std::string&)preferenceName { + // Reconsider showing the sign-in prompts when the value of the sign-in + // policy changes. + [self handleSigninPromptsIfUIAvailable]; +} + +#pragma mark - Internal + +- (void)setupObservers { + DCHECK(self.mainBrowser); + PrefService* prefService = GetApplicationContext()->GetLocalState(); + _prefChangeRegistrar = std::make_unique<PrefChangeRegistrar>(); + _prefChangeRegistrar->Init(prefService); + _prefsObserverBridge = std::make_unique<PrefObserverBridge>(self); + _prefsObserverBridge->ObserveChangesForPreference(prefs::kBrowserSigninPolicy, + _prefChangeRegistrar.get()); +} + +- (void)tearDownObservers { + _prefChangeRegistrar->RemoveAll(); +} + +- (BOOL)isForcedSignInRequiredByPolicy { + DCHECK(self.mainBrowser); + + if (!IsSigninForcedByPolicy()) { + return NO; + } + + AuthenticationService* authService = + AuthenticationServiceFactory::GetForBrowserState( + self.mainBrowser->GetBrowserState()); + // Skip prompting to sign-in when there is already a primary account + // signed in. + return !authService->HasPrimaryIdentity(signin::ConsentLevel::kSignin); +} + +// Handle the policy sign-in prompts if the scene UI is available to show +// prompts. +- (void)handleSigninPromptsIfUIAvailable { + if (![self isUIAvailableToPrompt]) { + return; + } + + if (self.sceneState.appState.shouldShowPolicySignoutPrompt) { + // Show the sign-out prompt if the user was signed out due to policy. + [HandlerForProtocol(self.dispatcher, PolicyChangeCommands) + showPolicySignoutPrompt]; + self.sceneState.appState.shouldShowPolicySignoutPrompt = NO; + } + + if ([self isForcedSignInRequiredByPolicy]) { + // Prompt to sign in if required by policy. + ShowSigninCommand* command = [[ShowSigninCommand alloc] + initWithOperation:AUTHENTICATION_OPERATION_SIGNIN + identity:nil + accessPoint:signin_metrics::AccessPoint:: + ACCESS_POINT_FORCED_SIGNIN + promoAction:signin_metrics::PromoAction:: + PROMO_ACTION_NO_SIGNIN_PROMO + callback:^(BOOL success) { + self.sceneState.appState.shouldShowPolicySignoutPrompt = NO; + }]; + + id<ApplicationCommands> handler = + HandlerForProtocol(self.dispatcher, ApplicationCommands); + // TODO(crbug.com/1241451): Use the command for forced sign-in when + // available. + [handler showSignin:command + baseViewController:self.sceneState.interfaceProvider.mainInterface + .viewController]; + } +} + +// YES if the scene and the app are in a state where the UI of the scene is +// available to show sign-in related prompts. +- (BOOL)isUIAvailableToPrompt { + if (self.sceneState.appState.initStage < InitStageFinal) { + return NO; + } + + if (self.sceneState.activationLevel < SceneActivationLevelForegroundActive) { + return NO; + } + + if (self.sceneState.appState.currentUIBlocker) { + // Return NO when |currentUIBlocker| is set because it means that there is + // a UI blocking modal being displayed. Re-attempting to show prompts is + // done when the blocker is dismissed. + return NO; + } + + return YES; +} + +@end
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm index 1364613..0191c66 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator.mm
@@ -248,8 +248,10 @@ dataFromChromeSyncItem.accessibilityIdentifier = kDataFromChromeSyncAccessibilityIdentifier; dataFromChromeSyncItem.accessibilityTraits |= UIAccessibilityTraitButton; - [model addItem:dataFromChromeSyncItem - toSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; + if (self.syncConsentGiven) { + [model addItem:dataFromChromeSyncItem + toSectionWithIdentifier:AdvancedSettingsSectionIdentifier]; + } } // Updates encryption item, and notifies the consumer if |notifyConsumer| is set @@ -281,8 +283,7 @@ item.textColor = [UIColor colorNamed:kRedColor]; self.signOutAndTurnOffSyncItem = item; - // The user must be signed-in and syncing. - if (!self.shouldDisplaySignoutSection) { + if (!self.syncConsentGiven) { return; } [model addItem:self.signOutAndTurnOffSyncItem @@ -293,12 +294,12 @@ BOOL hasModelUpdate = NO; TableViewModel* model = self.consumer.tableViewModel; BOOL hasSignOutItem = [model hasItem:self.signOutAndTurnOffSyncItem]; - if (!hasSignOutItem && self.shouldDisplaySignoutSection) { + if (!hasSignOutItem && self.syncConsentGiven) { DCHECK(self.signOutAndTurnOffSyncItem); [model addItem:self.signOutAndTurnOffSyncItem toSectionWithIdentifier:SignOutSectionIdentifier]; hasModelUpdate = YES; - } else if (hasSignOutItem && !self.shouldDisplaySignoutSection) { + } else if (hasSignOutItem && !self.syncConsentGiven) { [model removeItemWithType:SignOutItemType fromSectionWithIdentifier:SignOutSectionIdentifier]; hasModelUpdate = YES; @@ -393,7 +394,7 @@ SyncSetupService::kSyncServiceNeedsTrustedVaultKey; } -- (BOOL)shouldDisplaySignoutSection { +- (BOOL)syncConsentGiven { return self.syncSetupService->IsFirstSetupComplete(); }
diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm index 926b914..5e8cb3d6 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_mediator_unittest.mm
@@ -176,7 +176,7 @@ NSArray* advanced_settings_items = [mediator_.consumer.tableViewModel itemsInSectionWithIdentifier:SyncSettingsSectionIdentifier:: AdvancedSettingsSectionIdentifier]; - ASSERT_EQ(3UL, advanced_settings_items.count); + ASSERT_EQ(2UL, advanced_settings_items.count); TableViewImageItem* encryption_item = advanced_settings_items[0]; ASSERT_EQ(encryption_item.type, SyncSettingsItemType::EncryptionItemType); @@ -201,7 +201,7 @@ NSArray* advanced_settings_items = [mediator_.consumer.tableViewModel itemsInSectionWithIdentifier:SyncSettingsSectionIdentifier:: AdvancedSettingsSectionIdentifier]; - ASSERT_EQ(3UL, advanced_settings_items.count); + ASSERT_EQ(2UL, advanced_settings_items.count); TableViewImageItem* encryption_item = advanced_settings_items[0]; ASSERT_EQ(encryption_item.type, SyncSettingsItemType::EncryptionItemType);
diff --git a/ios/web/js_messaging/BUILD.gn b/ios/web/js_messaging/BUILD.gn index 4c56e75..cee90eb68 100644 --- a/ios/web/js_messaging/BUILD.gn +++ b/ios/web/js_messaging/BUILD.gn
@@ -101,6 +101,7 @@ "//ios/web/js_features/context_menu", "//ios/web/js_features/scroll_helper", "//ios/web/js_features/window_error", + "//ios/web/navigation:session_restore_feature", "//ios/web/public", "//ios/web/public/js_messaging", "//ios/web/text_fragments",
diff --git a/ios/web/js_messaging/java_script_feature_util_impl.mm b/ios/web/js_messaging/java_script_feature_util_impl.mm index 01b1ed7..1aa1bdf 100644 --- a/ios/web/js_messaging/java_script_feature_util_impl.mm +++ b/ios/web/js_messaging/java_script_feature_util_impl.mm
@@ -16,6 +16,7 @@ #include "ios/web/js_features/scroll_helper/scroll_helper_java_script_feature.h" #import "ios/web/js_features/window_error/window_error_java_script_feature.h" #import "ios/web/js_messaging/web_frames_manager_java_script_feature.h" +#import "ios/web/navigation/session_restore_java_script_feature.h" #include "ios/web/public/js_messaging/java_script_feature.h" #import "ios/web/public/web_client.h" #import "ios/web/text_fragments/text_fragments_java_script_feature.h" @@ -110,6 +111,7 @@ GetFaviconJavaScriptFeature(), GetScrollHelperJavaScriptFeature(), GetWindowErrorJavaScriptFeature(), + SessionRestoreJavaScriptFeature::FromBrowserState(browser_state), TextFragmentsJavaScriptFeature::GetInstance(), WebFramesManagerJavaScriptFeature::FromBrowserState(browser_state)};
diff --git a/ios/web/navigation/BUILD.gn b/ios/web/navigation/BUILD.gn index 6ed9a8cf..4756ba9 100644 --- a/ios/web/navigation/BUILD.gn +++ b/ios/web/navigation/BUILD.gn
@@ -106,6 +106,21 @@ configs += [ "//build/config/compiler:enable_arc" ] } +source_set("session_restore_feature") { + deps = [ + "//base", + "//ios/web/js_messaging", + "//ios/web/js_messaging:scoped_wk_script_message_handler", + "//ios/web/public", + "//ios/web/public/js_messaging", + ] + sources = [ + "session_restore_java_script_feature.h", + "session_restore_java_script_feature.mm", + ] + configs += [ "//build/config/compiler:enable_arc" ] +} + source_set("wk_navigation_util") { deps = [ "//base",
diff --git a/ios/web/navigation/session_restore_java_script_feature.h b/ios/web/navigation/session_restore_java_script_feature.h new file mode 100644 index 0000000..2787123 --- /dev/null +++ b/ios/web/navigation/session_restore_java_script_feature.h
@@ -0,0 +1,58 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_WEB_NAVIGATION_SESSION_RESTORE_JAVA_SCRIPT_FEATURE_H_ +#define IOS_WEB_NAVIGATION_SESSION_RESTORE_JAVA_SCRIPT_FEATURE_H_ + +#import <WebKit/WebKit.h> + +#include "base/memory/weak_ptr.h" +#include "base/supports_user_data.h" +#import "ios/web/js_messaging/scoped_wk_script_message_handler.h" +#import "ios/web/public/js_messaging/java_script_feature.h" + +namespace web { +class BrowserState; + +// The session restoration script needs to use IPC to notify the app of +// the last step of the session restoration (which sets the page offset). +// See the restore_session.html file or crbug.com/1127521. +class SessionRestoreJavaScriptFeature : public base::SupportsUserData::Data, + public JavaScriptFeature { + public: + // Returns the SessionRestoreJavaScriptFeature associated with + // |browser_state|, creating one if necessary. |browser_state| must not be + // null. + static SessionRestoreJavaScriptFeature* FromBrowserState( + BrowserState* browser_state); + SessionRestoreJavaScriptFeature(BrowserState* browser_state); + ~SessionRestoreJavaScriptFeature() override; + + void ConfigureHandlers(WKUserContentController* user_content_controller); + + private: + SessionRestoreJavaScriptFeature(const SessionRestoreJavaScriptFeature&) = + delete; + SessionRestoreJavaScriptFeature& operator=( + const SessionRestoreJavaScriptFeature&) = delete; + + // Handles a message from JavaScript to complete session restoration. + void SessionRestorationMessageReceived(WKScriptMessage* script_message); + + // The browser state associated with this instance of the feature. + BrowserState* browser_state_; + + // This feature uses ScopedWKScriptMessageHandler directly instead of the + // message handling built into JavaScriptFeature because the WKWebView is used + // to message the WKWebView directly since windowID is not yet setup during + // session restoration. (The WKWebView is intentionally hidden from + // JavaScriptFeature::ScriptMessageReceived). + std::unique_ptr<ScopedWKScriptMessageHandler> session_restore_handler_; + + base::WeakPtrFactory<SessionRestoreJavaScriptFeature> weak_factory_; +}; + +} // namespace web + +#endif // IOS_WEB_NAVIGATION_SESSION_RESTORE_JAVA_SCRIPT_FEATURE_H_
diff --git a/ios/web/navigation/session_restore_java_script_feature.mm b/ios/web/navigation/session_restore_java_script_feature.mm new file mode 100644 index 0000000..754daea --- /dev/null +++ b/ios/web/navigation/session_restore_java_script_feature.mm
@@ -0,0 +1,97 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/web/navigation/session_restore_java_script_feature.h" + +#import "ios/web/js_messaging/web_view_js_utils.h" +#import "ios/web/js_messaging/web_view_web_state_map.h" +#include "ios/web/public/browser_state.h" +#import "ios/web/public/js_messaging/script_message.h" +#import "ios/web/public/navigation/navigation_manager.h" +#include "ios/web/public/web_state.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace web { + +namespace { + +// Key for storing feature on the associated BrowserState. +const char kSessionRestoreJavaScriptFeatureKeyName[] = + "session_restore_java_script_feature"; + +// Script message name for session restore. +NSString* const kSessionRestoreScriptHandlerName = @"session_restore"; + +} // namespace + +// static +SessionRestoreJavaScriptFeature* +SessionRestoreJavaScriptFeature::FromBrowserState(BrowserState* browser_state) { + DCHECK(browser_state); + + SessionRestoreJavaScriptFeature* feature = + static_cast<SessionRestoreJavaScriptFeature*>( + browser_state->GetUserData(kSessionRestoreJavaScriptFeatureKeyName)); + if (!feature) { + feature = new SessionRestoreJavaScriptFeature(browser_state); + browser_state->SetUserData(kSessionRestoreJavaScriptFeatureKeyName, + base::WrapUnique(feature)); + } + return feature; +} + +SessionRestoreJavaScriptFeature::SessionRestoreJavaScriptFeature( + BrowserState* browser_state) + : JavaScriptFeature( + // This feature operates in the page content world because the + // script message is sent from restore_session.html which is loaded + // into the webview. + ContentWorld::kPageContentWorld, + {}), + browser_state_(browser_state), + weak_factory_(this) {} + +SessionRestoreJavaScriptFeature::~SessionRestoreJavaScriptFeature() = default; + +void SessionRestoreJavaScriptFeature::ConfigureHandlers( + WKUserContentController* user_content_controller) { + // Reset the old handler first as handlers with the same name can not be + // added simultaneously. + session_restore_handler_.reset(); + + session_restore_handler_ = std::make_unique<ScopedWKScriptMessageHandler>( + user_content_controller, kSessionRestoreScriptHandlerName, + base::BindRepeating( + &SessionRestoreJavaScriptFeature::SessionRestorationMessageReceived, + weak_factory_.GetWeakPtr())); +} + +void SessionRestoreJavaScriptFeature::SessionRestorationMessageReceived( + WKScriptMessage* message) { + WebState* web_state = WebViewWebStateMap::FromBrowserState(browser_state_) + ->GetWebStateForWebView(message.webView); + if (!web_state || + !web_state->GetNavigationManager()->IsRestoreSessionInProgress()) { + // Ignore this message if |message.webView| is no longer associated with a + // WebState or if session restore is not in progress. + return; + } + + if (![message.body[@"offset"] isKindOfClass:[NSNumber class]]) { + return; + } + NSString* method = + [NSString stringWithFormat:@"_crFinishSessionRestoration('%@')", + message.body[@"offset"]]; + // Don't use |CallJavaScriptFunction| here, as it relies on |windowID| being + // injected before window.onload starts. + // Note that |web::ExecuteJavaScript| assumes the page content world, which is + // ok in this case as restore_session.html is loaded as a webpage. + web::ExecuteJavaScript(message.webView, method, nil); +} + +} // namespace web
diff --git a/ios/web/web_state/ui/BUILD.gn b/ios/web/web_state/ui/BUILD.gn index 92ccfac..ff6e1d7 100644 --- a/ios/web/web_state/ui/BUILD.gn +++ b/ios/web/web_state/ui/BUILD.gn
@@ -152,6 +152,7 @@ "//ios/web/js_messaging", "//ios/web/js_messaging:java_script_feature", "//ios/web/js_messaging:java_script_feature_util", + "//ios/web/navigation:session_restore_feature", "//ios/web/public", "//ios/web/web_state/js", "//ios/web/webui",
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm index 870a998..007d808 100644 --- a/ios/web/web_state/ui/crw_web_controller.mm +++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -92,9 +92,6 @@ // URL scheme for messages sent from javascript for asynchronous processing. NSString* const kScriptMessageName = @"crwebinvoke"; -// URL scheme for session restore. -NSString* const kSessionRestoreScriptMessageName = @"session_restore"; - } // namespace // TODO(crbug.com/1174560): Allow usage of iOS15 interactionState on iOS 14 SDK @@ -463,19 +460,6 @@ name:kScriptMessageName webView:_webView]; - if (self.webStateImpl->GetNavigationManager() - ->IsRestoreSessionInProgress()) { - // The session restoration script needs to use IPC to notify the app of - // the last step of the session restoration. See the restore_session.html - // file or crbug.com/1127521. - [messageRouter - setScriptMessageHandler:^(WKScriptMessage* message) { - [weakSelf didReceiveSessionRestoreScriptMessage:message]; - } - name:kSessionRestoreScriptMessageName - webView:_webView]; - } - _webView.allowsBackForwardNavigationGestures = _allowsBackForwardNavigationGestures; self.windowIDJSManager = @@ -1225,27 +1209,6 @@ } } -- (void)didReceiveSessionRestoreScriptMessage:(WKScriptMessage*)message { - if ([message.name isEqualToString:kSessionRestoreScriptMessageName] && - [message.body[@"offset"] isKindOfClass:[NSNumber class]]) { - NSString* method = - [NSString stringWithFormat:@"_crFinishSessionRestoration('%@')", - message.body[@"offset"]]; - // Don't use |self executeJavaScript:| here, as it relies on - // |windowID| being injected before window.onload starts. - web::ExecuteJavaScript(self.webView, method, nil); - - // Removes the script as it is no longer needed. - CRWWKScriptMessageRouter* messageRouter = - [self webViewConfigurationProvider].GetScriptMessageRouter(); - [messageRouter - removeScriptMessageHandlerForName:kSessionRestoreScriptMessageName - webView:_webView]; - } else { - DLOG(WARNING) << "Invalid session restore JS message name."; - } -} - - (BOOL)respondToWKScriptMessage:(WKScriptMessage*)scriptMessage { if (![scriptMessage.name isEqualToString:kScriptMessageName]) { return NO;
diff --git a/ios/web/web_state/ui/wk_web_view_configuration_provider.mm b/ios/web/web_state/ui/wk_web_view_configuration_provider.mm index 4e7032d9..482ee77 100644 --- a/ios/web/web_state/ui/wk_web_view_configuration_provider.mm +++ b/ios/web/web_state/ui/wk_web_view_configuration_provider.mm
@@ -20,6 +20,7 @@ #include "ios/web/js_messaging/java_script_feature_util_impl.h" #import "ios/web/js_messaging/page_script_util.h" #import "ios/web/js_messaging/web_frames_manager_java_script_feature.h" +#import "ios/web/navigation/session_restore_java_script_feature.h" #include "ios/web/public/browser_state.h" #include "ios/web/public/web_client.h" #import "ios/web/web_state/ui/wk_content_rule_list_provider.h" @@ -207,8 +208,12 @@ } java_script_feature_manager->ConfigureFeatures(features); + WKUserContentController* userContentController = + GetWebViewConfiguration().userContentController; WebFramesManagerJavaScriptFeature::FromBrowserState(browser_state_) - ->ConfigureHandlers(GetWebViewConfiguration().userContentController); + ->ConfigureHandlers(userContentController); + SessionRestoreJavaScriptFeature::FromBrowserState(browser_state_) + ->ConfigureHandlers(userContentController); // Main frame script depends upon scripts injected into all frames, so the // "AllFrames" scripts must be injected first.
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc index 0a12f07..95f8209e 100644 --- a/net/quic/quic_chromium_client_session_test.cc +++ b/net/quic/quic_chromium_client_session_test.cc
@@ -280,7 +280,7 @@ size_t GetMaxAllowedOutgoingBidirectionalStreams() { quic::QuicSession* quic_session = - dynamic_cast<quic::QuicSession*>(&*session_); + static_cast<quic::QuicSession*>(&*session_); if (!version_.HasIetfQuicFrames()) { return quic::test::QuicSessionPeer::GetStreamIdManager(quic_session) ->max_open_outgoing_streams();
diff --git a/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc b/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc index d0e91f61..005dce1 100644 --- a/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc +++ b/services/resource_coordinator/memory_instrumentation/coordinator_impl_unittest.cc
@@ -11,6 +11,7 @@ #include "base/strings/string_number_conversions.h" #include "base/test/gmock_callback_support.h" #include "base/test/task_environment.h" +#include "base/test/test_future.h" #include "base/test/trace_test_utils.h" #include "base/threading/platform_thread.h" #include "base/time/time.h" @@ -982,4 +983,95 @@ run_loop.Run(); } +TEST_F(CoordinatorImplTest, GlobalDumpWithSubTrees) { + base::RunLoop run_loop; + + static constexpr base::ProcessId kBrowserPid = 1; + MockClientProcess browser_client(this, kBrowserPid, + mojom::ProcessType::BROWSER); + + EXPECT_CALL(browser_client, RequestChromeMemoryDumpMock(_, _)) + .WillOnce(Invoke( + [](const MemoryDumpRequestArgs& args, + MockClientProcess::RequestChromeMemoryDumpCallback& callback) { + MemoryDumpArgs dump_args{MemoryDumpLevelOfDetail::DETAILED}; + auto pmd = std::make_unique<ProcessMemoryDump>(dump_args); + auto* size = MemoryAllocatorDump::kNameSize; + auto* bytes = MemoryAllocatorDump::kUnitsBytes; + const uint32_t kB = 1024; + + // None of these dumps should appear in the output. + pmd->CreateAllocatorDump( + "malloc", base::trace_event::MemoryAllocatorDumpGuid(1)) + ->AddScalar(size, bytes, 1 * kB); + pmd->CreateAllocatorDump("v8/foo")->AddScalar(size, bytes, 1 * kB); + pmd->CreateAllocatorDump("v8/bar")->AddScalar(size, bytes, 2 * kB); + pmd->CreateAllocatorDump("v8")->AddScalar(size, bytes, 99 * kB); + + // This "tree" of dumps should be included. + pmd->CreateAllocatorDump("partition_alloc") + ->AddScalar(size, bytes, 99 * kB); + pmd->CreateAllocatorDump("partition_alloc/allocated_objects") + ->AddScalar(size, bytes, 99 * kB); + pmd->CreateAllocatorDump("partition_alloc/partitions") + ->AddScalar(size, bytes, 99 * kB); + pmd->CreateAllocatorDump("partition_alloc/partitions/1") + ->AddScalar(size, bytes, 2 * kB); + pmd->CreateAllocatorDump("partition_alloc/partitions/2") + ->AddScalar(size, bytes, 2 * kB); + + std::move(callback).Run(true, args.dump_guid, std::move(pmd)); + })); +#if defined(OS_LINUX) || defined(OS_CHROMEOS) + EXPECT_CALL(browser_client, RequestOSMemoryDumpMock(_, Contains(1), _)) + .WillOnce(Invoke( + [](mojom::MemoryMapOption, const std::vector<base::ProcessId>& pids, + MockClientProcess::RequestOSMemoryDumpCallback& callback) { + base::flat_map<base::ProcessId, mojom::RawOSMemDumpPtr> results; + results[1] = mojom::RawOSMemDump::New(); + results[1]->resident_set_kb = 1; + results[1]->platform_private_footprint = + mojom::PlatformPrivateFootprint::New(); + std::move(callback).Run(true, std::move(results)); + })); +#else + EXPECT_CALL(browser_client, RequestOSMemoryDumpMock(_, Contains(0), _)) + .WillOnce(Invoke( + [](mojom::MemoryMapOption, const std::vector<base::ProcessId>& pids, + MockClientProcess::RequestOSMemoryDumpCallback& callback) { + base::flat_map<base::ProcessId, mojom::RawOSMemDumpPtr> results; + results[0] = mojom::RawOSMemDump::New(); + results[0]->platform_private_footprint = + mojom::PlatformPrivateFootprint::New(); + results[0]->resident_set_kb = 1; + std::move(callback).Run(true, std::move(results)); + })); +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) + + base::test::TestFuture<bool, + memory_instrumentation::mojom::GlobalMemoryDumpPtr> + result; + RequestGlobalMemoryDump( + MemoryDumpType::SUMMARY_ONLY, MemoryDumpLevelOfDetail::BACKGROUND, + MemoryDumpDeterminism::NONE, {"partition_alloc/*"}, result.GetCallback()); + + // Expect that the dump request succeeds. + ASSERT_TRUE(std::get<bool>(result.Get())); + + // Verify that the dump has a single "partition_alloc" top-level node, and + // that the top level dump has children. + const auto& global_dump = + std::get<memory_instrumentation::mojom::GlobalMemoryDumpPtr>( + result.Get()); + ASSERT_EQ(global_dump->process_dumps.size(), 1u); + + const auto& process_dump = *global_dump->process_dumps.begin(); + EXPECT_EQ(process_dump->pid, kBrowserPid); + + const auto& allocator_dumps = process_dump->chrome_allocator_dumps; + ASSERT_EQ(allocator_dumps.size(), 1u); + EXPECT_EQ(allocator_dumps.begin()->first, "partition_alloc"); + EXPECT_EQ(allocator_dumps.begin()->second->children.size(), 2u); +} + } // namespace memory_instrumentation
diff --git a/services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc b/services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc index 9bd870e..9b28a5e 100644 --- a/services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc +++ b/services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.cc
@@ -12,7 +12,7 @@ #include "base/format_macros.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" -#include "base/strings/pattern.h" +#include "base/strings/strcat.h" #include "base/strings/stringprintf.h" #include "base/trace_event/trace_event.h" #include "base/trace_event/traced_value.h" @@ -192,6 +192,24 @@ return traced_value; } +mojom::AllocatorMemDumpPtr CreateAllocatorDumpForNode(const Node* node, + bool recursive) { + base::flat_map<std::string, uint64_t> numeric_entries; + for (const auto& entry : node->const_entries()) { + if (entry.second.type == Node::Entry::Type::kUInt64) + numeric_entries.emplace(entry.first, entry.second.value_uint64); + } + base::flat_map<std::string, mojom::AllocatorMemDumpPtr> children; + if (recursive) { + for (const auto& child : node->const_children()) { + children.emplace(child.first, + CreateAllocatorDumpForNode(child.second, true)); + } + } + return mojom::AllocatorMemDump::New(std::move(numeric_entries), + std::move(children)); +} + } // namespace // static @@ -576,17 +594,17 @@ const auto& process_graph = global_graph->process_node_graphs().find(pid)->second; for (const std::string& name : request->args.allocator_dump_names) { - auto* node = process_graph->FindNode(name); + bool is_recursive = base::EndsWith(name, "/*"); + std::string node_name = + (is_recursive ? name.substr(0, name.length() - 2) : name); + Node* node = process_graph->FindNode(node_name); + // Silently ignore any missing node in the process graph. if (!node) continue; - base::flat_map<std::string, uint64_t> numeric_entries; - for (const auto& entry : *node->entries()) { - if (entry.second.type == Node::Entry::Type::kUInt64) - numeric_entries.emplace(entry.first, entry.second.value_uint64); - } + pmd->chrome_allocator_dumps.emplace( - name, mojom::AllocatorMemDump::New(std::move(numeric_entries))); + node_name, CreateAllocatorDumpForNode(node, is_recursive)); } }
diff --git a/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom b/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom index fce4c9b..e9169f9 100644 --- a/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom +++ b/services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom
@@ -194,6 +194,10 @@ // The entries for the allocator which are of scalar types (i.e. not strings). // Examples include: effective_size, size, object_count. map<string, uint64> numeric_entries; + + // If details were requested for this allocator to include descendants then + // |children| describes the immediate child nodes. + map<string, AllocatorMemDump> children; }; // This struct is used for the public-facing API @@ -202,8 +206,8 @@ ProcessType process_type; OSMemDump os_dump; - // The chrome allocator dumps specified by the input args. - // (See GlobalRequestArgs.allocator_dump_names). + // Details for each of the Chrome allocators specified by the input args. + // See the |RequestGlobalMemoryDump()| argument |allocator_dump_names|. map<string, AllocatorMemDump> chrome_allocator_dumps; // |pid| is necessary to correlate a ProcessMemoryDump with the URLs for the @@ -306,13 +310,17 @@ // processes and polls them whenever a global dump is required. interface Coordinator { // Broadcasts a dump request to all registered client processes and returns a - // global dump which includes allocator dumps specified in |allocator_dump_names|. - // For example, given an allocator dump name such as "malloc" or "cc/resource_memory", - // this method returns all information corresponding to this name including numeric - // entries which contain fields such as "size" and "effective_size". + // global dump with details. + // If |dump_type| is SUMMARY_ONLY then details will additionally be returned + // for allocators listed in |allocator_dump_names|. If an entry has a trailing + // "/*" then details will be returned for the named node, and all descendents. + // e.g. { "malloc", "v8/*" } will include details for "malloc", and might + // also include "v8", "v8/main/heap", etc. + // Allocator dumps provide a set of numeric values such as "size", + // "effective_size", etc. RequestGlobalMemoryDump(DumpType dump_type, LevelOfDetail level_of_detail, - Determinism determinsm, + Determinism determinism, array<string> allocator_dump_names) => (bool success, GlobalMemoryDump? global_memory_dump);
diff --git a/testing/buildbot/OWNERS b/testing/buildbot/OWNERS index ba17e1e..5bb192c8 100644 --- a/testing/buildbot/OWNERS +++ b/testing/buildbot/OWNERS
@@ -29,6 +29,9 @@ # For Lacros skylab tests cros image roller related reviews per-file variants.pyl=skylab-test-cros-roller@chops-service-accounts.iam.gserviceaccount.com per-file internal.chromeos.fyi.json=skylab-test-cros-roller@chops-service-accounts.iam.gserviceaccount.com +per-file chromium.fyi.json=skylab-test-cros-roller@chops-service-accounts.iam.gserviceaccount.com +# TODO(crbug.com/1245791): remove the following line after the roller is stable +per-file internal.chromeos.fyi.json=svenzheng@chromium.org # For V8 and DevTools related reviews. machenbach@chromium.org
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index 0e8a330..a9b1849 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -27117,6 +27117,9 @@ ], "gtest_tests": [ { + "args": [ + "--device=fvdl" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -27136,6 +27139,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27157,6 +27161,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27178,6 +27183,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27199,6 +27205,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27220,6 +27227,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27241,6 +27249,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27263,6 +27272,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.blink_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27284,6 +27294,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27305,6 +27316,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27326,6 +27338,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27347,6 +27360,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27368,6 +27382,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27389,6 +27404,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27410,6 +27426,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27432,6 +27449,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27453,6 +27471,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27475,6 +27494,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.content_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27496,6 +27516,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27517,6 +27538,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27538,6 +27560,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27559,6 +27582,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27580,6 +27604,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27601,6 +27626,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27622,6 +27648,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27643,6 +27670,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27664,6 +27692,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27685,6 +27714,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27706,6 +27736,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27727,6 +27758,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27748,6 +27780,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27769,6 +27802,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27790,6 +27824,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27812,6 +27847,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.headless_browsertests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27833,6 +27869,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27854,6 +27891,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27875,6 +27913,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27896,6 +27935,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27917,6 +27957,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27938,6 +27979,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27959,6 +28001,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -27980,6 +28023,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28002,6 +28046,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.net_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28025,6 +28070,7 @@ { "args": [ "--child-arg=--ozone-platform=headless", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28046,6 +28092,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28067,6 +28114,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28088,6 +28136,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28110,6 +28159,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.services_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28131,6 +28181,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28152,6 +28203,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28173,6 +28225,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28194,6 +28247,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28216,6 +28270,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.storage_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28238,6 +28293,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.ui_base_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28259,6 +28315,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28280,6 +28337,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28302,6 +28360,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.views_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28324,6 +28383,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.viz_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28345,6 +28405,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28366,7 +28427,8 @@ }, { "args": [ - "--child-arg=--vmodule=test_navigation_listener=1" + "--child-arg=--vmodule=test_navigation_listener=1", + "--device=fvdl" ], "merge": { "args": [], @@ -28387,6 +28449,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28407,6 +28470,9 @@ "test_id_prefix": "ninja://fuchsia/engine:web_engine_unittests/" }, { + "args": [ + "--device=fvdl" + ], "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -28426,6 +28492,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28450,6 +28517,7 @@ { "args": [ "bin/run_angle_unittests", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "isolate_name": "angle_unittests", @@ -28480,6 +28548,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.components_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28502,6 +28571,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.jingle_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28523,6 +28593,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28545,6 +28616,7 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/fuchsia.views_examples_unittests.filter", + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28566,6 +28638,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28587,6 +28660,7 @@ }, { "args": [ + "--device=fvdl", "--runner-logs-dir=${ISOLATED_OUTDIR}/runner_logs" ], "merge": { @@ -28615,7 +28689,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-cmd-decoder=validating", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28648,7 +28723,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28681,7 +28757,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28714,7 +28791,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28751,7 +28829,8 @@ "--expected-vendor-id", "0", "--expected-device-id", - "0" + "0", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28785,6 +28864,7 @@ "--passthrough", "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl", "--git-revision=${got_revision}" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", @@ -28823,7 +28903,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=validating" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --force_higher_performance_gpu --use-cmd-decoder=validating", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28857,6 +28938,7 @@ "--passthrough", "-v", "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl", "--git-revision=${got_revision}" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", @@ -28895,7 +28977,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28928,7 +29011,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": { @@ -28961,7 +29045,8 @@ "--browser=web-engine-shell", "--passthrough", "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" + "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", + "--device=fvdl" ], "isolate_name": "fuchsia_telemetry_gpu_integration_test", "merge": {
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py index c6a4067..54515a5 100755 --- a/testing/buildbot/generate_buildbot_json.py +++ b/testing/buildbot/generate_buildbot_json.py
@@ -1482,7 +1482,7 @@ self.write_file(self.pyl_file_path(filename + suffix), jsonstr) def get_valid_bot_names(self): - # Extract bot names from infra/config/generated/luci-milo.cfg. + # Extract bot names from infra/config/generated/luci/luci-milo.cfg. # NOTE: This reference can cause issues; if a file changes there, the # presubmit here won't be run by default. A manually maintained list there # tries to run presubmit here when luci-milo.cfg is changed. If any other @@ -1502,8 +1502,13 @@ return None bot_names = set() + # TODO(https://crbug.com/1245674) Remove the glob without the luci component + # once all configs are switched over milo_configs = glob.glob( os.path.join(self.args.infra_config_dir, 'generated', 'luci-milo*.cfg')) + milo_configs += glob.glob( + os.path.join(self.args.infra_config_dir, 'generated', 'luci', + 'luci-milo*.cfg')) for c in milo_configs: for l in self.read_file(c).splitlines(): if (not 'name: "buildbucket/luci.chromium.' in l and
diff --git a/testing/buildbot/generate_buildbot_json_unittest.py b/testing/buildbot/generate_buildbot_json_unittest.py index c1ad061..9dfedbf 100755 --- a/testing/buildbot/generate_buildbot_json_unittest.py +++ b/testing/buildbot/generate_buildbot_json_unittest.py
@@ -74,8 +74,8 @@ (pyl_files_dir, 'gn_isolate_map2.pyl'): GPU_TELEMETRY_GN_ISOLATE_MAP, (pyl_files_dir, 'variants.pyl'): variants, (infra_config_dir, 'generated/project.pyl'): project_pyl, - (infra_config_dir, 'generated/luci-milo.cfg'): luci_milo_cfg, - (infra_config_dir, 'generated/luci-milo-dev.cfg'): '', + (infra_config_dir, 'generated/luci/luci-milo.cfg'): luci_milo_cfg, + (infra_config_dir, 'generated/luci/luci-milo-dev.cfg'): '', } for (d, filename), content in files.items(): if content is None:
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 4aa7c6a..dcf915e 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -427,6 +427,13 @@ ], }, }, + 'fuchsia-fvdl': { + '$mixin_append': { + 'args': [ + '--device=fvdl', + ], + }, + }, 'fuchsia_runner_logs': { '$mixin_append': { 'args': [
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 40740ff1..dc37df8 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2906,6 +2906,7 @@ 'all', ], 'mixins': [ + 'fuchsia-fvdl', 'linux-bionic', ], 'swarming': { @@ -2927,6 +2928,7 @@ 'browser_config': 'web-engine-shell', 'os_type': 'linux', 'mixins': [ + 'fuchsia-fvdl', 'linux-bionic', ], 'swarming': {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index d0b76329..c37931a 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -7309,6 +7309,25 @@ ] } ], + "ReportAllJavaScriptFrameworks": [ + { + "platforms": [ + "linux", + "mac", + "windows", + "android", + "chromeos" + ], + "experiments": [ + { + "name": "enabled", + "enable_features": [ + "ReportAllJavaScriptFrameworks" + ] + } + ] + } + ], "ReportCertificateErrors": [ { "platforms": [
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn index 225fbe53..0d7412b 100644 --- a/third_party/android_deps/BUILD.gn +++ b/third_party/android_deps/BUILD.gn
@@ -381,7 +381,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlin_kotlin_stdlib_java") { - jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib/kotlin-stdlib-1.5.21.jar" + jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib/kotlin-stdlib-1.5.30.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib" supports_android = true deps = [ @@ -699,7 +699,7 @@ # This is generated, do not edit. Update BuildConfigGenerator.groovy instead. java_prebuilt("org_jetbrains_kotlin_kotlin_stdlib_common_java") { - jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_common/kotlin-stdlib-common-1.5.21.jar" + jar_path = "libs/org_jetbrains_kotlin_kotlin_stdlib_common/kotlin-stdlib-common-1.5.30.jar" output_name = "org_jetbrains_kotlin_kotlin_stdlib_common" supports_android = true
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle index 31d932e..295430f 100644 --- a/third_party/android_deps/build.gradle +++ b/third_party/android_deps/build.gradle
@@ -18,10 +18,8 @@ apply plugin: 'org.owasp.dependencycheck' repositories { + google() mavenCentral() - maven { - url 'https://maven.google.com' - } } dependencyCheck { @@ -131,7 +129,7 @@ // Matches version depended on by Dagger. buildCompile 'com.squareup:javapoet:1.13.0' - String errorproneVersion = '2.7.1' + String errorproneVersion = '2.9.0' // Used by downstream targets. compile "com.google.errorprone:error_prone_annotations:${errorproneVersion}" compile 'org.checkerframework:checker-compat-qual:2.5.3'
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy index d91336f5..1dbbc35 100644 --- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy +++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -240,7 +240,7 @@ org_checkerframework_checker_qual: new PropertyOverride( licenseUrl: 'https://raw.githubusercontent.com/typetools/checker-framework/master/LICENSE.txt', licenseName: 'GPL v2 with the classpath exception'), - org_checkerframework_dataflow_shaded: new PropertyOverride( + org_checkerframework_dataflow_errorprone: new PropertyOverride( licenseUrl: 'https://raw.githubusercontent.com/typetools/checker-framework/master/LICENSE.txt', licenseName: 'GPL v2 with the classpath exception'), org_ow2_asm_asm: new PropertyOverride( @@ -647,6 +647,16 @@ } private List computePomFromArtifact(ResolvedArtifact artifact) { + ComponentIdentifier component = artifact.id.componentIdentifier + String componentPomSubpath = String.format('%s/%s/%s/%s-%s.pom', + component.group.replace('.', '/'), + component.module, + component.version, + component.module, + // While mavenCentral and google use "version", https://androidx.dev uses "timestampedVersion" as part + // of the file url + component.hasProperty('timestampedVersion') ? component.timestampedVersion : component.version) + List<String> repoUrls = [] for (Project project : projects) { for (ArtifactRepository repository : project.repositories.asList()) { String repoUrl = repository.properties.get('url') @@ -655,34 +665,40 @@ if (repoUrl.endsWith('/')) { repoUrl = repoUrl[0..-2] } - ComponentIdentifier component = artifact.id.componentIdentifier - // Constructs the file url for pom. For example, with - // * repoUrl as "https://maven.google.com" - // * component.group as "android.arch.core" - // * component.module as "common" - // * component.version as "1.1.1" - // - // The file url will be: https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom - String fileUrl = String.format('%s/%s/%s/%s/%s-%s.pom', - repoUrl, - component.group.replace('.', '/'), - component.module, - component.version, - component.module, - // While maven central and maven.google.com use "version", https://androidx.dev uses - // "timestampedVersion" as part of the file url - component.hasProperty('timestampedVersion') ? component.timestampedVersion : component.version) - try { - GPathResult content = new XmlSlurper( - false /* validating */, false /* namespaceAware */).parse(fileUrl) - logger.debug("Succeeded in resolving url $fileUrl") - return [fileUrl, content] - } catch (any) { - logger.debug("Failed in resolving url $fileUrl") + // Deduplicate while collecting repo urls since subprojects (e.g. androidx) may use the same repos. Use + // a list instead of a set to preserve order. Since there are very few repositories, 2-3 per project, + // this O(n^2) complexity is acceptable. + if (repoUrls.contains(repoUrl)) { + continue + } + // Special case to check androidx.dev first and avoid new androidx deps always failing for mavenCentral. + // Also preserves the order between mavenCentral and google so that mavenCentral is queried last. + if (repoUrl.contains('androidx.dev')) { + repoUrls.add(0, repoUrl) + } else { + repoUrls.add(repoUrl) } } } - return [null, null] + for (String repoUrl : repoUrls) { + // Constructs the file url for pom. For example, with + // * repoUrl as "https://maven.google.com" + // * component.group as "android.arch.core" + // * component.module as "common" + // * component.version as "1.1.1" + // + // The file url will be: https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.pom + String fileUrl = String.format('%s/%s', repoUrl, componentPomSubpath) + try { + GPathResult content = new XmlSlurper( + false /* validating */, false /* namespaceAware */).parse(fileUrl) + logger.debug("Succeeded in resolving url $fileUrl") + return [fileUrl, content] + } catch (any) { + logger.debug("Failed in resolving url $fileUrl") + } + } + throw new RuntimeException("Could not find pom from artifact $componentPomSubpath in $repoUrls") } private void checkDownloadable(String url) {
diff --git a/third_party/android_deps/libs/android_arch_core_common/3pp/fetch.py b/third_party/android_deps/libs/android_arch_core_common/3pp/fetch.py index c2b4d7c3..87ab93f 100755 --- a/third_party/android_deps/libs/android_arch_core_common/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_core_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/core/common/1.1.1/common-1.1.1.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.1/common-1.1.1.jar' _FILE_NAME = 'common-1.1.1.jar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_core_runtime/3pp/fetch.py b/third_party/android_deps/libs/android_arch_core_runtime/3pp/fetch.py index 8c5b04d..e075902 100755 --- a/third_party/android_deps/libs/android_arch_core_runtime/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_core_runtime/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.1/runtime-1.1.1.aar' _FILE_NAME = 'runtime-1.1.1.aar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_common/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_common/3pp/fetch.py index 661c87e..89276bc 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_common/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/common/1.1.1/common-1.1.1.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.1/common-1.1.1.jar' _FILE_NAME = 'common-1.1.1.jar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_common_java8/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_common_java8/3pp/fetch.py index 3f4f7bf4..752ecd5 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_common_java8/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_common_java8/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/common-java8/1.1.1/common-java8-1.1.1.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common-java8/1.1.1/common-java8-1.1.1.jar' _FILE_NAME = 'common-java8-1.1.1.jar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_livedata/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_livedata/3pp/fetch.py index e077645a..976c8f7 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_livedata/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_livedata/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/livedata/1.1.1/livedata-1.1.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata/1.1.1/livedata-1.1.1.aar' _FILE_NAME = 'livedata-1.1.1.aar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_livedata_core/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_livedata_core/3pp/fetch.py index cb95040..3f8df0d4 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_livedata_core/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_livedata_core/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/livedata-core/1.1.1/livedata-core-1.1.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-core/1.1.1/livedata-core-1.1.1.aar' _FILE_NAME = 'livedata-core-1.1.1.aar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_runtime/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_runtime/3pp/fetch.py index 450f07c..bfa73d6 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_runtime/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_runtime/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.1/runtime-1.1.1.aar' _FILE_NAME = 'runtime-1.1.1.aar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/android_arch_lifecycle_viewmodel/3pp/fetch.py b/third_party/android_deps/libs/android_arch_lifecycle_viewmodel/3pp/fetch.py index 203e47f..bb1069ec 100755 --- a/third_party/android_deps/libs/android_arch_lifecycle_viewmodel/3pp/fetch.py +++ b/third_party/android_deps/libs/android_arch_lifecycle_viewmodel/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1.1.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.1.1/viewmodel-1.1.1.aar' _FILE_NAME = 'viewmodel-1.1.1.aar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/com_android_support_animated_vector_drawable/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_animated_vector_drawable/3pp/fetch.py index 8dd7eec..3b17866 100755 --- a/third_party/android_deps/libs/com_android_support_animated_vector_drawable/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_animated_vector_drawable/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/animated-vector-drawable/28.0.0/animated-vector-drawable-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/28.0.0/animated-vector-drawable-28.0.0.aar' _FILE_NAME = 'animated-vector-drawable-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_appcompat_v7/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_appcompat_v7/3pp/fetch.py index 7fb511e..477554b 100755 --- a/third_party/android_deps/libs/com_android_support_appcompat_v7/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_appcompat_v7/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/appcompat-v7/28.0.0/appcompat-v7-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/28.0.0/appcompat-v7-28.0.0.aar' _FILE_NAME = 'appcompat-v7-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_asynclayoutinflater/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_asynclayoutinflater/3pp/fetch.py index ebae25c..43aff28 100755 --- a/third_party/android_deps/libs/com_android_support_asynclayoutinflater/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_asynclayoutinflater/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/asynclayoutinflater/28.0.0/asynclayoutinflater-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/asynclayoutinflater/28.0.0/asynclayoutinflater-28.0.0.aar' _FILE_NAME = 'asynclayoutinflater-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_cardview_v7/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_cardview_v7/3pp/fetch.py index 85da383..4cd4d79 100755 --- a/third_party/android_deps/libs/com_android_support_cardview_v7/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_cardview_v7/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/cardview-v7/28.0.0/cardview-v7-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/cardview-v7/28.0.0/cardview-v7-28.0.0.aar' _FILE_NAME = 'cardview-v7-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_collections/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_collections/3pp/fetch.py index b26ab7b..e6e1334 100755 --- a/third_party/android_deps/libs/com_android_support_collections/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_collections/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/collections/28.0.0/collections-28.0.0.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/collections/28.0.0/collections-28.0.0.jar' _FILE_NAME = 'collections-28.0.0.jar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_coordinatorlayout/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_coordinatorlayout/3pp/fetch.py index 8c12814..f307459e 100755 --- a/third_party/android_deps/libs/com_android_support_coordinatorlayout/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_coordinatorlayout/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/coordinatorlayout/28.0.0/coordinatorlayout-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/coordinatorlayout/28.0.0/coordinatorlayout-28.0.0.aar' _FILE_NAME = 'coordinatorlayout-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_cursoradapter/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_cursoradapter/3pp/fetch.py index 24cf665..a802541 100755 --- a/third_party/android_deps/libs/com_android_support_cursoradapter/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_cursoradapter/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/cursoradapter/28.0.0/cursoradapter-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/cursoradapter/28.0.0/cursoradapter-28.0.0.aar' _FILE_NAME = 'cursoradapter-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_customview/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_customview/3pp/fetch.py index 67bc2b6..82a3be8 100755 --- a/third_party/android_deps/libs/com_android_support_customview/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_customview/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/customview/28.0.0/customview-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/customview/28.0.0/customview-28.0.0.aar' _FILE_NAME = 'customview-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_design/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_design/3pp/fetch.py index 4c943e01..7265a70 100755 --- a/third_party/android_deps/libs/com_android_support_design/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_design/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/design/28.0.0/design-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/design/28.0.0/design-28.0.0.aar' _FILE_NAME = 'design-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_documentfile/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_documentfile/3pp/fetch.py index d1c88693..9ee3cfe 100755 --- a/third_party/android_deps/libs/com_android_support_documentfile/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_documentfile/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/documentfile/28.0.0/documentfile-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/documentfile/28.0.0/documentfile-28.0.0.aar' _FILE_NAME = 'documentfile-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_drawerlayout/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_drawerlayout/3pp/fetch.py index 51f982c..84cc57b9 100755 --- a/third_party/android_deps/libs/com_android_support_drawerlayout/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_drawerlayout/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/drawerlayout/28.0.0/drawerlayout-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/drawerlayout/28.0.0/drawerlayout-28.0.0.aar' _FILE_NAME = 'drawerlayout-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_interpolator/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_interpolator/3pp/fetch.py index 81d2fc65..6d781c6 100755 --- a/third_party/android_deps/libs/com_android_support_interpolator/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_interpolator/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/interpolator/28.0.0/interpolator-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/interpolator/28.0.0/interpolator-28.0.0.aar' _FILE_NAME = 'interpolator-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_loader/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_loader/3pp/fetch.py index 87c6a75e..76101ac 100755 --- a/third_party/android_deps/libs/com_android_support_loader/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_loader/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/loader/28.0.0/loader-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/loader/28.0.0/loader-28.0.0.aar' _FILE_NAME = 'loader-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_localbroadcastmanager/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_localbroadcastmanager/3pp/fetch.py index 214d9542..70a5d0e0 100755 --- a/third_party/android_deps/libs/com_android_support_localbroadcastmanager/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_localbroadcastmanager/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/localbroadcastmanager/28.0.0/localbroadcastmanager-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/localbroadcastmanager/28.0.0/localbroadcastmanager-28.0.0.aar' _FILE_NAME = 'localbroadcastmanager-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_multidex/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_multidex/3pp/fetch.py index a04919f..e1138463 100755 --- a/third_party/android_deps/libs/com_android_support_multidex/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_multidex/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/multidex/1.0.0/multidex-1.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/multidex/1.0.0/multidex-1.0.0.aar' _FILE_NAME = 'multidex-1.0.0.aar' _FILE_VERSION = '1.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_print/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_print/3pp/fetch.py index 6f8baca3..8b300da 100755 --- a/third_party/android_deps/libs/com_android_support_print/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_print/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/print/28.0.0/print-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/print/28.0.0/print-28.0.0.aar' _FILE_NAME = 'print-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_recyclerview_v7/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_recyclerview_v7/3pp/fetch.py index c7d3161..070cb18 100755 --- a/third_party/android_deps/libs/com_android_support_recyclerview_v7/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_recyclerview_v7/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/recyclerview-v7/28.0.0/recyclerview-v7-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/recyclerview-v7/28.0.0/recyclerview-v7-28.0.0.aar' _FILE_NAME = 'recyclerview-v7-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_slidingpanelayout/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_slidingpanelayout/3pp/fetch.py index 9ca7c9a..f5d0685 100755 --- a/third_party/android_deps/libs/com_android_support_slidingpanelayout/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_slidingpanelayout/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/slidingpanelayout/28.0.0/slidingpanelayout-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/slidingpanelayout/28.0.0/slidingpanelayout-28.0.0.aar' _FILE_NAME = 'slidingpanelayout-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_annotations/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_annotations/3pp/fetch.py index 687c63ac..fc4089a 100755 --- a/third_party/android_deps/libs/com_android_support_support_annotations/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_annotations/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-annotations/28.0.0/support-annotations-28.0.0.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/28.0.0/support-annotations-28.0.0.jar' _FILE_NAME = 'support-annotations-28.0.0.jar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_compat/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_compat/3pp/fetch.py index 2ef1aab..29f0564 100755 --- a/third_party/android_deps/libs/com_android_support_support_compat/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_compat/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-compat/28.0.0/support-compat-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-compat/28.0.0/support-compat-28.0.0.aar' _FILE_NAME = 'support-compat-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_core_ui/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_core_ui/3pp/fetch.py index ff8a02b..b02072d8 100755 --- a/third_party/android_deps/libs/com_android_support_support_core_ui/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_core_ui/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-core-ui/28.0.0/support-core-ui-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/28.0.0/support-core-ui-28.0.0.aar' _FILE_NAME = 'support-core-ui-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_core_utils/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_core_utils/3pp/fetch.py index 3ae95ba5..b4ced96 100755 --- a/third_party/android_deps/libs/com_android_support_support_core_utils/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_core_utils/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-core-utils/28.0.0/support-core-utils-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/28.0.0/support-core-utils-28.0.0.aar' _FILE_NAME = 'support-core-utils-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_fragment/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_fragment/3pp/fetch.py index 7950b341..a7d6a44 100755 --- a/third_party/android_deps/libs/com_android_support_support_fragment/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_fragment/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-fragment/28.0.0/support-fragment-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/28.0.0/support-fragment-28.0.0.aar' _FILE_NAME = 'support-fragment-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_media_compat/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_media_compat/3pp/fetch.py index 9978d9ae..a63e05f 100755 --- a/third_party/android_deps/libs/com_android_support_support_media_compat/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_media_compat/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-media-compat/28.0.0/support-media-compat-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-media-compat/28.0.0/support-media-compat-28.0.0.aar' _FILE_NAME = 'support-media-compat-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_v4/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_v4/3pp/fetch.py index 7d7d99e..f1087e2 100755 --- a/third_party/android_deps/libs/com_android_support_support_v4/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_v4/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-v4/28.0.0/support-v4-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-v4/28.0.0/support-v4-28.0.0.aar' _FILE_NAME = 'support-v4-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_support_vector_drawable/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_support_vector_drawable/3pp/fetch.py index 4687bc18..89b7879 100755 --- a/third_party/android_deps/libs/com_android_support_support_vector_drawable/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_support_vector_drawable/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/support-vector-drawable/28.0.0/support-vector-drawable-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/28.0.0/support-vector-drawable-28.0.0.aar' _FILE_NAME = 'support-vector-drawable-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_swiperefreshlayout/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_swiperefreshlayout/3pp/fetch.py index 38f23bc0..2d16658 100755 --- a/third_party/android_deps/libs/com_android_support_swiperefreshlayout/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_swiperefreshlayout/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/swiperefreshlayout/28.0.0/swiperefreshlayout-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/swiperefreshlayout/28.0.0/swiperefreshlayout-28.0.0.aar' _FILE_NAME = 'swiperefreshlayout-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_transition/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_transition/3pp/fetch.py index 9ae5a41f2..9896353 100755 --- a/third_party/android_deps/libs/com_android_support_transition/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_transition/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/transition/28.0.0/transition-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/transition/28.0.0/transition-28.0.0.aar' _FILE_NAME = 'transition-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_versionedparcelable/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_versionedparcelable/3pp/fetch.py index 3a099836..0c56c0b2 100755 --- a/third_party/android_deps/libs/com_android_support_versionedparcelable/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_versionedparcelable/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/versionedparcelable/28.0.0/versionedparcelable-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/versionedparcelable/28.0.0/versionedparcelable-28.0.0.aar' _FILE_NAME = 'versionedparcelable-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_support_viewpager/3pp/fetch.py b/third_party/android_deps/libs/com_android_support_viewpager/3pp/fetch.py index 0aab773..26f86f1 100755 --- a/third_party/android_deps/libs/com_android_support_viewpager/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_support_viewpager/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/support/viewpager/28.0.0/viewpager-28.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/support/viewpager/28.0.0/viewpager-28.0.0.aar' _FILE_NAME = 'viewpager-28.0.0.aar' _FILE_VERSION = '28.0.0'
diff --git a/third_party/android_deps/libs/com_android_tools_common/3pp/fetch.py b/third_party/android_deps/libs/com_android_tools_common/3pp/fetch.py index cb419b1e..32c9673 100755 --- a/third_party/android_deps/libs/com_android_tools_common/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_tools_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/tools/common/30.0.0-alpha10/common-30.0.0-alpha10.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/tools/common/30.0.0-alpha10/common-30.0.0-alpha10.jar' _FILE_NAME = 'common-30.0.0-alpha10.jar' _FILE_VERSION = '30.0.0-alpha10'
diff --git a/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs/3pp/fetch.py b/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs/3pp/fetch.py index 083b46f..20341e72 100755 --- a/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/tools/desugar_jdk_libs/1.1.1/desugar_jdk_libs-1.1.1.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/tools/desugar_jdk_libs/1.1.1/desugar_jdk_libs-1.1.1.jar' _FILE_NAME = 'desugar_jdk_libs-1.1.1.jar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/3pp/fetch.py b/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/3pp/fetch.py index c187d3f..dd7f6f4b 100755 --- a/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_tools_desugar_jdk_libs_configuration/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/tools/desugar_jdk_libs_configuration/1.1.1/desugar_jdk_libs_configuration-1.1.1.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/tools/desugar_jdk_libs_configuration/1.1.1/desugar_jdk_libs_configuration-1.1.1.jar' _FILE_NAME = 'desugar_jdk_libs_configuration-1.1.1.jar' _FILE_VERSION = '1.1.1'
diff --git a/third_party/android_deps/libs/com_android_tools_layoutlib_layoutlib_api/3pp/fetch.py b/third_party/android_deps/libs/com_android_tools_layoutlib_layoutlib_api/3pp/fetch.py index 9128c868..66ac3ef 100755 --- a/third_party/android_deps/libs/com_android_tools_layoutlib_layoutlib_api/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_tools_layoutlib_layoutlib_api/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/tools/layoutlib/layoutlib-api/30.0.0-alpha10/layoutlib-api-30.0.0-alpha10.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.0.0-alpha10/layoutlib-api-30.0.0-alpha10.jar' _FILE_NAME = 'layoutlib-api-30.0.0-alpha10.jar' _FILE_VERSION = '30.0.0-alpha10'
diff --git a/third_party/android_deps/libs/com_android_tools_sdk_common/3pp/fetch.py b/third_party/android_deps/libs/com_android_tools_sdk_common/3pp/fetch.py index 447b654..94c5176 100755 --- a/third_party/android_deps/libs/com_android_tools_sdk_common/3pp/fetch.py +++ b/third_party/android_deps/libs/com_android_tools_sdk_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/android/tools/sdk-common/30.0.0-alpha10/sdk-common-30.0.0-alpha10.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.0.0-alpha10/sdk-common-30.0.0-alpha10.jar' _FILE_NAME = 'sdk-common-30.0.0-alpha10.jar' _FILE_VERSION = '30.0.0-alpha10'
diff --git a/third_party/android_deps/libs/com_google_android_datatransport_transport_api/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_datatransport_transport_api/3pp/fetch.py index 1bb1bb9..e7f88cec 100755 --- a/third_party/android_deps/libs/com_google_android_datatransport_transport_api/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_datatransport_transport_api/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/datatransport/transport-api/2.2.1/transport-api-2.2.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-api/2.2.1/transport-api-2.2.1.aar' _FILE_NAME = 'transport-api-2.2.1.aar' _FILE_VERSION = '2.2.1'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_auth/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_auth/3pp/fetch.py index 9137afe..471fa9ac 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_auth/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_auth/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-auth/17.0.0/play-services-auth-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-auth/17.0.0/play-services-auth-17.0.0.aar' _FILE_NAME = 'play-services-auth-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_auth_api_phone/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_auth_api_phone/3pp/fetch.py index a6299df9..45eaca6 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_auth_api_phone/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_auth_api_phone/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-auth-api-phone/17.5.0/play-services-auth-api-phone-17.5.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-auth-api-phone/17.5.0/play-services-auth-api-phone-17.5.0.aar' _FILE_NAME = 'play-services-auth-api-phone-17.5.0.aar' _FILE_VERSION = '17.5.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_auth_base/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_auth_base/3pp/fetch.py index 7cb0c6d..dc3c346 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_auth_base/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_auth_base/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-auth-base/17.0.0/play-services-auth-base-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-auth-base/17.0.0/play-services-auth-base-17.0.0.aar' _FILE_NAME = 'play-services-auth-base-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py index e865bc67..bf7842e 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_base/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-base/17.5.0/play-services-base-17.5.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-base/17.5.0/play-services-base-17.5.0.aar' _FILE_NAME = 'play-services-base-17.5.0.aar' _FILE_VERSION = '17.5.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py index 8552999d..7a73efa 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_basement/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-basement/17.5.0/play-services-basement-17.5.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/17.5.0/play-services-basement-17.5.0.aar' _FILE_NAME = 'play-services-basement-17.5.0.aar' _FILE_VERSION = '17.5.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_cast/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_cast/3pp/fetch.py index fe9e02a..e81d1b2 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_cast/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_cast/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-cast/17.0.0/play-services-cast-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-cast/17.0.0/play-services-cast-17.0.0.aar' _FILE_NAME = 'play-services-cast-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_cast_framework/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_cast_framework/3pp/fetch.py index 5df2f4fa..734b84e 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_cast_framework/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_cast_framework/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-cast-framework/17.0.0/play-services-cast-framework-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-cast-framework/17.0.0/play-services-cast-framework-17.0.0.aar' _FILE_NAME = 'play-services-cast-framework-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_clearcut/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_clearcut/3pp/fetch.py index b919a9f4..96374a44 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_clearcut/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_clearcut/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-clearcut/17.0.0/play-services-clearcut-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-clearcut/17.0.0/play-services-clearcut-17.0.0.aar' _FILE_NAME = 'play-services-clearcut-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_cloud_messaging/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_cloud_messaging/3pp/fetch.py index 8458823..82b9dd4 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_cloud_messaging/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_cloud_messaging/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-cloud-messaging/16.0.0/play-services-cloud-messaging-16.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-cloud-messaging/16.0.0/play-services-cloud-messaging-16.0.0.aar' _FILE_NAME = 'play-services-cloud-messaging-16.0.0.aar' _FILE_VERSION = '16.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_fido/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_fido/3pp/fetch.py index 4350fec..c6047c0 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_fido/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_fido/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-fido/19.0.0-beta/play-services-fido-19.0.0-beta.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-fido/19.0.0-beta/play-services-fido-19.0.0-beta.aar' _FILE_NAME = 'play-services-fido-19.0.0-beta.aar' _FILE_VERSION = '19.0.0-beta'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_flags/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_flags/3pp/fetch.py index 0b75496..12513d0 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_flags/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_flags/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-flags/17.0.0/play-services-flags-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-flags/17.0.0/play-services-flags-17.0.0.aar' _FILE_NAME = 'play-services-flags-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_gcm/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_gcm/3pp/fetch.py index 221d3af..97c1c51 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_gcm/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_gcm/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-gcm/17.0.0/play-services-gcm-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-gcm/17.0.0/play-services-gcm-17.0.0.aar' _FILE_NAME = 'play-services-gcm-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_iid/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_iid/3pp/fetch.py index c451db7..99fa7a7c 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_iid/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_iid/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-iid/17.0.0/play-services-iid-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-iid/17.0.0/play-services-iid-17.0.0.aar' _FILE_NAME = 'play-services-iid-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_instantapps/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_instantapps/3pp/fetch.py index 92422ca1..23c6f1f2cb 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_instantapps/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_instantapps/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-instantapps/17.0.0/play-services-instantapps-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-instantapps/17.0.0/play-services-instantapps-17.0.0.aar' _FILE_NAME = 'play-services-instantapps-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_location/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_location/3pp/fetch.py index 30c7405..ee4f89e 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_location/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_location/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-location/17.0.0/play-services-location-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-location/17.0.0/play-services-location-17.0.0.aar' _FILE_NAME = 'play-services-location-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_phenotype/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_phenotype/3pp/fetch.py index 643acc3..23c0867 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_phenotype/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_phenotype/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-phenotype/17.0.0/play-services-phenotype-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-phenotype/17.0.0/play-services-phenotype-17.0.0.aar' _FILE_NAME = 'play-services-phenotype-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_places_placereport/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_places_placereport/3pp/fetch.py index 36cbe39..abf7a56 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_places_placereport/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_places_placereport/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-places-placereport/17.0.0/play-services-places-placereport-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-places-placereport/17.0.0/play-services-places-placereport-17.0.0.aar' _FILE_NAME = 'play-services-places-placereport-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_stats/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_stats/3pp/fetch.py index c51d7ff..c2fa4f8 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_stats/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_stats/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar' _FILE_NAME = 'play-services-stats-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py index c6444ef6..835604e5 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_tasks/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-tasks/17.2.0/play-services-tasks-17.2.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tasks/17.2.0/play-services-tasks-17.2.0.aar' _FILE_NAME = 'play-services-tasks-17.2.0.aar' _FILE_VERSION = '17.2.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_vision/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_vision/3pp/fetch.py index 9095ea2b..eb2318b 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_vision/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_vision/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-vision/18.0.0/play-services-vision-18.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision/18.0.0/play-services-vision-18.0.0.aar' _FILE_NAME = 'play-services-vision-18.0.0.aar' _FILE_VERSION = '18.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_gms_play_services_vision_common/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_gms_play_services_vision_common/3pp/fetch.py index 5073567..9b685ba 100755 --- a/third_party/android_deps/libs/com_google_android_gms_play_services_vision_common/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_gms_play_services_vision_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/gms/play-services-vision-common/18.0.0/play-services-vision-common-18.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-vision-common/18.0.0/play-services-vision-common-18.0.0.aar' _FILE_NAME = 'play-services-vision-common-18.0.0.aar' _FILE_VERSION = '18.0.0'
diff --git a/third_party/android_deps/libs/com_google_android_material_material/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_material_material/3pp/fetch.py index cb1dbb1..966c623 100755 --- a/third_party/android_deps/libs/com_google_android_material_material/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_material_material/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/material/material/1.5.0-alpha02/material-1.5.0-alpha02.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.5.0-alpha02/material-1.5.0-alpha02.aar' _FILE_NAME = 'material-1.5.0-alpha02.aar' _FILE_VERSION = '1.5.0-alpha02'
diff --git a/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py b/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py index abbdbeb0..a83b336 100755 --- a/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_android_play_core/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/android/play/core/1.10.0/core-1.10.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/android/play/core/1.10.0/core-1.10.0.aar' _FILE_NAME = 'core-1.10.0.aar' _FILE_VERSION = '1.10.0'
diff --git a/third_party/android_deps/libs/com_google_auto_auto_common/3pp/fetch.py b/third_party/android_deps/libs/com_google_auto_auto_common/3pp/fetch.py index 8d40e8a0..dfaebca 100755 --- a/third_party/android_deps/libs/com_google_auto_auto_common/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_auto_auto_common/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.10/auto-common-0.10.jar' -_FILE_NAME = 'auto-common-0.10.jar' -_FILE_VERSION = '0.10' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/auto/auto-common/1.1.2/auto-common-1.1.2.jar' +_FILE_NAME = 'auto-common-1.1.2.jar' +_FILE_VERSION = '1.1.2' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/3pp/fetch.py b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/3pp/fetch.py index d4f256f..96273f3 100755 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotation/2.7.1/error_prone_annotation-2.7.1.jar' -_FILE_NAME = 'error_prone_annotation-2.7.1.jar' -_FILE_VERSION = '2.7.1' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotation/2.9.0/error_prone_annotation-2.9.0.jar' +_FILE_NAME = 'error_prone_annotation-2.9.0.jar' +_FILE_VERSION = '2.9.0' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/3pp/fetch.py b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/3pp/fetch.py index 7e4d4971..63177a5 100755 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar' -_FILE_NAME = 'error_prone_annotations-2.7.1.jar' -_FILE_VERSION = '2.7.1' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar' +_FILE_NAME = 'error_prone_annotations-2.9.0.jar' +_FILE_VERSION = '2.9.0' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/3pp/fetch.py b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/3pp/fetch.py index 1c14cfe..c6ff57f4 100755 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_check_api/2.7.1/error_prone_check_api-2.7.1.jar' -_FILE_NAME = 'error_prone_check_api-2.7.1.jar' -_FILE_VERSION = '2.7.1' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_check_api/2.9.0/error_prone_check_api-2.9.0.jar' +_FILE_NAME = 'error_prone_check_api-2.9.0.jar' +_FILE_VERSION = '2.9.0' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/3pp/fetch.py b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/3pp/fetch.py index 5dabf3e..0ce64e1f 100755 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_core/2.7.1/error_prone_core-2.7.1.jar' -_FILE_NAME = 'error_prone_core-2.7.1.jar' -_FILE_VERSION = '2.7.1' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_core/2.9.0/error_prone_core-2.9.0.jar' +_FILE_NAME = 'error_prone_core-2.9.0.jar' +_FILE_VERSION = '2.9.0' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/3pp/fetch.py b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/3pp/fetch.py index 4d28d5c..e35806d 100755 --- a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_type_annotations/2.7.1/error_prone_type_annotations-2.7.1.jar' -_FILE_NAME = 'error_prone_type_annotations-2.7.1.jar' -_FILE_VERSION = '2.7.1' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_type_annotations/2.9.0/error_prone_type_annotations-2.9.0.jar' +_FILE_NAME = 'error_prone_type_annotations-2.9.0.jar' +_FILE_VERSION = '2.9.0' def do_latest():
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_annotations/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_annotations/3pp/fetch.py index 32f1627..c51a9b5f 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_annotations/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_annotations/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-annotations/16.0.0/firebase-annotations-16.0.0.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-annotations/16.0.0/firebase-annotations-16.0.0.jar' _FILE_NAME = 'firebase-annotations-16.0.0.jar' _FILE_VERSION = '16.0.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_common/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_common/3pp/fetch.py index b374be1..b3f1e74 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_common/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_common/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-common/19.5.0/firebase-common-19.5.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/19.5.0/firebase-common-19.5.0.aar' _FILE_NAME = 'firebase-common-19.5.0.aar' _FILE_VERSION = '19.5.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_components/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_components/3pp/fetch.py index d7d5da3e..811b0e4d 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_components/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_components/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-components/16.1.0/firebase-components-16.1.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-components/16.1.0/firebase-components-16.1.0.aar' _FILE_NAME = 'firebase-components-16.1.0.aar' _FILE_VERSION = '16.1.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_encoders/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_encoders/3pp/fetch.py index a4a7e07f..caa3c63 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_encoders/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_encoders/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-encoders/16.1.0/firebase-encoders-16.1.0.jar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders/16.1.0/firebase-encoders-16.1.0.jar' _FILE_NAME = 'firebase-encoders-16.1.0.jar' _FILE_VERSION = '16.1.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_encoders_json/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_encoders_json/3pp/fetch.py index 8d016fb8d..10fa270 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_encoders_json/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_encoders_json/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-encoders-json/17.1.0/firebase-encoders-json-17.1.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders-json/17.1.0/firebase-encoders-json-17.1.0.aar' _FILE_NAME = 'firebase-encoders-json-17.1.0.aar' _FILE_VERSION = '17.1.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_iid/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_iid/3pp/fetch.py index 3c388c2..78c7623 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_iid/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_iid/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-iid/21.0.1/firebase-iid-21.0.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid/21.0.1/firebase-iid-21.0.1.aar' _FILE_NAME = 'firebase-iid-21.0.1.aar' _FILE_VERSION = '21.0.1'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_iid_interop/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_iid_interop/3pp/fetch.py index dd6a54e..8eb56a6 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_iid_interop/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_iid_interop/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar' _FILE_NAME = 'firebase-iid-interop-17.0.0.aar' _FILE_VERSION = '17.0.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_installations/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_installations/3pp/fetch.py index b8e3811..80188199 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_installations/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_installations/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-installations/16.3.5/firebase-installations-16.3.5.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations/16.3.5/firebase-installations-16.3.5.aar' _FILE_NAME = 'firebase-installations-16.3.5.aar' _FILE_VERSION = '16.3.5'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_installations_interop/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_installations_interop/3pp/fetch.py index b6ded81..9d2faf3 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_installations_interop/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_installations_interop/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-installations-interop/16.0.1/firebase-installations-interop-16.0.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations-interop/16.0.1/firebase-installations-interop-16.0.1.aar' _FILE_NAME = 'firebase-installations-interop-16.0.1.aar' _FILE_VERSION = '16.0.1'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_measurement_connector/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_measurement_connector/3pp/fetch.py index d713ea1..2a54991 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_measurement_connector/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_measurement_connector/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar' _FILE_NAME = 'firebase-measurement-connector-18.0.0.aar' _FILE_VERSION = '18.0.0'
diff --git a/third_party/android_deps/libs/com_google_firebase_firebase_messaging/3pp/fetch.py b/third_party/android_deps/libs/com_google_firebase_firebase_messaging/3pp/fetch.py index 54d969f..4836ebb 100755 --- a/third_party/android_deps/libs/com_google_firebase_firebase_messaging/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_firebase_firebase_messaging/3pp/fetch.py
@@ -12,7 +12,7 @@ import json import os -_FILE_URL = 'https://maven.google.com/com/google/firebase/firebase-messaging/21.0.1/firebase-messaging-21.0.1.aar' +_FILE_URL = 'https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-messaging/21.0.1/firebase-messaging-21.0.1.aar' _FILE_NAME = 'firebase-messaging-21.0.1.aar' _FILE_VERSION = '21.0.1'
diff --git a/third_party/android_deps/libs/com_google_guava_guava/3pp/fetch.py b/third_party/android_deps/libs/com_google_guava_guava/3pp/fetch.py index 381bf1d1..e11bebd 100755 --- a/third_party/android_deps/libs/com_google_guava_guava/3pp/fetch.py +++ b/third_party/android_deps/libs/com_google_guava_guava/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1-jre/guava-30.1-jre.jar' -_FILE_NAME = 'guava-30.1-jre.jar' -_FILE_VERSION = '30.1-jre' +_FILE_URL = 'https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1.1-jre/guava-30.1.1-jre.jar' +_FILE_NAME = 'guava-30.1.1-jre.jar' +_FILE_VERSION = '30.1.1-jre' def do_latest():
diff --git a/third_party/android_deps/libs/org_checkerframework_dataflow_shaded/3pp/3pp.pb b/third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/3pp/3pp.pb similarity index 100% rename from third_party/android_deps/libs/org_checkerframework_dataflow_shaded/3pp/3pp.pb rename to third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/3pp/3pp.pb
diff --git a/third_party/android_deps/libs/org_checkerframework_dataflow_shaded/3pp/fetch.py b/third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/3pp/fetch.py similarity index 89% rename from third_party/android_deps/libs/org_checkerframework_dataflow_shaded/3pp/fetch.py rename to third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/3pp/fetch.py index 6bed881d..9e117f6 100755 --- a/third_party/android_deps/libs/org_checkerframework_dataflow_shaded/3pp/fetch.py +++ b/third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/3pp/fetch.py
@@ -12,9 +12,9 @@ import json import os -_FILE_URL = 'https://repo.maven.apache.org/maven2/org/checkerframework/dataflow-shaded/3.11.0/dataflow-shaded-3.11.0.jar' -_FILE_NAME = 'dataflow-shaded-3.11.0.jar' -_FILE_VERSION = '3.11.0' +_FILE_URL = 'https://repo.maven.apache.org/maven2/org/checkerframework/dataflow-errorprone/3.15.0/dataflow-errorprone-3.15.0.jar' +_FILE_NAME = 'dataflow-errorprone-3.15.0.jar' +_FILE_VERSION = '3.15.0' def do_latest():
diff --git a/third_party/android_deps/libs/org_checkerframework_dataflow_shaded/OWNERS b/third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/OWNERS similarity index 100% rename from third_party/android_deps/libs/org_checkerframework_dataflow_shaded/OWNERS rename to third_party/android_deps/libs/org_checkerframework_dataflow_errorprone/OWNERS
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/README.chromium index 3af2302..ed32ef9 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/README.chromium
@@ -1,7 +1,7 @@ Name: Kotlin Stdlib Short Name: kotlin-stdlib URL: https://kotlinlang.org/ -Version: 1.5.21 +Version: 1.5.30 License: Apache Version 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/cipd.yaml index c3e094c..a3c61e1 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.5.21.cr0 +# cipd create --pkg-def cipd.yaml -tag version:2@1.5.30.cr0 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib description: "Kotlin Stdlib" data: -- file: kotlin-stdlib-1.5.21.jar +- file: kotlin-stdlib-1.5.30.jar
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/README.chromium b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/README.chromium index e1e89b0..b1cce4b9 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/README.chromium +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/README.chromium
@@ -1,7 +1,7 @@ Name: Kotlin Stdlib Common Short Name: kotlin-stdlib-common URL: https://kotlinlang.org/ -Version: 1.5.21 +Version: 1.5.30 License: Apache Version 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/cipd.yaml b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/cipd.yaml index 6b0926f7..748d481 100644 --- a/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/cipd.yaml +++ b/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common/cipd.yaml
@@ -3,8 +3,8 @@ # found in the LICENSE file. # To create CIPD package run the following command. -# cipd create --pkg-def cipd.yaml -tag version:2@1.5.21.cr0 +# cipd create --pkg-def cipd.yaml -tag version:2@1.5.30.cr0 package: chromium/third_party/android_deps/libs/org_jetbrains_kotlin_kotlin_stdlib_common description: "Kotlin Stdlib Common" data: -- file: kotlin-stdlib-common-1.5.21.jar +- file: kotlin-stdlib-common-1.5.30.jar
diff --git a/third_party/androidx/build.gradle.template b/third_party/androidx/build.gradle.template index 97d3dcd..5c30345 100644 --- a/third_party/androidx/build.gradle.template +++ b/third_party/androidx/build.gradle.template
@@ -5,94 +5,92 @@ apply plugin: ChromiumPlugin repositories { - mavenCentral() - maven { - url 'https://maven.google.com' - } maven { url '{{androidx_repository_url}}' } + google() + mavenCentral() } dependencies { // Note about the configuration names: they are defined in buildSrc/ChromiumPlugin - compile "androidx.lifecycle:lifecycle-runtime:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-common:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-common-java8:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-livedata:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-livedata-core:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-viewmodel:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-viewmodel-savedstate:{{androidx_dependency_version}}" + compile 'androidx.lifecycle:lifecycle-runtime:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-common:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-common-java8:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-livedata:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-livedata-core:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-viewmodel:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-viewmodel-savedstate:{{androidx_dependency_version}}' - compile "androidx.activity:activity:{{androidx_dependency_version}}" - compile "androidx.annotation:annotation:{{androidx_dependency_version}}" - compile "androidx.appcompat:appcompat:{{androidx_dependency_version}}" - compile "androidx.appcompat:appcompat-resources:{{androidx_dependency_version}}" - compile "androidx.asynclayoutinflater:asynclayoutinflater:{{androidx_dependency_version}}" - compile "androidx.browser:browser:{{androidx_dependency_version}}" - compile "androidx.cardview:cardview:{{androidx_dependency_version}}" - compile "androidx.collection:collection:{{androidx_dependency_version}}" - compile "androidx.concurrent:concurrent-futures:{{androidx_dependency_version}}" - compile "androidx.coordinatorlayout:coordinatorlayout:{{androidx_dependency_version}}" - compile "androidx.core:core:{{androidx_dependency_version}}" - compile "androidx.core:core-animation:{{androidx_dependency_version}}" - compile "androidx.customview:customview:{{androidx_dependency_version}}" - compile "androidx.drawerlayout:drawerlayout:{{androidx_dependency_version}}" - compile "androidx.dynamicanimation:dynamicanimation:{{androidx_dependency_version}}" - compile "androidx.exifinterface:exifinterface:{{androidx_dependency_version}}" - compile "androidx.fragment:fragment:{{androidx_dependency_version}}" - compile "androidx.gridlayout:gridlayout:{{androidx_dependency_version}}" - compile "androidx.interpolator:interpolator:{{androidx_dependency_version}}" - compile "androidx.leanback:leanback:{{androidx_dependency_version}}" - compile "androidx.leanback:leanback-preference:{{androidx_dependency_version}}" - compile "androidx.localbroadcastmanager:localbroadcastmanager:{{androidx_dependency_version}}" - compile "androidx.media:media:{{androidx_dependency_version}}" - compile "androidx.mediarouter:mediarouter:{{androidx_dependency_version}}" - compile "androidx.preference:preference:{{androidx_dependency_version}}" - compile "androidx.recyclerview:recyclerview:{{androidx_dependency_version}}" - compile "androidx.savedstate:savedstate:{{androidx_dependency_version}}" - compile "androidx.slice:slice-builders:{{androidx_dependency_version}}" - compile "androidx.slice:slice-core:{{androidx_dependency_version}}" - compile "androidx.swiperefreshlayout:swiperefreshlayout:{{androidx_dependency_version}}" - compile "androidx.tvprovider:tvprovider:{{androidx_dependency_version}}" - compile "androidx.vectordrawable:vectordrawable:{{androidx_dependency_version}}" - compile "androidx.vectordrawable:vectordrawable-animated:{{androidx_dependency_version}}" - compile "androidx.viewpager:viewpager:{{androidx_dependency_version}}" - compile "androidx.window:window:{{androidx_dependency_version}}" + compile 'androidx.activity:activity:{{androidx_dependency_version}}' + compile 'androidx.annotation:annotation:{{androidx_dependency_version}}' + compile 'androidx.appcompat:appcompat:{{androidx_dependency_version}}' + compile 'androidx.appcompat:appcompat-resources:{{androidx_dependency_version}}' + compile 'androidx.asynclayoutinflater:asynclayoutinflater:{{androidx_dependency_version}}' + compile 'androidx.browser:browser:{{androidx_dependency_version}}' + compile 'androidx.cardview:cardview:{{androidx_dependency_version}}' + compile 'androidx.collection:collection:{{androidx_dependency_version}}' + compile 'androidx.concurrent:concurrent-futures:{{androidx_dependency_version}}' + compile 'androidx.coordinatorlayout:coordinatorlayout:{{androidx_dependency_version}}' + compile 'androidx.core:core:{{androidx_dependency_version}}' + compile 'androidx.core:core-animation:{{androidx_dependency_version}}' + compile 'androidx.customview:customview:{{androidx_dependency_version}}' + compile 'androidx.drawerlayout:drawerlayout:{{androidx_dependency_version}}' + compile 'androidx.dynamicanimation:dynamicanimation:{{androidx_dependency_version}}' + compile 'androidx.exifinterface:exifinterface:{{androidx_dependency_version}}' + compile 'androidx.fragment:fragment:{{androidx_dependency_version}}' + compile 'androidx.gridlayout:gridlayout:{{androidx_dependency_version}}' + compile 'androidx.interpolator:interpolator:{{androidx_dependency_version}}' + compile 'androidx.leanback:leanback:{{androidx_dependency_version}}' + compile 'androidx.leanback:leanback-preference:{{androidx_dependency_version}}' + compile 'androidx.localbroadcastmanager:localbroadcastmanager:{{androidx_dependency_version}}' + compile 'androidx.media:media:{{androidx_dependency_version}}' + compile 'androidx.mediarouter:mediarouter:{{androidx_dependency_version}}' + compile 'androidx.preference:preference:{{androidx_dependency_version}}' + compile 'androidx.recyclerview:recyclerview:{{androidx_dependency_version}}' + compile 'androidx.savedstate:savedstate:{{androidx_dependency_version}}' + compile 'androidx.slice:slice-builders:{{androidx_dependency_version}}' + compile 'androidx.slice:slice-core:{{androidx_dependency_version}}' + compile 'androidx.swiperefreshlayout:swiperefreshlayout:{{androidx_dependency_version}}' + compile 'androidx.tvprovider:tvprovider:{{androidx_dependency_version}}' + compile 'androidx.vectordrawable:vectordrawable:{{androidx_dependency_version}}' + compile 'androidx.vectordrawable:vectordrawable-animated:{{androidx_dependency_version}}' + compile 'androidx.viewpager:viewpager:{{androidx_dependency_version}}' + compile 'androidx.window:window:{{androidx_dependency_version}}' // Those are for use by doubledown libraries. - compile "androidx.arch.core:core-common:{{androidx_dependency_version}}" - compile "androidx.annotation:annotation-experimental:{{androidx_dependency_version}}" - compile "androidx.annotation:annotation:{{androidx_dependency_version}}" - compile "androidx.emoji:emoji:{{androidx_dependency_version}}" - compile "androidx.legacy:legacy-support-core-utils:{{androidx_dependency_version}}" - compile "androidx.lifecycle:lifecycle-runtime:{{androidx_dependency_version}}" - compile "androidx.room:room-runtime:{{androidx_dependency_version}}" - compile "androidx.transition:transition:{{androidx_dependency_version}}" - compile "androidx.viewpager2:viewpager2:{{androidx_dependency_version}}" + compile 'androidx.arch.core:core-common:{{androidx_dependency_version}}' + compile 'androidx.annotation:annotation-experimental:{{androidx_dependency_version}}' + compile 'androidx.annotation:annotation:{{androidx_dependency_version}}' + compile 'androidx.emoji:emoji:{{androidx_dependency_version}}' + compile 'androidx.legacy:legacy-support-core-utils:{{androidx_dependency_version}}' + compile 'androidx.lifecycle:lifecycle-runtime:{{androidx_dependency_version}}' + compile 'androidx.room:room-runtime:{{androidx_dependency_version}}' + compile 'androidx.transition:transition:{{androidx_dependency_version}}' + compile 'androidx.viewpager2:viewpager2:{{androidx_dependency_version}}' - compile "androidx.multidex:multidex:2.0.0" - compile "androidx.webkit:webkit:{{androidx_dependency_version}}" + compile 'androidx.multidex:multidex:2.0.0' + compile 'androidx.webkit:webkit:{{androidx_dependency_version}}' // For some reason ConstraintLayout is not shipped with the rest of // androidx, and not included in snapshots. - compile "androidx.constraintlayout:constraintlayout:2.1.0-beta02" + compile 'androidx.constraintlayout:constraintlayout:2.1.0-beta02' // Used by 1p Play Services. - compile "androidx.legacy:legacy-support-v4:1.0.0" + compile 'androidx.legacy:legacy-support-v4:1.0.0' // testCompile targets have test_only = true. - androidTestCompile "androidx.test:core:1.4.0-rc01" - androidTestCompile "androidx.test:monitor:1.4.0-rc01" - androidTestCompile "androidx.test:rules:1.2.0" - androidTestCompile "androidx.test:runner:1.2.0" - androidTestCompile "androidx.test.espresso:espresso-contrib:3.2.0" - androidTestCompile "androidx.test.espresso:espresso-core:3.2.0" - androidTestCompile "androidx.test.espresso:espresso-intents:3.2.0" - androidTestCompile "androidx.test.espresso:espresso-web:3.2.0" - androidTestCompile "androidx.test.ext:junit:1.1.1" - androidTestCompile "androidx.test.uiautomator:uiautomator:2.2.0" + androidTestCompile 'androidx.test:core:1.4.0-rc01' + androidTestCompile 'androidx.test:monitor:1.4.0-rc01' + androidTestCompile 'androidx.test:rules:1.2.0' + androidTestCompile 'androidx.test:runner:1.2.0' + androidTestCompile 'androidx.test.espresso:espresso-contrib:3.2.0' + androidTestCompile 'androidx.test.espresso:espresso-core:3.2.0' + androidTestCompile 'androidx.test.espresso:espresso-intents:3.2.0' + androidTestCompile 'androidx.test.espresso:espresso-web:3.2.0' + androidTestCompile 'androidx.test.ext:junit:1.1.1' + androidTestCompile 'androidx.test.uiautomator:uiautomator:2.2.0' } // The snapshot repository only has the latest version of each dependency. When
diff --git a/third_party/blink/PRESUBMIT.py b/third_party/blink/PRESUBMIT.py index 6239517..ed4f38c 100644 --- a/third_party/blink/PRESUBMIT.py +++ b/third_party/blink/PRESUBMIT.py
@@ -231,35 +231,12 @@ return results -def _CheckForDeprecatedFunctions(input_api, output_api): - """Checks that Blink does not use deprecated functions.""" - # TODO(https://crbug.com/1058527) Remove this presubmit once we've finished - # the refactor and no callers of `WTF::HashMap::DeprecatedAtOrEmptyValue()` remain. - deprecated_re = input_api.re.compile( - r'[^/][^/].*\bDeprecatedAtOrEmptyValue\b') - errors = input_api.canned_checks._FindNewViolationsOfRule( - lambda _, x: not deprecated_re.search(x), input_api, None) - errors = [' * %s' % violation for violation in errors] - if errors: - return [ - output_api.PresubmitPromptOrNotify( - 'WTF::HashMap::DeprecatedAtOrEmptyValue() is deprecated. Please use ' - 'at() moving forward. Note that at() will crash if the HashMap ' - 'does not contain the given key, so it is recommended to use ' - 'find() or Contains() if you are not sure. Please fix the ' - 'following occurrences before uploading:\n%s' % - '\n'.join(errors)) - ] - return [] - - def CheckChangeOnUpload(input_api, output_api): results = [] results.extend(_CommonChecks(input_api, output_api)) results.extend(_CheckStyle(input_api, output_api)) results.extend(_CheckForPrintfDebugging(input_api, output_api)) results.extend(_CheckForForbiddenChromiumCode(input_api, output_api)) - results.extend(_CheckForDeprecatedFunctions(input_api, output_api)) return results
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 13cb879..6188b74 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -1000,7 +1000,7 @@ // Enables reporting all JavaScript frameworks via a manual traversal to detect // the properties and attributes required. -const base::Feature kReportAllJavascriptFrameworks{ +const base::Feature kReportAllJavaScriptFrameworks{ "ReportAllJavaScriptFrameworks", base::FEATURE_DISABLED_BY_DEFAULT}; // Suppresses console errors for CORS problems which report an associated @@ -1019,5 +1019,21 @@ const base::Feature kPersistentQuotaIsTemporaryQuota{ "PersistentQuotaIsTemporaryQuota", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kDelayLowPriorityRequestsAccordingToNetworkState{ + "DelayLowPriorityRequestsAccordingToNetworkState", + base::FEATURE_DISABLED_BY_DEFAULT}; + +const base::FeatureParam<int> kMaxNumOfThrottleableRequestsInTightMode{ + &kDelayLowPriorityRequestsAccordingToNetworkState, + "MaxNumOfThrottleableRequestsInTightMode", 5}; + +const base::FeatureParam<base::TimeDelta> kHttpRttThreshold{ + &kDelayLowPriorityRequestsAccordingToNetworkState, "HttpRttThreshold", + base::TimeDelta::FromMilliseconds(450)}; + +const base::FeatureParam<double> kCostReductionOfMultiplexedRequests{ + &kDelayLowPriorityRequestsAccordingToNetworkState, + "CostReductionOfMultiplexedRequests", 0.5}; + } // namespace features } // namespace blink
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index 897a5c2..ee52126c 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -428,7 +428,7 @@ // When enabled, we report all JavaScript frameworks via a manual traversal to // detect the properties and attributes required. -BLINK_COMMON_EXPORT extern const base::Feature kReportAllJavascriptFrameworks; +BLINK_COMMON_EXPORT extern const base::Feature kReportAllJavaScriptFrameworks; // Suppresses console errors for CORS problems which report an associated // inspector issue anyway. @@ -444,6 +444,30 @@ BLINK_COMMON_EXPORT extern const base::Feature kPersistentQuotaIsTemporaryQuota; +// If enabled, the ResourceLoadScheculer will take the current network state +// into consideration, when it plans to delay a low-priority throttleable +// requests in the tight mode. The factors include: +// - The total number of the in-flight multiplexed connections (e.g., +// H2/SPDY/QUIC). +// - HTTP RTT estimate. +BLINK_COMMON_EXPORT extern const base::Feature + kDelayLowPriorityRequestsAccordingToNetworkState; + +// Number of the requests that can be handled in the tight mode. +BLINK_COMMON_EXPORT +extern const base::FeatureParam<int> kMaxNumOfThrottleableRequestsInTightMode; + +// The HTTP RTT threshold: decide whether the +// `kDelayLowPriorityRequestsAccordingToNetworkState` feature can take effect +// practically according to the network connection state. +BLINK_COMMON_EXPORT +extern const base::FeatureParam<base::TimeDelta> kHttpRttThreshold; + +// The cost reduction for the multiplexed requests when +// `kDelayLowPriorityRequestsAccordingToNetworkState` is enabled. +BLINK_COMMON_EXPORT +extern const base::FeatureParam<double> kCostReductionOfMultiplexedRequests; + } // namespace features } // namespace blink
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index ec01d88..b5b9d19 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -7849,6 +7849,7 @@ BrowsingInstanceNotSwapped BackForwardCacheDisabledForDelegate OptInUnloadHeaderNotPresent + UnloadHandlerExistsInMainFrame UnloadHandlerExistsInSubFrame ServiceWorkerUnregistration CacheControlNoStore
diff --git a/third_party/blink/public/mojom/page/widget.mojom b/third_party/blink/public/mojom/page/widget.mojom index ef38117..9bc249f 100644 --- a/third_party/blink/public/mojom/page/widget.mojom +++ b/third_party/blink/public/mojom/page/widget.mojom
@@ -249,6 +249,14 @@ mojo_base.mojom.TextDirection text_direction_hint, gfx.mojom.Rect bounds); + // Sent by a widget to the browser to clear any keyboard-triggered tooltip. + // This is needed because a keyboard-triggered tooltip follows the focused + // element set by the user from a keypress, but the focus could change + // programmatically to another element. In such a case, because of this + // dependency on focus, we want to hide keyboard-triggered tooltips but not + // the cursor-triggered ones, which don't rely on focus. + ClearKeyboardTriggeredTooltip(); + // Sent when the text input state is changed. This usually happens when // a text input entry is focused. TextInputStateChanged(ui.mojom.TextInputState state);
diff --git a/third_party/blink/public/mojom/web_feature/web_feature.mojom b/third_party/blink/public/mojom/web_feature/web_feature.mojom index 7a473fc..a042ca7 100644 --- a/third_party/blink/public/mojom/web_feature/web_feature.mojom +++ b/third_party/blink/public/mojom/web_feature/web_feature.mojom
@@ -3315,6 +3315,7 @@ kCanvasRenderingContext2DFontKerning = 4004, kCanvasRenderingContext2DFontStretch = 4005, kCanvasRenderingContext2DTextRendering = 4006, + kCSSCascadeLayers = 4007, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc b/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc index 69711164..3a1cf177 100644 --- a/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc +++ b/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc
@@ -86,11 +86,6 @@ namespace { #if BUILDFLAG(USE_V8_OILPAN) -void ReportAtomicLatencyEvent(int64_t duration_us) { - UMA_HISTOGRAM_TIMES("V8.GC.Event.MainThread.Full.Atomic.Cpp", - base::TimeDelta::FromMicroseconds(duration_us)); -} - // Helper function to convert a byte count to a KB count, capping at // INT_MAX if the number is larger than that. constexpr int32_t CappedSizeInKB(int64_t size_in_bytes) { @@ -179,31 +174,30 @@ base::TimeDelta::FromMicroseconds( event.main_thread_cpp.sweep_wall_clock_duration_in_us)); - // Report latency metrics: + // Report atomic pause metrics: UMA_HISTOGRAM_TIMES( - "V8.GC.Event.MainThread.Full.Atomic.Mark.Cpp", + "V8.GC.Cycle.MainThread.Full.Atomic.Mark.Cpp", base::TimeDelta::FromMicroseconds( event.main_thread_atomic_cpp.mark_wall_clock_duration_in_us)); UMA_HISTOGRAM_TIMES( - "V8.GC.Event.MainThread.Full.Atomic.Weak.Cpp", + "V8.GC.Cycle.MainThread.Full.Atomic.Weak.Cpp", base::TimeDelta::FromMicroseconds( event.main_thread_atomic_cpp.weak_wall_clock_duration_in_us)); UMA_HISTOGRAM_TIMES( - "V8.GC.Event.MainThread.Full.Atomic.Compact.Cpp", + "V8.GC.Cycle.MainThread.Full.Atomic.Compact.Cpp", base::TimeDelta::FromMicroseconds( event.main_thread_atomic_cpp.compact_wall_clock_duration_in_us)); UMA_HISTOGRAM_TIMES( - "V8.GC.Event.MainThread.Full.Atomic.Sweep.Cpp", + "V8.GC.Cycle.MainThread.Full.Atomic.Sweep.Cpp", base::TimeDelta::FromMicroseconds( event.main_thread_atomic_cpp.sweep_wall_clock_duration_in_us)); - ReportAtomicLatencyEvent( - event.main_thread_atomic_cpp.mark_wall_clock_duration_in_us); - ReportAtomicLatencyEvent( - event.main_thread_atomic_cpp.weak_wall_clock_duration_in_us); - ReportAtomicLatencyEvent( - event.main_thread_atomic_cpp.compact_wall_clock_duration_in_us); - ReportAtomicLatencyEvent( - event.main_thread_atomic_cpp.sweep_wall_clock_duration_in_us); + UMA_HISTOGRAM_TIMES( + "V8.GC.Cycle.MainThread.Full.Atomic.Cpp", + base::TimeDelta::FromMicroseconds( + event.main_thread_atomic_cpp.mark_wall_clock_duration_in_us + + event.main_thread_atomic_cpp.weak_wall_clock_duration_in_us + + event.main_thread_atomic_cpp.compact_wall_clock_duration_in_us + + event.main_thread_atomic_cpp.sweep_wall_clock_duration_in_us)); // Report size metrics: static constexpr size_t kMinSize = 1;
diff --git a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc index 3af857e..d58b2611 100644 --- a/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc +++ b/third_party/blink/renderer/core/css/parser/css_at_rule_id.cc
@@ -70,8 +70,8 @@ feature = WebFeature::kCSSAtRuleKeyframes; break; case kCSSAtRuleLayer: - // TODO(crbug.com/1095765): Add use-counter. - return; + feature = WebFeature::kCSSCascadeLayers; + break; case kCSSAtRuleMedia: feature = WebFeature::kCSSAtRuleMedia; break;
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 e4d5855..f25ae053 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
@@ -733,6 +733,9 @@ layer = std::move(name); } } + + if (layer.size()) + context_->Count(WebFeature::kCSSCascadeLayers); } if (observer_) {
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc b/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc index 1c7e39d..c303df1a 100644 --- a/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc +++ b/third_party/blink/renderer/core/css/resolver/cascade_expansion.cc
@@ -137,6 +137,7 @@ priority_ = CascadePriority( matched_properties_.types_.origin, metadata.important_, matched_properties_.types_.tree_order, + matched_properties_.types_.layer_order, EncodeMatchResultPosition(matched_properties_index_, index_)); switch (id_) {
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc b/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc index 386ddb3..dfa4b02 100644 --- a/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc +++ b/third_party/blink/renderer/core/css/resolver/cascade_map_test.cc
@@ -13,13 +13,13 @@ namespace { CascadePriority UaPriority(wtf_size_t position) { - return CascadePriority(CascadeOrigin::kUserAgent, false, 0, position); + return CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, position); } CascadePriority UserPriority(wtf_size_t position) { - return CascadePriority(CascadeOrigin::kUser, false, 0, position); + return CascadePriority(CascadeOrigin::kUser, false, 0, 0, position); } CascadePriority AuthorPriority(wtf_size_t position) { - return CascadePriority(CascadeOrigin::kAuthor, false, 0, position); + return CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, position); } bool AddTo(CascadeMap& map,
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_priority.h b/third_party/blink/renderer/core/css/resolver/cascade_priority.h index afc32535..eb9bcc92 100644 --- a/third_party/blink/renderer/core/css/resolver/cascade_priority.h +++ b/third_party/blink/renderer/core/css/resolver/cascade_priority.h
@@ -17,18 +17,27 @@ // how that works. // // [1] https://www.w3.org/TR/css-cascade-3/#cascade-origin -inline uint64_t EncodeOriginImportance(CascadeOrigin origin, bool important) { +inline uint32_t EncodeOriginImportance(CascadeOrigin origin, bool important) { uint8_t important_xor = (static_cast<uint8_t>(!important) - 1) & 0xF; - return static_cast<uint64_t>(origin) ^ important_xor; + return static_cast<uint32_t>(origin) ^ important_xor; } // Tree order bits are flipped for important declarations to reverse the // priority [1]. // // [1] https://drafts.csswg.org/css-scoping/#shadow-cascading -inline uint64_t EncodeTreeOrder(uint16_t tree_order, bool important) { +inline uint32_t EncodeTreeOrder(uint16_t tree_order, bool important) { uint16_t important_xor = static_cast<uint16_t>(!important) - 1; - return static_cast<uint64_t>(tree_order) ^ important_xor; + return static_cast<uint32_t>(tree_order) ^ important_xor; +} + +// Layer order bits are flipped for important declarations to reverse the +// priority [1]. +// +// [1] https://drafts.csswg.org/css-cascade-5/#cascade-layering +inline uint64_t EncodeLayerOrder(uint16_t layer_order, bool important) { + uint16_t important_xor = static_cast<uint16_t>(!important) - 1; + return static_cast<uint64_t>(layer_order) ^ important_xor; } // The CascadePriority class encapsulates a subset of the cascading criteria @@ -37,69 +46,88 @@ // // It encompasses, from most significant to least significant: // Origin/importance; tree order, which is a number representing the -// shadow-including tree order [2]; position, which contains the index (or -// indices) required to lookup a declaration in the underlying structure (e.g. a -// MatchResult); and finally generation, which is a monotonically increasing -// number generated by StyleCascade for each call to StyleCascade::Apply. +// shadow-including tree order [2]; layer order, which is a number representing +// the cascade layer order in the origin and tree scope [3]; position, which +// contains the index (or indices) required to lookup a declaration in the +// underlying structure (e.g. a MatchResult); and finally generation, which is a +// monotonically increasing number generated by StyleCascade for each call to +// StyleCascade::Apply. // // [1] https://drafts.csswg.org/css-cascade/#cascading // [2] https://drafts.csswg.org/css-scoping/#shadow-cascading +// [3] https://drafts.csswg.org/css-cascade-5/#layer-ordering class CORE_EXPORT CascadePriority { public: // The declaration is important if this bit is set on the encoded priority. - static constexpr uint64_t kImportantBit = 55; - static constexpr uint64_t kOriginImportanceOffset = 52; - static constexpr uint64_t kTreeOrderOffset = 36; + static constexpr uint64_t kImportantBit = 19; // of high_bits_ + static constexpr uint64_t kOriginImportanceOffset = 16; // of high_bits_ + static constexpr uint64_t kLayerOrderOffset = 36; // of low_bits_ - CascadePriority() : bits_(0) {} + CascadePriority() : low_bits_(0), high_bits_(0) {} CascadePriority(CascadeOrigin origin) - : CascadePriority(origin, false, 0, 0) {} + : CascadePriority(origin, false, 0, 0, 0) {} CascadePriority(CascadeOrigin origin, bool important) - : CascadePriority(origin, important, 0, 0) {} + : CascadePriority(origin, important, 0, 0, 0) {} CascadePriority(CascadeOrigin origin, bool important, uint16_t tree_order) - : CascadePriority(origin, important, tree_order, 0) {} + : CascadePriority(origin, important, tree_order, 0, 0) {} + // For an explanation of 'tree_order', see css-scoping: // https://drafts.csswg.org/css-scoping/#shadow-cascading CascadePriority(CascadeOrigin origin, bool important, uint16_t tree_order, + uint16_t layer_order, uint32_t position) - : bits_(static_cast<uint64_t>(position) << 4 | - EncodeTreeOrder(tree_order, important) << kTreeOrderOffset | - EncodeOriginImportance(origin, important) - << kOriginImportanceOffset) {} + : low_bits_(static_cast<uint64_t>(position) << 4 | + EncodeLayerOrder(layer_order, important) + << kLayerOrderOffset), + high_bits_(EncodeTreeOrder(tree_order, important) | + EncodeOriginImportance(origin, important) + << kOriginImportanceOffset) {} // See StyleCascade.generation_. CascadePriority(CascadePriority o, uint8_t generation) - : bits_((o.bits_ & ~static_cast<uint8_t>(0xF)) | generation) { + : low_bits_((o.low_bits_ & ~static_cast<uint8_t>(0xF)) | generation), + high_bits_(o.high_bits_) { DCHECK_LE(generation, 0xF); } - bool IsImportant() const { return (bits_ >> kImportantBit) & 1; } + bool IsImportant() const { return (high_bits_ >> kImportantBit) & 1; } CascadeOrigin GetOrigin() const { - uint64_t important_xor = (((~bits_ >> kImportantBit) & 1) - 1) & 0xF; - return static_cast<CascadeOrigin>((bits_ >> kOriginImportanceOffset) ^ + uint64_t important_xor = (((~high_bits_ >> kImportantBit) & 1) - 1) & 0xF; + return static_cast<CascadeOrigin>((high_bits_ >> kOriginImportanceOffset) ^ important_xor); } bool HasOrigin() const { return GetOrigin() != CascadeOrigin::kNone; } - uint32_t GetPosition() const { return (bits_ >> 4) & 0xFFFFFFFF; } - uint8_t GetGeneration() const { return bits_ & 0xF; } + uint32_t GetPosition() const { return (low_bits_ >> 4) & 0xFFFFFFFF; } + uint8_t GetGeneration() const { return low_bits_ & 0xF; } - bool operator>=(const CascadePriority& o) const { return bits_ >= o.bits_; } - bool operator<(const CascadePriority& o) const { return bits_ < o.bits_; } - bool operator==(const CascadePriority& o) const { return bits_ == o.bits_; } - bool operator!=(const CascadePriority& o) const { return bits_ != o.bits_; } + bool operator>=(const CascadePriority& o) const { + return high_bits_ > o.high_bits_ || + (high_bits_ == o.high_bits_ && low_bits_ >= o.low_bits_); + } + bool operator<(const CascadePriority& o) const { + return high_bits_ < o.high_bits_ || + (high_bits_ == o.high_bits_ && low_bits_ < o.low_bits_); + } + bool operator==(const CascadePriority& o) const { + return high_bits_ == o.high_bits_ && low_bits_ == o.low_bits_; + } + bool operator!=(const CascadePriority& o) const { + return high_bits_ != o.high_bits_ || low_bits_ != o.low_bits_; + } private: friend class StyleCascade; friend class StyleCascadeTest; - CascadePriority(uint64_t bits) : bits_(bits) {} - // Bit 0-3 : generation // Bit 4-35: position - // Bit 36-51: tree_order (encoded) - // Bit 52-59: origin/importance (encoded) - uint64_t bits_; + // Bit 36-51: layer_order (encoded) + uint64_t low_bits_; + + // Bit 0-15: tree_order (encoded) + // Bit 16-23: origin/importance (encoded) + uint32_t high_bits_; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc b/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc index 5f60b780..56e8198 100644 --- a/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc +++ b/third_party/blink/renderer/core/css/resolver/cascade_priority_test.cc
@@ -10,12 +10,13 @@ namespace { CascadePriority AuthorPriority(uint16_t tree_order, uint32_t position) { - return CascadePriority(CascadeOrigin::kAuthor, false, tree_order, position); + return CascadePriority(CascadeOrigin::kAuthor, false, tree_order, 0, + position); } CascadePriority ImportantAuthorPriority(uint16_t tree_order, uint32_t position) { - return CascadePriority(CascadeOrigin::kAuthor, true, tree_order, position); + return CascadePriority(CascadeOrigin::kAuthor, true, tree_order, 0, position); } } // namespace @@ -34,12 +35,12 @@ TEST(CascadePriorityTest, OriginOperators) { std::vector<CascadePriority> priorities = { - CascadePriority(CascadeOrigin::kTransition, false, 0, 0), - CascadePriority(CascadeOrigin::kAnimation, false, 0, 0), - CascadePriority(CascadeOrigin::kAuthor, false, 0, 0), - CascadePriority(CascadeOrigin::kUser, false, 0, 0), - CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0), - CascadePriority(CascadeOrigin::kNone, false, 0, 0)}; + CascadePriority(CascadeOrigin::kTransition, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kAnimation, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kUser, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kNone, false, 0, 0, 0)}; for (size_t i = 0; i < priorities.size(); ++i) { for (size_t j = i; j < priorities.size(); ++j) { @@ -69,15 +70,15 @@ TEST(CascadePriorityTest, OriginImportance) { std::vector<CascadePriority> priorities = { - CascadePriority(CascadeOrigin::kTransition, false, 0, 0), - CascadePriority(CascadeOrigin::kUserAgent, true, 0, 0), - CascadePriority(CascadeOrigin::kUser, true, 0, 0), - CascadePriority(CascadeOrigin::kAuthor, true, 0, 0), - CascadePriority(CascadeOrigin::kAnimation, false, 0, 0), - CascadePriority(CascadeOrigin::kAuthor, false, 0, 0), - CascadePriority(CascadeOrigin::kUser, false, 0, 0), - CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0), - CascadePriority(CascadeOrigin::kNone, false, 0, 0)}; + CascadePriority(CascadeOrigin::kTransition, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kUserAgent, true, 0, 0, 0), + CascadePriority(CascadeOrigin::kUser, true, 0, 0, 0), + CascadePriority(CascadeOrigin::kAuthor, true, 0, 0, 0), + CascadePriority(CascadeOrigin::kAnimation, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kAuthor, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kUser, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kUserAgent, false, 0, 0, 0), + CascadePriority(CascadeOrigin::kNone, false, 0, 0, 0)}; for (size_t i = 0; i < priorities.size(); ++i) { for (size_t j = i; j < priorities.size(); ++j) @@ -89,19 +90,20 @@ using Priority = CascadePriority; using Origin = CascadeOrigin; - EXPECT_FALSE(Priority(Origin::kUserAgent, false, 0, 0).IsImportant()); - EXPECT_FALSE(Priority(Origin::kUser, false, 0, 0).IsImportant()); - EXPECT_FALSE(Priority(Origin::kAuthor, false, 0, 0).IsImportant()); - EXPECT_FALSE(Priority(Origin::kAnimation, false, 0, 0).IsImportant()); - EXPECT_FALSE(Priority(Origin::kTransition, false, 0, 0).IsImportant()); - EXPECT_FALSE(Priority(Origin::kAuthor, false, 1024, 2048).IsImportant()); + EXPECT_FALSE(Priority(Origin::kUserAgent, false, 0, 0, 0).IsImportant()); + EXPECT_FALSE(Priority(Origin::kUser, false, 0, 0, 0).IsImportant()); + EXPECT_FALSE(Priority(Origin::kAuthor, false, 0, 0, 0).IsImportant()); + EXPECT_FALSE(Priority(Origin::kAnimation, false, 0, 0, 0).IsImportant()); + EXPECT_FALSE(Priority(Origin::kTransition, false, 0, 0, 0).IsImportant()); + EXPECT_FALSE( + Priority(Origin::kAuthor, false, 1024, 2048, 4096).IsImportant()); - EXPECT_TRUE(Priority(Origin::kUserAgent, true, 0, 0).IsImportant()); - EXPECT_TRUE(Priority(Origin::kUser, true, 0, 0).IsImportant()); - EXPECT_TRUE(Priority(Origin::kAuthor, true, 0, 0).IsImportant()); - EXPECT_TRUE(Priority(Origin::kAnimation, true, 0, 0).IsImportant()); - EXPECT_TRUE(Priority(Origin::kTransition, true, 0, 0).IsImportant()); - EXPECT_TRUE(Priority(Origin::kAuthor, true, 1024, 2048).IsImportant()); + EXPECT_TRUE(Priority(Origin::kUserAgent, true, 0, 0, 0).IsImportant()); + EXPECT_TRUE(Priority(Origin::kUser, true, 0, 0, 0).IsImportant()); + EXPECT_TRUE(Priority(Origin::kAuthor, true, 0, 0, 0).IsImportant()); + EXPECT_TRUE(Priority(Origin::kAnimation, true, 0, 0, 0).IsImportant()); + EXPECT_TRUE(Priority(Origin::kTransition, true, 0, 0, 0).IsImportant()); + EXPECT_TRUE(Priority(Origin::kAuthor, true, 1024, 2048, 4096).IsImportant()); } static std::vector<CascadeOrigin> all_origins = { @@ -110,14 +112,14 @@ TEST(CascadePriorityTest, GetOrigin) { for (CascadeOrigin origin : all_origins) - EXPECT_EQ(CascadePriority(origin, false, 0, 0).GetOrigin(), origin); + EXPECT_EQ(CascadePriority(origin, false, 0, 0, 0).GetOrigin(), origin); for (CascadeOrigin origin : all_origins) { if (origin == CascadeOrigin::kAnimation) continue; if (origin == CascadeOrigin::kTransition) continue; - EXPECT_EQ(CascadePriority(origin, true, 0, 0).GetOrigin(), origin); + EXPECT_EQ(CascadePriority(origin, true, 0, 0, 0).GetOrigin(), origin); } } @@ -246,4 +248,50 @@ } while (pos != ~static_cast<uint32_t>(1) << 31); } +TEST(CascadePriorityTest, EncodeLayerOrder) { + EXPECT_EQ(0ull, EncodeLayerOrder(0, false)); + EXPECT_EQ(1ull, EncodeLayerOrder(1, false)); + EXPECT_EQ(2ull, EncodeLayerOrder(2, false)); + EXPECT_EQ(100ull, EncodeLayerOrder(100, false)); + EXPECT_EQ(0xFFFFull, EncodeLayerOrder(0xFFFF, false)); + + EXPECT_EQ(0ull ^ 0xFFFF, EncodeLayerOrder(0, true)); + EXPECT_EQ(1ull ^ 0xFFFF, EncodeLayerOrder(1, true)); + EXPECT_EQ(2ull ^ 0xFFFF, EncodeLayerOrder(2, true)); + EXPECT_EQ(100ull ^ 0xFFFF, EncodeLayerOrder(100, true)); + EXPECT_EQ(0xFFFFull ^ 0xFFFF, EncodeLayerOrder(0xFFFF, true)); +} + +TEST(CascadePriorityTest, LayerOrder) { + using Priority = CascadePriority; + CascadeOrigin origin = CascadeOrigin::kAuthor; + EXPECT_GE(Priority(origin, false, 0, 1, 0), Priority(origin, false, 0, 0, 0)); + EXPECT_GE(Priority(origin, false, 0, 7, 0), Priority(origin, false, 0, 6, 0)); + EXPECT_GE(Priority(origin, false, 0, 42, 0), + Priority(origin, false, 0, 42, 0)); + EXPECT_FALSE(Priority(origin, false, 0, 1, 0) >= + Priority(origin, false, 0, 8, 0)); +} + +TEST(CascadePriorityTest, LayerOrderImportant) { + using Priority = CascadePriority; + CascadeOrigin origin = CascadeOrigin::kAuthor; + EXPECT_GE(Priority(origin, true, 0, 0, 0), Priority(origin, true, 0, 1, 0)); + EXPECT_GE(Priority(origin, true, 0, 6, 0), Priority(origin, true, 0, 7, 0)); + EXPECT_GE(Priority(origin, true, 0, 42, 0), Priority(origin, true, 0, 42, 0)); + EXPECT_FALSE(Priority(origin, true, 0, 8, 0) >= + Priority(origin, true, 0, 1, 0)); +} + +TEST(CascadePriorityTest, LayerOrderDifferentOrigin) { + using Priority = CascadePriority; + // Layer order does not matter if the origin is different. + CascadeOrigin author = CascadeOrigin::kAuthor; + CascadeOrigin transition = CascadeOrigin::kTransition; + EXPECT_GE(Priority(transition, false, 0, 1, 0), + Priority(author, false, 0, 42, 0)); + EXPECT_GE(Priority(transition, false, 0, 1, 0), + Priority(author, false, 0, 1, 0)); +} + } // namespace blink
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 ec3aaa1..95dad62 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -323,7 +323,7 @@ auto name = active_interpolation.key.GetCSSPropertyName(); uint32_t position = EncodeInterpolationPosition( name.Id(), i, active_interpolation.key.IsPresentationAttribute()); - CascadePriority priority(entries[i].origin, false, 0, position); + CascadePriority priority(entries[i].origin, false, 0, 0, position); CSSPropertyRef ref(name, GetDocument()); DCHECK(ref.IsValid()); @@ -454,7 +454,7 @@ auto name = entry.key.GetCSSPropertyName(); uint32_t position = EncodeInterpolationPosition( name.Id(), index, entry.key.IsPresentationAttribute()); - CascadePriority priority(origin, false, 0, position); + CascadePriority priority(origin, false, 0, 0, position); priority = CascadePriority(priority, resolver.generation_); CSSPropertyRef ref(name, GetDocument());
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc index e0877ca..619c4d4 100644 --- a/third_party/blink/renderer/core/css/style_engine_test.cc +++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -4221,6 +4221,7 @@ // We don't create CascadeLayerMap if no layers are explicitly declared. ASSERT_TRUE(GetDocument().GetScopedStyleResolver()); ASSERT_FALSE(GetDocument().GetScopedStyleResolver()->GetCascadeLayerMap()); + EXPECT_FALSE(IsUseCounted(WebFeature::kCSSCascadeLayers)); } TEST_F(StyleEngineTest, CascadeLayersSheetsRemoved) { @@ -4306,4 +4307,30 @@ new_style->VisitedDependentColor(GetCSSPropertyColor())); } +TEST_F(StyleEngineTest, CascadeLayerUseCount) { + ScopedCSSCascadeLayersForTest enabled_scope(true); + + { + ASSERT_FALSE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + GetDocument().body()->setInnerHTML("<style>@layer foo;</style>"); + EXPECT_TRUE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + ClearUseCounter(WebFeature::kCSSCascadeLayers); + } + + { + ASSERT_FALSE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + GetDocument().body()->setInnerHTML("<style>@layer foo { }</style>"); + EXPECT_TRUE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + ClearUseCounter(WebFeature::kCSSCascadeLayers); + } + + { + ASSERT_FALSE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + GetDocument().body()->setInnerHTML( + "<style>@import url(foo.css) layer(foo);</style>"); + EXPECT_TRUE(IsUseCounted(WebFeature::kCSSCascadeLayers)); + ClearUseCounter(WebFeature::kCSSCascadeLayers); + } +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index d85ec41..e9c026b 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -4170,8 +4170,11 @@ break; } - if (is_focused_from_keypress) + if (is_focused_from_keypress) { chrome_client.ElementFocusedFromKeypress(*GetDocument().GetFrame(), this); + } else { + chrome_client.ClearKeyboardTriggeredTooltip(*GetDocument().GetFrame()); + } } } @@ -4241,6 +4244,8 @@ if (doc.GetPage()) { doc.GetPage()->GetFocusController().SetFocusedElement(nullptr, doc.GetFrame()); + doc.GetPage()->GetChromeClient().ClearKeyboardTriggeredTooltip( + *doc.GetFrame()); } else { doc.ClearFocusedElement(); }
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 b5188f0..698b9348 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
@@ -1484,13 +1484,10 @@ Node* node = start.AnchorNode(); while (node) { Node* next_to_process = nullptr; - if (EditingIgnoresContent(*node)) { - DCHECK(node == end.AnchorNode() || !node->contains(end.AnchorNode())) - << node << " " << end; - next_to_process = NodeTraversal::NextSkippingChildren(*node); - } else { + if (!EditingIgnoresContent(*node)) next_to_process = NodeTraversal::Next(*node); - } + else if (!node->contains(end.AnchorNode())) + next_to_process = NodeTraversal::NextSkippingChildren(*node); auto* elem = DynamicTo<HTMLElement>(node); if (elem && ElementFullySelected(*elem, start, end)) { Node* prev = NodeTraversal::PreviousPostOrder(*elem);
diff --git a/third_party/blink/renderer/core/editing/commands/apply_style_command_test.cc b/third_party/blink/renderer/core/editing/commands/apply_style_command_test.cc index 6d9a8d8..0ebaf19a 100644 --- a/third_party/blink/renderer/core/editing/commands/apply_style_command_test.cc +++ b/third_party/blink/renderer/core/editing/commands/apply_style_command_test.cc
@@ -4,9 +4,11 @@ #include "third_party/blink/renderer/core/editing/commands/apply_style_command.h" +#include "build/build_config.h" #include "third_party/blink/renderer/core/css/css_property_value_set.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/editing/editing_style.h" +#include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/frame_selection.h" #include "third_party/blink/renderer/core/editing/selection_template.h" #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h" @@ -169,4 +171,40 @@ ->Apply(); EXPECT_EQ("^a|", GetSelectionTextFromBody()); } + +// This is a regression test for https://crbug.com/1239729 +TEST_F(ApplyStyleCommandTest, ItalicCrossingIgnoredContentBoundary) { + GetDocument().setDesignMode("on"); + SetBodyContent("a<select multiple><option></option></select>b"); + + Element* body = GetDocument().body(); + Element* select = GetDocument().QuerySelector("select"); + Element* option = GetDocument().QuerySelector("option"); + EXPECT_FALSE(EditingIgnoresContent(*body)); + EXPECT_TRUE(EditingIgnoresContent(*select)); + EXPECT_FALSE(EditingIgnoresContent(*option)); + + Selection().SetSelection(SelectionInDOMTree::Builder() + .Collapse(Position(body, 0)) + .Extend(Position(option, 0)) + .Build(), + SetSelectionOptions()); + + auto* style = MakeGarbageCollected<MutableCSSPropertyValueSet>(kUASheetMode); + style->SetProperty(CSSPropertyID::kFontStyle, "italic", + /* important */ false, + GetFrame().DomWindow()->GetSecureContextMode()); + MakeGarbageCollected<ApplyStyleCommand>( + GetDocument(), MakeGarbageCollected<EditingStyle>(style), + InputEvent::InputType::kFormatItalic) + ->Apply(); + +#if defined(OS_ANDROID) + EXPECT_EQ("|a<select multiple><option></option></select>b", + GetSelectionTextFromBody()); +#else + EXPECT_EQ("<i>^a<select multiple><option>|</option></select></i>b", + GetSelectionTextFromBody()); +#endif +} } // namespace blink
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.h b/third_party/blink/renderer/core/editing/editing_utilities.h index 5d683af..7ff2288f 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.h +++ b/third_party/blink/renderer/core/editing/editing_utilities.h
@@ -151,7 +151,7 @@ // Returns true for nodes that either have no content, or have content that is // ignored (skipped over) while editing. There are no VisiblePositions inside // these nodes. -bool EditingIgnoresContent(const Node&); +CORE_EXPORT bool EditingIgnoresContent(const Node&); inline bool CanHaveChildrenForEditing(const Node* node) { return !node->IsTextNode() && node->CanContainRangeEndPoint();
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc index 387f326..00a8e0a 100644 --- a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc +++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -259,6 +259,10 @@ popup_->widget_base_->UpdateTooltipFromKeyboard(tooltip_text, dir, bounds); } + void ClearKeyboardTriggeredTooltip(LocalFrame&) override { + popup_->widget_base_->ClearKeyboardTriggeredTooltip(); + } + void InjectGestureScrollEvent(LocalFrame& local_frame, WebGestureDevice device, const gfx::Vector2dF& delta,
diff --git a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc index f53700a7..63f9039 100644 --- a/third_party/blink/renderer/core/fetch/body_stream_buffer.cc +++ b/third_party/blink/renderer/core/fetch/body_stream_buffer.cc
@@ -228,7 +228,6 @@ ExceptionState& exception_state) { DCHECK(!loader_); DCHECK(script_state_->ContextIsValid()); - loader_ = loader; if (signal_) { if (signal_->aborted()) { client->Abort(); @@ -237,6 +236,7 @@ signal_->AddAlgorithm( WTF::Bind(&FetchDataLoader::Client::Abort, WrapWeakPersistent(client))); } + loader_ = loader; auto* handle = ReleaseHandle(exception_state); if (exception_state.HadException()) return;
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.cc b/third_party/blink/renderer/core/frame/frame_test_helpers.cc index cbb7547f..de3564a 100644 --- a/third_party/blink/renderer/core/frame/frame_test_helpers.cc +++ b/third_party/blink/renderer/core/frame/frame_test_helpers.cc
@@ -867,6 +867,8 @@ base::i18n::TextDirection text_direction_hint, const gfx::Rect& bounds) {} +void TestWebFrameWidgetHost::ClearKeyboardTriggeredTooltip() {} + void TestWebFrameWidgetHost::TextInputStateChanged( ui::mojom::blink::TextInputStatePtr state) { if (state->show_ime_if_needed)
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.h b/third_party/blink/renderer/core/frame/frame_test_helpers.h index 5673bda..e438d034 100644 --- a/third_party/blink/renderer/core/frame/frame_test_helpers.h +++ b/third_party/blink/renderer/core/frame/frame_test_helpers.h
@@ -190,6 +190,7 @@ void UpdateTooltipFromKeyboard(const String& tooltip_text, base::i18n::TextDirection text_direction_hint, const gfx::Rect& bounds) override; + void ClearKeyboardTriggeredTooltip() override; void TextInputStateChanged( ui::mojom::blink::TextInputStatePtr state) override; void SelectionBoundsChanged(const gfx::Rect& anchor_rect,
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc index eeec156..073c950 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.cc
@@ -65,6 +65,7 @@ #include "third_party/blink/renderer/core/editing/ephemeral_range.h" #include "third_party/blink/renderer/core/editing/frame_selection.h" #include "third_party/blink/renderer/core/events/current_input_event.h" +#include "third_party/blink/renderer/core/events/pointer_event_factory.h" #include "third_party/blink/renderer/core/events/web_input_event_conversion.h" #include "third_party/blink/renderer/core/events/wheel_event.h" #include "third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h" @@ -783,6 +784,7 @@ WebMouseEvent transformed_event = TransformWebMouseEvent(LocalRootImpl()->GetFrameView(), event); transformed_event.menu_source_type = kMenuSourceMouse; + transformed_event.id = PointerEventFactory::kMouseId; // Find the right target frame. See issue 1186900. HitTestResult result = HitTestResultForRootFramePos( @@ -3127,6 +3129,10 @@ widget_base_->UpdateTooltipFromKeyboard(tooltip_text, dir, bounds); } +void WebFrameWidgetImpl::ClearKeyboardTriggeredTooltip() { + widget_base_->ClearKeyboardTriggeredTooltip(); +} + void WebFrameWidgetImpl::DidOverscroll( const gfx::Vector2dF& overscroll_delta, const gfx::Vector2dF& accumulated_overscroll,
diff --git a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h index 7ccca2f..96749556 100644 --- a/third_party/blink/renderer/core/frame/web_frame_widget_impl.h +++ b/third_party/blink/renderer/core/frame/web_frame_widget_impl.h
@@ -504,6 +504,7 @@ void UpdateTooltipFromKeyboard(const String& tooltip_text, TextDirection dir, const gfx::Rect& bounds); + void ClearKeyboardTriggeredTooltip(); void ShowVirtualKeyboardOnElementFocus(); void ProcessTouchAction(WebTouchAction touch_action);
diff --git a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc index b9d66c68..b02a365 100644 --- a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc +++ b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.cc
@@ -35,6 +35,7 @@ #include "base/containers/span.h" #include "third_party/blink/renderer/bindings/core/v8/scheduled_action.h" #include "third_party/blink/renderer/bindings/core/v8/v8_gc_for_context_dispose.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_script_runner.h" #include "third_party/blink/renderer/core/dom/events/event_target.h" #include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/frame/csp/content_security_policy.h" @@ -90,6 +91,12 @@ return false; } +void WindowOrWorkerGlobalScope::reportError(ScriptState* script_state, + EventTarget& event_target, + const ScriptValue& e) { + V8ScriptRunner::ReportException(script_state->GetIsolate(), e.V8Value()); +} + String WindowOrWorkerGlobalScope::btoa(EventTarget&, const String& string_to_encode, ExceptionState& exception_state) {
diff --git a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h index 3a1d93b..ab3d02b 100644 --- a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h +++ b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.h
@@ -52,6 +52,8 @@ STATIC_ONLY(WindowOrWorkerGlobalScope); public: + static void reportError(ScriptState*, EventTarget&, const ScriptValue&); + static String btoa(EventTarget&, const String& string_to_encode, ExceptionState&);
diff --git a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl index 5ad3584..8030b58 100644 --- a/third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl +++ b/third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl
@@ -31,6 +31,8 @@ LegacyTreatAsPartialInterface, Exposed=(Window,Worker) ] interface mixin WindowOrWorkerGlobalScope { + [CallWith=ScriptState] void reportError(any e); + // base64 utility methods [RaisesException] DOMString btoa(DOMString btoa); [RaisesException] DOMString atob(DOMString atob);
diff --git a/third_party/blink/renderer/core/input/event_handler.cc b/third_party/blink/renderer/core/input/event_handler.cc index 2ce5154..2090ac8 100644 --- a/third_party/blink/renderer/core/input/event_handler.cc +++ b/third_party/blink/renderer/core/input/event_handler.cc
@@ -56,6 +56,7 @@ #include "third_party/blink/renderer/core/events/keyboard_event.h" #include "third_party/blink/renderer/core/events/mouse_event.h" #include "third_party/blink/renderer/core/events/pointer_event.h" +#include "third_party/blink/renderer/core/events/pointer_event_factory.h" #include "third_party/blink/renderer/core/events/text_event.h" #include "third_party/blink/renderer/core/events/touch_event.h" #include "third_party/blink/renderer/core/frame/deprecation.h" @@ -2086,7 +2087,10 @@ return mouse_event_manager_->DispatchMouseEvent( EffectiveMouseEventTargetElement(target_element), event_type_names::kContextmenu, event, - mev.GetHitTestResult().CanvasRegionId(), nullptr, nullptr); + mev.GetHitTestResult().CanvasRegionId(), nullptr, nullptr, false, + event.id, + PointerEventFactory::PointerTypeNameForWebPointPointerType( + event.pointer_type)); } static bool ShouldShowContextMenuAtSelection(const FrameSelection& selection) { @@ -2212,6 +2216,7 @@ gfx::PointF(global_position.X(), global_position.Y()), WebPointerProperties::Button::kNoButton, /* clickCount */ 0, WebInputEvent::kNoModifiers, base::TimeTicks::Now(), source_type); + mouse_event.id = PointerEventFactory::kMouseId; // TODO(dtapuska): Transition the mouseEvent to be created really in viewport // coordinates instead of root frame coordinates.
diff --git a/third_party/blink/renderer/core/input/event_handler_test.cc b/third_party/blink/renderer/core/input/event_handler_test.cc index 17813a50..dfae25f 100644 --- a/third_party/blink/renderer/core/input/event_handler_test.cc +++ b/third_party/blink/renderer/core/input/event_handler_test.cc
@@ -1081,6 +1081,7 @@ last_tooltip_text_ = str; // Always reset the bounds to zero as this function doesn't set bounds. last_tooltip_bounds_ = gfx::Rect(); + triggered_from_cursor_ = true; } void UpdateTooltipFromKeyboard(LocalFrame&, @@ -1089,6 +1090,15 @@ const gfx::Rect& bounds) override { last_tooltip_text_ = str; last_tooltip_bounds_ = bounds; + triggered_from_cursor_ = false; + } + + void ClearKeyboardTriggeredTooltip(LocalFrame&) override { + if (triggered_from_cursor_) + return; + + last_tooltip_text_ = String(); + last_tooltip_bounds_ = gfx::Rect(); } void ResetTooltip() { @@ -1102,6 +1112,7 @@ private: String last_tooltip_text_; gfx::Rect last_tooltip_bounds_; + bool triggered_from_cursor_ = false; }; class EventHandlerTooltipTest : public EventHandlerTest { @@ -1347,6 +1358,98 @@ EXPECT_TRUE(LastToolTipText().IsNull()); } +// macOS doesn't have keyboard-triggered tooltips. +#if defined(OS_MAC) +#define MAYBE_FocusSetFromScriptClearsKeyboardTriggeredTooltip \ + DISABLED_FocusSetFromScriptClearsKeyboardTriggeredTooltip +#else +#define MAYBE_FocusSetFromScriptClearsKeyboardTriggeredTooltip \ + FocusSetFromScriptClearsKeyboardTriggeredTooltip +#endif +// Moving the focus programmatically to an element that doesn't have a title +// attribute set while the user previously set the focus from keyboard on an +// element with a title text should hide the tooltip. +TEST_F(EventHandlerTooltipTest, + MAYBE_FocusSetFromScriptClearsKeyboardTriggeredTooltip) { + SetHtmlInnerHTML( + R"HTML( + <button id='b1' title='my tooltip 1'>button 1</button> + <button id='b2'>button 2</button> + )HTML"); + + // First, show a keyboard-triggered tooltip using the 'tab' key. + WebKeyboardEvent e{WebInputEvent::Type::kRawKeyDown, + WebInputEvent::kNoModifiers, + WebInputEvent::GetStaticTimeStampForTests()}; + e.dom_code = static_cast<int>(ui::DomCode::TAB); + e.dom_key = ui::DomKey::TAB; + GetDocument().GetFrame()->GetEventHandler().KeyEvent(e); + + Element* element = GetDocument().getElementById("b1"); + EXPECT_EQ("my tooltip 1", LastToolTipText()); + EXPECT_EQ(element->BoundsInViewport(), LastToolTipBounds()); + + // Validate that blurring an element that is not focused will not just hide + // the tooltip. It wouldn't make sense. + element = GetDocument().getElementById("b2"); + element->blur(); + + EXPECT_EQ("my tooltip 1", LastToolTipText()); + EXPECT_EQ(GetDocument().getElementById("b1")->BoundsInViewport(), + LastToolTipBounds()); + + // Then, programmatically move the focus to another button that has no title + // text. This should hide the tooltip. + element->focus(); + + EXPECT_TRUE(LastToolTipText().IsNull()); + EXPECT_EQ(gfx::Rect(), LastToolTipBounds()); + + // Move the focus on the first button again and validate that it trigger a + // tooltip again. + GetDocument().GetFrame()->GetEventHandler().KeyEvent(e); + + element = GetDocument().getElementById("b1"); + EXPECT_EQ("my tooltip 1", LastToolTipText()); + EXPECT_EQ(element->BoundsInViewport(), LastToolTipBounds()); + + // Then, programmatically blur the button to validate that the tooltip gets + // hidden. + element->blur(); + + EXPECT_TRUE(LastToolTipText().IsNull()); + EXPECT_EQ(gfx::Rect(), LastToolTipBounds()); +} + +// Moving the focus programmatically while a cursor-triggered tooltip is visible +// shouldn't hide the visible tooltip. +TEST_F(EventHandlerTooltipTest, + FocusSetFromScriptDoesntClearCursorTriggeredTooltip) { + SetHtmlInnerHTML( + R"HTML( + <style>.box { width: 100px; height: 100px; }</style> + <img src='image.png' class='box' title='tooltip'>link</img> + + <button id='b2'>button 2</button> + )HTML"); + // First, show a cursor-triggered tooltip. + WebMouseEvent mouse_move_event( + WebInputEvent::Type::kMouseMove, gfx::PointF(51, 50), gfx::PointF(51, 50), + WebPointerProperties::Button::kNoButton, 0, WebInputEvent::kNoModifiers, + base::TimeTicks::Now()); + mouse_move_event.SetFrameScale(1); + GetDocument().GetFrame()->GetEventHandler().HandleMouseMoveEvent( + mouse_move_event, Vector<WebMouseEvent>(), Vector<WebMouseEvent>()); + + EXPECT_EQ("tooltip", LastToolTipText()); + + // Then, programmatically move the focus to another element. + Element* element = GetDocument().getElementById("b2"); + element->focus(); + + EXPECT_EQ("tooltip", LastToolTipText()); +} + class UnbufferedInputEventsTrackingChromeClient : public EmptyChromeClient { public: UnbufferedInputEventsTrackingChromeClient() = default;
diff --git a/third_party/blink/renderer/core/input/gesture_manager.cc b/third_party/blink/renderer/core/input/gesture_manager.cc index fb6b2c1..43751ca6 100644 --- a/third_party/blink/renderer/core/input/gesture_manager.cc +++ b/third_party/blink/renderer/core/input/gesture_manager.cc
@@ -317,23 +317,7 @@ Node* click_target_node = current_hit_test.InnerNode()->CommonAncestor( *tapped_element, event_handling_util::ParentForClickEvent); auto* click_target_element = DynamicTo<Element>(click_target_node); - // When tests send GestureTap directly (e.g. from eventSender) there is no - // primary_unique_touch_event_id populated. - if (gesture_event.primary_unique_touch_event_id != 0) { - // If everything works correctly, the first touch id, pointer id pair - // in the deque is the one we are interested in. - if (!recent_pointerdown_pointer_ids_.empty()) { - if (gesture_event.primary_unique_touch_event_id == - recent_pointerdown_pointer_ids_.front().first) { - fake_mouse_up.id = recent_pointerdown_pointer_ids_.front().second; - } else { - // Getting here means either we saw no pointerdown for the gesture, - // or that the gestures were not generated in order resulting in - // prematurely clearing pointerdown id in HandleGestureEventInFrame. - NOTREACHED(); - } - } - } + fake_mouse_up.id = GetPointerIdFromWebGestureEvent(gesture_event); fake_mouse_up.pointer_type = gesture_event.primary_pointer_type; click_event_result = mouse_event_manager_->SetMousePositionAndDispatchMouseEvent( @@ -512,6 +496,8 @@ ->GetInputDeviceCapabilities() ->FiresTouchEvents(true)); } + mouse_event.id = GetPointerIdFromWebGestureEvent(gesture_event); + mouse_event.pointer_type = gesture_event.primary_pointer_type; return frame_->GetEventHandler().SendContextMenuEvent(mouse_event); } @@ -592,4 +578,27 @@ {web_pointer_event.unique_touch_event_id, pointer_id}); } +PointerId GestureManager::GetPointerIdFromWebGestureEvent( + const WebGestureEvent& gesture_event) const { + // When tests send Tap, LongTap, LongPress, TwoFingerTap directly + // (e.g. from eventSender) there is no primary_unique_touch_event_id + // populated. + if (gesture_event.primary_unique_touch_event_id == 0) + return PointerEventFactory::kInvalidId; + // TODO(crbug.com/1244085): Look into why pointerdown event is not sent + // in some tests even though pointerup event is sent. + // Return kInvalidId if we saw no pointerdown for the gesture sequence. + if (recent_pointerdown_pointer_ids_.empty()) + return PointerEventFactory::kInvalidId; + // If everything works correctly, the first touch id, pointer id pair + // in the deque is the one we are interested in. + if (gesture_event.primary_unique_touch_event_id == + recent_pointerdown_pointer_ids_.front().first) + return recent_pointerdown_pointer_ids_.front().second; + // Getting here means either we saw no pointerdown for the gesture, + // or that the gestures were not generated in order resulting in + // prematurely clearing pointerdown id in HandleGestureEventInFrame. + NOTREACHED(); + return PointerEventFactory::kInvalidId; +} } // namespace blink
diff --git a/third_party/blink/renderer/core/input/gesture_manager.h b/third_party/blink/renderer/core/input/gesture_manager.h index 523b2b0..05b2b34 100644 --- a/third_party/blink/renderer/core/input/gesture_manager.h +++ b/third_party/blink/renderer/core/input/gesture_manager.h
@@ -83,6 +83,13 @@ Node* tapped_node, Element* tapped_element, const IntPoint& tapped_position_in_viewport); + // Returns the pointerId associated with the pointerevent sequence + // generated by the gesture sequence of which gesture_event + // is part of or PointerEventFactory::kInvalidId in case there is no + // pointerId associated. This method expects that gesture_event is the + // most recently handled WebGestureEvent. + PointerId GetPointerIdFromWebGestureEvent( + const WebGestureEvent& gesture_event) const; // NOTE: If adding a new field to this class please ensure that it is // cleared if needed in |GestureManager::clear()|.
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h index 65356d0..0a4a0b8 100644 --- a/third_party/blink/renderer/core/loader/empty_clients.h +++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -192,6 +192,7 @@ const String&, TextDirection, const gfx::Rect&) override {} + void ClearKeyboardTriggeredTooltip(LocalFrame&) override {} void PrintDelegate(LocalFrame*) override {} ColorChooser* OpenColorChooser(LocalFrame*, ColorChooserClient*,
diff --git a/third_party/blink/renderer/core/page/chrome_client.h b/third_party/blink/renderer/core/page/chrome_client.h index 92655e7..4d97de61 100644 --- a/third_party/blink/renderer/core/page/chrome_client.h +++ b/third_party/blink/renderer/core/page/chrome_client.h
@@ -362,6 +362,7 @@ const String&, TextDirection, const gfx::Rect&) = 0; + virtual void ClearKeyboardTriggeredTooltip(LocalFrame&) = 0; void ClearToolTip(LocalFrame&); String GetLastToolTipTextForTesting() { return current_tool_tip_text_for_test_;
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.cc b/third_party/blink/renderer/core/page/chrome_client_impl.cc index fdeb0ffd..724a67a 100644 --- a/third_party/blink/renderer/core/page/chrome_client_impl.cc +++ b/third_party/blink/renderer/core/page/chrome_client_impl.cc
@@ -592,6 +592,15 @@ ->UpdateTooltipFromKeyboard(tooltip_text, dir, bounds); } +void ChromeClientImpl::ClearKeyboardTriggeredTooltip(LocalFrame& frame) { + if (!RuntimeEnabledFeatures::KeyboardAccessibleTooltipEnabled()) + return; + + WebLocalFrameImpl::FromFrame(frame) + ->LocalRootFrameWidget() + ->ClearKeyboardTriggeredTooltip(); +} + void ChromeClientImpl::DispatchViewportPropertiesDidChange( const ViewportDescription& description) const { web_view_->UpdatePageDefinedViewportConstraints(description);
diff --git a/third_party/blink/renderer/core/page/chrome_client_impl.h b/third_party/blink/renderer/core/page/chrome_client_impl.h index 503e83a..4fd521a 100644 --- a/third_party/blink/renderer/core/page/chrome_client_impl.h +++ b/third_party/blink/renderer/core/page/chrome_client_impl.h
@@ -160,6 +160,7 @@ const String&, TextDirection, const gfx::Rect&) override; + void ClearKeyboardTriggeredTooltip(LocalFrame&) override; void DispatchViewportPropertiesDidChange( const ViewportDescription&) const override; void PrintDelegate(LocalFrame*) override;
diff --git a/third_party/blink/renderer/core/script/detect_javascript_frameworks.cc b/third_party/blink/renderer/core/script/detect_javascript_frameworks.cc index 208a0d4f..c445d60 100644 --- a/third_party/blink/renderer/core/script/detect_javascript_frameworks.cc +++ b/third_party/blink/renderer/core/script/detect_javascript_frameworks.cc
@@ -236,7 +236,7 @@ ScriptState::Scope scope(script_state); v8::Local<v8::Context> context = script_state->GetContext(); - if (base::FeatureList::IsEnabled(features::kReportAllJavascriptFrameworks)) { + if (base::FeatureList::IsEnabled(features::kReportAllJavaScriptFrameworks)) { TraverseTreeForFrameworks(document, context); } else { CheckForGatsby(document, context);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc index a53a21ed..8ef82de 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -3178,11 +3178,13 @@ // node, so we cannot use a DOM traversal. In this case, we can traverse the // children of the accessible object directly, because CSS ::before and // ::after do generate accessibility nodes. - // TODO(accessibility): We explicitly exclude marker pseudo elements here - // because Chrome was traditionally not including them, but it's actually - // undefined behavior. We will have to revisit after this is settled, see: - // https://github.com/w3c/accname/issues/76 - if (GetElement() && GetElement()->GetPseudoId() != kPseudoIdMarker) { + // We include only ::before and ::after pseudo elements, because these are + // the only ones explicitly specified in the accname spec. + // TODO(accessibility): Chrome has never included markers, but that's + // actually undefined behavior. We will have to revisit after this is + // settled, see: https://github.com/w3c/accname/issues/76 + if (GetElement() && (GetElement()->GetPseudoId() == kPseudoIdBefore || + GetElement()->GetPseudoId() == kPseudoIdAfter)) { for (const auto& child : ChildrenIncludingIgnored()) children.push_back(child); }
diff --git a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc index b23bf2b..3cd679d0 100644 --- a/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc +++ b/third_party/blink/renderer/modules/credentialmanager/credentials_container.cc
@@ -917,7 +917,9 @@ "creating a credential")); return promise; } - if (options->publicKey()->extensions()->hasPayment()) { + if (RuntimeEnabledFeatures::SecurePaymentConfirmationEnabled( + resolver->GetExecutionContext()) && + options->publicKey()->extensions()->hasPayment()) { resolver->Reject(MakeGarbageCollected<DOMException>( DOMExceptionCode::kNotSupportedError, "The 'payment' extension is only valid when creating a "
diff --git a/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.cc b/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.cc index 1358eaa7..f960d42b 100644 --- a/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.cc +++ b/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.cc
@@ -210,8 +210,15 @@ break; case StringParseState::kHostname: + // Track whether we are inside ipv6 address brackets. + if (IsIPv6Open()) + hostname_ipv6_bracket_depth_ += 1; + else if (IsIPv6Close()) + hostname_ipv6_bracket_depth_ -= 1; + // If we find a `:` then we transition to the port component state. - if (IsPortPrefix()) + // However, we ignore `:` when parsing an ipv6 address. + else if (IsPortPrefix() && !hostname_ipv6_bracket_depth_) ChangeState(StringParseState::kPort, Skip(1)); // If we find a `/` then we transition to the pathname component state. @@ -424,6 +431,14 @@ return token_list_[token_index_].type == liburlpattern::TokenType::kClose; } +bool Parser::IsIPv6Open() const { + return IsNonSpecialPatternChar(token_index_, "["); +} + +bool Parser::IsIPv6Close() const { + return IsNonSpecialPatternChar(token_index_, "]"); +} + String Parser::MakeComponentString() const { DCHECK_LT(token_index_, token_list_.size()); const auto& token = token_list_[token_index_];
diff --git a/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.h b/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.h index c339201..f6a757c 100644 --- a/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.h +++ b/third_party/blink/renderer/modules/url_pattern/url_pattern_parser.h
@@ -135,6 +135,11 @@ bool IsGroupOpen() const; bool IsGroupClose() const; + // These methods indicate if the current token is an opening or closing + // bracket for an ipv6 hostname; e.g. '[' or ']'. + bool IsIPv6Open() const; + bool IsIPv6Close() const; + // This method returns a String consisting of the tokens between // `component_start_` and the current `token_index_`. String MakeComponentString() const; @@ -177,6 +182,9 @@ // The current nesting depth of `{ }` pattern groupings. int group_depth_ = 0; + // The current netsting depth of `[ ]` in hostname patterns. + int hostname_ipv6_bracket_depth_ = 0; + // The current parse state. This should only be changed via `ChangeState()` // or `RewindAndSetState()`. StringParseState state_ = StringParseState::kInit;
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.cc b/third_party/blink/renderer/platform/bindings/parkable_string.cc index a718db3..068c42e3 100644 --- a/third_party/blink/renderer/platform/bindings/parkable_string.cc +++ b/third_party/blink/renderer/platform/bindings/parkable_string.cc
@@ -483,6 +483,7 @@ void ParkableStringImpl::DiscardCompressedData() { metadata_->compressed_ = nullptr; metadata_->state_ = State::kOnDisk; + metadata_->last_disk_parking_time_ = base::TimeTicks::Now(); ParkableStringManager::Instance().OnWrittenToDisk(this); } @@ -525,11 +526,24 @@ if (metadata_->state_ == State::kUnparked) return; - TRACE_EVENT1("blink", "ParkableStringImpl::Unpark", "size", - CharactersSizeInBytes()); + TRACE_EVENT2( + "blink", "ParkableStringImpl::Unpark", "size", CharactersSizeInBytes(), + "time_since_last_disk_write_s", + metadata_->last_disk_parking_time_.is_null() + ? -1 + : (base::TimeTicks::Now() - metadata_->last_disk_parking_time_) + .InSeconds()); DCHECK(metadata_->compressed_ || metadata_->on_disk_metadata_); string_ = UnparkInternal(); metadata_->state_ = State::kUnparked; + if (metadata_->last_disk_parking_time_ != base::TimeTicks()) { + // Can be quite short, can be multiple hours, hence long times, and 100 + // buckets. + base::UmaHistogramLongTimes100( + "Memory.ParkableString.Read.SinceLastDiskWrite", + base::TimeTicks::Now() - metadata_->last_disk_parking_time_); + metadata_->last_disk_parking_time_ = base::TimeTicks(); + } ParkableStringManager::Instance().OnUnparked(this); } @@ -791,7 +805,7 @@ metadata_->state_ == State::kParked); if (metadata_->state_ == State::kParked) { DiscardCompressedData(); - metadata_->state_ = State::kOnDisk; + DCHECK_EQ(metadata_->state_, State::kOnDisk); } // Record the time no matter whether the string was discarded or not, as the
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string.h b/third_party/blink/renderer/platform/bindings/parkable_string.h index 1bd251e..b9b48bf 100644 --- a/third_party/blink/renderer/platform/bindings/parkable_string.h +++ b/third_party/blink/renderer/platform/bindings/parkable_string.h
@@ -12,6 +12,7 @@ #include "base/gtest_prod_util.h" #include "base/memory/scoped_refptr.h" #include "base/thread_annotations.h" +#include "base/time/time.h" #include "third_party/blink/renderer/platform/disk_data_metadata.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" @@ -241,6 +242,7 @@ std::unique_ptr<Vector<uint8_t>> compressed_; std::unique_ptr<DiskDataMetadata> on_disk_metadata_; const SecureDigest digest_; + base::TimeTicks last_disk_parking_time_; // A string can be young, old or very old. It starts young, and ages with // |MaybeAgeOrParkString()|.
diff --git a/third_party/blink/renderer/platform/bindings/parkable_string_test.cc b/third_party/blink/renderer/platform/bindings/parkable_string_test.cc index 07105d5..a884563 100644 --- a/third_party/blink/renderer/platform/bindings/parkable_string_test.cc +++ b/third_party/blink/renderer/platform/bindings/parkable_string_test.cc
@@ -633,9 +633,13 @@ histogram_tester.ExpectTotalCount("Memory.ParkableString.Read.Latency", 1); histogram_tester.ExpectTotalCount("Memory.ParkableString.Read.ThroughputMBps", 1); + histogram_tester.ExpectTotalCount( + "Memory.ParkableString.Read.SinceLastDiskWrite", 1); } TEST_F(ParkableStringTest, UnparkWhileWritingToDisk) { + base::HistogramTester histogram_tester; + ParkableString parkable(MakeLargeString('a').ReleaseImpl()); ParkableStringImpl* impl = parkable.Impl(); @@ -657,6 +661,10 @@ EXPECT_FALSE(impl->is_on_disk()); EXPECT_TRUE(impl->has_on_disk_data()); EXPECT_EQ(ParkableStringImpl::Age::kYoung, impl->age_for_testing()); + + // No data point recorded, since writing to disk was aborted. + histogram_tester.ExpectTotalCount( + "Memory.ParkableString.Read.SinceLastDiskWrite", 0); } TEST_F(ParkableStringTest, NoCompetingWritingToDisk) { @@ -690,6 +698,8 @@ } TEST_F(ParkableStringTest, SynchronousToDisk) { + base::HistogramTester histogram_tester; + ParkableString parkable(MakeLargeString('a').ReleaseImpl()); ParkableStringImpl* impl = parkable.Impl(); @@ -707,6 +717,8 @@ parkable.ToString(); EXPECT_FALSE(impl->is_on_disk()); + histogram_tester.ExpectTotalCount( + "Memory.ParkableString.Read.SinceLastDiskWrite", 1); impl->MaybeAgeOrParkString(); impl->MaybeAgeOrParkString(); @@ -715,6 +727,10 @@ EXPECT_FALSE(impl->is_on_disk()); impl->MaybeAgeOrParkString(); EXPECT_TRUE(impl->is_on_disk()); // Synchronous writing. + + parkable.ToString(); + histogram_tester.ExpectTotalCount( + "Memory.ParkableString.Read.SinceLastDiskWrite", 2); } TEST_F(ParkableStringTest, OnPurgeMemory) {
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.cc b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.cc index 303c2839..e5c73a6 100644 --- a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.cc +++ b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.cc
@@ -11,9 +11,13 @@ #include "third_party/blink/renderer/platform/heap/v8_wrapper/custom_spaces.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" #include "third_party/blink/renderer/platform/wtf/vector.h" -#include "v8.h" #include "v8/include/cppgc/heap-consistency.h" #include "v8/include/v8-cppgc.h" +#include "v8/include/v8-embedder-heap.h" +#include "v8/include/v8-initialization.h" +#include "v8/include/v8-isolate.h" +#include "v8/include/v8-object.h" +#include "v8/include/v8-traced-handle.h" namespace blink {
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h index 682a0b5..6b327a2 100644 --- a/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h +++ b/third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h
@@ -15,8 +15,8 @@ #include "v8-profiler.h" #include "v8/include/cppgc/heap-consistency.h" #include "v8/include/cppgc/prefinalizer.h" +#include "v8/include/v8-callbacks.h" #include "v8/include/v8-cppgc.h" -#include "v8/include/v8.h" namespace v8 { class CppHeap; @@ -28,6 +28,7 @@ namespace v8 { class EmbedderGraph; +class EmbedderRootsHandler; } // namespace v8 namespace blink {
diff --git a/third_party/blink/renderer/platform/heap/v8_wrapper/unified_heap_marking_visitor.h b/third_party/blink/renderer/platform/heap/v8_wrapper/unified_heap_marking_visitor.h index cd2871a..c49566d4 100644 --- a/third_party/blink/renderer/platform/heap/v8_wrapper/unified_heap_marking_visitor.h +++ b/third_party/blink/renderer/platform/heap/v8_wrapper/unified_heap_marking_visitor.h
@@ -10,6 +10,7 @@ #include "third_party/blink/renderer/platform/heap/v8_wrapper/thread_state.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "v8/include/v8-cppgc.h" +#include "v8/include/v8-traced-handle.h" namespace blink {
diff --git a/third_party/blink/renderer/platform/loader/fetch/DEPS b/third_party/blink/renderer/platform/loader/fetch/DEPS index 0005fc77..466581b 100644 --- a/third_party/blink/renderer/platform/loader/fetch/DEPS +++ b/third_party/blink/renderer/platform/loader/fetch/DEPS
@@ -4,6 +4,7 @@ "+net/base/schemeful_site.h", "+net/dns/public", "+net/filter/source_stream.h", + "+net/http/http_response_info.h", "+services/network/public/cpp/fetch_api_utils.h", "+services/network/public/cpp/optional_trust_token_params.h", "+third_party/blink/renderer/platform/mojo",
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc index 1f372a8..dc9cd977 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.cc
@@ -20,6 +20,7 @@ #include "third_party/blink/renderer/platform/loader/fetch/console_logger.h" #include "third_party/blink/renderer/platform/loader/fetch/loading_behavior_observer.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h" +#include "third_party/blink/renderer/platform/network/network_state_notifier.h" #include "third_party/blink/renderer/platform/scheduler/public/aggregated_metric_reporter.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_status.h" @@ -153,7 +154,7 @@ // Check if the request can be throttled. ClientIdWithPriority request_info(*id, priority, intra_priority); if (!IsClientDelayable(option)) { - Run(*id, client, /*throttleable=*/false, priority); + Run(*id, client, /*throttleable=*/false); return; } @@ -203,6 +204,9 @@ auto running_request = running_requests_.find(id); if (running_request != running_requests_.end()) { + if (running_request->value) + in_flight_on_multiplexed_connections_--; + running_requests_.erase(id); running_throttleable_requests_.erase(id); @@ -291,15 +295,15 @@ bool has_runnable_stoppable_request = stoppable_it != stoppable_queue.end() && (!IsClientDelayable(ThrottleOption::kStoppable) || - running_throttleable_requests_.size() < - GetOutstandingLimit(stoppable_it->priority)); + IsRunningThrottleableRequestsLessThanOutStandingLimit( + GetOutstandingLimit(stoppable_it->priority))); auto throttleable_it = throttleable_queue.begin(); bool has_runnable_throttleable_request = throttleable_it != throttleable_queue.end() && (!IsClientDelayable(ThrottleOption::kThrottleable) || - running_throttleable_requests_.size() < - GetOutstandingLimit(throttleable_it->priority)); + IsRunningThrottleableRequestsLessThanOutStandingLimit( + GetOutstandingLimit(throttleable_it->priority))); if (!has_runnable_throttleable_request && !has_runnable_stoppable_request) return false; @@ -332,25 +336,30 @@ if (is_shutdown_) return; + // Updates the RTT before getting the next pending request in the tight mode. + if (policy_ == ThrottlingPolicy::kTight) { + http_rtt_ = http_rtt_for_testing_ ? http_rtt_for_testing_ + : GetNetworkStateNotifier().HttpRtt(); + } + ClientId id = kInvalidClientId; while (GetNextPendingRequest(&id)) { auto found = pending_request_map_.find(id); if (found == pending_request_map_.end()) continue; // Already released. - auto priority = found->value->priority; ResourceLoadSchedulerClient* client = found->value->client; ThrottleOption option = found->value->option; pending_request_map_.erase(found); - Run(id, client, option == ThrottleOption::kThrottleable, priority); + Run(id, client, option == ThrottleOption::kThrottleable); } } void ResourceLoadScheduler::Run(ResourceLoadScheduler::ClientId id, ResourceLoadSchedulerClient* client, - bool throttleable, - ResourceLoadPriority priority) { - running_requests_.insert(id, priority); + bool throttleable) { + // Assuming the request connection is not multiplexed. + running_requests_.insert(id, IsMultiplexedConnection(false)); if (throttleable) running_throttleable_requests_.insert(id); client->Run(); @@ -372,11 +381,18 @@ break; } + size_t policy_limit = normal_outstanding_limit_; switch (policy_) { case ThrottlingPolicy::kTight: - limit = std::min(limit, priority < ResourceLoadPriority::kHigh - ? tight_outstanding_limit_ - : normal_outstanding_limit_); + if (priority < ResourceLoadPriority::kHigh) { + if (CanRequestForMultiplexedConnectionsInTight()) { + policy_limit = static_cast<size_t>( + features::kMaxNumOfThrottleableRequestsInTightMode.Get()); + } else { + policy_limit = tight_outstanding_limit_; + } + } + limit = std::min(limit, policy_limit); break; case ThrottlingPolicy::kNormal: limit = std::min(limit, normal_outstanding_limit_); @@ -408,8 +424,60 @@ is_console_info_shown_ = true; } +bool ResourceLoadScheduler:: + IsRunningThrottleableRequestsLessThanOutStandingLimit( + size_t out_standing_limit) { + if (CanRequestForMultiplexedConnectionsInTight()) { + DCHECK_EQ(policy_, ThrottlingPolicy::kTight); + return (running_throttleable_requests_.size() - + in_flight_on_multiplexed_connections_ * + features::kCostReductionOfMultiplexedRequests.Get()) < + out_standing_limit; + } + + return running_throttleable_requests_.size() < out_standing_limit; +} + void ResourceLoadScheduler::SetClockForTesting(const base::Clock* clock) { clock_ = clock; } +void ResourceLoadScheduler::SetConnectionInfo( + ClientId id, + net::HttpResponseInfo::ConnectionInfo connection_info) { + DCHECK_NE(kInvalidClientId, id); + + // `is_multiplexed` will be set false if the connection of the given client + // doesn't support multiplexing (e.g., HTTP/1.x). + bool is_multiplexed = true; + switch (connection_info) { + case net::HttpResponseInfo::CONNECTION_INFO_HTTP0_9: + case net::HttpResponseInfo::CONNECTION_INFO_HTTP1_0: + case net::HttpResponseInfo::CONNECTION_INFO_HTTP1_1: + case net::HttpResponseInfo::CONNECTION_INFO_UNKNOWN: + is_multiplexed = false; + break; + default: + break; + } + + auto running_request = running_requests_.find(id); + if (running_request != running_requests_.end() && is_multiplexed) { + running_request->value = IsMultiplexedConnection(true); + in_flight_on_multiplexed_connections_++; + } + + MaybeRun(); +} + +bool ResourceLoadScheduler::CanRequestForMultiplexedConnectionsInTight() const { + // `kDelayLowPriorityRequestAccordingToNetworkState` will be triggered + // practically iff it's in the tight mode and the value of RTT is less than + // the `kThresholdOfHttpRtt`. + return base::FeatureList::IsEnabled( + features::kDelayLowPriorityRequestsAccordingToNetworkState) && + policy_ == ThrottlingPolicy::kTight && http_rtt_ && + http_rtt_.value() < features::kHttpRttThreshold.Get(); +} + } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h index d990837..d055b3a 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler.h
@@ -9,10 +9,13 @@ #include <set> #include "base/time/time.h" +#include "base/types/strong_alias.h" +#include "net/http/http_response_info.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/heap/heap_allocator.h" #include "third_party/blink/renderer/platform/loader/fetch/resource.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_loader_options.h" +#include "third_party/blink/renderer/platform/loader/fetch/resource_response.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" #include "third_party/blink/renderer/platform/wtf/hash_set.h" @@ -234,6 +237,16 @@ throttle_option_override_ = throttle_option_override; } + // Updates the connection info of the given client. This function may initiate + // a new resource loading. + void SetConnectionInfo(ClientId id, + net::HttpResponseInfo::ConnectionInfo connection_info); + + // Sets the HTTP RTT for testing. + void SetHttpRttForTesting(base::TimeDelta http_rtt) { + http_rtt_for_testing_ = http_rtt; + } + private: class ClientIdWithPriority { public: @@ -280,6 +293,9 @@ using PendingRequestMap = HeapHashMap<ClientId, Member<ClientInfo>>; + using IsMultiplexedConnection = + base::StrongAlias<class IsMultiplexedConnectionTag, bool>; + // Checks if |pending_requests_| for the specified option is effectively // empty, that means it does not contain any request that is still alive in // |pending_request_map_|. @@ -302,15 +318,17 @@ void MaybeRun(); // Grants a client to run, - void Run(ClientId, - ResourceLoadSchedulerClient*, - bool throttleable, - ResourceLoadPriority priority); + void Run(ClientId, ResourceLoadSchedulerClient*, bool throttleable); size_t GetOutstandingLimit(ResourceLoadPriority priority) const; void ShowConsoleMessageIfNeeded(); + bool IsRunningThrottleableRequestsLessThanOutStandingLimit( + size_t out_standing_limit); + + bool CanRequestForMultiplexedConnectionsInTight() const; + const Member<const DetachableResourceFetcherProperties> resource_fetcher_properties_; @@ -329,14 +347,18 @@ // Used when |policy_| is |kNormal|. size_t normal_outstanding_limit_ = kOutstandingUnlimited; + // The count of in-flight requests that support multiplexed connections. + size_t in_flight_on_multiplexed_connections_ = 0u; + // Used when |frame_scheduler_throttling_state_| is |kThrottled|. const size_t outstanding_limit_for_throttled_frame_scheduler_; // The last used ClientId to calculate the next. ClientId current_id_ = kInvalidClientId; - // Holds clients that were granted and are running. - HashMap<ClientId, ResourceLoadPriority> running_requests_; + // Holds clients that were granted and are running and whether the connection + // is multiplexed. + HashMap<ClientId, IsMultiplexedConnection> running_requests_; HashSet<ClientId> running_throttleable_requests_; @@ -370,6 +392,9 @@ ThrottleOptionOverride throttle_option_override_; Member<LoadingBehaviorObserver> loading_behavior_observer_; + + absl::optional<base::TimeDelta> http_rtt_ = absl::nullopt; + absl::optional<base::TimeDelta> http_rtt_for_testing_ = absl::nullopt; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc index b181d2d..9a14839 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_load_scheduler_test.cc
@@ -117,6 +117,8 @@ *MakeGarbageCollected<DetachableConsoleLogger>(console_logger_), loading_observer_behavior_.Get()); Scheduler()->SetOutstandingLimitForTesting(1); + feature_list_.InitAndDisableFeature( + features::kDelayLowPriorityRequestsAccordingToNetworkState); } void TearDown() override { Scheduler()->Shutdown(); } @@ -716,5 +718,111 @@ EXPECT_TRUE(Release(id2)); } +TEST_F(ResourceLoadSchedulerTest, ConsiderNetworkStateInTigtMode) { + const base::FieldTrialParams network_params = { + {features::kMaxNumOfThrottleableRequestsInTightMode.name, "2"}, + {features::kHttpRttThreshold.name, "3600ms"}, + {features::kCostReductionOfMultiplexedRequests.name, "0.5"}}; + + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeaturesAndParameters( + {{features::kDelayLowPriorityRequestsAccordingToNetworkState, + network_params}}, + {}); + + Scheduler()->SetOutstandingLimitForTesting(2, 5); + + // Sets the RTT. + Scheduler()->SetHttpRttForTesting(base::TimeDelta::FromMilliseconds(1000)); + + // Push 2 requests, 1 non-multiplexed request and the other is multiplexed. + MockClient* client1 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client1, ThrottleOption::kThrottleable, + ResourceLoadPriority::kHigh, 0 /* intra_priority */, + &id1); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); + + MockClient* client2 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client2, ThrottleOption::kThrottleable, + ResourceLoadPriority::kLow, 5 /* intra_priority */, + &id2); + Scheduler()->SetConnectionInfo(id2, + net::HttpResponseInfo::CONNECTION_INFO_HTTP2); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id2); + + EXPECT_TRUE(client1->WasRun()); + EXPECT_TRUE(client2->WasRun()); + + // Continue to push another non-multiplexed request, because there is + // already a multiplexed request, which is`id2`, the newly added one can + // still be handled without being delayed. + MockClient* client3 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client3, ThrottleOption::kThrottleable, + ResourceLoadPriority::kLow, 10 /* intra_priority */, + &id3); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id3); + + EXPECT_TRUE(client3->WasRun()); + + EXPECT_TRUE(Release(id3)); + EXPECT_TRUE(Release(id2)); + EXPECT_TRUE(Release(id1)); +} + +TEST_F(ResourceLoadSchedulerTest, + ConsiderNetworkStateInTigtModeWithPoorConnection) { + const base::FieldTrialParams network_params = { + {features::kMaxNumOfThrottleableRequestsInTightMode.name, "2"}, + {features::kHttpRttThreshold.name, "3600ms"}, + {features::kCostReductionOfMultiplexedRequests.name, "0.5"}}; + + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeaturesAndParameters( + {{features::kDelayLowPriorityRequestsAccordingToNetworkState, + network_params}}, + {}); + + Scheduler()->SetOutstandingLimitForTesting(2, 1024); + + // Sets the RTT as a slow connection. + Scheduler()->SetHttpRttForTesting(base::TimeDelta::FromMilliseconds(5000)); + + // Push three requests. + MockClient* client1 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id1 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client1, ThrottleOption::kThrottleable, + ResourceLoadPriority::kHigh, 0 /* intra_priority */, + &id1); + EXPECT_NE(ResourceLoadScheduler::kInvalidClientId, id1); + + MockClient* client2 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id2 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client2, ThrottleOption::kThrottleable, + ResourceLoadPriority::kLow, 5 /* intra_priority */, + &id2); + Scheduler()->SetConnectionInfo(id2, + net::HttpResponseInfo::CONNECTION_INFO_HTTP2); + + // This request will not run, because we are experiencing a slow connection. + MockClient* client3 = MakeGarbageCollected<MockClient>(); + ResourceLoadScheduler::ClientId id3 = ResourceLoadScheduler::kInvalidClientId; + Scheduler()->Request(client3, ThrottleOption::kThrottleable, + ResourceLoadPriority::kLow, 5 /* intra_priority */, + &id3); + Scheduler()->SetConnectionInfo(id3, + net::HttpResponseInfo::CONNECTION_INFO_HTTP2); + + EXPECT_TRUE(client1->WasRun()); + EXPECT_TRUE(client2->WasRun()); + EXPECT_FALSE(client3->WasRun()); + + EXPECT_TRUE(Release(id3)); + EXPECT_TRUE(Release(id2)); + EXPECT_TRUE(Release(id1)); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc index d174147..c0fcf4f8 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -1089,6 +1089,9 @@ return; } + scheduler_->SetConnectionInfo(scheduler_client_id_, + response.ConnectionInfo()); + // A response should not serve partial content if it was not requested via a // Range header: https://fetch.spec.whatwg.org/#main-fetch if (response.GetType() == network::mojom::FetchResponseType::kOpaque &&
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 8905cd259..928e8eb 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -527,7 +527,8 @@ }, { // https://drafts.csswg.org/css-cascade-5/#layering - name: "CSSCascadeLayers" + name: "CSSCascadeLayers", + status: "test", }, { // Support case-sensitive attribute selector modifier
diff --git a/third_party/blink/renderer/platform/widget/widget_base.cc b/third_party/blink/renderer/platform/widget/widget_base.cc index 65708917..67fcc9f 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/third_party/blink/renderer/platform/widget/widget_base.cc
@@ -828,6 +828,10 @@ BlinkSpaceToEnclosedDIPs(bounds)); } +void WidgetBase::ClearKeyboardTriggeredTooltip() { + widget_host_->ClearKeyboardTriggeredTooltip(); +} + void WidgetBase::ShowVirtualKeyboard() { UpdateTextInputStateInternal(true, false); }
diff --git a/third_party/blink/renderer/platform/widget/widget_base.h b/third_party/blink/renderer/platform/widget/widget_base.h index 1336009..1bd648d 100644 --- a/third_party/blink/renderer/platform/widget/widget_base.h +++ b/third_party/blink/renderer/platform/widget/widget_base.h
@@ -198,6 +198,7 @@ void UpdateTooltipFromKeyboard(const String& tooltip_text, TextDirection dir, const gfx::Rect& bounds); + void ClearKeyboardTriggeredTooltip(); // Posts a task with the given delay, then calls ScheduleAnimation() on the // WidgetBaseClient.
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py index 23eccfd0..b353e6d 100644 --- a/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py +++ b/third_party/blink/tools/blinkpy/web_tests/port/fuchsia.py
@@ -257,8 +257,7 @@ require_kvm=True, ram_size_mb=8192, enable_graphics=False, - hardware_gpu=False, - with_network=False) + hardware_gpu=False) target = _LoadTargetClass( _GetPathToBuiltinTarget( self._target_device)).CreateFromArgs(target_args)
diff --git a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py index ba7b517..dd67be6 100644 --- a/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py +++ b/third_party/blink/tools/blinkpy/web_tests/run_web_tests.py
@@ -137,58 +137,50 @@ 'is to log as part of --debug-rwt-logging)')), ])) - option_group_definitions.append(( - 'Fuchsia-specific Options', - [ - optparse.make_option( - '--zircon-logging', - dest='zircon_logging', - action='store_true', - default=True, - help=('Log Zircon debug messages (enabled by default).')), - optparse.make_option('--no-zircon-logging', - dest='zircon_logging', - action='store_false', - default=True, - help=('Do not log Zircon debug messages.')), - # TODO(crbug.com/1243754): Switch to fvdl as default. - optparse.make_option('--device', - choices=['aemu', 'qemu', 'device', 'fvdl'], - default='aemu', - help=('Choose device to launch Fuchsia with. ' - 'Defaults to AEMU.')), - optparse.make_option( - '--fuchsia-target-cpu', - choices=['x64', 'arm64'], - default='x64', - help=('cpu architecture of the device. Defaults ' - 'to x64.')), - optparse.make_option( - '--fuchsia-out-dir', - help=('Path to Fuchsia build output directory.')), - optparse.make_option( - '--fuchsia-ssh-config', - help=('The path to the SSH configuration used for ' - 'connecting to the target device.')), - optparse.make_option( - '--fuchsia-host', - help=('The IP of the target device. Optional.')), - optparse.make_option( - '--fuchsia-port', - type=int, - default=None, - help=('The port of the SSH service running on the ' - 'device. Optional.')), - optparse.make_option( - '--fuchsia-node-name', - help=('The node-name of the device to boot or ' - 'deploy to. Optional')), - optparse.make_option( - '--fuchsia-host-ip', - help=( - 'The IP address of the test host observed by the Fuchsia ' - 'device. Required if running on hardware devices.')), - ])) + option_group_definitions.append(('Fuchsia-specific Options', [ + optparse.make_option( + '--zircon-logging', + dest='zircon_logging', + action='store_true', + default=True, + help=('Log Zircon debug messages (enabled by default).')), + optparse.make_option('--no-zircon-logging', + dest='zircon_logging', + action='store_false', + default=True, + help=('Do not log Zircon debug messages.')), + optparse.make_option('--device', + choices=['aemu', 'qemu', 'device', 'fvdl'], + default='aemu', + help=('Choose device to launch Fuchsia with. ' + 'Defaults to AEMU.')), + optparse.make_option('--fuchsia-target-cpu', + choices=['x64', 'arm64'], + default='x64', + help=('cpu architecture of the device. Defaults ' + 'to x64.')), + optparse.make_option('--fuchsia-out-dir', + help=('Path to Fuchsia build output directory.')), + optparse.make_option( + '--fuchsia-ssh-config', + help=('The path to the SSH configuration used for ' + 'connecting to the target device.')), + optparse.make_option('--fuchsia-host', + help=('The IP of the target device. Optional.')), + optparse.make_option( + '--fuchsia-port', + type=int, + default=None, + help=('The port of the SSH service running on the ' + 'device. Optional.')), + optparse.make_option('--fuchsia-node-name', + help=('The node-name of the device to boot or ' + 'deploy to. Optional')), + optparse.make_option( + '--fuchsia-host-ip', + help=('The IP address of the test host observed by the Fuchsia ' + 'device. Required if running on hardware devices.')), + ])) option_group_definitions.append(( 'Results Options',
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 2193e140..fae2b676 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2743,7 +2743,6 @@ crbug.com/626703 external/wpt/service-workers/service-worker/worker-interception.https.html [ Failure ] # ====== New tests from wpt-importer added here ====== -crbug.com/626703 [ Linux ] external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html?touch [ Timeout ] crbug.com/626703 [ Mac10.14 ] external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html?touch [ Timeout ] crbug.com/626703 [ Mac10.15 ] external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html?touch [ Timeout ] crbug.com/626703 [ Mac11.0 ] external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html?touch [ Timeout ] @@ -6949,7 +6948,6 @@ crbug.com/1244896 [ Mac ] fast/mediacapturefromelement/CanvasCaptureMediaStream-set-size-too-large.html [ Pass Timeout ] # Sheriff 2021-08-25 -crbug.com/1243128 [ Win ] external/wpt/css/css-cascade/layer-basic.html [ Failure ] crbug.com/1243128 [ Win ] external/wpt/editing/run/insertparagraph.html?6001-last [ Failure ] crbug.com/1243128 [ Win ] external/wpt/editing/run/justifyright.html?4001-last [ Failure ] crbug.com/1243128 [ Win ] external/wpt/html/canvas/element/wide-gamut-canvas/2d.color.space.p3.fillText.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any-expected.txt index 99afa96..7a1b5a4 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any-expected.txt +++ b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any-expected.txt
@@ -31,6 +31,7 @@ PASS response.formData() rejects if already aborted PASS response.json() rejects if already aborted PASS response.text() rejects if already aborted +PASS Call text() twice on aborted response PASS Already aborted signal does not make request PASS Already aborted signal can be used for many fetches PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.js b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.js index 7c8d1b5..472d505 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.js +++ b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.js
@@ -211,6 +211,17 @@ }, `response.${bodyMethod}() rejects if already aborted`); } +promise_test(async (t) => { + const controller = new AbortController(); + const signal = controller.signal; + + const res = await fetch('../resources/data.json', { signal }); + controller.abort(); + + await promise_rejects_dom(t, 'AbortError', res.text()); + await promise_rejects_dom(t, 'AbortError', res.text()); +}, 'Call text() twice on aborted response'); + promise_test(async t => { await abortRequests();
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt index 99afa96..7a1b5a4 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.serviceworker-expected.txt
@@ -31,6 +31,7 @@ PASS response.formData() rejects if already aborted PASS response.json() rejects if already aborted PASS response.text() rejects if already aborted +PASS Call text() twice on aborted response PASS Already aborted signal does not make request PASS Already aborted signal can be used for many fetches PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt index 99afa96..7a1b5a4 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.sharedworker-expected.txt
@@ -31,6 +31,7 @@ PASS response.formData() rejects if already aborted PASS response.json() rejects if already aborted PASS response.text() rejects if already aborted +PASS Call text() twice on aborted response PASS Already aborted signal does not make request PASS Already aborted signal can be used for many fetches PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting
diff --git a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.worker-expected.txt index 99afa96..7a1b5a4 100644 --- a/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.worker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/fetch/api/abort/general.any.worker-expected.txt
@@ -31,6 +31,7 @@ PASS response.formData() rejects if already aborted PASS response.json() rejects if already aborted PASS response.text() rejects if already aborted +PASS Call text() twice on aborted response PASS Already aborted signal does not make request PASS Already aborted signal can be used for many fetches PASS Signal can be used to abort other fetches, even if another fetch succeeded before aborting
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any-expected.txt deleted file mode 100644 index b5403a67..0000000 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -FAIL self.reportError(1) self.reportError is not a function -FAIL self.reportError(TypeError) self.reportError is not a function -FAIL self.reportError(undefined) self.reportError is not a function -PASS self.reportError() (without arguments) throws -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any.worker-expected.txt deleted file mode 100644 index b5403a67..0000000 --- a/third_party/blink/web_tests/external/wpt/html/webappapis/scripting/reporterror.any.worker-expected.txt +++ /dev/null
@@ -1,7 +0,0 @@ -This is a testharness.js-based test. -FAIL self.reportError(1) self.reportError is not a function -FAIL self.reportError(TypeError) self.reportError is not a function -FAIL self.reportError(undefined) self.reportError is not a function -PASS self.reportError() (without arguments) throws -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html index 8a82083..2d64a0d1 100644 --- a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html +++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html
@@ -1,5 +1,7 @@ <!DOCTYPE HTML> <title>contexmenu is a PointerEvent</title> +<meta name="variant" content="?mouse"> +<meta name="variant" content="?touch"> <link rel="help" href="https://github.com/w3c/pointerevents/pull/317"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> @@ -13,17 +15,28 @@ 'use strict'; let contextmenuTest = async_test("contextmenu is a PointerEvent"); let target = document.getElementById("target"); +let pointerdownPointerId, pointerdownPointerType; +let inputSource = location.search.substring(1); target.addEventListener("contextmenu", contextmenuTest.step_func((e)=>{ assert_equals(e.constructor, window.PointerEvent, "contextmenu should use a PointerEvent constructor"); assert_true(e instanceof PointerEvent, "contextmenu should be a PointerEvent"); - // TODO(crbug.com/1150441,crbug.com/1150442): Test pointerId, pointerType are properly populated from the pointer event stream + assert_equals(e.pointerId, pointerdownPointerId, "contextmenu's pointerId should match the pointerId of the pointer event that triggers it"); + assert_equals(e.pointerType, pointerdownPointerType, "contextmenu's pointerType should match the pointerType of the pointer event that triggers it"); })); +target.addEventListener("pointerdown", e=>{ + pointerdownPointerId = e.pointerId; + pointerdownPointerType = e.pointerType; +}); let eventWatcher = new EventWatcher(contextmenuTest, target, ["contextmenu"]); let actions = new test_driver.Actions(); -actions = actions.pointerMove(0,0, {origin:target}) - .pointerDown({button:actions.ButtonType.RIGHT}) - .pointerUp({button:actions.ButtonType.RIGHT}); +// TODO: We might be able to test "pen" just like "touch". +let testPointer = inputSource + "TestPointer"; +actions = actions.addPointer(testPointer, inputSource) + .pointerMove(0,0, {sourceName:testPointer, origin:target}) + .pointerDown({sourceName:testPointer, button:actions.ButtonType.RIGHT}) + .pause(inputSource === "touch" ? 1500 : 0, "pointer", {sourceName:testPointer}) + .pointerUp({sourceName:testPointer, button:actions.ButtonType.RIGHT}); Promise.all([eventWatcher.wait_for("contextmenu"), actions.send()]).then(()=>contextmenuTest.done()); </script>
diff --git a/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html.ini b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html.ini new file mode 100644 index 0000000..f1ff6c2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/pointerevents/pointerevent_contextmenu_is_a_pointerevent.html.ini
@@ -0,0 +1,7 @@ +[pointerevent_contextmenu_is_a_pointerevent.html?touch] + expected: + if product == "chrome": TIMEOUT + + [contextmenu is a PointerEvent] + expected: + if product == "chrome": NOTRUN
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/304-response-recorded.html b/third_party/blink/web_tests/external/wpt/resource-timing/304-response-recorded.html new file mode 100644 index 0000000..9e1bb304 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/resource-timing/304-response-recorded.html
@@ -0,0 +1,53 @@ +<!DOCTYPE html> +<html> +<head> +<meta charset="utf-8" /> +<title>Resource Timing - cached resources generate performance entries</title> +<link rel="author" title="Google" href="http://www.google.com/" /> +<link rel="help" + href="https://www.w3.org/TR/resource-timing-2/#resources-included-in-the-performanceresourcetiming-interface"/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/entry-invariants.js"></script> +<script src="resources/resource-loaders.js"></script> +</head> +<body> +<h1>Description</h1> +<p>This test validates that a 304 Not Modified resource appears in the +Performance Timeline.</p> +<script> +// Need to fetch the same resource twice; the first will get a 200 response but +// the second request should be cached and get a 304. +promise_test(async () => { + performance.clearResourceTimings(); + + const unique = Math.random(); + const path = `resources/fake_responses.py?tag=${unique}`; + + await load.xhr_sync(path); + await load.xhr_sync(path, {"If-None-Match": `${unique}`}); + const entries = await new Promise(resolve => { + const accumulator = []; + new PerformanceObserver(entry_list => { + entry_list.getEntries().forEach(entry => { + accumulator.push(entry); + }); + if (accumulator.length >= 2) { + resolve(accumulator); + } + }).observe({'type': 'resource', 'buffered': true}); + }); + + + if (entries.length != 2) { + throw new Error(`Expecting 2 but got ${entries.length} entries`); + } + + assert_equals(entries[0].name, entries[1].name, + "Both entries should have the same name"); + invariants.assert_tao_pass_no_redirect_http(entries[0]); + invariants.assert_tao_pass_304_not_modified_http(entries[1]); +}, "304 responses should still show up in the PerformanceTimeline"); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/resource_cached.html b/third_party/blink/web_tests/external/wpt/resource-timing/resource_cached.html deleted file mode 100644 index fd61d63..0000000 --- a/third_party/blink/web_tests/external/wpt/resource-timing/resource_cached.html +++ /dev/null
@@ -1,52 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<meta charset="utf-8" /> -<title>Resource Timing cached resources</title> -<link rel="author" title="Google" href="http://www.google.com/" /> -<link rel="help" href="http://www.w3.org/TR/resource-timing/#dom-performanceresourcetiming-initiatortype"/> -<script src="/resources/testharness.js"></script> -<script src="/resources/testharnessreport.js"></script> -<script src="resources/webperftestharness.js"></script> -<script src="resources/webperftestharnessextension.js"></script> -<script> -setup({explicit_done: true}); - -// explicitly test the namespace before we start testing -test_namespace("getEntriesByType"); - -var d; -var iframe; -var iframeBody; -var image; -var random = Math.random(); - -function setup_iframe() { - iframe = document.getElementById('frameContext'); - d = iframe.contentWindow.document; - iframeBody = d.body; - iframe.addEventListener('load', onload_test, false); -} -function onload_test() { - if (window.performance.getEntriesByType === undefined) { - done(); - return; - } - var context = new PerformanceContext(iframe.contentWindow.performance); - var entries = context.getEntriesByType('resource'); - test_equals(entries.length, 2, "There should be two entries"); - if (entries.length >= 2) { - test_equals(entries[0].name, entries[1].name, "Both entries should have the same name"); - } - done(); -} -window.setup_iframe = setup_iframe; -</script> -</head> -<body> -<h1>Description</h1> -<p>This test validates that a 304 Not Modified resource appears in the buffer.</p> -<div id="log"></div> -<iframe id="frameContext" src="resources/fake_responses.html"></iframe> -</body> -</html>
diff --git a/third_party/blink/web_tests/external/wpt/resource-timing/resources/resource-loaders.js b/third_party/blink/web_tests/external/wpt/resource-timing/resources/resource-loaders.js index 06bbba49..ef24127b 100644 --- a/third_party/blink/web_tests/external/wpt/resource-timing/resources/resource-loaders.js +++ b/third_party/blink/web_tests/external/wpt/resource-timing/resources/resource-loaders.js
@@ -57,7 +57,7 @@ iframe_with_attrs: async (path, attribute_map, validator) => { const frame = document.createElement("iframe"); if (attribute_map instanceof Object) { - for (const [key, value] in Object.entries(attribute_map)) { + for (const [key, value] of Object.entries(attribute_map)) { frame[key] = value; } } @@ -94,9 +94,14 @@ // Returns a promise that settles once the given path has been fetched // through a synchronous XMLHttpRequest. - xhr_sync: async path => { + xhr_sync: async (path, headers) => { const xhr = new XMLHttpRequest; xhr.open("GET", path, /* async = */ false); + if (headers instanceof Object) { + for (const [key, value] of Object.entries(headers)) { + xhr.setRequestHeader(key, value); + } + } xhr.send(); } };
diff --git a/third_party/blink/web_tests/external/wpt/urlpattern/resources/urlpatterntestdata.json b/third_party/blink/web_tests/external/wpt/urlpattern/resources/urlpatterntestdata.json index e9967ad..5ef045e5 100644 --- a/third_party/blink/web_tests/external/wpt/urlpattern/resources/urlpatterntestdata.json +++ b/third_party/blink/web_tests/external/wpt/urlpattern/resources/urlpatterntestdata.json
@@ -2151,6 +2151,55 @@ } }, { + "pattern": [ "http://[\\:\\:1]/" ], + "inputs": [ "http://[::1]/" ], + "exactly_empty_components": [ "username", "password", "port", "search", + "hash" ], + "expected_obj": { + "protocol": "http", + "hostname": "[\\:\\:1]", + "pathname": "/" + }, + "expected_match": { + "protocol": { "input": "http", "groups": {} }, + "hostname": { "input": "[::1]", "groups": {} }, + "pathname": { "input": "/", "groups": {} } + } + }, + { + "pattern": [ "http://[\\:\\:1]:8080/" ], + "inputs": [ "http://[::1]:8080/" ], + "exactly_empty_components": [ "username", "password", "search", "hash" ], + "expected_obj": { + "protocol": "http", + "hostname": "[\\:\\:1]", + "port": "8080", + "pathname": "/" + }, + "expected_match": { + "protocol": { "input": "http", "groups": {} }, + "hostname": { "input": "[::1]", "groups": {} }, + "port": { "input": "8080", "groups": {} }, + "pathname": { "input": "/", "groups": {} } + } + }, + { + "pattern": [ "http://[\\:\\:a]/" ], + "inputs": [ "http://[::a]/" ], + "exactly_empty_components": [ "username", "password", "port", "search", + "hash" ], + "expected_obj": { + "protocol": "http", + "hostname": "[\\:\\:a]", + "pathname": "/" + }, + "expected_match": { + "protocol": { "input": "http", "groups": {} }, + "hostname": { "input": "[::a]", "groups": {} }, + "pathname": { "input": "/", "groups": {} } + } + }, + { "pattern": [ "https://foo{{@}}example.com" ], "inputs": [ "https://foo@example.com" ], "expected_obj": "error"
diff --git a/third_party/blink/web_tests/external/wpt/webauthn/getcredential-extensions.https.html b/third_party/blink/web_tests/external/wpt/webauthn/getcredential-extensions.https.html index fd8d38d2..85a89bee 100644 --- a/third_party/blink/web_tests/external/wpt/webauthn/getcredential-extensions.https.html +++ b/third_party/blink/web_tests/external/wpt/webauthn/getcredential-extensions.https.html
@@ -49,6 +49,10 @@ new GetCredentialsTest("options.publicKey.extensions", {credProps: true}) .addCredential(credPromise) .runTest("credProps is only supported at registration", "NotSupportedError"); + + new GetCredentialsTest("options.publicKey.extensions", {payment: {isPayment:true}}) + .addCredential(credPromise) + .runTest("Payment extension is only supported at registration", "NotSupportedError"); }); /* JSHINT */
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index a2a37b9..f226bf84 100644 --- a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -3012,6 +3012,7 @@ method fetch method importScripts method queueMicrotask + method reportError method setInterval method setTimeout setter onerror
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-cascade/layer-basic-expected.txt b/third_party/blink/web_tests/platform/linux/external/wpt/css/css-cascade/layer-basic-expected.txt deleted file mode 100644 index 2a9effd..0000000 --- a/third_party/blink/web_tests/platform/linux/external/wpt/css/css-cascade/layer-basic-expected.txt +++ /dev/null
@@ -1,37 +0,0 @@ -This is a testharness.js-based test. -PASS A1 Anonymous layers -FAIL A2 Anonymous layers assert_equals: A2 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A3 Anonymous layers assert_equals: A3 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A4 Anonymous layers assert_equals: A4 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A5 Anonymous layers assert_equals: A5 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A6 Anonymous layers assert_equals: A6 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A7 Anonymous layers assert_equals: A7 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A8 Anonymous layers assert_equals: A8 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A9 Anonymous layers assert_equals: A9 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -PASS B1 Named layers -FAIL B2 Named layers assert_equals: B2 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B3 Named layers assert_equals: B3 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B4 Named layers assert_equals: B4 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B5 Named layers assert_equals: B5 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B6 Named layers assert_equals: B6 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B7 Named layers assert_equals: B7 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B8 Named layers assert_equals: B8 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B9 Named layers assert_equals: B9 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B10 Named layers assert_equals: B10 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C1 Named layers shorthand assert_equals: C1 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C2 Named layers shorthand assert_equals: C2 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C3 Named layers shorthand assert_equals: C3 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C4 Named layers shorthand assert_equals: C4 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C5 Named layers shorthand assert_equals: C5 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D1 Mixed named and anonymous layers assert_equals: D1 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D2 Mixed named and anonymous layers assert_equals: D2 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D3 Mixed named and anonymous layers assert_equals: D3 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D4 Mixed named and anonymous layers assert_equals: D4 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D5 Mixed named and anonymous layers assert_equals: D5 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E1 Statement syntax assert_equals: E1 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E2 Statement syntax assert_equals: E2 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E3 Statement syntax assert_equals: E3 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E4 Statement syntax assert_equals: E4 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E5 Statement syntax assert_equals: E5 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/css/css-cascade/layer-basic-expected.txt b/third_party/blink/web_tests/platform/mac/external/wpt/css/css-cascade/layer-basic-expected.txt deleted file mode 100644 index 2a9effd..0000000 --- a/third_party/blink/web_tests/platform/mac/external/wpt/css/css-cascade/layer-basic-expected.txt +++ /dev/null
@@ -1,37 +0,0 @@ -This is a testharness.js-based test. -PASS A1 Anonymous layers -FAIL A2 Anonymous layers assert_equals: A2 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A3 Anonymous layers assert_equals: A3 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A4 Anonymous layers assert_equals: A4 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A5 Anonymous layers assert_equals: A5 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A6 Anonymous layers assert_equals: A6 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A7 Anonymous layers assert_equals: A7 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A8 Anonymous layers assert_equals: A8 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A9 Anonymous layers assert_equals: A9 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -PASS B1 Named layers -FAIL B2 Named layers assert_equals: B2 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B3 Named layers assert_equals: B3 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B4 Named layers assert_equals: B4 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B5 Named layers assert_equals: B5 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B6 Named layers assert_equals: B6 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B7 Named layers assert_equals: B7 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B8 Named layers assert_equals: B8 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B9 Named layers assert_equals: B9 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B10 Named layers assert_equals: B10 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C1 Named layers shorthand assert_equals: C1 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C2 Named layers shorthand assert_equals: C2 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C3 Named layers shorthand assert_equals: C3 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C4 Named layers shorthand assert_equals: C4 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C5 Named layers shorthand assert_equals: C5 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D1 Mixed named and anonymous layers assert_equals: D1 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D2 Mixed named and anonymous layers assert_equals: D2 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D3 Mixed named and anonymous layers assert_equals: D3 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D4 Mixed named and anonymous layers assert_equals: D4 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D5 Mixed named and anonymous layers assert_equals: D5 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E1 Statement syntax assert_equals: E1 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E2 Statement syntax assert_equals: E2 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E3 Statement syntax assert_equals: E3 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E4 Statement syntax assert_equals: E4 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E5 Statement syntax assert_equals: E5 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/platform/win10.1909/external/wpt/css/css-cascade/layer-basic-expected.txt b/third_party/blink/web_tests/platform/win10.1909/external/wpt/css/css-cascade/layer-basic-expected.txt deleted file mode 100644 index 2a9effd..0000000 --- a/third_party/blink/web_tests/platform/win10.1909/external/wpt/css/css-cascade/layer-basic-expected.txt +++ /dev/null
@@ -1,37 +0,0 @@ -This is a testharness.js-based test. -PASS A1 Anonymous layers -FAIL A2 Anonymous layers assert_equals: A2 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A3 Anonymous layers assert_equals: A3 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A4 Anonymous layers assert_equals: A4 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A5 Anonymous layers assert_equals: A5 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A6 Anonymous layers assert_equals: A6 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL A7 Anonymous layers assert_equals: A7 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A8 Anonymous layers assert_equals: A8 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL A9 Anonymous layers assert_equals: A9 Anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -PASS B1 Named layers -FAIL B2 Named layers assert_equals: B2 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B3 Named layers assert_equals: B3 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(255, 0, 0)" -FAIL B4 Named layers assert_equals: B4 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B5 Named layers assert_equals: B5 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B6 Named layers assert_equals: B6 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B7 Named layers assert_equals: B7 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B8 Named layers assert_equals: B8 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B9 Named layers assert_equals: B9 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL B10 Named layers assert_equals: B10 Named layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C1 Named layers shorthand assert_equals: C1 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C2 Named layers shorthand assert_equals: C2 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C3 Named layers shorthand assert_equals: C3 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C4 Named layers shorthand assert_equals: C4 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL C5 Named layers shorthand assert_equals: C5 Named layers shorthand, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D1 Mixed named and anonymous layers assert_equals: D1 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D2 Mixed named and anonymous layers assert_equals: D2 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D3 Mixed named and anonymous layers assert_equals: D3 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D4 Mixed named and anonymous layers assert_equals: D4 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL D5 Mixed named and anonymous layers assert_equals: D5 Mixed named and anonymous layers, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E1 Statement syntax assert_equals: E1 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E2 Statement syntax assert_equals: E2 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E3 Statement syntax assert_equals: E3 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E4 Statement syntax assert_equals: E4 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -FAIL E5 Statement syntax assert_equals: E5 Statement syntax, target 'first' expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)" -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index a7e1942..02f54c20 100644 --- a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -2765,6 +2765,7 @@ method fetch method importScripts method queueMicrotask + method reportError method setInterval method setTimeout setter onerror
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt index c15a0ae9..34e93e17 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -2916,6 +2916,7 @@ [Worker] method fetch [Worker] method importScripts [Worker] method queueMicrotask +[Worker] method reportError [Worker] method setInterval [Worker] method setTimeout [Worker] setter onerror
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt index 9e0bf6c..41b41d7 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -10167,6 +10167,7 @@ method prompt method queueMicrotask method releaseEvents + method reportError method requestAnimationFrame method requestIdleCallback method resizeBy
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt index 2267945..3a5b0a3 100644 --- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -2648,6 +2648,7 @@ [Worker] method fetch [Worker] method importScripts [Worker] method queueMicrotask +[Worker] method reportError [Worker] method setInterval [Worker] method setTimeout [Worker] setter onerror
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt index 0e1a067..dd5aa89 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -3240,6 +3240,7 @@ [Worker] method fetch [Worker] method importScripts [Worker] method queueMicrotask +[Worker] method reportError [Worker] method setInterval [Worker] method setTimeout [Worker] setter onerror
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index 5415976..78e6bc3 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -11509,6 +11509,7 @@ method prompt method queueMicrotask method releaseEvents + method reportError method requestAnimationFrame method requestIdleCallback method resizeBy
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt index 27fc8f12..eca3fc2 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -2882,6 +2882,7 @@ [Worker] method fetch [Worker] method importScripts [Worker] method queueMicrotask +[Worker] method reportError [Worker] method setInterval [Worker] method setTimeout [Worker] setter onerror
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js index ed525ad..7fdd98c 100644 --- a/third_party/closure_compiler/externs/file_manager_private.js +++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -625,14 +625,6 @@ /** * @typedef {{ - * currentDirectoryURL: (string|undefined), - * selectionURL: (string|undefined) - * }} - */ -chrome.fileManagerPrivate.OpenWindowParams; - -/** - * @typedef {{ * volumeId: string, * writable: boolean, * }} @@ -1277,14 +1269,6 @@ */ chrome.fileManagerPrivate.notifyDriveDialogResult = function(result) {}; -/** - * Creates a new Files app window in the directory provided in `params`. - * @param {!chrome.fileManagerPrivate.OpenWindowParams} params - * @param {function(boolean): void} callback |result| Boolean result returned by - * the invoked function. - */ -chrome.fileManagerPrivate.openWindow = function(params, callback) {}; - /** @type {!ChromeEvent} */ chrome.fileManagerPrivate.onMountCompleted;
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index 252b28d0..64395005 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-11-0-50-gefa1a3590 -Revision: efa1a35907ec678186e0828a78e6d1ee96896404 +Version: VER-2-11-0-52-g7482c98f1 +Revision: 7482c98f1533d1b685113a060f4588f703a81b79 CPEPrefix: cpe:/a:freetype:freetype:2.10.4 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses"
diff --git a/tools/android/native_lib_memory/extract_symbols.py b/tools/android/native_lib_memory/extract_symbols.py index caf6f72..1f5da26 100755 --- a/tools/android/native_lib_memory/extract_symbols.py +++ b/tools/android/native_lib_memory/extract_symbols.py
@@ -18,10 +18,16 @@ import multiprocessing import os import shutil -import SimpleHTTPServer -import SocketServer import sys +# Python 3 moved these. +try: + import SimpleHTTPServer as server + import SocketServer as socketserver +except ModuleNotFoundError: + from http import server + import socketserver + _SRC_PATH = os.path.abspath(os.path.join( os.path.dirname(__file__), os.pardir, os.pardir, os.pardir)) @@ -291,8 +297,8 @@ if args.start_server: os.chdir(args.output_directory) - httpd = SocketServer.TCPServer( - ('', args.port), SimpleHTTPServer.SimpleHTTPRequestHandler) + httpd = socketserver.TCPServer(('', args.port), + server.SimpleHTTPRequestHandler) logging.warning('Serving on port %d', args.port) httpd.serve_forever()
diff --git a/tools/android/native_lib_memory/process_residency.py b/tools/android/native_lib_memory/process_residency.py index 0871e5e..0894c5e 100755 --- a/tools/android/native_lib_memory/process_residency.py +++ b/tools/android/native_lib_memory/process_residency.py
@@ -92,7 +92,7 @@ end = data['end'] _, ax = plt.subplots(figsize=(20, 10)) timestamps = sorted(residency.keys()) - x_max = len(residency.values()[0]) * 4096 + x_max = len(list(residency.values())[0]) * 4096 for t in timestamps: offset_ms = (t - timestamps[0]) / 1e6 incore = [i * 4096 for (i, x) in enumerate(residency[t]) if x]
diff --git a/tools/cygprofile/symbol_extractor.py b/tools/cygprofile/symbol_extractor.py index ca9a2bc..d8e734c2 100644 --- a/tools/cygprofile/symbol_extractor.py +++ b/tools/cygprofile/symbol_extractor.py
@@ -162,7 +162,7 @@ name_to_offsets = collections.defaultdict(list) symbol_infos = [] for line in objdump_lines: - symbol_info = _FromObjdumpLine(line.rstrip('\n')) + symbol_info = _FromObjdumpLine(line.decode('utf-8').rstrip('\n')) if symbol_info is not None: # On ARM the LLD linker inserts pseudo-functions (thunks) that allow # jumping distances farther than 16 MiB. Such thunks are known to often @@ -225,6 +225,7 @@ """ symbol_names = [] for line in lines: + line = line.decode('utf-8') m = _LLVM_NM_LINE_RE.match(line) assert m is not None, line if m.group('symbol_type') not in ['t', 'T', 'w', 'W']: @@ -252,7 +253,7 @@ Returns: [str] A list of symbol names, can be empty. """ - command = (_NM_PATH, '-defined-only', filename) + command = (_NM_PATH, '--defined-only', filename) p = subprocess.Popen(command, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) try:
diff --git a/tools/mac/power/README.md b/tools/mac/power/README.md index 9549824..13d510f1 100644 --- a/tools/mac/power/README.md +++ b/tools/mac/power/README.md
@@ -1,11 +1,81 @@ -# Usage scenario scripts +# Mac power measurement + +## Setting Up + +### Python Virtual Environment +These scripts use python [Virtual Environments](https://docs.python.org/3/tutorial/venv.html). + +Create the venv. Only needs to be done once. +``` +python3 -m venv ./env +``` +Activate the venv. +``` +source ./env/bin/activate +``` +Once the venv is activated, `python` refers to python3. +Upgrade pip and install all python dependencies. +``` +python -m pip install -U pip +python -m pip install -r requirements.txt +``` + +To deactivate venv. +``` +deactivate +``` + +### Chromium build + +If measuring of profiling Chromium it needs to be built with the following args.gn and copied to the "Applications" folder. + + use_goma = true + is_debug = false + is_component_build = false + symbol_level = 0 + blink_symbol_level = 0 + is_official_build = true + +## Getting around sudo password + +To disable asking password for sudo commands (required by powermetrics). +Run `sudo visudo` and add the last line to User specification (replacing `<user>`): +``` +# root and users in group wheel can run anything on any machine as any user +root ALL = (ALL) ALL +%admin ALL = (ALL) ALL +<user> ALL = (ALL) NOPASSWD:ALL +``` + +## DTrace + +Running benchmark.py in profile mode uses `dtrace` to analyse the chromium processes. By default `dtrace` does not work well with [SIP](https://support.apple.com/en-us/HT204899). Disabling SIP as a whole is not recommended and instead should be done only for dtrace using these steps: + +* Reboot in recovery mode +* Start a shell +* Execute `csrutil enable --without dtrace --without debug` +* Reboot + +## benchmark.py + +A tool that allow you to run different browsers under specific usage scenarios and: + +* Measure their impact of system resource use. +* Profile the code that runs and/or is causing wake-ups. (chromium only) + +``` +./benchmark.py ./results --measure +./benchmark.py ./profile --profile_mode cpu_time +``` + +## Usage scenario scripts This directory contains the necessary files to make Chromium based browsers and Safari execute usage scenarios that represent real world usage. The scripts differ slightly from similar tools like telemetry tests in that they work for Safari. -## Scenarios +### Scenarios Scenarios are a set of operations to be applied on a set of URLs. For example: @@ -16,7 +86,7 @@ It's interesting to gather power metrics, profiles and traces for specific scenarios to understand their performance characteristics. -# Usage +### Usage First `generate_scripts.py` needs to be used to convert the templates in `driver_script_templates/` into working AppleScript. The templating allows for the generation of scripts that work with many different @@ -28,7 +98,7 @@ osascript ./driver_scripts/chrome_navigation.scpt ``` -Once the scenario has run it's course the script will exit. If the desired the +Once the scenario has run its course the script will exit. If the desired the browser can be opened by hand before running the scenario to modify the starting state.
diff --git a/tools/mac/power/benchmark.py b/tools/mac/power/benchmark.py new file mode 100755 index 0000000..449a743b --- /dev/null +++ b/tools/mac/power/benchmark.py
@@ -0,0 +1,112 @@ +#!/usr/bin/env python3 + +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import argparse +import logging +import os +import psutil +import signal +import subprocess +import sys +import time + +import utils +from driver import Driver +import generate_scripts + + +def SignalHandler(sig, frame, driver): + """Handle the run being aborted. + """ + #TODO: Use driver to quit everything that was started. + driver.Teardown() + sys.exit(0) + + +def main(): + parser = argparse.ArgumentParser(description='Runs browser power benchmarks') + parser.add_argument("output_dir", help="Output dir") + parser.add_argument('--no-checks', + dest='no_checks', + action='store_true', + help="Invalid environment doesn't throw") + parser.add_argument( + '--measure', + dest='run_measure', + action='store_true', + help="Run measurements of the cpu use of the application.") + + # Profile related arguments + parser.add_argument( + '--profile_mode', + dest='profile_mode', + action='store', + choices=["wakeups", "cpu_time"], + help="Profile the application in one of two modes: wakeups, cpu_time.") + parser.add_argument('--meet-meeting-id', + dest='meet_meeting_id', + action='store', + help='The meeting ID to use for the Meet benchmarks') + parser.add_argument( + '--chrome-user-dir', + dest='chrome_user_dir', + action='store', + help='The user data dir to pass to Chrome via --user-data-dir') + + parser.add_argument('--verbose', + action='store_true', + default=False, + help='Print verbose output.') + + args = parser.parse_args() + + if args.verbose: + log_level = logging.INFO + else: + log_level = logging.WARNING + logging.basicConfig(format='%(levelname)s: %(message)s', level=log_level) + + if args.profile_mode and args.run_measure: + logging.error("Cannot measure and profile at the same time, choose one.") + sys.exit(-1) + + # Generate the runner scripts + extra_args = {} + if args.meet_meeting_id: + extra_args["meeting_id"] = args.meet_meeting_id + generate_scripts.generate_all(extra_args) + + driver = Driver(args.output_dir) + driver.CheckEnv(not args.no_checks) + + signal.signal( + signal.SIGINT, lambda sig, frame: SignalHandler(sig, frame, driver)) + + if args.chrome_user_dir: + chrome_extra_arg = "--user-data-dir=%s" % args.chrome_user_dir + else: + chrome_extra_arg = "--guest" + + # Measure or Profile all defined scenarios. To add/remove some change their + # "skip" attribute in utils.SCENARIOS. + for scenario in utils.SCENARIOS: + + if scenario["browser"] != "Safari": + scenario["extra_args"].append(chrome_extra_arg) + + # TODO(crbug.com/1224994): Allow scenario filtering like gtest_filter. + if not scenario["skip"]: + if args.run_measure: + logging.info(f'Recording scenario {scenario["name"]} ...') + driver.Record(scenario) + + if args.profile_mode: + logging.info(f'Profiling scenario {scenario["name"]} ...') + driver.Profile(scenario, profile_mode=args.profile_mode) + + +if __name__ == "__main__": + main()
diff --git a/tools/mac/power/check_env.sh b/tools/mac/power/check_env.sh new file mode 100755 index 0000000..ba9e845 --- /dev/null +++ b/tools/mac/power/check_env.sh
@@ -0,0 +1,85 @@ +#!/bin/zsh + +# Copyright (c) 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +set -eu + +function SystemProfilerProperty() +{ + local result=$2 + local local_result=$(system_profiler $3| grep -i $1 |\ + cut -d ":" -f 2 | awk '{$1=$1};1') + eval $result="'$local_result'" +} + +function GetPowerProperty() +{ + SystemProfilerProperty $1 $2 "SPPowerDataType" +} + +function GetDisplayProperty() +{ + SystemProfilerProperty $1 $2 "SPDisplaysDataType" +} + +function CompareValue() +{ + if [ "$1" != "$2" ]; then + echo $3 + exit 127 + fi +} + +CheckPowerValue() +{ + # Query value, remove newlines. + GetPowerProperty $1 VALUE + VALUE=$(echo $VALUE|tr -d '\n') + + CompareValue $VALUE $2 $3 +} + +CheckDisplayValue() +{ + # Query value, remove newlines. + GetDisplayProperty $1 VALUE + VALUE=$(echo $VALUE|tr -d '\n') + + CompareValue $VALUE $2 $3 +} + +function CheckProgramNotRunning(){ + if pgrep -x "$1" > /dev/null; then + echo "$2" + exit 127 + fi +} + +function CheckEnv() +{ + # Validate power setup. + CheckPowerValue "charging" "NoNo" "Laptop cannot be charging during test." + CheckPowerValue "connected" "No" "Charger cannot be connected during test." + + # Validate display setup. + CheckDisplayValue "Automatically adjust brightness" "No"\ + "Disable automatic brightness adjustments and unplug external monitors" + + # Use Amphetamine.app to avoid sleeping during the tests. + if ! pgrep -x "Amphetamine" > /dev/null; then + echo "Use Amphetamine to prevent sleep." + exit 127 + fi + CompareValue $(defaults read com.if.Amphetamine "Default Duration") "0"\ + "Default session length in Amphetamine should be unlimited"; + + # Verify that no terminals are running. + # They introduce too much overhead. (As measured with powermetrics) + CheckProgramNotRunning "Terminal" "Do not have a terminal opened. Use SSH."; + CheckProgramNotRunning "iTerm2" "Do not have a terminal opened. Use SSH."; + +} + +CheckEnv
diff --git a/tools/mac/power/driver.py b/tools/mac/power/driver.py new file mode 100644 index 0000000..487ca64 --- /dev/null +++ b/tools/mac/power/driver.py
@@ -0,0 +1,311 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import logging +import os +import psutil +import subprocess +import sys +import time + +import utils + +class Driver: + """Class in charge of running the measurements and keeping track + of the global state needed to do so. + """ + + def __init__(self, output_dir): + """ + Args: + output_dir: A string path of Where the results should be stored. + """ + + self._started_processeds = [] + self.__output_dir = output_dir + + # Make sure there is somewhere to put results. + os.makedirs(f"{self.__output_dir}", exist_ok=True) + + def CheckEnv(self, throw_on_bad_env): + """Verifies that the environment is conducive to proper profiling or + measurements. + + Args: + throw_on_bad_env: False if executions continues no matter what and + only warnings are printed. + + Raises: + SystemExit: When the environment is invalid and throw_on_bad_env is + True. + """ + + if throw_on_bad_env: + logging_function = logging.error + else: + logging_function = logging.warning + + logging.warning("Trying sudo access. Possibly enter password:") + sudo_check = subprocess.Popen(["sudo", "ls"], + stdout=subprocess.DEVNULL, + stderr=subprocess.STDOUT) + sudo_check.wait() + + try: + check_env = subprocess.run(['zsh', '-c', './check_env.sh'], + check=throw_on_bad_env, + capture_output=True) + logging_function(check_env.stdout.decode('ascii')) + except subprocess.CalledProcessError as e: + logging_function(e.stdout.decode('ascii')) + sys.exit(-1) + + # Make sure that no browsers are running which would affect the + # tests. + for browser in utils.get_browser_process_names(): + if self.FindBrowserProcess(browser): + logging_function(f"{browser} already running. \ + Make sure to close it before running again.") + + if throw_on_bad_env: + sys.exit(-1) + + def Teardown(self): + """Cleans up global state after all calls to Record()/Profile(). + + Makes sure that all processes started for measurement/profiling are exited + and that the execution can move on to the next one. + """ + + # Cleanup can't be achieved with a simple call to psutil.waitprocs() because + # some executables are started with sudo and will end up as a zombie + # processes. + for process in self._started_processeds: + logging.info(f"Terminating PID:{process.pid}") + + try: + process.terminate() + process.wait(0.5) + except psutil.NoSuchProcess: + continue + except (psutil.TimeoutExpired, psutil.AccessDenied) as e: + logging.info(f"Terminate failed, moving on to kill.") + + try: + process.kill() + process.wait(0.5) + except psutil.NoSuchProcess: + continue + except (psutil.TimeoutExpired, psutil.AccessDenied) as e: + logging.info(f"Kill failed, trying sudo kill.") + + try: + os.system(f"sudo kill {process.pid}") + process.wait(0.5) + except psutil.NoSuchProcess: + continue + except psutil.TimeoutExpired: + logging.error(f"Could not clean up PID:{process.pid}. Aborting") + sys.exit(-1) + + # Start over for next round. + self._started_processeds.clear() + + def FindBrowserProcess(self, browser): + """Looks for the process associated with |browser|. + + Args: + browser: A string of the browser name + + Returns: + A psutil.process representation of the browser process. + + Raises: + SystemExit: When no process is found for the browser. + """ + + process_name = utils.get_browser_property(browser, 'process_name') + processes = filter(lambda p: p.name() == process_name, + psutil.process_iter()) + browser_process = None + + for process in processes: + if not browser_process: + browser_process = process + else: + logging.error("Too many copies of the browser running, this is wrong") + sys.exit(-1) + + return browser_process + + def RunScenario(self, scenario_config): + """Start the browser and initiate the scenario + + Args: + scenario_config: A dictionary describing the scenario. + + Returns: A psutil.process representation the driver script process. + """ + + scenario_browser = scenario_config["browser"] + + if scenario_browser is not None: + browser_executable = utils.get_browser_property(scenario_browser, + 'executable') + if scenario_browser in ["Chromium", "Chrome", "Canary", "Edge"]: + subprocess.call(["open", "-a", browser_executable, "--args"] + + ["--enable-benchmarking", "--disable-stack-profiler"] + + scenario_config["extra_args"]) + elif scenario_browser == "Safari": + subprocess.call(["open", "-a", browser_executable]) + # Call prep_safari.scpt to make sure the run starts clean. See file + # comment for details. + subprocess.call(["osascript", './driver_scripts/prep_safari.scpt']) + subprocess.call(["open", "-a", browser_executable, "--args"] + + scenario_config["extra_args"]) + + # Wait for the browser to be started and ready for AppleScript commands. + if scenario_browser: + browser_process_name = utils.get_browser_property(scenario_browser, + 'process_name') + browser_process = None + while not browser_process: + browser_process = self.FindBrowserProcess(scenario_config["browser"]) + time.sleep(0.100) + logging.info(f"Waiting for {browser_process_name} to start") + + self._started_processeds.append(browser_process) + + driver_script_args = [ + "osascript", f'./driver_scripts/{scenario_config["driver_script"]}.scpt' + ] + process = subprocess.Popen(driver_script_args) + + return process + + def Record(self, scenario_config): + """Cover the running of the scenario with powermetrics and save + the results + + Args: + scenario_config: A dictionary describing the scenario. + """ + + output_file = \ + f'./{self.__output_dir}/{scenario_config["name"]}_powermetrics.plist' + + with open(output_file, "w") as powermetrics_output: + + # TODO(crbug.com/1224994): Narrow down samplers to only those of interest. + powermetrics_args = [ + "sudo", "powermetrics", "-f", "plist", "--samplers", "all", + "--show-responsible-pid", "--show-process-gpu", + "--show-process-energy", "-i", "60000" + ] + + powermetrics_process = subprocess.Popen(powermetrics_args, + stdout=powermetrics_output, + stdin=subprocess.PIPE) + + self._started_processeds.append(psutil.Process(powermetrics_process.pid)) + + + # No need to add |scenario_process| to |self._started_processeds| as it's + # explicitly waited on. + scenario_process = self.RunScenario(scenario_config) + scenario_process.wait() + + self.Teardown() + + + def GetAllPids(self, browser_process): + """Get the pids for the browser and all children. w + + Args: + browser_process: A psutil.Process object associated with the + browser process. + + Returns: + A list of pids as integers. + """ + + pids = [browser_process.pid] + try: + children = browser_process.children(recursive=True) + except psutil.NoSuchProcess: + return [] + + for child in children: + pids.append(child.pid) + + return pids + + def Profile(self, scenario_config, profile_mode): + """Cover the running of the scenario with DTrace and save the + results. + + Args: + profile_mode: A string describing the Profile mode between "wakeups" + and "cpu_time". + + Raises: + TimeoutExpired: When a DTrace process takes more than 30 seconds to + terminate after the end of the scenario. + """ + + if scenario_config["browser"] != "Chromium": + logging.error("Only Chromium can be profiled! Skipping.") + return + + script_process = self.RunScenario(scenario_config) + browser_process = self.FindBrowserProcess(scenario_config["browser"]) + + # Set up the environment for correct dtrace execution. + dtrace_env = os.environ.copy() + dtrace_env["DYLD_SHARED_REGION"] = "avoid" + + pid_to_subprocess = {} + + with open('./dtrace_log.txt', "w") as dtrace_log: + # Keep looking for child processes as long as the scenario is running. + while script_process.poll() is None: + + # Let some time pass to limit the overhead of this script. + time.sleep(0.100) + logging.info("Looking for child processes") + + # Watch for new processes and follow those too. + for pid in self.GetAllPids(browser_process): + if profile_mode == "wakeups": + probe_def = \ + f"mach_kernel::wakeup/pid == {pid}/ {{ @[ustack()] = count(); }}" + else: + probe_def = \ + f"profile-1001/pid == {pid}/ {{ @[ustack()] = count(); }}" + + dtrace_args = [ + 'sudo', 'dtrace', '-p', f"{pid}", "-o", + f"{self.__output_dir}/{pid}.txt", '-n', probe_def + ] + + if pid not in pid_to_subprocess: + logging.info(f"Found new child!:{pid}") + # No need to add |process| to |self._started_processeds| as it's + # explicitly waited on later. + process = subprocess.Popen(dtrace_args, + env=dtrace_env, + stdout=dtrace_log, + stderr=dtrace_log) + pid_to_subprocess[pid] = process + + script_process.wait() + + # Cleanup executed before waiting for the DTrace processes so that they + # see that the browse is gone. + self.Teardown() + + for pid, dtrace_process in pid_to_subprocess.items(): + logging.info(f"Waiting for dtrace hooked on {pid} to exit") + dtrace_process.wait(30) +
diff --git a/tools/mac/power/driver_scripts_templates/idle.scpt b/tools/mac/power/driver_scripts_templates/idle.scpt index 2db3e90..c0d2d15 100755 --- a/tools/mac/power/driver_scripts_templates/idle.scpt +++ b/tools/mac/power/driver_scripts_templates/idle.scpt
@@ -4,6 +4,6 @@ -- Use of this source code is governed by a BSD-style license that can be -- found in the LICENSE file. --- This script simply waits for |delay| seconds before quiting. +-- This script simply waits for 3600 seconds before quiting. -delay {{ delay }} +delay 3600
diff --git a/tools/mac/power/generate_scripts.py b/tools/mac/power/generate_scripts.py index ec4fa978..61c54db 100755 --- a/tools/mac/power/generate_scripts.py +++ b/tools/mac/power/generate_scripts.py
@@ -102,7 +102,6 @@ for template_file in files: if not template_file.endswith(".scpt") and not template_file.endswith( ".swp"): - print(template_file) if template_file.startswith("safari"): # Generate for Safari render("", template_file, "", extra_args) @@ -118,11 +117,14 @@ modified by hand. """ + args = {"hash_bang": "#!/usr/bin/osascript"} + args = {**args, **extra_args} + shutil.rmtree("driver_scripts/", ignore_errors=True) os.makedirs("driver_scripts", exist_ok=True) # Generate scripts for all scenarios. - render_runner_scripts(extra_args) + render_runner_scripts(args) # Copy the files that don't need any substitutions. for _, _, files in os.walk("./driver_scripts_templates"): @@ -140,7 +142,7 @@ required=False) args = parser.parse_args() - extra_args = {"hash_bang": "#!/usr/bin/osascript"} + extra_args = {} if args.meet_meeting_id: extra_args["meeting_id"] = args.meet_meeting_id
diff --git a/tools/mac/power/utils.py b/tools/mac/power/utils.py index 0033fa3..6610901 100644 --- a/tools/mac/power/utils.py +++ b/tools/mac/power/utils.py
@@ -3,52 +3,119 @@ # found in the LICENSE file. SCENARIOS = [{ - "name": "idle" + "name": "chromium_navigation", + "driver_script": "chromium_navigation", + "browser": "Chromium", + "extra_args": [], + "skip": False +}, { + "name": "idle", + "driver_script": "idle", + "browser": None, + "extra_args": [], + "skip": True }, { "name": "canary_idle_on_youtube_slack", - "browser": "Canary" + "driver_script": "canary_idle_on_youtube", + "browser": "Canary", + "extra_args": ["--enable-features=LudicrousTimerSlack"], + "skip": True }, { "name": "canary_idle_on_youtube_noslack", - "browser": "Canary" + "driver_script": "canary_idle_on_youtube", + "browser": "Canary", + "extra_args": [], + "skip": True }, { "name": "safari_idle_on_youtube", - "browser": "Safari" + "driver_script": "safari_idle_on_youtube", + "browser": "Safari", + "extra_args": [], + "skip": True }, { "name": "canary_idle_on_wiki_slack", - "browser": "Canary" + "driver_script": "canary_idle_on_wiki", + "browser": "Canary", + "extra_args": ["--enable-features=LudicrousTimerSlack"], + "skip": True }, { "name": "canary_idle_on_wiki_noslack", - "browser": "Canary" + "driver_script": "canary_idle_on_wiki", + "browser": "Canary", + "extra_args": [], + "skip": True }, { "name": "chrome_navigation", - "browser": "Chrome" + "driver_script": "chrome_navigation", + "browser": "Chrome", + "extra_args": [], + "skip": True }, { "name": "safari_navigation", - "browser": "Safari" + "driver_script": "safari_navigation", + "browser": "Safari", + "extra_args": [], + "skip": True }, { "name": "chrome_idle_on_wiki", - "browser": "Chrome" + "driver_script": "chrome_idle_on_wiki", + "browser": "Chrome", + "extra_args": [], + "skip": True }, { "name": "safari_idle_on_wiki", - "browser": "Safari" + "driver_script": "safari_idle_on_wiki", + "browser": "Safari", + "extra_args": [], + "skip": True }, { "name": "chrome_idle_on_wiki_hidden", - "browser": "Chrome" + "driver_script": "chrome_idle_on_wiki_hidden", + "browser": "Chrome", + "extra_args": [], + "skip": True }, { "name": "safari_idle_on_wiki_hidden", - "browser": "Safari" + "driver_script": "safari_idle_on_wiki_hidden", + "browser": "Safari", + "extra_args": [], + "skip": True }, { "name": "chrome_idle_on_youtube", - "browser": "Chrome" + "driver_script": "chrome_idle_on_youtube", + "browser": "Chrome", + "extra_args": [], + "skip": True }, { "name": "safari_idle_on_youtube", - "browser": "Safari" + "driver_script": "safari_idle_on_youtube", + "browser": "Safari", + "extra_args": [], + "skip": True }, { "name": "chrome_zero_window", - "browser": "Chrome" + "driver_script": "chrome_zero_window", + "browser": "Chrome", + "extra_args": [], + "skip": True }, { "name": "safari_zero_window", - "browser": "Safari" + "driver_script": "safari_zero_window", + "browser": "Safari", + "extra_args": [], + "skip": True +}, { + "name": "chrome_meet", + "driver_script": "chrome_meet", + "browser": "Chrome", + "extra_args": [], + "skip": True +}, { + "name": "safari_meet", + "driver_script": "safari_meet", + "browser": "Safari", + "extra_args": [], + "skip": True }] BROWSERS_DEFINITION = { @@ -78,3 +145,11 @@ "identifier": "com.apple.Safari" } } + + +def get_browser_property(browser, property_name): + return BROWSERS_DEFINITION[browser][property_name] + + +def get_browser_process_names(): + return BROWSERS_DEFINITION.keys()
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 818f720..b1158e0 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -7187,7 +7187,7 @@ token, and an experimental config which requires it is active"/> <int value="50" label="Unload handler exists in the main frame, and the current - experimental config doesn't permit it to be BFCached. (removed)"/> + experimental config doesn't permit it to be BFCached."/> <int value="51" label="Unload handler exists in a sub frame, and the current experimental config doesn't permit it to be BFCached."/> @@ -9724,6 +9724,11 @@ <int value="1" label="A recurrent error"/> </enum> +<enum name="BooleanRedirected"> + <int value="0" label="Not redirected"/> + <int value="1" label="Redirected"/> +</enum> + <enum name="BooleanRegistered"> <int value="0" label="Not Registered"/> <int value="1" label="Registered"/> @@ -29149,6 +29154,7 @@ <int value="1585" label="OS_DIAGNOSTICS_RUNCPUCACHEROUTINE"/> <int value="1586" label="SCRIPTING_UPDATECONTENTSCRIPTS"/> <int value="1587" label="FILEMANAGERPRIVATE_OPENWINDOW"/> + <int value="1588" label="OS_DIAGNOSTICS_RUNMEMORYROUTINE"/> </enum> <enum name="ExtensionIconState"> @@ -34413,6 +34419,7 @@ <int value="4004" label="CanvasRenderingContext2DFontKerning"/> <int value="4005" label="CanvasRenderingContext2DFontStretch"/> <int value="4006" label="CanvasRenderingContext2DTextRendering"/> + <int value="4007" label="CSSCascadeLayers"/> </enum> <enum name="FeaturePolicyAllowlistType"> @@ -45975,6 +45982,12 @@ <int value="20" label="kOtherReason"/> </enum> +<enum name="LightTheme"> + <int value="0" label="undefined"/> + <int value="1" label="no"/> + <int value="2" label="yes"/> +</enum> + <enum name="LinkGenerationCopiedLinkType"> <int value="0" label="Copied from new right-click menu generation"/> <int value="1" label="Copied from existing highlight right-click menu"/> @@ -47627,6 +47640,7 @@ <int value="-1644308778" label="WASAPIRawAudioCapture:disabled"/> <int value="-1643933608" label="SyncAutofillWalletOfferData:enabled"/> <int value="-1641832607" label="DragToPinTabs:enabled"/> + <int value="-1640944841" label="HardwareSecureDecryption:disabled"/> <int value="-1639534120" label="VaapiVp9kSVCHWEncoding:enabled"/> <int value="-1639050182" label="NavigationPredictorRendererWarmup:enabled"/> <int value="-1638815914" label="enable-experimental-productivity-features"/> @@ -49065,6 +49079,7 @@ <int value="-530799497" label="MacCoreLocationImplementation:enabled"/> <int value="-530480158" label="EnableSuggestedFiles:enabled"/> <int value="-528927088" label="AutofillCreditCardPopupLayout:disabled"/> + <int value="-528441522" label="AppsShortcutDefaultOff:disabled"/> <int value="-528149352" label="WebRtcUseEchoCanceller3:enabled"/> <int value="-527990339" label="ForceEnableFaceAe:enabled"/> <int value="-526236814" label="WebAssemblyTiering:enabled"/> @@ -50972,6 +50987,7 @@ <int value="1019623058" label="ash-enable-shelf-model-synchronization"/> <int value="1019857902" label="disable-hide-inactive-stacked-tab-close-buttons"/> + <int value="1020127284" label="HardwareSecureDecryption:enabled"/> <int value="1021573543" label="QuickSettingsPWA:disabled"/> <int value="1021848000" label="SharedHighlightingUseBlocklist:disabled"/> <int value="1022424308" label="SignedExchangeSubresourcePrefetch:enabled"/> @@ -51830,6 +51846,7 @@ <int value="1691568199" label="AndroidSpellCheckerNonLowEnd:disabled"/> <int value="1692847616" label="ArcEnableWebAppShare:enabled"/> <int value="1693094211" label="FilesNG:disabled"/> + <int value="1693658048" label="AppsShortcutDefaultOff:enabled"/> <int value="1694766748" label="AutofillRestrictUnownedFieldsToFormlessCheckout:enabled"/> <int value="1694798717" label="NewNetErrorPageUI:enabled"/> @@ -59601,6 +59618,12 @@ <int value="1" label="Timed out"/> </enum> +<enum name="NightMode"> + <int value="0" label="undefined"/> + <int value="1" label="no"/> + <int value="2" label="yes"/> +</enum> + <enum name="NormalizedScore"> <int value="0" label="Underflow bucket"/> <int value="1" label="Score in (0, 0.1]"/> @@ -67700,6 +67723,12 @@ <int value="1" label="PriorityChanged"/> </enum> +<enum name="PrivacySandboxAggregationServiceReportStatus"> + <int value="0" label="Ok"/> + <int value="1" label="Network error"/> + <int value="2" label="Server error"/> +</enum> + <enum name="PrivacySandboxReferrer"> <int value="0" label="Privacy Settings"/> <int value="1" label="Cookie Settings Snackbar"/> @@ -88716,12 +88745,48 @@ <int value="8" label="OS yes, WebView on"/> </enum> +<enum name="WebViewForceDarkMode2"> + <int value="0" label="off"/> + <int value="1" label="auto"/> + <int value="2" label="on"/> +</enum> + +<enum name="WebViewInDarkModeVsLightTheme"> + <int value="0" label="WebView dark, light theme undefined"/> + <int value="1" label="WebView dark, light theme no"/> + <int value="2" label="WebView dark, light theme yes"/> + <int value="3" label="WebView light, light theme undefined"/> + <int value="4" label="WebView light, light theme no"/> + <int value="5" label="WebView light, light theme yes"/> +</enum> + +<enum name="WebViewInDarkModeVsNightMode"> + <int value="0" label="WebView dark, night mode undefined"/> + <int value="1" label="WebView dark, night mode off"/> + <int value="2" label="WebView dark, night mode on"/> + <int value="3" label="WebView light, night mode undefined"/> + <int value="4" label="WebView light, night mode off"/> + <int value="5" label="WebView light, night mode on"/> +</enum> + <enum name="WebViewMixedContentMode"> <int value="0" label="Always allow"/> <int value="1" label="Never allow"/> <int value="2" label="Compatibility Mode"/> </enum> +<enum name="WebViewNightModeVsLightTheme"> + <int value="0" label="Night mode undefined, light theme undefined"/> + <int value="1" label="Night mode undefined, light theme no"/> + <int value="2" label="Night mode undefined, light theme yes"/> + <int value="3" label="Night mode off, light theme undefined"/> + <int value="4" label="Night mode off, light theme no"/> + <int value="5" label="Night mode off, light theme yes"/> + <int value="6" label="Night mode on, light theme undefined"/> + <int value="7" label="Night mode on, light theme no"/> + <int value="8" label="Night mode on, light theme yes"/> +</enum> + <enum name="WebViewOpenWebScreenPortion"> <int value="0" label="ZeroPercent"/> <int value="1" label="TenPercent"/> @@ -88742,6 +88807,24 @@ <int value="1" label="OpenWebContentNotVisible"/> </enum> +<enum name="WebViewPrimaryTextLuminanceVsLightTheme"> + <int value="0" label="Text dark, light theme undefined"/> + <int value="1" label="Text dark, light theme no"/> + <int value="2" label="Text dark, light theme yes"/> + <int value="3" label="Text light, light theme undefined"/> + <int value="4" label="Text light, light theme no"/> + <int value="5" label="Text light, light theme yes"/> +</enum> + +<enum name="WebViewPrimaryTextLuminanceVsNightMode"> + <int value="0" label="Text dark, night mode undefined"/> + <int value="1" label="Text dark, night mode off"/> + <int value="2" label="Text dark, night mode on"/> + <int value="3" label="Text light, night mode undefined"/> + <int value="4" label="Text light, night mode off"/> + <int value="5" label="Text light, night mode on"/> +</enum> + <enum name="WebViewUrlScheme"> <int value="0" label="Empty URL"/> <int value="1" label="Unknown scheme"/>
diff --git a/tools/metrics/histograms/metadata/android/histograms.xml b/tools/metrics/histograms/metadata/android/histograms.xml index b07f67b..7574777 100644 --- a/tools/metrics/histograms/metadata/android/histograms.xml +++ b/tools/metrics/histograms/metadata/android/histograms.xml
@@ -3269,6 +3269,109 @@ </summary> </histogram> +<histogram name="Android.WebView.DarkMode.ForceDarkBehavior" + enum="WebViewForceDarkBehavior" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records WebView force dark behavior settings on each main frame navigation + entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.ForceDarkMode" + enum="WebViewForceDarkMode2" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records WebView force dark mode settings on each main frame navigation entry + committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.InDarkMode" enum="Boolean" + expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if WebView is in dark mode on each main frame navigation entry + committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.InDarkModeVsLightTheme" + enum="WebViewInDarkModeVsLightTheme" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if the application has light theme and if WebView is in dark mode on + each main frame navigation entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.InDarkModeVsNightMode" + enum="WebViewInDarkModeVsNightMode" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if the application is in the night mode and if WebView is in dark + mode on each main frame navigation entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.LightTheme" enum="LightTheme" + expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if the application has light theme on each main frame navigation + entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.NightMode" enum="NightMode" + expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records application's night mode bit related to + android.content.res.Configuration.UI_MODE_NIGHT_MASK on each main frame + navigation entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.NightModeVsLightTheme" + enum="WebViewNightModeVsLightTheme" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if application is in night mode and if it has light theme on each + main frame navigation entry committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsLightTheme" + enum="WebViewPrimaryTextLuminanceVsLightTheme" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if the application has light theme and if its theme's + textColorPrimary attribute is light on each main frame navigation entry + committed. + </summary> +</histogram> + +<histogram name="Android.WebView.DarkMode.PrimaryTextLuminanceVsNightMode" + enum="WebViewPrimaryTextLuminanceVsNightMode" expires_after="2022-01-24"> + <owner>michaelbai@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records if the application is in night mode and if its theme's + textColorPrimary attribute is light on each main frame navigation entry + committed. + </summary> +</histogram> + <histogram name="Android.WebView.DevUi.AppLaunch" enum="Boolean" expires_after="2021-12-14"> <owner>ntfschr@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/memory/histograms.xml b/tools/metrics/histograms/metadata/memory/histograms.xml index 410fb95..c075790f 100644 --- a/tools/metrics/histograms/metadata/memory/histograms.xml +++ b/tools/metrics/histograms/metadata/memory/histograms.xml
@@ -2265,6 +2265,15 @@ </summary> </histogram> +<histogram name="Memory.ParkableString.Read.SinceLastDiskWrite" units="ms" + expires_after="M98"> + <owner>lizeb@chromium.org</owner> + <owner>pasko@chromium.org</owner> + <summary> + When reading a parked string from disk, time since it was last parked. + </summary> +</histogram> + <histogram name="Memory.ParkableString.Read.SizeKb" units="KB" expires_after="M98"> <owner>lizeb@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/others/histograms.xml b/tools/metrics/histograms/metadata/others/histograms.xml index 3cc500d..81a9ca8 100644 --- a/tools/metrics/histograms/metadata/others/histograms.xml +++ b/tools/metrics/histograms/metadata/others/histograms.xml
@@ -13197,6 +13197,21 @@ </summary> </histogram> +<histogram name="PrivacySandbox.AggregationService.ReportStatus" + enum="PrivacySandboxAggregationServiceReportStatus" + expires_after="2022-01-16"> + <owner>alexmt@chromium.org</owner> + <owner>linnan@chromium.org</owner> + <summary> + Records the high level request status of each aggregatable report. These + reports are requested by APIs that rely on private, secure aggregation (e.g. + Attribution Reporting API). + + Recorded for every aggregatable report sent. It might retry in case of + failure but only the final status will be counted for each report. + </summary> +</histogram> + <histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError" expires_after="2021-10-04"> <owner>forshaw@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/settings/histograms.xml b/tools/metrics/histograms/metadata/settings/histograms.xml index aa05ae0..9817047 100644 --- a/tools/metrics/histograms/metadata/settings/histograms.xml +++ b/tools/metrics/histograms/metadata/settings/histograms.xml
@@ -30,6 +30,16 @@ </summary> </histogram> +<histogram name="Settings.AllSites.DeprecatedRedirect" enum="BooleanRedirected" + expires_after="M101"> + <owner>sauski@google.com</owner> + <owner>chrome-friendly-settings@google.com</owner> + <summary> + Whether or not navigations to the All Sites page occured because the user + was redirected from the deprecated Site Data page. + </summary> +</histogram> + <histogram name="Settings.AutocompleteSearches.OnStartup" enum="BooleanEnabled" expires_after="M98"> <owner>harrisonsean@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml index 9e4be64..efc2dfbc 100644 --- a/tools/metrics/histograms/metadata/signin/histograms.xml +++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -1424,7 +1424,7 @@ </histogram> <histogram name="Signin.SyncFirstSetupCompleteSource" - enum="SyncFirstSetupCompleteSource" expires_after="2021-10-10"> + enum="SyncFirstSetupCompleteSource" expires_after="2022-04-01"> <owner>triploblastic@chromium.org</owner> <owner>bsazonov@chromium.org</owner> <summary>Tracks where FirstSetupComplete bit is set from.</summary>
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index a144b43..5f5f959 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -457,6 +457,66 @@ </summary> </histogram> +<histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Compact.Cpp" units="ms" + expires_after="M100"> + <owner>omerkatz@chromium.org</owner> + <owner>v8-memory-sheriffs@google.com</owner> + <summary> + Overall duration of compaction on the main thread during the atomic pause of + a garbage collection of the managed C++ heap. There is only a single atomic + pause compaction event per cycle but it may cover several sub-events. + Reported at the end of the garbage collection cycle. + </summary> +</histogram> + +<histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Cpp" units="ms" + expires_after="M100"> + <owner>omerkatz@chromium.org</owner> + <owner>v8-memory-sheriffs@google.com</owner> + <summary> + Overall main thread duration of the atomic pause of a garbage collection of + the managed C++ heap. There is only a single atomic pause event per cycle + but it may cover several sub-events. Reported at the end of the garbage + collection cycle. + </summary> +</histogram> + +<histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Mark.Cpp" units="ms" + expires_after="M100"> + <owner>omerkatz@chromium.org</owner> + <owner>v8-memory-sheriffs@google.com</owner> + <summary> + Overall duration of marking on the main thread during the atomic pause of a + garbage collection of the managed C++ heap. There is only a single atomic + pause marking event per cycle but it may cover several sub-events. Reported + at the end of the garbage collection cycle. + </summary> +</histogram> + +<histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Sweep.Cpp" units="ms" + expires_after="M100"> + <owner>omerkatz@chromium.org</owner> + <owner>v8-memory-sheriffs@google.com</owner> + <summary> + Overall duration of sweeping on the main thread during the atomic pasue of a + garbage collection of the managed C++ heap. There is only a single atomic + pause sweeping event per cycle but it may cover several sub-events. Reported + at the end of the garbage collection cycle. + </summary> +</histogram> + +<histogram name="V8.GC.Cycle.MainThread.Full.Atomic.Weak.Cpp" units="ms" + expires_after="M100"> + <owner>omerkatz@chromium.org</owner> + <owner>v8-memory-sheriffs@google.com</owner> + <summary> + Overall duration of weakness handling on the main thread during the atomic + pause of a garbage collection of the managed C++ heap. There is only a + single atomic pause weakness handling event per cycle but it may cover + several sub-events. Reported at the end of the garbage collection cycle. + </summary> +</histogram> + <histogram name="V8.GC.Cycle.MainThread.Full.Compact.Cpp" units="ms" expires_after="M100"> <owner>omerkatz@chromium.org</owner> @@ -553,6 +613,9 @@ <histogram name="V8.GC.Event.MainThread.Full.Atomic.Compact.Cpp" units="ms" expires_after="M100"> + <obsolete> + Removed 09/2021. Renamed to V8.GC.Cycle.MainThread.Full.Atomic.Compact.Cpp. + </obsolete> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -563,6 +626,9 @@ <histogram name="V8.GC.Event.MainThread.Full.Atomic.Cpp" units="ms" expires_after="M100"> + <obsolete> + Removed 09/2021. Renamed to V8.GC.Cycle.MainThread.Full.Atomic.Cpp. + </obsolete> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -573,6 +639,9 @@ <histogram name="V8.GC.Event.MainThread.Full.Atomic.Mark.Cpp" units="ms" expires_after="M100"> + <obsolete> + Removed 09/2021. Renamed to V8.GC.Cycle.MainThread.Full.Atomic.Mark.Cpp. + </obsolete> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -583,6 +652,9 @@ <histogram name="V8.GC.Event.MainThread.Full.Atomic.Sweep.Cpp" units="ms" expires_after="M100"> + <obsolete> + Removed 09/2021. Renamed to V8.GC.Cycle.MainThread.Full.Atomic.Sweep.Cpp. + </obsolete> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary> @@ -593,6 +665,9 @@ <histogram name="V8.GC.Event.MainThread.Full.Atomic.Weak.Cpp" units="ms" expires_after="M100"> + <obsolete> + Removed 09/2021. Renamed to V8.GC.Cycle.MainThread.Full.Atomic.Weak.Cpp. + </obsolete> <owner>omerkatz@chromium.org</owner> <owner>v8-memory-sheriffs@google.com</owner> <summary>
diff --git a/tools/traffic_annotation/summary/annotations.xml b/tools/traffic_annotation/summary/annotations.xml index 3594782..98c491bb 100644 --- a/tools/traffic_annotation/summary/annotations.xml +++ b/tools/traffic_annotation/summary/annotations.xml
@@ -13,6 +13,7 @@ <item id="adb_client_socket" added_in_milestone="65" hash_code="87775794" type="0" content_hash_code="56654828" os_list="linux,windows" file_path="chrome/browser/devtools/device/adb/adb_client_socket.cc"/> <item id="affiliation_lookup" added_in_milestone="62" hash_code="111904019" type="0" deprecated="2021-07-27" content_hash_code="81061452" file_path=""/> <item id="affiliation_lookup_by_hash" added_in_milestone="87" hash_code="57748571" type="0" content_hash_code="40566404" os_list="linux,windows" file_path="components/password_manager/core/browser/site_affiliation/hash_affiliation_fetcher.cc"/> + <item id="aggregation_service_report" added_in_milestone="95" hash_code="95942194" type="0" content_hash_code="44673922" os_list="linux,windows" file_path="content/browser/aggregation_service/aggregatable_report_sender.cc"/> <item id="android_device_manager_socket" added_in_milestone="65" hash_code="37249086" type="0" content_hash_code="6436865" os_list="linux,windows" file_path="chrome/browser/devtools/device/android_device_manager.cc"/> <item id="android_web_socket" added_in_milestone="65" hash_code="39356976" type="0" content_hash_code="12310113" os_list="linux,windows" file_path="chrome/browser/devtools/device/android_web_socket.cc"/> <item id="appcache_update_job" added_in_milestone="62" hash_code="25790702" type="0" content_hash_code="27424887" os_list="linux,windows" file_path="content/browser/appcache/appcache_update_url_loader_request.cc"/>
diff --git a/tools/traffic_annotation/summary/grouping.xml b/tools/traffic_annotation/summary/grouping.xml index e132abd40..b5bba5f 100644 --- a/tools/traffic_annotation/summary/grouping.xml +++ b/tools/traffic_annotation/summary/grouping.xml
@@ -232,6 +232,9 @@ <sender name="Federated Learning of Cohorts (FLoC)"> <traffic_annotation unique_id="floc_event_logger"/> </sender> + <sender name="Aggregation Service"> + <traffic_annotation unique_id="aggregation_service_report"/> + </sender> </group> <group name="Identity and Security"> <sender name="Accounts, Identity, and Authentication">
diff --git a/ui/compositor/BUILD.gn b/ui/compositor/BUILD.gn index 9f3cca8..5bdfdfaa 100644 --- a/ui/compositor/BUILD.gn +++ b/ui/compositor/BUILD.gn
@@ -19,6 +19,7 @@ "closure_animation_observer.h", "compositor.cc", "compositor.h", + "compositor_animation_observer.cc", "compositor_animation_observer.h", "compositor_export.h", "compositor_lock.cc",
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc index 8d3e9255..2160c38 100644 --- a/ui/compositor/compositor.cc +++ b/ui/compositor/compositor.cc
@@ -595,6 +595,7 @@ for (auto& obs : observer_list_) obs.OnFirstAnimationStarted(this); } + observer->Start(); animation_observer_list_.AddObserver(observer); host_->SetNeedsAnimate(); } @@ -603,6 +604,10 @@ CompositorAnimationObserver* observer) { if (!animation_observer_list_.HasObserver(observer)) return; + + for (auto& aobs : animation_observer_list_) + aobs.Check(); + animation_observer_list_.RemoveObserver(observer); if (animation_observer_list_.empty()) { for (auto& obs : observer_list_)
diff --git a/ui/compositor/compositor_animation_observer.cc b/ui/compositor/compositor_animation_observer.cc new file mode 100644 index 0000000..4350ab0 --- /dev/null +++ b/ui/compositor/compositor_animation_observer.cc
@@ -0,0 +1,47 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/compositor/compositor_animation_observer.h" + +#include "base/logging.h" +#include "base/notreached.h" +#include "base/strings/stringprintf.h" +#include "base/time/time.h" + +namespace ui { + +// Do not fail on SANITIZER builds as they run slow. +#if !DCHECK_IS_ON() || defined(ADDRESS_SANITIZER) || \ + defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ + defined(LEAK_SANITIZER) || defined(UNDEFINED_SANITIZER) +#define NOTREACHED_OR_WARN() LOG(WARNING) +#else +#define NOTREACHED_OR_WARN() NOTREACHED() +#endif + +// Log animations that took more than 15s. When DCHECK is enabled, it will fail +// with DCHECK error. +constexpr base::TimeDelta kThreshold = base::TimeDelta::FromMilliseconds(15000); + +CompositorAnimationObserver::CompositorAnimationObserver( + const base::Location& location) + : location_(location) {} + +CompositorAnimationObserver::~CompositorAnimationObserver() = default; + +void CompositorAnimationObserver::Start() { + start_.emplace(base::TimeTicks::Now()); +} + +void CompositorAnimationObserver::Check() { + if (start_ && (base::TimeTicks::Now() - *start_ > kThreshold)) { + NOTREACHED_OR_WARN() + << "CompositorAnimationObserver is active for too long (" + << (base::TimeTicks::Now() - *start_).InSecondsF() + << "s) location=" << location_.ToString(); + start_.reset(); + } +} + +} // namespace ui
diff --git a/ui/compositor/compositor_animation_observer.h b/ui/compositor/compositor_animation_observer.h index be2b5c5..7b816dc 100644 --- a/ui/compositor/compositor_animation_observer.h +++ b/ui/compositor/compositor_animation_observer.h
@@ -5,7 +5,9 @@ #ifndef UI_COMPOSITOR_COMPOSITOR_ANIMATION_OBSERVER_H_ #define UI_COMPOSITOR_COMPOSITOR_ANIMATION_OBSERVER_H_ +#include "base/location.h" #include "base/time/time.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/compositor/compositor_export.h" namespace ui { @@ -14,10 +16,19 @@ class COMPOSITOR_EXPORT CompositorAnimationObserver { public: - virtual ~CompositorAnimationObserver() {} + explicit CompositorAnimationObserver( + const base::Location& location = FROM_HERE); + virtual ~CompositorAnimationObserver(); virtual void OnAnimationStep(base::TimeTicks timestamp) = 0; virtual void OnCompositingShuttingDown(Compositor* compositor) = 0; + + void Start(); + void Check(); + + private: + base::Location location_; + absl::optional<base::TimeTicks> start_; }; } // namespace ui
diff --git a/ui/file_manager/BUILD.gn b/ui/file_manager/BUILD.gn index b158376..2ffc5fef 100644 --- a/ui/file_manager/BUILD.gn +++ b/ui/file_manager/BUILD.gn
@@ -127,7 +127,6 @@ "file_manager/background/js/volume_manager_util.js", # Files Common: - "file_manager/common/js/api.js", "file_manager/common/js/app_util.js", "file_manager/common/js/async_util.js", "file_manager/common/js/dialog_type.js",
diff --git a/ui/file_manager/file_manager/background/js/BUILD.gn b/ui/file_manager/file_manager/background/js/BUILD.gn index e08be84..3815fd7 100644 --- a/ui/file_manager/file_manager/background/js/BUILD.gn +++ b/ui/file_manager/file_manager/background/js/BUILD.gn
@@ -121,7 +121,6 @@ visibility += related_apps deps = [ ":app_windows", - "//ui/file_manager/file_manager/common/js:api", "//ui/file_manager/file_manager/common/js:app_util", "//ui/file_manager/file_manager/common/js:async_util", "//ui/file_manager/file_manager/common/js:files_app_state",
diff --git a/ui/file_manager/file_manager/background/js/app_window_wrapper.js b/ui/file_manager/file_manager/background/js/app_window_wrapper.js index f746476..cb5db5444 100644 --- a/ui/file_manager/file_manager/background/js/app_window_wrapper.js +++ b/ui/file_manager/file_manager/background/js/app_window_wrapper.js
@@ -6,7 +6,6 @@ import {assertInstanceof} from 'chrome://resources/js/assert.m.js'; -import {openWindow} from '../../common/js/api.js'; import {appUtil} from '../../common/js/app_util.js'; import {AsyncUtil} from '../../common/js/async_util.js'; import {FilesAppState} from '../../common/js/files_app_state.js'; @@ -119,9 +118,8 @@ /** * @return {!Promise<?chrome.app.window.AppWindow>} - * @private */ - async createWindowLegacy_(reopen) { + async createWindow_(reopen) { return await new Promise((resolve, reject) => { // Create a window. chrome.app.window.create(this.url_, this.options_, appWindow => { @@ -204,10 +202,6 @@ // Save application state. this.appState_ = appState; - if (window.isSWA) { - return this.launchSWA_(); - } - // Get similar windows, it means with the same initial url, eg. different // main windows of the Files app. const similarWindows = window.getSimilarWindows(this.url_); @@ -228,7 +222,7 @@ } // Closure creating the window, once all preprocessing tasks are finished. - const appWindow = await this.createWindowLegacy_(reopen); + const appWindow = await this.createWindow_(reopen); // Exit full screen state if it's created as a full screen window. if (appWindow.isFullscreen()) { @@ -255,39 +249,6 @@ } /** - * Opens a new window for the SWA. - * - * @return {Promise} Resolved when the window is launched. - * @private - */ - async launchSWA_() { - const unlock = await this.getLaunchLock(); - try { - await this.createWindowSWA_(); - } catch (error) { - console.error(error); - } finally { - unlock(); - } - } - - /** - * @return {Promise} Resolved when the new window is opened. - * @private - */ - async createWindowSWA_() { - const url = this.appState_.currentDirectoryURL || ''; - const result = await openWindow({ - currentDirectoryURL: url, - selectionURL: this.appState_.selectionURL, - }); - - if (!result) { - throw new Error(`Failed to create window for ${url}`); - } - } - - /** * Handles the onClosed extension API event. * @private */
diff --git a/ui/file_manager/file_manager/common/js/BUILD.gn b/ui/file_manager/file_manager/common/js/BUILD.gn index 911d949..2ae87bfe 100644 --- a/ui/file_manager/file_manager/common/js/BUILD.gn +++ b/ui/file_manager/file_manager/common/js/BUILD.gn
@@ -23,7 +23,6 @@ group("js_modules") { deps = [ - ":api", ":app_util", ":async_util", ":dialog_type", @@ -51,7 +50,6 @@ js_type_check("closure_compile_jsmodules") { deps = [ - ":api", ":app_util", ":async_util", ":error_counter", @@ -100,9 +98,6 @@ ] } -js_library("api") { -} - js_library("app_util") { deps = [ "//ui/file_manager/file_manager/externs:file_manager_private",
diff --git a/ui/file_manager/file_manager/common/js/api.js b/ui/file_manager/file_manager/common/js/api.js deleted file mode 100644 index dea24a694..0000000 --- a/ui/file_manager/file_manager/common/js/api.js +++ /dev/null
@@ -1,43 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview Helpers for APIs used within Files app. - */ - -/** - * Calls the `fn` function which should expect the callback as last argument. - * - * Resolves with the result of the `fn`. - * - * Rejects if there is `chrome.runtime.lastError`. - * - * @param {!function(...?)} fn - * @param {...?} args - * @return {!Promise<?>} - */ -export async function promisify(fn, ...args) { - return new Promise((resolve, reject) => { - const callback = (result) => { - if (chrome.runtime.lastError) { - reject(chrome.runtime.lastError); - } else { - resolve(result); - } - }; - - fn(...args, callback); - }); -} - -/** - * Opens a new window for Files SWA. - * - * @param {?chrome.fileManagerPrivate.OpenWindowParams=} params See - * file_manager_private.idl for details for `params` details. - * @return {!Promise<boolean>} - */ -export async function openWindow(params) { - return promisify(chrome.fileManagerPrivate.openWindow, params); -}
diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc index db0b570..784238d 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.cc
@@ -88,6 +88,34 @@ return true; } +bool GbmPixmapWayland::InitializeBufferFromHandle( + gfx::AcceleratedWidget widget, + gfx::Size size, + gfx::BufferFormat format, + gfx::NativePixmapHandle handle) { + TRACE_EVENT0("wayland", "GbmPixmapWayland::InitializeBufferFromHandle"); + if (!buffer_manager_->gbm_device()) + return false; + + widget_ = widget; + + // Create a buffer object from handle. + gbm_bo_ = buffer_manager_->gbm_device()->CreateBufferFromHandle( + GetFourCCFormatFromBufferFormat(format), size, std::move(handle)); + if (!gbm_bo_) { + LOG(ERROR) << "Cannot create bo with format= " + << gfx::BufferFormatToString(format); + return false; + } + + DVLOG(3) << "Created gbm bo. format= " << gfx::BufferFormatToString(format); + + visible_area_size_ = size; + if (widget_ != gfx::kNullAcceleratedWidget) + CreateDmabufBasedBuffer(); + return true; +} + bool GbmPixmapWayland::AreDmaBufFdsValid() const { return gbm_bo_->AreFdsValid(); }
diff --git a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h index 3568b1d..b37de8d 100644 --- a/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h +++ b/ui/ozone/platform/wayland/gpu/gbm_pixmap_wayland.h
@@ -14,6 +14,7 @@ #include "ui/gfx/geometry/size.h" #include "ui/gfx/linux/gbm_buffer.h" #include "ui/gfx/native_pixmap.h" +#include "ui/gfx/native_pixmap_handle.h" #include "ui/gfx/native_widget_types.h" namespace ui { @@ -38,6 +39,15 @@ gfx::BufferUsage usage, absl::optional<gfx::Size> visible_area_size = absl::nullopt); + // Creates a buffer object from native pixmap handle and initializes the + // pixmap buffer. If |widget| is provided, browser side wl_buffer is also + // created. Otherwise, this pixmap behaves as a staging pixmap and mustn't be + // scheduled as an overlay. + bool InitializeBufferFromHandle(gfx::AcceleratedWidget widget, + gfx::Size size, + gfx::BufferFormat format, + gfx::NativePixmapHandle handle); + // gfx::NativePixmap overrides: bool AreDmaBufFdsValid() const override; int GetDmaBufFd(size_t plane) const override;
diff --git a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc index 63a59d6..2a14dcd 100644 --- a/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc +++ b/ui/ozone/platform/wayland/gpu/wayland_surface_factory.cc
@@ -218,8 +218,17 @@ gfx::Size size, gfx::BufferFormat format, gfx::NativePixmapHandle handle) { - NOTIMPLEMENTED(); +#if defined(WAYLAND_GBM) + scoped_refptr<GbmPixmapWayland> pixmap = + base::MakeRefCounted<GbmPixmapWayland>(buffer_manager_); + + if (!pixmap->InitializeBufferFromHandle(widget, size, format, + std::move(handle))) + return nullptr; + return pixmap; +#else return nullptr; +#endif } } // namespace ui
diff --git a/ui/views/animation/animation_delegate_views.cc b/ui/views/animation/animation_delegate_views.cc index f114d727..60aa212 100644 --- a/ui/views/animation/animation_delegate_views.cc +++ b/ui/views/animation/animation_delegate_views.cc
@@ -4,6 +4,7 @@ #include "ui/views/animation/animation_delegate_views.h" +#include <memory> #include <utility> #include "ui/gfx/animation/animation_container.h" @@ -34,11 +35,11 @@ container_ = container; container_->set_observer(this); - UpdateAnimationRunner(); + UpdateAnimationRunner(FROM_HERE); } void AnimationDelegateViews::OnViewAddedToWidget(View* observed_view) { - UpdateAnimationRunner(); + UpdateAnimationRunner(FROM_HERE); } void AnimationDelegateViews::OnViewRemovedFromWidget(View* observed_view) { @@ -49,7 +50,7 @@ DCHECK(scoped_observation_.IsObservingSource(view_)); scoped_observation_.Reset(); view_ = nullptr; - UpdateAnimationRunner(); + UpdateAnimationRunner(FROM_HERE); } void AnimationDelegateViews::AnimationContainerShuttingDown( @@ -63,7 +64,8 @@ return base::TimeDelta(); } -void AnimationDelegateViews::UpdateAnimationRunner() { +void AnimationDelegateViews::UpdateAnimationRunner( + const base::Location& location) { if (!view_ || !view_->GetWidget() || !view_->GetWidget()->GetCompositor()) { ClearAnimationRunner(); return; @@ -73,7 +75,7 @@ return; auto compositor_animation_runner = - std::make_unique<CompositorAnimationRunner>(view_->GetWidget()); + std::make_unique<CompositorAnimationRunner>(view_->GetWidget(), location); compositor_animation_runner_ = compositor_animation_runner.get(); container_->SetAnimationRunner(std::move(compositor_animation_runner)); }
diff --git a/ui/views/animation/animation_delegate_views.h b/ui/views/animation/animation_delegate_views.h index afe6a72..3d8136cc 100644 --- a/ui/views/animation/animation_delegate_views.h +++ b/ui/views/animation/animation_delegate_views.h
@@ -13,6 +13,10 @@ #include "ui/views/view_observer.h" #include "ui/views/views_export.h" +namespace base { +class Location; +} + namespace views { class CompositorAnimationRunner; @@ -51,7 +55,7 @@ private: // Sets CompositorAnimationRunner to |container_| if possible. Otherwise, // clears AnimationRunner of |container_|. - void UpdateAnimationRunner(); + void UpdateAnimationRunner(const base::Location& location); void ClearAnimationRunner(); View* view_;
diff --git a/ui/views/animation/compositor_animation_runner.cc b/ui/views/animation/compositor_animation_runner.cc index 9d05e3f..4d8cebf 100644 --- a/ui/views/animation/compositor_animation_runner.cc +++ b/ui/views/animation/compositor_animation_runner.cc
@@ -12,8 +12,10 @@ // CompositorAnimationRunner // -CompositorAnimationRunner::CompositorAnimationRunner(Widget* widget) - : widget_(widget) { +CompositorAnimationRunner::CompositorAnimationRunner( + Widget* widget, + const base::Location& location) + : ui::CompositorAnimationObserver(location), widget_(widget) { widget_->AddObserver(this); }
diff --git a/ui/views/animation/compositor_animation_runner.h b/ui/views/animation/compositor_animation_runner.h index 4aaec55..8a8fb3e 100644 --- a/ui/views/animation/compositor_animation_runner.h +++ b/ui/views/animation/compositor_animation_runner.h
@@ -5,7 +5,7 @@ #ifndef UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_ #define UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_ - +#include "base/location.h" #include "base/time/time.h" #include "ui/compositor/compositor.h" #include "ui/compositor/compositor_animation_observer.h" @@ -23,7 +23,9 @@ public ui::CompositorAnimationObserver, public WidgetObserver { public: - explicit CompositorAnimationRunner(Widget* widget); + explicit CompositorAnimationRunner( + Widget* widget, + const base::Location& location = FROM_HERE); CompositorAnimationRunner(CompositorAnimationRunner&) = delete; CompositorAnimationRunner& operator=(CompositorAnimationRunner&) = delete; ~CompositorAnimationRunner() override;
diff --git a/ui/views/corewm/tooltip_controller.cc b/ui/views/corewm/tooltip_controller.cc index 2ac8178..3e6838df 100644 --- a/ui/views/corewm/tooltip_controller.cc +++ b/ui/views/corewm/tooltip_controller.cc
@@ -170,6 +170,11 @@ ResetWindowAtMousePressedIfNeeded(target, /* force_reset */ true); } +bool TooltipController::IsTooltipSetFromKeyboard(aura::Window* target) { + return target && target == state_manager_->tooltip_parent_window() && + state_manager_->tooltip_trigger() == TooltipTrigger::kKeyboard; +} + void TooltipController::SetHideTooltipTimeout(aura::Window* target, base::TimeDelta timeout) { hide_tooltip_timeout_map_[target] = timeout;
diff --git a/ui/views/corewm/tooltip_controller.h b/ui/views/corewm/tooltip_controller.h index 04a42f91d..c0981890 100644 --- a/ui/views/corewm/tooltip_controller.h +++ b/ui/views/corewm/tooltip_controller.h
@@ -57,6 +57,7 @@ void UpdateTooltip(aura::Window* target) override; void UpdateTooltipFromKeyboard(const gfx::Rect& bounds, aura::Window* target) override; + bool IsTooltipSetFromKeyboard(aura::Window* target) override; void SetHideTooltipTimeout(aura::Window* target, base::TimeDelta timeout) override; void SetTooltipsEnabled(bool enable) override;
diff --git a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.html b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.html index 9acf444..54c11194 100644 --- a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.html +++ b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.html
@@ -30,6 +30,9 @@ routines= "[[getRoutineGroup_(routines_.*, RoutineGroup_.GOOGLE_SERVICES)]]"> </routine-group> + <routine-group name="[[i18n('NetworkDiagnosticsArcGroup')]]" + routines="[[getRoutineGroup_(routines_.*, RoutineGroup_.ARC)]]"> + </routine-group> </template> <script src="network_diagnostics.js"></script> </dom-module>
diff --git a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.js b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.js index adc5539..fe00698 100644 --- a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.js +++ b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics.js
@@ -146,6 +146,26 @@ }, ] }, + { + group: RoutineGroup.ARC, + routines: [ + { + name: 'ArcNetworkDiagnosticsPing', + type: diagnosticsMojom.RoutineType.kArcPing, + func: () => this.networkDiagnostics_.runArcPing(), + }, + { + name: 'ArcNetworkDiagnosticsHttp', + type: diagnosticsMojom.RoutineType.kArcHttp, + func: () => this.networkDiagnostics_.runArcHttp(), + }, + { + name: 'ArcNetworkDiagnosticsDnsResolution', + type: diagnosticsMojom.RoutineType.kArcDnsResolution, + func: () => this.networkDiagnostics_.runArcDnsResolution(), + }, + ] + }, ]; const routines = []; @@ -279,7 +299,7 @@ getRoutineProblemsString_(type, problems, translate) { const getString = s => translate ? this.i18n(s) : s; - const problemStrings = []; + let problemStrings = []; switch (type) { case diagnosticsMojom.RoutineType.kSignalStrength: if (!problems.signalStrengthProblems) { @@ -548,12 +568,157 @@ } } break; + + case diagnosticsMojom.RoutineType.kArcPing: + if (!problems.arcPingProblems) { + break; + } + problemStrings = problemStrings.concat( + this.getArcPingProblemStringIds(problems.arcPingProblems) + .map(getString)); + break; + + case diagnosticsMojom.RoutineType.kArcDnsResolution: + if (!problems.arcDnsResolutionProblems) { + break; + } + problemStrings = problemStrings.concat( + this.getArcDnsProblemStringIds(problems.arcDnsResolutionProblems) + .map(getString)); + break; + + case diagnosticsMojom.RoutineType.kArcHttp: + if (!problems.arcHttpProblems) { + break; + } + problemStrings = problemStrings.concat( + this.getArcHttpProblemStringIds(problems.arcHttpProblems) + .map(getString)); + break; } return problemStrings; }, /** + * Converts a collection ArcPingProblem into string identifiers for display. + * + * @param {!Array<diagnosticsMojom.ArcPingProblem>} problems A collection of + * ArcPingProblem. + * @returns {!Array<string>} A collection of string identifiers for each + * problem in the input. + * @private + */ + getArcPingProblemStringIds(problems) { + const problemStringIds = []; + + for (const problem of problems) { + switch (problem) { + case diagnosticsMojom.ArcPingProblem.kFailedToGetArcServiceManager: + case diagnosticsMojom.ArcPingProblem + .kGetManagedPropertiesTimeoutFailure: + problemStringIds.push('ArcRoutineProblem_InternalError'); + break; + case diagnosticsMojom.ArcPingProblem.kFailedToGetNetInstanceForPingTest: + problemStringIds.push('ArcRoutineProblem_ArcNotRunning'); + break; + case diagnosticsMojom.ArcPingProblem.kUnreachableGateway: + problemStringIds.push('GatewayPingProblem_Unreachable'); + break; + case diagnosticsMojom.ArcPingProblem.kFailedToPingDefaultNetwork: + problemStringIds.push('GatewayPingProblem_NoDefaultPing'); + break; + case diagnosticsMojom.ArcPingProblem + .kDefaultNetworkAboveLatencyThreshold: + problemStringIds.push('GatewayPingProblem_DefaultLatency'); + break; + case diagnosticsMojom.ArcPingProblem + .kUnsuccessfulNonDefaultNetworksPings: + problemStringIds.push('GatewayPingProblem_NoNonDefaultPing'); + break; + case diagnosticsMojom.ArcPingProblem + .kNonDefaultNetworksAboveLatencyThreshold: + problemStringIds.push('GatewayPingProblem_NonDefaultLatency'); + } + } + + return problemStringIds; + }, + + /** + * Converts a collection ArcDnsResolutionProblem into string identifiers for + * display. + * + * @param {!Array<diagnosticsMojom.ArcDnsResolutionProblem>} problems A + * collection of ArcDnsResolutionProblem. + * @returns {!Array<string>} A collection of string identifiers for each + * problem in the input. + * @private + */ + getArcDnsProblemStringIds(problems) { + const problemStringIds = []; + + for (const problem of problems) { + switch (problem) { + case diagnosticsMojom.ArcDnsResolutionProblem + .kFailedToGetArcServiceManager: + problemStringIds.push('ArcRoutineProblem_InternalError'); + break; + case diagnosticsMojom.ArcDnsResolutionProblem + .kFailedToGetNetInstanceForDnsResolutionTest: + problemStringIds.push('ArcRoutineProblem_ArcNotRunning'); + break; + case diagnosticsMojom.ArcDnsResolutionProblem.kHighLatency: + problemStringIds.push('DnsLatencyProblem_LatencySlightlyAbove'); + break; + case diagnosticsMojom.ArcDnsResolutionProblem.kVeryHighLatency: + problemStringIds.push('DnsLatencyProblem_LatencySignificantlyAbove'); + break; + case diagnosticsMojom.ArcDnsResolutionProblem.kFailedDnsQueries: + problemStringIds.push('DnsResolutionProblem_FailedResolve'); + break; + } + } + + return problemStringIds; + }, + + /** + * Converts a collection ArcHttpProblem into string identifiers for display. + * + * @param {!Array<diagnosticsMojom.ArcHttpProblem>} problems A collection of + * ArcHttpProblem. + * @returns {!Array<string>} A collection of string identifiers for each + * problem in the input. + * @private + */ + getArcHttpProblemStringIds(problems) { + const problemStringIds = []; + + for (const problem of problems) { + switch (problem) { + case diagnosticsMojom.ArcHttpProblem.kFailedToGetArcServiceManager: + problemStringIds.push('ArcRoutineProblem_InternalError'); + break; + case diagnosticsMojom.ArcHttpProblem.kFailedToGetNetInstanceForHttpTest: + problemStringIds.push('ArcRoutineProblem_ArcNotRunning'); + break; + case diagnosticsMojom.ArcHttpProblem.kHighLatency: + problemStringIds.push('ArcHttpProblem_HighLatency'); + break; + case diagnosticsMojom.ArcHttpProblem.kVeryHighLatency: + problemStringIds.push('ArcHttpProblem_VeryHighLatency'); + break; + case diagnosticsMojom.ArcHttpProblem.kFailedHttpRequests: + problemStringIds.push('ArcHttpProblem_FailedHttpRequests'); + break; + } + } + + return problemStringIds; + }, + + /** * @param {!chromeos.networkDiagnostics.mojom.RoutineVerdict} verdict * @return {string} Untranslated string for a network diagnostic verdict * @private
diff --git a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics_types.js b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics_types.js index 79cee98ca..8d7cea6 100644 --- a/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics_types.js +++ b/ui/webui/resources/cr_components/chromeos/network_health/network_diagnostics_types.js
@@ -47,6 +47,7 @@ FIREWALL: 4, DNS: 5, GOOGLE_SERVICES: 6, + ARC: 7 }; /* #export */ const Icons = {
diff --git a/ui/wm/public/tooltip_client.h b/ui/wm/public/tooltip_client.h index 6cbc3c9..279c38b4 100644 --- a/ui/wm/public/tooltip_client.h +++ b/ui/wm/public/tooltip_client.h
@@ -36,6 +36,9 @@ virtual void UpdateTooltipFromKeyboard(const gfx::Rect& bounds, aura::Window* target) = 0; + // Returns true if the tooltip was set from a keyboard action. + virtual bool IsTooltipSetFromKeyboard(aura::Window* target) = 0; + // Sets the time after which the tooltip is hidden for Window |target|. If // |timeout_in_ms| is <= 0, the tooltip is shown indefinitely. virtual void SetHideTooltipTimeout(aura::Window* target,
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn index 5c8d18c..6118d42 100644 --- a/weblayer/BUILD.gn +++ b/weblayer/BUILD.gn
@@ -639,8 +639,6 @@ "browser/new_tab_callback_proxy.h", "browser/proxying_url_loader_factory_impl.cc", "browser/proxying_url_loader_factory_impl.h", - "browser/safe_browsing/client_side_detection_service_delegate.cc", - "browser/safe_browsing/client_side_detection_service_delegate.h", "browser/safe_browsing/client_side_detection_service_factory.cc", "browser/safe_browsing/client_side_detection_service_factory.h", "browser/safe_browsing/real_time_url_lookup_service_factory.cc", @@ -653,6 +651,8 @@ "browser/safe_browsing/url_checker_delegate_impl.h", "browser/safe_browsing/weblayer_client_side_detection_host_delegate.cc", "browser/safe_browsing/weblayer_client_side_detection_host_delegate.h", + "browser/safe_browsing/weblayer_client_side_detection_service_delegate.cc", + "browser/safe_browsing/weblayer_client_side_detection_service_delegate.h", "browser/safe_browsing/weblayer_safe_browsing_blocking_page_factory.cc", "browser/safe_browsing/weblayer_safe_browsing_blocking_page_factory.h", "browser/safe_browsing/weblayer_safe_browsing_tab_observer_delegate.cc",
diff --git a/weblayer/browser/safe_browsing/client_side_detection_service_factory.cc b/weblayer/browser/safe_browsing/client_side_detection_service_factory.cc index 9d22cabda..00e2282 100644 --- a/weblayer/browser/safe_browsing/client_side_detection_service_factory.cc +++ b/weblayer/browser/safe_browsing/client_side_detection_service_factory.cc
@@ -10,7 +10,7 @@ #include "weblayer/browser/browser_context_impl.h" #include "weblayer/browser/browser_process.h" #include "weblayer/browser/feature_list_creator.h" -#include "weblayer/browser/safe_browsing/client_side_detection_service_delegate.h" +#include "weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.h" #include "weblayer/common/features.h" namespace weblayer { @@ -46,7 +46,7 @@ KeyedService* ClientSideDetectionServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { return new safe_browsing::ClientSideDetectionService( - std::make_unique<ClientSideDetectionServiceDelegate>( + std::make_unique<WebLayerClientSideDetectionServiceDelegate>( static_cast<BrowserContextImpl*>(context))); }
diff --git a/weblayer/browser/safe_browsing/client_side_detection_service_delegate.cc b/weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.cc similarity index 77% rename from weblayer/browser/safe_browsing/client_side_detection_service_delegate.cc rename to weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.cc index badb1336..4326356 100644 --- a/weblayer/browser/safe_browsing/client_side_detection_service_delegate.cc +++ b/weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.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 "weblayer/browser/safe_browsing/client_side_detection_service_delegate.h" +#include "weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.h" #include "components/prefs/pref_service.h" #include "components/safe_browsing/core/common/proto/csd.pb.h" @@ -15,33 +15,34 @@ namespace weblayer { -ClientSideDetectionServiceDelegate::ClientSideDetectionServiceDelegate( - BrowserContextImpl* browser_context) +WebLayerClientSideDetectionServiceDelegate:: + WebLayerClientSideDetectionServiceDelegate( + BrowserContextImpl* browser_context) : browser_context_(browser_context) {} -ClientSideDetectionServiceDelegate::~ClientSideDetectionServiceDelegate() = - default; +WebLayerClientSideDetectionServiceDelegate:: + ~WebLayerClientSideDetectionServiceDelegate() = default; -PrefService* ClientSideDetectionServiceDelegate::GetPrefs() { +PrefService* WebLayerClientSideDetectionServiceDelegate::GetPrefs() { DCHECK(browser_context_); return browser_context_->pref_service(); } scoped_refptr<network::SharedURLLoaderFactory> -ClientSideDetectionServiceDelegate::GetURLLoaderFactory() { +WebLayerClientSideDetectionServiceDelegate::GetURLLoaderFactory() { return browser_context_->GetDefaultStoragePartition() ->GetURLLoaderFactoryForBrowserProcess(); } scoped_refptr<network::SharedURLLoaderFactory> -ClientSideDetectionServiceDelegate::GetSafeBrowsingURLLoaderFactory() { +WebLayerClientSideDetectionServiceDelegate::GetSafeBrowsingURLLoaderFactory() { SafeBrowsingService* sb_service = BrowserProcess::GetInstance()->GetSafeBrowsingService(); return sb_service->GetURLLoaderFactory(); } safe_browsing::ChromeUserPopulation -ClientSideDetectionServiceDelegate::GetUserPopulation() { +WebLayerClientSideDetectionServiceDelegate::GetUserPopulation() { safe_browsing::ChromeUserPopulation population; if (safe_browsing::IsEnhancedProtectionEnabled(*GetPrefs())) { population.set_user_population(
diff --git a/weblayer/browser/safe_browsing/client_side_detection_service_delegate.h b/weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.h similarity index 63% rename from weblayer/browser/safe_browsing/client_side_detection_service_delegate.h rename to weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.h index 0c4063a..555eae9 100644 --- a/weblayer/browser/safe_browsing/client_side_detection_service_delegate.h +++ b/weblayer/browser/safe_browsing/weblayer_client_side_detection_service_delegate.h
@@ -2,20 +2,20 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef WEBLAYER_BROWSER_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ -#define WEBLAYER_BROWSER_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#ifndef WEBLAYER_BROWSER_SAFE_BROWSING_WEBLAYER_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#define WEBLAYER_BROWSER_SAFE_BROWSING_WEBLAYER_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ #include "components/safe_browsing/content/browser/client_side_detection_service.h" #include "weblayer/browser/browser_context_impl.h" namespace weblayer { -class ClientSideDetectionServiceDelegate +class WebLayerClientSideDetectionServiceDelegate : public safe_browsing::ClientSideDetectionService::Delegate { public: - explicit ClientSideDetectionServiceDelegate( + explicit WebLayerClientSideDetectionServiceDelegate( BrowserContextImpl* browser_context); - ~ClientSideDetectionServiceDelegate() override; + ~WebLayerClientSideDetectionServiceDelegate() override; // ClientSideDetectionService::Delegate implementation. PrefService* GetPrefs() override; @@ -27,9 +27,9 @@ private: BrowserContextImpl* browser_context_; - DISALLOW_COPY_AND_ASSIGN(ClientSideDetectionServiceDelegate); + DISALLOW_COPY_AND_ASSIGN(WebLayerClientSideDetectionServiceDelegate); }; } // namespace weblayer -#endif // WEBLAYER_BROWSER_SAFE_BROWSING_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_ +#endif // WEBLAYER_BROWSER_SAFE_BROWSING_WEBLAYER_CLIENT_SIDE_DETECTION_SERVICE_DELEGATE_H_