diff --git a/AUTHORS b/AUTHORS index 6a6a542..a619990 100644 --- a/AUTHORS +++ b/AUTHORS
@@ -791,6 +791,7 @@ PaweÅ‚ Hajdan jr <phajdan.jr@gmail.com> Piotr Zarycki <piotr.zarycki@gmail.com> Payal Pandey <payal.pandey@samsung.com> +Pedro Tôrres <t0rr3s.p3dr0@gmail.com> Peng Hu <penghu@tencent.com> Peng Jiang <leiyi.jp@gmail.com> Peng Xinchao <pxinchao@gmail.com>
diff --git a/DEPS b/DEPS index dfa5c606..8321df55 100644 --- a/DEPS +++ b/DEPS
@@ -200,11 +200,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '5b589fd273516c38c7d00c81bdbaedcc7ab4db3f', + 'skia_revision': '416fe32ce119762b58289e38d5d5149bd1ce724a', # 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': '779fa622348c3fab46d3337764c3eaf19e684a42', + 'v8_revision': 'f1e2bbd80f2e2eacf7e043e18ee55f0b8cf22171', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -212,7 +212,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '619ae0038825cfc8c53ba50e292d2930af7f8cd8', + 'angle_revision': '3f564fc76ea8a556d628517b055af85c27a60bc3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -267,7 +267,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': '146912bb62b7ca0f77478424a23c611a613480f2', + 'catapult_revision': '5537c0394234a7fdd580c4c5b5a943d7c934e400', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -919,7 +919,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f819411f2a3c1eef1e8c5f67fee84314adae4f2f', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '1af7968d686d4492359a695eb57636f9d355f488', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -1274,7 +1274,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + '4d25bf856b135ed547abd259e7d7d9243d68bf74', + Var('chromium_git') + '/openscreen' + '@' + '4654f2b60f7a3fdb1a84d39d6504ba57be77f863', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '97cfe495bb7a3853266b646d1c79e169387f9c7a', @@ -1291,7 +1291,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f37338cdaa2126eef2a11e1a6f0cb075888c20e6', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '42433abb9596f1f471251070f7fd7d135c3e9df0', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1369,7 +1369,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'cTNPR-L-CEUev7JulIzcVaJAnqnMLJNgtZ6WiwQlFi0C' + 'version': 'uQdbvtcP840HCVMjrZtUTrYeUgSD_J2rxG1WcyDUbvMC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1623,7 +1623,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@236d4f36e63d65e1dec7c54eb86b4ecefbf420e8', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d96af00c928618697579b3829f6806ebc8ad0882', 'condition': 'checkout_src_internal', },
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 9fdb641..233b43a 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -496,7 +496,9 @@ private ContentCaptureConsumer mContentCaptureConsumer; + private AwDisplayCutoutController mDisplayCutoutController; private final AwDisplayModeController mDisplayModeController; + private final Rect mCachedSafeAreaRect = new Rect(); private static class WebContentsInternalsHolder implements WebContents.InternalsHolder { private final WeakReference<AwContents> mAwContentsRef; @@ -960,6 +962,25 @@ return windowAndroid.getDisplay().getDisplayHeight(); } }, containerView); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P + && AwFeatureList.isEnabled(AwFeatures.WEBVIEW_DISPLAY_CUTOUT)) { + mDisplayCutoutController = + new AwDisplayCutoutController(new AwDisplayCutoutController.Delegate() { + @Override + public float getDipScale() { + WindowAndroid windowAndroid = mWindowAndroid.getWindowAndroid(); + return windowAndroid.getDisplay().getDipScale(); + } + + @Override + public void setDisplayCutoutSafeArea( + AwDisplayCutoutController.Insets insets) { + if (mWebContents == null) return; + mWebContents.setDisplayCutoutSafeArea( + insets.toRect(mCachedSafeAreaRect)); + } + }, containerView); + } mRendererPriority = RendererPriority.HIGH; mSettings = settings; updateDefaultLocale(); @@ -1205,6 +1226,9 @@ mContainerView.requestLayout(); if (mAutofillProvider != null) mAutofillProvider.onContainerViewChanged(mContainerView); mDisplayModeController.setCurrentContainerView(mContainerView); + if (mDisplayCutoutController != null) { + mDisplayCutoutController.setCurrentContainerView(mContainerView); + } } // This class destroys the WindowAndroid when after it is gc-ed. @@ -3004,6 +3028,8 @@ AwOnPreDrawListener listener = getOrCreateOnPreDrawListener(mContainerView); listener.trackContents(this); } + + if (mDisplayCutoutController != null) mDisplayCutoutController.onAttachedToWindow(); } private AwOnPreDrawListener getOrCreateOnPreDrawListener(ViewGroup viewGroup) { @@ -3085,6 +3111,7 @@ */ public void onSizeChanged(int w, int h, int ow, int oh) { mAwViewMethods.onSizeChanged(w, h, ow, oh); + if (mDisplayCutoutController != null) mDisplayCutoutController.onSizeChanged(); } /** @@ -3378,6 +3405,11 @@ return AwContentsJni.get().getRenderProcess(mNativeAwContents, AwContents.this); } + @VisibleForTesting + public AwDisplayCutoutController getDisplayCutoutController() { + return mDisplayCutoutController; + } + public int getDisplayMode() { return mDisplayModeController.getDisplayMode(); }
diff --git a/android_webview/java/src/org/chromium/android_webview/AwDisplayCutoutController.java b/android_webview/java/src/org/chromium/android_webview/AwDisplayCutoutController.java index a48b6b9b..449a9def 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwDisplayCutoutController.java +++ b/android_webview/java/src/org/chromium/android_webview/AwDisplayCutoutController.java
@@ -4,9 +4,7 @@ package org.chromium.android_webview; -import android.annotation.SuppressLint; import android.annotation.TargetApi; -import android.graphics.Matrix; import android.graphics.Rect; import android.os.Build; import android.view.DisplayCutout; @@ -36,10 +34,6 @@ public interface Delegate { /** @return The DIP scale. */ float getDipScale(); - /** @return The display width. */ - int getDisplayWidth(); - /** @return The display height. */ - int getDisplayHeight(); /** * Set display cutout safe area such that webpage can read safe-area-insets CSS properties. * Note that this can be called with the same parameter repeatedly, and the embedder needs @@ -109,14 +103,6 @@ private Delegate mDelegate; private View mContainerView; - // Reuse these structures to minimize memory impact. - private static int[] sCachedLocationOnScreen = {0, 0}; - private Insets mCachedViewInsets = new Insets(); - private Rect mCachedViewRect = new Rect(); - private Rect mCachedWindowRect = new Rect(); - private Rect mCachedDisplayRect = new Rect(); - private Matrix mCachedMatrix = new Matrix(); - /** * Constructor for AwDisplayCutoutController. * @@ -204,78 +190,18 @@ */ @VisibleForTesting public void onApplyWindowInsetsInternal(final Insets displayCutoutInsets) { - // Copy such that we can log the original value. - mCachedViewInsets.set(displayCutoutInsets); - - getViewRectOnScreen(mContainerView, mCachedViewRect); - getViewRectOnScreen(mContainerView.getRootView(), mCachedWindowRect); - - // Get display coordinates. - int displayWidth = mDelegate.getDisplayWidth(); - int displayHeight = mDelegate.getDisplayHeight(); - mCachedDisplayRect.set(0, 0, displayWidth, displayHeight); - float dipScale = mDelegate.getDipScale(); - - if (!mCachedViewRect.equals(mCachedDisplayRect)) { - // We apply window insets only when webview is occupying the entire window and display. - // Checking the window rect is more complicated and therefore not doing it for now, but - // there can still be cases where the window is a bit off. - if (DEBUG) { - Log.i(TAG, "WebView is not occupying the entire screen, so no insets applied."); - } - mCachedViewInsets.set(0, 0, 0, 0); - } else if (!mCachedViewRect.equals(mCachedWindowRect)) { - if (DEBUG) { - Log.i(TAG, "WebView is not occupying the entire window, so no insets applied."); - } - mCachedViewInsets.set(0, 0, 0, 0); - } else if (hasTransform()) { - if (DEBUG) { - Log.i(TAG, "WebView is rotated or scaled, so no insets applied."); - } - mCachedViewInsets.set(0, 0, 0, 0); - } else { - // We only apply this logic when webview is occupying the entire screen. - adjustInsetsForScale(mCachedViewInsets, dipScale); - } + // We only apply this logic when webview is occupying the entire screen. + adjustInsetsForScale(displayCutoutInsets, dipScale); if (DEBUG) { Log.i(TAG, - "onApplyWindowInsetsInternal. displayCutoutInsets: " + displayCutoutInsets - + ", view rect: " + mCachedViewRect + ", display rect: " - + mCachedDisplayRect + ", window rect: " + mCachedWindowRect - + ", dip scale: " + dipScale + ", viewInsets: " + mCachedViewInsets); + "onApplyWindowInsetsInternal. insets: " + displayCutoutInsets + + ", dip scale: " + dipScale); } - mDelegate.setDisplayCutoutSafeArea(mCachedViewInsets); - } - - private static void getViewRectOnScreen(View view, Rect rect) { - if (view == null) { - rect.set(0, 0, 0, 0); - return; - } - view.getLocationOnScreen(sCachedLocationOnScreen); - int width = view.getMeasuredWidth(); - int height = view.getMeasuredHeight(); - - rect.set(sCachedLocationOnScreen[0], sCachedLocationOnScreen[1], - sCachedLocationOnScreen[0] + width, sCachedLocationOnScreen[1] + height); - } - - @SuppressLint("NewApi") // need this exception since we will try using Q API in P - private boolean hasTransform() { - mCachedMatrix.reset(); // set to identity - // Check if a view coordinates transforms to screen coordinates that is not an identity - // matrix, which means that view is rotated or scaled in regards to the screen. - // This API got hidden from L, and readded in API 29 (Q). It seems that we can call this - // on P most of the time, but adding try-catch just in case. - try { - mContainerView.transformMatrixToGlobal(mCachedMatrix); - } catch (Throwable e) { - return true; - } - return !mCachedMatrix.isIdentity(); + // Note that internally we apply this logic only when the display is in fullscreen mode. + // See AwDisplayModeController for more details on how we check the fullscreen mode. + mDelegate.setDisplayCutoutSafeArea(displayCutoutInsets); } private void onUpdateWindowInsets() {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java index 315d15c..6e570c7 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwActivityTestRule.java
@@ -7,6 +7,7 @@ import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout; import android.content.Context; +import android.content.Intent; import android.support.test.InstrumentationRegistry; import android.support.test.rule.ActivityTestRule; import android.util.AndroidRuntimeException; @@ -120,9 +121,22 @@ TestThreadUtils.runOnUiThreadBlocking(() -> { mAwContentsDestroyedInTearDown.clear(); }); } + public boolean needsHideActionBar() { + return false; + } + + private Intent getLaunchIntent() { + if (needsHideActionBar()) { + Intent intent = getActivityIntent(); + intent.putExtra(AwTestRunnerActivity.FLAG_HIDE_ACTION_BAR, true); + return intent; + } + return null; + } + public AwTestRunnerActivity launchActivity() { if (getActivity() == null) { - return launchActivity(null); + return launchActivity(getLaunchIntent()); } return getActivity(); }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwDisplayCutoutTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwDisplayCutoutTest.java new file mode 100644 index 0000000..a6153f9 --- /dev/null +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwDisplayCutoutTest.java
@@ -0,0 +1,146 @@ +// Copyright 2020 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.test; + +import android.app.Activity; +import android.os.Build; +import android.view.View; +import android.view.WindowManager; + +import androidx.test.filters.SmallTest; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.android_webview.AwContents; +import org.chromium.android_webview.AwDisplayCutoutController.Insets; +import org.chromium.android_webview.common.AwFeatures; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.MinAndroidSdkLevel; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.net.test.util.TestWebServer; + +/** + * Tests for DisplayCutout. + */ +@RunWith(AwJUnit4ClassRunner.class) +@MinAndroidSdkLevel(Build.VERSION_CODES.P) +@CommandLineFlags.Add({"enable-features=" + AwFeatures.WEBVIEW_DISPLAY_CUTOUT}) +public class AwDisplayCutoutTest { + private static final String TEST_HTML = "<html><head><style>\n" + + "body {\n" + + " margin: 0;\n" + + " padding: 0pt 0pt 0pt 0pt;\n" + + "}\n" + + "div {\n" + + " margin: 0;\n" + + " padding: env(safe-area-inset-top) " + + " env(safe-area-inset-right)" + + " env(safe-area-inset-bottom)" + + " env(safe-area-inset-left);\n" + + "}\n" + + "</style></head><body>\n" + + "<div id='text'>" + + "On notched phones, there should be enough padding on the top" + + " to not have this text appear under the statusbar/notch.\n" + + "</div>\n" + + "</body></html>"; + + @Rule + public AwActivityTestRule mActivityTestRule = new AwActivityTestRule() { + @Override + public boolean needsHideActionBar() { + // If action bar is showing, WebView cannot be fully occupying the screen. + return true; + } + }; + + private TestWebServer mWebServer; + private TestAwContentsClient mContentsClient; + private AwTestContainerView mContainerView; + private AwContents mAwContents; + + @Before + public void setUp() throws Exception { + mWebServer = TestWebServer.start(); + + mContentsClient = new TestAwContentsClient(); + mContainerView = mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient); + mAwContents = mContainerView.getAwContents(); + AwActivityTestRule.enableJavaScriptOnUiThread(mAwContents); + + // In pre-R, we need to explicitly set this to draw under notch. + TestThreadUtils.runOnUiThreadBlocking(() -> { + Activity activity = mActivityTestRule.getActivity(); + activity.getWindow().getAttributes().layoutInDisplayCutoutMode = + WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; + }); + } + + @After + public void tearDown() { + mWebServer.shutdown(); + } + + private void setFullscreen(boolean fullscreen) { + TestThreadUtils.runOnUiThreadBlocking(() -> { + Activity activity = mActivityTestRule.getActivity(); + View decor = activity.getWindow().getDecorView(); + + int systemUiVisibility = decor.getSystemUiVisibility(); + int flags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + if (fullscreen) { + activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + systemUiVisibility |= flags; + } else { + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + systemUiVisibility &= flags; + } + decor.setSystemUiVisibility(systemUiVisibility); + }); + } + + @Test + @SmallTest + public void testNoSafeAreaSet() throws Throwable { + setFullscreen(true); + mActivityTestRule.loadHtmlSync( + mAwContents, mContentsClient.getOnPageFinishedHelper(), TEST_HTML); + // Reset safe area just in case we have a notch. + Insets insets = new Insets(0, 0, 0, 0); + TestThreadUtils.runOnUiThreadBlocking(() -> { + mAwContents.getDisplayCutoutController().onApplyWindowInsetsInternal(insets); + }); + final String code = "window.getComputedStyle(document.getElementById('text'))" + + ".getPropertyValue('padding-top')"; + Assert.assertEquals("\"0px\"", + mActivityTestRule.executeJavaScriptAndWaitForResult( + mAwContents, mContentsClient, code)); + } + + @Test + @SmallTest + public void testSafeAreaSet() throws Throwable { + setFullscreen(true); + mActivityTestRule.loadHtmlSync( + mAwContents, mContentsClient.getOnPageFinishedHelper(), TEST_HTML); + Insets insets = new Insets(0, 130, 0, 0); + TestThreadUtils.runOnUiThreadBlocking(() -> { + mAwContents.getDisplayCutoutController().onApplyWindowInsetsInternal(insets); + }); + final String code = "window.getComputedStyle(document.getElementById('text'))" + + ".getPropertyValue('padding-top')"; + Assert.assertNotEquals("\"0px\"", + mActivityTestRule.executeJavaScriptAndWaitForResult( + mAwContents, mContentsClient, code)); + } +} \ No newline at end of file
diff --git a/android_webview/junit/src/org/chromium/android_webview/robolectric/AwDisplayCutoutControllerTest.java b/android_webview/junit/src/org/chromium/android_webview/robolectric/AwDisplayCutoutControllerTest.java index 8fe17c2..5866d66 100644 --- a/android_webview/junit/src/org/chromium/android_webview/robolectric/AwDisplayCutoutControllerTest.java +++ b/android_webview/junit/src/org/chromium/android_webview/robolectric/AwDisplayCutoutControllerTest.java
@@ -93,27 +93,11 @@ // Set up default values. setWindowInsets(new Rect(20, 40, 60, 80)); mDipScale = 2.0f; - mViewWidth = 300; - mViewHeight = 400; - mDisplayWidth = 300; - mDisplayHeight = 400; - mGlobalTransformMatrix = new Matrix(); // identity matrix // Set up the view. doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { - int[] loc = (int[]) (invocation.getArguments()[0]); - loc[0] = mLocationOnScreen[0]; - loc[1] = mLocationOnScreen[1]; - return null; - } - }) - .when(mView) - .getLocationOnScreen(any(int[].class)); - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { mListener = (View.OnApplyWindowInsetsListener) (invocation.getArguments()[0]); return null; } @@ -130,39 +114,8 @@ .when(mView) .requestApplyInsets(); - when(mView.getMeasuredWidth()).thenReturn(mViewWidth); - when(mView.getMeasuredHeight()).thenReturn(mViewHeight); - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - Matrix matrix = (Matrix) (invocation.getArguments()[0]); - matrix.set(mGlobalTransformMatrix); - return null; - } - }) - .when(mView) - .transformMatrixToGlobal(any(Matrix.class)); - - // Set up the root view. - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - int[] loc = (int[]) (invocation.getArguments()[0]); - loc[0] = mLocationOnScreen[0]; - loc[1] = mLocationOnScreen[1]; - return null; - } - }) - .when(mRootView) - .getLocationOnScreen(any(int[].class)); - when(mRootView.getMeasuredWidth()).thenReturn(mViewWidth); - when(mRootView.getMeasuredHeight()).thenReturn(mViewHeight); - when(mView.getRootView()).thenReturn(mRootView); - // Set up the delegate. when(mDelegate.getDipScale()).thenReturn(mDipScale); - when(mDelegate.getDisplayWidth()).thenReturn(mDisplayWidth); - when(mDelegate.getDisplayHeight()).thenReturn(mDisplayHeight); mInOrder = inOrder(mDelegate, mView, mAnotherView); @@ -195,11 +148,6 @@ public void testOnApplyWindowInsets() { mController.onApplyWindowInsets(mWindowInsets); - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); mInOrder.verify(mDelegate).getDipScale(); // Note that DIP of 2.0 is applied, so the values are halved. @@ -209,69 +157,11 @@ @Test @SmallTest @Feature({"AndroidWebView"}) - public void testOnApplyWindowInsets_NotOccupyingFullDisplay() { - // View is not occupying the entire display, so no insets applied. - when(mView.getMeasuredHeight()).thenReturn(mDisplayHeight / 2); - - mController.onApplyWindowInsets(mWindowInsets); - - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); - - mInOrder.verify(mDelegate).setDisplayCutoutSafeArea(eq(new Insets(0, 0, 0, 0))); - } - - @Test - @SmallTest - @Feature({"AndroidWebView"}) - public void testOnApplyWindowInsets_NotOccupyingFullWindow() { - // View is not occupying the entire window, so no insets applied. - when(mRootView.getMeasuredHeight()).thenReturn(mViewHeight / 2); - - mController.onApplyWindowInsets(mWindowInsets); - - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); - - mInOrder.verify(mDelegate).setDisplayCutoutSafeArea(eq(new Insets(0, 0, 0, 0))); - } - - @Test - @SmallTest - @Feature({"AndroidWebView"}) - public void testOnApplyWindowInsets_ParentLayoutRotated() { - mGlobalTransformMatrix.postRotate(30.0f); - - mController.onApplyWindowInsets(mWindowInsets); - - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); - - mInOrder.verify(mDelegate).setDisplayCutoutSafeArea(eq(new Insets(0, 0, 0, 0))); - } - - @Test - @SmallTest - @Feature({"AndroidWebView"}) public void testOnSizeChanged() { mController.onSizeChanged(); mInOrder.verify(mView).requestApplyInsets(); - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); mInOrder.verify(mDelegate).getDipScale(); // Note that DIP of 2.0 is applied, so the values are halved. @@ -286,11 +176,6 @@ mInOrder.verify(mView).requestApplyInsets(); - mInOrder.verify(mView).getLocationOnScreen(any(int[].class)); - mInOrder.verify(mView).getMeasuredWidth(); - mInOrder.verify(mView).getMeasuredHeight(); - mInOrder.verify(mDelegate).getDisplayWidth(); - mInOrder.verify(mDelegate).getDisplayHeight(); mInOrder.verify(mDelegate).getDipScale(); // Note that DIP of 2.0 is applied, so the values are halved.
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index f7af2972..f36026466 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -251,6 +251,7 @@ "../javatests/src/org/chromium/android_webview/test/AwContentsRenderTest.java", "../javatests/src/org/chromium/android_webview/test/AwContentsStaticsTest.java", "../javatests/src/org/chromium/android_webview/test/AwContentsTest.java", + "../javatests/src/org/chromium/android_webview/test/AwDisplayCutoutTest.java", "../javatests/src/org/chromium/android_webview/test/AwFormDatabaseTest.java", "../javatests/src/org/chromium/android_webview/test/AwImeTest.java", "../javatests/src/org/chromium/android_webview/test/AwJavaBridgeTest.java",
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java b/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java index 63923a7..cdecd8e 100644 --- a/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java +++ b/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java
@@ -19,6 +19,7 @@ * This is a lightweight activity for tests that only require WebView functionality. */ public class AwTestRunnerActivity extends Activity { + public static final String FLAG_HIDE_ACTION_BAR = "hide_action_bar"; private LinearLayout mLinearLayout; private Intent mLastSentIntent; @@ -29,7 +30,7 @@ super.onCreate(savedInstanceState); AwShellResourceProvider.registerResources(this); - try (StrictModeContext ctx = StrictModeContext.allowDiskReads()) { + try (StrictModeContext ignored = StrictModeContext.allowDiskReads()) { AwBrowserProcess.loadLibrary(null); } @@ -39,9 +40,24 @@ mLinearLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + hideActionBarIfNecessary(); + setContentView(mLinearLayout); } + private void hideActionBarIfNecessary() { + Intent intent = getIntent(); + if (intent == null) return; + Bundle extras = intent.getExtras(); + if (extras == null) return; + Boolean hideActionBar = extras.getBoolean(FLAG_HIDE_ACTION_BAR); + if (hideActionBar == null || !hideActionBar) return; + + // This should be called before setContentView in onCreate() to take an + // effect. + getActionBar().hide(); + } + public int getRootLayoutWidth() { return mLinearLayout.getWidth(); }
diff --git a/ash/capture_mode/capture_mode_bar_view.cc b/ash/capture_mode/capture_mode_bar_view.cc index 9c2c6bc7..73446e97 100644 --- a/ash/capture_mode/capture_mode_bar_view.cc +++ b/ash/capture_mode/capture_mode_bar_view.cc
@@ -13,6 +13,8 @@ #include "ash/capture_mode/capture_mode_source_view.h" #include "ash/capture_mode/capture_mode_type_view.h" #include "ash/resources/vector_icons/vector_icons.h" +#include "ash/shelf/shelf.h" +#include "ash/shelf/shelf_layout_manager.h" #include "ash/style/ash_color_provider.h" #include "base/bind.h" #include "ui/aura/window.h" @@ -38,8 +40,10 @@ constexpr float kBlurQuality = 0.33f; -// TODO(afakhry): Change this to depend on the height of the Shelf. -constexpr int kDistanceFromScreenBottom = 56; +// Distance from the bottom of the bar to the bottom of the display, top of the +// hotseat or top of the shelf depending on the shelf alignment or hotseat +// visibility. +constexpr int kDistanceFromShelfOrHotseatTopDp = 16; } // namespace @@ -91,9 +95,23 @@ DCHECK(root); auto bounds = root->GetBoundsInScreen(); - const int y = bounds.bottom() - kDistanceFromScreenBottom - kBarSize.height(); + int bar_y = bounds.bottom(); + Shelf* shelf = Shelf::ForWindow(root); + if (shelf->IsHorizontalAlignment()) { + // Get the widget which has the shelf icons. This is the hotseat widget if + // the hotseat is extended, shelf widget otherwise. + const bool hotseat_extended = + shelf->shelf_layout_manager()->hotseat_state() == + HotseatState::kExtended; + views::Widget* shelf_widget = + hotseat_extended ? static_cast<views::Widget*>(shelf->hotseat_widget()) + : static_cast<views::Widget*>(shelf->shelf_widget()); + bar_y = shelf_widget->GetWindowBoundsInScreen().y(); + } + + bar_y -= (kDistanceFromShelfOrHotseatTopDp + kBarSize.height()); bounds.ClampToCenteredSize(kBarSize); - bounds.set_y(y); + bounds.set_y(bar_y); return bounds; }
diff --git a/ash/capture_mode/capture_mode_session.cc b/ash/capture_mode/capture_mode_session.cc index 51b9fef..4733997b 100644 --- a/ash/capture_mode/capture_mode_session.cc +++ b/ash/capture_mode/capture_mode_session.cc
@@ -693,8 +693,15 @@ case ui::ET_TOUCH_PRESSED: case ui::ET_TOUCH_MOVED: { if (is_capture_window) { + // Make sure the capture label widget will not get picked up by the + // get topmost window algorithm otherwise a crash will happen since + // the snapshot code tries snap a deleted window. + std::set<aura::Window*> ignore_windows; + if (capture_label_widget_) + ignore_windows.insert(capture_label_widget_->GetNativeWindow()); + capture_window_observer_->UpdateSelectedWindowAtPosition( - screen_location); + screen_location, ignore_windows); } UpdateCursor(screen_location, is_touch); break;
diff --git a/ash/capture_mode/capture_mode_unittests.cc b/ash/capture_mode/capture_mode_unittests.cc index 857be405..4d447d57 100644 --- a/ash/capture_mode/capture_mode_unittests.cc +++ b/ash/capture_mode/capture_mode_unittests.cc
@@ -1791,6 +1791,31 @@ kTabletHistogram, CaptureModeConfiguration::kWindowScreenshot, 1); } +// Tests that there is no crash when touching the capture label widget in tablet +// mode when capturing a window. Regression test for https://crbug.com/1152938. +TEST_F(CaptureModeTest, TabletTouchCaptureLabelWidgetWindowMode) { + TabletModeControllerTestApi tablet_mode_controller_test_api; + tablet_mode_controller_test_api.EnterTabletMode(); + + // Enter capture window mode. + CaptureModeController* controller = + StartCaptureSession(CaptureModeSource::kWindow, CaptureModeType::kImage); + ASSERT_TRUE(controller->IsActive()); + + // Press and release on where the capture label widget would be. + auto* event_generator = GetEventGenerator(); + CaptureModeSessionTestApi test_api(controller->capture_mode_session()); + DCHECK(test_api.capture_label_widget()); + event_generator->set_current_screen_location( + test_api.capture_label_widget()->GetWindowBoundsInScreen().CenterPoint()); + event_generator->PressTouch(); + event_generator->ReleaseTouch(); + + // There are no windows so the window finder algorithm will find the app list + // window and take a picture of that, ending capture mode. + EXPECT_FALSE(controller->IsActive()); +} + // A test class that uses a mock time task environment. class CaptureModeMockTimeTest : public CaptureModeTest { public:
diff --git a/ash/capture_mode/capture_window_observer.cc b/ash/capture_mode/capture_window_observer.cc index 3dbba4e..5730f37 100644 --- a/ash/capture_mode/capture_window_observer.cc +++ b/ash/capture_mode/capture_window_observer.cc
@@ -25,8 +25,26 @@ } void CaptureWindowObserver::UpdateSelectedWindowAtPosition( - const gfx::Point& location_in_screen) { - UpdateSelectedWindowAtPosition(location_in_screen, /*ignore_windows=*/{}); + const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignore_windows) { + location_in_screen_ = location_in_screen; + // Find the toplevel window under the mouse/touch position. + aura::Window* window = + GetTopmostWindowAtPoint(location_in_screen_, ignore_windows); + if (window_ == window) + return; + + // Don't capture wallpaper window. + if (window && window->parent() && + window->parent()->id() == kShellWindowId_WallpaperContainer) { + window = nullptr; + } + + // Stop observing the current selected window if there is one. + StopObserving(); + if (window) + StartObserving(window); + RepaintCaptureRegion(); } void CaptureWindowObserver::OnWindowBoundsChanged( @@ -76,29 +94,6 @@ } } -void CaptureWindowObserver::UpdateSelectedWindowAtPosition( - const gfx::Point& location_in_screen, - const std::set<aura::Window*>& ignore_windows) { - location_in_screen_ = location_in_screen; - // Find the toplevel window under the mouse/touch position. - aura::Window* window = - GetTopmostWindowAtPoint(location_in_screen_, ignore_windows); - if (window_ == window) - return; - - // Don't capture wallpaper window. - if (window && window->parent() && - window->parent()->id() == kShellWindowId_WallpaperContainer) { - window = nullptr; - } - - // Stop observing the current selected window if there is one. - StopObserving(); - if (window) - StartObserving(window); - RepaintCaptureRegion(); -} - void CaptureWindowObserver::RepaintCaptureRegion() { ui::Layer* layer = capture_mode_session_->layer(); layer->SchedulePaint(layer->bounds());
diff --git a/ash/capture_mode/capture_window_observer.h b/ash/capture_mode/capture_window_observer.h index 1591bcd..48f1bb1 100644 --- a/ash/capture_mode/capture_window_observer.h +++ b/ash/capture_mode/capture_window_observer.h
@@ -33,10 +33,12 @@ ~CaptureWindowObserver() override; - // Updates selected window depending on the mouse/touch event location. If - // there is an eligible window under the current mouse/touch event location, - // its bounds will be highlighted. - void UpdateSelectedWindowAtPosition(const gfx::Point& location_in_screen); + // Updates selected window depending on the mouse/touch event location, + // ignoring |ignore_windows|. If there is an eligible window under the current + // mouse/touch event location, its bounds will be highlighted. + void UpdateSelectedWindowAtPosition( + const gfx::Point& location_in_screen, + const std::set<aura::Window*>& ignore_windows); // aura::WindowObserver: void OnWindowBoundsChanged(aura::Window* window, @@ -57,12 +59,6 @@ void StartObserving(aura::Window* window); void StopObserving(); - // Updates selected window depending on the mouse/touch event location with - // ignoring |ignore_windows|. - void UpdateSelectedWindowAtPosition( - const gfx::Point& location_in_screen, - const std::set<aura::Window*>& ignore_windows); - // Repaints the window capture region. void RepaintCaptureRegion();
diff --git a/ash/clipboard/views/clipboard_history_main_button.cc b/ash/clipboard/views/clipboard_history_main_button.cc index 0b3cc6f4..e9cd83a2 100644 --- a/ash/clipboard/views/clipboard_history_main_button.cc +++ b/ash/clipboard/views/clipboard_history_main_button.cc
@@ -9,6 +9,7 @@ #include "ash/style/scoped_light_mode_as_default.h" #include "ui/gfx/canvas.h" #include "ui/views/accessibility/view_accessibility.h" +#include "ui/views/animation/ink_drop.h" namespace ash { namespace { @@ -28,6 +29,7 @@ base::Unretained(container))), container_(container) { SetFocusBehavior(views::View::FocusBehavior::ALWAYS); + SetInkDropMode(views::InkDropHostView::InkDropMode::ON); // Let the parent handle accessibility features. GetViewAccessibility().OverrideIsIgnored(/*value=*/true); @@ -47,9 +49,34 @@ return "ClipboardHistoryMainButton"; } +std::unique_ptr<views::InkDrop> ClipboardHistoryMainButton::CreateInkDrop() { + std::unique_ptr<views::InkDrop> ink_drop = views::Button::CreateInkDrop(); + + // We do not use the ripple highlight due to the following reasons: + // (1) Events may be intercepted by the menu controller. As a result, the + // ripple highlight may not update properly. + // (2) The animation to fade in/out highlight does not look good when the menu + // selection is advanced by the up/down arrow key. + // Hence, highlighted background is implemented by customizing in + // `PaintButtonContents()`. + ink_drop->SetShowHighlightOnHover(false); + + return ink_drop; +} + void ClipboardHistoryMainButton::OnThemeChanged() { views::Button::OnThemeChanged(); - SchedulePaint(); + + // Use the light mode as default because the light mode is the default mode + // of the native theme which decides the context menu's background color. + // TODO(andrewxu): remove this line after https://crbug.com/1143009 is + // fixed. + ScopedLightModeAsDefault scoped_light_mode_as_default; + + const AshColorProvider::RippleAttributes ripple_attributes = + AshColorProvider::Get()->GetRippleAttributes(); + SetInkDropBaseColor(ripple_attributes.base_color); + SetInkDropVisibleOpacity(ripple_attributes.inkdrop_opacity); } void ClipboardHistoryMainButton::OnGestureEvent(ui::GestureEvent* event) {
diff --git a/ash/clipboard/views/clipboard_history_main_button.h b/ash/clipboard/views/clipboard_history_main_button.h index 079f907b..59e6573 100644 --- a/ash/clipboard/views/clipboard_history_main_button.h +++ b/ash/clipboard/views/clipboard_history_main_button.h
@@ -24,6 +24,7 @@ private: // views::Button: const char* GetClassName() const override; + std::unique_ptr<views::InkDrop> CreateInkDrop() override; void OnThemeChanged() override; void OnGestureEvent(ui::GestureEvent* event) override; void PaintButtonContents(gfx::Canvas* canvas) override;
diff --git a/ash/public/cpp/app_list/internal_app_id_constants.h b/ash/public/cpp/app_list/internal_app_id_constants.h index bfdeb33..94e13b21 100644 --- a/ash/public/cpp/app_list/internal_app_id_constants.h +++ b/ash/public/cpp/app_list/internal_app_id_constants.h
@@ -22,11 +22,6 @@ constexpr char kInternalAppIdContinueReading[] = "fbokpncipdhffndmljhhidahghagaonp"; -// Generated as -// web_app::GenerateAppIdFromURL(GURL( -// "https://google.com/chromebook/whatsnew/embedded/")). -constexpr char kReleaseNotesAppId[] = "kddjchdmnnpakappplfnloipgcbioilo"; - } // namespace ash #endif // ASH_PUBLIC_CPP_APP_LIST_INTERNAL_APP_ID_CONSTANTS_H_
diff --git a/ash/public/cpp/resources/ash_public_unscaled_resources.grd b/ash/public/cpp/resources/ash_public_unscaled_resources.grd index b2e31b5..c1a6297 100644 --- a/ash/public/cpp/resources/ash_public_unscaled_resources.grd +++ b/ash/public/cpp/resources/ash_public_unscaled_resources.grd
@@ -17,7 +17,6 @@ <!-- CrOS internal apps images --> <include name="IDR_SHORTCUT_VIEWER_LOGO_192" file="unscaled_resources/shortcut_viewer_logo_192.png" type="BINDATA" /> <include name="IDR_SETTINGS_LOGO_192" file="unscaled_resources/settings_logo_192.png" type="BINDATA" /> - <include name="IDR_RELEASE_NOTES_APP_192" file="unscaled_resources/release_notes_logo_192.png" type="BINDATA" /> <include name="IDR_PHONE_HUB_ONBOARDING_IMAGE" file="unscaled_resources/phone_hub_onboarding_image.png" type="BINDATA" /> <include name="IDR_PHONE_HUB_CONNECTING_IMAGE" file="unscaled_resources/phone_hub_connecting_image.png" type="BINDATA" /> <include name="IDR_PHONE_HUB_ERROR_STATE_IMAGE" file="unscaled_resources/phone_hub_error_state_image.png" type="BINDATA" />
diff --git a/ash/public/cpp/resources/unscaled_resources/release_notes_logo_192.png b/ash/public/cpp/resources/unscaled_resources/release_notes_logo_192.png deleted file mode 100644 index cb0d225d..0000000 --- a/ash/public/cpp/resources/unscaled_resources/release_notes_logo_192.png +++ /dev/null Binary files differ
diff --git a/ash/public/cpp/resources/unscaled_resources/settings_logo_192.png b/ash/public/cpp/resources/unscaled_resources/settings_logo_192.png index 0966334..5fe10aaa 100644 --- a/ash/public/cpp/resources/unscaled_resources/settings_logo_192.png +++ b/ash/public/cpp/resources/unscaled_resources/settings_logo_192.png Binary files differ
diff --git a/ash/public/cpp/resources/unscaled_resources/shortcut_viewer_logo_192.png b/ash/public/cpp/resources/unscaled_resources/shortcut_viewer_logo_192.png index eb154ba6c40..8add363 100644 --- a/ash/public/cpp/resources/unscaled_resources/shortcut_viewer_logo_192.png +++ b/ash/public/cpp/resources/unscaled_resources/shortcut_viewer_logo_192.png Binary files differ
diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index b4776c43..a11f3c79 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc
@@ -1796,7 +1796,7 @@ allocator.root()->Free(ptr2); } - // This test checks single-slot slot span allocations. + // This test checks large-but-not-quite-direct allocations. { const size_t requested_size = 16 * SystemPageSize(); void* ptr = allocator.root()->Alloc(requested_size + 1, type_name); @@ -1842,12 +1842,12 @@ EXPECT_FALSE(stats->is_direct_map); EXPECT_EQ(slot_size, stats->bucket_slot_size); EXPECT_EQ(0u, stats->active_bytes); - EXPECT_EQ(0u, stats->resident_bytes); - EXPECT_EQ(0u, stats->decommittable_bytes); + EXPECT_EQ(slot_size, stats->resident_bytes); + EXPECT_EQ(slot_size, stats->decommittable_bytes); EXPECT_EQ(0u, stats->num_full_slot_spans); EXPECT_EQ(0u, stats->num_active_slot_spans); - EXPECT_EQ(0u, stats->num_empty_slot_spans); - EXPECT_EQ(1u, stats->num_decommitted_slot_spans); + EXPECT_EQ(1u, stats->num_empty_slot_spans); + EXPECT_EQ(0u, stats->num_decommitted_slot_spans); } void* ptr2 = allocator.root()->Alloc(requested_size + SystemPageSize() + 1, @@ -2101,12 +2101,8 @@ const size_t kFirstAllocPages = kHasLargePages ? 32 : 64; const size_t kSecondAllocPages = kHasLargePages ? 31 : 61; - if (kFirstAllocPages > MaxSystemPagesPerSlotSpan()) { - GTEST_SKIP() << "Immediate decommitting interferes with this test."; - } - // Detect case (1) from above. - ASSERT_LT(kFirstAllocPages * SystemPageSize(), 1UL << kMaxBucketedOrder); + DCHECK_LT(kFirstAllocPages * SystemPageSize(), 1UL << kMaxBucketedOrder); const size_t kDeltaPages = kFirstAllocPages - kSecondAllocPages; @@ -2132,7 +2128,7 @@ EXPECT_EQ(kFirstAllocPages * SystemPageSize(), stats->resident_bytes); for (size_t i = 0; i < kFirstAllocPages; i++) - CHECK_PAGE_IN_CORE(p.PageAtIndex(i), false); + CHECK_PAGE_IN_CORE(p.PageAtIndex(i), true); allocator.root()->PurgeMemory(PartitionPurgeDiscardUnusedSystemPages); @@ -2574,12 +2570,10 @@ EXPECT_EQ(expected_committed_size, root.total_size_of_committed_pages); EXPECT_EQ(expected_super_pages_size, root.total_size_of_super_pages); - // Freeing memory for larger buckets decommits pages right away. The address - // space isn't released though. + // Freeing memory doesn't result in decommitting pages right away. root.Free(ptr); root.Free(ptr2); root.Free(ptr3); - expected_committed_size -= 3 * bucket->get_bytes_per_span(); EXPECT_EQ(expected_committed_size, root.total_size_of_committed_pages); EXPECT_EQ(expected_super_pages_size, root.total_size_of_super_pages);
diff --git a/base/allocator/partition_allocator/partition_page.cc b/base/allocator/partition_allocator/partition_page.cc index d7be676..aafb7ba0 100644 --- a/base/allocator/partition_allocator/partition_page.cc +++ b/base/allocator/partition_allocator/partition_page.cc
@@ -114,8 +114,8 @@ template <bool thread_safe> DeferredUnmap SlotSpanMetadata<thread_safe>::FreeSlowPath() { - auto* root = PartitionRoot<thread_safe>::FromSlotSpan(this); #if DCHECK_IS_ON() + auto* root = PartitionRoot<thread_safe>::FromSlotSpan(this); root->lock_.AssertAcquired(); #endif PA_DCHECK(this != get_sentinel_slot_span()); @@ -130,21 +130,10 @@ bucket->SetNewActiveSlotSpan(); PA_DCHECK(bucket->active_slot_spans_head != this); - // Decommit the slot span, but not unconditionally. For certain slot sizes - // there could be enough churn to result in slot spans transitioning between - // decommitted<->active states often enough to cause a perf regression. In - // these cases it's better to register them for lazy decommitting. - // However, decommitting single-slot slot spans immediately has been - // empirically confirmed not to cause a regression, but future optimizations - // may base the decision on slot size instead (see crrev.com/c/2549024for - // more details). - if (CanStoreRawSize()) { + if (CanStoreRawSize()) SetRawSize(0); - Decommit(root); - } else { - PartitionRegisterEmptySlotSpan(this); - } + PartitionRegisterEmptySlotSpan(this); } else { PA_DCHECK(!bucket->is_direct_mapped()); // Ensure that the slot span is full. That's the only valid case if we @@ -176,7 +165,6 @@ void SlotSpanMetadata<thread_safe>::Decommit(PartitionRoot<thread_safe>* root) { root->lock_.AssertAcquired(); PA_DCHECK(is_empty()); - PA_DCHECK(empty_cache_index == -1); PA_DCHECK(!bucket->is_direct_mapped()); void* addr = SlotSpanMetadata::ToPointer(this); root->DecommitSystemPagesForData(addr, bucket->get_bytes_per_span(),
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 5406b25d..018f2a2 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -307,8 +307,10 @@ // Enables PCScan for this root. void EnablePCScan() { PA_CHECK(thread_safe); - PA_CHECK(IsScannable() && !IsScanEnabled()); ScopedGuard guard{lock_}; + PA_CHECK(IsScannable()); + if (IsScanEnabled()) + return; PCScan::Instance().RegisterRoot(this); pcscan_mode = PCScanMode::kEnabled; }
diff --git a/build/android/gyp/util/protoresources.py b/build/android/gyp/util/protoresources.py index 4ffa979..7dd487a 100644 --- a/build/android/gyp/util/protoresources.py +++ b/build/android/gyp/util/protoresources.py
@@ -33,7 +33,7 @@ # The package ID hardcoded for shared libraries. See # _HardcodeSharedLibraryDynamicAttributes() for more details. If this value # changes make sure to change REQUIRED_PACKAGE_IDENTIFIER in WebLayerImpl.java. -SHARED_LIBRARY_HARDCODED_ID = 12 +SHARED_LIBRARY_HARDCODED_ID = 36 def _ProcessZip(zip_path, process_func):
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index 1fa1cdf9..d1df4db7 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -0.20201130.1.1 +0.20201130.2.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index 1fa1cdf9..d1df4db7 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -0.20201130.1.1 +0.20201130.2.1
diff --git a/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py b/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py index ac9d76fc..32ea45d 100755 --- a/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py +++ b/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
@@ -22,7 +22,8 @@ # Some versions of nm have a bug where the version gets printed twice. # Since the symbol may either be formatted like "name@@VERSION" or # "name@@VERSION@@VERSION", handle both cases. - symver = line.split('@@') + line = line.replace('@@', '@') + symver = line.split('@') symbol = symver[0].split(' ')[-1] version = symver[-1] if not re.match(version_format, version):
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el b/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el index fcf6a8b..b1f5589 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.mips64el
@@ -223,6 +223,7 @@ https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb +https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mips64el.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.2_mips64el.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.2_mips64el.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxss/libxss1_1.2.3-1_mips64el.deb
diff --git a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel b/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel index d2aec96..a82fd762 100644 --- a/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel +++ b/build/linux/sysroot_scripts/generated_package_lists/sid.mipsel
@@ -223,6 +223,7 @@ https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb +https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxshmfence/libxshmfence-dev_1.3-1_mipsel.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxslt/libxslt1.1_1.1.32-2.2_mipsel.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2.2_mipsel.deb https://snapshot.debian.org/archive/debian/20191212T145612Z/pool/main/libx/libxss/libxss1_1.2.3-1_mipsel.deb
diff --git a/build/linux/sysroot_scripts/sysroots.json b/build/linux/sysroot_scripts/sysroots.json index e7a9b326..0162d58d 100644 --- a/build/linux/sysroot_scripts/sysroots.json +++ b/build/linux/sysroot_scripts/sysroots.json
@@ -1,36 +1,36 @@ { "sid_amd64": { - "Sha1Sum": "5f64b417e1018dcf8fcc81dc2714e0f264b9b911", + "Sha1Sum": "22f2db7711f7426a364617bb6d78686cce09a8f9", "SysrootDir": "debian_sid_amd64-sysroot", "Tarball": "debian_sid_amd64_sysroot.tar.xz" }, "sid_arm": { - "Sha1Sum": "c2e54f675b83a61301dcdb22e8e7a2b85c01d58c", + "Sha1Sum": "e7d7b3d23c21b8f46911b8428d38aba46cf58ba2", "SysrootDir": "debian_sid_arm-sysroot", "Tarball": "debian_sid_arm_sysroot.tar.xz" }, "sid_arm64": { - "Sha1Sum": "ef67b6ca8fd6e2e51515a243d043d1ea4caf45e6", + "Sha1Sum": "ff4e6495cf3db79fc54addcb340f6f951885e4c1", "SysrootDir": "debian_sid_arm64-sysroot", "Tarball": "debian_sid_arm64_sysroot.tar.xz" }, "sid_armel": { - "Sha1Sum": "4ccbe0db925a5ab39ba52cbe601535f97be05372", + "Sha1Sum": "d395cd5388c953082e8527ff4f01cc6f8b222184", "SysrootDir": "debian_sid_armel-sysroot", "Tarball": "debian_sid_armel_sysroot.tar.xz" }, "sid_i386": { - "Sha1Sum": "d967bcef40477dbc39acef141ff22bf73f3e7cdb", + "Sha1Sum": "5a09b89bfdd9ff4c6b49f5f418124c325259c854", "SysrootDir": "debian_sid_i386-sysroot", "Tarball": "debian_sid_i386_sysroot.tar.xz" }, "sid_mips": { - "Sha1Sum": "2758d766faa0c73da18128a4d46580ade68d3eea", + "Sha1Sum": "eaf2717aca47c4ae06e975f3c800f513f2b78e1d", "SysrootDir": "debian_sid_mips-sysroot", "Tarball": "debian_sid_mips_sysroot.tar.xz" }, "sid_mips64el": { - "Sha1Sum": "0edb979c932d207076c3986403a198387a4a8aa9", + "Sha1Sum": "b161f2f50ed8392de963988f1d192a99cc4c6772", "SysrootDir": "debian_sid_mips64el-sysroot", "Tarball": "debian_sid_mips64el_sysroot.tar.xz" }
diff --git a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java index 3c604023..a059476d2 100644 --- a/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java +++ b/chrome/android/features/autofill_assistant/public/java/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantActionHandler.java
@@ -7,12 +7,16 @@ import android.os.Bundle; import org.chromium.base.Callback; +import org.chromium.base.annotations.DoNotInline; import java.util.List; /** * Interface that provides implementation for AA actions, triggered by direct actions. */ +// TODO(crbug.com/1145287): DexSplitter has issues with interfaces that have a single implementer +// inside a DFM. +@DoNotInline public interface AutofillAssistantActionHandler { /** * Start fetching potential actions for websites.
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java index 58be031..f0214c50 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceMediator.java
@@ -930,6 +930,9 @@ ? StartSurfaceState.SHOWN_HOMEPAGE : mPreviousStartSurfaceState; } else if (mStartSurfaceState == StartSurfaceState.SHOWING_START) { + if (mTabModelSelector.isIncognitoSelected() && !mShowStackTabSwitcher) { + return StartSurfaceState.SHOWN_TABSWITCHER; + } return StartSurfaceState.SHOWN_HOMEPAGE; } else if (mStartSurfaceState == StartSurfaceState.SHOWING_TABSWITCHER) { return StartSurfaceState.SHOWN_TABSWITCHER;
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 c8541dd..a623bde 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
@@ -808,12 +808,14 @@ @Test @MediumTest @Feature({"StartSurface"}) + // clang-format off @CommandLineFlags.Add({BASE_PARAMS + "/single/exclude_mv_tiles/true" + "/show_last_active_tab_only/true/show_stack_tab_switcher/true"}) - public void - testShow_SingleAsHomepageV2_FromResumeShowStart() throws Exception { + public void testShow_SingleAsHomepageV2_FromResumeShowStart() throws Exception { // clang-format on - if (!mImmediateReturn) return; + if (!mImmediateReturn) { + onView(withId(org.chromium.chrome.tab_ui.R.id.home_button)).perform(click()); + } ChromeTabbedActivity cta = mActivityTestRule.getActivity(); CriteriaHelper.pollUiThread( @@ -833,11 +835,60 @@ // Simulates pressing Chrome's icon and launching Chrome from warm start. mActivityTestRule.resumeMainActivityFromLauncher(); + waitForTabModel(); + if (mImmediateReturn) { + CriteriaHelper.pollUiThread(() + -> cta.getLayoutManager() != null + && cta.getLayoutManager().overviewVisible()); + // Verifies that with the vertical tab switcher, the regular Start surface is shown when + // resuming. + assertFalse(cta.getTabModelSelector().getCurrentModel().isIncognito()); + assertThat(cta.getTabModelSelector().getCurrentModel().getCount(), equalTo(0)); + } else { + assertTrue(cta.getTabModelSelector().getCurrentModel().isIncognito()); + onViewWaiting(allOf(withId(R.id.new_tab_incognito_container), isDisplayed())); + } + } + + @Test + @MediumTest + @Feature({"StartSurface"}) + // clang-format off + @CommandLineFlags.Add({BASE_PARAMS + "/single"}) + public void testShow_SingleAsHomepage_FromResumeShowStart() throws Exception { + // clang-format on + if (!mImmediateReturn) { + onView(withId(org.chromium.chrome.tab_ui.R.id.home_button)).perform(click()); + } + + ChromeTabbedActivity cta = mActivityTestRule.getActivity(); CriteriaHelper.pollUiThread( () -> cta.getLayoutManager() != null && cta.getLayoutManager().overviewVisible()); waitForTabModel(); - assertFalse(cta.getTabModelSelector().getCurrentModel().isIncognito()); - assertThat(cta.getTabModelSelector().getCurrentModel().getCount(), equalTo(0)); + TestThreadUtils.runOnUiThreadBlocking( + () -> { cta.getTabModelSelector().getModel(false).closeAllTabs(); }); + TabUiTestHelper.verifyTabModelTabCount(cta, 0, 0); + assertTrue(cta.getLayoutManager().overviewVisible()); + TestThreadUtils.runOnUiThreadBlocking( + () -> cta.getTabCreator(true /*incognito*/).launchNTP()); + TabUiTestHelper.verifyTabModelTabCount(cta, 0, 1); + + // Simulates pressing the Android's home button and bringing Chrome to the background. + pressHome(); + + // Simulates pressing Chrome's icon and launching Chrome from warm start. + mActivityTestRule.resumeMainActivityFromLauncher(); + + waitForTabModel(); + assertTrue(cta.getTabModelSelector().getCurrentModel().isIncognito()); + if (mImmediateReturn) { + CriteriaHelper.pollUiThread(() + -> cta.getLayoutManager() != null + && cta.getLayoutManager().overviewVisible()); + onViewWaiting(allOf(withId(R.id.secondary_tasks_surface_view), isDisplayed())); + } else { + onViewWaiting(allOf(withId(R.id.new_tab_incognito_container), isDisplayed())); + } } @Test
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogView.java index e057b60..39496fa7 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogView.java
@@ -625,6 +625,8 @@ mContext.getResources().getDimensionPixelSize(R.dimen.tab_list_card_padding); animationCardFavicon.setPadding(padding, padding, padding, padding); animationCardFavicon.setImageDrawable(sourceCardFavicon.getDrawable()); + } else { + animationCardFavicon.setImageDrawable(null); } ((TextView) (mAnimationCardView.findViewById(R.id.tab_title)))
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/ChromeMediaNotificationControllerDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/ChromeMediaNotificationControllerDelegate.java index a8a1b0b..5b0d6cf 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/ui/ChromeMediaNotificationControllerDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/ui/ChromeMediaNotificationControllerDelegate.java
@@ -224,16 +224,9 @@ @Override public void onMediaSessionUpdated(MediaSessionCompat session) { - try { - // Tell the MediaRouter about the session, so that Chrome can control the volume - // on the remote cast device (if any). - // Pre-MR1 versions of JB do not have the complete MediaRouter APIs, - // so getting the MediaRouter instance will throw an exception. - MediaRouter.getInstance(getContext()).setMediaSessionCompat(session); - } catch (NoSuchMethodError e) { - // Do nothing. Chrome can't be casting without a MediaRouter, so there is nothing - // to do here. - } + // Tell the MediaRouter about the session, so that Chrome can control the volume + // on the remote cast device (if any). + MediaRouter.getInstance(getContext()).setMediaSessionCompat(session); } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java index d5f719c..8e75fe15 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/handler/toolbar/PaymentHandlerToolbarCoordinator.java
@@ -125,8 +125,7 @@ @Override @DrawableRes public int getSecurityIconResource(@ConnectionSecurityLevel int securityLevel) { - return SecurityStatusIcon.getSecurityIconResource(securityLevel, - SecurityStateModel.shouldShowDangerTriangleForWarningLevel(), mIsSmallDevice, + return SecurityStatusIcon.getSecurityIconResource(securityLevel, mIsSmallDevice, /*skipIconForNeutralState=*/false); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java index 55cc509..9a0f3c1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
@@ -475,9 +475,8 @@ !SearchEngineLogoUtils.shouldShowSearchEngineLogo(isIncognito()) || mNtpDelegate.isCurrentlyVisible(); - return SecurityStatusIcon.getSecurityIconResource(securityLevel, - SecurityStateModel.shouldShowDangerTriangleForWarningLevel(), isSmallDevice, - skipIconForNeutralState); + return SecurityStatusIcon.getSecurityIconResource( + securityLevel, isSmallDevice, skipIconForNeutralState); } @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java index 341d3702..3cf0386 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java
@@ -7,7 +7,6 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; import androidx.test.filters.SmallTest; @@ -107,7 +106,6 @@ @SmallTest @UiThreadTest public void testGetSecurityIconResource() { - when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(false); for (int securityLevel : SECURITY_LEVELS) { assertEquals("Wrong phone resource for security level " + securityLevel, R.drawable.ic_offline_pin_24dp, @@ -151,10 +149,10 @@ mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE, !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - assertEquals(R.drawable.omnibox_info, + assertEquals(R.drawable.omnibox_not_secure_warning, mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING, IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - assertEquals(R.drawable.omnibox_info, + assertEquals(R.drawable.omnibox_not_secure_warning, mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING, !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); @@ -181,25 +179,4 @@ mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.SECURE, !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); } - - @Test - @SmallTest - @UiThreadTest - public void testGetSecurityIconResourceForMarkHttpAsDangerWarning() { - when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(false); - assertEquals(0, - mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE, - IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - assertEquals(R.drawable.omnibox_info, - mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.NONE, - !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - - when(mSecurityStateMocks.shouldShowDangerTriangleForWarningLevel()).thenReturn(true); - assertEquals(R.drawable.omnibox_not_secure_warning, - mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING, - IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - assertEquals(R.drawable.omnibox_not_secure_warning, - mLocationBarModel.getSecurityIconResource(ConnectionSecurityLevel.WARNING, - !IS_SMALL_DEVICE, !IS_OFFLINE_PAGE, !IS_PREVIEW, !IS_PAINT_PREVIEW)); - } }
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index e36196c..794ec3e 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -5657,9 +5657,6 @@ <message name="IDS_RELEASE_NOTES_DEVICE_SPECIFIC_NOTIFICATION_TITLE" desc="Text for the notification title informing the user that the device has been updated and patch notes are available. Will specify the user's Chrome OS device."> See what's new on your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> </message> - <message name="IDS_RELEASE_NOTES_NOTIFICATION_TITLE" desc="Text for the notification title informing the user that the device has been updated and patch notes are available."> - See what's new on Chromebook - </message> <message name="IDS_RELEASE_NOTES_NOTIFICATION_MESSAGE" desc="Text for the notification message informing the user that the device has been updated and patch notes are available."> Get highlights from the latest update </message> @@ -5927,4 +5924,17 @@ <ph name="DOMAIN">$1<ex>example.com</ex></ph> requires you to keep your smart card inserted. </message> + <!-- Strings for full restore notifications --> + <if expr="chromeos"> + <message name="IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON" desc="The restore button label of the notification for the user to select restore apps and pages on startup."> + Restore + </message> + <message name="IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON" desc="The cancel button label of the notification for the user to select not restore on startup."> + Cancel + </message> + <message name="IDS_RESTORE_NOTIFICATION_TITLE" desc="This is the title of the notification for the user to select restore or not on startup."> + Restore apps & pages? + </message> + </if> + </grit-part>
diff --git a/chrome/app/chromeos_strings_grdp/IDS_RELEASE_NOTES_NOTIFICATION_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_RELEASE_NOTES_NOTIFICATION_TITLE.png.sha1 deleted file mode 100644 index fa1fbfc..0000000 --- a/chrome/app/chromeos_strings_grdp/IDS_RELEASE_NOTES_NOTIFICATION_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -51e6a2ba245da0527c4d1a77142448a6f9d42f35 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON.png.sha1 new file mode 100644 index 0000000..46075f4 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON.png.sha1
@@ -0,0 +1 @@ +657acbf8f413bb610546b27dd5203a59f2b3c4f8 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON.png.sha1 new file mode 100644 index 0000000..46075f4 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON.png.sha1
@@ -0,0 +1 @@ +657acbf8f413bb610546b27dd5203a59f2b3c4f8 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_TITLE.png.sha1 new file mode 100644 index 0000000..46075f4 --- /dev/null +++ b/chrome/app/chromeos_strings_grdp/IDS_RESTORE_NOTIFICATION_TITLE.png.sha1
@@ -0,0 +1 @@ +657acbf8f413bb610546b27dd5203a59f2b3c4f8 \ No newline at end of file
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index 46bb5f58..5de32a3a 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -1195,6 +1195,16 @@ To use Rosetta to play protected media, you must restart Chromium. </message> </if> + + <!-- Strings for full restore notifications --> + <if expr="chromeos"> + <message name="IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE" desc="This is the string shown as the display source of the notification for the user to select restore or not on startup."> + Chromium OS system + </message> + <message name="IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to select restore or not on startup after crash."> + Chromium OS didn't shut down correctly. + </message> + </if> </messages> </release> </grit>
diff --git a/chrome/app/chromium_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1 b/chrome/app/chromium_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1 new file mode 100644 index 0000000..3b74886 --- /dev/null +++ b/chrome/app/chromium_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1
@@ -0,0 +1 @@ +63cab9675eb6764fe65fc2b89c3002538d76dba2 \ No newline at end of file
diff --git a/chrome/app/chromium_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1 b/chrome/app/chromium_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1 new file mode 100644 index 0000000..3b74886 --- /dev/null +++ b/chrome/app/chromium_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1
@@ -0,0 +1 @@ +63cab9675eb6764fe65fc2b89c3002538d76dba2 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index 9f72421..d7466e9c 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -1211,6 +1211,16 @@ To use Rosetta to play protected media, you must restart Chrome. </message> </if> + + <!-- Strings for full restore notifications --> + <if expr="chromeos"> + <message name="IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE" desc="This is the string shown as the display source of the notification for the user to select restore or not on startup."> + Chrome OS system + </message> + <message name="IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE" desc="This is the text message of the notification for the user to select restore or not on startup after crash."> + Chrome OS didn't shut down correctly. + </message> + </if> </messages> </release> </grit>
diff --git a/chrome/app/google_chrome_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1 new file mode 100644 index 0000000..46075f4 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE.png.sha1
@@ -0,0 +1 @@ +657acbf8f413bb610546b27dd5203a59f2b3c4f8 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1 new file mode 100644 index 0000000..46075f4 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE.png.sha1
@@ -0,0 +1 @@ +657acbf8f413bb610546b27dd5203a59f2b3c4f8 \ No newline at end of file
diff --git a/chrome/app/vector_icons/BUILD.gn b/chrome/app/vector_icons/BUILD.gn index c97bb3c..50fec4d 100644 --- a/chrome/app/vector_icons/BUILD.gn +++ b/chrome/app/vector_icons/BUILD.gn
@@ -175,6 +175,7 @@ if (is_chromeos) { sources += [ "autocorrect_undo.icon", + "full_restore_notification.icon", "notification_battery.icon", "notification_captive_portal.icon", "notification_cellular_alert.icon",
diff --git a/chrome/app/vector_icons/full_restore_notification.icon b/chrome/app/vector_icons/full_restore_notification.icon new file mode 100644 index 0000000..f9e5cdf --- /dev/null +++ b/chrome/app/vector_icons/full_restore_notification.icon
@@ -0,0 +1,51 @@ +// Copyright 2020 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. + +CANVAS_DIMENSIONS, 40, +MOVE_TO, 32.23f, 21.57f, +R_CUBIC_TO, 0.07f, -0.51f, 0.12f, -1.02f, 0.12f, -1.57f, +R_CUBIC_TO, 0, -0.55f, -0.05f, -1.06f, -0.11f, -1.57f, +R_LINE_TO, 3.47f, -2.64f, +R_CUBIC_TO, 0.31f, -0.24f, 0.4f, -0.67f, 0.2f, -1.02f, +R_LINE_TO, -3.29f, -5.54f, +R_CUBIC_TO, -0.2f, -0.35f, -0.64f, -0.48f, -1, -0.35f, +R_LINE_TO, -4.1f, 1.6f, +R_CUBIC_TO, -0.85f, -0.64f, -1.78f, -1.17f, -2.78f, -1.57f, +R_LINE_TO, -0.62f, -4.24f, +R_CUBIC_TO, -0.05f, -0.38f, -0.39f, -0.67f, -0.81f, -0.67f, +R_H_LINE_TO, -6.58f, +R_CUBIC_TO, -0.41f, 0, -0.76f, 0.29f, -0.8f, 0.67f, +R_LINE_TO, -0.62f, 4.24f, +R_CUBIC_TO, -1, 0.4f, -1.92f, 0.94f, -2.78f, 1.57f, +R_LINE_TO, -4.1f, -1.6f, +R_CUBIC_TO, -0.38f, -0.14f, -0.81f, 0, -1, 0.35f, +R_LINE_TO, -3.29f, 5.54f, +R_CUBIC_TO, -0.21f, 0.35f, -0.11f, 0.78f, 0.2f, 1.02f, +R_LINE_TO, 3.47f, 2.64f, +R_CUBIC_TO, -0.07f, 0.51f, -0.11f, 1.04f, -0.11f, 1.57f, +R_CUBIC_TO, 0, 0.53f, 0.05f, 1.06f, 0.12f, 1.57f, +R_LINE_TO, -3.47f, 2.64f, +R_CUBIC_TO, -0.31f, 0.24f, -0.39f, 0.67f, -0.2f, 1.02f, +R_LINE_TO, 3.29f, 5.54f, +R_CUBIC_TO, 0.2f, 0.35f, 0.64f, 0.48f, 1, 0.35f, +R_LINE_TO, 4.1f, -1.6f, +R_CUBIC_TO, 0.86f, 0.64f, 1.78f, 1.17f, 2.78f, 1.57f, +R_LINE_TO, 0.63f, 4.24f, +R_CUBIC_TO, 0.05f, 0.38f, 0.4f, 0.67f, 0.81f, 0.67f, +R_H_LINE_TO, 6.58f, +R_CUBIC_TO, 0.41f, 0, 0.76f, -0.29f, 0.81f, -0.67f, +R_LINE_TO, 0.62f, -4.24f, +R_CUBIC_TO, 1, -0.4f, 1.93f, -0.94f, 2.78f, -1.57f, +R_LINE_TO, 4.1f, 1.6f, +R_CUBIC_TO, 0.38f, 0.14f, 0.81f, 0, 1, -0.35f, +R_LINE_TO, 3.29f, -5.54f, +R_CUBIC_TO, 0.2f, -0.35f, 0.12f, -0.78f, -0.2f, -1.02f, +R_LINE_TO, -3.47f, -2.64f, +CLOSE, +MOVE_TO, 20.01f, 25.6f, +R_CUBIC_TO, -3.18f, 0, -5.76f, -2.51f, -5.76f, -5.6f, +R_CUBIC_TO, 0, -3.09f, 2.58f, -5.6f, 5.76f, -5.6f, +R_CUBIC_TO, 3.17f, 0, 5.76f, 2.51f, 5.76f, 5.6f, +R_CUBIC_TO, 0, 3.09f, -2.58f, 5.6f, -5.76f, 5.6f, +CLOSE
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 6649af1..2059466 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3599,6 +3599,9 @@ {"interest-feed-v2", flag_descriptions::kInterestFeedV2Name, flag_descriptions::kInterestFeedV2Description, kOsAndroid, FEATURE_VALUE_TYPE(feed::kInterestFeedV2)}, + {"web-feed", flag_descriptions::kWebFeedName, + flag_descriptions::kWebFeedDescription, kOsAndroid, + FEATURE_VALUE_TYPE(feed::kWebFeed)}, {"report-feed-user-actions", flag_descriptions::kReportFeedUserActionsName, flag_descriptions::kReportFeedUserActionsDescription, kOsAndroid, FEATURE_VALUE_TYPE(feed::kReportFeedUserActions)}, @@ -4752,7 +4755,11 @@ {"enable-layout-ng", flag_descriptions::kEnableLayoutNGName, flag_descriptions::kEnableLayoutNGDescription, kOsAll, - FEATURE_VALUE_TYPE(blink::features::kLayoutNG)}, + FEATURE_VALUE_TYPE(blink::features::kLayoutNGTable)}, + + {"enable-table-ng", flag_descriptions::kEnableLayoutNGTableName, + flag_descriptions::kEnableLayoutNGTableDescription, kOsAll, + FEATURE_VALUE_TYPE(blink::features::kLayoutNGTable)}, {"enable-lazy-image-loading", flag_descriptions::kEnableLazyImageLoadingName, @@ -4865,14 +4872,6 @@ FEATURE_VALUE_TYPE(features::kUseAAudioDriver)}, #endif - {"allow-sxg-certs-without-extension", - flag_descriptions::kAllowSignedHTTPExchangeCertsWithoutExtensionName, - flag_descriptions:: - kAllowSignedHTTPExchangeCertsWithoutExtensionDescription, - kOsAll, - FEATURE_VALUE_TYPE( - features::kAllowSignedHTTPExchangeCertsWithoutExtension)}, - {"enable-sxg-subresource-prefetching", flag_descriptions::kEnableSignedExchangeSubresourcePrefetchName, flag_descriptions::kEnableSignedExchangeSubresourcePrefetchDescription,
diff --git a/chrome/browser/apps/app_service/app_service_metrics.cc b/chrome/browser/apps/app_service/app_service_metrics.cc index f5a51a5..ff011e93 100644 --- a/chrome/browser/apps/app_service/app_service_metrics.cc +++ b/chrome/browser/apps/app_service/app_service_metrics.cc
@@ -269,8 +269,6 @@ } else if (app_id == plugin_vm::kPluginVmShelfAppId) { RecordBuiltInAppLaunch(BuiltInAppName::kPluginVm, launch_source); #endif // BUILDFLAG(IS_CHROMEOS_ASH) - } else if (app_id == ash::kReleaseNotesAppId) { - RecordBuiltInAppLaunch(BuiltInAppName::kReleaseNotes, launch_source); } else if (app_id == web_app::kMockSystemAppId) { RecordDefaultAppLaunch(DefaultAppName::kMockSystemApp, launch_source); } @@ -291,9 +289,6 @@ base::UmaHistogramEnumeration("Apps.AppListSearchResultInternalApp.Show", BuiltInAppName::kPluginVm); #endif // BUILDFLAG(IS_CHROMEOS_ASH) - } else if (app_id == ash::kReleaseNotesAppId) { - base::UmaHistogramEnumeration("Apps.AppListSearchResultInternalApp.Show", - BuiltInAppName::kReleaseNotes); } }
diff --git a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc index 56695e4..c616dfa 100644 --- a/chrome/browser/apps/app_service/built_in_chromeos_apps.cc +++ b/chrome/browser/apps/app_service/built_in_chromeos_apps.cc
@@ -11,14 +11,12 @@ #include "ash/public/cpp/app_list/internal_app_id_constants.h" #include "ash/public/cpp/app_menu_constants.h" #include "ash/public/cpp/keyboard_shortcut_viewer.h" -#include "base/metrics/user_metrics.h" #include "base/time/time.h" #include "chrome/browser/apps/app_service/app_icon_factory.h" #include "chrome/browser/apps/app_service/app_service_metrics.h" #include "chrome/browser/apps/app_service/menu_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/internal_app/internal_app_metadata.h" -#include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h" #include "chrome/grit/generated_resources.h" #include "components/services/app_service/public/mojom/types.mojom.h" @@ -126,10 +124,6 @@ int64_t display_id) { if (app_id == ash::kInternalAppIdKeyboardShortcutViewer) { ash::ToggleKeyboardShortcutViewer(); - } else if (app_id == ash::kReleaseNotesAppId) { - base::RecordAction( - base::UserMetricsAction("ReleaseNotes.SuggestionChipLaunched")); - chrome::LaunchReleaseNotes(profile_, launch_source); } }
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 27f883a..4639ea3b 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
@@ -17,7 +17,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/install_finalizer.h" -#include "chrome/browser/web_applications/components/pending_app_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_provider_base.h" @@ -265,9 +264,9 @@ size_t num_attempts_so_far, const GURL& app_url, const GURL& install_url, - web_app::InstallResultCode code) { - UMA_HISTOGRAM_ENUMERATION("AndroidSms.PWAInstallationResult", code); - const bool install_succeeded = web_app::IsSuccess(code); + web_app::PendingAppManager::InstallResult result) { + UMA_HISTOGRAM_ENUMERATION("AndroidSms.PWAInstallationResult", result.code); + const bool install_succeeded = web_app::IsSuccess(result.code); if (!install_succeeded && num_attempts_so_far < kMaxInstallRetryCount) { base::TimeDelta retry_delay = @@ -275,7 +274,7 @@ PA_LOG(VERBOSE) << "AndroidSmsAppSetupControllerImpl::OnAppInstallResult(): " << "PWA for " << install_url << " failed to install." - << "InstallResultCode: " << static_cast<int>(code) + << "InstallResultCode: " << static_cast<int>(result.code) << " Retrying again in " << retry_delay; base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, @@ -292,7 +291,7 @@ PA_LOG(WARNING) << "AndroidSmsAppSetupControllerImpl::OnAppInstallResult(): " << "PWA for " << install_url << " failed to install. " - << "InstallResultCode: " << static_cast<int>(code); + << "InstallResultCode: " << static_cast<int>(result.code); std::move(callback).Run(false /* success */); return; }
diff --git a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.h b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.h index 5751813..41c0ac1b 100644 --- a/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.h +++ b/chrome/browser/chromeos/android_sms/android_sms_app_setup_controller_impl.h
@@ -9,6 +9,7 @@ #include "base/memory/weak_ptr.h" #include "base/unguessable_token.h" #include "chrome/browser/chromeos/android_sms/android_sms_app_setup_controller.h" +#include "chrome/browser/web_applications/components/pending_app_manager.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "net/cookies/canonical_cookie.h" #include "net/cookies/cookie_access_result.h" @@ -98,7 +99,7 @@ size_t num_attempts_so_far, const GURL& app_url, const GURL& install_url, - web_app::InstallResultCode code); + web_app::PendingAppManager::InstallResult result); void SetMigrationCookie(const GURL& app_url, const GURL& migrated_to_app_url, SuccessCallback callback);
diff --git a/chrome/browser/chromeos/arc/arc_optin_uma.cc b/chrome/browser/chromeos/arc/arc_optin_uma.cc index 6828016d..68d75f0 100644 --- a/chrome/browser/chromeos/arc/arc_optin_uma.cc +++ b/chrome/browser/chromeos/arc/arc_optin_uma.cc
@@ -214,7 +214,7 @@ if (provisioning_result.is_timedout()) return ProvisioningResultUMA::OVERALL_SIGN_IN_TIMEOUT; - const mojom::ArcSignInResult* result = provisioning_result.signin_result(); + const mojom::ArcSignInResult* result = provisioning_result.sign_in_result(); if (result->is_success()) { if (result->get_success() == mojom::ArcSignInSuccess::SUCCESS) return ProvisioningResultUMA::SUCCESS; @@ -233,7 +233,7 @@ switch (result->get_error()->get_general_error()) { MAP_GENERAL_ERROR(UNKNOWN_ERROR); MAP_GENERAL_ERROR(MOJO_VERSION_MISMATCH); - MAP_GENERAL_ERROR(PROVISIONING_TIMEOUT); + MAP_GENERAL_ERROR(GENERIC_PROVISIONING_TIMEOUT); MAP_GENERAL_ERROR(NO_NETWORK_CONNECTION); MAP_GENERAL_ERROR(CHROME_SERVER_COMMUNICATION_ERROR); MAP_GENERAL_ERROR(ARC_DISABLED); @@ -243,28 +243,28 @@ #undef MAP_GENERAL_ERROR } - if (result->get_error()->is_checkin_error()) { -#define MAP_CHECKIN_ERROR(name) \ - case mojom::DeviceCheckInError::name: \ + if (result->get_error()->is_check_in_error()) { +#define MAP_CHECKIN_ERROR(name) \ + case mojom::GMSCheckInError::name: \ return ProvisioningResultUMA::name - switch (result->get_error()->get_checkin_error()) { - MAP_CHECKIN_ERROR(DEVICE_CHECK_IN_FAILED); - MAP_CHECKIN_ERROR(DEVICE_CHECK_IN_TIMEOUT); - MAP_CHECKIN_ERROR(DEVICE_CHECK_IN_INTERNAL_ERROR); + switch (result->get_error()->get_check_in_error()) { + MAP_CHECKIN_ERROR(GMS_CHECK_IN_FAILED); + MAP_CHECKIN_ERROR(GMS_CHECK_IN_TIMEOUT); + MAP_CHECKIN_ERROR(GMS_CHECK_IN_INTERNAL_ERROR); } #undef MAP_CHECKIN_ERROR } - if (result->get_error()->is_gms_error()) { -#define MAP_GMS_ERROR(name) \ - case mojom::GMSError::name: \ + if (result->get_error()->is_sign_in_error()) { +#define MAP_GMS_ERROR(name) \ + case mojom::GMSSignInError::name: \ return ProvisioningResultUMA::name - switch (result->get_error()->get_gms_error()) { - MAP_GMS_ERROR(GMS_NETWORK_ERROR); - MAP_GMS_ERROR(GMS_SERVICE_UNAVAILABLE); - MAP_GMS_ERROR(GMS_BAD_AUTHENTICATION); + switch (result->get_error()->get_sign_in_error()) { + MAP_GMS_ERROR(GMS_SIGN_IN_NETWORK_ERROR); + MAP_GMS_ERROR(GMS_SIGN_IN_SERVICE_UNAVAILABLE); + MAP_GMS_ERROR(GMS_SIGN_IN_BAD_AUTHENTICATION); MAP_GMS_ERROR(GMS_SIGN_IN_FAILED); MAP_GMS_ERROR(GMS_SIGN_IN_TIMEOUT); MAP_GMS_ERROR(GMS_SIGN_IN_INTERNAL_ERROR); @@ -285,14 +285,14 @@ switch (result) { MAP_PROVISIONING_RESULT(SUCCESS); MAP_PROVISIONING_RESULT(UNKNOWN_ERROR); - MAP_PROVISIONING_RESULT(GMS_NETWORK_ERROR); - MAP_PROVISIONING_RESULT(GMS_SERVICE_UNAVAILABLE); - MAP_PROVISIONING_RESULT(GMS_BAD_AUTHENTICATION); - MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_FAILED); + MAP_PROVISIONING_RESULT(GMS_SIGN_IN_NETWORK_ERROR); + MAP_PROVISIONING_RESULT(GMS_SIGN_IN_SERVICE_UNAVAILABLE); + MAP_PROVISIONING_RESULT(GMS_SIGN_IN_BAD_AUTHENTICATION); + MAP_PROVISIONING_RESULT(GMS_CHECK_IN_FAILED); MAP_PROVISIONING_RESULT(MOJO_VERSION_MISMATCH); - MAP_PROVISIONING_RESULT(PROVISIONING_TIMEOUT); - MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_TIMEOUT); - MAP_PROVISIONING_RESULT(DEVICE_CHECK_IN_INTERNAL_ERROR); + MAP_PROVISIONING_RESULT(GENERIC_PROVISIONING_TIMEOUT); + MAP_PROVISIONING_RESULT(GMS_CHECK_IN_TIMEOUT); + MAP_PROVISIONING_RESULT(GMS_CHECK_IN_INTERNAL_ERROR); MAP_PROVISIONING_RESULT(GMS_SIGN_IN_FAILED); MAP_PROVISIONING_RESULT(GMS_SIGN_IN_TIMEOUT); MAP_PROVISIONING_RESULT(GMS_SIGN_IN_INTERNAL_ERROR);
diff --git a/chrome/browser/chromeos/arc/arc_optin_uma.h b/chrome/browser/chromeos/arc/arc_optin_uma.h index 7326fb5..17aa45e 100644 --- a/chrome/browser/chromeos/arc/arc_optin_uma.h +++ b/chrome/browser/chromeos/arc/arc_optin_uma.h
@@ -114,22 +114,22 @@ UNKNOWN_ERROR = 1, // GMS errors. More errors defined below. - GMS_NETWORK_ERROR = 2, - GMS_SERVICE_UNAVAILABLE = 3, - GMS_BAD_AUTHENTICATION = 4, + GMS_SIGN_IN_NETWORK_ERROR = 2, + GMS_SIGN_IN_SERVICE_UNAVAILABLE = 3, + GMS_SIGN_IN_BAD_AUTHENTICATION = 4, // Check in error. More errors defined below. - DEVICE_CHECK_IN_FAILED = 5, + GMS_CHECK_IN_FAILED = 5, // Mojo errors. MOJO_VERSION_MISMATCH = 7, - // Misc - PROVISIONING_TIMEOUT = 8, + // ARC did not finish provisioning within a reasonable amount of time. + GENERIC_PROVISIONING_TIMEOUT = 8, // Check in error. - DEVICE_CHECK_IN_TIMEOUT = 9, - DEVICE_CHECK_IN_INTERNAL_ERROR = 10, + GMS_CHECK_IN_TIMEOUT = 9, + GMS_CHECK_IN_INTERNAL_ERROR = 10, // GMS errors: GMS_SIGN_IN_FAILED = 11,
diff --git a/chrome/browser/chromeos/arc/session/arc_provisioning_result.cc b/chrome/browser/chromeos/arc/session/arc_provisioning_result.cc index d8d1263..309120e 100644 --- a/chrome/browser/chromeos/arc/session/arc_provisioning_result.cc +++ b/chrome/browser/chromeos/arc/session/arc_provisioning_result.cc
@@ -13,38 +13,38 @@ : result_(std::move(result)) {} ArcProvisioningResult::ArcProvisioningResult(ArcStopReason reason) : result_(reason) {} -ArcProvisioningResult::ArcProvisioningResult(OverallSignInTimeout timeout) +ArcProvisioningResult::ArcProvisioningResult(ChromeProvisioningTimeout timeout) : result_(timeout) {} ArcProvisioningResult::ArcProvisioningResult(ArcProvisioningResult&& other) = default; ArcProvisioningResult::~ArcProvisioningResult() = default; -bool ArcProvisioningResult::has_signin_result() const { +bool ArcProvisioningResult::has_sign_in_result() const { return absl::holds_alternative<mojom::ArcSignInResultPtr>(result_); } -const mojom::ArcSignInResult* ArcProvisioningResult::signin_result() const { - DCHECK(has_signin_result()); +const mojom::ArcSignInResult* ArcProvisioningResult::sign_in_result() const { + DCHECK(has_sign_in_result()); return absl::get<mojom::ArcSignInResultPtr>(result_).get(); } -bool ArcProvisioningResult::has_signin_error() const { - return has_signin_result() && signin_result()->is_error(); +bool ArcProvisioningResult::has_sign_in_error() const { + return has_sign_in_result() && sign_in_result()->is_error(); } -const mojom::ArcSignInError* ArcProvisioningResult::signin_error() const { - DCHECK(has_signin_error()); - return signin_result()->get_error().get(); +const mojom::ArcSignInError* ArcProvisioningResult::sign_in_error() const { + DCHECK(has_sign_in_error()); + return sign_in_result()->get_error().get(); } bool ArcProvisioningResult::is_success() const { - return has_signin_result() && signin_result()->is_success(); + return has_sign_in_result() && sign_in_result()->is_success(); } bool ArcProvisioningResult::has_general_error( mojom::GeneralSignInError error) const { - return has_signin_error() && signin_error()->is_general_error() && - signin_error()->get_general_error() == error; + return has_sign_in_error() && sign_in_error()->is_general_error() && + sign_in_error()->get_general_error() == error; } bool ArcProvisioningResult::is_stopped() const { @@ -57,7 +57,7 @@ } bool ArcProvisioningResult::is_timedout() const { - return absl::holds_alternative<OverallSignInTimeout>(result_); + return absl::holds_alternative<ChromeProvisioningTimeout>(result_); } std::ostream& operator<<(std::ostream& os,
diff --git a/chrome/browser/chromeos/arc/session/arc_provisioning_result.h b/chrome/browser/chromeos/arc/session/arc_provisioning_result.h index 5edd44c6..3fc6931 100644 --- a/chrome/browser/chromeos/arc/session/arc_provisioning_result.h +++ b/chrome/browser/chromeos/arc/session/arc_provisioning_result.h
@@ -16,28 +16,28 @@ namespace arc { // A struct that represents timeout of ARC provisioning from Chrome. -struct OverallSignInTimeout {}; +struct ChromeProvisioningTimeout {}; // A class that encapsulates the result of provisioning ARC. class ArcProvisioningResult { public: explicit ArcProvisioningResult(mojom::ArcSignInResultPtr result); explicit ArcProvisioningResult(ArcStopReason reason); - explicit ArcProvisioningResult(OverallSignInTimeout timeout); + explicit ArcProvisioningResult(ChromeProvisioningTimeout timeout); ArcProvisioningResult(ArcProvisioningResult&& other); ~ArcProvisioningResult(); // Returns true if signin_result from ARC is present. - bool has_signin_result() const; + bool has_sign_in_result() const; // Returns the result of provisioning from inside ARC. - const mojom::ArcSignInResult* signin_result() const; + const mojom::ArcSignInResult* sign_in_result() const; // Returns true if signin_result is present with an error. - bool has_signin_error() const; + bool has_sign_in_error() const; // Returns the error of signin_result coming from ARC. - const mojom::ArcSignInError* signin_error() const; + const mojom::ArcSignInError* sign_in_error() const; // Returns true if result has given general sign-in error. bool has_general_error(mojom::GeneralSignInError error) const; @@ -55,7 +55,9 @@ bool is_timedout() const; private: - absl::variant<mojom::ArcSignInResultPtr, ArcStopReason, OverallSignInTimeout> + absl::variant<mojom::ArcSignInResultPtr, + ArcStopReason, + ChromeProvisioningTimeout> result_; };
diff --git a/chrome/browser/chromeos/arc/session/arc_provisioning_result_unittest.cc b/chrome/browser/chromeos/arc/session/arc_provisioning_result_unittest.cc index 20d7dafb..c1840e0 100644 --- a/chrome/browser/chromeos/arc/session/arc_provisioning_result_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_provisioning_result_unittest.cc
@@ -11,21 +11,21 @@ TEST(ArcProvisioningResultTest, HasSignInResult) { ArcProvisioningResult result1(ArcStopReason::CRASH); - EXPECT_FALSE(result1.has_signin_result()); + EXPECT_FALSE(result1.has_sign_in_result()); ArcProvisioningResult result2(arc::mojom::ArcSignInResult::NewSuccess( arc::mojom::ArcSignInSuccess::SUCCESS)); - EXPECT_TRUE(result2.has_signin_result()); + EXPECT_TRUE(result2.has_sign_in_result()); } TEST(ArcProvisioningResultTest, HasSignInError) { ArcProvisioningResult result1(ArcStopReason::CRASH); - EXPECT_FALSE(result1.has_signin_error()); + EXPECT_FALSE(result1.has_sign_in_error()); ArcProvisioningResult result2(arc::mojom::ArcSignInResult::NewError( arc::mojom::ArcSignInError::NewGeneralError( arc::mojom::GeneralSignInError::CHROME_SERVER_COMMUNICATION_ERROR))); - EXPECT_TRUE(result2.has_signin_error()); + EXPECT_TRUE(result2.has_sign_in_error()); } TEST(ArcProvisioningResultTest, Success) { @@ -63,7 +63,7 @@ ArcProvisioningResult result1(ArcStopReason::CRASH); EXPECT_FALSE(result1.is_timedout()); - ArcProvisioningResult result2(OverallSignInTimeout{}); + ArcProvisioningResult result2(ChromeProvisioningTimeout{}); EXPECT_TRUE(result2.is_timedout()); }
diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager.cc b/chrome/browser/chromeos/arc/session/arc_session_manager.cc index 89b0083..b61980e 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager.cc
@@ -292,25 +292,25 @@ return true; } -int GetSignInErrorCode(const arc::mojom::ArcSignInError* signin_error) { - if (!signin_error) +int GetSignInErrorCode(const arc::mojom::ArcSignInError* sign_in_error) { + if (!sign_in_error) return 0; #define IF_ERROR_RETURN_CODE(name, type) \ - if (signin_error->is_##name()) { \ + if (sign_in_error->is_##name()) { \ return static_cast<std::underlying_type_t<arc::mojom::type>>( \ - signin_error->get_##name()); \ + sign_in_error->get_##name()); \ } IF_ERROR_RETURN_CODE(cloud_provision_flow_error, CloudProvisionFlowError) IF_ERROR_RETURN_CODE(general_error, GeneralSignInError) - IF_ERROR_RETURN_CODE(checkin_error, DeviceCheckInError) - IF_ERROR_RETURN_CODE(gms_error, GMSError) + IF_ERROR_RETURN_CODE(check_in_error, GMSCheckInError) + IF_ERROR_RETURN_CODE(sign_in_error, GMSSignInError) #undef IF_ERROR_RETURN_CODE LOG(ERROR) << "Unknown sign-in error " << std::underlying_type_t<arc::mojom::ArcSignInError::Tag>( - signin_error->which()) + sign_in_error->which()) << "."; return -1; @@ -578,8 +578,8 @@ return; } - const mojom::ArcSignInError* signin_error = - result.has_signin_error() ? result.signin_error() : nullptr; + const mojom::ArcSignInError* sign_in_error = + result.has_sign_in_error() ? result.sign_in_error() : nullptr; // Due asynchronous nature of stopping the ARC instance, // OnProvisioningFinished may arrive after setting the |State::STOPPED| state @@ -625,9 +625,9 @@ UpdateProvisioningTiming(base::TimeTicks::Now() - sign_in_start_time_, provisioning_successful, profile_); UpdateProvisioningResultUMA(GetProvisioningResultUMA(result), profile_); - if (signin_error && signin_error->is_cloud_provision_flow_error()) { + if (sign_in_error && sign_in_error->is_cloud_provision_flow_error()) { UpdateCloudProvisionFlowErrorUMA( - signin_error->get_cloud_provision_flow_error(), profile_); + sign_in_error->get_cloud_provision_flow_error(), profile_); } if (!provisioning_successful) @@ -670,20 +670,21 @@ ArcSupportHost::Error support_error; VLOG(1) << "ARC provisioning failed: " << result << "."; - if (signin_error && signin_error->is_gms_error() && - signin_error->get_gms_error() == mojom::GMSError::GMS_NETWORK_ERROR) { + if (sign_in_error && sign_in_error->is_sign_in_error() && + sign_in_error->get_sign_in_error() == + mojom::GMSSignInError::GMS_SIGN_IN_NETWORK_ERROR) { support_error = ArcSupportHost::Error::SIGN_IN_NETWORK_ERROR; - } else if (signin_error && signin_error->is_gms_error() && - signin_error->get_gms_error() == - mojom::GMSError::GMS_BAD_AUTHENTICATION) { + } else if (sign_in_error && sign_in_error->is_sign_in_error() && + sign_in_error->get_sign_in_error() == + mojom::GMSSignInError::GMS_SIGN_IN_BAD_AUTHENTICATION) { support_error = ArcSupportHost::Error::SIGN_IN_BAD_AUTHENTICATION_ERROR; - } else if (signin_error && signin_error->is_gms_error()) { + } else if (sign_in_error && sign_in_error->is_sign_in_error()) { support_error = ArcSupportHost::Error::SIGN_IN_SERVICE_UNAVAILABLE_ERROR; - } else if (signin_error && signin_error->is_checkin_error()) { + } else if (sign_in_error && sign_in_error->is_check_in_error()) { support_error = ArcSupportHost::Error::SIGN_IN_GMS_NOT_AVAILABLE_ERROR; - } else if (signin_error && signin_error->is_cloud_provision_flow_error()) { + } else if (sign_in_error && sign_in_error->is_cloud_provision_flow_error()) { support_error = GetCloudProvisionFlowError( - signin_error->get_cloud_provision_flow_error()); + sign_in_error->get_cloud_provision_flow_error()); } else if (result.has_general_error(mojom::GeneralSignInError:: CHROME_SERVER_COMMUNICATION_ERROR)) { support_error = ArcSupportHost::Error::SERVER_COMMUNICATION_ERROR; @@ -714,7 +715,7 @@ ShutdownSession(); } - if ((signin_error && signin_error->is_cloud_provision_flow_error()) || + if ((sign_in_error && sign_in_error->is_cloud_provision_flow_error()) || // OVERALL_SIGN_IN_TIMEOUT might be an indication that ARC believes it is // fully setup, but Chrome does not. result.is_timedout() || @@ -728,8 +729,8 @@ if (support_error == ArcSupportHost::Error::SIGN_IN_UNKNOWN_ERROR) { error_code = static_cast<std::underlying_type_t<ProvisioningResultUMA>>( GetProvisioningResultUMA(result)); - } else if (signin_error) { - error_code = GetSignInErrorCode(signin_error); + } else if (sign_in_error) { + error_code = GetSignInErrorCode(sign_in_error); } ShowArcSupportHostError({support_error, error_code} /* error_info */, true /* should_show_send_feedback */); @@ -917,7 +918,7 @@ void ArcSessionManager::OnArcSignInTimeout() { LOG(ERROR) << "Timed out waiting for first sign in."; - OnProvisioningFinished(ArcProvisioningResult(OverallSignInTimeout())); + OnProvisioningFinished(ArcProvisioningResult(ChromeProvisioningTimeout())); } void ArcSessionManager::CancelAuthCode() {
diff --git a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc index b9f90bcd..c476016 100644 --- a/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc +++ b/chrome/browser/chromeos/arc/session/arc_session_manager_unittest.cc
@@ -691,8 +691,8 @@ // Report failure. arc::mojom::ArcSignInResultPtr result = arc::mojom::ArcSignInResult::NewError( - arc::mojom::ArcSignInError::NewGmsError( - arc::mojom::GMSError::GMS_NETWORK_ERROR)); + arc::mojom::ArcSignInError::NewSignInError( + arc::mojom::GMSSignInError::GMS_SIGN_IN_NETWORK_ERROR)); arc_session_manager()->OnProvisioningFinished( ArcProvisioningResult(std::move(result))); @@ -897,8 +897,8 @@ // Report some failure that does not stop the bridge. arc::mojom::ArcSignInResultPtr result = arc::mojom::ArcSignInResult::NewError( - arc::mojom::ArcSignInError::NewGmsError( - arc::mojom::GMSError::GMS_SIGN_IN_FAILED)); + arc::mojom::ArcSignInError::NewSignInError( + arc::mojom::GMSSignInError::GMS_SIGN_IN_FAILED)); arc_session_manager()->OnProvisioningFinished( ArcProvisioningResult(std::move(result))); EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); @@ -1636,11 +1636,11 @@ bool data_removed; absl::variant<arc::mojom::GeneralSignInError, - arc::mojom::GMSError, - arc::mojom::DeviceCheckInError, + arc::mojom::GMSSignInError, + arc::mojom::GMSCheckInError, arc::mojom::CloudProvisionFlowError, ArcStopReason, - OverallSignInTimeout> + ChromeProvisioningTimeout> error; }; @@ -1648,29 +1648,29 @@ {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, true, arc::mojom::GeneralSignInError::UNKNOWN_ERROR}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_NETWORK_ERROR}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_NETWORK_ERROR}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_SERVICE_UNAVAILABLE}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_SERVICE_UNAVAILABLE}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_BAD_AUTHENTICATION}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_BAD_AUTHENTICATION}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::DeviceCheckInError::DEVICE_CHECK_IN_FAILED}, + arc::mojom::GMSCheckInError::GMS_CHECK_IN_FAILED}, {ArcSessionRetryTestParam::Negotiation::SKIPPED, true, true, arc::mojom::CloudProvisionFlowError::ERROR_OTHER}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, arc::mojom::GeneralSignInError::MOJO_VERSION_MISMATCH}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GeneralSignInError::PROVISIONING_TIMEOUT}, + arc::mojom::GeneralSignInError::GENERIC_PROVISIONING_TIMEOUT}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::DeviceCheckInError::DEVICE_CHECK_IN_TIMEOUT}, + arc::mojom::GMSCheckInError::GMS_CHECK_IN_TIMEOUT}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::DeviceCheckInError::DEVICE_CHECK_IN_INTERNAL_ERROR}, + arc::mojom::GMSCheckInError::GMS_CHECK_IN_INTERNAL_ERROR}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_SIGN_IN_FAILED}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_FAILED}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_SIGN_IN_TIMEOUT}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_TIMEOUT}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, - arc::mojom::GMSError::GMS_SIGN_IN_INTERNAL_ERROR}, + arc::mojom::GMSSignInError::GMS_SIGN_IN_INTERNAL_ERROR}, {ArcSessionRetryTestParam::Negotiation::SKIPPED, true, true, arc::mojom::CloudProvisionFlowError::ERROR_TIMEOUT}, {ArcSessionRetryTestParam::Negotiation::SKIPPED, true, true, @@ -1678,7 +1678,7 @@ {ArcSessionRetryTestParam::Negotiation::REQUIRED, false, false, ArcStopReason::CRASH}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, true, - OverallSignInTimeout{}}, + ChromeProvisioningTimeout{}}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, false, false, arc::mojom::GeneralSignInError::CHROME_SERVER_COMMUNICATION_ERROR}, {ArcSessionRetryTestParam::Negotiation::REQUIRED, true, false, @@ -1752,10 +1752,10 @@ arc_session_manager()->StartArcForTesting(); EXPECT_EQ(ArcSessionManager::State::ACTIVE, arc_session_manager()->state()); - absl::variant<arc::mojom::GeneralSignInError, arc::mojom::GMSError, - arc::mojom::DeviceCheckInError, + absl::variant<arc::mojom::GeneralSignInError, arc::mojom::GMSSignInError, + arc::mojom::GMSCheckInError, arc::mojom::CloudProvisionFlowError, ArcStopReason, - OverallSignInTimeout> + ChromeProvisioningTimeout> error = std::move(GetParam().error); if (absl::holds_alternative<arc::mojom::CloudProvisionFlowError>(error)) { @@ -1771,19 +1771,19 @@ arc::mojom::ArcSignInError::NewGeneralError( absl::get<arc::mojom::GeneralSignInError>(error)))); arc_session_manager()->OnProvisioningFinished(result); - } else if (absl::holds_alternative<arc::mojom::GMSError>(error)) { + } else if (absl::holds_alternative<arc::mojom::GMSSignInError>(error)) { ArcProvisioningResult result(arc::mojom::ArcSignInResult::NewError( - arc::mojom::ArcSignInError::NewGmsError( - absl::get<arc::mojom::GMSError>(error)))); + arc::mojom::ArcSignInError::NewSignInError( + absl::get<arc::mojom::GMSSignInError>(error)))); arc_session_manager()->OnProvisioningFinished(result); - } else if (absl::holds_alternative<arc::mojom::DeviceCheckInError>(error)) { + } else if (absl::holds_alternative<arc::mojom::GMSCheckInError>(error)) { ArcProvisioningResult result(arc::mojom::ArcSignInResult::NewError( - arc::mojom::ArcSignInError::NewCheckinError( - absl::get<arc::mojom::DeviceCheckInError>(error)))); + arc::mojom::ArcSignInError::NewCheckInError( + absl::get<arc::mojom::GMSCheckInError>(error)))); arc_session_manager()->OnProvisioningFinished(result); - } else if (absl::holds_alternative<OverallSignInTimeout>(error)) { + } else if (absl::holds_alternative<ChromeProvisioningTimeout>(error)) { arc_session_manager()->OnProvisioningFinished( - ArcProvisioningResult(OverallSignInTimeout{})); + ArcProvisioningResult(ChromeProvisioningTimeout{})); } // In case of permanent error data removal request is scheduled.
diff --git a/chrome/browser/chromeos/crostini/crostini_manager.cc b/chrome/browser/chromeos/crostini/crostini_manager.cc index 894a7e0..caf0a4d 100644 --- a/chrome/browser/chromeos/crostini/crostini_manager.cc +++ b/chrome/browser/chromeos/crostini/crostini_manager.cc
@@ -1215,7 +1215,7 @@ std::move(callback).Run(CrostiniResult::CLIENT_ERROR); return; } - if (!GetCiceroneClient()->IsLxdContainerStartingSignalConnected()) { + if (!GetCiceroneClient()->IsStartLxdProgressSignalConnected()) { LOG(ERROR) << "Async call to StartLxd can't complete when signals " "are not connected."; std::move(callback).Run(CrostiniResult::CLIENT_ERROR);
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service.cc b/chrome/browser/chromeos/full_restore/full_restore_service.cc index f5aff1f..2c83e76 100644 --- a/chrome/browser/chromeos/full_restore/full_restore_service.cc +++ b/chrome/browser/chromeos/full_restore/full_restore_service.cc
@@ -4,19 +4,93 @@ #include "chrome/browser/chromeos/full_restore/full_restore_service.h" +#include "ash/public/cpp/notification_utils.h" +#include "base/strings/string_util.h" +#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/chromeos/full_restore/full_restore_service_factory.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/notifications/notification_display_service.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/grit/chromium_strings.h" +#include "chrome/grit/generated_resources.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/message_center/public/cpp/notification.h" + +namespace { + +constexpr char kRestoreForCrashNotificationId[] = + "restore_for_crash_notification"; + +} // namespace namespace chromeos { namespace full_restore { -FullRestoreService::FullRestoreService(Profile* profile) { - // TODO(crbug.com/909794):If the system crashed before reboot, show the - // notification notification. Otherwise, read |kRestoreAppsAndPagesPrefName| - // from the user pref. +FullRestoreService::FullRestoreService(Profile* profile) : profile_(profile) { + // If the system crashed before reboot, show the restore notification. + if (profile->GetLastSessionExitType() == Profile::EXIT_CRASHED) { + ShowRestoreNotification(kRestoreForCrashNotificationId); + return; + } + + // TODO(crbug.com/909794):On startup for normal reboot, read + // |kRestoreAppsAndPagesPrefName| from the user pref, show the restore + // notification for the 'ask every time' option. } FullRestoreService::~FullRestoreService() = default; +void FullRestoreService::Shutdown() { + is_shut_down_ = true; +} + +void FullRestoreService::ShowRestoreNotification(const std::string& id) { + message_center::RichNotificationData notification_data; + message_center::ButtonInfo restore_button(l10n_util::GetStringUTF16( + base::ToUpperASCII(IDS_RESTORE_NOTIFICATION_RESTORE_BUTTON))); + notification_data.buttons.push_back(restore_button); + message_center::ButtonInfo cancel_button(l10n_util::GetStringUTF16( + base::ToUpperASCII(IDS_RESTORE_NOTIFICATION_CANCEL_BUTTON))); + notification_data.buttons.push_back(cancel_button); + + std::unique_ptr<message_center::Notification> notification = + ash::CreateSystemNotification( + message_center::NOTIFICATION_TYPE_SIMPLE, id, + l10n_util::GetStringUTF16(IDS_RESTORE_NOTIFICATION_TITLE), + l10n_util::GetStringUTF16(IDS_RESTORE_FOR_CRASH_NOTIFICATION_MESSAGE), + l10n_util::GetStringUTF16(IDS_RESTORE_NOTIFICATION_DISPLAY_SOURCE), + GURL(), + message_center::NotifierId( + message_center::NotifierType::SYSTEM_COMPONENT, + kRestoreForCrashNotificationId), + notification_data, + base::MakeRefCounted<message_center::HandleNotificationClickDelegate>( + base::BindRepeating( + &FullRestoreService::HandleRestoreNotificationClicked, + weak_ptr_factory_.GetWeakPtr(), + kRestoreForCrashNotificationId)), + kFullRestoreNotificationIcon, + message_center::SystemNotificationWarningLevel::NORMAL); + notification->set_priority(message_center::SYSTEM_PRIORITY); + + auto* notification_display_service = + NotificationDisplayService::GetForProfile(profile_); + DCHECK(notification_display_service); + notification_display_service->Display(NotificationHandler::Type::TRANSIENT, + *notification, + /*metadata=*/nullptr); +} + +void FullRestoreService::HandleRestoreNotificationClicked( + const std::string& id, + base::Optional<int> button_index) { + // TODO(crbug.com/909794):Get the user selection and start the restoration. + + if (!is_shut_down_) { + NotificationDisplayService::GetForProfile(profile_)->Close( + NotificationHandler::Type::TRANSIENT, id); + } +} + } // namespace full_restore } // namespace chromeos
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service.h b/chrome/browser/chromeos/full_restore/full_restore_service.h index bc98edc..655df5b 100644 --- a/chrome/browser/chromeos/full_restore/full_restore_service.h +++ b/chrome/browser/chromeos/full_restore/full_restore_service.h
@@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_CHROMEOS_FULL_RESTORE_FULL_RESTORE_SERVICE_H_ #define CHROME_BROWSER_CHROMEOS_FULL_RESTORE_FULL_RESTORE_SERVICE_H_ +#include "base/memory/weak_ptr.h" +#include "base/optional.h" #include "components/keyed_service/core/keyed_service.h" class Profile; @@ -32,6 +34,22 @@ FullRestoreService(const FullRestoreService&) = delete; FullRestoreService& operator=(const FullRestoreService&) = delete; + + private: + // KeyedService overrides. + void Shutdown() override; + + // Show the restore notification on startup. + void ShowRestoreNotification(const std::string& id); + + void HandleRestoreNotificationClicked(const std::string& id, + base::Optional<int> button_index); + + Profile* profile_ = nullptr; + + bool is_shut_down_ = false; + + base::WeakPtrFactory<FullRestoreService> weak_ptr_factory_{this}; }; } // namespace full_restore
diff --git a/chrome/browser/chromeos/full_restore/full_restore_service_factory.cc b/chrome/browser/chromeos/full_restore/full_restore_service_factory.cc index 9ea4936..b505253b 100644 --- a/chrome/browser/chromeos/full_restore/full_restore_service_factory.cc +++ b/chrome/browser/chromeos/full_restore/full_restore_service_factory.cc
@@ -7,6 +7,7 @@ #include "ash/public/cpp/ash_features.h" #include "chrome/browser/chromeos/full_restore/full_restore_service.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" @@ -40,7 +41,9 @@ FullRestoreServiceFactory::FullRestoreServiceFactory() : BrowserContextKeyedServiceFactory( "FullRestoreService", - BrowserContextDependencyManager::GetInstance()) {} + BrowserContextDependencyManager::GetInstance()) { + DependsOn(NotificationDisplayServiceFactory::GetInstance()); +} FullRestoreServiceFactory::~FullRestoreServiceFactory() = default;
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc index 982e692..163b99ec 100644 --- a/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_engine_unittest.cc
@@ -53,7 +53,6 @@ }; void InitInputMethod() { - auto* comp_ime_manager = new ComponentExtensionIMEManager; auto* delegate = new MockComponentExtensionIMEManagerDelegate; ComponentExtensionIME ext1; @@ -68,7 +67,8 @@ std::vector<ComponentExtensionIME> ime_list; ime_list.push_back(ext1); delegate->set_ime_list(ime_list); - comp_ime_manager->Initialize( + + auto* comp_ime_manager = new ComponentExtensionIMEManager( std::unique_ptr<ComponentExtensionIMEManagerDelegate>(delegate)); auto* manager = new MockInputMethodManagerImpl;
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc index dc9ff1f..658cde08 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -960,7 +960,6 @@ bool enable_extension_loading) : delegate_(std::move(delegate)), util_(delegate_.get()), - component_extension_ime_manager_(new ComponentExtensionIMEManager()), enable_extension_loading_(enable_extension_loading), features_enabled_state_(InputMethodManager::FEATURE_ALL) { if (IsRunningAsSystemCompositor()) { @@ -970,8 +969,9 @@ keyboard_ = std::make_unique<FakeImeKeyboard>(); } // Initializes the system IME list. - component_extension_ime_manager_->Initialize( - std::move(component_extension_ime_manager_delegate)); + component_extension_ime_manager_ = + std::make_unique<ComponentExtensionIMEManager>( + std::move(component_extension_ime_manager_delegate)); const InputMethodDescriptors& descriptors = component_extension_ime_manager_->GetAllIMEAsInputMethodDescriptor(); util_.ResetInputMethods(descriptors);
diff --git a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc index 99b1b7a..3c25051 100644 --- a/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc +++ b/chrome/browser/chromeos/login/enrollment/enterprise_enrollment_helper_impl.cc
@@ -26,6 +26,8 @@ #include "chrome/browser/policy/enrollment_status.h" #include "chromeos/constants/chromeos_switches.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/tpm_manager/tpm_manager.pb.h" +#include "chromeos/dbus/tpm_manager/tpm_manager_client.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/policy/core/common/cloud/dm_auth.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -78,7 +80,8 @@ EnterpriseEnrollmentHelperImpl::EnterpriseEnrollmentHelperImpl() { // Init the TPM if it has not been done until now (in debug build we might // have not done that yet). - CryptohomeClient::Get()->TpmCanAttemptOwnership(base::DoNothing()); + TpmManagerClient::Get()->TakeOwnership(::tpm_manager::TakeOwnershipRequest(), + base::DoNothing()); } EnterpriseEnrollmentHelperImpl::~EnterpriseEnrollmentHelperImpl() {
diff --git a/chrome/browser/chromeos/preferences_unittest.cc b/chrome/browser/chromeos/preferences_unittest.cc index 237f7f32..b4bb609b 100644 --- a/chrome/browser/chromeos/preferences_unittest.cc +++ b/chrome/browser/chromeos/preferences_unittest.cc
@@ -254,8 +254,8 @@ std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate( mock_delegate); std::unique_ptr<ComponentExtensionIMEManager> - component_extension_ime_manager(new ComponentExtensionIMEManager); - component_extension_ime_manager->Initialize(std::move(delegate)); + component_extension_ime_manager( + new ComponentExtensionIMEManager(std::move(delegate))); // Add the ComponentExtensionIMEManager to the mock InputMethodManager. mock_manager_->SetComponentExtensionIMEManager(
diff --git a/chrome/browser/devtools/protocol/security_handler.cc b/chrome/browser/devtools/protocol/security_handler.cc index 472686c..5fb1006 100644 --- a/chrome/browser/devtools/protocol/security_handler.cc +++ b/chrome/browser/devtools/protocol/security_handler.cc
@@ -43,9 +43,7 @@ case security_state::NONE: return protocol::Security::SecurityStateEnum::Neutral; case security_state::WARNING: - if (security_state::ShouldShowDangerTriangleForWarningLevel()) - return protocol::Security::SecurityStateEnum::Insecure; - return protocol::Security::SecurityStateEnum::Neutral; + return protocol::Security::SecurityStateEnum::Insecure; case security_state::SECURE_WITH_POLICY_INSTALLED_CERT: case security_state::SECURE: return protocol::Security::SecurityStateEnum::Secure;
diff --git a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc index 2dfb43e..bf90bae 100644 --- a/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc +++ b/chrome/browser/extensions/api/declarative_net_request/declarative_net_request_browsertest.cc
@@ -98,6 +98,7 @@ #include "extensions/common/api/declarative_net_request/test_utils.h" #include "extensions/common/api/extension_action/action_info.h" #include "extensions/common/constants.h" +#include "extensions/common/error_utils.h" #include "extensions/common/extension_features.h" #include "extensions/common/extension_id.h" #include "extensions/common/file_util.h" @@ -396,17 +397,20 @@ UnorderedElementsAreArray(expected_ruleset_ids)); } - void SetActionsAsBadgeText(const ExtensionId& extension_id, bool pref) { - const char* pref_string = pref ? "true" : "false"; + std::string SetExtensionActionOptions(const ExtensionId& extension_id, + const std::string& options) { static constexpr char kSetExtensionActionOptionsScript[] = R"( - chrome.declarativeNetRequest.setExtensionActionOptions( - {displayActionCountAsBadgeText: %s}); - window.domAutomationController.send("done"); + chrome.declarativeNetRequest.setExtensionActionOptions(%s, + () => { + window.domAutomationController.send(chrome.runtime.lastError ? + chrome.runtime.lastError.message : 'success'); + } + ); )"; - ExecuteScriptInBackgroundPage( + return ExecuteScriptInBackgroundPage( extension_id, - base::StringPrintf(kSetExtensionActionOptionsScript, pref_string)); + base::StringPrintf(kSetExtensionActionOptionsScript, options.c_str())); } // Navigates frame with name |frame_name| to |url|. @@ -3160,8 +3164,12 @@ EXPECT_EQ(default_badge_text, query_badge_text(extension_2->id(), first_tab_id)); - SetActionsAsBadgeText(extension_1->id(), true); - SetActionsAsBadgeText(extension_2->id(), true); + EXPECT_EQ(SetExtensionActionOptions(extension_1->id(), + "{displayActionCountAsBadgeText: true}"), + "success"); + EXPECT_EQ(SetExtensionActionOptions(extension_2->id(), + "{displayActionCountAsBadgeText: true}"), + "success"); // After enabling the preference the visible badge text should remain as the // default initially, as the action count for the tab is still 0 for both @@ -3215,8 +3223,12 @@ EXPECT_EQ(declarative_net_request::kActionCountPlaceholderBadgeText, query_badge_text(extension_1->id(), first_tab_id)); - SetActionsAsBadgeText(extension_1->id(), false); - SetActionsAsBadgeText(extension_2->id(), false); + EXPECT_EQ(SetExtensionActionOptions(extension_1->id(), + "{displayActionCountAsBadgeText: false}"), + "success"); + EXPECT_EQ(SetExtensionActionOptions(extension_2->id(), + "{displayActionCountAsBadgeText: false}"), + "success"); // Switching the preference off should cause the extension queried badge text // to be the explicitly set badge text for this tab if it exists. In this @@ -3286,7 +3298,9 @@ TestExtensionActionAPIObserver test_api_observer( profile(), extension_id, {web_contents(), second_browser_contents}); - SetActionsAsBadgeText(extension_id, true); + EXPECT_EQ(SetExtensionActionOptions(extension_id, + "{displayActionCountAsBadgeText: true}"), + "success"); // Wait until ExtensionActionAPI::NotifyChange is called, then perform a // sanity check that one action was matched, and this is reflected in the @@ -3594,6 +3608,124 @@ } } +// Test that the setExtensionActionOptions tabUpdate option works correctly. +IN_PROC_BROWSER_TEST_P(DeclarativeNetRequestBrowserTest, + ActionsMatchedCountAsBadgeTextTabUpdate) { + // Load the extension with a background script so scripts can be run from its + // generated background page. + set_config_flags(ConfigFlag::kConfig_HasBackgroundScript); + + // Set up an extension with a blocking rule. + TestRule rule = CreateGenericRule(); + rule.condition->url_filter = std::string("||abc.com"); + rule.condition->resource_types = std::vector<std::string>({"sub_frame"}); + + ASSERT_NO_FATAL_FAILURE(LoadExtensionWithRules( + {rule}, "extension", {URLPattern::kAllUrlsPattern})); + const Extension* extension = last_loaded_extension(); + ExtensionAction* action = + ExtensionActionManager::Get(web_contents()->GetBrowserContext()) + ->GetExtensionAction(*extension); + + const std::string default_badge_text = "asdf"; + action->SetBadgeText(ExtensionAction::kDefaultTabId, default_badge_text); + + // Display action count as badge text for |extension|. + EXPECT_EQ(SetExtensionActionOptions(extension->id(), + "{displayActionCountAsBadgeText: true}"), + "success"); + + // Navigate to a page with two frames, the same-origin one should be blocked. + const GURL page_url = + embedded_test_server()->GetURL("abc.com", "/page_with_two_frames.html"); + ui_test_utils::NavigateToURL(browser(), page_url); + + int tab_id = ExtensionTabUtil::GetTabId(web_contents()); + + // Verify that the initial badge text reflects that the same-origin frame was + // blocked. + EXPECT_EQ("1", action->GetDisplayBadgeText(tab_id)); + + // Increment the action count. + EXPECT_EQ(SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: 10}}", + tab_id)), + "success"); + EXPECT_EQ("11", action->GetDisplayBadgeText(tab_id)); + + // An increment of 0 is ignored. + EXPECT_EQ( + SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: 0}}", tab_id)), + "success"); + EXPECT_EQ("11", action->GetDisplayBadgeText(tab_id)); + + // If the tab doesn't exist an error should be shown. + EXPECT_EQ( + SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: 10}}", 999)), + ErrorUtils::FormatErrorMessage(declarative_net_request::kTabNotFoundError, + "999")); + EXPECT_EQ("11", action->GetDisplayBadgeText(tab_id)); + + // The action count should continue to increment when an action is taken. + NavigateFrame("frame1", page_url); + EXPECT_EQ("12", action->GetDisplayBadgeText(tab_id)); + + // The action count can be decremented. + EXPECT_EQ(SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: -5}}", + tab_id)), + "success"); + EXPECT_EQ("7", action->GetDisplayBadgeText(tab_id)); + + // Check that the action count cannot be decremented below 0. We fallback to + // displaying the default badge text when the action count is 0. + EXPECT_EQ(SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: -10}}", + tab_id)), + "success"); + EXPECT_EQ(default_badge_text, action->GetDisplayBadgeText(tab_id)); + EXPECT_EQ(SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: -1}}", + tab_id)), + "success"); + EXPECT_EQ(default_badge_text, action->GetDisplayBadgeText(tab_id)); + EXPECT_EQ( + SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{tabUpdate: {tabId: %d, increment: 3}}", tab_id)), + "success"); + EXPECT_EQ("3", action->GetDisplayBadgeText(tab_id)); + + // The action count cannot be incremented if the display action as badge text + // feature is not enabled. + EXPECT_EQ( + SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{displayActionCountAsBadgeText: false, " + "tabUpdate: {tabId: %d, increment: 10}}", + tab_id)), + declarative_net_request::kIncrementActionCountWithoutUseAsBadgeTextError); + EXPECT_EQ(default_badge_text, action->GetDisplayBadgeText(tab_id)); + + // Any increment to the action count should not be ignored if we're enabling + // the preference. + EXPECT_EQ(SetExtensionActionOptions( + extension->id(), + base::StringPrintf("{displayActionCountAsBadgeText: true, " + "tabUpdate: {tabId: %d, increment: 5}}", + tab_id)), + "success"); + EXPECT_EQ("8", action->GetDisplayBadgeText(tab_id)); +} + // Test that the onRuleMatchedDebug event is only available for unpacked // extensions. IN_PROC_BROWSER_TEST_P(DeclarativeNetRequestBrowserTest,
diff --git a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc index 07eeaa4..122a68e 100644 --- a/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc +++ b/chrome/browser/extensions/api/language_settings_private/language_settings_private_api_unittest.cc
@@ -309,6 +309,7 @@ namespace input_method = chromeos::input_method; using input_method::InputMethodDescriptor; using input_method::InputMethodManager; +using input_method::MockComponentExtensionIMEManagerDelegate; std::string GetExtensionImeId() { std::string kExtensionImeId = chromeos::extension_ime_util::GetInputMethodID( @@ -368,11 +369,9 @@ TestInputMethodManager() : state_(new TestState), util_(&delegate_) { util_.AppendInputMethods(state_->input_methods_); - mock_delegate_ = - new chromeos::input_method::MockComponentExtensionIMEManagerDelegate(); component_ext_mgr_ = - std::make_unique<chromeos::ComponentExtensionIMEManager>(); - component_ext_mgr_->Initialize(base::WrapUnique(mock_delegate_)); + std::make_unique<chromeos::ComponentExtensionIMEManager>( + std::make_unique<MockComponentExtensionIMEManagerDelegate>()); } scoped_refptr<InputMethodManager::State> GetActiveIMEState() override { @@ -393,8 +392,6 @@ input_method::FakeInputMethodDelegate delegate_; input_method::InputMethodUtil util_; std::unique_ptr<chromeos::ComponentExtensionIMEManager> component_ext_mgr_; - chromeos::input_method::MockComponentExtensionIMEManagerDelegate* - mock_delegate_; DISALLOW_COPY_AND_ASSIGN(TestInputMethodManager); };
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.cc b/chrome/browser/extensions/chrome_extensions_browser_client.cc index 1844374..7c6d74ff 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.cc +++ b/chrome/browser/extensions/chrome_extensions_browser_client.cc
@@ -35,6 +35,7 @@ #include "chrome/browser/extensions/event_router_forwarder.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system_factory.h" +#include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/menu_manager.h" #include "chrome/browser/extensions/updater/chrome_update_client_config.h" @@ -581,6 +582,13 @@ return tabs_util::IsScreenshotRestricted(web_contents); } +bool ChromeExtensionsBrowserClient::IsValidTabId( + content::BrowserContext* context, + int tab_id) const { + return ExtensionTabUtil::GetTabById( + tab_id, context, true /* include_incognito */, nullptr /* contents */); +} + // static void ChromeExtensionsBrowserClient::SetMediaRouterAccessLoggerForTesting( MediaRouterExtensionAccessLogger* media_router_access_logger) {
diff --git a/chrome/browser/extensions/chrome_extensions_browser_client.h b/chrome/browser/extensions/chrome_extensions_browser_client.h index d448a39..683afba 100644 --- a/chrome/browser/extensions/chrome_extensions_browser_client.h +++ b/chrome/browser/extensions/chrome_extensions_browser_client.h
@@ -159,6 +159,8 @@ content::BrowserContext* context) override; bool IsScreenshotRestricted( content::WebContents* web_contents) const override; + bool IsValidTabId(content::BrowserContext* context, + int tab_id) const override; static void set_did_chrome_update_for_testing(bool did_update);
diff --git a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc index a970c52d..147c0c8 100644 --- a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc +++ b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
@@ -1964,13 +1964,20 @@ std::string web_view_navigation_script = content::JsReplace(kWebViewNavigationScriptTemplate, guest_url); { - content::DOMMessageQueue queue; + metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); base::HistogramTester histograms; + + content::DOMMessageQueue queue; content::ExecuteScriptAsync(app_contents, web_view_navigation_script); std::string fetch_result = PopString(&queue); // Verify that no CORB blocking occurred. EXPECT_EQ("nosniff.xml - body\n", fetch_result); + + // Verify UMA histograms. + metrics::SubprocessMetricsProvider::MergeHistogramDeltasForTesting(); + histograms.ExpectBucketCount( + "NetworkService.CorsForcedOffForIsolatedWorldOrigin", true, 1); } }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index ddcb1cc..fbdcee04 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -90,13 +90,6 @@ "expiry_milestone": 88 }, { - "name": "allow-sxg-certs-without-extension", - "owners": [ "//content/browser/web_package/OWNERS" ], - // Used by developers for testing signed exchange loading using normal - // certs. See https://crbug.com/862003 - "expiry_milestone": 92 - }, - { "name": "allow-sync-xhr-in-page-dismissal", "owners": [ "kdillon@chromium.org" ], "expiry_milestone": 88 @@ -2269,6 +2262,11 @@ "expiry_milestone": 90 }, { + "name": "enable-table-ng", + "owners": [ "atotic@google.com" ], + "expiry_milestone": 96 + }, + { "name": "enable-text-fragment-anchor", "owners": [ "bokan", "input-dev" ], "expiry_milestone": 83 @@ -4852,6 +4850,11 @@ "expiry_milestone": 84 }, { + "name": "web-feed", + "owners": [ "//chrome/android/feed/OWNERS", "feed@chromium.org" ], + "expiry_milestone": 99 + }, + { "name": "web-otp-backend", "owners": [ "yigu", "majidvp" ], "expiry_milestone": 90
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index ed53cb6..7f7ea4c 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -46,13 +46,6 @@ "Allows requests to localhost over HTTPS even when an invalid certificate " "is presented."; -const char kAllowSignedHTTPExchangeCertsWithoutExtensionName[] = - "Allow Signed HTTP Exchange certificates without extension"; -const char kAllowSignedHTTPExchangeCertsWithoutExtensionDescription[] = - "Accepts Origin-Signed HTTP Exchanges to be signed with certificates " - "that do not have CanSignHttpExchangesDraft extension. Warning: Enabling " - "this may pose a security risk."; - const char kAllowSyncXHRInPageDismissalName[] = "Allows synchronous XHR requests in page dismissal"; const char kAllowSyncXHRInPageDismissalDescription[] = @@ -800,6 +793,10 @@ const char kEnableLayoutNGDescription[] = "Enable Blink's next generation layout engine."; +const char kEnableLayoutNGTableName[] = "Enable TableNG"; +const char kEnableLayoutNGTableDescription[] = + "Enable Blink's next generation table layout."; + const char kEnableLazyFrameLoadingName[] = "Enable lazy frame loading"; const char kEnableLazyFrameLoadingDescription[] = "Defers the loading of iframes marked with the attribute 'loading=lazy' " @@ -3263,6 +3260,10 @@ "first-sync-setup to be complete. Only has an effect if " "enable-autofill-account-wallet-storage is also enabled."; +const char kWebFeedName[] = "Web Feed"; +const char kWebFeedDescription[] = + "Allows users to keep up with and consume web content."; + // Non-Android ----------------------------------------------------------------- #else // !defined(OS_ANDROID)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index ebee761..494edb6 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -66,9 +66,6 @@ extern const char kAllowInsecureLocalhostName[]; extern const char kAllowInsecureLocalhostDescription[]; -extern const char kAllowSignedHTTPExchangeCertsWithoutExtensionName[]; -extern const char kAllowSignedHTTPExchangeCertsWithoutExtensionDescription[]; - extern const char kAllowSyncXHRInPageDismissalName[]; extern const char kAllowSyncXHRInPageDismissalDescription[]; @@ -459,6 +456,9 @@ extern const char kEnableLayoutNGName[]; extern const char kEnableLayoutNGDescription[]; +extern const char kEnableLayoutNGTableName[]; +extern const char kEnableLayoutNGTableDescription[]; + extern const char kEnableLazyFrameLoadingName[]; extern const char kEnableLazyFrameLoadingDescription[]; @@ -1883,6 +1883,9 @@ extern const char kWalletRequiresFirstSyncSetupCompleteName[]; extern const char kWalletRequiresFirstSyncSetupCompleteDescription[]; +extern const char kWebFeedName[]; +extern const char kWebFeedDescription[]; + // Non-Android ---------------------------------------------------------------- #else // !defined(OS_ANDROID)
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc index ac90b99..4312e74 100644 --- a/chrome/browser/flags/android/chrome_feature_list.cc +++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -110,6 +110,7 @@ &feed::kInterestFeedV1ClicksAndViewsConditionalUpload, &feed::kInterestFeedV2, &feed::kReportFeedUserActions, + &feed::kWebFeed, &history::kHideFromApi3Transitions, &kAdjustWebApkInstallationSpace, &kAllowNewIncognitoTabIntents,
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 5f2907a..9d9dde8 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
@@ -458,6 +458,7 @@ public static final String VR_BROWSING_FEEDBACK = "VrBrowsingFeedback"; public static final String WEB_AUTH = "WebAuthentication"; public static final String WEB_AUTH_PHONE_SUPPORT = "WebAuthenticationPhoneSupport"; + public static final String WEB_FEED = "WebFeed"; @NativeMethods interface Natives {
diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.cc b/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.cc index 4cda574..bf8f0af 100644 --- a/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.cc +++ b/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.cc
@@ -8,12 +8,17 @@ #include "chrome/browser/media/kaleidoscope/kaleidoscope_prefs.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/ui/browser_finder.h" +#include "chrome/browser/ui/chrome_pages.h" #include "chrome/common/channel_info.h" #include "components/prefs/pref_service.h" +#include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/identity_manager/access_token_info.h" +#include "components/signin/public/identity_manager/consent_level.h" #include "components/signin/public/identity_manager/identity_manager.h" #include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "components/version_info/version_info.h" +#include "content/public/browser/web_ui.h" #include "google_apis/google_api_keys.h" namespace { @@ -118,3 +123,25 @@ pending_callbacks_.clear(); } + +void KaleidoscopeIdentityManagerImpl::SignIn() { +#if BUILDFLAG(IS_CHROMEOS_ASH) + NOTREACHED() << "SignIn() shouldn't be called on Chrome OS."; +#else + // The identity manager may not be created in a context where it has access + // to the UI. The client should not request a sign-in in that case. + DCHECK(web_ui_); + + content::WebContents* web_contents = web_ui_->GetWebContents(); + DCHECK(web_contents); + + Browser* browser = chrome::FindBrowserWithWebContents(web_contents); + DCHECK(browser); + + chrome::ShowBrowserSignin( + browser, signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE, + signin::ConsentLevel::kNotRequired); + signin_metrics::RecordSigninImpressionUserActionForAccessPoint( + signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE); +#endif // defined(OS_CHROMEOS) +}
diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.h b/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.h index 9743bbcd..599ce72 100644 --- a/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.h +++ b/chrome/browser/media/kaleidoscope/kaleidoscope_identity_manager_impl.h
@@ -42,6 +42,7 @@ // media::mojom::KaleidoscopeIdentityManager implementation. void GetCredentials(GetCredentialsCallback cb) override; + void SignIn() override; private: // Called when an access token request completes (successfully or not).
diff --git a/chrome/browser/media/kaleidoscope/mojom/kaleidoscope.mojom b/chrome/browser/media/kaleidoscope/mojom/kaleidoscope.mojom index 50acaf91..eff73d5 100644 --- a/chrome/browser/media/kaleidoscope/mojom/kaleidoscope.mojom +++ b/chrome/browser/media/kaleidoscope/mojom/kaleidoscope.mojom
@@ -117,6 +117,9 @@ interface KaleidoscopeIdentityManager { // Retrieves the current credentials. GetCredentials() => (Credentials? credentials, CredentialsResult result); + + // Will trigger a browser signin. + SignIn(); }; enum GetCollectionsResult {
diff --git a/chrome/browser/platform_util_lacros.cc b/chrome/browser/platform_util_lacros.cc index 81af39ff..3c41cb6a 100644 --- a/chrome/browser/platform_util_lacros.cc +++ b/chrome/browser/platform_util_lacros.cc
@@ -26,7 +26,7 @@ LOG(ERROR) << "Unable to open " << path.AsUTF8Unsafe() << " " << result; } -// File manager remote can only be accessed on UI thread. +// Requests that ash open an item at |path|. void OpenItemOnUiThread(const base::FilePath& path, OpenItemType type) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); auto* service = chromeos::LacrosChromeServiceImpl::Get(); @@ -51,7 +51,7 @@ namespace internal { void PlatformOpenVerifiedItem(const base::FilePath& path, OpenItemType type) { - // This function is called on a blocking thread, so open on the UI thread. + // The file manager remote can only be accessed on the UI thread. content::GetUIThreadTaskRunner({})->PostTask( FROM_HERE, base::BindOnce(&OpenItemOnUiThread, path, type)); }
diff --git a/chrome/browser/resources/bookmarks/list.js b/chrome/browser/resources/bookmarks/list.js index 40e170c7..5e8b5c47 100644 --- a/chrome/browser/resources/bookmarks/list.js +++ b/chrome/browser/resources/bookmarks/list.js
@@ -297,6 +297,17 @@ if (e.shiftKey && this.getState().selection.anchor === null) { this.dispatch(updateAnchor(this.displayedIds_[oldFocusedIndex])); } + + // If the focus moved from something other than a Ctrl + move event, + // update the selection. + const config = { + clear: !cursorModifier, + range: e.shiftKey, + toggle: false, + }; + + this.dispatch(selectItem( + this.displayedIds_[focusedIndex], this.getState(), config)); } }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js index 095b481..18b7155 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_test.js
@@ -144,17 +144,33 @@ }); TEST_F('ChromeVoxPanelTest', 'SearchMenu', function() { + const mockFeedback = this.createMockFeedback(); this.runWithLoadedTree(this.linksDoc, async function(root) { new PanelCommand(PanelCommandType.OPEN_MENUS).send(); await this.waitForMenu('panel_search_menu'); - this.fireMockQuery('jump')(); - this.assertActiveSearchMenuItem('Jump To Details'); - this.fireMockEvent('ArrowDown')(); - this.assertActiveSearchMenuItem('Jump To The Bottom Of The Page'); - this.fireMockEvent('ArrowDown')(); - this.assertActiveSearchMenuItem('Jump To The Top Of The Page'); - this.fireMockEvent('ArrowDown')(); - this.assertActiveSearchMenuItem('Jump To Details'); + await mockFeedback + .expectSpeech('Search the menus', /Type to search the menus/) + .call(() => { + this.fireMockQuery('jump')(); + this.assertActiveSearchMenuItem('Jump To Details'); + }) + .expectSpeech(/Jump/, 'Menu item', /[0-9]+ of [0-9]+/) + .call(() => { + this.fireMockEvent('ArrowDown')(); + this.assertActiveSearchMenuItem('Jump To The Bottom Of The Page'); + }) + .expectSpeech(/Jump/, 'Menu item', /[0-9]+ of [0-9]+/) + .call(() => { + this.fireMockEvent('ArrowDown')(); + this.assertActiveSearchMenuItem('Jump To The Top Of The Page'); + }) + .expectSpeech(/Jump/, 'Menu item', /[0-9]+ of [0-9]+/) + .call(() => { + this.fireMockEvent('ArrowDown')(); + this.assertActiveSearchMenuItem('Jump To Details'); + }) + .expectSpeech(/Jump/, 'Menu item', /[0-9]+ of [0-9]+/) + .replay(); }); });
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/images/icon192.png b/chrome/browser/resources/chromeos/wallpaper_manager/images/icon192.png index 95aecff..86cc40b1 100644 --- a/chrome/browser/resources/chromeos/wallpaper_manager/images/icon192.png +++ b/chrome/browser/resources/chromeos/wallpaper_manager/images/icon192.png Binary files differ
diff --git a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc index 677b06f..9bc9d08 100644 --- a/chrome/browser/ssl/security_state_tab_helper_browsertest.cc +++ b/chrome/browser/ssl/security_state_tab_helper_browsertest.cc
@@ -1626,12 +1626,7 @@ GURL mixed_content_url(https_server_.GetURL(replacement_path)); ui_test_utils::NavigateToURL(browser(), mixed_content_url); - blink::SecurityStyle expected_mixed_content_security_style = - security_state::ShouldShowDangerTriangleForWarningLevel() - ? blink::SecurityStyle::kInsecure - : blink::SecurityStyle::kNeutral; - EXPECT_EQ(expected_mixed_content_security_style, - observer.latest_security_style()); + EXPECT_EQ(blink::SecurityStyle::kInsecure, observer.latest_security_style()); const content::SecurityStyleExplanations& mixed_content_explanation = observer.latest_explanations(); @@ -1923,10 +1918,7 @@ ui_test_utils::NavigateToURL(browser(), GURL(kLegacyTLSURL)); - EXPECT_EQ(security_state::ShouldShowDangerTriangleForWarningLevel() - ? blink::SecurityStyle::kInsecure - : blink::SecurityStyle::kNeutral, - observer.latest_security_style()); + EXPECT_EQ(blink::SecurityStyle::kInsecure, observer.latest_security_style()); for (const auto& explanation : observer.latest_explanations().secure_explanations) {
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index f179b21..76d97c42 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -1974,6 +1974,8 @@ "ash/launcher/chrome_launcher_controller_util.h", "ash/launcher/crostini_app_display.cc", "ash/launcher/crostini_app_display.h", + "ash/launcher/crostini_app_window.cc", + "ash/launcher/crostini_app_window.h", "ash/launcher/extension_shelf_context_menu.cc", "ash/launcher/extension_shelf_context_menu.h", "ash/launcher/extension_uninstaller.cc",
diff --git a/chrome/browser/ui/app_list/extension_app_utils.cc b/chrome/browser/ui/app_list/extension_app_utils.cc index 6f2d2bd4..1ef17c20c 100644 --- a/chrome/browser/ui/app_list/extension_app_utils.cc +++ b/chrome/browser/ui/app_list/extension_app_utils.cc
@@ -21,28 +21,12 @@ namespace app_list { -namespace { - -constexpr char const* kAppIdsHiddenInLauncher[] = {web_app::kReleaseNotesAppId}; - -} // namespace - bool ShouldShowInLauncher(const extensions::Extension* extension, content::BrowserContext* context) { - return !HideInLauncherById(extension->id()) && - chromeos::DemoSession::ShouldDisplayInAppLauncher(extension->id()) && + return chromeos::DemoSession::ShouldDisplayInAppLauncher(extension->id()) && extensions::ui_util::ShouldDisplayInAppLauncher(extension, context); } -bool HideInLauncherById(std::string extension_id) { - for (auto* const id : kAppIdsHiddenInLauncher) { - if (id == extension_id) { - return true; - } - } - return false; -} - void AddMenuItemIconsForSystemApps(const std::string& app_id, ui::SimpleMenuModel* menu_model, int start_index,
diff --git a/chrome/browser/ui/app_list/extension_app_utils.h b/chrome/browser/ui/app_list/extension_app_utils.h index e2a7bf0..00bde8b 100644 --- a/chrome/browser/ui/app_list/extension_app_utils.h +++ b/chrome/browser/ui/app_list/extension_app_utils.h
@@ -23,7 +23,6 @@ bool ShouldShowInLauncher(const extensions::Extension* extension, content::BrowserContext* context); -bool HideInLauncherById(std::string extension_id); // chrome.contextMenus API does not support menu item icons. This function // compensates for that by adding icons to menus for prominent system apps
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc index 5144a67..48c0348b 100644 --- a/chrome/browser/ui/app_list/search/app_search_provider.cc +++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -31,7 +31,6 @@ #include "chrome/browser/chromeos/crostini/crostini_features.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/extensions/gfx_utils.h" -#include "chrome/browser/chromeos/release_notes/release_notes_storage.h" #include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/session_sync_service_factory.h" @@ -498,11 +497,6 @@ title = navigation_title; app->AddSearchableText(title); } - } else if (app->id() == ash::kReleaseNotesAppId) { - auto release_notes_storage = - std::make_unique<chromeos::ReleaseNotesStorage>(profile_); - if (!release_notes_storage->ShouldShowSuggestionChip()) - continue; } std::unique_ptr<AppResult> result =
diff --git a/chrome/browser/ui/app_list/search/app_service_app_result.cc b/chrome/browser/ui/app_list/search/app_service_app_result.cc index f717c37..f1b6e82 100644 --- a/chrome/browser/ui/app_list/search/app_service_app_result.cc +++ b/chrome/browser/ui/app_list/search/app_service_app_result.cc
@@ -14,7 +14,6 @@ #include "chrome/browser/apps/app_service/app_service_metrics.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" -#include "chrome/browser/chromeos/release_notes/release_notes_storage.h" #include "chrome/browser/favicon/large_icon_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_list_client_impl.h" @@ -247,16 +246,6 @@ // in the proper position. SetDisplayIndex(ash::SearchResultDisplayIndex::kFirstIndex); SetDisplayType(ash::SearchResultDisplayType::kChip); - - if (id() == ash::kReleaseNotesAppId) { - // TODO(b/169711884): Decrease times left only when the chip becomes - // visible. - chromeos::ReleaseNotesStorage(profile) - .DecreaseTimesLeftToShowSuggestionChip(); - // Make sure that if both Continue Reading and Release Notes are available, - // Release Notes shows up first in the suggestion chip container. - SetPositionPriority(1.0f); - } } void AppServiceAppResult::UpdateContinueReadingFavicon(
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc index fb0d62c..8743e50 100644 --- a/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/app_service/app_service_app_window_launcher_controller.cc
@@ -29,6 +29,7 @@ #include "chrome/browser/ui/ash/launcher/app_window_launcher_item_controller.h" #include "chrome/browser/ui/ash/launcher/arc_app_window.h" #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" +#include "chrome/browser/ui/ash/launcher/crostini_app_window.h" #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/browser.h" @@ -423,6 +424,13 @@ owner()->profile()); app_window = app_window_ptr.get(); aura_window_to_app_window_[window] = std::move(app_window_ptr); + } else if (crostini_tracker_ && + !crostini_tracker_->GetShelfAppId(window).empty()) { + auto app_window_ptr = std::make_unique<CrostiniAppWindow>( + owner()->profile(), shelf_id, + views::Widget::GetWidgetForNativeWindow(window)); + app_window = app_window_ptr.get(); + aura_window_to_app_window_[window] = std::move(app_window_ptr); } else { auto app_window_ptr = std::make_unique<AppWindowBase>( shelf_id, views::Widget::GetWidgetForNativeWindow(window));
diff --git a/chrome/browser/ui/ash/launcher/crostini_app_window.cc b/chrome/browser/ui/ash/launcher/crostini_app_window.cc new file mode 100644 index 0000000..841acaa --- /dev/null +++ b/chrome/browser/ui/ash/launcher/crostini_app_window.cc
@@ -0,0 +1,35 @@ +// Copyright 2020 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 "chrome/browser/ui/ash/launcher/crostini_app_window.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/app_list/app_service/app_service_app_icon_loader.h" +#include "extensions/common/constants.h" +#include "ui/gfx/image/image_skia.h" +#include "ui/views/widget/widget.h" +#include "ui/views/widget/widget_delegate.h" + +namespace { +constexpr int kIconSize = extension_misc::EXTENSION_ICON_MEDIUM; +} // namespace + +CrostiniAppWindow::CrostiniAppWindow(Profile* profile, + const ash::ShelfID& shelf_id, + views::Widget* widget) + : AppWindowBase(shelf_id, widget) { + app_icon_loader_ = + std::make_unique<AppServiceAppIconLoader>(profile, kIconSize, this); + app_icon_loader_->FetchImage(shelf_id.app_id); +} + +CrostiniAppWindow::~CrostiniAppWindow() = default; + +void CrostiniAppWindow::OnAppImageUpdated(const std::string& app_id, + const gfx::ImageSkia& image) { + if (!widget() || !widget()->widget_delegate()) + return; + + widget()->widget_delegate()->SetIcon(image); +}
diff --git a/chrome/browser/ui/ash/launcher/crostini_app_window.h b/chrome/browser/ui/ash/launcher/crostini_app_window.h new file mode 100644 index 0000000..b933d35 --- /dev/null +++ b/chrome/browser/ui/ash/launcher/crostini_app_window.h
@@ -0,0 +1,47 @@ +// Copyright 2020 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 CHROME_BROWSER_UI_ASH_LAUNCHER_CROSTINI_APP_WINDOW_H_ +#define CHROME_BROWSER_UI_ASH_LAUNCHER_CROSTINI_APP_WINDOW_H_ + +#include <memory> +#include <string> + +#include "ash/public/cpp/shelf_types.h" +#include "chrome/browser/ui/app_icon_loader.h" +#include "chrome/browser/ui/ash/launcher/app_window_base.h" + +namespace gfx { +class ImageSkia; +} + +namespace views { +class Widget; +} + +class AppServiceAppIconLoader; +class Profile; + +// A ui::BaseWindow for a chromeos launcher to control Crostini applications. +class CrostiniAppWindow : public AppWindowBase, public AppIconLoaderDelegate { + public: + CrostiniAppWindow(Profile* profile, + const ash::ShelfID& shelf_id, + views::Widget* widget); + + ~CrostiniAppWindow() override; + + CrostiniAppWindow(const CrostiniAppWindow&) = delete; + CrostiniAppWindow& operator=(const CrostiniAppWindow&) = delete; + + // AppIconLoaderDelegate: + void OnAppImageUpdated(const std::string& app_id, + const gfx::ImageSkia& image) override; + + private: + // Loads the app icon to the window icon key. + std::unique_ptr<AppServiceAppIconLoader> app_icon_loader_; +}; + +#endif // CHROME_BROWSER_UI_ASH_LAUNCHER_CROSTINI_APP_WINDOW_H_
diff --git a/chrome/browser/ui/startup/bad_flags_prompt.cc b/chrome/browser/ui/startup/bad_flags_prompt.cc index 2d18213..9d55a1e 100644 --- a/chrome/browser/ui/startup/bad_flags_prompt.cc +++ b/chrome/browser/ui/startup/bad_flags_prompt.cc
@@ -146,7 +146,6 @@ // "stability and security will suffer". static const base::Feature* kBadFeatureFlagsInAboutFlags[] = { &blink::features::kRawClipboard, - &features::kAllowSignedHTTPExchangeCertsWithoutExtension, &features::kWebBundlesFromNetwork, #if defined(OS_ANDROID) &chrome::android::kCommandLineOnNonRooted,
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 74ab79d..61ac40f 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
@@ -220,8 +220,8 @@ std::move(install_options), base::BindLambdaForTesting( [&result_code, &run_loop](const GURL& provided_url, - InstallResultCode code) { - result_code = code; + PendingAppManager::InstallResult result) { + result_code = result.code; run_loop.Quit(); })); run_loop.Run();
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc index 8acc7d7..a12ee0b 100644 --- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc +++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
@@ -92,15 +92,6 @@ } // static -bool WebAppUiManager::ShouldHideAppFromUser(const AppId& app_id) { -#if BUILDFLAG(IS_CHROMEOS_ASH) - return app_list::HideInLauncherById(app_id); -#else - return false; -#endif -} - -// static WebAppUiManagerImpl* WebAppUiManagerImpl::Get(Profile* profile) { auto* provider = WebAppProvider::Get(profile); return provider ? provider->ui_manager().AsImpl() : nullptr; @@ -173,10 +164,11 @@ windows_closed_requests_map_[app_id].push_back(std::move(callback)); } -void WebAppUiManagerImpl::UninstallAndReplaceIfExists( +bool WebAppUiManagerImpl::UninstallAndReplaceIfExists( const std::vector<AppId>& from_apps, const AppId& to_app) { bool has_migrated = false; + bool did_uninstall = false; for (const AppId& from_app : from_apps) { apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_); @@ -230,7 +222,10 @@ proxy->UninstallSilently(from_app, apps::mojom::UninstallSource::kMigration); + did_uninstall = true; } + + return did_uninstall; } bool WebAppUiManagerImpl::CanAddAppToQuickLaunchBar() const {
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h index 03be401..1f9b910 100644 --- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h +++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h
@@ -47,7 +47,7 @@ size_t GetNumWindowsForApp(const AppId& app_id) override; void NotifyOnAllAppWindowsClosed(const AppId& app_id, base::OnceClosure callback) override; - void UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, + bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, const AppId& to_app) override; bool CanAddAppToQuickLaunchBar() const override; void AddAppToQuickLaunchBar(const AppId& app_id) override;
diff --git a/chrome/browser/ui/webui/chromeos/login/l10n_util_unittest.cc b/chrome/browser/ui/webui/chromeos/login/l10n_util_unittest.cc index 25586cf3..313a878 100644 --- a/chrome/browser/ui/webui/chromeos/login/l10n_util_unittest.cc +++ b/chrome/browser/ui/webui/chromeos/login/l10n_util_unittest.cc
@@ -19,6 +19,7 @@ #include "chromeos/system/fake_statistics_provider.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/ime/chromeos/component_extension_ime_manager.h" +#include "ui/base/ime/chromeos/mock_component_extension_ime_manager_delegate.h" namespace chromeos { @@ -68,8 +69,11 @@ L10nUtilTest::L10nUtilTest() : input_manager_(new MockInputMethodManagerWithInputMethods) { chromeos::input_method::InitializeForTesting(input_manager_); + auto mock_component_extension_ime_manager_delegate = std::make_unique< + input_method::MockComponentExtensionIMEManagerDelegate>(); input_manager_->SetComponentExtensionIMEManager( - std::make_unique<ComponentExtensionIMEManager>()); + std::make_unique<ComponentExtensionIMEManager>( + std::move(mock_component_extension_ime_manager_delegate))); base::RunLoop().RunUntilIdle(); }
diff --git a/chrome/browser/ui/webui/flags_ui.cc b/chrome/browser/ui/webui/flags_ui.cc index fb662e12..698c5c6 100644 --- a/chrome/browser/ui/webui/flags_ui.cc +++ b/chrome/browser/ui/webui/flags_ui.cc
@@ -163,6 +163,7 @@ source->AddLocalizedString("reset", IDS_FLAGS_UI_PAGE_RESET); source->AddLocalizedString("reset-acknowledged", IDS_FLAGS_UI_RESET_ACKNOWLEDGED); + source->AddLocalizedString("search-label", IDS_FLAGS_UI_SEARCH_LABEL); source->AddLocalizedString("search-placeholder", IDS_FLAGS_UI_SEARCH_PLACEHOLDER); source->AddLocalizedString("title", IDS_FLAGS_UI_TITLE); @@ -197,6 +198,7 @@ source->AddLocalizedString("reset", IDS_DEPRECATED_FEATURES_PAGE_RESET); source->AddLocalizedString("reset-acknowledged", IDS_DEPRECATED_UI_RESET_ACKNOWLEDGED); + source->AddLocalizedString("search-label", IDS_FLAGS_UI_SEARCH_LABEL); source->AddLocalizedString("search-placeholder", IDS_DEPRECATED_FEATURES_SEARCH_PLACEHOLDER); source->AddLocalizedString("title", IDS_DEPRECATED_FEATURES_TITLE);
diff --git a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc index 18988da4..f271889 100644 --- a/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/multidevice_handler.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h" #include "chromeos/components/multidevice/logging/logging.h" +#include "chromeos/components/phonehub/util/histogram_util.h" #include "chromeos/components/proximity_auth/proximity_auth_pref_names.h" #include "chromeos/constants/chromeos_features.h" #include "chromeos/services/multidevice_setup/public/cpp/prefs.h" @@ -273,6 +274,11 @@ feature, enabled, auth_token, base::BindOnce(&MultideviceHandler::OnSetFeatureStateEnabledResult, callback_weak_ptr_factory_.GetWeakPtr(), callback_id)); + + if (feature == multidevice_setup::mojom::Feature::kPhoneHub) { + phonehub::util::LogFeatureOptInEntryPoint( + phonehub::util::OptInEntryPoint::kSettings); + } } void MultideviceHandler::HandleRemoveHostDevice(const base::ListValue* args) {
diff --git a/chrome/browser/web_applications/components/os_integration_manager.cc b/chrome/browser/web_applications/components/os_integration_manager.cc index 898bb480..104df09f 100644 --- a/chrome/browser/web_applications/components/os_integration_manager.cc +++ b/chrome/browser/web_applications/components/os_integration_manager.cc
@@ -178,46 +178,39 @@ scoped_refptr<OsHooksBarrier> barrier = base::MakeRefCounted<OsHooksBarrier>(os_hooks, std::move(callback)); - if (os_hooks[OsHookType::kShortcutsMenu] && - ShouldRegisterShortcutsMenuWithOs()) { - bool success = UnregisterShortcutsMenuWithOs(app_id, profile_->GetPath()); + if (os_hooks[OsHookType::kShortcutsMenu]) { + bool success = UnregisterShortcutsMenu(app_id); if (!success) barrier->OnError(OsHookType::kShortcutsMenu); } if (os_hooks[OsHookType::kShortcuts] || os_hooks[OsHookType::kRunOnOsLogin]) { - std::unique_ptr<ShortcutInfo> shortcut_info = - shortcut_manager_->BuildShortcutInfo(app_id); + std::unique_ptr<ShortcutInfo> shortcut_info = BuildShortcutInfo(app_id); base::FilePath shortcut_data_dir = internals::GetShortcutDataDir(*shortcut_info); if (os_hooks[OsHookType::kRunOnOsLogin] && base::FeatureList::IsEnabled(features::kDesktopPWAsRunOnOsLogin)) { - ScheduleUnregisterRunOnOsLogin( + UnregisterRunOnOsLogin( shortcut_info->profile_path, shortcut_info->title, barrier->CreateBarrierCallbackForType(OsHookType::kRunOnOsLogin)); } if (os_hooks[OsHookType::kShortcuts]) { - internals::ScheduleDeletePlatformShortcuts( - shortcut_data_dir, std::move(shortcut_info), - base::BindOnce( - &OsIntegrationManager::OnShortcutsDeleted, - weak_ptr_factory_.GetWeakPtr(), app_id, - barrier->CreateBarrierCallbackForType(OsHookType::kShortcuts))); + DeleteShortcuts( + app_id, shortcut_data_dir, std::move(shortcut_info), + barrier->CreateBarrierCallbackForType(OsHookType::kShortcuts)); } } // TODO(https://crbug.com/1108109) we should return the result of file handler // unregistration and record errors during unregistration. if (os_hooks[OsHookType::kFileHandlers]) - file_handler_manager_->DisableAndUnregisterOsFileHandlers(app_id); + UnregisterFileHandlers(app_id); // There is a chance uninstallation point was created with feature flag // enabled so we need to clean it up regardless of feature flag state. - if (os_hooks[OsHookType::kUninstallationViaOsSettings] && - ShouldRegisterUninstallationViaOsSettingsWithOs()) { - UnegisterUninstallationViaOsSettingsWithOs(app_id, profile_); - } + if (os_hooks[OsHookType::kUninstallationViaOsSettings]) + UnregisterWebAppOsUninstallation(app_id); } void OsIntegrationManager::UpdateOsHooks( @@ -339,6 +332,8 @@ shortcuts_menu_item_infos, const ShortcutsMenuIconsBitmaps& shortcuts_menu_icons_bitmaps, base::OnceCallback<void(bool success)> callback) { + if (!ShouldRegisterShortcutsMenuWithOs()) + std::move(callback).Run(true); shortcut_manager_->RegisterShortcutsMenuWithOs( app_id, shortcuts_menu_item_infos, shortcuts_menu_icons_bitmaps); @@ -351,6 +346,9 @@ void OsIntegrationManager::ReadAllShortcutsMenuIconsAndRegisterShortcutsMenu( const AppId& app_id, base::OnceCallback<void(bool success)> callback) { + if (!ShouldRegisterShortcutsMenuWithOs()) + std::move(callback).Run(true); + shortcut_manager_->ReadAllShortcutsMenuIconsAndRegisterShortcutsMenu( app_id, std::move(callback)); } @@ -389,6 +387,48 @@ } } +bool OsIntegrationManager::UnregisterShortcutsMenu(const AppId& app_id) { + if (!ShouldRegisterShortcutsMenuWithOs()) + return true; + return UnregisterShortcutsMenuWithOs(app_id, profile_->GetPath()); +} + +void OsIntegrationManager::UnregisterRunOnOsLogin( + const base::FilePath& profile_path, + const base::string16& shortcut_title, + UnregisterRunOnOsLoginCallback callback) { + ScheduleUnregisterRunOnOsLogin(profile_path, shortcut_title, + std::move(callback)); +} + +void OsIntegrationManager::DeleteShortcuts( + const AppId& app_id, + const base::FilePath& shortcuts_data_dir, + std::unique_ptr<ShortcutInfo> shortcut_info, + DeleteShortcutsCallback callback) { + internals::ScheduleDeletePlatformShortcuts( + shortcuts_data_dir, std::move(shortcut_info), + base::BindOnce(&OsIntegrationManager::OnShortcutsDeleted, + weak_ptr_factory_.GetWeakPtr(), app_id, + std::move(callback))); +} + +void OsIntegrationManager::UnregisterFileHandlers(const AppId& app_id) { + file_handler_manager_->DisableAndUnregisterOsFileHandlers(app_id); +} + +void OsIntegrationManager::UnregisterWebAppOsUninstallation( + const AppId& app_id) { + if (ShouldRegisterUninstallationViaOsSettingsWithOs()) + UnegisterUninstallationViaOsSettingsWithOs(app_id, profile_); +} + +std::unique_ptr<ShortcutInfo> OsIntegrationManager::BuildShortcutInfo( + const AppId& app_id) { + DCHECK(shortcut_manager_); + return shortcut_manager_->BuildShortcutInfo(app_id); +} + void OsIntegrationManager::OnShortcutsCreated( const AppId& app_id, std::unique_ptr<WebApplicationInfo> web_app_info,
diff --git a/chrome/browser/web_applications/components/os_integration_manager.h b/chrome/browser/web_applications/components/os_integration_manager.h index b768b99..ad5df33a 100644 --- a/chrome/browser/web_applications/components/os_integration_manager.h +++ b/chrome/browser/web_applications/components/os_integration_manager.h
@@ -160,6 +160,7 @@ bool add_to_desktop, CreateShortcutsCallback callback); + // Installation: virtual void RegisterFileHandlers( const AppId& app_id, base::OnceCallback<void(bool success)> callback); @@ -179,6 +180,21 @@ virtual void RegisterWebAppOsUninstallation(const AppId& app_id, const std::string& name); + // Uninstallation: + virtual bool UnregisterShortcutsMenu(const AppId& app_id); + virtual void UnregisterRunOnOsLogin(const base::FilePath& profile_path, + const base::string16& shortcut_title, + UnregisterRunOnOsLoginCallback callback); + virtual void DeleteShortcuts(const AppId& app_id, + const base::FilePath& shortcuts_data_dir, + std::unique_ptr<ShortcutInfo> shortcut_info, + DeleteShortcutsCallback callback); + virtual void UnregisterFileHandlers(const AppId& app_id); + virtual void UnregisterWebAppOsUninstallation(const AppId& app_id); + + // Utility mathods: + virtual std::unique_ptr<ShortcutInfo> BuildShortcutInfo(const AppId& app_id); + private: class OsHooksBarrier;
diff --git a/chrome/browser/web_applications/components/os_integration_manager_unittest.cc b/chrome/browser/web_applications/components/os_integration_manager_unittest.cc index ec0bb7a..0ef6c71 100644 --- a/chrome/browser/web_applications/components/os_integration_manager_unittest.cc +++ b/chrome/browser/web_applications/components/os_integration_manager_unittest.cc
@@ -7,23 +7,29 @@ #include <memory> #include "base/bind.h" +#include "base/files/file_path.h" #include "base/run_loop.h" #include "base/test/bind.h" #include "base/test/gmock_callback_support.h" #include "base/test/task_environment.h" +#include "build/build_config.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/web_app.h" +#include "chrome/common/chrome_constants.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/features.h" namespace web_app { +namespace { + class MockOsIntegrationManager : public OsIntegrationManager { public: MockOsIntegrationManager() : OsIntegrationManager(nullptr, nullptr, nullptr, nullptr) {} ~MockOsIntegrationManager() override = default; + // Installation: MOCK_METHOD(void, CreateShortcuts, (const AppId& app_id, @@ -68,12 +74,65 @@ RegisterWebAppOsUninstallation, (const AppId& app_id, const std::string& name), (override)); + + // Uninstallation: + MOCK_METHOD(bool, UnregisterShortcutsMenu, (const AppId& app_id), (override)); + MOCK_METHOD(void, + UnregisterRunOnOsLogin, + (const base::FilePath& profile_path, + const base::string16& shortcut_title, + UnregisterRunOnOsLoginCallback callback), + (override)); + MOCK_METHOD(void, + DeleteShortcuts, + (const AppId& app_id, + const base::FilePath& shortcuts_data_dir, + std::unique_ptr<ShortcutInfo> shortcut_info, + DeleteShortcutsCallback callback), + (override)); + MOCK_METHOD(void, UnregisterFileHandlers, (const AppId& app_id), (override)); + MOCK_METHOD(void, + UnregisterWebAppOsUninstallation, + (const AppId& app_id), + (override)); + + // Utility methods: + MOCK_METHOD(std::unique_ptr<ShortcutInfo>, + BuildShortcutInfo, + (const AppId& app_id), + (override)); }; -TEST(OsIntegrationManagerTest, InstallOsHooksOnlyShortcuts) { +#if defined(OS_WIN) +const base::FilePath::CharType kFakeProfilePath[] = + FILE_PATH_LITERAL("\\profile\\path"); +#else +const base::FilePath::CharType kFakeProfilePath[] = + FILE_PATH_LITERAL("/profile/path"); +#endif // defined(OS_WIN) + +const char kFakeAppUrl[] = "https://fake.com"; + +std::unique_ptr<ShortcutInfo> CreateTestShorcutInfo( + const web_app::AppId& app_id) { + auto shortcut_info = std::make_unique<ShortcutInfo>(); + shortcut_info->profile_path = base::FilePath(kFakeProfilePath); + shortcut_info->extension_id = app_id; + shortcut_info->url = GURL(kFakeAppUrl); + return shortcut_info; +} + +class OsIntegrationManagerTest : public testing::Test { + public: + OsIntegrationManagerTest() = default; + ~OsIntegrationManagerTest() override = default; + + private: base::test::TaskEnvironment task_environment_{ base::test::TaskEnvironment::MainThreadType::UI}; +}; +TEST_F(OsIntegrationManagerTest, InstallOsHooksOnlyShortcuts) { base::RunLoop run_loop; OsHooksResults install_results; @@ -98,10 +157,7 @@ EXPECT_TRUE(install_results[OsHookType::kShortcuts]); } -TEST(OsIntegrationManagerTest, InstallOsHooksEverything) { - base::test::TaskEnvironment task_environment_{ - base::test::TaskEnvironment::MainThreadType::UI}; - +TEST_F(OsIntegrationManagerTest, InstallOsHooksEverything) { base::RunLoop run_loop; OsHooksResults install_results; @@ -123,7 +179,7 @@ EXPECT_CALL(manager, AddAppToQuickLaunchBar(app_id)).Times(1); EXPECT_CALL(manager, ReadAllShortcutsMenuIconsAndRegisterShortcutsMenu( app_id, testing::_)) - .Times(1); + .WillOnce(base::test::RunOnceCallback<1>(true)); InstallOsHooksOptions options; options.add_to_desktop = true; @@ -141,4 +197,44 @@ EXPECT_TRUE(install_results[OsHookType::kShortcutsMenu]); EXPECT_TRUE(install_results[OsHookType::kUninstallationViaOsSettings]); } + +TEST_F(OsIntegrationManagerTest, UninstallOsHooksEverything) { + base::RunLoop run_loop; + + OsHooksResults uninstall_results; + UninstallOsHooksCallback callback = + base::BindLambdaForTesting([&](OsHooksResults results) { + uninstall_results = results; + run_loop.Quit(); + }); + + const AppId app_id = "test"; + + const base::FilePath kExpectedShortcutPath = + base::FilePath(kFakeProfilePath) + .Append(chrome::kWebAppDirname) + .AppendASCII("_crx_test"); + + testing::StrictMock<MockOsIntegrationManager> manager; + EXPECT_CALL(manager, BuildShortcutInfo(app_id)) + .WillOnce( + testing::Return(testing::ByMove(CreateTestShorcutInfo(app_id)))); + EXPECT_CALL(manager, DeleteShortcuts(app_id, kExpectedShortcutPath, + testing::_, testing::_)) + .WillOnce(base::test::RunOnceCallback<3>(true)); + EXPECT_CALL(manager, UnregisterFileHandlers(app_id)).Times(1); + EXPECT_CALL(manager, UnregisterWebAppOsUninstallation(app_id)).Times(1); + EXPECT_CALL(manager, UnregisterShortcutsMenu(app_id)) + .WillOnce(testing::Return(true)); + + manager.UninstallAllOsHooks(app_id, std::move(callback)); + run_loop.Run(); + EXPECT_TRUE(uninstall_results[OsHookType::kShortcuts]); + EXPECT_TRUE(uninstall_results[OsHookType::kFileHandlers]); + EXPECT_TRUE(uninstall_results[OsHookType::kRunOnOsLogin]); + EXPECT_TRUE(uninstall_results[OsHookType::kShortcutsMenu]); + EXPECT_TRUE(uninstall_results[OsHookType::kUninstallationViaOsSettings]); +} + +} // namespace } // namespace web_app
diff --git a/chrome/browser/web_applications/components/pending_app_manager.cc b/chrome/browser/web_applications/components/pending_app_manager.cc index be5db1b6..477590c 100644 --- a/chrome/browser/web_applications/components/pending_app_manager.cc +++ b/chrome/browser/web_applications/components/pending_app_manager.cc
@@ -17,6 +17,12 @@ namespace web_app { +bool PendingAppManager::InstallResult::operator==( + const InstallResult& other) const { + return std::tie(code, did_uninstall_and_replace) == + std::tie(other.code, other.did_uninstall_and_replace); +} + PendingAppManager::SynchronizeRequest::SynchronizeRequest( SynchronizeCallback callback, int remaining_requests) @@ -83,7 +89,7 @@ if (urls_to_remove.empty() && desired_apps_install_options.empty()) { base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, - base::BindOnce(std::move(callback), std::map<GURL, InstallResultCode>(), + base::BindOnce(std::move(callback), std::map<GURL, InstallResult>(), std::map<GURL, bool>())); return; } @@ -127,16 +133,17 @@ void PendingAppManager::InstallForSynchronizeCallback( ExternalInstallSource source, const GURL& app_url, - InstallResultCode code) { - if (!IsSuccess(code)) { + PendingAppManager::InstallResult result) { + if (!IsSuccess(result.code)) { LOG(ERROR) << app_url << " from install source " << static_cast<int>(source) - << " failed to install with reason " << static_cast<int>(code); + << " failed to install with reason " + << static_cast<int>(result.code); } auto source_and_request = synchronize_requests_.find(source); DCHECK(source_and_request != synchronize_requests_.end()); SynchronizeRequest& request = source_and_request->second; - request.install_results[app_url] = code; + request.install_results[app_url] = result; OnAppSynchronized(source, app_url); }
diff --git a/chrome/browser/web_applications/components/pending_app_manager.h b/chrome/browser/web_applications/components/pending_app_manager.h index cc9151d..5ba6cd31 100644 --- a/chrome/browser/web_applications/components/pending_app_manager.h +++ b/chrome/browser/web_applications/components/pending_app_manager.h
@@ -38,18 +38,23 @@ // should wait for the update request to finish before uninstalling the app. class PendingAppManager { public: + struct InstallResult { + InstallResultCode code; + bool did_uninstall_and_replace = false; + bool operator==(const InstallResult& other) const; + }; + using OnceInstallCallback = - base::OnceCallback<void(const GURL& app_url, InstallResultCode code)>; + base::OnceCallback<void(const GURL& app_url, InstallResult result)>; using RepeatingInstallCallback = - base::RepeatingCallback<void(const GURL& app_url, - InstallResultCode code)>; + base::RepeatingCallback<void(const GURL& app_url, InstallResult result)>; using RegistrationCallback = base::RepeatingCallback<void(const GURL& launch_url, RegistrationResultCode code)>; using UninstallCallback = base::RepeatingCallback<void(const GURL& app_url, bool succeeded)>; using SynchronizeCallback = - base::OnceCallback<void(std::map<GURL, InstallResultCode> install_results, + base::OnceCallback<void(std::map<GURL, InstallResult> install_results, std::map<GURL, bool> uninstall_results)>; PendingAppManager(); @@ -144,14 +149,14 @@ SynchronizeCallback callback; int remaining_requests; - std::map<GURL, InstallResultCode> install_results; + std::map<GURL, InstallResult> install_results; std::map<GURL, bool> uninstall_results; }; void InstallForSynchronizeCallback(ExternalInstallSource source, const GURL& app_url, - InstallResultCode code); + PendingAppManager::InstallResult result); void UninstallForSynchronizeCallback(ExternalInstallSource source, const GURL& app_url, bool succeeded);
diff --git a/chrome/browser/web_applications/components/pending_app_manager_unittest.cc b/chrome/browser/web_applications/components/pending_app_manager_unittest.cc index dfd8b928..65d8b6767 100644 --- a/chrome/browser/web_applications/components/pending_app_manager_unittest.cc +++ b/chrome/browser/web_applications/components/pending_app_manager_unittest.cc
@@ -39,7 +39,8 @@ std::move(install_options_list), ExternalInstallSource::kInternalDefault, base::BindLambdaForTesting( - [&run_loop, urls](std::map<GURL, InstallResultCode> install_results, + [&run_loop, urls](std::map<GURL, PendingAppManager::InstallResult> + install_results, std::map<GURL, bool> uninstall_results) { run_loop.Quit(); })); @@ -114,7 +115,8 @@ std::move(install_options_list), ExternalInstallSource::kInternalDefault, base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, + [&](std::map<GURL, PendingAppManager::InstallResult> + install_results, std::map<GURL, bool> uninstall_results) { run_loop.Quit(); })); run_loop.Run(); }
diff --git a/chrome/browser/web_applications/components/policy/web_app_policy_manager.cc b/chrome/browser/web_applications/components/policy/web_app_policy_manager.cc index 98a61ab..83e3505 100644 --- a/chrome/browser/web_applications/components/policy/web_app_policy_manager.cc +++ b/chrome/browser/web_applications/components/policy/web_app_policy_manager.cc
@@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/metrics/histogram_functions.h" #include "base/values.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/external_install_options.h" @@ -166,14 +167,16 @@ } void WebAppPolicyManager::OnAppsSynchronized( - std::map<GURL, InstallResultCode> install_results, + std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { is_refreshing_ = false; if (needs_refresh_) RefreshPolicyInstalledApps(); - RecordExternalAppInstallResultCode(kInstallResultHistogramName, - install_results); + for (const auto& url_and_result : install_results) { + base::UmaHistogramEnumeration(kInstallResultHistogramName, + url_and_result.second.code); + } } } // namespace web_app
diff --git a/chrome/browser/web_applications/components/policy/web_app_policy_manager.h b/chrome/browser/web_applications/components/policy/web_app_policy_manager.h index f0e7392..2e4de42 100644 --- a/chrome/browser/web_applications/components/policy/web_app_policy_manager.h +++ b/chrome/browser/web_applications/components/policy/web_app_policy_manager.h
@@ -51,8 +51,9 @@ void InitChangeRegistrarAndRefreshPolicyInstalledApps(); void RefreshPolicyInstalledApps(); - void OnAppsSynchronized(std::map<GURL, InstallResultCode> install_results, - std::map<GURL, bool> uninstall_results); + void OnAppsSynchronized( + std::map<GURL, PendingAppManager::InstallResult> install_results, + std::map<GURL, bool> uninstall_results); Profile* profile_; PrefService* pref_service_;
diff --git a/chrome/browser/web_applications/components/web_app_id_constants.h b/chrome/browser/web_applications/components/web_app_id_constants.h index dca7de88..dbf3f7a 100644 --- a/chrome/browser/web_applications/components/web_app_id_constants.h +++ b/chrome/browser/web_applications/components/web_app_id_constants.h
@@ -72,10 +72,6 @@ constexpr char kPlayBooksAppId[] = "jglfhlbohpgcbefmhdmpancnijacbbji"; // Generated as: web_app::GenerateAppIdFromURL(GURL( -// "https://google.com/chromebook/whatsnew/embedded/")) -constexpr char kReleaseNotesAppId[] = "lddhblppcjmenljhdleiahjighahdcje"; - -// Generated as: web_app::GenerateAppIdFromURL(GURL( // "chrome://settings/")) constexpr char kSettingsAppId[] = "inogagmajamaleonmanpkpkkigmklfad";
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 68f6a95..eeead0f 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils.cc +++ b/chrome/browser/web_applications/components/web_app_install_utils.cc
@@ -9,7 +9,6 @@ #include <utility> #include "base/feature_list.h" -#include "base/metrics/histogram_functions.h" #include "base/optional.h" #include "base/stl_util.h" #include "base/strings/string16.h" @@ -428,11 +427,4 @@ return install_source; } -void RecordExternalAppInstallResultCode( - const char* histogram_name, - std::map<GURL, InstallResultCode> install_results) { - for (const auto& url_and_result : install_results) - base::UmaHistogramEnumeration(histogram_name, url_and_result.second); -} - } // namespace web_app
diff --git a/chrome/browser/web_applications/components/web_app_install_utils.h b/chrome/browser/web_applications/components/web_app_install_utils.h index 7c774074e..39ab386 100644 --- a/chrome/browser/web_applications/components/web_app_install_utils.h +++ b/chrome/browser/web_applications/components/web_app_install_utils.h
@@ -64,10 +64,6 @@ WebappInstallSource ConvertExternalInstallSourceToInstallSource( ExternalInstallSource external_install_source); -void RecordExternalAppInstallResultCode( - const char* histogram_name, - std::map<GURL, InstallResultCode> install_results); - } // namespace web_app #endif // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_WEB_APP_INSTALL_UTILS_H_
diff --git a/chrome/browser/web_applications/components/web_app_ui_manager.h b/chrome/browser/web_applications/components/web_app_ui_manager.h index 4a1d2587..ecca1fa 100644 --- a/chrome/browser/web_applications/components/web_app_ui_manager.h +++ b/chrome/browser/web_applications/components/web_app_ui_manager.h
@@ -29,8 +29,6 @@ public: static std::unique_ptr<WebAppUiManager> Create(Profile* profile); - static bool ShouldHideAppFromUser(const AppId& app_id); - virtual ~WebAppUiManager() = default; virtual void SetSubsystems( @@ -49,7 +47,8 @@ // Uninstalls the the apps in |from_apps| and migrates an |to_app|'s OS // attributes (e.g pin position, app list folder/position, shortcuts) to the // first |from_app| found. - virtual void UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, + // Returns whether any |from_apps| were uninstalled. + virtual bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, const AppId& to_app) = 0; virtual bool CanAddAppToQuickLaunchBar() const = 0;
diff --git a/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc index 9d169ff..c715efa 100644 --- a/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc +++ b/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc
@@ -49,8 +49,6 @@ namespace web_app { -using Result = PendingAppInstallTask::Result; - namespace { // Returns a factory that will return |data_retriever| the first time it gets @@ -393,17 +391,18 @@ task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { base::Optional<AppId> id = ExternallyInstalledWebAppPrefs(profile()->GetPrefs()) .LookupAppId(WebAppUrl()); EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_FALSE(IsPlaceholderApp(profile(), WebAppUrl())); - EXPECT_EQ(result.app_id.value(), id.value()); + EXPECT_EQ(app_id.value(), id.value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_TRUE(os_integration_manager()->did_add_to_desktop().value()); @@ -434,13 +433,14 @@ task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { base::Optional<AppId> id = ExternallyInstalledWebAppPrefs(profile()->GetPrefs()) .LookupAppId(WebAppUrl()); EXPECT_EQ(InstallResultCode::kGetWebApplicationInfoFailed, result.code); - EXPECT_FALSE(result.app_id.has_value()); + EXPECT_FALSE(app_id.has_value()); EXPECT_FALSE(id.has_value()); @@ -462,9 +462,10 @@ task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_FALSE(os_integration_manager()->did_add_to_desktop().value()); @@ -491,9 +492,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_TRUE(os_integration_manager()->did_add_to_desktop().value()); @@ -522,9 +524,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_FALSE(os_integration_manager()->did_add_to_desktop().value()); @@ -550,9 +553,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_TRUE(web_app_info().open_as_window); run_loop.Quit(); })); @@ -570,9 +574,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_FALSE(web_app_info().open_as_window); run_loop.Quit(); })); @@ -589,9 +594,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(WebappInstallSource::INTERNAL_DEFAULT, finalize_options().install_source); @@ -610,9 +616,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(WebappInstallSource::EXTERNAL_POLICY, finalize_options().install_source); @@ -631,9 +638,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_TRUE(IsPlaceholderApp(profile(), WebAppUrl())); @@ -667,9 +675,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_TRUE(IsPlaceholderApp(profile(), WebAppUrl())); @@ -703,13 +712,15 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - placeholder_app_id = result.app_id.value(); + base::BindLambdaForTesting( + [&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + placeholder_app_id = app_id.value(); - EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); - run_loop.Quit(); - })); + EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); + run_loop.Quit(); + })); run_loop.Run(); } @@ -718,9 +729,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_EQ(placeholder_app_id, result.app_id.value()); + EXPECT_EQ(placeholder_app_id, app_id.value()); // There shouldn't be a second call to the finalizer. EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); @@ -743,13 +755,15 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - placeholder_app_id = result.app_id.value(); + base::BindLambdaForTesting( + [&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + placeholder_app_id = app_id.value(); - EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); - run_loop.Quit(); - })); + EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); + run_loop.Quit(); + })); run_loop.Run(); } @@ -761,9 +775,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_FALSE(IsPlaceholderApp(profile(), WebAppUrl())); EXPECT_EQ(1u, finalizer()->uninstall_external_web_app_urls().size()); @@ -787,14 +802,16 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kRedirectedUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - placeholder_app_id = result.app_id.value(); + base::BindLambdaForTesting( + [&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + placeholder_app_id = app_id.value(); - EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); + EXPECT_EQ(1u, finalizer()->finalize_options_list().size()); - run_loop.Quit(); - })); + run_loop.Quit(); + })); run_loop.Run(); } @@ -807,9 +824,10 @@ base::RunLoop run_loop; task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kFailedPlaceholderUninstall, result.code); - EXPECT_FALSE(result.app_id.has_value()); + EXPECT_FALSE(app_id.has_value()); EXPECT_TRUE(IsPlaceholderApp(profile(), WebAppUrl())); EXPECT_EQ(1u, finalizer()->uninstall_external_web_app_urls().size()); @@ -836,8 +854,10 @@ auto task = GetInstallationTaskWithTestMocks(options); task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - app_id = *result.app_id; + base::BindLambdaForTesting([&](base::Optional<AppId> installed_app_id, + PendingAppManager::InstallResult + result) { + app_id = *installed_app_id; EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(app_id, @@ -859,14 +879,16 @@ auto task = GetInstallationTaskWithTestMocks(options); task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_EQ(app_id, *result.app_id); + base::BindLambdaForTesting( + [&](base::Optional<AppId> installed_app_id, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(app_id, *installed_app_id); - EXPECT_TRUE(ui_manager()->DidUninstallAndReplace("app3", app_id)); + EXPECT_TRUE(ui_manager()->DidUninstallAndReplace("app3", app_id)); - run_loop.Quit(); - })); + run_loop.Quit(); + })); run_loop.Run(); } } @@ -892,12 +914,14 @@ profile(), registrar(), os_integration_manager(), ui_manager(), finalizer(), install_manager(), install_options); - install_task.Install( - web_contents(), result_pair.loader_result, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { - EXPECT_EQ(result.code, result_pair.install_result); - run_loop.Quit(); - })); + install_task.Install(web_contents(), result_pair.loader_result, + base::BindLambdaForTesting( + [&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { + EXPECT_EQ(result.code, + result_pair.install_result); + run_loop.Quit(); + })); run_loop.Run(); } @@ -914,7 +938,9 @@ install_task.Install( web_contents(), WebAppUrlLoader::Result::kFailedWebContentsDestroyed, base::BindLambdaForTesting( - [&](PendingAppInstallTask::Result) { NOTREACHED(); })); + [&](base::Optional<AppId>, PendingAppManager::InstallResult) { + NOTREACHED(); + })); base::RunLoop().RunUntilIdle(); } @@ -932,9 +958,10 @@ task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_TRUE(os_integration_manager()->did_add_to_desktop().value()); @@ -965,9 +992,10 @@ task->Install( web_contents(), WebAppUrlLoader::Result::kUrlLoaded, - base::BindLambdaForTesting([&](PendingAppInstallTask::Result result) { + base::BindLambdaForTesting([&](base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); - EXPECT_TRUE(result.app_id.has_value()); + EXPECT_TRUE(app_id.has_value()); EXPECT_EQ(1u, os_integration_manager()->num_create_shortcuts_calls()); EXPECT_TRUE(os_integration_manager()->did_add_to_desktop().value());
diff --git a/chrome/browser/web_applications/external_web_app_manager.cc b/chrome/browser/web_applications/external_web_app_manager.cc index 239d57d..d633bb4 100644 --- a/chrome/browser/web_applications/external_web_app_manager.cc +++ b/chrome/browser/web_applications/external_web_app_manager.cc
@@ -18,7 +18,7 @@ #include "base/files/file_util.h" #include "base/json/json_file_value_serializer.h" #include "base/json/json_reader.h" -#include "base/metrics/histogram_functions.h" +#include "base/metrics/histogram_macros.h" #include "base/no_destructor.h" #include "base/path_service.h" #include "base/stl_util.h" @@ -142,6 +142,8 @@ "WebApp.Preinstalled.DisabledCount"; const char* ExternalWebAppManager::kHistogramConfigErrorCount = "WebApp.Preinstalled.ConfigErrorCount"; +const char* ExternalWebAppManager::kHistogramUninstallAndReplaceCount = + "WebApp.Preinstalled.UninstallAndReplaceCount"; void ExternalWebAppManager::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { @@ -315,12 +317,12 @@ return false; }); - base::UmaHistogramCounts100(ExternalWebAppManager::kHistogramEnabledCount, - total_count - disabled_count); - base::UmaHistogramCounts100(ExternalWebAppManager::kHistogramDisabledCount, - disabled_count); - base::UmaHistogramCounts100(ExternalWebAppManager::kHistogramConfigErrorCount, - parsed_configs.error_count); + UMA_HISTOGRAM_COUNTS_100(ExternalWebAppManager::kHistogramEnabledCount, + total_count - disabled_count); + UMA_HISTOGRAM_COUNTS_100(ExternalWebAppManager::kHistogramDisabledCount, + disabled_count); + UMA_HISTOGRAM_COUNTS_100(ExternalWebAppManager::kHistogramConfigErrorCount, + parsed_configs.error_count); std::move(callback).Run(std::move(parsed_configs.options_list)); } @@ -339,7 +341,7 @@ void ExternalWebAppManager::OnExternalWebAppsSynchronized( PendingAppManager::SynchronizeCallback callback, - std::map<GURL, InstallResultCode> install_results, + std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { // Note that we are storing the Chrome version instead of a "has synchronised" // bool in order to do version update specific logic in the future. @@ -347,8 +349,17 @@ prefs::kWebAppsLastPreinstallSynchronizeVersion, version_info::GetMajorVersionNumber()); - RecordExternalAppInstallResultCode("Webapp.InstallResult.Default", - install_results); + size_t uninstall_and_replace_count = 0; + for (const auto& url_and_result : install_results) { + UMA_HISTOGRAM_ENUMERATION("Webapp.InstallResult.Default", + url_and_result.second.code); + if (url_and_result.second.did_uninstall_and_replace) + ++uninstall_and_replace_count; + } + UMA_HISTOGRAM_COUNTS_100( + ExternalWebAppManager::kHistogramUninstallAndReplaceCount, + uninstall_and_replace_count); + if (callback) { std::move(callback).Run(std::move(install_results), std::move(uninstall_results));
diff --git a/chrome/browser/web_applications/external_web_app_manager.h b/chrome/browser/web_applications/external_web_app_manager.h index 3f87612..90e14d9e 100644 --- a/chrome/browser/web_applications/external_web_app_manager.h +++ b/chrome/browser/web_applications/external_web_app_manager.h
@@ -48,6 +48,7 @@ static const char* kHistogramEnabledCount; static const char* kHistogramDisabledCount; static const char* kHistogramConfigErrorCount; + static const char* kHistogramUninstallAndReplaceCount; static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); @@ -85,7 +86,7 @@ std::vector<ExternalInstallOptions>); void OnExternalWebAppsSynchronized( PendingAppManager::SynchronizeCallback callback, - std::map<GURL, InstallResultCode> install_results, + std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results); base::FilePath GetConfigDir();
diff --git a/chrome/browser/web_applications/external_web_app_manager_browsertest.cc b/chrome/browser/web_applications/external_web_app_manager_browsertest.cc index c3537a6a..c10a959c 100644 --- a/chrome/browser/web_applications/external_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/external_web_app_manager_browsertest.cc
@@ -62,7 +62,8 @@ WebAppProvider::Get(browser()->profile()) ->external_web_app_manager_for_testing() .LoadAndSynchronizeForTesting(base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, + [&](std::map<GURL, PendingAppManager::InstallResult> + install_results, std::map<GURL, bool> uninstall_results) { EXPECT_EQ(install_results.size(), 0u); EXPECT_EQ(uninstall_results.size(), 0u); @@ -99,11 +100,12 @@ WebAppProvider::Get(browser()->profile()) ->external_web_app_manager_for_testing() .LoadAndSynchronizeForTesting(base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, + [&](std::map<GURL, PendingAppManager::InstallResult> + install_results, std::map<GURL, bool> uninstall_results) { auto it = install_results.find(install_url); if (it != install_results.end()) - code = it->second; + code = it->second.code; sync_run_loop.Quit(); })); sync_run_loop.Run(); @@ -497,59 +499,73 @@ auto& provider = *WebAppProvider::Get(browser()->profile()); + struct Expectation { + const char* app_id; + const char* install_url; + const char* launch_url; + } kExpectations[] = { +#if BUILDFLAG(IS_CHROMEOS_ASH) + { + kGoogleCalendarAppId, + "https://calendar.google.com/calendar/installwebapp?usp=chrome_default", + "https://calendar.google.com/calendar/r?usp=installed_webapp", + }, +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + { + kGoogleDocsAppId, + "https://docs.google.com/document/installwebapp?usp=chrome_default", + "https://docs.google.com/document/?usp=installed_webapp", + }, + { + kGoogleSlidesAppId, + "https://docs.google.com/presentation/installwebapp?usp=chrome_default", + "https://docs.google.com/presentation/?usp=installed_webapp", + }, + { + kGoogleSheetsAppId, + "https://docs.google.com/spreadsheets/installwebapp?usp=chrome_default", + "https://docs.google.com/spreadsheets/?usp=installed_webapp", + }, + { + kGoogleDriveAppId, + "https://drive.google.com/drive/installwebapp?usp=chrome_default", + "https://drive.google.com/?lfhs=2&usp=installed_webapp", + }, + { + kGmailAppId, + "https://mail.google.com/mail/installwebapp?usp=chrome_default", + "https://mail.google.com/?usp=installed_webapp", + }, + { + kYoutubeAppId, + "https://www.youtube.com/s/notifications/manifest/cr_install.html", + "https://www.youtube.com/?feature=ytca", + }, + }; + base::RunLoop run_loop; provider.external_web_app_manager_for_testing().LoadAndSynchronizeForTesting( base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, + [&](std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { - EXPECT_THAT( - install_results, - UnorderedElementsAre( -#if BUILDFLAG(IS_CHROMEOS_ASH) - Pair(GURL("https://calendar.google.com/calendar/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - Pair(GURL("https://docs.google.com/document/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), - Pair(GURL("https://docs.google.com/presentation/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), - Pair(GURL("https://docs.google.com/spreadsheets/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), - Pair(GURL("https://drive.google.com/drive/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), - Pair(GURL("https://mail.google.com/mail/" - "installwebapp?usp=chrome_default"), - InstallResultCode::kSuccessOfflineOnlyInstall), - Pair(GURL("https://www.youtube.com/s/notifications/" - "manifest/cr_install.html"), - InstallResultCode::kSuccessOfflineOnlyInstall))); + EXPECT_EQ(install_results.size(), + base::span<Expectation>(kExpectations).size()); + + for (const Expectation& expectation : kExpectations) { + EXPECT_EQ(install_results[GURL(expectation.install_url)].code, + InstallResultCode::kSuccessOfflineOnlyInstall); + } + EXPECT_EQ(uninstall_results.size(), 0u); + run_loop.Quit(); })); run_loop.Run(); -#if BUILDFLAG(IS_CHROMEOS_ASH) - EXPECT_EQ( - provider.registrar().GetAppLaunchUrl(kGoogleCalendarAppId), - GURL("https://calendar.google.com/calendar/r?usp=installed_webapp")); -#endif // BUILDFLAG(IS_CHROMEOS_ASH) - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kGoogleDocsAppId), - GURL("https://docs.google.com/document/?usp=installed_webapp")); - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kGoogleSlidesAppId), - GURL("https://docs.google.com/presentation/?usp=installed_webapp")); - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kGoogleSheetsAppId), - GURL("https://docs.google.com/spreadsheets/?usp=installed_webapp")); - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kGoogleDriveAppId), - GURL("https://drive.google.com/?lfhs=2&usp=installed_webapp")); - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kGmailAppId), - GURL("https://mail.google.com/?usp=installed_webapp")); - EXPECT_EQ(provider.registrar().GetAppLaunchUrl(kYoutubeAppId), - GURL("https://www.youtube.com/?feature=ytca")); + for (const Expectation& expectation : kExpectations) { + EXPECT_EQ(provider.registrar().GetAppLaunchUrl(expectation.app_id), + GURL(expectation.launch_url)); + } } #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
diff --git a/chrome/browser/web_applications/external_web_app_migration_browsertest.cc b/chrome/browser/web_applications/external_web_app_migration_browsertest.cc index 464060d..25bbf4a 100644 --- a/chrome/browser/web_applications/external_web_app_migration_browsertest.cc +++ b/chrome/browser/web_applications/external_web_app_migration_browsertest.cc
@@ -168,13 +168,12 @@ base::RunLoop run_loop; auto callback = base::BindLambdaForTesting( - [&](std::map<GURL, InstallResultCode> install_results, + [&](std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { if (expect_install) { - InstallResultCode result = install_results.at(GetWebAppUrl()); - EXPECT_TRUE(result == InstallResultCode::kSuccessNewInstall || - result == - InstallResultCode::kSuccessOfflineOnlyInstall); + InstallResultCode code = install_results.at(GetWebAppUrl()).code; + EXPECT_TRUE(code == InstallResultCode::kSuccessNewInstall || + code == InstallResultCode::kSuccessOfflineOnlyInstall); } else { EXPECT_EQ(install_results.find(GetWebAppUrl()), install_results.end()); @@ -247,6 +246,7 @@ EXPECT_TRUE(IsExtensionAppInstalled()); { + base::HistogramTester histograms; extensions::TestExtensionRegistryObserver uninstall_observer( extensions::ExtensionRegistry::Get(profile())); @@ -257,6 +257,8 @@ uninstall_observer.WaitForExtensionUninstalled(); EXPECT_EQ(uninstalled_app->id(), kExtensionId); EXPECT_FALSE(IsExtensionAppInstalled()); + histograms.ExpectUniqueSample( + ExternalWebAppManager::kHistogramUninstallAndReplaceCount, 1, 1); } } @@ -273,6 +275,7 @@ // Re-run migration. { + base::HistogramTester histograms; base::AutoReset<bool> testing_scope = SetExternalAppInstallFeatureAlwaysEnabledForTesting(); ASSERT_TRUE(IsExternalAppInstallFeatureEnabled(kMigrationFlag)); @@ -287,6 +290,8 @@ uninstall_observer.WaitForExtensionUninstalled(); EXPECT_EQ(uninstalled_app->id(), kExtensionId); EXPECT_FALSE(IsExtensionAppInstalled()); + histograms.ExpectUniqueSample( + ExternalWebAppManager::kHistogramUninstallAndReplaceCount, 1, 1); } } @@ -342,6 +347,7 @@ EXPECT_TRUE(IsExtensionAppInstalled()); { + base::HistogramTester histograms; extensions::TestExtensionRegistryObserver uninstall_observer( extensions::ExtensionRegistry::Get(profile())); @@ -352,6 +358,8 @@ uninstall_observer.WaitForExtensionUninstalled(); EXPECT_EQ(uninstalled_app->id(), kExtensionId); EXPECT_FALSE(IsExtensionAppInstalled()); + histograms.ExpectUniqueSample( + ExternalWebAppManager::kHistogramUninstallAndReplaceCount, 1, 1); } } @@ -495,6 +503,8 @@ ExternalWebAppManager::kHistogramDisabledCount, 0, 1); histograms.ExpectUniqueSample( ExternalWebAppManager::kHistogramConfigErrorCount, 0, 1); + histograms.ExpectUniqueSample( + ExternalWebAppManager::kHistogramUninstallAndReplaceCount, 1, 1); } } }
diff --git a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc index d68545ad..bee93011 100644 --- a/chrome/browser/web_applications/manifest_update_manager_browsertest.cc +++ b/chrome/browser/web_applications/manifest_update_manager_browsertest.cc
@@ -293,9 +293,10 @@ GetProvider().pending_app_manager().Install( std::move(install_options), base::BindLambdaForTesting( - [&](const GURL& installed_app_url, InstallResultCode code) { + [&](const GURL& installed_app_url, + PendingAppManager::InstallResult result) { EXPECT_EQ(installed_app_url, app_url); - EXPECT_EQ(code, InstallResultCode::kSuccessNewInstall); + EXPECT_EQ(result.code, InstallResultCode::kSuccessNewInstall); run_loop.Quit(); })); run_loop.Run();
diff --git a/chrome/browser/web_applications/pending_app_install_task.cc b/chrome/browser/web_applications/pending_app_install_task.cc index c879884..3d48a8e 100644 --- a/chrome/browser/web_applications/pending_app_install_task.cc +++ b/chrome/browser/web_applications/pending_app_install_task.cc
@@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" +#include "base/metrics/histogram_functions.h" #include "base/strings/utf_string_conversions.h" #include "base/threading/thread_task_runner_handle.h" #include "chrome/browser/favicon/favicon_utils.h" @@ -27,16 +28,6 @@ namespace web_app { -PendingAppInstallTask::Result::Result(InstallResultCode code, - base::Optional<AppId> app_id) - : code(code), app_id(std::move(app_id)) { - DCHECK_EQ(IsNewInstall(code), app_id.has_value()); -} - -PendingAppInstallTask::Result::Result(Result&&) = default; - -PendingAppInstallTask::Result::~Result() = default; - // static void PendingAppInstallTask::CreateTabHelpers( content::WebContents* web_contents) { @@ -123,7 +114,8 @@ base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, - base::BindOnce(std::move(retry_on_failure), Result(code, base::nullopt))); + base::BindOnce(std::move(retry_on_failure), /*app_id=*/base::nullopt, + PendingAppManager::InstallResult{.code = code})); } void PendingAppInstallTask::InstallFromInfo(ResultCallback result_callback) { @@ -172,8 +164,8 @@ LOG(ERROR) << "Failed to uninstall placeholder for: " << install_options_.install_url; std::move(result_callback) - .Run(Result(InstallResultCode::kFailedPlaceholderUninstall, - base::nullopt)); + .Run(/*app_id=*/base::nullopt, + {.code = InstallResultCode::kFailedPlaceholderUninstall}); return; } ContinueWebAppInstall(web_contents, std::move(result_callback)); @@ -203,8 +195,9 @@ // No need to install a placeholder app again. base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, - base::BindOnce(std::move(callback), - Result(InstallResultCode::kSuccessNewInstall, app_id))); + base::BindOnce(std::move(callback), app_id, + PendingAppManager::InstallResult{ + .code = InstallResultCode::kSuccessNewInstall})); return; } @@ -241,11 +234,11 @@ const AppId& app_id, InstallResultCode code) { if (!IsNewInstall(code)) { - std::move(result_callback).Run(Result(code, base::nullopt)); + std::move(result_callback).Run(/*app_id=*/base::nullopt, {.code = code}); return; } - ui_manager_->UninstallAndReplaceIfExists( + bool did_uninstall_and_replace = ui_manager_->UninstallAndReplaceIfExists( install_options().uninstall_and_replace, app_id); externally_installed_app_prefs_.Insert(install_options_.install_url, app_id, @@ -258,8 +251,11 @@ ? InstallResultCode::kSuccessOfflineOnlyInstall : InstallResultCode::kSuccessOfflineFallbackInstall; } - base::ScopedClosureRunner scoped_closure( - base::BindOnce(std::move(result_callback), Result(code, app_id))); + base::ScopedClosureRunner scoped_closure(base::BindOnce( + std::move(result_callback), app_id, + PendingAppManager::InstallResult{ + .code = code, + .did_uninstall_and_replace = did_uninstall_and_replace})); if (!is_placeholder) { return; @@ -297,12 +293,13 @@ void PendingAppInstallTask::TryAppInfoFactoryOnFailure( ResultCallback result_callback, - Result result) { + base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { if (!IsSuccess(result.code) && install_options().app_info_factory) { InstallFromInfo(std::move(result_callback)); return; } - std::move(result_callback).Run(std::move(result)); + std::move(result_callback).Run(std::move(app_id), std::move(result)); } } // namespace web_app
diff --git a/chrome/browser/web_applications/pending_app_install_task.h b/chrome/browser/web_applications/pending_app_install_task.h index f41362a..22b3386 100644 --- a/chrome/browser/web_applications/pending_app_install_task.h +++ b/chrome/browser/web_applications/pending_app_install_task.h
@@ -14,6 +14,7 @@ #include "chrome/browser/web_applications/components/external_install_options.h" #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/components/os_integration_manager.h" +#include "chrome/browser/web_applications/components/pending_app_manager.h" #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_url_loader.h" @@ -37,20 +38,9 @@ // PendingAppManager. Can only be called from the UI thread. class PendingAppInstallTask { public: - // TODO(loyso): Use InstallManager::OnceInstallCallback directly. - struct Result { - Result(InstallResultCode code, base::Optional<AppId> app_id); - Result(Result&&); - Result(const Result&) = delete; - Result& operator=(const Result&) = delete; - ~Result(); - - const InstallResultCode code; - const base::Optional<AppId> app_id; - - }; - - using ResultCallback = base::OnceCallback<void(Result)>; + using ResultCallback = + base::OnceCallback<void(base::Optional<AppId> app_id, + PendingAppManager::InstallResult result)>; // Ensures the tab helpers necessary for installing an app are present. static void CreateTabHelpers(content::WebContents* web_contents); @@ -101,7 +91,8 @@ const AppId& app_id, InstallResultCode code); void TryAppInfoFactoryOnFailure(ResultCallback result_callback, - Result result); + base::Optional<AppId> app_id, + PendingAppManager::InstallResult result); void OnOsHooksCreated(const AppId& app_id, base::ScopedClosureRunner scoped_closure, const OsHooksResults os_hooks_results);
diff --git a/chrome/browser/web_applications/pending_app_manager_impl.cc b/chrome/browser/web_applications/pending_app_manager_impl.cc index b23c213..43425d5 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl.cc +++ b/chrome/browser/web_applications/pending_app_manager_impl.cc
@@ -179,7 +179,8 @@ // Otherwise no need to do anything. std::move(front->callback) .Run(install_options.install_url, - InstallResultCode::kSuccessAlreadyInstalled); + {.code = InstallResultCode::kSuccessAlreadyInstalled, + .did_uninstall_and_replace = false}); continue; } @@ -190,7 +191,8 @@ !install_options.override_previous_user_uninstall) { std::move(front->callback) .Run(install_options.install_url, - InstallResultCode::kPreviouslyUninstalled); + {.code = InstallResultCode::kPreviouslyUninstalled, + .did_uninstall_and_replace = false}); continue; } @@ -272,14 +274,10 @@ weak_ptr_factory_.GetWeakPtr())); } -void PendingAppManagerImpl::OnInstalled(PendingAppInstallTask::Result result) { - CurrentInstallationFinished(result.app_id, result.code); -} - -void PendingAppManagerImpl::CurrentInstallationFinished( - const base::Optional<AppId>& app_id, - InstallResultCode code) { - if (app_id && IsSuccess(code)) { +void PendingAppManagerImpl::OnInstalled( + base::Optional<AppId> app_id, + PendingAppManager::InstallResult result) { + if (app_id && IsSuccess(result.code)) { MaybeEnqueueServiceWorkerRegistration( current_install_->task->install_options()); } @@ -292,7 +290,7 @@ std::unique_ptr<TaskAndCallback> task_and_callback; task_and_callback.swap(current_install_); std::move(task_and_callback->callback) - .Run(task_and_callback->task->install_options().install_url, code); + .Run(task_and_callback->task->install_options().install_url, result); } void PendingAppManagerImpl::MaybeEnqueueServiceWorkerRegistration(
diff --git a/chrome/browser/web_applications/pending_app_manager_impl.h b/chrome/browser/web_applications/pending_app_manager_impl.h index 2b7093e..af3e144d 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl.h +++ b/chrome/browser/web_applications/pending_app_manager_impl.h
@@ -34,7 +34,6 @@ // only be used from the UI thread. class PendingAppManagerImpl : public PendingAppManager { public: - explicit PendingAppManagerImpl(Profile* profile); PendingAppManagerImpl(const PendingAppManagerImpl&) = delete; PendingAppManagerImpl& operator=(const PendingAppManagerImpl&) = delete; @@ -83,10 +82,8 @@ void OnUrlLoaded(WebAppUrlLoader::Result result); - void OnInstalled(PendingAppInstallTask::Result result); - - void CurrentInstallationFinished(const base::Optional<std::string>& app_id, - InstallResultCode code); + void OnInstalled(base::Optional<AppId> app_id, + PendingAppManager::InstallResult result); void MaybeEnqueueServiceWorkerRegistration( const ExternalInstallOptions& install_options);
diff --git a/chrome/browser/web_applications/pending_app_manager_impl_browsertest.cc b/chrome/browser/web_applications/pending_app_manager_impl_browsertest.cc index 1c8ac34..2e117d8 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl_browsertest.cc +++ b/chrome/browser/web_applications/pending_app_manager_impl_browsertest.cc
@@ -404,12 +404,12 @@ ExternalInstallSource::kExternalPolicy, base::BindLambdaForTesting( [&run_loop, &app_url]( - std::map<GURL, InstallResultCode> install_results, + std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { EXPECT_TRUE(uninstall_results.empty()); EXPECT_EQ(install_results.size(), 1U); - EXPECT_EQ(install_results[app_url], - InstallResultCode ::kSuccessNewInstall); + EXPECT_EQ(install_results[app_url].code, + InstallResultCode::kSuccessNewInstall); run_loop.Quit(); })); run_loop.Run();
diff --git a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc index fc7c1dd1..46f0ca32 100644 --- a/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc +++ b/chrome/browser/web_applications/pending_app_manager_impl_unittest.cc
@@ -269,7 +269,7 @@ externally_installed_app_prefs_.SetIsPlaceholder(install_url, is_placeholder); } - std::move(callback).Run({result_code, app_id}); + std::move(callback).Run(app_id, {.code = result_code}); } void Install(content::WebContents* web_contents, WebAppUrlLoader::Result url_loaded_result, @@ -393,20 +393,21 @@ pending_app_manager_impl()->Install( std::move(install_options), - base::BindLambdaForTesting([&](const GURL& u, InstallResultCode c) { - url = u; - code = c; - run_loop.Quit(); - })); + base::BindLambdaForTesting( + [&](const GURL& u, PendingAppManager::InstallResult result) { + url = u; + code = result.code; + run_loop.Quit(); + })); run_loop.Run(); return {url.value(), code.value()}; } - std::vector<std::pair<GURL, InstallResultCode>> InstallAppsAndWait( + InstallAppsResults InstallAppsAndWait( PendingAppManager* pending_app_manager, std::vector<ExternalInstallOptions> apps_to_install) { - std::vector<std::pair<GURL, InstallResultCode>> results; + InstallAppsResults results; base::RunLoop run_loop; auto barrier_closure = @@ -414,8 +415,8 @@ pending_app_manager_impl()->InstallApps( std::move(apps_to_install), base::BindLambdaForTesting( - [&](const GURL& url, InstallResultCode code) { - results.emplace_back(url, code); + [&](const GURL& url, PendingAppManager::InstallResult result) { + results.emplace_back(url, result.code); barrier_closure.Run(); })); run_loop.Run(); @@ -597,29 +598,31 @@ base::RunLoop run_loop; pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - // Two installations tasks should have run at this point, - // one from the last call to install (which gets higher priority), - // and another one for this call to install. - EXPECT_EQ(2u, install_run_count()); - EXPECT_EQ(GetFooInstallOptions(), last_install_options()); + // Two installations tasks should have run at this point, + // one from the last call to install (which gets higher priority), + // and another one for this call to install. + EXPECT_EQ(2u, install_run_count()); + EXPECT_EQ(GetFooInstallOptions(), last_install_options()); - run_loop.Quit(); - })); + run_loop.Quit(); + })); pending_app_manager_impl()->Install( GetBarInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(BarWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(BarWebAppUrl(), url); - // The last call gets higher priority so only one - // installation task should have run at this point. - EXPECT_EQ(1u, install_run_count()); - EXPECT_EQ(GetBarInstallOptions(), last_install_options()); - })); + // The last call gets higher priority so only one + // installation task should have run at this point. + EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(GetBarInstallOptions(), last_install_options()); + })); run_loop.Run(); } @@ -639,30 +642,32 @@ pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - EXPECT_EQ(1u, install_run_count()); - EXPECT_EQ(GetFooInstallOptions(), last_install_options()); + EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(GetFooInstallOptions(), last_install_options()); - foo_run_loop.Quit(); - })); + foo_run_loop.Quit(); + })); // Make sure the installation has started. base::RunLoop().RunUntilIdle(); url_loader()->AddPrepareForLoadResults({WebAppUrlLoader::Result::kUrlLoaded}); pending_app_manager_impl()->Install( GetBarInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(BarWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(BarWebAppUrl(), url); - EXPECT_EQ(2u, install_run_count()); - EXPECT_EQ(GetBarInstallOptions(), last_install_options()); + EXPECT_EQ(2u, install_run_count()); + EXPECT_EQ(GetBarInstallOptions(), last_install_options()); - bar_run_loop.Quit(); - })); + bar_run_loop.Quit(); + })); url_loader()->ProcessLoadUrlRequests(); foo_run_loop.Run(); @@ -683,8 +688,9 @@ pending_app_manager_impl()->Install( GetFooInstallOptionsWithWebAppInfo(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + base::BindLambdaForTesting([&](const GURL& url, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(FooWebAppUrl(), url); EXPECT_EQ(1u, install_run_count()); @@ -733,8 +739,9 @@ pending_app_manager_impl()->Install( GetFooInstallOptionsWithWebAppInfo(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + base::BindLambdaForTesting([&](const GURL& url, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(FooWebAppUrl(), url); EXPECT_EQ(1u, install_run_count()); @@ -746,8 +753,9 @@ pending_app_manager_impl()->Install( GetFooInstallOptionsWithWebAppInfo(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessAlreadyInstalled, code); + base::BindLambdaForTesting([&](const GURL& url, + PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessAlreadyInstalled, result.code); EXPECT_EQ(FooWebAppUrl(), url); EXPECT_EQ(1u, install_run_count()); @@ -777,28 +785,30 @@ url_loader()->SetPrepareForLoadResultLoaded(); pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kWebAppDisabled, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kWebAppDisabled, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(1u, install_run_count()); - foo_run_loop.Quit(); - })); + foo_run_loop.Quit(); + })); // Make sure the installation has started. base::RunLoop().RunUntilIdle(); pending_app_manager_impl()->Install( GetBarInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(BarWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(BarWebAppUrl(), url); - EXPECT_EQ(2u, install_run_count()); - EXPECT_EQ(GetBarInstallOptions(), last_install_options()); + EXPECT_EQ(2u, install_run_count()); + EXPECT_EQ(GetBarInstallOptions(), last_install_options()); - bar_run_loop.Quit(); - })); + bar_run_loop.Quit(); + })); url_loader()->ProcessLoadUrlRequests(); foo_run_loop.Run(); @@ -826,18 +836,18 @@ WebAppUrlLoader::Result::kUrlLoaded); base::RunLoop run_loop; - auto final_callback = - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + auto final_callback = base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(BarWebAppUrl(), url); EXPECT_EQ(2u, install_run_count()); EXPECT_EQ(GetBarInstallOptions(), last_install_options()); run_loop.Quit(); }); - auto reentrant_callback = - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + auto reentrant_callback = base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(FooWebAppUrl(), url); EXPECT_EQ(1u, install_run_count()); @@ -899,31 +909,33 @@ pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - // kSuccessAlreadyInstalled because the last call to Install gets higher - // priority. - EXPECT_EQ(InstallResultCode::kSuccessAlreadyInstalled, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + // kSuccessAlreadyInstalled because the last call to Install gets + // higher priority. + EXPECT_EQ(InstallResultCode::kSuccessAlreadyInstalled, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - // Only one installation task should run because the app was already - // installed. - EXPECT_EQ(1u, install_run_count()); + // Only one installation task should run because the app was already + // installed. + EXPECT_EQ(1u, install_run_count()); - EXPECT_TRUE(first_callback_ran); + EXPECT_TRUE(first_callback_ran); - run_loop.Quit(); - })); + run_loop.Quit(); + })); pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - EXPECT_EQ(1u, install_run_count()); - EXPECT_EQ(GetFooInstallOptions(), last_install_options()); - first_callback_ran = true; - })); + EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(GetFooInstallOptions(), last_install_options()); + first_callback_ran = true; + })); run_loop.Run(); EXPECT_EQ(1u, install_run_count()); @@ -1133,8 +1145,8 @@ pending_app_manager_impl()->InstallApps( std::move(apps_to_install), base::BindLambdaForTesting( - [&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(FooWebAppUrl(), url); EXPECT_EQ(1u, install_run_count()); @@ -1149,8 +1161,8 @@ pending_app_manager_impl()->InstallApps( std::move(apps_to_install), base::BindLambdaForTesting( - [&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); EXPECT_EQ(BarWebAppUrl(), url); EXPECT_EQ(2u, install_run_count()); @@ -1194,36 +1206,38 @@ int callback_calls = 0; pending_app_manager_impl()->InstallApps( std::move(apps_to_install), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - ++callback_calls; - if (callback_calls == 1) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + ++callback_calls; + if (callback_calls == 1) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - EXPECT_EQ(2u, install_run_count()); - EXPECT_EQ(GetFooInstallOptions(), last_install_options()); - } else if (callback_calls == 2) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(BarWebAppUrl(), url); + EXPECT_EQ(2u, install_run_count()); + EXPECT_EQ(GetFooInstallOptions(), last_install_options()); + } else if (callback_calls == 2) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(BarWebAppUrl(), url); - EXPECT_EQ(3u, install_run_count()); - EXPECT_EQ(GetBarInstallOptions(), last_install_options()); - } else { - NOTREACHED(); - } - })); + EXPECT_EQ(3u, install_run_count()); + EXPECT_EQ(GetBarInstallOptions(), last_install_options()); + } else { + NOTREACHED(); + } + })); // Queue through Install. pending_app_manager_impl()->Install( GetQuxInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(QuxWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(QuxWebAppUrl(), url); - // The install request from Install should be processed first. - EXPECT_EQ(1u, install_run_count()); - EXPECT_EQ(GetQuxInstallOptions(), last_install_options()); - })); + // The install request from Install should be processed first. + EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(GetQuxInstallOptions(), last_install_options()); + })); WebAppRegistrationWaiter(pending_app_manager_impl()) .AwaitNextRegistration(QuxWebAppUrl(), RegistrationResultCode::kSuccess); @@ -1257,14 +1271,15 @@ // Queue through Install. pending_app_manager_impl()->Install( GetQuxInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(QuxWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(QuxWebAppUrl(), url); - // The install request from Install should be processed first. - EXPECT_EQ(1u, install_run_count()); - EXPECT_EQ(GetQuxInstallOptions(), last_install_options()); - })); + // The install request from Install should be processed first. + EXPECT_EQ(1u, install_run_count()); + EXPECT_EQ(GetQuxInstallOptions(), last_install_options()); + })); // Queue through InstallApps. std::vector<ExternalInstallOptions> apps_to_install; @@ -1274,30 +1289,31 @@ int callback_calls = 0; pending_app_manager_impl()->InstallApps( std::move(apps_to_install), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - ++callback_calls; - if (callback_calls == 1) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + ++callback_calls; + if (callback_calls == 1) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); - // The install requests from InstallApps should be processed next. - EXPECT_EQ(2u, install_run_count()); - EXPECT_EQ(GetFooInstallOptions(), last_install_options()); + // The install requests from InstallApps should be processed next. + EXPECT_EQ(2u, install_run_count()); + EXPECT_EQ(GetFooInstallOptions(), last_install_options()); - return; - } - if (callback_calls == 2) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(BarWebAppUrl(), url); + return; + } + if (callback_calls == 2) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(BarWebAppUrl(), url); - EXPECT_EQ(3u, install_run_count()); - EXPECT_EQ(GetBarInstallOptions(), last_install_options()); + EXPECT_EQ(3u, install_run_count()); + EXPECT_EQ(GetBarInstallOptions(), last_install_options()); - run_loop.Quit(); - return; - } - NOTREACHED(); - })); + run_loop.Quit(); + return; + } + NOTREACHED(); + })); run_loop.Run(); } @@ -1460,11 +1476,12 @@ base::RunLoop run_loop; pending_app_manager_impl()->Install( GetFooInstallOptions(), - base::BindLambdaForTesting([&](const GURL& url, InstallResultCode code) { - EXPECT_EQ(InstallResultCode::kSuccessNewInstall, code); - EXPECT_EQ(FooWebAppUrl(), url); - run_loop.Quit(); - })); + base::BindLambdaForTesting( + [&](const GURL& url, PendingAppManager::InstallResult result) { + EXPECT_EQ(InstallResultCode::kSuccessNewInstall, result.code); + EXPECT_EQ(FooWebAppUrl(), url); + run_loop.Quit(); + })); install_finalizer()->SetNextUninstallExternalWebAppResult(FooWebAppUrl(), false);
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc index 2a7ff73..75ec659c 100644 --- a/chrome/browser/web_applications/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -715,16 +715,17 @@ } void SystemWebAppManager::RecordSystemWebAppInstallResults( - const std::map<GURL, InstallResultCode>& install_results) const { + const std::map<GURL, PendingAppManager::InstallResult>& install_results) + const { // Report install result codes. Exclude kSuccessAlreadyInstalled from metrics. // This result means the installation pipeline is a no-op (which happens every // time user logs in, and if there hasn't been a version upgrade). This skews // the install success rate. - std::map<GURL, InstallResultCode> results_to_report; + std::map<GURL, PendingAppManager::InstallResult> results_to_report; std::copy_if(install_results.begin(), install_results.end(), std::inserter(results_to_report, results_to_report.end()), [](const auto& url_and_result) { - return url_and_result.second != + return url_and_result.second.code != InstallResultCode::kSuccessAlreadyInstalled; }); @@ -734,14 +735,14 @@ kInstallResultHistogramName, shutting_down_ ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown - : url_and_result.second); + : url_and_result.second.code); // Record per-profile result. base::UmaHistogramEnumeration( install_result_per_profile_histogram_name_, shutting_down_ ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown - : url_and_result.second); + : url_and_result.second.code); } // Record per-app result. @@ -756,7 +757,7 @@ app_histogram_name, shutting_down_ ? InstallResultCode::kCancelledOnWebAppProviderShuttingDown - : url_and_result->second); + : url_and_result->second.code); } } } @@ -764,7 +765,7 @@ void SystemWebAppManager::OnAppsSynchronized( bool did_force_install_apps, const base::TimeTicks& install_start_time, - std::map<GURL, InstallResultCode> install_results, + std::map<GURL, PendingAppManager::InstallResult> install_results, std::map<GURL, bool> uninstall_results) { // TODO(crbug.com/1053371): Clean up File Handler install. We install SWA file // handlers here, because the code that registers file handlers for regular
diff --git a/chrome/browser/web_applications/system_web_app_manager.h b/chrome/browser/web_applications/system_web_app_manager.h index 074f37f..c40ea69 100644 --- a/chrome/browser/web_applications/system_web_app_manager.h +++ b/chrome/browser/web_applications/system_web_app_manager.h
@@ -255,10 +255,11 @@ bool AppHasFileHandlingOriginTrial(SystemAppType type); - void OnAppsSynchronized(bool did_force_install_apps, - const base::TimeTicks& install_start_time, - std::map<GURL, InstallResultCode> install_results, - std::map<GURL, bool> uninstall_results); + void OnAppsSynchronized( + bool did_force_install_apps, + const base::TimeTicks& install_start_time, + std::map<GURL, PendingAppManager::InstallResult> install_results, + std::map<GURL, bool> uninstall_results); bool ShouldForceInstallApps() const; void UpdateLastAttemptedInfo(); // Returns if we have exceeded the number of retry attempts allowed for this @@ -266,7 +267,8 @@ bool CheckAndIncrementRetryAttempts(); void RecordSystemWebAppInstallResults( - const std::map<GURL, InstallResultCode>& install_results) const; + const std::map<GURL, PendingAppManager::InstallResult>& install_results) + const; void RecordSystemWebAppInstallDuration( const base::TimeDelta& time_duration) const;
diff --git a/chrome/browser/web_applications/system_web_app_manager_unittest.cc b/chrome/browser/web_applications/system_web_app_manager_unittest.cc index 5acbfcc..f5d0450 100644 --- a/chrome/browser/web_applications/system_web_app_manager_unittest.cc +++ b/chrome/browser/web_applications/system_web_app_manager_unittest.cc
@@ -634,8 +634,9 @@ } pending_app_manager().SetHandleInstallRequestCallback( - base::BindLambdaForTesting([](const ExternalInstallOptions&) { - return InstallResultCode::kWebAppDisabled; + base::BindLambdaForTesting([](const ExternalInstallOptions&) + -> PendingAppManager::InstallResult { + return {.code = InstallResultCode::kWebAppDisabled}; })); { @@ -724,10 +725,11 @@ system_web_app_manager().SetSystemAppsForTesting(system_apps); pending_app_manager().SetHandleInstallRequestCallback( - base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) + -> PendingAppManager::InstallResult { if (opts.install_url == AppUrl1()) - return InstallResultCode::kSuccessAlreadyInstalled; - return InstallResultCode::kSuccessNewInstall; + return {.code = InstallResultCode::kSuccessAlreadyInstalled}; + return {.code = InstallResultCode::kSuccessNewInstall}; })); StartAndWaitForAppsToSynchronize(); @@ -756,10 +758,11 @@ { pending_app_manager().SetHandleInstallRequestCallback( - base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) + -> PendingAppManager::InstallResult { if (opts.install_url == AppUrl1()) - return InstallResultCode::kWriteDataFailed; - return InstallResultCode::kSuccessNewInstall; + return {.code = InstallResultCode::kWriteDataFailed}; + return {.code = InstallResultCode::kSuccessNewInstall}; })); StartAndWaitForAppsToSynchronize(); @@ -772,10 +775,11 @@ { pending_app_manager().SetHandleInstallRequestCallback( - base::BindLambdaForTesting([](const ExternalInstallOptions& opts) { + base::BindLambdaForTesting([](const ExternalInstallOptions& opts) + -> PendingAppManager::InstallResult { if (opts.install_url == AppUrl1()) - return InstallResultCode::kSuccessNewInstall; - return InstallResultCode::kSuccessAlreadyInstalled; + return {.code = InstallResultCode::kSuccessNewInstall}; + return {.code = InstallResultCode::kSuccessAlreadyInstalled}; })); StartAndWaitForAppsToSynchronize();
diff --git a/chrome/browser/web_applications/test/test_pending_app_manager.cc b/chrome/browser/web_applications/test/test_pending_app_manager.cc index 4c5453e..d0c62dc 100644 --- a/chrome/browser/web_applications/test/test_pending_app_manager.cc +++ b/chrome/browser/web_applications/test/test_pending_app_manager.cc
@@ -63,7 +63,7 @@ } install_requests_.push_back(install_options); } - std::move(std::move(callback)).Run(url, result_code); + std::move(std::move(callback)).Run(url, {.code = result_code}); })); }
diff --git a/chrome/browser/web_applications/test/test_pending_app_manager_impl.h b/chrome/browser/web_applications/test/test_pending_app_manager_impl.h index 209ac71..73ff215 100644 --- a/chrome/browser/web_applications/test/test_pending_app_manager_impl.h +++ b/chrome/browser/web_applications/test/test_pending_app_manager_impl.h
@@ -38,7 +38,8 @@ } using HandleInstallRequestCallback = - base::RepeatingCallback<InstallResultCode(const ExternalInstallOptions&)>; + base::RepeatingCallback<PendingAppManager::InstallResult( + const ExternalInstallOptions&)>; // Set a callback to handle install requests. If set, this callback will be // used in place of the real installation process. The callback takes a const
diff --git a/chrome/browser/web_applications/test/test_web_app_ui_manager.cc b/chrome/browser/web_applications/test/test_web_app_ui_manager.cc index 15372c32..64be713 100644 --- a/chrome/browser/web_applications/test/test_web_app_ui_manager.cc +++ b/chrome/browser/web_applications/test/test_web_app_ui_manager.cc
@@ -54,12 +54,13 @@ })); } -void TestWebAppUiManager::UninstallAndReplaceIfExists( +bool TestWebAppUiManager::UninstallAndReplaceIfExists( const std::vector<AppId>& from_apps, const AppId& to_app) { for (const AppId& from_app : from_apps) { uninstall_and_replace_map_[from_app] = to_app; } + return false; } bool TestWebAppUiManager::CanAddAppToQuickLaunchBar() const {
diff --git a/chrome/browser/web_applications/test/test_web_app_ui_manager.h b/chrome/browser/web_applications/test/test_web_app_ui_manager.h index 95d4d454..324a4f65 100644 --- a/chrome/browser/web_applications/test/test_web_app_ui_manager.h +++ b/chrome/browser/web_applications/test/test_web_app_ui_manager.h
@@ -30,7 +30,7 @@ size_t GetNumWindowsForApp(const AppId& app_id) override; void NotifyOnAllAppWindowsClosed(const AppId& app_id, base::OnceClosure callback) override; - void UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, + bool UninstallAndReplaceIfExists(const std::vector<AppId>& from_apps, const AppId& to_app) override; bool CanAddAppToQuickLaunchBar() const override; void AddAppToQuickLaunchBar(const AppId& app_id) override;
diff --git a/chrome/browser/web_applications/web_app_migration_manager.cc b/chrome/browser/web_applications/web_app_migration_manager.cc index 9684512..7a228a9 100644 --- a/chrome/browser/web_applications/web_app_migration_manager.cc +++ b/chrome/browser/web_applications/web_app_migration_manager.cc
@@ -266,15 +266,6 @@ web_app->SetUserLaunchOrdinal( bookmark_app_registrar_->GetUserLaunchOrdinal(app_id)); - if (IsChromeOs()) { - auto chromeos_data = base::make_optional<WebAppChromeOsData>(); - const bool should_show = !WebAppUiManager::ShouldHideAppFromUser(app_id); - chromeos_data->show_in_launcher = should_show; - chromeos_data->show_in_search = should_show; - chromeos_data->show_in_management = should_show; - web_app->SetWebAppChromeOsData(std::move(chromeos_data)); - } - WebApp::SyncFallbackData sync_fallback_data; sync_fallback_data.name = bookmark_app_registrar_->GetAppShortName(app_id); sync_fallback_data.theme_color =
diff --git a/chrome/browser/web_applications/web_app_migration_manager_browsertest.cc b/chrome/browser/web_applications/web_app_migration_manager_browsertest.cc index 2c33467..502dc72 100644 --- a/chrome/browser/web_applications/web_app_migration_manager_browsertest.cc +++ b/chrome/browser/web_applications/web_app_migration_manager_browsertest.cc
@@ -55,14 +55,6 @@ // manifest_test_page.html. constexpr char kSimpleManifestStartUrl[] = "https://example.org/manifest_test_page.html"; -// start_url in release_notes_manifest.json generates the id of an app that -// should be hidden from the user. -constexpr char kHiddenAppInstallUrl[] = - "https://www.google.com/manifest_test_page.html" - "?manifest=release_notes_manifest.json"; - -constexpr char kHiddenAppStartUrl[] = - "https://www.google.com/chromebook/whatsnew/embedded/"; constexpr char kManifestWithShortcutsMenuInstallUrl[] = "https://example.org/manifest_test_page.html" @@ -259,41 +251,6 @@ } IN_PROC_BROWSER_TEST_F(WebAppMigrationManagerBrowserTest, - PRE_DatabaseMigration_HiddenFromUser) { - ui_test_utils::NavigateToURL(browser(), GURL{kHiddenAppInstallUrl}); - AppId app_id = InstallWebAppAsUserViaOmnibox(); - EXPECT_EQ(GenerateAppIdFromURL(GURL(kHiddenAppStartUrl)), app_id); - - EXPECT_TRUE(provider().registrar().AsBookmarkAppRegistrar()); - EXPECT_FALSE(provider().registrar().AsWebAppRegistrar()); - - EXPECT_TRUE(provider().registrar().IsInstalled(app_id)); -} - -IN_PROC_BROWSER_TEST_F(WebAppMigrationManagerBrowserTest, - DatabaseMigration_HiddenFromUser) { - AwaitRegistryReady(); - - AppId app_id = GenerateAppIdFromURL(GURL{kHiddenAppStartUrl}); - EXPECT_TRUE(provider().registrar().IsInstalled(app_id)); - - WebAppRegistrar* registrar = provider().registrar().AsWebAppRegistrar(); - ASSERT_TRUE(registrar); - EXPECT_FALSE(provider().registrar().AsBookmarkAppRegistrar()); - - const WebApp* web_app = registrar->GetAppById(app_id); - ASSERT_TRUE(web_app); - - if (IsChromeOs()) { - EXPECT_FALSE(web_app->chromeos_data()->show_in_launcher); - EXPECT_FALSE(web_app->chromeos_data()->show_in_search); - EXPECT_FALSE(web_app->chromeos_data()->show_in_management); - } else { - EXPECT_FALSE(web_app->chromeos_data().has_value()); - } -} - -IN_PROC_BROWSER_TEST_F(WebAppMigrationManagerBrowserTest, InstallShadowBookmarkApp) { EXPECT_FALSE(provider().registrar().AsBookmarkAppRegistrar()); AwaitRegistryReady();
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index a23d6bc8d..16133f8 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1606759191-6cd311392c4a2d76b8ec4391ac1874206c9889b0.profdata +chrome-linux-master-1606780634-867f063cb43c5794bf65123662fce4e91b9de4cb.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index b1859e8..0d4cde7a 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1606759191-e36e6bb9e34aaec2b6f2fa507df72b0ae1dbb4d4.profdata +chrome-mac-master-1606780634-1ea1516e4fb1522afac8d06bcea54ae6d1ecbcd2.profdata
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc index 1284519..ec411a3 100644 --- a/chrome/common/url_constants.cc +++ b/chrome/common/url_constants.cc
@@ -41,10 +41,6 @@ const char kChromeFixUpdateProblems[] = "https://support.google.com/chrome?p=fix_chrome_updates"; -// TODO: replace w/link after marketing provides it. -const char kChromeReleaseNotesURL[] = - "https://www.google.com/chromebook/whatsnew/embedded/"; - const char kChromeHelpViaKeyboardURL[] = #if BUILDFLAG(IS_CHROMEOS_ASH) #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h index 790f555..4316f5c 100644 --- a/chrome/common/url_constants.h +++ b/chrome/common/url_constants.h
@@ -60,9 +60,6 @@ // The URL for the help center article to fix Chrome update problems. extern const char kChromeFixUpdateProblems[]; -// Link to the release notes page managed by marketing. -extern const char kChromeReleaseNotesURL[]; - // General help links for Chrome, opened using various actions. extern const char kChromeHelpViaKeyboardURL[]; extern const char kChromeHelpViaMenuURL[];
diff --git a/chrome/test/data/banners/release_notes_manifest.json b/chrome/test/data/banners/release_notes_manifest.json deleted file mode 100644 index e70a906..0000000 --- a/chrome/test/data/banners/release_notes_manifest.json +++ /dev/null
@@ -1,42 +0,0 @@ -{ - "name": "What's New", - "short_name": "What's New", - "icons": [ - { - "src": "launcher-icon-1x.png", - "sizes": "48x48", - "type": "image/png" - }, - { - "src": "launcher-icon-1-5x.png", - "sizes": "72x72", - "type": "image/png" - }, - { - "src": "launcher-icon-2x.png", - "sizes": "96x96", - "type": "image/png", - "purpose": "any monochrome" - }, - { - "src": "launcher-icon-3x.png", - "sizes": "144x144", - "type": "image/png" - }, - { - "src": "launcher-icon-4x.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "image-512px.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "start_url": "https://www.google.com/chromebook/whatsnew/embedded/", - "scope": "/", - "display": "standalone", - "background_color": "#FFFFFF", - "theme_color": "#FFFFFF" -}
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 df49ffc..ac350f2 100644 --- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js +++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -182,6 +182,15 @@ return flushTasks(); } + /** + * @param {boolean} success + * @return {!Promise} + */ + simulateCancelComplete(success) { + this.scanJobObserverRemote_.onCancelComplete(success); + return flushTasks(); + } + // scanService methods: /** @return {!Promise<{scanners: !ScannerArr}>} */ @@ -541,7 +550,11 @@ .then(() => { // Click the cancel button to cancel the scan. cancelButton.click(); - return fakeScanService_.cancelScan(); + return fakeScanService_.whenCalled('cancelScan'); + }) + .then(() => { + // Simulate cancel completing successfully. + return fakeScanService_.simulateCancelComplete(true); }) .then(() => { // After canceling is complete, the scan button should be visible and @@ -551,6 +564,64 @@ }); }); + test('CancelScanFailed', () => { + const expectedScanners = [ + createScanner(firstScannerId, firstScannerName), + ]; + + let capabilities = new Map(); + capabilities.set(firstScannerId, firstCapabilities); + + /** @type {!CrButtonElement} */ + let scanButton; + /** @type {!CrButtonElement} */ + let cancelButton; + + return initializeScanningApp(expectedScanners, capabilities) + .then(() => { + scanButton = + /** @type {!CrButtonElement} */ (scanningApp.$$('#scanButton')); + cancelButton = + /** @type {!CrButtonElement} */ (scanningApp.$$('#cancelButton')); + return fakeScanService_.whenCalled('getScannerCapabilities'); + }) + .then(() => { + // Click the Scan button and wait till the scan is started. + scanButton.click(); + return fakeScanService_.whenCalled('startScan'); + }) + .then(() => { + // Simulate a progress update and verify the progress bar and text are + // updated correctly. + return fakeScanService_.simulateProgress(1, 17); + }) + .then(() => { + // Click the cancel button to cancel the scan. + cancelButton.click(); + assertFalse(scanningApp.$$('#toast').open); + return fakeScanService_.whenCalled('cancelScan'); + }) + .then(() => { + // Simulate cancel failing. + return fakeScanService_.simulateCancelComplete(false); + }) + .then(() => { + // After canceling fails, the error toast should pop up. + assertTrue(scanningApp.$$('#toast').open); + assertEquals( + scanningApp.i18n('cancelFailedToastText'), + scanningApp.$$('#toastText').textContent.trim()); + // The scan progress page should still be showing with the cancel + // button visible. + assertTrue( + isVisible(scanningApp.$$('#scanPreview').$$('#scanProgress'))); + assertTrue(isVisible(cancelButton)); + assertFalse( + isVisible(scanningApp.$$('#scanPreview').$$('#helperText'))); + assertFalse(isVisible(scanButton)); + }); + }); + test('ScanFailedToStart', () => { const expectedScanners = [ createScanner(firstScannerId, firstScannerName),
diff --git a/chromecast/media/audio/mixer_service/control_connection.cc b/chromecast/media/audio/mixer_service/control_connection.cc index 49453be..21e0bec 100644 --- a/chromecast/media/audio/mixer_service/control_connection.cc +++ b/chromecast/media/audio/mixer_service/control_connection.cc
@@ -35,7 +35,9 @@ auto* volume = message.mutable_set_device_volume(); volume->set_content_type(ConvertContentType(type)); volume->set_volume_multiplier(volume_multiplier); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } } @@ -50,7 +52,9 @@ auto* mute_message = message.mutable_set_device_muted(); mute_message->set_content_type(ConvertContentType(type)); mute_message->set_muted(muted); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } } @@ -66,7 +70,9 @@ auto* limit = message.mutable_set_volume_limit(); limit->set_content_type(ConvertContentType(type)); limit->set_max_volume_multiplier(max_volume_multiplier); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } } @@ -76,22 +82,33 @@ if (!socket_) { return; } - Generic proto; - proto.mutable_list_postprocessors(); - socket_->SendProto(proto); + Generic message; + message.mutable_list_postprocessors(); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } void ControlConnection::ConfigurePostprocessor(std::string postprocessor_name, std::string config) { - SendPostprocessorMessage(postprocessor_name, config); - postprocessor_config_.insert_or_assign(std::move(postprocessor_name), - std::move(config)); + postprocessor_config_.insert_or_assign(postprocessor_name, config); + if (!SendPostprocessorMessageInternal(std::move(postprocessor_name), + std::move(config))) { + OnSendFailed(); + } } void ControlConnection::SendPostprocessorMessage(std::string postprocessor_name, std::string message) { + SendPostprocessorMessageInternal(std::move(postprocessor_name), + std::move(message)); +} + +bool ControlConnection::SendPostprocessorMessageInternal( + std::string postprocessor_name, + std::string message) { if (!socket_) { - return; + return true; } // Erase any ? and subsequent substring from the name. @@ -104,7 +121,7 @@ auto* content = proto.mutable_configure_postprocessor(); content->set_name(std::move(postprocessor_name)); content->set_config(std::move(message)); - socket_->SendProto(proto); + return socket_->SendProto(0, proto); } void ControlConnection::ReloadPostprocessors() { @@ -113,7 +130,7 @@ } Generic message; message.mutable_reload_postprocessors(); - socket_->SendProto(message); + socket_->SendProto(0, message); } void ControlConnection::SetStreamCountCallback(StreamCountCallback callback) { @@ -122,7 +139,9 @@ Generic message; message.mutable_request_stream_count()->set_subscribe( !stream_count_callback_.is_null()); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } } @@ -131,7 +150,9 @@ if (socket_) { Generic message; message.mutable_set_num_output_channels()->set_channels(num_channels); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + OnSendFailed(); + } } } @@ -144,7 +165,9 @@ auto* limit = message.mutable_set_volume_limit(); limit->set_content_type(ConvertContentType(item.first)); limit->set_max_volume_multiplier(item.second); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } for (const auto& item : muted_) { @@ -152,7 +175,9 @@ auto* muted = message.mutable_set_device_muted(); muted->set_content_type(ConvertContentType(item.first)); muted->set_muted(item.second); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } for (const auto& item : volume_) { @@ -160,30 +185,40 @@ auto* volume = message.mutable_set_device_volume(); volume->set_content_type(ConvertContentType(item.first)); volume->set_volume_multiplier(item.second); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } if (stream_count_callback_) { Generic message; message.mutable_request_stream_count()->set_subscribe(true); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } if (num_output_channels_) { Generic message; message.mutable_set_num_output_channels()->set_channels( num_output_channels_); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } for (const auto& item : postprocessor_config_) { - SendPostprocessorMessage(item.first, item.second); + if (!SendPostprocessorMessageInternal(item.first, item.second)) { + return OnSendFailed(); + } } if (!list_postprocessors_callbacks_.empty()) { Generic message; message.mutable_list_postprocessors(); - socket_->SendProto(message); + if (!socket_->SendProto(0, message)) { + return OnSendFailed(); + } } if (connect_callback_) { @@ -191,6 +226,11 @@ } } +void ControlConnection::OnSendFailed() { + LOG(WARNING) << "Failed to send a control message"; + OnConnectionError(); +} + void ControlConnection::OnConnectionError() { socket_.reset(); MixerConnection::Connect();
diff --git a/chromecast/media/audio/mixer_service/control_connection.h b/chromecast/media/audio/mixer_service/control_connection.h index 4e07b64..b008d397 100644 --- a/chromecast/media/audio/mixer_service/control_connection.h +++ b/chromecast/media/audio/mixer_service/control_connection.h
@@ -86,6 +86,10 @@ void SetNumOutputChannels(int num_channels); private: + bool SendPostprocessorMessageInternal(std::string postprocessor_name, + std::string message); + void OnSendFailed(); + // MixerConnection implementation: void OnConnected(std::unique_ptr<MixerSocket> socket) override; void OnConnectionError() override;
diff --git a/chromecast/media/audio/mixer_service/loopback_connection.cc b/chromecast/media/audio/mixer_service/loopback_connection.cc index ab3197c..a4d25c7 100644 --- a/chromecast/media/audio/mixer_service/loopback_connection.cc +++ b/chromecast/media/audio/mixer_service/loopback_connection.cc
@@ -18,6 +18,14 @@ namespace media { namespace mixer_service { +namespace { + +enum MessageTypes : int { + kRequest = 1, +}; + +} + LoopbackConnection::LoopbackConnection(Delegate* delegate) : LoopbackConnection(delegate, nullptr) {} @@ -48,7 +56,7 @@ Generic message; message.mutable_loopback_request(); - socket_->SendProto(message); + socket_->SendProto(kRequest, message); } void LoopbackConnection::OnConnectionError() {
diff --git a/chromecast/media/audio/mixer_service/loopback_interrupt_reason.h b/chromecast/media/audio/mixer_service/loopback_interrupt_reason.h index bc9a1ee7..42aadb00 100644 --- a/chromecast/media/audio/mixer_service/loopback_interrupt_reason.h +++ b/chromecast/media/audio/mixer_service/loopback_interrupt_reason.h
@@ -12,10 +12,11 @@ // StreamInterruption::InterruptionReason in mixer_service.proto. enum class LoopbackInterruptReason { kUnknown = 0, - kDisconnected = 1, // Disconnected from mixer. - kUnderrun = 2, // Mixer output underrun. - kConfigChange = 3, // Mixer output config changed. - kOutputStopped = 4, // Mixer stopped playing out audio. + kDisconnected = 1, // Disconnected from mixer. + kUnderrun = 2, // Mixer output underrun. + kConfigChange = 3, // Mixer output config changed. + kOutputStopped = 4, // Mixer stopped playing out audio. + kSocketOverflow = 5, // Mixer couldn't send over the socket. }; } // namespace media
diff --git a/chromecast/media/audio/mixer_service/mixer_service.proto b/chromecast/media/audio/mixer_service/mixer_service.proto index e26194c..cb5acb52 100644 --- a/chromecast/media/audio/mixer_service/mixer_service.proto +++ b/chromecast/media/audio/mixer_service/mixer_service.proto
@@ -145,6 +145,7 @@ INTERRUPTED_UNDERRUN = 2; // Mixer output underrun. INTERRUPTED_CONFIG_CHANGE = 3; // Mixer output config changed. INTERRUPTED_OUTPUT_STOPPED = 4; // Mixer stopped playing out audio. + INTERRUPTED_SOCKET_OVERFLOW = 5; // Mixer couldn't send over the socket. } optional InterruptionReason reason = 1;
diff --git a/chromecast/media/audio/mixer_service/mixer_socket.cc b/chromecast/media/audio/mixer_service/mixer_socket.cc index 8ca189f5..9dd8cd1 100644 --- a/chromecast/media/audio/mixer_service/mixer_socket.cc +++ b/chromecast/media/audio/mixer_service/mixer_socket.cc
@@ -144,28 +144,30 @@ memset(ptr, 0, sizeof(int32_t)); } -void MixerSocket::SendAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer, +bool MixerSocket::SendAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer, int filled_bytes, int64_t timestamp) { PrepareAudioBuffer(audio_buffer.get(), filled_bytes, timestamp); - SendPreparedAudioBuffer(std::move(audio_buffer)); + return SendPreparedAudioBuffer(std::move(audio_buffer)); } -void MixerSocket::SendPreparedAudioBuffer( +bool MixerSocket::SendPreparedAudioBuffer( scoped_refptr<net::IOBuffer> audio_buffer) { uint16_t payload_size; base::ReadBigEndian(audio_buffer->data(), &payload_size); DCHECK_GE(payload_size, kAudioHeaderSize); - SendBuffer(std::move(audio_buffer), sizeof(uint16_t) + payload_size); + return SendBuffer(0, std::move(audio_buffer), + sizeof(uint16_t) + payload_size); } -void MixerSocket::SendProto(const google::protobuf::MessageLite& message) { - int16_t type = static_cast<int16_t>(MessageType::kMetadata); +bool MixerSocket::SendProto(int type, + const google::protobuf::MessageLite& message) { + int16_t packet_type = static_cast<int16_t>(MessageType::kMetadata); size_t message_size = message.ByteSizeLong(); int32_t padding_bytes = (4 - (message_size % 4)) % 4; - int total_size = - sizeof(type) + sizeof(padding_bytes) + message_size + padding_bytes; + int total_size = sizeof(packet_type) + sizeof(padding_bytes) + message_size + + padding_bytes; scoped_refptr<net::IOBuffer> buffer; char* ptr = (socket_ ? static_cast<char*>(socket_->PrepareSend(total_size)) @@ -184,8 +186,8 @@ ptr += sizeof(uint16_t); } - base::WriteBigEndian(ptr, type); - ptr += sizeof(type); + base::WriteBigEndian(ptr, packet_type); + ptr += sizeof(packet_type); base::WriteBigEndian(ptr, padding_bytes); ptr += sizeof(padding_bytes); message.SerializeToArray(ptr, message_size); @@ -194,36 +196,46 @@ if (!buffer) { socket_->Send(); - return; + return true; } - SendBuffer(std::move(buffer), sizeof(uint16_t) + total_size); + return SendBuffer(type, std::move(buffer), sizeof(uint16_t) + total_size); } -void MixerSocket::SendBuffer(scoped_refptr<net::IOBuffer> buffer, +bool MixerSocket::SendBuffer(int type, + scoped_refptr<net::IOBuffer> buffer, size_t buffer_size) { if (counterpart_task_runner_) { counterpart_task_runner_->PostTask( FROM_HERE, base::BindOnce(base::IgnoreResult(&MixerSocket::OnMessageBuffer), local_counterpart_, std::move(buffer), buffer_size)); - return; + return true; } + return SendBufferToSocket(type, std::move(buffer), buffer_size); +} + +bool MixerSocket::SendBufferToSocket(int type, + scoped_refptr<net::IOBuffer> buffer, + size_t buffer_size) { DCHECK(socket_); if (!socket_->SendBuffer(buffer, buffer_size)) { - write_queue_.push(std::move(buffer)); + if (type == 0) { + return false; + } + pending_writes_.insert_or_assign(type, std::move(buffer)); } + return true; } void MixerSocket::OnSendUnblocked() { DCHECK(socket_); - while (!write_queue_.empty()) { + base::flat_map<int, scoped_refptr<net::IOBuffer>> pending; + pending_writes_.swap(pending); + for (auto& m : pending) { uint16_t message_size; - base::ReadBigEndian(write_queue_.front()->data(), &message_size); - if (!socket_->SendBuffer(write_queue_.front().get(), - sizeof(uint16_t) + message_size)) { - return; - } - write_queue_.pop(); + base::ReadBigEndian(m.second->data(), &message_size); + SendBufferToSocket(m.first, std::move(m.second), + sizeof(uint16_t) + message_size); } } @@ -245,18 +257,18 @@ } bool MixerSocket::OnMessage(char* data, size_t size) { - int16_t type; - if (size < sizeof(type)) { + int16_t packet_type; + if (size < sizeof(packet_type)) { LOG(ERROR) << "Invalid message size " << size << " from " << this; delegate_->OnConnectionError(); return false; } - memcpy(&type, data, sizeof(type)); - data += sizeof(type); - size -= sizeof(type); + memcpy(&packet_type, data, sizeof(packet_type)); + data += sizeof(packet_type); + size -= sizeof(packet_type); - switch (static_cast<MessageType>(type)) { + switch (static_cast<MessageType>(packet_type)) { case MessageType::kMetadata: return ParseMetadata(data, size); case MessageType::kAudio:
diff --git a/chromecast/media/audio/mixer_service/mixer_socket.h b/chromecast/media/audio/mixer_service/mixer_socket.h index d8f1c84..417f5dee 100644 --- a/chromecast/media/audio/mixer_service/mixer_socket.h +++ b/chromecast/media/audio/mixer_service/mixer_socket.h
@@ -7,8 +7,8 @@ #include <cstdint> #include <memory> -#include <queue> +#include "base/containers/flat_map.h" #include "base/macros.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" @@ -105,24 +105,39 @@ int filled_bytes, int64_t timestamp); - // Prepares |audio_buffer| and then sends it across the connection. - void SendAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer, + // Prepares |audio_buffer| and then sends it across the connection. Returns + // |false| if the audio could not be sent. + bool SendAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer, int filled_bytes, int64_t timestamp); // Sends |audio_buffer| across the connection. |audio_buffer| should have - // previously been prepared using PrepareAudioBuffer(). - void SendPreparedAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer); + // previously been prepared using PrepareAudioBuffer(). Returns |false| if the + // audio could not be sent. + bool SendPreparedAudioBuffer(scoped_refptr<net::IOBuffer> audio_buffer); - // Sends an arbitrary protobuf across the connection. - void SendProto(const google::protobuf::MessageLite& message); + // Sends an arbitrary protobuf across the connection. |type| indicates the + // type of message; if the write cannot complete immediately, one message of + // each type will be stored for later sending; if a newer message is sent with + // the same type, then the previous message is overwritten. When writes become + // available again, the stored messages are written in order of |type| (lowest + // type first). Note that |type| is completely determined by the caller, and + // you can reuse the same type value for different messages as long as they + // are on different socket instances. A type of 0 means to never store the + // message. Returns |false| if the message was not sent or stored. + bool SendProto(int type, const google::protobuf::MessageLite& message); // Resumes receiving messages. Delegate calls may be called synchronously // from within this method. void ReceiveMoreMessages(); private: - void SendBuffer(scoped_refptr<net::IOBuffer> buffer, size_t buffer_size); + bool SendBuffer(int type, + scoped_refptr<net::IOBuffer> buffer, + size_t buffer_size); + bool SendBufferToSocket(int type, + scoped_refptr<net::IOBuffer> buffer, + size_t buffer_size); // SmallMessageSocket::Delegate implementation: void OnSendUnblocked() override; @@ -142,7 +157,7 @@ const std::unique_ptr<SmallMessageSocket> socket_; scoped_refptr<IOBufferPool> buffer_pool_; - std::queue<scoped_refptr<net::IOBuffer>> write_queue_; + base::flat_map<int, scoped_refptr<net::IOBuffer>> pending_writes_; base::WeakPtr<MixerSocket> local_counterpart_; scoped_refptr<base::SequencedTaskRunner> counterpart_task_runner_;
diff --git a/chromecast/media/audio/mixer_service/output_stream_connection.cc b/chromecast/media/audio/mixer_service/output_stream_connection.cc index cc31024..66b839b 100644 --- a/chromecast/media/audio/mixer_service/output_stream_connection.cc +++ b/chromecast/media/audio/mixer_service/output_stream_connection.cc
@@ -31,6 +31,16 @@ return params.sample_rate() / 100; } +enum MessageTypes : int { + kInitial = 1, + kStartTimestamp, + kPlaybackRate, + kAudioClockRate, + kStreamVolume, + kPauseResume, + kEndOfStream, +}; + } // namespace OutputStreamConnection::OutputStreamConnection(Delegate* delegate, @@ -76,7 +86,12 @@ } if (filled_frames == 0) { + // Send explicit end-of-stream message. sent_eos_ = true; + Generic message; + message.mutable_eos_played_out(); + socket_->SendProto(kEndOfStream, message); + return; } socket_->SendAudioBuffer(std::move(audio_buffer), filled_frames * frame_size_, pts); @@ -87,7 +102,7 @@ if (socket_) { Generic message; message.mutable_set_stream_volume()->set_volume(multiplier); - socket_->SendProto(message); + socket_->SendProto(kStreamVolume, message); } } @@ -100,7 +115,7 @@ Generic message; message.mutable_set_start_timestamp()->set_start_timestamp(start_timestamp); message.mutable_set_start_timestamp()->set_start_pts(pts); - socket_->SendProto(message); + socket_->SendProto(kStartTimestamp, message); } } @@ -109,7 +124,7 @@ if (socket_) { Generic message; message.mutable_set_playback_rate()->set_playback_rate(playback_rate); - socket_->SendProto(message); + socket_->SendProto(kPlaybackRate, message); } } @@ -118,7 +133,7 @@ if (socket_) { Generic message; message.mutable_set_audio_clock_rate()->set_rate(rate); - socket_->SendProto(message); + socket_->SendProto(kAudioClockRate, message); } } @@ -127,7 +142,7 @@ if (socket_) { Generic message; message.mutable_set_paused()->set_paused(true); - socket_->SendProto(message); + socket_->SendProto(kPauseResume, message); } } @@ -136,7 +151,7 @@ if (socket_) { Generic message; message.mutable_set_paused()->set_paused(false); - socket_->SendProto(message); + socket_->SendProto(kPauseResume, message); } } @@ -163,7 +178,7 @@ if (paused_) { message.mutable_set_paused()->set_paused(true); } - socket_->SendProto(message); + socket_->SendProto(kInitial, message); delegate_->FillNextBuffer( audio_buffer_->data() + MixerSocket::kAudioMessageHeaderSize, fill_size_frames_, std::numeric_limits<int64_t>::min());
diff --git a/chromecast/media/audio/mixer_service/receiver/receiver_cma.cc b/chromecast/media/audio/mixer_service/receiver/receiver_cma.cc index 039b3ce3..8879e5a 100644 --- a/chromecast/media/audio/mixer_service/receiver/receiver_cma.cc +++ b/chromecast/media/audio/mixer_service/receiver/receiver_cma.cc
@@ -21,7 +21,14 @@ namespace mixer_service { namespace { + constexpr base::TimeDelta kInactivityTimeout = base::TimeDelta::FromSeconds(5); + +enum MessageTypes : int { + kPushResult = 1, + kEndOfStream, +}; + } // namespace class ReceiverCma::UnusedSocket : public MixerSocket::Delegate { @@ -136,7 +143,7 @@ message.set_next_playback_timestamp(next_playout_timestamp); mixer_service::Generic generic; *(generic.mutable_push_result()) = message; - socket_->SendProto(generic); + socket_->SendProto(kPushResult, generic); last_send_time_ = base::TimeTicks::Now(); } @@ -148,7 +155,7 @@ mixer_service::EosPlayedOut message; mixer_service::Generic generic; *generic.mutable_eos_played_out() = message; - socket_->SendProto(generic); + socket_->SendProto(kEndOfStream, generic); last_send_time_ = base::TimeTicks::Now(); cma_audio_.reset();
diff --git a/chromecast/media/audio/mixer_service/redirected_audio_connection.cc b/chromecast/media/audio/mixer_service/redirected_audio_connection.cc index c395baa..571d4a8 100644 --- a/chromecast/media/audio/mixer_service/redirected_audio_connection.cc +++ b/chromecast/media/audio/mixer_service/redirected_audio_connection.cc
@@ -30,6 +30,11 @@ } } +enum MessageTypes : int { + kRedirectionRequest = 1, + kStreamMatchPatterns, +}; + } // namespace RedirectedAudioConnection::RedirectedAudioConnection(const Config& config, @@ -46,7 +51,7 @@ if (socket_) { Generic message; FillPatterns(stream_match_patterns_, &message); - socket_->SendProto(message); + socket_->SendProto(kStreamMatchPatterns, message); } } @@ -75,7 +80,7 @@ if (!stream_match_patterns_.empty()) { FillPatterns(stream_match_patterns_, &message); } - socket_->SendProto(message); + socket_->SendProto(kRedirectionRequest, message); } void RedirectedAudioConnection::OnConnectionError() {
diff --git a/chromecast/media/cma/backend/mixer/audio_output_redirector.cc b/chromecast/media/cma/backend/mixer/audio_output_redirector.cc index 5c42e678..7bae7be 100644 --- a/chromecast/media/cma/backend/mixer/audio_output_redirector.cc +++ b/chromecast/media/cma/backend/mixer/audio_output_redirector.cc
@@ -51,6 +51,10 @@ return DecoderConfigAdapter::ToMediaChannelLayout(layout); } +enum MessageTypes : int { + kStreamConfig = 1, +}; + } // namespace class AudioOutputRedirector::RedirectionConnection @@ -82,7 +86,7 @@ config->set_sample_rate(sample_rate); config->set_num_channels(num_channels); config->set_data_size(data_size); - socket_->SendProto(message); + socket_->SendProto(kStreamConfig, message); sent_stream_config_ = true; }
diff --git a/chromecast/media/cma/backend/mixer/mixer_input_connection.cc b/chromecast/media/cma/backend/mixer/mixer_input_connection.cc index ca54705..1f672d7 100644 --- a/chromecast/media/cma/backend/mixer/mixer_input_connection.cc +++ b/chromecast/media/cma/backend/mixer/mixer_input_connection.cc
@@ -51,6 +51,14 @@ constexpr int kRateShifterOutputFrames = 4096; +enum MessageTypes : int { + kReadyForPlayback = 1, + kPushResult, + kEndOfStream, + kUnderrun, + kError, +}; + int64_t SamplesToMicroseconds(double samples, int sample_rate) { return std::round(samples * 1000000 / sample_rate); } @@ -270,6 +278,10 @@ if (message.has_set_paused()) { SetPaused(message.set_paused().paused()); } + if (message.has_eos_played_out()) { + // Explicit EOS. + HandleAudioData(nullptr, 0, INT64_MIN); + } return true; } @@ -567,7 +579,7 @@ mixer_service::Generic message; message.mutable_push_result()->set_next_playback_timestamp( next_playback_timestamp); - socket_->SendProto(message); + socket_->SendProto(kPushResult, message); } } @@ -1022,14 +1034,14 @@ base::AutoLock lock(lock_); push_result->set_next_playback_timestamp(next_playback_timestamp_); } - socket_->SendProto(message); + socket_->SendProto(kPushResult, message); } void MixerInputConnection::PostEos() { DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); mixer_service::Generic message; message.mutable_eos_played_out(); - socket_->SendProto(message); + socket_->SendProto(kEndOfStream, message); } void MixerInputConnection::PostAudioReadyForPlayback() { @@ -1047,7 +1059,7 @@ ready_for_playback->set_delay_microseconds( mixer_rendering_delay_.delay_microseconds); } - socket_->SendProto(message); + socket_->SendProto(kReadyForPlayback, message); audio_ready_for_playback_fired_ = true; } @@ -1056,7 +1068,7 @@ mixer_service::Generic message; message.mutable_mixer_underrun()->set_type( mixer_service::MixerUnderrun::INPUT_UNDERRUN); - socket_->SendProto(message); + socket_->SendProto(kUnderrun, message); } void MixerInputConnection::PostOutputUnderrun() { @@ -1064,7 +1076,7 @@ mixer_service::Generic message; message.mutable_mixer_underrun()->set_type( mixer_service::MixerUnderrun::OUTPUT_UNDERRUN); - socket_->SendProto(message); + socket_->SendProto(kUnderrun, message); } void MixerInputConnection::OnAudioPlaybackError(MixerError error) { @@ -1094,7 +1106,7 @@ DCHECK(io_task_runner_->RunsTasksInCurrentSequence()); mixer_service::Generic message; message.mutable_error()->set_type(mixer_service::Error::INVALID_STREAM_ERROR); - socket_->SendProto(message); + socket_->SendProto(kError, message); OnConnectionError(); }
diff --git a/chromecast/media/cma/backend/mixer/mixer_loopback_connection.cc b/chromecast/media/cma/backend/mixer/mixer_loopback_connection.cc index 6dde7ac1..d26b361 100644 --- a/chromecast/media/cma/backend/mixer/mixer_loopback_connection.cc +++ b/chromecast/media/cma/backend/mixer/mixer_loopback_connection.cc
@@ -15,6 +15,15 @@ namespace chromecast { namespace media { +namespace { + +enum MessageTypes : int { + kStreamConfig = 1, + kInterrupt, +}; + +} // namespace + MixerLoopbackConnection::MixerLoopbackConnection( std::unique_ptr<mixer_service::MixerSocket> socket) : socket_(std::move(socket)) { @@ -25,6 +34,11 @@ MixerLoopbackConnection::~MixerLoopbackConnection() = default; void MixerLoopbackConnection::SetErrorCallback(base::OnceClosure callback) { + if (pending_error_) { + pending_error_ = false; + std::move(callback).Run(); + return; + } error_callback_ = std::move(callback); } @@ -38,7 +52,7 @@ config->set_sample_rate(sample_rate); config->set_num_channels(num_channels); config->set_data_size(data_size); - socket_->SendProto(message); + socket_->SendProto(kStreamConfig, message); sent_stream_config_ = true; } @@ -48,7 +62,10 @@ int data_size_bytes, int64_t timestamp) { DCHECK(sent_stream_config_); - socket_->SendAudioBuffer(std::move(audio_buffer), data_size_bytes, timestamp); + if (!socket_->SendAudioBuffer(std::move(audio_buffer), data_size_bytes, + timestamp)) { + SendInterrupt(LoopbackInterruptReason::kSocketOverflow); + } } void MixerLoopbackConnection::SendInterrupt(LoopbackInterruptReason reason) { @@ -58,7 +75,7 @@ interrupt->set_reason( static_cast<mixer_service::StreamInterruption::InterruptionReason>( reason)); - socket_->SendProto(message); + socket_->SendProto(kInterrupt, message); } bool MixerLoopbackConnection::HandleMetadata( @@ -75,7 +92,9 @@ void MixerLoopbackConnection::OnConnectionError() { if (error_callback_) { std::move(error_callback_).Run(); + return; } + pending_error_ = true; } } // namespace media
diff --git a/chromecast/media/cma/backend/mixer/mixer_loopback_connection.h b/chromecast/media/cma/backend/mixer/mixer_loopback_connection.h index 7e7df184..6a862c3 100644 --- a/chromecast/media/cma/backend/mixer/mixer_loopback_connection.h +++ b/chromecast/media/cma/backend/mixer/mixer_loopback_connection.h
@@ -55,6 +55,7 @@ base::OnceClosure error_callback_; + bool pending_error_ = false; bool sent_stream_config_ = false; DISALLOW_COPY_AND_ASSIGN(MixerLoopbackConnection);
diff --git a/chromecast/media/cma/backend/mixer/mixer_service_receiver.cc b/chromecast/media/cma/backend/mixer/mixer_service_receiver.cc index a2a54bb..a7971f9 100644 --- a/chromecast/media/cma/backend/mixer/mixer_service_receiver.cc +++ b/chromecast/media/cma/backend/mixer/mixer_service_receiver.cc
@@ -21,6 +21,15 @@ namespace chromecast { namespace media { +namespace { + +enum MessageTypes : int { + kStreamCounts = 1, + kPostProcessorList, +}; + +} // namespace + class MixerServiceReceiver::ControlConnection : public mixer_service::MixerSocket::Delegate { public: @@ -45,7 +54,7 @@ auto* counts = message.mutable_stream_count(); counts->set_primary(receiver_->primary_stream_count_); counts->set_sfx(receiver_->sfx_stream_count_); - socket_->SendProto(message); + socket_->SendProto(kStreamCounts, message); } private: @@ -109,7 +118,7 @@ for (const auto& library_pair : PostProcessorRegistry::Get()->Libraries()) { postprocessor_list->add_postprocessors(library_pair.first); } - socket_->SendProto(message); + socket_->SendProto(kPostProcessorList, message); } void OnConnectionError() override {
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index a379682..f2c1f57 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -582,6 +582,9 @@ <message name="IDS_SCANNING_APP_GET_HELP_LINK_TEXT" desc="The text used for the link that navigates to the Scan app help webpage. This is shown to the user after a scanning error."> Get help </message> + <message name="IDS_SCANNING_APP_CANCEL_FAILED_TOAST_TEXT" desc="The error message displayed when a user attempts to cancel a scan job but the cancel request fails."> + Couldn't cancel scanning + </message> <!-- Diagnostics App --> <!-- TODO(michaelcheco): Update with finalized copies of the strings -->
diff --git a/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_CANCEL_FAILED_TOAST_TEXT.png.sha1 b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_CANCEL_FAILED_TOAST_TEXT.png.sha1 new file mode 100644 index 0000000..56f683af --- /dev/null +++ b/chromeos/chromeos_strings_grd/IDS_SCANNING_APP_CANCEL_FAILED_TOAST_TEXT.png.sha1
@@ -0,0 +1 @@ +78e37b5f7d89b511799f4f8c706d997a4f1953d6 \ No newline at end of file
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_EXPERT_SCAN_BARCODE.png.sha1 b/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_EXPERT_SCAN_BARCODE.png.sha1 index 052d3a0..605c9f66 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_EXPERT_SCAN_BARCODE.png.sha1 +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_grd/IDS_EXPERT_SCAN_BARCODE.png.sha1
@@ -1 +1 @@ -fd4166d2a4aa6d5118d7127d3ee638863cf0e938 \ No newline at end of file +655537c26570afc16403950a0b55063be57b1ceb \ No newline at end of file
diff --git a/chromeos/components/phonehub/BUILD.gn b/chromeos/components/phonehub/BUILD.gn index afef6c95..a8256daa2 100644 --- a/chromeos/components/phonehub/BUILD.gn +++ b/chromeos/components/phonehub/BUILD.gn
@@ -80,6 +80,8 @@ "tether_controller.h", "tether_controller_impl.cc", "tether_controller_impl.h", + "util/histogram_util.cc", + "util/histogram_util.h", ] deps = [
diff --git a/chromeos/components/phonehub/connection_manager_impl.cc b/chromeos/components/phonehub/connection_manager_impl.cc index f157fba..92592d5 100644 --- a/chromeos/components/phonehub/connection_manager_impl.cc +++ b/chromeos/components/phonehub/connection_manager_impl.cc
@@ -20,7 +20,7 @@ base::TimeDelta::FromSeconds(15u)); void RecordConnectionSuccessMetric(bool success) { - UMA_HISTOGRAM_BOOLEAN("PhoneHub.Connectivity.Success", success); + UMA_HISTOGRAM_BOOLEAN("PhoneHub.Connection.Result", success); } } // namespace
diff --git a/chromeos/components/phonehub/connection_manager_impl_unittest.cc b/chromeos/components/phonehub/connection_manager_impl_unittest.cc index 8752acf..8f587c35 100644 --- a/chromeos/components/phonehub/connection_manager_impl_unittest.cc +++ b/chromeos/components/phonehub/connection_manager_impl_unittest.cc
@@ -139,6 +139,13 @@ mock_timer_->Fire(); } + void VerifyConnectionResultHistogram( + base::HistogramBase::Sample sample, + base::HistogramBase::Count expected_count) { + histogram_tester_.ExpectBucketCount("PhoneHub.Connection.Result", sample, + expected_count); + } + base::MockOneShotTimer* mock_timer_; chromeos::multidevice::RemoteDeviceRef test_remote_device_; chromeos::multidevice::RemoteDeviceRef test_local_device_; @@ -175,7 +182,7 @@ histogram_tester_.ExpectTimeBucketCount("PhoneHub.Connectivity.Latency", kFakeConnectionLatencyTime, 1); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", true, 1); + VerifyConnectionResultHistogram(true, 1); } TEST_F(ConnectionManagerImplTest, FailedToAttemptConnection) { @@ -196,8 +203,7 @@ EXPECT_EQ(2u, GetNumStatusObserverCalls()); EXPECT_EQ(ConnectionManager::Status::kDisconnected, GetStatus()); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", false, - 1); + VerifyConnectionResultHistogram(false, 1); } TEST_F(ConnectionManagerImplTest, SuccessfulAttemptConnectionButDisconnected) { @@ -224,7 +230,7 @@ histogram_tester_.ExpectTimeBucketCount("PhoneHub.Connectivity.Latency", kFakeConnectionLatencyTime, 1); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", true, 1); + VerifyConnectionResultHistogram(true, 1); // Simulate a disconnected channel. test_clock_->Advance(kFakeConnectionDurationTime); @@ -257,7 +263,7 @@ histogram_tester_.ExpectTimeBucketCount("PhoneHub.Connectivity.Latency", kFakeConnectionLatencyTime, 1); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", true, 1); + VerifyConnectionResultHistogram(true, 1); // Status has been updated to connected, verify that the status observer has // been called. @@ -318,7 +324,7 @@ histogram_tester_.ExpectTimeBucketCount("PhoneHub.Connectivity.Latency", kFakeConnectionLatencyTime, 1); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", true, 1); + VerifyConnectionResultHistogram(true, 1); // Status has been updated to connected, verify that the status observer has // been called. @@ -342,8 +348,7 @@ VerifyTimerStopped(); EXPECT_EQ(2u, GetNumStatusObserverCalls()); EXPECT_EQ(ConnectionManager::Status::kDisconnected, GetStatus()); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", false, - 1); + VerifyConnectionResultHistogram(false, 1); } TEST_F(ConnectionManagerImplTest, DisconnectConnection) { @@ -361,8 +366,7 @@ EXPECT_EQ(2u, GetNumStatusObserverCalls()); EXPECT_EQ(ConnectionManager::Status::kDisconnected, GetStatus()); VerifyTimerStopped(); - histogram_tester_.ExpectBucketCount("PhoneHub.Connectivity.Success", false, - 1); + VerifyConnectionResultHistogram(false, 1); } } // namespace phonehub
diff --git a/chromeos/components/phonehub/multidevice_setup_state_updater.cc b/chromeos/components/phonehub/multidevice_setup_state_updater.cc index 56574ad..00d958f 100644 --- a/chromeos/components/phonehub/multidevice_setup_state_updater.cc +++ b/chromeos/components/phonehub/multidevice_setup_state_updater.cc
@@ -6,6 +6,7 @@ #include "chromeos/components/multidevice/logging/logging.h" #include "chromeos/components/phonehub/pref_names.h" +#include "chromeos/components/phonehub/util/histogram_util.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" @@ -68,6 +69,7 @@ multidevice_setup_client_->SetFeatureEnabledState( Feature::kPhoneHub, /*enabled=*/true, /*auth_token=*/base::nullopt, base::DoNothing()); + util::LogFeatureOptInEntryPoint(util::OptInEntryPoint::kSetupFlow); } UpdateIsAwaitingVerifiedHost(host_status);
diff --git a/chromeos/components/phonehub/onboarding_ui_tracker_impl.cc b/chromeos/components/phonehub/onboarding_ui_tracker_impl.cc index 34506372..f46e9f2 100644 --- a/chromeos/components/phonehub/onboarding_ui_tracker_impl.cc +++ b/chromeos/components/phonehub/onboarding_ui_tracker_impl.cc
@@ -3,8 +3,10 @@ // found in the LICENSE file. #include "chromeos/components/phonehub/onboarding_ui_tracker_impl.h" + #include "chromeos/components/phonehub/feature_status.h" #include "chromeos/components/phonehub/pref_names.h" +#include "chromeos/components/phonehub/util/histogram_util.h" #include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" @@ -60,6 +62,7 @@ multidevice_setup_client_->SetFeatureEnabledState( multidevice_setup::mojom::Feature::kPhoneHub, /*enabled=*/true, /*auth_token=*/base::nullopt, base::DoNothing()); + util::LogFeatureOptInEntryPoint(util::OptInEntryPoint::kOnboardingFlow); return; } LOG(ERROR)
diff --git a/chromeos/components/phonehub/util/histogram_util.cc b/chromeos/components/phonehub/util/histogram_util.cc new file mode 100644 index 0000000..f2989ee6 --- /dev/null +++ b/chromeos/components/phonehub/util/histogram_util.cc
@@ -0,0 +1,19 @@ +// Copyright 2020 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 "chromeos/components/phonehub/util/histogram_util.h" + +#include "base/metrics/histogram_macros.h" + +namespace chromeos { +namespace phonehub { +namespace util { + +void LogFeatureOptInEntryPoint(OptInEntryPoint entry_point) { + UMA_HISTOGRAM_ENUMERATION("PhoneHub.OptInEntryPoint", entry_point); +} + +} // namespace util +} // namespace phonehub +} // namespace chromeos
diff --git a/chromeos/components/phonehub/util/histogram_util.h b/chromeos/components/phonehub/util/histogram_util.h new file mode 100644 index 0000000..7447b6a --- /dev/null +++ b/chromeos/components/phonehub/util/histogram_util.h
@@ -0,0 +1,30 @@ +// Copyright 2020 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 CHROMEOS_COMPONENTS_PHONEHUB_UTIL_HISTOGRAM_UTIL_H_ +#define CHROMEOS_COMPONENTS_PHONEHUB_UTIL_HISTOGRAM_UTIL_H_ + +namespace chromeos { +namespace phonehub { +namespace util { + +// Enumeration of possible opt-in entry points for Phone Hub feature. Keep in +// sync with corresponding enum in tools/metrics/histograms/enums.xml. These +// values are persisted to logs. Entries should not be renumbered and numeric +// values should never be reused. +enum class OptInEntryPoint { + kSetupFlow = 0, + kOnboardingFlow = 1, + kSettings = 2, + kMaxValue = kSettings, +}; + +// Logs a given opt-in |entry_point| for the PhoneHub feature. +void LogFeatureOptInEntryPoint(OptInEntryPoint entry_point); + +} // namespace util +} // namespace phonehub +} // namespace chromeos + +#endif // CHROMEOS_COMPONENTS_PHONEHUB_UTIL_HISTOGRAM_UTIL_H_
diff --git a/chromeos/components/scanning/resources/scanning_app.js b/chromeos/components/scanning/resources/scanning_app.js index 669c9f986..aea6c8d8 100644 --- a/chromeos/components/scanning/resources/scanning_app.js +++ b/chromeos/components/scanning/resources/scanning_app.js
@@ -257,6 +257,20 @@ }, /** + * Overrides chromeos.scanning.mojom.ScanJobObserverInterface. + * @param {boolean} success + */ + onCancelComplete(success) { + // If the cancel request fails, continue showing the scan progress page. + if (!success) { + this.showToast_('cancelFailedToastText'); + return; + } + + this.setAppState_(AppState.READY); + }, + + /** * @param {string} selectedSource * @return {!Array<chromeos.scanning.mojom.PageSize>} * @private @@ -414,18 +428,10 @@ /** @private */ onCancelClick_() { assert(this.appState_ === AppState.SCANNING); - this.scanService_.cancelScan(); - this.setAppState_(AppState.READY); }, /** - * Overrides chromeos.scanning.mojom.ScanJobObserverInterface. - * @param {boolean} success - */ - onCancelComplete(success) {}, - - /** * Revokes and removes all of the object URLs. * @private */
diff --git a/chromeos/components/scanning/scanning_ui.cc b/chromeos/components/scanning/scanning_ui.cc index 9e4a89be..7fdc8b8 100644 --- a/chromeos/components/scanning/scanning_ui.cc +++ b/chromeos/components/scanning/scanning_ui.cc
@@ -56,6 +56,7 @@ {"appTitle", IDS_SCANNING_APP_TITLE}, {"blackAndWhiteOptionText", IDS_SCANNING_APP_BLACK_AND_WHITE_OPTION_TEXT}, {"cancelButtonText", IDS_SCANNING_APP_CANCEL_BUTTON_TEXT}, + {"cancelFailedToastText", IDS_SCANNING_APP_CANCEL_FAILED_TOAST_TEXT}, {"colorModeDropdownLabel", IDS_SCANNING_APP_COLOR_MODE_DROPDOWN_LABEL}, {"colorOptionText", IDS_SCANNING_APP_COLOR_OPTION_TEXT}, {"defaultSourceOptionText", IDS_SCANNING_APP_DEFAULT_SOURCE_OPTION_TEXT},
diff --git a/chromeos/tpm/install_attributes.h b/chromeos/tpm/install_attributes.h index da9bc9a..c805f7fa 100644 --- a/chromeos/tpm/install_attributes.h +++ b/chromeos/tpm/install_attributes.h
@@ -212,7 +212,7 @@ // errors (cryptohomed startup is slow). void TriggerConsistencyCheck(int dbus_retries); - // Callback for `GetTpmNonsensitiveStatus()` DBUS call. Generates UMA or + // Callback for `GetTpmNonsensitiveStatus()` D-Bus call. Generates UMA or // schedules retry in case of DBUS error. void OnTpmStatusComplete( int dbus_retries_remaining,
diff --git a/components/apdu/apdu_response.h b/components/apdu/apdu_response.h index a240354..cadbb17 100644 --- a/components/apdu/apdu_response.h +++ b/components/apdu/apdu_response.h
@@ -26,6 +26,7 @@ enum class Status : uint16_t { SW_NO_ERROR = 0x9000, SW_CONDITIONS_NOT_SATISFIED = 0x6985, + SW_COMMAND_NOT_ALLOWED = 0x6986, SW_WRONG_DATA = 0x6A80, SW_WRONG_LENGTH = 0x6700, SW_INS_NOT_SUPPORTED = 0x6D00,
diff --git a/components/arc/mojom/auth.mojom b/components/arc/mojom/auth.mojom index eabdf80..9a3af92 100644 --- a/components/arc/mojom/auth.mojom +++ b/components/arc/mojom/auth.mojom
@@ -36,9 +36,9 @@ // due to Host/Instance version mismatch. MOJO_VERSION_MISMATCH = 1, - // PROVISIONING_TIMEOUT: is sent when provisioning is started + // GENERIC_PROVISIONING_TIMEOUT: is sent when provisioning is started // but not completed with time out. - PROVISIONING_TIMEOUT = 2, + GENERIC_PROVISIONING_TIMEOUT = 2, // Network connection is unavailable. NO_NETWORK_CONNECTION = 3, @@ -57,39 +57,39 @@ }; [Extensible] -enum DeviceCheckInError { +enum GMSCheckInError { // Next value: 4. - // DEVICE_CHECK_IN_FAILED: is sent when "check-in" procedure is completed + // GMS_CHECK_IN_FAILED: is sent when "check-in" procedure is completed // but is actually failed. - DEVICE_CHECK_IN_FAILED = 1, + GMS_CHECK_IN_FAILED = 1, - // DEVICE_CHECK_IN_TIMEOUT: is sent when "check-in" procedure started + // GMS_CHECK_IN_TIMEOUT: is sent when "check-in" procedure started // but is not completed. - DEVICE_CHECK_IN_TIMEOUT = 2, + GMS_CHECK_IN_TIMEOUT = 2, - // DEVICE_CHECK_IN_INTERNAL_ERROR: is sent when "check-in" procedure is + // GMS_CHECK_IN_INTERNAL_ERROR: is sent when "check-in" procedure is // started, but some unexpected error situation happens so that it could // not completed. - DEVICE_CHECK_IN_INTERNAL_ERROR = 3, + GMS_CHECK_IN_INTERNAL_ERROR = 3, }; [Extensible] -enum GMSError { +enum GMSSignInError { // Next value: 7. - // GMS_NETWORK_ERROR: is sent when GMS sign-in procedure is started, but - // it reports NETWORK_ERROR. - GMS_NETWORK_ERROR = 1, + // GMS_SIGN_IN_NETWORK_ERROR: is sent when GMS sign-in procedure is + // started, but it reports NETWORK_ERROR. + GMS_SIGN_IN_NETWORK_ERROR = 1, - // GMS_SERVICE_UNAVAILABLE: is sent when GMS sign-in procedure is started - // but it reports SERVICE_UNAVAILABLE. Note that this is not generic - // service unavailable error code. - GMS_SERVICE_UNAVAILABLE = 2, + // GMS_SIGN_IN_SERVICE_UNAVAILABLE: is sent when GMS sign-in + // procedure is started but it reports SERVICE_UNAVAILABLE. Note + // that this is not generic service unavailable error code. + GMS_SIGN_IN_SERVICE_UNAVAILABLE = 2, - // GMS_BAD_AUTHENTICATION: is sent when GMS sign-in procedure is started - // but it reports BAD_AUTHENTICATION. - GMS_BAD_AUTHENTICATION = 3, + // GMS_SIGN_IN_BAD_AUTHENTICATION: is sent when GMS sign-in procedure + // is started but it reports BAD_AUTHENTICATION. + GMS_SIGN_IN_BAD_AUTHENTICATION = 3, // GMS_SIGN_IN_FAILED: is sent when GMS sign in procedure is started but // it reports an error other than above NETWORK_ERROR, SERVICE_UNAVAILABLE @@ -178,8 +178,8 @@ union ArcSignInError { CloudProvisionFlowError cloud_provision_flow_error; [MinVersion=26] GeneralSignInError general_error; - [MinVersion=26] GMSError gms_error; - [MinVersion=26] DeviceCheckInError checkin_error; + [MinVersion=26] GMSSignInError sign_in_error; + [MinVersion=26] GMSCheckInError check_in_error; }; union ArcSignInResult {
diff --git a/components/encrypted_messages/DIR_METADATA b/components/encrypted_messages/DIR_METADATA new file mode 100644 index 0000000..90ac65c --- /dev/null +++ b/components/encrypted_messages/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>CertAnalysis" +}
diff --git a/components/encrypted_messages/OWNERS b/components/encrypted_messages/OWNERS index d59d01a..589776d 100644 --- a/components/encrypted_messages/OWNERS +++ b/components/encrypted_messages/OWNERS
@@ -1,5 +1,3 @@ estark@chromium.org felt@chromium.org rsleevi@chromium.org - -# COMPONENT: Internals>CertAnalysis
diff --git a/components/enterprise/DIR_METADATA b/components/enterprise/DIR_METADATA new file mode 100644 index 0000000..3ecb477 --- /dev/null +++ b/components/enterprise/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Enterprise" +}
diff --git a/components/enterprise/OWNERS b/components/enterprise/OWNERS index c6d1e61..297ae77a 100644 --- a/components/enterprise/OWNERS +++ b/components/enterprise/OWNERS
@@ -7,5 +7,3 @@ ydago@chromium.org zmin@chromium.org -# COMPONENT: Enterprise -
diff --git a/components/error_page/DIR_METADATA b/components/error_page/DIR_METADATA new file mode 100644 index 0000000..709d8280 --- /dev/null +++ b/components/error_page/DIR_METADATA
@@ -0,0 +1,5 @@ +monorail { + component: "Internals>Network" +} + +team_email: "net-dev@chromium.org"
diff --git a/components/error_page/OWNERS b/components/error_page/OWNERS index b5ae9b2..21aa4da 100644 --- a/components/error_page/OWNERS +++ b/components/error_page/OWNERS
@@ -3,6 +3,3 @@ per-file error_page_strings.grdp=edwardjung@chromium.org file://net/OWNERS - -# COMPONENT: Internals>Network -# TEAM: net-dev@chromium.org
diff --git a/components/error_page_strings_grdp/DIR_METADATA b/components/error_page_strings_grdp/DIR_METADATA new file mode 100644 index 0000000..2d14a86 --- /dev/null +++ b/components/error_page_strings_grdp/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Network" +}
diff --git a/components/error_page_strings_grdp/OWNERS b/components/error_page_strings_grdp/OWNERS index 6d90006..a24fa86 100644 --- a/components/error_page_strings_grdp/OWNERS +++ b/components/error_page_strings_grdp/OWNERS
@@ -1,4 +1,3 @@ edwardjung@chromium.org file://components/error_page/OWNERS -# COMPONENT: Internals>Network
diff --git a/components/exo/DIR_METADATA b/components/exo/DIR_METADATA new file mode 100644 index 0000000..1cfc76b --- /dev/null +++ b/components/exo/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>Exosphere" +}
diff --git a/components/exo/OWNERS b/components/exo/OWNERS index 8dde166..cba68c6 100644 --- a/components/exo/OWNERS +++ b/components/exo/OWNERS
@@ -3,5 +3,3 @@ # For Input (keyboard, mouse, touch) mukai@chromium.org - -# COMPONENT: Internals>Exosphere
diff --git a/components/favicon/DIR_METADATA b/components/favicon/DIR_METADATA new file mode 100644 index 0000000..9b08ae7f --- /dev/null +++ b/components/favicon/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>History" +}
diff --git a/components/favicon/OWNERS b/components/favicon/OWNERS index 68d5c7cc..6581507 100644 --- a/components/favicon/OWNERS +++ b/components/favicon/OWNERS
@@ -1,4 +1,3 @@ mastiz@chromium.org pkotwicz@chromium.org sky@chromium.org -# COMPONENT: UI>Browser>History
diff --git a/components/favicon_base/DIR_METADATA b/components/favicon_base/DIR_METADATA new file mode 100644 index 0000000..9b08ae7f --- /dev/null +++ b/components/favicon_base/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>History" +}
diff --git a/components/favicon_base/OWNERS b/components/favicon_base/OWNERS index c55fe03..e1be2fe 100644 --- a/components/favicon_base/OWNERS +++ b/components/favicon_base/OWNERS
@@ -1,3 +1 @@ file://components/favicon/OWNERS - -# COMPONENT: UI>Browser>History
diff --git a/components/feature_engagement/DIR_METADATA b/components/feature_engagement/DIR_METADATA new file mode 100644 index 0000000..454508f --- /dev/null +++ b/components/feature_engagement/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Internals>FeatureEngagement" +}
diff --git a/components/feature_engagement/OWNERS b/components/feature_engagement/OWNERS index e80cdac..a664df7ac 100644 --- a/components/feature_engagement/OWNERS +++ b/components/feature_engagement/OWNERS
@@ -8,5 +8,3 @@ per-file *EventConstants.java=twellington@chromium.org per-file *FeatureConstants.java=twellington@chromium.org -# COMPONENT: Internals>FeatureEngagement -
diff --git a/components/federated_learning/DIR_METADATA b/components/federated_learning/DIR_METADATA new file mode 100644 index 0000000..0e6c0305 --- /dev/null +++ b/components/federated_learning/DIR_METADATA
@@ -0,0 +1 @@ +team_email: "privacy-sandbox-dev@chromium.org"
diff --git a/components/federated_learning/OWNERS b/components/federated_learning/OWNERS index 073e83c..424ff9bd 100644 --- a/components/federated_learning/OWNERS +++ b/components/federated_learning/OWNERS
@@ -1,5 +1,4 @@ jkarlin@chromium.org yaoxia@chromium.org -# TEAM: privacy-sandbox-dev@chromium.org # TODO(yaoxia): Add a crbug component for FloC.
diff --git a/components/feed/DIR_METADATA b/components/feed/DIR_METADATA new file mode 100644 index 0000000..caf2b284 --- /dev/null +++ b/components/feed/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>ContentSuggestions>Feed" +}
diff --git a/components/feed/OWNERS b/components/feed/OWNERS index 85ef789..c22fdb6 100644 --- a/components/feed/OWNERS +++ b/components/feed/OWNERS
@@ -12,4 +12,3 @@ skym@chromium.org # Team: feed@chromium.org -# COMPONENT: UI>Browser>ContentSuggestions>Feed
diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc index f9cf11ab..3554fe7f 100644 --- a/components/feed/feed_feature_list.cc +++ b/components/feed/feed_feature_list.cc
@@ -53,6 +53,8 @@ const base::Feature kInterestFeedSpinnerAlwaysAnimate{ "InterestFeedSpinnerAlwaysAnimate", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kWebFeed{"WebFeed", base::FEATURE_DISABLED_BY_DEFAULT}; + const char kDefaultReferrerUrl[] = "https://www.googleapis.com/auth/chrome-content-suggestions";
diff --git a/components/feed/feed_feature_list.h b/components/feed/feed_feature_list.h index 432ba98..4cca493 100644 --- a/components/feed/feed_feature_list.h +++ b/components/feed/feed_feature_list.h
@@ -35,6 +35,9 @@ extern const base::Feature kInterestFeedSpinnerAlwaysAnimate; +// Feature that allows users to keep up with and consume web content. +extern const base::Feature kWebFeed; + std::string GetFeedReferrerUrl(); } // namespace feed
diff --git a/components/feedback/DIR_METADATA b/components/feedback/DIR_METADATA new file mode 100644 index 0000000..1b00e25cb7 --- /dev/null +++ b/components/feedback/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "Platform>Apps>Feedback" +}
diff --git a/components/feedback/OWNERS b/components/feedback/OWNERS index 9172da3..699355a 100644 --- a/components/feedback/OWNERS +++ b/components/feedback/OWNERS
@@ -4,5 +4,3 @@ per-file redaction_tool*=iby@chromium.org per-file redaction_tool*=mutexlox@chromium.org - -# COMPONENT: Platform>Apps>Feedback
diff --git a/components/filename_generation/DIR_METADATA b/components/filename_generation/DIR_METADATA new file mode 100644 index 0000000..6bf7cbf --- /dev/null +++ b/components/filename_generation/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>Downloads" +}
diff --git a/components/filename_generation/OWNERS b/components/filename_generation/OWNERS index cdd1fbd..a0272728 100644 --- a/components/filename_generation/OWNERS +++ b/components/filename_generation/OWNERS
@@ -2,5 +2,3 @@ petewil@chromium.org qinmin@chromium.org romax@chromium.org - -# COMPONENT: UI>Browser>Downloads
diff --git a/components/flags_strings.grdp b/components/flags_strings.grdp index 97de3ad..ac83ec6a 100644 --- a/components/flags_strings.grdp +++ b/components/flags_strings.grdp
@@ -6,6 +6,9 @@ <message name="IDS_FLAGS_UI_SEARCH_PLACEHOLDER" translateable="false" desc="The placeholder for the search box on the about:flags page."> Search flags </message> + <message name="IDS_FLAGS_UI_SEARCH_LABEL" translateable="false" desc="The accessible label for the search box on the about:flags page."> + Search flags + </message> <message name="IDS_FLAGS_UI_TITLE" translateable="false" desc="The page title for the about:flags page."> Experiments </message>
diff --git a/components/flags_ui/DIR_METADATA b/components/flags_ui/DIR_METADATA new file mode 100644 index 0000000..8325efa --- /dev/null +++ b/components/flags_ui/DIR_METADATA
@@ -0,0 +1,3 @@ +monorail { + component: "UI>Browser>WebUI" +}
diff --git a/components/flags_ui/OWNERS b/components/flags_ui/OWNERS index f93ac61e..8894df51 100644 --- a/components/flags_ui/OWNERS +++ b/components/flags_ui/OWNERS
@@ -2,5 +2,3 @@ asvitkine@chromium.org ellyjones@chromium.org - -# COMPONENT: UI>Browser>WebUI
diff --git a/components/flags_ui/resources/flags.html b/components/flags_ui/resources/flags.html index 830cbe2..c45a0b3 100644 --- a/components/flags_ui/resources/flags.html +++ b/components/flags_ui/resources/flags.html
@@ -30,8 +30,10 @@ <div class="flex-container"> <div class="flex"> <div class="search-container"> - <input type="text" id="search" placeholder="$i18n{search-placeholder}" tabindex="1" - autocomplete="off" spellcheck="false"> + <input type="text" id="search" + aria-label="$i18n{search-label}" + placeholder="$i18n{search-placeholder}" tabindex="1" + autocomplete="off" spellcheck="false"> <input type="button" class="clear-search" title="$i18n{clear-search}" tabindex="2"> </div>
diff --git a/components/lookalikes/core/features.cc b/components/lookalikes/core/features.cc index 410daa2..dc362a9 100644 --- a/components/lookalikes/core/features.cc +++ b/components/lookalikes/core/features.cc
@@ -8,7 +8,7 @@ namespace features { const base::Feature kDetectTargetEmbeddingLookalikes{ - "TargetEmbeddingLookalikes", base::FEATURE_ENABLED_BY_DEFAULT}; + "TargetEmbeddingLookalikes", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kLookalikeInterstitialForPunycode{ "LookalikeInterstitialForPunycode", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/components/media_message_center/media_notification_view_impl.cc b/components/media_message_center/media_notification_view_impl.cc index f541170..2097002 100644 --- a/components/media_message_center/media_notification_view_impl.cc +++ b/components/media_message_center/media_notification_view_impl.cc
@@ -432,6 +432,7 @@ container_->OnMediaSessionMetadataChanged(metadata); + MaybeShowOrHideArtistLabel(); PreferredSizeChanged(); Layout(); SchedulePaint(); @@ -463,6 +464,7 @@ container_->OnMediaArtworkChanged(image); + MaybeShowOrHideArtistLabel(); PreferredSizeChanged(); Layout(); SchedulePaint(); @@ -794,6 +796,13 @@ item_->OnMediaSessionActionButtonPressed(GetActionFromButtonTag(*button)); } +void MediaNotificationViewImpl::MaybeShowOrHideArtistLabel() { + if (!is_cros_) + return; + + artist_label_->SetVisible(!artist_label_->GetText().empty() || has_artwork_); +} + std::vector<views::View*> MediaNotificationViewImpl::GetButtons() { auto buttons = button_row_->children(); buttons.insert(buttons.cbegin(),
diff --git a/components/media_message_center/media_notification_view_impl.h b/components/media_message_center/media_notification_view_impl.h index a6ee20c..0aec17e 100644 --- a/components/media_message_center/media_notification_view_impl.h +++ b/components/media_message_center/media_notification_view_impl.h
@@ -134,6 +134,8 @@ void ButtonPressed(views::Button* button); + void MaybeShowOrHideArtistLabel(); + // Returns the buttons contained in the button row and playback button // container. std::vector<views::View*> GetButtons();
diff --git a/components/messages/android/java/res/layout/message_banner_view.xml b/components/messages/android/java/res/layout/message_banner_view.xml index 2d25077..33a788ea 100644 --- a/components/messages/android/java/res/layout/message_banner_view.xml +++ b/components/messages/android/java/res/layout/message_banner_view.xml
@@ -3,16 +3,12 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<!-- - TODO(crbug.com/1111911): remove "UnusedResources" when this view is - used outside of tests. --> <org.chromium.components.messages.MessageBannerView - xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - tools:ignore="UnusedResources" - android:layout_height="@dimen/message_banner_height" + android:layout_height="wrap_content" android:layout_width="match_parent" + android:minHeight="@dimen/message_banner_height" android:layout_gravity="center_horizontal" android:orientation="horizontal" android:layout_marginTop="@dimen/message_shadow_top_margin" @@ -20,6 +16,8 @@ android:layout_marginStart="@dimen/message_shadow_lateral_margin" android:layout_marginEnd="@dimen/message_shadow_lateral_margin" android:elevation="@dimen/message_banner_elevation" + android:paddingTop="@dimen/message_banner_vertical_padding" + android:paddingBottom="@dimen/message_banner_vertical_padding" app:maxWidthPortrait="@dimen/message_max_width" app:maxWidthLandscape="@dimen/message_max_width" android:background="@drawable/message_bg_tinted"> @@ -35,12 +33,12 @@ android:importantForAccessibility="no" /> <LinearLayout - android:layout_width="wrap_content" - android:layout_weight="1" + android:layout_width="0dp" + android:layout_weight="3" android:gravity="center_vertical" android:layout_gravity="center_vertical" android:orientation="vertical" - android:layout_height="match_parent"> + android:layout_height="wrap_content"> <TextView android:id="@+id/message_title" @@ -80,8 +78,8 @@ <org.chromium.ui.widget.ButtonCompat style="@style/TextButton" android:id="@+id/message_primary_button" - android:layout_weight="0" - android:layout_width="wrap_content" + android:layout_weight="1" + android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:visibility="gone" />
diff --git a/components/messages/android/java/res/values/dimens.xml b/components/messages/android/java/res/values/dimens.xml index 9a37fb7d..da97507 100644 --- a/components/messages/android/java/res/values/dimens.xml +++ b/components/messages/android/java/res/values/dimens.xml
@@ -3,11 +3,11 @@ Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. --> -<resources xmlns:tools="http://schemas.android.com/tools"> +<resources> - <!-- 88dp = 64dp (required height of message banner) + 24dp (shadow padding) --> <dimen name="message_banner_height">64dp</dimen> <dimen name="message_banner_radius">12dp</dimen> + <dimen name="message_banner_vertical_padding">12dp</dimen> <dimen name="message_banner_elevation">6dp</dimen> <!-- Min width to ensure the min touchable size. --> <dimen name="message_banner_button_min_width">12dp</dimen>
diff --git a/components/omnibox/browser/android/java/src/org/chromium/components/omnibox/SecurityStatusIcon.java b/components/omnibox/browser/android/java/src/org/chromium/components/omnibox/SecurityStatusIcon.java index 0b1a1f0..be0e24c 100644 --- a/components/omnibox/browser/android/java/src/org/chromium/components/omnibox/SecurityStatusIcon.java +++ b/components/omnibox/browser/android/java/src/org/chromium/components/omnibox/SecurityStatusIcon.java
@@ -16,17 +16,12 @@ */ @DrawableRes public static int getSecurityIconResource(@ConnectionSecurityLevel int securityLevel, - boolean shouldShowDangerTriangleForWarningLevel, boolean isSmallDevice, - boolean skipIconForNeutralState) { + boolean isSmallDevice, boolean skipIconForNeutralState) { switch (securityLevel) { case ConnectionSecurityLevel.NONE: if (isSmallDevice && skipIconForNeutralState) return 0; return R.drawable.omnibox_info; case ConnectionSecurityLevel.WARNING: - if (shouldShowDangerTriangleForWarningLevel) { - return R.drawable.omnibox_not_secure_warning; - } - return R.drawable.omnibox_info; case ConnectionSecurityLevel.DANGEROUS: return R.drawable.omnibox_not_secure_warning; case ConnectionSecurityLevel.SECURE_WITH_POLICY_INSTALLED_CERT:
diff --git a/components/omnibox/browser/location_bar_model_util.cc b/components/omnibox/browser/location_bar_model_util.cc index a67d14c6..2f2efaa 100644 --- a/components/omnibox/browser/location_bar_model_util.cc +++ b/components/omnibox/browser/location_bar_model_util.cc
@@ -21,18 +21,11 @@ switch (security_level) { case security_state::NONE: return omnibox::kHttpIcon; - case security_state::WARNING: - // When kMarkHttpAsParameterDangerWarning is enabled, show a danger - // triangle icon. - if (security_state::ShouldShowDangerTriangleForWarningLevel()) { - return omnibox::kNotSecureWarningIcon; - } - NOTREACHED(); - return omnibox::kHttpIcon; case security_state::SECURE: return omnibox::kHttpsValidIcon; case security_state::SECURE_WITH_POLICY_INSTALLED_CERT: return vector_icons::kBusinessIcon; + case security_state::WARNING: case security_state::DANGEROUS: return omnibox::kNotSecureWarningIcon; case security_state::SECURITY_LEVEL_COUNT:
diff --git a/components/omnibox/browser/location_bar_model_util_unittest.cc b/components/omnibox/browser/location_bar_model_util_unittest.cc index b484cd8..5364bf2 100644 --- a/components/omnibox/browser/location_bar_model_util_unittest.cc +++ b/components/omnibox/browser/location_bar_model_util_unittest.cc
@@ -37,9 +37,5 @@ TEST(LocationBarModelUtilTest, GetSecurityVectorIconWithWarningLevel) { const gfx::VectorIcon& icon = location_bar_model::GetSecurityVectorIcon( security_state::SecurityLevel::WARNING); - if (security_state::ShouldShowDangerTriangleForWarningLevel()) { - EXPECT_EQ(icon.name, omnibox::kNotSecureWarningIcon.name); - } else { - EXPECT_EQ(icon.name, omnibox::kHttpIcon.name); - } + EXPECT_EQ(icon.name, omnibox::kNotSecureWarningIcon.name); }
diff --git a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoConnectionController.java b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoConnectionController.java index 7aa99ea..60deac2 100644 --- a/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoConnectionController.java +++ b/components/page_info/android/java/src/org/chromium/components/page_info/PageInfoConnectionController.java
@@ -60,13 +60,12 @@ mInfoView.onDismiss(); } - private static @ColorRes int getSecurityIconColor( - @ConnectionSecurityLevel int securityLevel, boolean showDangerTriangleForWarningLevel) { + private static @ColorRes int getSecurityIconColor(@ConnectionSecurityLevel int securityLevel) { switch (securityLevel) { case ConnectionSecurityLevel.DANGEROUS: return R.color.default_text_color_error; case ConnectionSecurityLevel.WARNING: - return showDangerTriangleForWarningLevel ? R.color.default_text_color_error : 0; + return R.color.default_text_color_error; case ConnectionSecurityLevel.NONE: case ConnectionSecurityLevel.SECURE_WITH_POLICY_INSTALLED_CERT: case ConnectionSecurityLevel.SECURE: @@ -84,13 +83,10 @@ rowParams.subtitle = params.message; rowParams.visible = rowParams.title != null || rowParams.subtitle != null; int securityLevel = SecurityStateModel.getSecurityLevelForWebContents(mWebContents); - boolean showTriangleForWarning = - SecurityStateModel.shouldShowDangerTriangleForWarningLevel(); - rowParams.iconResId = - SecurityStatusIcon.getSecurityIconResource(securityLevel, showTriangleForWarning, - /*isSmallDevice=*/false, - /*skipIconForNeutralState=*/false); - rowParams.iconTint = getSecurityIconColor(securityLevel, showTriangleForWarning); + rowParams.iconResId = SecurityStatusIcon.getSecurityIconResource(securityLevel, + /*isSmallDevice=*/false, + /*skipIconForNeutralState=*/false); + rowParams.iconTint = getSecurityIconColor(securityLevel); if (params.clickCallback != null) rowParams.clickCallback = this::launchSubpage; mRowView.setParams(rowParams); }
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java index 9d06afa3..bc66bd4 100644 --- a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java +++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
@@ -743,20 +743,10 @@ mIsFinishedQueryingPaymentApps = true; - if (disconnectIfNoPaymentMethodsSupported(mBrowserPaymentRequest.hasAvailableApps())) { - return; - } - // Always return false when can make payment is disabled. mHasEnrolledInstrument &= mDelegate.prefsCanMakePayment(); - if (mIsCanMakePaymentResponsePending) { - respondCanMakePaymentQuery(); - } - - if (mIsHasEnrolledInstrumentResponsePending) { - respondHasEnrolledInstrumentQuery(); - } + if (mIsShowCalled && disconnectIfNoPaymentMethodsSupported()) return; mBrowserPaymentRequest.notifyPaymentUiOfPendingApps(mPendingApps); mPendingApps.clear(); @@ -774,6 +764,14 @@ onShowFailed(error); return; } + + if (mIsCanMakePaymentResponsePending) { + respondCanMakePaymentQuery(); + } + + if (mIsHasEnrolledInstrumentResponsePending) { + respondHasEnrolledInstrumentQuery(); + } } private void onShowFailed(String error) { @@ -790,12 +788,11 @@ /** * If no payment methods are supported, disconnect from the client and return true. - * @param hasAvailableApps Whether any payment app is available. * @return Whether client has been disconnected. */ - private boolean disconnectIfNoPaymentMethodsSupported(boolean hasAvailableApps) { - if (!mIsFinishedQueryingPaymentApps || !mIsShowCalled) return false; - if (!mCanMakePayment || (mPendingApps.isEmpty() && !hasAvailableApps)) { + private boolean disconnectIfNoPaymentMethodsSupported() { + if (!mCanMakePayment + || (mPendingApps.isEmpty() && !mBrowserPaymentRequest.hasAvailableApps())) { // All factories have responded, but none of them have apps. It's possible to add credit // cards, but the merchant does not support them either. The payment request must be // rejected. @@ -1025,10 +1022,9 @@ mIsShowWaitingForUpdatedDetails = waitForUpdatedDetails; mJourneyLogger.setTriggerTime(); - if (disconnectIfNoPaymentMethodsSupported(mBrowserPaymentRequest.hasAvailableApps())) { - return; - } + if (mIsFinishedQueryingPaymentApps) { + if (disconnectIfNoPaymentMethodsSupported()) return; String error = mBrowserPaymentRequest.showAppSelector(mIsShowWaitingForUpdatedDetails, mSpec.getRawTotal(), mSpec.getPaymentOptions(), mIsUserGestureShow); if (error != null) {
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 94be8ef..a48331f 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -2202,6 +2202,14 @@ bool canceled = false; GetPrintManagerHost()->UpdatePrintSettings(cookie, job_settings->Clone(), &settings, &canceled); + + // If mojom::PrintManagerHost is disconnected in the browser after calling + // UpdatePrintSettings(), |settings| could be null. + if (!settings) { + print_preview_context_.set_error(PREVIEW_ERROR_EMPTY_PRINTER_SETTINGS); + return false; + } + if (canceled) { notify_browser_of_print_failure_ = false; return false;
diff --git a/components/printing/renderer/print_render_frame_helper.h b/components/printing/renderer/print_render_frame_helper.h index 78d76aa..a874a18 100644 --- a/components/printing/renderer/print_render_frame_helper.h +++ b/components/printing/renderer/print_render_frame_helper.h
@@ -187,6 +187,7 @@ PREVIEW_ERROR_PAGE_RENDERED_WITHOUT_METAFILE_DEPRECATED = 6, PREVIEW_ERROR_INVALID_PRINTER_SETTINGS = 7, PREVIEW_ERROR_METAFILE_CAPTURE_FAILED_DEPRECATED = 8, + PREVIEW_ERROR_EMPTY_PRINTER_SETTINGS = 9, PREVIEW_ERROR_LAST_ENUM // Always last. };
diff --git a/components/safe_browsing/content/password_protection/password_protection_request.cc b/components/safe_browsing/content/password_protection/password_protection_request.cc index aa728ce..e13229c 100644 --- a/components/safe_browsing/content/password_protection/password_protection_request.cc +++ b/components/safe_browsing/content/password_protection/password_protection_request.cc
@@ -5,43 +5,37 @@ #include "components/safe_browsing/content/password_protection/password_protection_request.h" #include <cstddef> -#include <memory> #include "base/bind.h" #include "base/containers/flat_set.h" -#include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" #include "base/task/thread_pool.h" -#include "base/time/time.h" -#include "components/password_manager/core/browser/password_manager_metrics_util.h" -#include "components/password_manager/core/browser/password_reuse_detector.h" -#include "components/safe_browsing/content/common/safe_browsing.mojom.h" #include "components/safe_browsing/content/password_protection/password_protection_navigation_throttle.h" #include "components/safe_browsing/content/web_ui/safe_browsing_ui.h" #include "components/safe_browsing/core/common/thread_utils.h" -#include "components/safe_browsing/core/common/visual_utils.h" #include "components/safe_browsing/core/db/allowlist_checker_client.h" +#include "components/safe_browsing/core/db/database_manager.h" #include "components/safe_browsing/core/features.h" -#include "components/safe_browsing/core/password_protection/metrics_util.h" -#include "components/safe_browsing/core/proto/csd.pb.h" #include "components/url_formatter/url_formatter.h" -#include "components/zoom/zoom_controller.h" #include "content/public/browser/browser_task_traits.h" -#include "content/public/browser/render_widget_host_view.h" -#include "content/public/browser/web_contents.h" +#include "content/public/browser/navigation_throttle.h" #include "net/base/escape.h" #include "net/base/load_flags.h" -#include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/http/http_status_code.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/simple_url_loader.h" -#include "services/service_manager/public/cpp/interface_provider.h" #include "url/gurl.h" -#include "url/origin.h" -using content::BrowserThread; -using content::WebContents; +#if BUILDFLAG(SAFE_BROWSING_AVAILABLE) || BUILDFLAG(FULL_SAFE_BROWSING) +#include "content/public/browser/web_contents.h" +#endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) || BUILDFLAG(FULL_SAFE_BROWSING) + +#if BUILDFLAG(FULL_SAFE_BROWSING) +#include "components/safe_browsing/core/common/visual_utils.h" +#include "components/zoom/zoom_controller.h" +#include "content/public/browser/render_widget_host_view.h" +#endif // BUILDFLAG(FULL_SAFE_BROWSING) namespace safe_browsing { @@ -57,7 +51,7 @@ #if BUILDFLAG(SAFE_BROWSING_AVAILABLE) // The maximum time to wait for DOM features to be collected, in milliseconds. const int kDomFeatureTimeoutMs = 3000; -#endif +#endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) #if BUILDFLAG(FULL_SAFE_BROWSING) // Parameters chosen to ensure privacy is preserved by visual features. @@ -73,7 +67,7 @@ visual_utils::GetBlurredImage(screenshot, features->mutable_image()); return features; } -#endif +#endif // BUILDFLAG(FULL_SAFE_BROWSING) std::vector<std::string> GetMatchingDomains( const std::vector<password_manager::MatchingReusedCredential>& @@ -102,13 +96,13 @@ #else return base::FeatureList::IsEnabled( safe_browsing::kClientSideDetectionForAndroid); -#endif +#endif // BUILDFLAG(FULL_SAFE_BROWSING) } } // namespace PasswordProtectionRequest::PasswordProtectionRequest( - WebContents* web_contents, + content::WebContents* web_contents, const GURL& main_frame_url, const GURL& password_form_action, const GURL& password_form_frame_url, @@ -281,7 +275,7 @@ request_proto_->set_content_area_height(content_area_size.height()); request_proto_->set_content_area_width(content_area_size.width()); } -#endif +#endif // BUILDFLAG(FULL_SAFE_BROWSING) switch (trigger_type_) { case LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE: { @@ -477,7 +471,7 @@ SendRequest(); } -#endif +#endif // BUILDFLAG(FULL_SAFE_BROWSING) void PasswordProtectionRequest::SendRequest() { DCHECK(CurrentlyOnThread(ThreadID::UI));
diff --git a/components/safe_browsing/content/password_protection/password_protection_request.h b/components/safe_browsing/content/password_protection/password_protection_request.h index 03dcaf7b..7ae11f8 100644 --- a/components/safe_browsing/content/password_protection/password_protection_request.h +++ b/components/safe_browsing/content/password_protection/password_protection_request.h
@@ -5,23 +5,32 @@ #ifndef COMPONENTS_SAFE_BROWSING_CONTENT_PASSWORD_PROTECTION_PASSWORD_PROTECTION_REQUEST_H_ #define COMPONENTS_SAFE_BROWSING_CONTENT_PASSWORD_PROTECTION_PASSWORD_PROTECTION_REQUEST_H_ +#include <memory> +#include <string> #include <vector> -#include "base/macros.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" +#include "base/sequenced_task_runner_helpers.h" #include "base/task/cancelable_task_tracker.h" #include "base/time/time.h" #include "build/build_config.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" #include "components/password_manager/core/browser/password_reuse_detector.h" #include "components/safe_browsing/buildflags.h" -#include "components/safe_browsing/content/common/safe_browsing.mojom.h" #include "components/safe_browsing/content/password_protection/password_protection_service.h" #include "components/safe_browsing/core/password_protection/metrics_util.h" #include "components/safe_browsing/core/password_protection/request_canceler.h" #include "components/safe_browsing/core/proto/csd.pb.h" + +#if BUILDFLAG(SAFE_BROWSING_AVAILABLE) +#include "components/safe_browsing/content/common/safe_browsing.mojom.h" #include "mojo/public/cpp/bindings/remote.h" +#endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) + +#if BUILDFLAG(FULL_SAFE_BROWSING) #include "third_party/skia/include/core/SkBitmap.h" +#endif // BUILDFLAG(FULL_SAFE_BROWSING) #if defined(OS_IOS) // TODO(crbug.com/1147967): Enable in iOS once this file is moved to /core. @@ -35,6 +44,10 @@ class SimpleURLLoader; } +namespace content { +class WebContents; +} + namespace safe_browsing { class PasswordProtectionNavigationThrottle; @@ -68,9 +81,9 @@ // | | On request timeout, cancel request. // | | On deletion of |password_protection_service_|, cancel request. class PasswordProtectionRequest - : public base::RefCountedThreadSafe<PasswordProtectionRequest, - DeleteOnUIThread>, - public CancelableRequest { + : public CancelableRequest, + public base::RefCountedThreadSafe<PasswordProtectionRequest, + DeleteOnUIThread> { public: PasswordProtectionRequest( content::WebContents* web_contents, @@ -87,6 +100,11 @@ PasswordProtectionService* pps, int request_timeout_in_ms); + // Not copyable or movable + PasswordProtectionRequest(const PasswordProtectionRequest&) = delete; + PasswordProtectionRequest& operator=(const PasswordProtectionRequest&) = + delete; + base::WeakPtr<PasswordProtectionRequest> GetWeakPtr() { return weakptr_factory_.GetWeakPtr(); } @@ -192,7 +210,7 @@ // If appropriate, collects visual features, otherwise continues on to sending // the request. void MaybeCollectVisualFeatures(); -#endif +#endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) #if BUILDFLAG(FULL_SAFE_BROWSING) // Collects visual features from the current login page. @@ -204,7 +222,7 @@ // Called when the visual feature extraction is complete. void OnVisualFeatureCollectionDone( std::unique_ptr<VisualFeatures> visual_features); -#endif +#endif // BUILDFLAG(FULL_SAFE_BROWSING) // Initiates network request to Safe Browsing backend. void SendRequest(); @@ -304,13 +322,12 @@ // Whether the DOM features collection is finished, either by timeout or by // successfully gathering the features. bool dom_features_collection_complete_; -#endif +#endif // BUILDFLAG(SAFE_BROWSING_AVAILABLE) // Cancels the request when it is no longer valid. std::unique_ptr<RequestCanceler> request_canceler_; base::WeakPtrFactory<PasswordProtectionRequest> weakptr_factory_{this}; - DISALLOW_COPY_AND_ASSIGN(PasswordProtectionRequest); }; } // namespace safe_browsing
diff --git a/components/security_state/content/android/java/src/org/chromium/components/security_state/SecurityStateModel.java b/components/security_state/content/android/java/src/org/chromium/components/security_state/SecurityStateModel.java index 93e67b29..c948eb2 100644 --- a/components/security_state/content/android/java/src/org/chromium/components/security_state/SecurityStateModel.java +++ b/components/security_state/content/android/java/src/org/chromium/components/security_state/SecurityStateModel.java
@@ -30,23 +30,11 @@ return getSecurityLevelForWebContents(webContents) == ConnectionSecurityLevel.DANGEROUS; } - /** - * Returns whether to use a danger icon instead of an info icon in the URL bar for the WARNING - * security level. - * - * @return Whether to downgrade the info icon to a danger triangle for the WARNING security - * level. - */ - public static boolean shouldShowDangerTriangleForWarningLevel() { - return SecurityStateModelJni.get().shouldShowDangerTriangleForWarningLevel(); - } - private SecurityStateModel() {} @NativeMethods @VisibleForTesting public interface Natives { int getSecurityLevelForWebContents(WebContents webContents); - boolean shouldShowDangerTriangleForWarningLevel(); } }
diff --git a/components/security_state/content/android/security_state_model_android.cc b/components/security_state/content/android/security_state_model_android.cc index 96999ff..df11000 100644 --- a/components/security_state/content/android/security_state_model_android.cc +++ b/components/security_state/content/android/security_state_model_android.cc
@@ -39,9 +39,3 @@ *security_state::GetVisibleSecurityState(web_contents), /* used_policy_installed_certificate= */ false); } - -// static -jboolean JNI_SecurityStateModel_ShouldShowDangerTriangleForWarningLevel( - JNIEnv* env) { - return security_state::ShouldShowDangerTriangleForWarningLevel(); -}
diff --git a/components/security_state/content/content_utils.cc b/components/security_state/content/content_utils.cc index e0bc23c..9081939 100644 --- a/components/security_state/content/content_utils.cc +++ b/components/security_state/content/content_utils.cc
@@ -45,9 +45,7 @@ case security_state::NONE: return blink::SecurityStyle::kNeutral; case security_state::WARNING: - if (security_state::ShouldShowDangerTriangleForWarningLevel()) - return blink::SecurityStyle::kInsecure; - return blink::SecurityStyle::kNeutral; + return blink::SecurityStyle::kInsecure; case security_state::SECURE_WITH_POLICY_INSTALLED_CERT: case security_state::SECURE: return blink::SecurityStyle::kSecure;
diff --git a/components/security_state/core/security_state.cc b/components/security_state/core/security_state.cc index 47328cc..05f2b8fa 100644 --- a/components/security_state/core/security_state.cc +++ b/components/security_state/core/security_state.cc
@@ -322,12 +322,6 @@ net::CERT_STATUS_SHA1_SIGNATURE_PRESENT); } -// TODO(crbug.com/1015626): Clean this up once the experiment is fully -// launched. -bool ShouldShowDangerTriangleForWarningLevel() { - return true; -} - bool IsSafetyTipUIFeatureEnabled() { return base::FeatureList::IsEnabled(features::kSafetyTipUI) || base::FeatureList::IsEnabled(
diff --git a/components/security_state/core/security_state.h b/components/security_state/core/security_state.h index d24f20a..10e52674 100644 --- a/components/security_state/core/security_state.h +++ b/components/security_state/core/security_state.h
@@ -265,10 +265,6 @@ bool IsSHA1InChain(const VisibleSecurityState& visible_security_state); -// Returns whether the WARNING state should downgrade the security icon from -// info to danger triangle as part of an experiment (crbug.com/997972). -bool ShouldShowDangerTriangleForWarningLevel(); - // Returns true if Safety Tip UI should be shown because a relevant field trial // is enabled. bool IsSafetyTipUIFeatureEnabled();
diff --git a/components/services/language_detection/language_detection_service_impl.cc b/components/services/language_detection/language_detection_service_impl.cc index 6bf162a..dda56d9 100644 --- a/components/services/language_detection/language_detection_service_impl.cc +++ b/components/services/language_detection/language_detection_service_impl.cc
@@ -6,6 +6,7 @@ #include <string> +#include "base/strings/utf_string_conversions.h" #include "components/translate/core/language_detection/language_detection_util.h" namespace language_detection { @@ -20,8 +21,8 @@ const ::base::string16& text, DetermineLanguageCallback callback) { bool is_cld_reliable = false; - std::string cld_language = - translate::DetermineTextLanguage(text, &is_cld_reliable); + std::string cld_language = translate::DetermineTextLanguage( + base::UTF16ToUTF8(text), &is_cld_reliable); std::move(callback).Run(cld_language, is_cld_reliable); }
diff --git a/components/services/storage/dom_storage/local_storage_impl.cc b/components/services/storage/dom_storage/local_storage_impl.cc index ad3380f..984464f 100644 --- a/components/services/storage/dom_storage/local_storage_impl.cc +++ b/components/services/storage/dom_storage/local_storage_impl.cc
@@ -796,6 +796,12 @@ std::move(callback).Run(); } +void LocalStorageImpl::PurgeAllStorageAreas() { + for (const auto& it : areas_) + it.second->storage_area()->CancelAllPendingRequests(); + areas_.clear(); +} + void LocalStorageImpl::InitiateConnection(bool in_memory_only) { if (connection_state_ == CONNECTION_SHUTDOWN) return; @@ -922,9 +928,7 @@ // We're about to set database_ to null, so delete the StorageAreaImpls // that might still be using the old database. - for (const auto& it : areas_) - it.second->storage_area()->CancelAllPendingRequests(); - areas_.clear(); + PurgeAllStorageAreas(); // Reset state to be in process of connecting. This will cause requests for // StorageAreas to be queued until the connection is complete. @@ -1100,6 +1104,7 @@ // Flush any final tasks on the DB task runner before invoking the callback. leveldb_task_runner_->PostTaskAndReply( FROM_HERE, base::DoNothing(), std::move(shutdown_complete_callback_)); + PurgeAllStorageAreas(); database_.reset(); }
diff --git a/components/services/storage/dom_storage/local_storage_impl.h b/components/services/storage/dom_storage/local_storage_impl.h index ac49957..aa941b4 100644 --- a/components/services/storage/dom_storage/local_storage_impl.h +++ b/components/services/storage/dom_storage/local_storage_impl.h
@@ -112,6 +112,10 @@ // Initiates connecting to the database if no connection is in progres yet. void RunWhenConnected(base::OnceClosure callback); + // StorageAreas held by this LocalStorageImpl retain an unmanaged reference to + // `database_`. This deletes them and is used any time `database_` is reset. + void PurgeAllStorageAreas(); + // Part of our asynchronous directory opening called from RunWhenConnected(). void InitiateConnection(bool in_memory_only = false); void OnDatabaseOpened(leveldb::Status status);
diff --git a/components/services/storage/public/mojom/service_worker_storage_control.mojom b/components/services/storage/public/mojom/service_worker_storage_control.mojom index 86223dd61..3bae1f50 100644 --- a/components/services/storage/public/mojom/service_worker_storage_control.mojom +++ b/components/services/storage/public/mojom/service_worker_storage_control.mojom
@@ -288,7 +288,8 @@ // Applies changes to data retention policy which are relevant at shutdown. // This is analogous to LocalStorageControl::ApplyPolicyUpdates. - ApplyPolicyUpdates(array<LocalStoragePolicyUpdate> policy_updates); + ApplyPolicyUpdates(array<LocalStoragePolicyUpdate> policy_updates) => + (ServiceWorkerDatabaseStatus status); // Get resource ids which are scheduled to purge. GetPurgingResourceIdsForTest() => (ServiceWorkerDatabaseStatus status,
diff --git a/components/signin/public/base/signin_metrics.cc b/components/signin/public/base/signin_metrics.cc index 493cc443..adcfc19d 100644 --- a/components/signin/public/base/signin_metrics.cc +++ b/components/signin/public/base/signin_metrics.cc
@@ -123,6 +123,12 @@ base::RecordAction( base::UserMetricsAction("Signin_Signin_FromGoogleServicesSettings")); break; + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: + NOTREACHED() << "Access point " << static_cast<int>(access_point) + << " is only used to trigger non-sync sign-in and this" + << " action should only be triggered for sync-enabled" + << " sign-ins."; + break; case AccessPoint::ACCESS_POINT_SYNC_ERROR_CARD: case AccessPoint::ACCESS_POINT_FORCED_SIGNIN: case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: @@ -207,6 +213,7 @@ case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case AccessPoint::ACCESS_POINT_WEB_SIGNIN: case AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: NOTREACHED() << "Signin_SigninWithDefault_From* user actions" << " are not recorded for access_point " << static_cast<int>(access_point) @@ -286,6 +293,7 @@ case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case AccessPoint::ACCESS_POINT_WEB_SIGNIN: case AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: NOTREACHED() << "Signin_SigninNotDefault_From* user actions" << " are not recorded for access point " << static_cast<int>(access_point) @@ -369,6 +377,7 @@ case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case AccessPoint::ACCESS_POINT_WEB_SIGNIN: case AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: // These access points do not support personalized sign-in promos, so // |Signin_SigninNewAccountNoExistingAccount_From*| user actions should // not be recorded for them. Note: To avoid bloating the sign-in APIs, the @@ -455,6 +464,7 @@ case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case AccessPoint::ACCESS_POINT_WEB_SIGNIN: case AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: // These access points do not support personalized sign-in promos, so // |Signin_SigninNewAccountExistingAccount_From*| user actions should not // be recorded for them. Note: To avoid bloating the sign-in APIs, the @@ -879,6 +889,10 @@ base::RecordAction(base::UserMetricsAction( "Signin_Impression_FromGoogleServicesSettings")); break; + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: + base::RecordAction( + base::UserMetricsAction("Signin_Impression_FromKaleidoscope")); + break; case AccessPoint::ACCESS_POINT_CONTENT_AREA: case AccessPoint::ACCESS_POINT_EXTENSIONS: case AccessPoint::ACCESS_POINT_SUPERVISED_USER: @@ -1024,6 +1038,7 @@ case AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case AccessPoint::ACCESS_POINT_WEB_SIGNIN: case AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: NOTREACHED() << "Signin_Impression{With|WithNo}Account_From* user actions" << " are not recorded for access point " << static_cast<int>(access_point)
diff --git a/components/signin/public/base/signin_metrics.h b/components/signin/public/base/signin_metrics.h index 88793956..072bd9c 100644 --- a/components/signin/public/base/signin_metrics.h +++ b/components/signin/public/base/signin_metrics.h
@@ -171,6 +171,7 @@ ACCESS_POINT_ACCOUNT_RENAMED = 30, ACCESS_POINT_WEB_SIGNIN = 31, ACCESS_POINT_SAFETY_CHECK = 32, + ACCESS_POINT_KALEIDOSCOPE = 33, ACCESS_POINT_MAX, // This must be last. };
diff --git a/components/signin/public/base/signin_metrics_unittest.cc b/components/signin/public/base/signin_metrics_unittest.cc index 1bc0b6d3..7ead308 100644 --- a/components/signin/public/base/signin_metrics_unittest.cc +++ b/components/signin/public/base/signin_metrics_unittest.cc
@@ -147,6 +147,8 @@ return "WebSignIn"; case AccessPoint::ACCESS_POINT_SAFETY_CHECK: return "SafetyCheck"; + case AccessPoint::ACCESS_POINT_KALEIDOSCOPE: + return "Kaleidoscope"; case AccessPoint::ACCESS_POINT_MAX: NOTREACHED(); return "";
diff --git a/components/subresource_filter/OWNERS b/components/subresource_filter/OWNERS index ee31bdd..090edda5 100644 --- a/components/subresource_filter/OWNERS +++ b/components/subresource_filter/OWNERS
@@ -1,5 +1,4 @@ csharrison@chromium.org -ericrobinson@chromium.org jkarlin@chromium.org # COMPONENT: UI>Browser>AdFilter
diff --git a/components/translate/core/language_detection/language_detection_util.cc b/components/translate/core/language_detection/language_detection_util.cc index d80136c..6061e53 100644 --- a/components/translate/core/language_detection/language_detection_util.cc +++ b/components/translate/core/language_detection/language_detection_util.cc
@@ -79,18 +79,52 @@ base::CompareCase::INSENSITIVE_ASCII); } +// Given a detected language and whether that detection is reliable, returns the +// ISO 639 language code of |utf8_text|. Returns +// |translate::kUnknownLanguageCode| for unreliable, "unknown", and xx-Latn +// predictions that are currently not supported. +std::string FilterDetectedLanguage(const std::string& utf8_text, + const std::string& detected_language, + bool is_detection_reliable) { + // Ignore unreliable, "unknown", and xx-Latn predictions that are currently + // not supported. + if (!is_detection_reliable) + return translate::kUnknownLanguageCode; + if (detected_language == "bg-Latn" || detected_language == "el-Latn" || + detected_language == "ja-Latn" || detected_language == "ru-Latn" || + detected_language == "zh-Latn" || + detected_language == chrome_lang_id::NNetLanguageIdentifier::kUnknown) { + return translate::kUnknownLanguageCode; + } + + if (detected_language == "zh") { + // If prediction is "zh" (Chinese), then we need to determine whether the + // text is zh-Hant (Chinese Traditional) or zh-Hans (Chinese Simplified). + translate::ChineseScriptClassifier zh_classifier; + + // The Classify function returns either "zh-Hant" or "zh-Hans". + // Convert to the old-style language codes used by the Translate API. + const std::string zh_classification = zh_classifier.Classify(utf8_text); + if (zh_classification == "zh-Hant") + return "zh-TW"; + if (zh_classification == "zh-Hans") + return "zh-CN"; + return translate::kUnknownLanguageCode; + } + // The detection is reliable and none of the cases that are not handled by the + // language detection model. + return detected_language; +} + } // namespace namespace translate { -// Returns the ISO 639 language code of the specified |text|, or 'unknown' if it -// failed. -// |is_cld_reliable| will be set as true if CLD says the detection is reliable. -std::string DetermineTextLanguage(const base::string16& text, +// Returns the ISO 639 language code of the specified |utf8_text|, or 'unknown' +// if it failed. |is_cld_reliable| will be set as true if CLD says the detection +// is reliable. +std::string DetermineTextLanguage(const std::string& utf8_text, bool* is_cld_reliable) { - std::string language = translate::kUnknownLanguageCode; - const std::string utf8_text(base::UTF16ToUTF8(text)); - // Make a prediction. base::TimeTicks lang_id_start = base::TimeTicks::Now(); chrome_lang_id::NNetLanguageIdentifier lang_id; @@ -98,55 +132,24 @@ lang_id.FindTopNMostFreqLangs(utf8_text, /*num_langs=*/1).at(0); base::UmaHistogramTimes("Translate.CLD3.TopLanguageEvaluationDuration", base::TimeTicks::Now() - lang_id_start); - const bool prediction_reliable = lang_id_result.is_reliable; - const std::string& predicted_language = lang_id_result.language; + const bool is_detection_reliable = lang_id_result.is_reliable; + const std::string& detected_language = lang_id_result.language; // Update histograms. const base::HistogramBase::Sample pred_lang_hash = static_cast<base::HistogramBase::Sample>( - base::HashMetricName(predicted_language)); + base::HashMetricName(detected_language)); base::UmaHistogramSparse("Translate.CLD3.LanguageDetected", pred_lang_hash); - if (predicted_language != chrome_lang_id::NNetLanguageIdentifier::kUnknown) { + if (detected_language != chrome_lang_id::NNetLanguageIdentifier::kUnknown) { UMA_HISTOGRAM_PERCENTAGE("Translate.CLD3.LanguagePercentage", static_cast<int>(100 * lang_id_result.proportion)); } if (is_cld_reliable != nullptr) { - *is_cld_reliable = prediction_reliable; + *is_cld_reliable = is_detection_reliable; } - - // Ignore unreliable, "unknown", and xx-Latn predictions that are currently - // not supported. - if (prediction_reliable && - predicted_language != "bg-Latn" && - predicted_language != "el-Latn" && - predicted_language != "ja-Latn" && - predicted_language != "ru-Latn" && - predicted_language != "zh-Latn" && - predicted_language != - chrome_lang_id::NNetLanguageIdentifier::kUnknown) { - if (predicted_language != "zh") { - language = predicted_language; - } else { - // If prediction is "zh" (Chinese), then we need to determine whether the - // text is zh-Hant (Chinese Traditional) or zh-Hans (Chinese Simplified). - translate::ChineseScriptClassifier zh_classifier; - - // The Classify function returns either "zh-Hant" or "zh-Hans". - // Convert to the old-style language codes used by the Translate API. - const std::string zh_classification = zh_classifier.Classify(utf8_text); - if (zh_classification == "zh-Hant") { - language = "zh-TW"; - } else if (zh_classification == "zh-Hans") { - language = "zh-CN"; - } else { - language = translate::kUnknownLanguageCode; - } - } - } - - VLOG(1) << "Detected language: " << language; - return language; + return FilterDetectedLanguage(utf8_text, detected_language, + is_detection_reliable); } std::string DeterminePageLanguage(const std::string& code, @@ -156,7 +159,8 @@ bool* is_cld_reliable_p) { // First determine the language for the test contents. bool is_cld_reliable; - std::string cld_language = DetermineTextLanguage(contents, &is_cld_reliable); + const std::string utf8_text(base::UTF16ToUTF8(contents)); + std::string cld_language = DetermineTextLanguage(utf8_text, &is_cld_reliable); if (cld_language_p != nullptr) *cld_language_p = cld_language; if (is_cld_reliable_p != nullptr)
diff --git a/components/translate/core/language_detection/language_detection_util.h b/components/translate/core/language_detection/language_detection_util.h index d16ab4d..74e9246 100644 --- a/components/translate/core/language_detection/language_detection_util.h +++ b/components/translate/core/language_detection/language_detection_util.h
@@ -11,10 +11,10 @@ namespace translate { -// Returns the ISO 639 language code of the specified |text|, or +// Returns the ISO 639 language code of the specified |utf8_text|, or // |translate::kUnknownLanguageCode| if it failed. |is_cld_reliable| will be // set as true if CLD says the detection is reliable. -std::string DetermineTextLanguage(const base::string16& text, +std::string DetermineTextLanguage(const std::string& utf8_text, bool* is_cld_reliable); // Determines content page language from Content-Language code and contents.
diff --git a/content/BUILD.gn b/content/BUILD.gn index 7eea6c1..30537118 100644 --- a/content/BUILD.gn +++ b/content/BUILD.gn
@@ -118,8 +118,9 @@ "content_resources.pak", ] deps = [ - "//gpu/ipc/common:vulkan_interface_js", + "//gpu/ipc/common:vulkan_interface_webui_js", "//url/mojom:url_mojom_origin_js", + "//url/mojom:url_mojom_origin_webui_js", ] } @@ -131,8 +132,8 @@ "dev_ui_content_resources.pak", ] deps = [ - "//content/browser/conversions:mojo_bindings_js", - "//content/browser/process_internals:mojo_bindings_js", + "//content/browser/conversions:mojo_bindings_webui_js", + "//content/browser/process_internals:mojo_bindings_webui_js", ] }
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc index 76dbc6a2..1ab231a2 100644 --- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc +++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -2114,13 +2114,12 @@ "Text in iframe"); WaitForHitTestData(iframe_node->current_frame_host()); - FrameTreeVisualizer visualizer; ASSERT_EQ( " Site A ------------ proxies for B\n" " +--Site B ------- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); auto* node = FindNode(ax::mojom::Role::kStaticText, "After frame"); ASSERT_NE(nullptr, node);
diff --git a/content/browser/accessibility/hit_testing_browsertest.cc b/content/browser/accessibility/hit_testing_browsertest.cc index e5e47c4..7128c58 100644 --- a/content/browser/accessibility/hit_testing_browsertest.cc +++ b/content/browser/accessibility/hit_testing_browsertest.cc
@@ -471,13 +471,12 @@ WaitForAccessibilityTreeToContainNodeWithName(shell()->web_contents(), "rectF"); - FrameTreeVisualizer visualizer; EXPECT_EQ( " Site A ------------ proxies for B\n" " +--Site B ------- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); // Before scrolling. {
diff --git a/content/browser/conversions/BUILD.gn b/content/browser/conversions/BUILD.gn index 6d722613..4dd227e 100644 --- a/content/browser/conversions/BUILD.gn +++ b/content/browser/conversions/BUILD.gn
@@ -7,4 +7,5 @@ mojom("mojo_bindings") { sources = [ "conversion_internals.mojom" ] public_deps = [ "//url/mojom:url_mojom_origin" ] + webui_module_path = "/" }
diff --git a/content/browser/conversions/conversion_internals_ui.cc b/content/browser/conversions/conversion_internals_ui.cc index 5bfe7e3..7a30675 100644 --- a/content/browser/conversions/conversion_internals_ui.cc +++ b/content/browser/conversions/conversion_internals_ui.cc
@@ -25,7 +25,7 @@ WebUIDataSource* source = WebUIDataSource::Create(kChromeUIConversionInternalsHost); - source->AddResourcePath("conversion_internals.mojom-lite.js", + source->AddResourcePath("conversion_internals.mojom-webui.js", IDR_CONVERSION_INTERNALS_MOJOM_JS); source->AddResourcePath("conversion_internals.js", IDR_CONVERSION_INTERNALS_JS);
diff --git a/content/browser/devtools/protocol/system_info_handler.cc b/content/browser/devtools/protocol/system_info_handler.cc index e1dadce4..e901a6b 100644 --- a/content/browser/devtools/protocol/system_info_handler.cc +++ b/content/browser/devtools/protocol/system_info_handler.cc
@@ -46,9 +46,11 @@ .Build(); } // Give the GPU process a few seconds to provide GPU info. -// Linux Debug builds need more time -- see Issue 796437 and 1046598. +// Linux and Mac Debug builds need more time -- see Issue 796437, 1046598, and +// 1153667. // Windows builds need more time -- see Issue 873112 and 1004472. -#if ((defined(OS_LINUX) || defined(OS_CHROMEOS)) && !defined(NDEBUG)) || \ +#if ((defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_MAC)) && \ + !defined(NDEBUG)) || \ defined(OS_WIN) const int kGPUInfoWatchdogTimeoutMs = 30000; #else
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc index 12360e56..8c1a641 100644 --- a/content/browser/gpu/gpu_internals_ui.cc +++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -98,9 +98,14 @@ "trusted-types jstemplate;"); source->UseStringsJs(); + source->AddResourcePath("browser_bridge.js", IDR_GPU_BROWSER_BRIDGE_JS); source->AddResourcePath("gpu_internals.js", IDR_GPU_INTERNALS_JS); - source->AddResourcePath("vulkan_info.mojom.js", IDR_VULKAN_INFO_MOJO_JS); - source->AddResourcePath("vulkan_types.mojom.js", IDR_VULKAN_TYPES_MOJO_JS); + source->AddResourcePath("info_view.js", IDR_GPU_INFO_VIEW_JS); + source->AddResourcePath("vulkan_info.js", IDR_GPU_VULKAN_INFO_JS); + source->AddResourcePath("vulkan_info.mojom-webui.js", + IDR_VULKAN_INFO_MOJO_JS); + source->AddResourcePath("vulkan_types.mojom-webui.js", + IDR_VULKAN_TYPES_MOJO_JS); source->SetDefaultResource(IDR_GPU_INTERNALS_HTML); return source; }
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc index bcef78d..2879999 100644 --- a/content/browser/gpu/gpu_process_host.cc +++ b/content/browser/gpu/gpu_process_host.cc
@@ -272,6 +272,9 @@ switches::kVModule, switches::kUseAdapterLuid, switches::kWebViewDrawFunctorUsesVulkan, +#if BUILDFLAG(ENABLE_PLATFORM_HEVC) + switches::kEnableClearHevcForTesting, +#endif #if defined(OS_MAC) sandbox::policy::switches::kEnableSandboxLogging, switches::kDisableAVFoundationOverlays,
diff --git a/content/browser/isolated_origin_browsertest.cc b/content/browser/isolated_origin_browsertest.cc index e402799..489c64c 100644 --- a/content/browser/isolated_origin_browsertest.cc +++ b/content/browser/isolated_origin_browsertest.cc
@@ -4391,7 +4391,7 @@ "Where A = http://127.0.0.1/\n" " B = http://bar.com/\n" " C = http://baz.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); // But none are isolated, so all should share the default process for their // BrowsingInstance. @@ -4466,7 +4466,7 @@ "Where A = http://foo.com/\n" " B = http://isolated.foo.com/\n" " C = http://bar.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } // Navigate a frame into and out of an isolated origin. This should not @@ -4518,7 +4518,7 @@ " +--Site B ------- proxies for A\n" "Where A = http://isolated.foo.com/\n" " B = http://foo.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } // Ensure a popup and its opener can go in the same process, even though @@ -4561,15 +4561,14 @@ " +--Site A ------- proxies for B\n" "Where A = http://foo.com/\n" " B = http://bar.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); EXPECT_EQ( " Site A ------------ proxies for B\n" "Where A = http://bar.com/\n" " B = http://foo.com/", - FrameTreeVisualizer().DepictFrameTree( - static_cast<WebContentsImpl*>(new_shell->web_contents()) - ->GetFrameTree() - ->root())); + DepictFrameTree(*static_cast<WebContentsImpl*>(new_shell->web_contents()) + ->GetFrameTree() + ->root())); } class WildcardOriginIsolationTest : public IsolatedOriginTestBase { @@ -4720,7 +4719,7 @@ " B = http://isolated.foo.com/\n" " C = http://b.isolated.foo.com/\n" " D = http://isolated.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } } // namespace content
diff --git a/content/browser/process_internals/BUILD.gn b/content/browser/process_internals/BUILD.gn index 4ae242c6..8b13164 100644 --- a/content/browser/process_internals/BUILD.gn +++ b/content/browser/process_internals/BUILD.gn
@@ -8,4 +8,5 @@ sources = [ "process_internals.mojom" ] deps = [ "//url/mojom:url_mojom_gurl" ] + webui_module_path = "/" }
diff --git a/content/browser/process_internals/process_internals_ui.cc b/content/browser/process_internals/process_internals_ui.cc index 81b74e3..aff81db 100644 --- a/content/browser/process_internals/process_internals_ui.cc +++ b/content/browser/process_internals/process_internals_ui.cc
@@ -37,7 +37,7 @@ source->AddResourcePath("process_internals.js", IDR_PROCESS_INTERNALS_JS); source->AddResourcePath("process_internals.css", IDR_PROCESS_INTERNALS_CSS); - source->AddResourcePath("process_internals.mojom-lite.js", + source->AddResourcePath("process_internals.mojom-webui.js", IDR_PROCESS_INTERNALS_MOJO_JS); source->SetDefaultResource(IDR_PROCESS_INTERNALS_HTML); source->OverrideContentSecurityPolicy(
diff --git a/content/browser/renderer_host/frame_tree_browsertest.cc b/content/browser/renderer_host/frame_tree_browsertest.cc index f92874c..435dcb69 100644 --- a/content/browser/renderer_host/frame_tree_browsertest.cc +++ b/content/browser/renderer_host/frame_tree_browsertest.cc
@@ -307,7 +307,7 @@ EXPECT_TRUE(NavigateToURL( shell(), embedded_test_server()->GetURL( "a.com", "/cross_site_iframe_factory.html?a(b(a))"))); - std::string reference_tree = FrameTreeVisualizer().DepictFrameTree(root); + std::string reference_tree = DepictFrameTree(*root); GURL main_url(embedded_test_server()->GetURL( "a.com", "/cross_site_iframe_factory.html?a(b(c))")); @@ -345,7 +345,7 @@ EXPECT_EQ(url::kHttpScheme, target->current_origin().scheme()); EXPECT_EQ("This is blob content.", EvalJs(target, "document.body.children[0].innerHTML")); - EXPECT_EQ(reference_tree, FrameTreeVisualizer().DepictFrameTree(root)); + EXPECT_EQ(reference_tree, DepictFrameTree(*root)); } IN_PROC_BROWSER_TEST_F(FrameTreeBrowserTest, NavigateChildToAboutBlank) { @@ -1298,7 +1298,7 @@ "Where A = %s\n" " B = http://b.is/", kExpectedSiteURL.c_str()), - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } } // namespace content
diff --git a/content/browser/renderer_host/input/fling_browsertest.cc b/content/browser/renderer_host/input/fling_browsertest.cc index 32f90f1..a62ff93 100644 --- a/content/browser/renderer_host/input/fling_browsertest.cc +++ b/content/browser/renderer_host/input/fling_browsertest.cc
@@ -122,13 +122,12 @@ } WaitForHitTestData(iframe_node->current_frame_host()); - FrameTreeVisualizer visualizer; ASSERT_EQ( " Site A ------------ proxies for B\n" " +--Site B ------- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); root_view_ = static_cast<RenderWidgetHostViewBase*>( root->current_frame_host()->GetRenderWidgetHost()->GetView());
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc index bb833bcf..dbd1c16 100644 --- a/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc +++ b/content/browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc
@@ -384,7 +384,7 @@ " Site A\n" " +--Site A\n" "Where A = http://a.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); TestNavigationObserver observer(shell()->web_contents()); EXPECT_EQ(1u, root->child_count()); FrameTreeNode* child = root->child_at(0); @@ -412,7 +412,7 @@ " +--Site B ------- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); // The child will change with the cross-site navigation. It shouldn't change // after this. @@ -490,7 +490,7 @@ " Site A\n" " +--Site A\n" "Where A = http://a.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); TestNavigationObserver observer(shell()->web_contents()); EXPECT_EQ(1u, root->child_count()); FrameTreeNode* child = root->child_at(0); @@ -524,7 +524,7 @@ " +--Site B ------- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); // The child will change with the cross-site navigation. It shouldn't change // after this.
diff --git a/content/browser/renderer_host/navigation_controller_impl.cc b/content/browser/renderer_host/navigation_controller_impl.cc index ec86c29..7e76843 100644 --- a/content/browser/renderer_host/navigation_controller_impl.cc +++ b/content/browser/renderer_host/navigation_controller_impl.cc
@@ -1560,6 +1560,13 @@ new_entry->set_site_instance( static_cast<SiteInstanceImpl*>(rfh->GetSiteInstance())); new_entry->SetOriginalRequestURL(params.original_request_url); + + if (!is_same_document) { + DCHECK_EQ(request->IsOverridingUserAgent() && !rfh->GetParent(), + params.is_overriding_user_agent); + } else { + DCHECK_EQ(rfh->is_overriding_user_agent(), params.is_overriding_user_agent); + } new_entry->SetIsOverridingUserAgent(params.is_overriding_user_agent); // Update the FrameNavigationEntry for new main frame commits.
diff --git a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc index 825c18a0..dd6e0af 100644 --- a/content/browser/renderer_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/renderer_host/navigation_controller_impl_browsertest.cc
@@ -2130,7 +2130,6 @@ // Check the end result of the frame tree. if (AreAllSitesIsolatedForTesting()) { - FrameTreeVisualizer visualizer; EXPECT_EQ( " Site A ------------ proxies for B\n" " |--Site A ------- proxies for B\n" @@ -2138,7 +2137,7 @@ " +--Site B ------- proxies for A\n" "Where A = http://127.0.0.1/\n" " B = http://foo.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); } } @@ -2649,7 +2648,6 @@ // Check the end result of the frame tree. if (AreAllSitesIsolatedForTesting()) { - FrameTreeVisualizer visualizer; EXPECT_EQ( " Site A ------------ proxies for B\n" " |--Site A ------- proxies for B\n" @@ -2659,7 +2657,7 @@ " +--Site A -- proxies for B\n" "Where A = http://127.0.0.1/\n" " B = http://foo.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); } } @@ -2802,14 +2800,13 @@ // Check the end result of the frame tree. if (AreAllSitesIsolatedForTesting()) { - FrameTreeVisualizer visualizer; EXPECT_EQ( " Site A ------------ proxies for B\n" " |--Site A ------- proxies for B\n" " +--Site B ------- proxies for A\n" "Where A = http://127.0.0.1/\n" " B = http://baz.com/", - visualizer.DepictFrameTree(root)); + DepictFrameTree(*root)); } }
diff --git a/content/browser/renderer_host/navigation_request.h b/content/browser/renderer_host/navigation_request.h index 6404c50..2a6f96e 100644 --- a/content/browser/renderer_host/navigation_request.h +++ b/content/browser/renderer_host/navigation_request.h
@@ -728,6 +728,10 @@ // properly determine SiteInstances and process allocation. UrlInfo GetUrlInfo(); + bool IsOverridingUserAgent() const { + return commit_params_->is_overriding_user_agent || entry_overrides_ua_; + } + private: friend class NavigationRequestTest; @@ -1082,10 +1086,6 @@ base::Optional<network::mojom::BlockedByResponseReason> EnforceCOEP(); - bool IsOverridingUserAgent() const { - return commit_params_->is_overriding_user_agent || entry_overrides_ua_; - } - // Returns the user-agent override, or an empty string if one isn't set. std::string GetUserAgentOverride();
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 2959182..e248136 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -8633,6 +8633,14 @@ ukm_recorder); } + if (!is_same_document_navigation) { + DCHECK_EQ(navigation_request->IsOverridingUserAgent() && + frame_tree_node_->IsMainFrame(), + params->is_overriding_user_agent); + } else { + DCHECK_EQ(is_overriding_user_agent_, params->is_overriding_user_agent); + } + // TODO(https://crbug.com/1131832): Do not pass |params| to DidNavigate(). frame_tree_node()->navigator().DidNavigate(this, *params, std::move(navigation_request), @@ -8754,6 +8762,9 @@ is_mhtml_document_ = navigation_request->IsWaitingToCommit() && navigation_request->IsLoadedFromMhtmlArchive(); + is_overriding_user_agent_ = navigation_request->IsOverridingUserAgent() && + frame_tree_node_->IsMainFrame(); + RecordCrossOriginIsolationMetrics(this); CrossOriginOpenerPolicyReporter::InstallAccessMonitorsIfNeeded(
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h index 6008ccb..f30df922 100644 --- a/content/browser/renderer_host/render_frame_host_impl.h +++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -1124,6 +1124,8 @@ bool is_mhtml_document() { return is_mhtml_document_; } + bool is_overriding_user_agent() { return is_overriding_user_agent_; } + // Notifies the render frame that |frame_tree_node_| has had the sticky // user activation bit set for the first time. void DidReceiveFirstUserActivation(); @@ -3102,6 +3104,10 @@ // browser side state as this value is used in security checks. bool is_mhtml_document_ = false; + // Whether the currently committed document is overriding the user agent or + // not. + bool is_overriding_user_agent_ = false; + // The last reported character encoding, not canonicalized. std::string last_reported_encoding_;
diff --git a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc index 1526222..9695520 100644 --- a/content/browser/renderer_host/render_frame_host_manager_browsertest.cc +++ b/content/browser/renderer_host/render_frame_host_manager_browsertest.cc
@@ -3933,7 +3933,7 @@ " +--Site B -- proxies for A\n" "Where A = http://a.com/\n" " B = http://b.com/", - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } else { const GURL kExpectedSiteURL = AreDefaultSiteInstancesEnabled() ? SiteInstanceImpl::GetDefaultSiteURL() @@ -3945,7 +3945,7 @@ " +--Site A\n" "Where A = ") + kExpectedSiteURL.spec(), - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); } FrameTreeNode* bottom_child = root->child_at(0)->child_at(0)->child_at(0)->child_at(0); @@ -4001,7 +4001,7 @@ " +--Site A\n" "Where A = ") + kExpectedSiteURL.spec(), - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); // The URL of the grandchild has not changed. EXPECT_EQ(expected_url, grandchild->current_url()); @@ -4035,7 +4035,7 @@ " +--Site A\n" "Where A = ") + kExpectedSiteURL.spec(), - FrameTreeVisualizer().DepictFrameTree(root)); + DepictFrameTree(*root)); EXPECT_EQ(GURL(url::kAboutBlankURL), root->child_at(0)->child_at(0)->current_url()); @@ -9086,8 +9086,6 @@ IN_PROC_BROWSER_TEST_P(RenderFrameHostManagerTest, RemoveSubframeInUnload_SameSite) { // TODO(https://crbug.com/1148793): Remove this early return. - if (ShouldCreateNewHostForSameSiteSubframe()) - return; AssertCanRemoveSubframeInUnload(/*same_site=*/true); }
diff --git a/content/browser/resources/conversions/conversion_internals.html b/content/browser/resources/conversions/conversion_internals.html index 1060896f..c19a428 100644 --- a/content/browser/resources/conversions/conversion_internals.html +++ b/content/browser/resources/conversions/conversion_internals.html
@@ -7,21 +7,9 @@ <meta charset="utf-8"> <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> <link rel="stylesheet" href="chrome://resources/css/roboto.css"> - <script src="chrome://resources/js/assert.js"></script> - <script src="chrome://resources/js/util.js"></script> - <script src="chrome://resources/js/cr.js"></script> - <script src="chrome://resources/js/cr/ui.js"></script> - <script src="chrome://resources/js/cr/ui/tree.js"></script> - - <script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"> - </script> - <script src="chrome://resources/mojo/mojo/public/mojom/base/unguessable_token.mojom-lite.js"></script> - <script src="chrome://resources/mojo/url/mojom/url.mojom-lite.js"></script> - <script src="chrome://resources/mojo/url/mojom/origin.mojom-lite.js"></script> <link rel="stylesheet" href="conversion_internals.css"> - <script src="conversion_internals.mojom-lite.js"></script> - <script src="conversion_internals.js"></script> + <script type="module" src="conversion_internals.js"></script> <title>Conversion Internals</title> </head> <body>
diff --git a/content/browser/resources/conversions/conversion_internals.js b/content/browser/resources/conversions/conversion_internals.js index 679ed861..4033673 100644 --- a/content/browser/resources/conversions/conversion_internals.js +++ b/content/browser/resources/conversions/conversion_internals.js
@@ -2,24 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -(function() { -'use strict'; +import {$} from 'chrome://resources/js/util.m.js'; +import {Origin} from 'chrome://resources/mojo/url/mojom/origin.mojom-webui.js'; + +import {ConversionInternalsHandler, ConversionInternalsHandlerRemote, WebUIImpression} from './conversion_internals.mojom-webui.js'; /** * Reference to the backend providing all the data. - * @type {mojom.ConversionInternalsHandlerRemote} + * @type {ConversionInternalsHandlerRemote} */ let pageHandler = null; /** * All impressions held in storage at last update. - * @type {!Array<!mojom.Impression>} + * @type {!Array<!WebUIImpression>} */ let impressions = null; /** * All impressions held in storage at last update. - * @type {!Array<!mojom.Impression>} + * @type {!Array<!WebUIImpression>} */ let reports = null; @@ -33,7 +35,7 @@ /** * Converts a mojo origin into a user-readable string, omitting default ports. - * @param {url.mojom.Origin} origin Origin to convert + * @param {Origin} origin Origin to convert * @return {string} */ function UrlToText(origin) { @@ -52,7 +54,7 @@ /** * Creates a single row for the impression table. - * @param {!mojom.Impression} impression The info to create the row. + * @param {!WebIUIImpression} impression The info to create the row. * @return {!HTMLElement} */ function createImpressionRow(impression) { @@ -70,7 +72,7 @@ /** * Creates a single row for the impression table. - * @param {!mojom.Impression} impression The info to create the row. + * @param {!WebUIImpression} impression The info to create the row. * @return {!HTMLElement} */ function createReportRow(report) { @@ -175,7 +177,7 @@ document.addEventListener('DOMContentLoaded', function() { // Setup the mojo interface. - pageHandler = mojom.ConversionInternalsHandler.getRemote(); + pageHandler = ConversionInternalsHandler.getRemote(); $('refresh').addEventListener('click', updatePageData); $('clear-data').addEventListener('click', clearStorage); @@ -185,4 +187,3 @@ setInterval(updatePageData, 2 * 60 * 1000); updatePageData(); }); -})();
diff --git a/content/browser/resources/gpu/browser_bridge.js b/content/browser/resources/gpu/browser_bridge.js index 4fe53ca..e06e851 100644 --- a/content/browser/resources/gpu/browser_bridge.js +++ b/content/browser/resources/gpu/browser_bridge.js
@@ -1,158 +1,139 @@ // Copyright (c) 2011 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. -cr.define('gpu', function() { + +import {dispatchSimpleEvent} from 'chrome://resources/js/cr.m.js'; +import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js'; + + +/** + * This class provides a 'bridge' for communicating between javascript and the + * browser. When run outside of WebUI, e.g. as a regular webpage, it provides + * synthetic data to assist in testing. + */ +export class BrowserBridge extends EventTarget { + constructor() { + super(); + this.nextRequestId_ = 0; + this.pendingCallbacks_ = []; + this.logMessages_ = []; + + // Tell c++ code that we are ready to receive GPU Info. + chrome.send('browserBridgeInitialized'); + this.beginRequestClientInfo_(); + this.beginRequestLogMessages_(); + } + + applySimulatedData_(data) { + // set up things according to the simulated data + this.gpuInfo_ = data.gpuInfo; + this.clientInfo_ = data.clientInfo; + this.logMessages_ = data.logMessages; + dispatchSimpleEvent(this, 'gpuInfoUpdate'); + dispatchSimpleEvent(this, 'clientInfoChange'); + dispatchSimpleEvent(this, 'logMessagesChange'); + } + /** - * This class provides a 'bridge' for communicating between javascript and the - * browser. When run outside of WebUI, e.g. as a regular webpage, it provides - * synthetic data to assist in testing. + * Sends a message to the browser with specified args. The + * browser will reply asynchronously via the provided callback. */ - class BrowserBridge extends cr.EventTarget { - constructor() { - super(); - // If we are not running inside WebUI, output chrome.send messages - // to the console to help with quick-iteration debugging. - this.debugMode_ = (chrome.send === undefined && console.log); - if (this.debugMode_) { - const browserBridgeTests = document.createElement('script'); - browserBridgeTests.src = './gpu_internals/browser_bridge_tests.js'; - document.body.appendChild(browserBridgeTests); - } - - this.nextRequestId_ = 0; - this.pendingCallbacks_ = []; - this.logMessages_ = []; - - // Tell c++ code that we are ready to receive GPU Info. - if (!this.debugMode_) { - chrome.send('browserBridgeInitialized'); - this.beginRequestClientInfo_(); - this.beginRequestLogMessages_(); - } - } - - applySimulatedData_(data) { - // set up things according to the simulated data - this.gpuInfo_ = data.gpuInfo; - this.clientInfo_ = data.clientInfo; - this.logMessages_ = data.logMessages; - cr.dispatchSimpleEvent(this, 'gpuInfoUpdate'); - cr.dispatchSimpleEvent(this, 'clientInfoChange'); - cr.dispatchSimpleEvent(this, 'logMessagesChange'); - } - - /** - * Returns true if the page is hosted inside Chrome WebUI - * Helps have behavior conditional to emulate_webui.py - */ - get debugMode() { - return this.debugMode_; - } - - /** - * Sends a message to the browser with specified args. The - * browser will reply asynchronously via the provided callback. - */ - callAsync(submessage, args, callback) { - const requestId = this.nextRequestId_; - this.nextRequestId_ += 1; - this.pendingCallbacks_[requestId] = callback; - if (!args) { - chrome.send('callAsync', [requestId.toString(), submessage]); - } else { - const allArgs = [requestId.toString(), submessage].concat(args); - chrome.send('callAsync', allArgs); - } - } - - /** - * Called by gpu c++ code when client info is ready. - */ - onCallAsyncReply(requestId, args) { - if (this.pendingCallbacks_[requestId] === undefined) { - throw new Error('requestId ' + requestId + ' is not pending'); - } - const callback = this.pendingCallbacks_[requestId]; - callback(args); - delete this.pendingCallbacks_[requestId]; - } - - /** - * Get gpuInfo data. - */ - get gpuInfo() { - return this.gpuInfo_; - } - - /** - * Called from gpu c++ code when GPU Info is updated. - */ - onGpuInfoUpdate(gpuInfo) { - this.gpuInfo_ = gpuInfo; - cr.dispatchSimpleEvent(this, 'gpuInfoUpdate'); - } - - /** - * This function begins a request for the ClientInfo. If it comes back - * as undefined, then we will issue the request again in 250ms. - */ - beginRequestClientInfo_() { - this.callAsync( - 'requestClientInfo', undefined, - (function(data) { - if (data === undefined) { // try again in 250 ms - window.setTimeout(this.beginRequestClientInfo_.bind(this), 250); - } else { - this.clientInfo_ = data; - cr.dispatchSimpleEvent(this, 'clientInfoChange'); - } - }).bind(this)); - } - - /** - * Returns information about the currently running Chrome build. - */ - get clientInfo() { - return this.clientInfo_; - } - - /** - * This function checks for new GPU_LOG messages. - * If any are found, a refresh is triggered. - */ - beginRequestLogMessages_() { - this.callAsync( - 'requestLogMessages', undefined, - (function(messages) { - if (messages.length !== this.logMessages_.length) { - this.logMessages_ = messages; - cr.dispatchSimpleEvent(this, 'logMessagesChange'); - } - // check again in 250 ms - window.setTimeout(this.beginRequestLogMessages_.bind(this), 250); - }).bind(this)); - } - - /** - * Returns an array of log messages issued by the GPU process, if any. - */ - get logMessages() { - return this.logMessages_; - } - - /** - * Returns the value of the "Sandboxed" row. - */ - isSandboxedForTesting() { - for (i = 0; i < this.gpuInfo_.basicInfo.length; ++i) { - const info = this.gpuInfo_.basicInfo[i]; - if (info.description === 'Sandboxed') { - return info.value; - } - } - return false; + callAsync(submessage, args, callback) { + const requestId = this.nextRequestId_; + this.nextRequestId_ += 1; + this.pendingCallbacks_[requestId] = callback; + if (!args) { + chrome.send('callAsync', [requestId.toString(), submessage]); + } else { + const allArgs = [requestId.toString(), submessage].concat(args); + chrome.send('callAsync', allArgs); } } - return {BrowserBridge: BrowserBridge}; -}); + /** + * Called by gpu c++ code when client info is ready. + */ + onCallAsyncReply(requestId, args) { + if (this.pendingCallbacks_[requestId] === undefined) { + throw new Error('requestId ' + requestId + ' is not pending'); + } + const callback = this.pendingCallbacks_[requestId]; + callback(args); + delete this.pendingCallbacks_[requestId]; + } + + /** + * Get gpuInfo data. + */ + get gpuInfo() { + return this.gpuInfo_; + } + + /** + * Called from gpu c++ code when GPU Info is updated. + */ + onGpuInfoUpdate(gpuInfo) { + this.gpuInfo_ = gpuInfo; + dispatchSimpleEvent(this, 'gpuInfoUpdate'); + } + + /** + * This function begins a request for the ClientInfo. If it comes back + * as undefined, then we will issue the request again in 250ms. + */ + beginRequestClientInfo_() { + this.callAsync( + 'requestClientInfo', undefined, + (function(data) { + if (data === undefined) { // try again in 250 ms + window.setTimeout(this.beginRequestClientInfo_.bind(this), 250); + } else { + this.clientInfo_ = data; + dispatchSimpleEvent(this, 'clientInfoChange'); + } + }).bind(this)); + } + + /** + * Returns information about the currently running Chrome build. + */ + get clientInfo() { + return this.clientInfo_; + } + + /** + * This function checks for new GPU_LOG messages. + * If any are found, a refresh is triggered. + */ + beginRequestLogMessages_() { + this.callAsync( + 'requestLogMessages', undefined, + (function(messages) { + if (messages.length !== this.logMessages_.length) { + this.logMessages_ = messages; + dispatchSimpleEvent(this, 'logMessagesChange'); + } + // check again in 250 ms + window.setTimeout(this.beginRequestLogMessages_.bind(this), 250); + }).bind(this)); + } + + /** + * Returns an array of log messages issued by the GPU process, if any. + */ + get logMessages() { + return this.logMessages_; + } + + /** + * Returns the value of the "Sandboxed" row. + */ + isSandboxedForTesting() { + for (const info of this.gpuInfo_.basicInfo) { + if (info.description === 'Sandboxed') { + return info.value; + } + } + return false; + } +}
diff --git a/content/browser/resources/gpu/browser_bridge_tests.js b/content/browser/resources/gpu/browser_bridge_tests.js deleted file mode 100644 index 9cebfac..0000000 --- a/content/browser/resources/gpu/browser_bridge_tests.js +++ /dev/null
@@ -1,297 +0,0 @@ -// Copyright (c) 2012 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. -const commandLineFlags = [ - '--flag-switches-begin', '--show-composited-layer-borders', - '--flag-switches-end' -]; -const commandLineStr = './out/Debug/chrome ' + commandLineFlags.join(' '); - -const glValueArray = [ - 'GL_ARB_compatibility', - 'GL_ARB_copy_buffer', - 'GL_ARB_depth_buffer_float', - 'GL_ARB_depth_clamp', - 'GL_ARB_depth_texture', - 'GL_ARB_draw_buffers', - 'GL_ARB_draw_elements_base_vertex', - 'GL_ARB_draw_instanced', - 'GL_ARB_fragment_coord_conventions', - 'GL_ARB_fragment_program', - 'GL_ARB_fragment_program_shadow', - 'GL_ARB_fragment_shader', - 'GL_ARB_framebuffer_object', - 'GL_ARB_framebuffer_sRGB', - 'GL_ARB_geometry_shader4', - 'GL_ARB_half_float_pixel', - 'GL_ARB_half_float_vertex', - 'GL_ARB_imaging', - 'GL_ARB_map_buffer_range', - 'GL_ARB_multisample', - 'GL_ARB_multitexture', - 'GL_ARB_occlusion_query', - 'GL_ARB_pixel_buffer_object', - 'GL_ARB_point_parameters', - 'GL_ARB_point_sprite', - 'GL_ARB_provoking_vertex', - 'GL_ARB_seamless_cube_map', - 'GL_ARB_shader_objects', - 'GL_ARB_shading_language_100', - 'GL_ARB_shadow', - 'GL_ARB_sync', - 'GL_ARB_texture_border_clamp', - 'GL_ARB_texture_buffer_object', - 'GL_ARB_texture_compression', - 'GL_ARB_texture_compression_rgtc', - 'GL_ARB_texture_cube_map', - 'GL_ARB_texture_env_add', - 'GL_ARB_texture_env_combine', - 'GL_ARB_texture_env_crossbar', - 'GL_ARB_texture_env_dot3', - 'GL_ARB_texture_float', - 'GL_ARB_texture_mirrored_repeat', - 'GL_ARB_texture_multisample', - 'GL_ARB_texture_non_power_of_two', - 'GL_ARB_texture_rectangle', - 'GL_ARB_texture_rg', - 'GL_ARB_transpose_matrix', - 'GL_ARB_uniform_buffer_object', - 'GL_ARB_vertex_array_bgra', - 'GL_ARB_vertex_array_object', - 'GL_ARB_vertex_buffer_object', - 'GL_ARB_vertex_program', - 'GL_ARB_vertex_shader', - 'GL_ARB_window_pos', - 'GL_ATI_draw_buffers', - 'GL_ATI_texture_float', - 'GL_ATI_texture_mirror_once', - 'GL_S3_s3tc', - 'GL_EXT_texture_env_add', - 'GL_EXT_abgr', - 'GL_EXT_bgra', - 'GL_EXT_bindable_uniform', - 'GL_EXT_blend_color', - 'GL_EXT_blend_equation_separate', - 'GL_EXT_blend_func_separate', - 'GL_EXT_blend_minmax', - 'GL_EXT_blend_subtract', - 'GL_EXT_compiled_vertex_array', - 'GL_EXT_Cg_shader', - 'GL_EXT_depth_bounds_test', - 'GL_EXT_direct_state_access', - 'GL_EXT_draw_buffers2', - 'GL_EXT_draw_instanced', - 'GL_EXT_draw_range_elements', - 'GL_EXT_fog_coord', - 'GL_EXT_framebuffer_blit', - 'GL_EXT_framebuffer_multisample', - 'GL_EXTX_framebuffer_mixed_formats', - 'GL_EXT_framebuffer_object', - 'GL_EXT_framebuffer_sRGB', - 'GL_EXT_geometry_shader4', - 'GL_EXT_gpu_program_parameters', - 'GL_EXT_gpu_shader4', - 'GL_EXT_multi_draw_arrays', - 'GL_EXT_packed_depth_stencil', - 'GL_EXT_packed_float', - 'GL_EXT_packed_pixels', - 'GL_EXT_pixel_buffer_object', - 'GL_EXT_point_parameters', - 'GL_EXT_provoking_vertex', - 'GL_EXT_rescale_normal', - 'GL_EXT_secondary_color', - 'GL_EXT_separate_shader_objects', - 'GL_EXT_separate_specular_color', - 'GL_EXT_shadow_funcs', - 'GL_EXT_stencil_two_side', - 'GL_EXT_stencil_wrap', - 'GL_EXT_texture3D', - 'GL_EXT_texture_array', - 'GL_EXT_texture_buffer_object', - 'GL_EXT_texture_compression_latc', - 'GL_EXT_texture_compression_rgtc', - 'GL_EXT_texture_compression_s3tc', - 'GL_EXT_texture_cube_map', - 'GL_EXT_texture_edge_clamp', - 'GL_EXT_texture_env_combine', - 'GL_EXT_texture_env_dot3', - 'GL_EXT_texture_filter_anisotropic', - 'GL_EXT_texture_integer', - 'GL_EXT_texture_lod', - 'GL_EXT_texture_lod_bias', - 'GL_EXT_texture_mirror_clamp', - 'GL_EXT_texture_object', - 'GL_EXT_texture_shared_exponent', - 'GL_EXT_texture_sRGB', - 'GL_EXT_texture_swizzle', - 'GL_EXT_timer_query', - 'GL_EXT_vertex_array', - 'GL_EXT_vertex_array_bgra', - 'GL_IBM_rasterpos_clip', - 'GL_IBM_texture_mirrored_repeat', - 'GL_KTX_buffer_region', - 'GL_NV_blend_square', - 'GL_NV_conditional_render', - 'GL_NV_copy_depth_to_color', - 'GL_NV_copy_image', - 'GL_NV_depth_buffer_float', - 'GL_NV_depth_clamp', - 'GL_NV_explicit_multisample', - 'GL_NV_fence', - 'GL_NV_float_buffer', - 'GL_NV_fog_distance', - 'GL_NV_fragment_program', - 'GL_NV_fragment_program_option', - 'GL_NV_fragment_program2', - 'GL_NV_framebuffer_multisample_coverage', - 'GL_NV_geometry_shader4', - 'GL_NV_gpu_program4', - 'GL_NV_half_float', - 'GL_NV_light_max_exponent', - 'GL_NV_multisample_coverage', - 'GL_NV_multisample_filter_hint', - 'GL_NV_occlusion_query', - 'GL_NV_packed_depth_stencil', - 'GL_NV_parameter_buffer_object', - 'GL_NV_parameter_buffer_object2', - 'GL_NV_pixel_data_range', - 'GL_NV_point_sprite', - 'GL_NV_primitive_restart', - 'GL_NV_register_combiners', - 'GL_NV_register_combiners2', - 'GL_NV_shader_buffer_load', - 'GL_NV_texgen_reflection', - 'GL_NV_texture_barrier', - 'GL_NV_texture_compression_vtc', - 'GL_NV_texture_env_combine4', - 'GL_NV_texture_expand_normal', - 'GL_NV_texture_rectangle', - 'GL_NV_texture_shader', - 'GL_NV_texture_shader2', - 'GL_NV_texture_shader3', - 'GL_NV_transform_feedback', - 'GL_NV_vertex_array_range', - 'GL_NV_vertex_array_range2', - 'GL_NV_vertex_buffer_unified_memory', - 'GL_NV_vertex_program', - 'GL_NV_vertex_program1_1', - 'GL_NV_vertex_program2', - 'GL_NV_vertex_program2_option', - 'GL_NV_vertex_program3', - 'GL_NVX_conditional_render', - 'GL_NVX_gpu_memory_info', - 'GL_SGIS_generate_mipmap', - 'GL_SGIS_texture_lod', - 'GL_SGIX_depth_texture', - 'GL_SGIX_shadow', - 'GL_SUN_slice_accum' -]; -(function() { -const dataSets = [ - { - name: 'full_data_linux', - gpuInfo: { - basic_info: [ - {description: 'Initialization time', value: '111'}, - {description: 'Vendor Id', value: '0x10de'}, - {description: 'Device Id', value: '0x0658'}, - {description: 'Driver vendor', value: 'NVIDIA'}, - {description: 'Driver version', value: '195.36.24'}, - {description: 'Driver date', value: ''}, - {description: 'Pixel shader version', value: '1.50'}, - {description: 'Vertex shader version', value: '1.50'}, - {description: 'GL version', value: '3.2'}, - {description: 'GL_VENDOR', value: 'NVIDIA Corporation'}, - {description: 'GL_RENDERER', value: 'Quadro FX 380/PCI/SSE2'}, - {description: 'GL_VERSION', value: '3.2.0 NVIDIA 195.36.24'}, { - description: 'GL_EXTENSIONS', - value: glValueArray.join(' '), - } - ], - featureStatus: { - featureStatus: [ - {'status': 'enabled', name: '2d_canvas'}, - {'status': 'enabled', name: '3d_css'}, - {'status': 'enabled', name: 'compositing'}, - {'status': 'enabled', name: 'webgl'}, - {'status': 'enabled', name: 'multisampling'} - ], - problems: [] - } - }, - clientInfo: { - command_line: commandLineStr, - version: 'Chrome/12.0.729.0', - }, - logMessages: [] - }, - { - name: 'no_data', - gpuInfo: undefined, - clientInfo: undefined, - logMessages: undefined - }, - { - name: 'logs', - gpuInfo: undefined, - clientInfo: undefined, - logMessages: [{header: 'foo', message: 'Bar'}] - }, - - // tests for 'status' - { - name: 'feature_states', - gpuInfo: { - basic_info: undefined, - featureStatus: { - featureStatus: [ - {'status': 'disabled_off', name: '2d_canvas'}, - {'status': 'unavailable_software', name: '3d_css'}, - {'status': 'disabled_software', name: 'compositing'}, - {'status': 'software', name: 'compositing'}, - {'status': 'unavailable_off', name: 'webgl'}, - {'status': 'enabled', name: 'multisampling'} - ], - problems: [ - {description: 'Something wrong', crBugs: [], webkitBugs: []}, - {description: 'SomethingElse', crBugs: [], webkitBugs: []}, { - description: 'WebKit and Chrome bug', - crBugs: [23456], - webkitBugs: [789, 2123] - } - ] - } - }, - clientInfo: undefined, - logMessages: [] - } - -]; - -const selectEl = document.createElement('select'); -for (let i = 0; i < dataSets.length; ++i) { - const optionEl = document.createElement('option'); - optionEl.textContent = dataSets[i].name; - optionEl.dataSet = dataSets[i]; - selectEl.add(optionEl); -} -selectEl.addEventListener('change', function() { - browserBridge.applySimulatedData_(dataSets[selectEl.selectedIndex]); -}); -selectEl.addEventListener('keydown', function() { - window.setTimeout(function() { - browserBridge.applySimulatedData_(dataSets[selectEl.selectedIndex]); - }, 0); -}); - -const controlEl = document.createElement('div'); -const textEl = document.createElement('span'); -textEl.textContent = 'GPU Info:'; -controlEl.appendChild(textEl); -controlEl.appendChild(selectEl); - -document.querySelector('#debug-div') - .appendChild(controlEl, document.body.firstChild); - -browserBridge.applySimulatedData_(dataSets[0]); -})();
diff --git a/content/browser/resources/gpu/gpu_internals.html b/content/browser/resources/gpu/gpu_internals.html index d29a1a0..0f13f54 100644 --- a/content/browser/resources/gpu/gpu_internals.html +++ b/content/browser/resources/gpu/gpu_internals.html
@@ -31,18 +31,7 @@ </style> <link rel="stylesheet" href="info_view.css"> <link rel="stylesheet" href="chrome://resources/css/widgets.css"> -<script src="chrome://resources/js/cr.js"></script> -<script src="chrome://resources/js/cr/event_target.js"></script> -<script src="chrome://resources/js/cr/ui.js"></script> -<script src="chrome://resources/js/cr/ui/focus_outline_manager.js"></script> -<script src="chrome://resources/js/load_time_data.js"></script> -<script src="chrome://resources/js/assert.js"></script> -<script src="chrome://resources/js/util.js"></script> -<script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"></script> -<script src="chrome://resources/gpu/ipc/common/vulkan_types.mojom-lite.js"></script> -<script src="chrome://resources/gpu/ipc/common/vulkan_info.mojom-lite.js"></script> -<script src="gpu_internals.js"></script> -<script src="strings.js"></script> +<script type="module" src="gpu_internals.js"></script> </head> <body> <div id="debug-div">
diff --git a/content/browser/resources/gpu/gpu_internals.js b/content/browser/resources/gpu/gpu_internals.js index 62f96f6..a6d8781 100644 --- a/content/browser/resources/gpu/gpu_internals.js +++ b/content/browser/resources/gpu/gpu_internals.js
@@ -2,20 +2,28 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// <include src="browser_bridge.js"> -// <include src="info_view.js"> -// <include src="vulkan_info.js"> +import {decorate} from 'chrome://resources/js/cr/ui.m.js'; -let browserBridge; +import {BrowserBridge} from './browser_bridge.js'; +import {makeInfoView} from './info_view.js'; + +// Injected script from C++ or test environments may reference `browserBridge` +// as a property of the global object. +window.browserBridge = new BrowserBridge; /** * Main entry point. called once the page has loaded. */ function onLoad() { - browserBridge = new gpu.BrowserBridge(); - // Create the views. - cr.ui.decorate('#info-view', gpu.InfoView); + decorate('#info-view', makeInfoView(window.browserBridge)); + + // Because of inherent raciness (between the deprecated DevTools API which + // telemtry uses to drive the relevant tests, and the asynchronous loading of + // JS modules like this one) it's possible for telemetry tests to inject code + // *before* `browserBridge` is set and the DOM is populated. This flag is used + // to synchronize script injection by tests to prevent such races. + window.gpuPagePopulated = true; } document.addEventListener('DOMContentLoaded', onLoad);
diff --git a/content/browser/resources/gpu/info_view.js b/content/browser/resources/gpu/info_view.js index b6f9473b..9eaa583 100644 --- a/content/browser/resources/gpu/info_view.js +++ b/content/browser/resources/gpu/info_view.js
@@ -2,18 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import {define as crUiDefine} from 'chrome://resources/js/cr/ui.m.js'; +import {$} from 'chrome://resources/js/util.m.js'; + +import {VulkanInfo} from './vulkan_info.js'; /** * @fileoverview This view displays information on the current GPU * hardware. Its primary usefulness is to allow users to copy-paste * their data in an easy to read format for bug reports. */ -cr.define('gpu', function() { +export function makeInfoView(browserBridge) { /** * Provides information on the GPU process and underlying graphics hardware. * @constructor */ - const InfoView = cr.ui.define('div'); + const InfoView = crUiDefine('div'); InfoView.prototype = { __proto__: HTMLDivElement.prototype, @@ -185,8 +189,7 @@ if (gpuInfo.ANGLEFeatures.length) { ANGLEFeaturesDiv.hidden = false; ANGLEFeaturesList.textContent = ''; - for (i = 0; i < gpuInfo.ANGLEFeatures.length; i++) { - const ANGLEFeature = gpuInfo.ANGLEFeatures[i]; + for (const ANGLEFeature of gpuInfo.ANGLEFeatures) { const ANGLEFeatureEl = this.createANGLEFeatureEl_(ANGLEFeature); ANGLEFeaturesList.appendChild(ANGLEFeatureEl); } @@ -210,7 +213,7 @@ } if (gpuInfo.vulkanInfo) { - const vulkanInfo = new gpu.VulkanInfo(gpuInfo.vulkanInfo); + const vulkanInfo = new VulkanInfo(gpuInfo.vulkanInfo); const data = [{ 'description': 'info', 'value': vulkanInfo.toString(), @@ -324,8 +327,7 @@ if (featureInfo.problems.length) { problemsDiv.hidden = false; problemsList.textContent = ''; - for (i = 0; i < featureInfo.problems.length; i++) { - const problem = featureInfo.problems[i]; + for (const problem of featureInfo.problems) { const problemEl = this.createProblemEl_(problem); problemsList.appendChild(problemEl); } @@ -337,9 +339,9 @@ if (featureInfo.workarounds.length) { workaroundsDiv.hidden = false; workaroundsList.textContent = ''; - for (i = 0; i < featureInfo.workarounds.length; i++) { + for (const workaround of featureInfo.workarounds) { const workaroundEl = document.createElement('li'); - workaroundEl.textContent = featureInfo.workarounds[i]; + workaroundEl.textContent = workaround; workaroundsList.appendChild(workaroundEl); } } else { @@ -536,5 +538,5 @@ } }; - return {InfoView: InfoView}; -}); + return InfoView; +}
diff --git a/content/browser/resources/gpu/vulkan_info.js b/content/browser/resources/gpu/vulkan_info.js index 72c60d2..8bb02c0 100644 --- a/content/browser/resources/gpu/vulkan_info.js +++ b/content/browser/resources/gpu/vulkan_info.js
@@ -2,18 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -cr.define('gpu', function() { - class VulkanInfo { - constructor(base64Data) { - const array = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0)); - const dataView = new DataView(array.buffer); - this.vulkanInfo_ = gpu.mojom.VulkanInfo_Deserialize(dataView); - } +import {VulkanInfo_Deserialize} from './vulkan_info.mojom-webui.js'; - toString() { - return JSON.stringify(this.vulkanInfo_, null, 2); - } +export class VulkanInfo { + constructor(base64Data) { + const array = Uint8Array.from(atob(base64Data), c => c.charCodeAt(0)); + const dataView = new DataView(array.buffer); + this.vulkanInfo_ = VulkanInfo_Deserialize(dataView); } - return {VulkanInfo: VulkanInfo}; -}); + toString() { + return JSON.stringify(this.vulkanInfo_, null, 2); + } +}
diff --git a/content/browser/resources/process/BUILD.gn b/content/browser/resources/process/BUILD.gn index 61867ca..8871fe6 100644 --- a/content/browser/resources/process/BUILD.gn +++ b/content/browser/resources/process/BUILD.gn
@@ -6,13 +6,21 @@ js_type_check("closure_compile") { deps = [ ":process_internals" ] + uses_js_modules = true + closure_flags = + default_closure_args + mojom_js_args + [ + "js_module_root=" + rebase_path(".", root_build_dir), + "js_module_root=" + rebase_path( + "$root_gen_dir/mojom-webui/content/browser/process_internals", + root_build_dir), + ] } js_library("process_internals") { deps = [ - "//content/browser/process_internals:mojo_bindings_js_library_for_compile", - "//ui/webui/resources/js:assert", - "//ui/webui/resources/js:util", - "//ui/webui/resources/js/cr/ui:tree", + "//content/browser/process_internals:mojo_bindings_webui_js", + "//ui/webui/resources/js:util.m", + "//ui/webui/resources/js/cr:ui.m", + "//ui/webui/resources/js/cr/ui:tree.m", ] }
diff --git a/content/browser/resources/process/process_internals.html b/content/browser/resources/process/process_internals.html index 21ba2fe..f1072e7 100644 --- a/content/browser/resources/process/process_internals.html +++ b/content/browser/resources/process/process_internals.html
@@ -6,20 +6,9 @@ <head> <meta charset="utf-8"> <link rel="stylesheet" href="chrome://resources/css/text_defaults.css"> - <script src="chrome://resources/js/assert.js"></script> - <script src="chrome://resources/js/util.js"></script> - <script src="chrome://resources/js/cr.js"></script> - <script src="chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js"> - </script> - <script src="chrome://resources/mojo/url/mojom/url.mojom-lite.js"></script> - <link rel="stylesheet" href="chrome://resources/css/tree.css"> - <script src="chrome://resources/js/cr/ui.js"></script> - <script src="chrome://resources/js/cr/ui/tree.js"></script> - <link rel="stylesheet" href="process_internals.css"> - <script src="process_internals.mojom-lite.js"></script> - <script src='process_internals.js'></script> + <script type="module" src='process_internals.js'></script> <title>Process Model Internals</title> </head> <body>
diff --git a/content/browser/resources/process/process_internals.js b/content/browser/resources/process/process_internals.js index af659f7..2193714 100644 --- a/content/browser/resources/process/process_internals.js +++ b/content/browser/resources/process/process_internals.js
@@ -2,12 +2,15 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -(function() { -'use strict'; +import {decorate} from 'chrome://resources/js/cr/ui.m.js'; +import {Tree, TreeItem} from 'chrome://resources/js/cr/ui/tree.m.js'; +import {$} from 'chrome://resources/js/util.m.js'; + +import {FrameInfo, ProcessInternalsHandler, ProcessInternalsHandlerRemote, WebContentsInfo} from './process_internals.mojom-webui.js'; /** * Reference to the backend providing all the data. - * @type {mojom.ProcessInternalsHandlerRemote} + * @type {ProcessInternalsHandlerRemote} */ let pageHandler = null; @@ -61,19 +64,19 @@ /** * Root of the WebContents tree. - * @type {cr.ui.Tree|null} + * @type {Tree|null} */ let treeViewRoot = null; /** * Initialize and return |treeViewRoot|. - * @return {cr.ui.Tree} Initialized |treeViewRoot|. + * @return {Tree} Initialized |treeViewRoot|. */ function getTreeViewRoot() { if (!treeViewRoot) { - cr.ui.decorate('#tree-view', cr.ui.Tree); + decorate('#tree-view', Tree); - treeViewRoot = /** @type {cr.ui.Tree} */ ($('tree-view')); + treeViewRoot = /** @type {Tree} */ ($('tree-view')); treeViewRoot.detail = {payload: {}, children: {}}; } return treeViewRoot; @@ -82,7 +85,7 @@ /** * Initialize and return a tree item representing a FrameInfo object and * recursively creates its subframe objects. - * @param {mojom.FrameInfo} frame + * @param {FrameInfo} frame * @return {Array} */ function frameToTreeItem(frame) { @@ -109,8 +112,8 @@ itemLabel += ` | url: ${frame.lastCommittedUrl.url}`; } - const item = new cr.ui.TreeItem( - {label: itemLabel, detail: {payload: {}, children: {}}}); + const item = + new TreeItem({label: itemLabel, detail: {payload: {}, children: {}}}); item.mayHaveChildren_ = true; item.expanded = true; item.icon = ''; @@ -131,8 +134,8 @@ /** * Initialize and return a tree item representing the WebContentsInfo object * and contains all frames in it as a subtree. - * @param {mojom.WebContentsInfo} webContents - * @return {!cr.ui.TreeItem} + * @param {WebContentsInfo} webContents + * @return {!TreeItem} */ function webContentsToTreeItem(webContents) { let itemLabel = 'WebContents: '; @@ -140,8 +143,8 @@ itemLabel += webContents.title + ', '; } - const item = new cr.ui.TreeItem( - {label: itemLabel, detail: {payload: {}, children: {}}}); + const item = + new TreeItem({label: itemLabel, detail: {payload: {}, children: {}}}); item.mayHaveChildren_ = true; item.expanded = true; item.icon = ''; @@ -171,16 +174,15 @@ /** * This is a callback which is invoked when the data for WebContents * associated with the browser profile is received from the browser process. - * @param {mojom.ProcessInternalsHandler_GetAllWebContentsInfo_ResponseParams} - * input + * @param {!Array<!WebContentsInfo>} infos */ -function populateWebContentsTab(input) { +function populateWebContentsTab(infos) { const tree = getTreeViewRoot(); // Clear the tree first before populating it with the new content. tree.innerText = ''; - for (const webContents of input.infos) { + for (const webContents of infos) { const item = webContentsToTreeItem(webContents); tree.add(item); } @@ -190,8 +192,9 @@ * Function which retrieves the data for all WebContents associated with the * current browser profile. The result is passed to populateWebContentsTab. */ -function loadWebContentsInfo() { - pageHandler.getAllWebContentsInfo().then(populateWebContentsTab); +async function loadWebContentsInfo() { + const {infos} = await pageHandler.getAllWebContentsInfo(); + populateWebContentsTab(infos); } /** @@ -252,7 +255,7 @@ document.addEventListener('DOMContentLoaded', function() { // Setup Mojo interface to the backend. - pageHandler = mojom.ProcessInternalsHandler.getRemote(); + pageHandler = ProcessInternalsHandler.getRemote(); // Get the Site Isolation mode and populate it. pageHandler.getIsolationMode().then((response) => { @@ -269,4 +272,3 @@ $('refresh-button').addEventListener('click', loadWebContentsInfo); }); -})();
diff --git a/content/browser/service_worker/service_worker_registry.cc b/content/browser/service_worker/service_worker_registry.cc index 5e66b4f..7d83c82 100644 --- a/content/browser/service_worker/service_worker_registry.cc +++ b/content/browser/service_worker/service_worker_registry.cc
@@ -128,6 +128,36 @@ callback_; }; +class ServiceWorkerRegistry::InflightCallApplyPolicyUpdates + : public ServiceWorkerRegistry::InflightCall { + public: + InflightCallApplyPolicyUpdates( + std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> policy_updates, + base::RepeatingCallback< + void(storage::mojom::ServiceWorkerDatabaseStatus status)> callback) + : policy_updates_(std::move(policy_updates)), + callback_(std::move(callback)) {} + ~InflightCallApplyPolicyUpdates() override = default; + + void Run(ServiceWorkerRegistry* registry) override { + DCHECK(registry); + DCHECK(registry->GetRemoteStorageControl().is_connected()); + std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> + passed_policy_updates; + for (const auto& entry : policy_updates_) + passed_policy_updates.push_back(entry.Clone()); + + registry->GetRemoteStorageControl()->ApplyPolicyUpdates( + std::move(passed_policy_updates), callback_); + } + + private: + std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> policy_updates_; + base::RepeatingCallback<void( + storage::mojom::ServiceWorkerDatabaseStatus status)> + callback_; +}; + // A helper class that runs on the IO thread to observe storage policy updates. class ServiceWorkerRegistry::StoragePolicyObserver : public storage::SpecialStoragePolicy::Observer { @@ -1407,6 +1437,13 @@ FinishRemoteCall(call_id); } +void ServiceWorkerRegistry::DidApplyPolicyUpdates( + uint64_t call_id, + storage::mojom::ServiceWorkerDatabaseStatus status) { + DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + FinishRemoteCall(call_id); +} + void ServiceWorkerRegistry::DidGetRegisteredOriginsOnStartup( const std::vector<url::Origin>& origins) { DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); @@ -1440,8 +1477,14 @@ } } - if (!policy_updates.empty()) - GetRemoteStorageControl()->ApplyPolicyUpdates(std::move(policy_updates)); + if (!policy_updates.empty()) { + uint64_t call_id = GetNextCallId(); + auto call = std::make_unique<InflightCallApplyPolicyUpdates>( + std::move(policy_updates), + base::BindRepeating(&ServiceWorkerRegistry::DidApplyPolicyUpdates, + weak_factory_.GetWeakPtr(), call_id)); + StartRemoteCall(call_id, std::move(call)); + } } bool ServiceWorkerRegistry::ShouldPurgeOnShutdown(const url::Origin& origin) {
diff --git a/content/browser/service_worker/service_worker_registry.h b/content/browser/service_worker/service_worker_registry.h index c10a3508..826e653 100644 --- a/content/browser/service_worker/service_worker_registry.h +++ b/content/browser/service_worker/service_worker_registry.h
@@ -253,6 +253,8 @@ private: friend class ServiceWorkerRegistryTest; FRIEND_TEST_ALL_PREFIXES(ServiceWorkerRegistryTest, StoragePolicyChange); + FRIEND_TEST_ALL_PREFIXES(ServiceWorkerRegistryTest, + RetryInflightCalls_ApplyPolicyUpdates); void Start(); @@ -385,6 +387,9 @@ const std::vector<url::Origin>& origins); void DidPerformStorageCleanup(base::OnceClosure callback, uint64_t call_id); void DidDisable(uint64_t call_id); + void DidApplyPolicyUpdates( + uint64_t call_id, + storage::mojom::ServiceWorkerDatabaseStatus status); // TODO(bashi): Consider introducing a helper class that handles the below. // These are almost the same as DOMStorageContextWrapper. @@ -410,9 +415,13 @@ // represent a mojo remote call of which parameters are copyable. class InflightCallWithInvoker; - // An InflightCall implementation for StoreRegistration(). This specialization - // is needed to hold move-only parameters and clone them for retry. + // InflightCall implementations that need to clone move-only parameters before + // invoking mojo method calls. + // + // For StoreRegistration(): class InflightCallStoreRegistration; + // For ApplyPolicyUpdates(): + class InflightCallApplyPolicyUpdates; uint64_t GetNextCallId(); void StartRemoteCall(uint64_t call_id, std::unique_ptr<InflightCall> call);
diff --git a/content/browser/service_worker/service_worker_registry_unittest.cc b/content/browser/service_worker/service_worker_registry_unittest.cc index 8213f50..3224837b 100644 --- a/content/browser/service_worker/service_worker_registry_unittest.cc +++ b/content/browser/service_worker/service_worker_registry_unittest.cc
@@ -1642,6 +1642,37 @@ kExpectedRetryCountForRecovery, kExpectedSampleCount); } +// Similar to `StoragePolicyChange` test but restart the remote storage to make +// sure ApplyPolicyUpdates() is retried. +TEST_F(ServiceWorkerRegistryTest, RetryInflightCalls_ApplyPolicyUpdates) { + EnsureRemoteCallsAreExecuted(); + + const GURL kScope("http://www.example.com/scope/"); + const GURL kScriptUrl("http://www.example.com/script.js"); + const auto kOrigin(url::Origin::Create(kScope)); + + scoped_refptr<ServiceWorkerRegistration> registration = + CreateServiceWorkerRegistrationAndVersion(context(), kScope, kScriptUrl, + /*resource_id=*/1); + + ASSERT_EQ(StoreRegistration(registration, registration->waiting_version()), + blink::ServiceWorkerStatusCode::kOk); + EXPECT_FALSE(registry()->ShouldPurgeOnShutdown(kOrigin)); + + // Update storage policy to mark the origin should be purged on shutdown. + EXPECT_EQ(inflight_call_count(), 0U); + special_storage_policy()->AddSessionOnly(kOrigin.GetURL()); + special_storage_policy()->NotifyPolicyChanged(); + EXPECT_EQ(inflight_call_count(), 1U); + + registry()->SimulateStorageRestartForTesting(); + + EnsureRemoteCallsAreExecuted(); + EXPECT_EQ(inflight_call_count(), 0U); + + EXPECT_TRUE(registry()->ShouldPurgeOnShutdown(kOrigin)); +} + class ServiceWorkerRegistryOriginTrialsTest : public ServiceWorkerRegistryTest { public: ServiceWorkerRegistryOriginTrialsTest() {
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc index aaf07b2..afefc51 100644 --- a/content/browser/service_worker/service_worker_storage.cc +++ b/content/browser/service_worker/service_worker_storage.cc
@@ -1189,7 +1189,29 @@ void ServiceWorkerStorage::ApplyPolicyUpdates( const std::vector<storage::mojom::LocalStoragePolicyUpdatePtr>& - policy_updates) { + policy_updates, + DatabaseStatusCallback callback) { + switch (state_) { + case STORAGE_STATE_DISABLED: + std::move(callback).Run(ServiceWorkerDatabase::Status::kErrorDisabled); + return; + case STORAGE_STATE_INITIALIZING: + case STORAGE_STATE_UNINITIALIZED: { + // An explicit clone is needed to pass `policy_updates` to LazyInitialize. + std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> + cloned_policy_updates; + for (const auto& entry : policy_updates) + cloned_policy_updates.push_back(entry.Clone()); + + LazyInitialize(base::BindOnce( + &ServiceWorkerStorage::ApplyPolicyUpdates, weak_factory_.GetWeakPtr(), + std::move(cloned_policy_updates), std::move(callback))); + return; + } + case STORAGE_STATE_INITIALIZED: + break; + } + for (const auto& update : policy_updates) { GURL url = update->origin.GetURL(); if (!update->purge_on_shutdown) @@ -1197,6 +1219,8 @@ else origins_to_purge_on_shutdown_.insert(std::move(url)); } + + std::move(callback).Run(ServiceWorkerDatabase::Status::kOk); } ServiceWorkerStorage::ServiceWorkerStorage(
diff --git a/content/browser/service_worker/service_worker_storage.h b/content/browser/service_worker/service_worker_storage.h index 9c051c5..43836e00 100644 --- a/content/browser/service_worker/service_worker_storage.h +++ b/content/browser/service_worker/service_worker_storage.h
@@ -284,7 +284,8 @@ // Applies |policy_updates|. void ApplyPolicyUpdates( const std::vector<storage::mojom::LocalStoragePolicyUpdatePtr>& - policy_updates); + policy_updates, + DatabaseStatusCallback callback); void LazyInitializeForTest();
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.cc b/content/browser/service_worker/service_worker_storage_control_impl.cc index 362328b..1a1d6e2 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl.cc +++ b/content/browser/service_worker/service_worker_storage_control_impl.cc
@@ -369,8 +369,9 @@ void ServiceWorkerStorageControlImpl::ApplyPolicyUpdates( const std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> - policy_updates) { - storage_->ApplyPolicyUpdates(std::move(policy_updates)); + policy_updates, + ApplyPolicyUpdatesCallback callback) { + storage_->ApplyPolicyUpdates(std::move(policy_updates), std::move(callback)); } void ServiceWorkerStorageControlImpl::GetPurgingResourceIdsForTest(
diff --git a/content/browser/service_worker/service_worker_storage_control_impl.h b/content/browser/service_worker/service_worker_storage_control_impl.h index fe5e558..1ff3a5e 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl.h +++ b/content/browser/service_worker/service_worker_storage_control_impl.h
@@ -148,7 +148,8 @@ void PerformStorageCleanup(PerformStorageCleanupCallback callback) override; void ApplyPolicyUpdates( const std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> - policy_updates) override; + policy_updates, + ApplyPolicyUpdatesCallback callback) override; void GetPurgingResourceIdsForTest( GetPurgingResourceIdsForTestCallback callback) override; void GetPurgeableResourceIdsForTest(
diff --git a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc index a25ffb7..8e3de3f 100644 --- a/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc +++ b/content/browser/service_worker/service_worker_storage_control_impl_unittest.cc
@@ -1447,7 +1447,14 @@ std::vector<storage::mojom::LocalStoragePolicyUpdatePtr> updates; updates.push_back(storage::mojom::LocalStoragePolicyUpdate::New( url::Origin::Create(kScope2.GetOrigin()), /*purge_on_shutdown=*/true)); - storage()->ApplyPolicyUpdates(std::move(updates)); + base::RunLoop loop; + storage()->ApplyPolicyUpdates( + std::move(updates), + base::BindLambdaForTesting([&](DatabaseStatus status) { + EXPECT_EQ(status, DatabaseStatus::kOk); + loop.Quit(); + })); + loop.Run(); // Restart the storage and check the registration for |kScope1| exists // but not for |kScope2|.
diff --git a/content/browser/web_package/signed_exchange_handler.cc b/content/browser/web_package/signed_exchange_handler.cc index 094aa7a..51a99af 100644 --- a/content/browser/web_package/signed_exchange_handler.cc +++ b/content/browser/web_package/signed_exchange_handler.cc
@@ -540,14 +540,10 @@ if (!net::asn1::HasCanSignHttpExchangesDraftExtension( net::x509_util::CryptoBufferAsStringPiece( verified_cert->cert_buffer())) && - !base::FeatureList::IsEnabled( - features::kAllowSignedHTTPExchangeCertsWithoutExtension) && !unverified_cert_chain_->ShouldIgnoreErrors()) { signed_exchange_utils::ReportErrorAndTraceEvent( devtools_proxy_.get(), - "Certificate must have CanSignHttpExchangesDraft extension. To ignore " - "this error for testing, enable " - "chrome://flags/#allow-sxg-certs-without-extension.", + "Certificate must have CanSignHttpExchangesDraft extension.", std::make_pair(0 /* signature_index */, SignedExchangeError::Field::kSignatureCertUrl)); return SignedExchangeLoadResult::kCertRequirementsNotMet;
diff --git a/content/browser/web_package/signed_exchange_handler_unittest.cc b/content/browser/web_package/signed_exchange_handler_unittest.cc index cfa20744..66eb121 100644 --- a/content/browser/web_package/signed_exchange_handler_unittest.cc +++ b/content/browser/web_package/signed_exchange_handler_unittest.cc
@@ -656,32 +656,6 @@ EXPECT_EQ(static_cast<int>(expected_payload.size()), rv); } -TEST_P(SignedExchangeHandlerTest, CertWithoutExtensionAllowedByFeatureFlag) { - base::test::ScopedFeatureList scoped_feature_list_; - scoped_feature_list_.InitAndEnableFeature( - features::kAllowSignedHTTPExchangeCertsWithoutExtension); - - mock_cert_fetcher_factory_->ExpectFetch( - GURL("https://cert.example.org/cert.msg"), - GetTestFileContents("test.example.org-noext.public.pem.cbor")); - SetupMockCertVerifier("prime256v1-sha256-noext.public.pem", - CreateCertVerifyResult()); - SetSourceStreamContents("test.example.org_noext_test.sxg"); - - CreateSignedExchangeHandler(CreateTestURLRequestContext()); - WaitForHeader(); - - ASSERT_TRUE(read_header()); - EXPECT_EQ(SignedExchangeLoadResult::kSuccess, result()); - EXPECT_EQ(net::OK, error()); - std::string payload; - int rv = ReadPayloadStream(&payload); - std::string expected_payload = GetTestFileContents("test.html"); - - EXPECT_EQ(expected_payload, payload); - EXPECT_EQ(static_cast<int>(expected_payload.size()), rv); -} - TEST_P(SignedExchangeHandlerTest, CertWithoutExtensionAllowedByIgnoreErrorsSPKIListFlag) { SetIgnoreCertificateErrorsSPKIList(kPEMECDSAP256SPKIHash);
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc index c6868a6..c981331 100644 --- a/content/browser/webauth/authenticator_impl_unittest.cc +++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -3947,6 +3947,11 @@ device::VirtualCtap2Device::Config config; config.pin_support = true; config.always_uv = true; + + // Enable u2f support. Normally, this would allow chrome to create a + // credential without internal user verification, but we should not attempt + // that with the alwaysUv flag on. + config.u2f_support = true; virtual_device_factory_->SetCtap2Config(config); virtual_device_factory_->mutable_state()->pin = kTestPIN; test_client_.expected = {{device::kMaxPinRetries, kTestPIN}}; @@ -4192,6 +4197,7 @@ device::VirtualCtap2Device::Config config; config.pin_support = true; config.always_uv = true; + config.u2f_support = true; virtual_device_factory_->SetCtap2Config(config); virtual_device_factory_->mutable_state()->pin = kTestPIN; PublicKeyCredentialRequestOptionsPtr options =
diff --git a/content/browser/webui/shared_resources_data_source.cc b/content/browser/webui/shared_resources_data_source.cc index 548e8d6..f4418345 100644 --- a/content/browser/webui/shared_resources_data_source.cc +++ b/content/browser/webui/shared_resources_data_source.cc
@@ -81,6 +81,7 @@ return std::map<int, std::string>{ {IDR_ORIGIN_MOJO_HTML, "mojo/url/mojom/origin.mojom.html"}, {IDR_ORIGIN_MOJO_JS, "mojo/url/mojom/origin.mojom-lite.js"}, + {IDR_ORIGIN_MOJO_WEBUI_JS, "mojo/url/mojom/origin.mojom-webui.js"}, {IDR_UNGUESSABLE_TOKEN_MOJO_HTML, "mojo/mojo/public/mojom/base/unguessable_token.mojom.html"}, {IDR_UNGUESSABLE_TOKEN_MOJO_JS, @@ -88,8 +89,8 @@ {IDR_URL_MOJO_HTML, "mojo/url/mojom/url.mojom.html"}, {IDR_URL_MOJO_JS, "mojo/url/mojom/url.mojom-lite.js"}, {IDR_URL_MOJOM_WEBUI_JS, "mojo/url/mojom/url.mojom-webui.js"}, - {IDR_VULKAN_INFO_MOJO_JS, "gpu/ipc/common/vulkan_info.mojom-lite.js"}, - {IDR_VULKAN_TYPES_MOJO_JS, "gpu/ipc/common/vulkan_types.mojom-lite.js"}, + {IDR_VULKAN_INFO_MOJO_JS, "gpu/ipc/common/vulkan_info.mojom-webui.js"}, + {IDR_VULKAN_TYPES_MOJO_JS, "gpu/ipc/common/vulkan_types.mojom-webui.js"}, }; }
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc index 829407a2..cf8a1a6 100644 --- a/content/child/runtime_features.cc +++ b/content/child/runtime_features.cc
@@ -368,6 +368,7 @@ blink::features::kIgnoreCrossOriginWindowWhenNamedAccessOnWindow}, {"LangClientHintHeader", features::kLangClientHintHeader}, {"LayoutNG", blink::features::kLayoutNG}, + {"LayoutNGTable", blink::features::kLayoutNGTable}, {"LayoutNGFieldset", blink::features::kLayoutNGFieldset}, {"LayoutNGFragmentItem", blink::features::kFragmentItem}, {"LayoutNGTextControl", blink::features::kLayoutNGTextControl},
diff --git a/content/content_resources.grd b/content/content_resources.grd index 6c27e86c..036574f 100644 --- a/content/content_resources.grd +++ b/content/content_resources.grd
@@ -28,6 +28,7 @@ <include name="IDR_HISTOGRAMS_INTERNALS_JS" file="browser/resources/histograms/histograms_internals.js" type="BINDATA" /> <include name="IDR_ORIGIN_MOJO_HTML" file="${root_gen_dir}/url/mojom/origin.mojom.html" use_base_dir="false" type="BINDATA" /> <include name="IDR_ORIGIN_MOJO_JS" file="${root_gen_dir}/url/mojom/origin.mojom-lite.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_ORIGIN_MOJO_WEBUI_JS" file="${root_gen_dir}/mojom-webui/url/mojom/origin.mojom-webui.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_UKM_INTERNALS_HTML" file="../components/ukm/debug/ukm_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_UKM_INTERNALS_JS" file="../components/ukm/debug/ukm_internals.js" type="BINDATA" /> <include name="IDR_UKM_INTERNALS_CSS" file="../components/ukm/debug/ukm_internals.css" type="BINDATA" /> @@ -36,8 +37,8 @@ <include name="IDR_URL_MOJO_HTML" file="${root_gen_dir}/url/mojom/url.mojom.html" use_base_dir="false" type="BINDATA" /> <include name="IDR_URL_MOJO_JS" file="${root_gen_dir}/url/mojom/url.mojom-lite.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_URL_MOJOM_WEBUI_JS" file="${root_gen_dir}/mojom-webui/url/mojom/url.mojom-webui.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_VULKAN_INFO_MOJO_JS" file="${root_gen_dir}/gpu/ipc/common/vulkan_info.mojom-lite.js" use_base_dir="false" type="BINDATA" /> - <include name="IDR_VULKAN_TYPES_MOJO_JS" file="${root_gen_dir}/gpu/ipc/common/vulkan_types.mojom-lite.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_VULKAN_INFO_MOJO_JS" file="${root_gen_dir}/mojom-webui/gpu/ipc/common/vulkan_info.mojom-webui.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_VULKAN_TYPES_MOJO_JS" file="${root_gen_dir}/mojom-webui/gpu/ipc/common/vulkan_types.mojom-webui.js" use_base_dir="false" type="BINDATA" /> </includes> </release> </grit>
diff --git a/content/dev_ui_content_resources.grd b/content/dev_ui_content_resources.grd index 38e132b3..d59286d 100644 --- a/content/dev_ui_content_resources.grd +++ b/content/dev_ui_content_resources.grd
@@ -21,9 +21,12 @@ <include name="IDR_CONVERSION_INTERNALS_HTML" file="browser/resources/conversions/conversion_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_CONVERSION_INTERNALS_JS" file="browser/resources/conversions/conversion_internals.js" type="BINDATA" /> <include name="IDR_CONVERSION_INTERNALS_CSS" file="browser/resources/conversions/conversion_internals.css" type="BINDATA" /> - <include name="IDR_CONVERSION_INTERNALS_MOJOM_JS" file="${root_gen_dir}/content/browser/conversions/conversion_internals.mojom-lite.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_CONVERSION_INTERNALS_MOJOM_JS" file="${root_gen_dir}/mojom-webui/content/browser/conversions/conversion_internals.mojom-webui.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_GPU_BROWSER_BRIDGE_JS" file="browser/resources/gpu/browser_bridge.js" type="BINDATA" /> + <include name="IDR_GPU_INFO_VIEW_JS" file="browser/resources/gpu/info_view.js" type="BINDATA" /> <include name="IDR_GPU_INTERNALS_HTML" file="browser/resources/gpu/gpu_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_GPU_INTERNALS_JS" file="browser/resources/gpu/gpu_internals.js" flattenhtml="true" type="BINDATA" /> + <include name="IDR_GPU_INTERNALS_JS" file="browser/resources/gpu/gpu_internals.js" type="BINDATA" /> + <include name="IDR_GPU_VULKAN_INFO_JS" file="browser/resources/gpu/vulkan_info.js" type="BINDATA" /> <include name="IDR_INDEXED_DB_INTERNALS_HTML" file="browser/resources/indexed_db/indexeddb_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> <include name="IDR_INDEXED_DB_INTERNALS_JS" file="browser/resources/indexed_db/indexeddb_internals.js" type="BINDATA" /> <include name="IDR_INDEXED_DB_INTERNALS_CSS" file="browser/resources/indexed_db/indexeddb_internals.css" type="BINDATA" /> @@ -31,7 +34,7 @@ <include name="IDR_NETWORK_ERROR_LISTING_JS" file="browser/resources/net/network_errors_listing.js" type="BINDATA" /> <include name="IDR_NETWORK_ERROR_LISTING_CSS" file="browser/resources/net/network_errors_listing.css" type="BINDATA" /> <include name="IDR_PROCESS_INTERNALS_HTML" file="browser/resources/process/process_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> - <include name="IDR_PROCESS_INTERNALS_MOJO_JS" file="${root_gen_dir}/content/browser/process_internals/process_internals.mojom-lite.js" use_base_dir="false" type="BINDATA" /> + <include name="IDR_PROCESS_INTERNALS_MOJO_JS" file="${root_gen_dir}/mojom-webui/content/browser/process_internals/process_internals.mojom-webui.js" use_base_dir="false" type="BINDATA" /> <include name="IDR_PROCESS_INTERNALS_CSS" file="browser/resources/process/process_internals.css" flattenhtml="true" type="BINDATA" /> <include name="IDR_PROCESS_INTERNALS_JS" file="browser/resources/process/process_internals.js" type="BINDATA" /> <include name="IDR_SERVICE_WORKER_INTERNALS_HTML" file="browser/resources/service_worker/serviceworker_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc index dc3fd9a..ce8905d0 100644 --- a/content/public/common/content_features.cc +++ b/content/public/common/content_features.cc
@@ -29,14 +29,6 @@ "AllowContentInitiatedDataUrlNavigations", base::FEATURE_DISABLED_BY_DEFAULT}; -// Accepts Origin-Signed HTTP Exchanges to be signed with certificates -// that do not have CanSignHttpExchangesDraft extension. -// TODO(https://crbug.com/862003): Remove when certificates with -// CanSignHttpExchangesDraft extension are available from trusted CAs. -const base::Feature kAllowSignedHTTPExchangeCertsWithoutExtension{ - "AllowSignedHTTPExchangeCertsWithoutExtension", - base::FEATURE_DISABLED_BY_DEFAULT}; - // Allows Blink to request fonts from the Android Downloadable Fonts API through // the service implemented on the Java side. const base::Feature kAndroidDownloadableFontsMatching{ @@ -456,14 +448,8 @@ "OpenXrExtendedFeatureSupport", base::FEATURE_DISABLED_BY_DEFAULT}; // History navigation in response to horizontal overscroll (aka gesture-nav). -const base::Feature kOverscrollHistoryNavigation { - "OverscrollHistoryNavigation", -#if defined(OS_ANDROID) - base::FEATURE_DISABLED_BY_DEFAULT -#else - base::FEATURE_ENABLED_BY_DEFAULT -#endif -}; +const base::Feature kOverscrollHistoryNavigation{ + "OverscrollHistoryNavigation", base::FEATURE_ENABLED_BY_DEFAULT}; // Whether web apps can run periodic tasks upon network connectivity. const base::Feature kPeriodicBackgroundSync{"PeriodicBackgroundSync",
diff --git a/content/public/common/content_features.h b/content/public/common/content_features.h index f8a1e77..9940f38 100644 --- a/content/public/common/content_features.h +++ b/content/public/common/content_features.h
@@ -20,8 +20,6 @@ CONTENT_EXPORT extern const base::Feature kAllowContentInitiatedDataUrlNavigations; CONTENT_EXPORT extern const base::Feature kAndroidDownloadableFontsMatching; -CONTENT_EXPORT extern const base::Feature - kAllowSignedHTTPExchangeCertsWithoutExtension; CONTENT_EXPORT extern const base::Feature kAudioServiceLaunchOnStartup; CONTENT_EXPORT extern const base::Feature kAudioServiceOutOfProcess; CONTENT_EXPORT extern const base::Feature kAudioServiceSandbox;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 21582a4..2d17b29 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -5386,10 +5386,14 @@ // Note: Calling swap() will detach and delete |previous_frame|, so do not // reference it after this. WebFrame* previous_web_frame = ResolveWebFrame(previous_routing_id_); + + // With RenderDocument it's possible for the frame to be deleted as a side + // effect of JS event handlers called during swap. + bool is_main_frame = is_main_frame_; if (!previous_web_frame->Swap(frame_)) { // Main frames should always swap successfully because there is no parent // frame to cause them to become detached. - DCHECK(!is_main_frame_); + DCHECK(!is_main_frame); return false; }
diff --git a/content/test/content_browser_test_utils_internal.cc b/content/test/content_browser_test_utils_internal.cc index 2894399..51fa4f1 100644 --- a/content/test/content_browser_test_utils_internal.cc +++ b/content/test/content_browser_test_utils_internal.cc
@@ -299,6 +299,10 @@ return base::StringPrintf("Z%d", static_cast<int>(index - 25)); } +std::string DepictFrameTree(FrameTreeNode& root) { + return FrameTreeVisualizer().DepictFrameTree(&root); +} + Shell* OpenPopup(const ToRenderFrameHost& opener, const GURL& url, const std::string& name) {
diff --git a/content/test/content_browser_test_utils_internal.h b/content/test/content_browser_test_utils_internal.h index af970bc737..bada8ac8 100644 --- a/content/test/content_browser_test_utils_internal.h +++ b/content/test/content_browser_test_utils_internal.h
@@ -103,6 +103,13 @@ DISALLOW_COPY_AND_ASSIGN(FrameTreeVisualizer); }; +// Uses FrameTreeVisualizer to draw a text representation of the FrameTree that +// is appropriate for use in assertions. If you are going to depict multiple +// trees in a single test, you might want to construct a longer-lived instance +// of FrameTreeVisualizer as this will ensure consistent naming of the site +// instances across all calls. +std::string DepictFrameTree(FrameTreeNode& root); + // Uses window.open to open a popup from the frame |opener| with the specified // |url|, |name| and window |features|. |expect_return_from_window_open| is used // to indicate if the caller expects window.open() to return a non-null value.
diff --git a/content/test/data/accessibility/aria/aria-description.html b/content/test/data/accessibility/aria/aria-description.html index 5ce71a6b..ecb299d073 100644 --- a/content/test/data/accessibility/aria/aria-description.html +++ b/content/test/data/accessibility/aria/aria-description.html
@@ -3,6 +3,6 @@ <body> <div aria-label="description" aria-description="Text description" ></div> <div aria-label="both" aria-description="describedby overrides description" aria-describedby="desc1" ></div> - <div role="tooltip" id="desc1">Description from describedby</div> + <div role="tooltip" id="desc1">Description from describedby</div> </body> </html>
diff --git a/content/test/data/accessibility/html/ruby-expected-android.txt b/content/test/data/accessibility/html/ruby-expected-android.txt index 94fa057..3a419b6d 100644 --- a/content/test/data/accessibility/html/ruby-expected-android.txt +++ b/content/test/data/accessibility/html/ruby-expected-android.txt
@@ -1,5 +1,3 @@ android.webkit.WebView focusable focused scrollable ++android.view.View -++++android.view.View -++++++android.view.View name='ruby text' -++++++android.widget.TextView name='ruby base' \ No newline at end of file +++++android.view.View name='ruby base' hint='ruby text' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ruby-expected-auralinux.txt b/content/test/data/accessibility/html/ruby-expected-auralinux.txt index 0fbf4855..f19669a 100644 --- a/content/test/data/accessibility/html/ruby-expected-auralinux.txt +++ b/content/test/data/accessibility/html/ruby-expected-auralinux.txt
@@ -1,6 +1,4 @@ [document web] ++[section] -++++[static] -++++++[panel] -++++++++[static] name='ruby text' -++++++[static] name='ruby base' +++++[section] description='ruby text' described-by +++++++[static] name='ruby base' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ruby-expected-blink.txt b/content/test/data/accessibility/html/ruby-expected-blink.txt index 92dff8bc..b20688d9 100644 --- a/content/test/data/accessibility/html/ruby-expected-blink.txt +++ b/content/test/data/accessibility/html/ruby-expected-blink.txt
@@ -1,9 +1,7 @@ rootWebArea ++genericContainer ignored ++++genericContainer -++++++ruby -++++++++rubyAnnotation -++++++++++staticText name='ruby text' -++++++++++++inlineTextBox name='ruby text' +++++++ruby description='ruby text' descriptionFrom=relatedElement ++++++++staticText name='ruby base' ++++++++++inlineTextBox name='ruby base' +++++++++rubyAnnotation ignored name='ruby text' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ruby-expected-mac.txt b/content/test/data/accessibility/html/ruby-expected-mac.txt index 3990f8e..7e64c556 100644 --- a/content/test/data/accessibility/html/ruby-expected-mac.txt +++ b/content/test/data/accessibility/html/ruby-expected-mac.txt
@@ -1,4 +1,4 @@ AXWebArea ++AXGroup -++++AXStaticText AXValue='ruby text' -++++AXStaticText AXValue='ruby base' +++++AXGroup AXHelp='ruby text' +++++++AXStaticText AXValue='ruby base' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ruby-expected-uia-win.txt b/content/test/data/accessibility/html/ruby-expected-uia-win.txt index 18fc8a4..51df88a26 100644 --- a/content/test/data/accessibility/html/ruby-expected-uia-win.txt +++ b/content/test/data/accessibility/html/ruby-expected-uia-win.txt
@@ -1,6 +1,4 @@ Document ++Group IsControlElement=false -++++Pane IsControlElement=false -++++++Text IsControlElement=false -++++++++Text Name='ruby text' -++++++Text Name='ruby base' +++++Group +++++++Text Name='ruby base' \ No newline at end of file
diff --git a/content/test/data/accessibility/html/ruby-expected-win.txt b/content/test/data/accessibility/html/ruby-expected-win.txt index eaee683..cfe70c7 100644 --- a/content/test/data/accessibility/html/ruby-expected-win.txt +++ b/content/test/data/accessibility/html/ruby-expected-win.txt
@@ -1,6 +1,4 @@ ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ++IA2_ROLE_SECTION -++++IA2_ROLE_TEXT_FRAME -++++++ROLE_SYSTEM_STATICTEXT -++++++++ROLE_SYSTEM_STATICTEXT name='ruby text' -++++++ROLE_SYSTEM_STATICTEXT name='ruby base' +++++IA2_ROLE_SECTION description='ruby text' +++++++ROLE_SYSTEM_STATICTEXT name='ruby base' \ No newline at end of file
diff --git a/content/test/gpu/gpu_tests/gpu_process_integration_test.py b/content/test/gpu/gpu_tests/gpu_process_integration_test.py index 434a756e0..4d9a8a2 100644 --- a/content/test/gpu/gpu_tests/gpu_process_integration_test.py +++ b/content/test/gpu/gpu_tests/gpu_process_integration_test.py
@@ -39,6 +39,14 @@ """ +def _GetBrowserBridgeProperty(tab, path): + """The GPU WebUI uses JS modules and may not have initialized the global + browserBridge object by the time we can start injecting JavaScript. This + ensures we don't have that problem.""" + tab.WaitForJavaScriptCondition('window.gpuPagePopulated', timeout=10) + return tab.EvaluateJavaScript('browserBridge.' + path) + + class GpuProcessIntegrationTest(gpu_integration_test.GpuIntegrationTest): @classmethod def Name(cls): @@ -211,7 +219,7 @@ 'workarounds are not equal: %s != %s, diff: %s' % (browser_list, gpu_list, list(diff))) - basic_infos = tab.EvaluateJavaScript('browserBridge.gpuInfo.basicInfo') + basic_infos = _GetBrowserBridgeProperty(tab, 'gpuInfo.basicInfo') disabled_gl_extensions = None for info in basic_infos: if info['description'].startswith('Disabled Extensions'): @@ -276,8 +284,8 @@ cba.DISABLE_GPU_COMPOSITING, ]) self._Navigate(test_path) - feature_status_list = self.tab.EvaluateJavaScript( - 'browserBridge.gpuInfo.featureStatus.featureStatus') + feature_status_list = _GetBrowserBridgeProperty( + self.tab, 'gpuInfo.featureStatus.featureStatus') result = True for name, status in feature_status_list.items(): if name == 'webgl': @@ -293,8 +301,8 @@ # Hit test group 2 with entry 153 from kSoftwareRenderingListEntries. self.RestartBrowserIfNecessaryWithArgs(['--gpu-blocklist-test-group=2']) self._Navigate(test_path) - feature_status_list = self.tab.EvaluateJavaScript( - 'browserBridge.gpuInfo.featureStatus.featureStatus') + feature_status_list = _GetBrowserBridgeProperty( + self.tab, 'gpuInfo.featureStatus.featureStatus') for name, status in feature_status_list.items(): if name == 'webgl' and status != 'unavailable_software': self.fail('WebGL status for SwiftShader failed: %s' % status) @@ -307,8 +315,8 @@ if sys.platform.startswith('linux'): return - feature_status_for_hardware_gpu_list = self.tab.EvaluateJavaScript( - 'browserBridge.gpuInfo.featureStatusForHardwareGpu.featureStatus') + feature_status_for_hardware_gpu_list = _GetBrowserBridgeProperty( + self.tab, 'gpuInfo.featureStatusForHardwareGpu.featureStatus') for name, status in feature_status_for_hardware_gpu_list.items(): if name == 'webgl' and status != 'unavailable_off': self.fail('WebGL status for hardware GPU failed: %s' % status)
diff --git a/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py index b5dca70..fbf722e 100644 --- a/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py +++ b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py
@@ -64,6 +64,7 @@ feature = args[0] self._Navigate(test_path) tab = self.tab + tab.WaitForJavaScriptCondition('window.gpuPagePopulated', timeout=10) if not tab.EvaluateJavaScript( 'VerifyHardwareAccelerated({{ feature }})', feature=feature): print 'Test failed. Printing page contents:'
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 a3b98e6..37ccd70 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
@@ -122,9 +122,6 @@ # under crbug.com/963205 once these two failures are fixed. crbug.com/1136231 [ win ] conformance/extensions/s3tc-and-rgtc.html [ Failure ] crbug.com/1136231 [ linux ] conformance/extensions/s3tc-and-rgtc.html [ Failure ] -crbug.com/1152259 [ win ] conformance/reading/read-pixels-test.html [ Failure ] -crbug.com/1152259 [ linux ] conformance/reading/read-pixels-test.html [ Failure ] -crbug.com/1152259 [ mac passthrough ] conformance/reading/read-pixels-test.html [ Failure ] crbug.com/953120 conformance/programs/program-handling.html [ Failure ]
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt index d842e1c..c6e233fd 100644 --- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt +++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -205,8 +205,6 @@ # under crbug.com/963205 and crbug.com/964321 once these two failures are fixed. crbug.com/1136231 [ win ] conformance/extensions/s3tc-and-rgtc.html [ Failure ] crbug.com/1136231 [ linux ] conformance/extensions/s3tc-and-rgtc.html [ Failure ] -crbug.com/1152259 [ win ] conformance/reading/read-pixels-test.html [ Failure ] -crbug.com/1152259 [ linux ] conformance/reading/read-pixels-test.html [ Failure ] # Skipping new tests crbug.com/angleproject/5038 conformance/extensions/ext-color-buffer-half-float.html [ Skip ]
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc index 268c0c45..1312bd2e 100644 --- a/content/test/navigation_simulator_impl.cc +++ b/content/test/navigation_simulator_impl.cc
@@ -1358,6 +1358,11 @@ navigation_url_, params->item_sequence_number, params->document_sequence_number)); + params->is_overriding_user_agent = + request_ ? (request_->commit_params().is_overriding_user_agent && + frame_tree_node_->IsMainFrame()) + : false; + return params; }
diff --git a/device/fido/ctap2_device_operation.h b/device/fido/ctap2_device_operation.h index 36f7d12..5c4abc6 100644 --- a/device/fido/ctap2_device_operation.h +++ b/device/fido/ctap2_device_operation.h
@@ -122,7 +122,7 @@ // TODO: it would be nice to see which device each response is coming from, // but that breaks every mock test because they aren't expecting a call to // GetId(). - if (!device_response) { + if (!device_response || device_response->empty()) { FIDO_LOG(ERROR) << "-> (error reading)"; std::move(this->callback()) .Run(CtapDeviceResponseCode::kCtap2ErrOther, base::nullopt); @@ -131,8 +131,8 @@ auto response_code = GetResponseCode(*device_response); if (response_code != CtapDeviceResponseCode::kSuccess) { - FIDO_LOG(DEBUG) << "-> (CTAP2 error code " - << static_cast<int>(response_code) << ")"; + FIDO_LOG(DEBUG) << "-> (CTAP2 error code " << +device_response->at(0) + << ")"; std::move(this->callback()).Run(response_code, base::nullopt); return; }
diff --git a/device/fido/device_response_converter.cc b/device/fido/device_response_converter.cc index 29cda8a..e7b6029 100644 --- a/device/fido/device_response_converter.cc +++ b/device/fido/device_response_converter.cc
@@ -58,9 +58,8 @@ if (buffer.empty()) return CtapDeviceResponseCode::kCtap2ErrInvalidCBOR; - auto code = static_cast<CtapDeviceResponseCode>(buffer[0]); - return base::Contains(kCtapResponseCodeList, code) - ? code + return kCtapResponseCodeList.contains(buffer[0]) + ? static_cast<CtapDeviceResponseCode>(buffer[0]) : CtapDeviceResponseCode::kCtap2ErrInvalidCBOR; } @@ -196,9 +195,15 @@ base::Optional<AuthenticatorGetInfoResponse> ReadCTAPGetInfoResponse( base::span<const uint8_t> buffer) { - if (buffer.size() <= kResponseCodeLength || - GetResponseCode(buffer) != CtapDeviceResponseCode::kSuccess) + if (buffer.size() <= kResponseCodeLength) { + FIDO_LOG(ERROR) << "-> (GetInfo response too short: " << buffer.size() + << " bytes)"; return base::nullopt; + } + if (GetResponseCode(buffer) != CtapDeviceResponseCode::kSuccess) { + FIDO_LOG(ERROR) << "-> (GetInfo CTAP2 error code " << +buffer[0] << ")"; + return base::nullopt; + } cbor::Reader::DecoderError error; base::Optional<CBOR> decoded_response =
diff --git a/device/fido/fido_constants.h b/device/fido/fido_constants.h index 7aceaac..31d21a6 100644 --- a/device/fido/fido_constants.h +++ b/device/fido/fido_constants.h
@@ -11,6 +11,7 @@ #include <vector> #include "base/component_export.h" +#include "base/containers/fixed_flat_set.h" #include "base/time/time.h" #include "device/fido/fido_types.h" @@ -117,9 +118,13 @@ kCtap2ErrPinPolicyViolation = 0x37, kCtap2ErrPinTokenExpired = 0x38, kCtap2ErrRequestTooLarge = 0x39, + kCtap2ErrActionTimeout = 0x3A, + kCtap2ErrUpRequired = 0x3B, kCtap2ErrUvBlocked = 0x3C, kCtap2ErrIntegrityFailure = 0x3D, + kCtap2ErrInvalidSubcommand = 0x3E, kCtap2ErrUvInvalid = 0x3F, + kCtap2ErrUnauthorizedPermission = 0x40, kCtap2ErrOther = 0x7F, kCtap2ErrSpecLast = 0xDF, kCtap2ErrExtensionFirst = 0xE0, @@ -128,59 +133,64 @@ kCtap2ErrVendorLast = 0xFF }; -constexpr std::array<CtapDeviceResponseCode, 51> kCtapResponseCodeList{ - CtapDeviceResponseCode::kSuccess, - CtapDeviceResponseCode::kCtap1ErrInvalidCommand, - CtapDeviceResponseCode::kCtap1ErrInvalidParameter, - CtapDeviceResponseCode::kCtap1ErrInvalidLength, - CtapDeviceResponseCode::kCtap1ErrInvalidSeq, - CtapDeviceResponseCode::kCtap1ErrTimeout, - CtapDeviceResponseCode::kCtap1ErrChannelBusy, - CtapDeviceResponseCode::kCtap1ErrLockRequired, - CtapDeviceResponseCode::kCtap1ErrInvalidChannel, - CtapDeviceResponseCode::kCtap2ErrCBORUnexpectedType, - CtapDeviceResponseCode::kCtap2ErrInvalidCBOR, - CtapDeviceResponseCode::kCtap2ErrMissingParameter, - CtapDeviceResponseCode::kCtap2ErrLimitExceeded, - CtapDeviceResponseCode::kCtap2ErrUnsupportedExtension, - CtapDeviceResponseCode::kCtap2ErrTooManyElements, - CtapDeviceResponseCode::kCtap2ErrLargeBlobStorageFull, - CtapDeviceResponseCode::kCtap2ErrCredentialExcluded, - CtapDeviceResponseCode::kCtap2ErrProcesssing, - CtapDeviceResponseCode::kCtap2ErrInvalidCredential, - CtapDeviceResponseCode::kCtap2ErrUserActionPending, - CtapDeviceResponseCode::kCtap2ErrOperationPending, - CtapDeviceResponseCode::kCtap2ErrNoOperations, - CtapDeviceResponseCode::kCtap2ErrUnsupportedAlgorithm, - CtapDeviceResponseCode::kCtap2ErrOperationDenied, - CtapDeviceResponseCode::kCtap2ErrKeyStoreFull, - CtapDeviceResponseCode::kCtap2ErrNotBusy, - CtapDeviceResponseCode::kCtap2ErrNoOperationPending, - CtapDeviceResponseCode::kCtap2ErrUnsupportedOption, - CtapDeviceResponseCode::kCtap2ErrInvalidOption, - CtapDeviceResponseCode::kCtap2ErrKeepAliveCancel, - CtapDeviceResponseCode::kCtap2ErrNoCredentials, - CtapDeviceResponseCode::kCtap2ErrUserActionTimeout, - CtapDeviceResponseCode::kCtap2ErrNotAllowed, - CtapDeviceResponseCode::kCtap2ErrPinInvalid, - CtapDeviceResponseCode::kCtap2ErrPinBlocked, - CtapDeviceResponseCode::kCtap2ErrPinAuthInvalid, - CtapDeviceResponseCode::kCtap2ErrPinAuthBlocked, - CtapDeviceResponseCode::kCtap2ErrPinNotSet, - CtapDeviceResponseCode::kCtap2ErrPinRequired, - CtapDeviceResponseCode::kCtap2ErrPinPolicyViolation, - CtapDeviceResponseCode::kCtap2ErrPinTokenExpired, - CtapDeviceResponseCode::kCtap2ErrRequestTooLarge, - CtapDeviceResponseCode::kCtap2ErrUvBlocked, - CtapDeviceResponseCode::kCtap2ErrIntegrityFailure, - CtapDeviceResponseCode::kCtap2ErrUvInvalid, - CtapDeviceResponseCode::kCtap2ErrOther, - CtapDeviceResponseCode::kCtap2ErrSpecLast, - CtapDeviceResponseCode::kCtap2ErrExtensionFirst, - CtapDeviceResponseCode::kCtap2ErrExtensionLast, - CtapDeviceResponseCode::kCtap2ErrVendorFirst, - CtapDeviceResponseCode::kCtap2ErrVendorLast, -}; +constexpr auto kCtapResponseCodeList = base::MakeFixedFlatSet<uint8_t>({ + static_cast<uint8_t>(CtapDeviceResponseCode::kSuccess), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrInvalidCommand), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrInvalidParameter), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrInvalidLength), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrInvalidSeq), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrTimeout), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrChannelBusy), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrLockRequired), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap1ErrInvalidChannel), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrCBORUnexpectedType), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrInvalidCBOR), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrMissingParameter), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrLimitExceeded), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUnsupportedExtension), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrTooManyElements), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrLargeBlobStorageFull), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrCredentialExcluded), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrProcesssing), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrInvalidCredential), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUserActionPending), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrOperationPending), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrNoOperations), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUnsupportedAlgorithm), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrOperationDenied), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrKeyStoreFull), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrNotBusy), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrNoOperationPending), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUnsupportedOption), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrInvalidOption), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrKeepAliveCancel), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrNoCredentials), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUserActionTimeout), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrNotAllowed), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinInvalid), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinBlocked), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinAuthInvalid), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinAuthBlocked), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinNotSet), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinRequired), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinPolicyViolation), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrPinTokenExpired), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrRequestTooLarge), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrActionTimeout), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUpRequired), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUvBlocked), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrIntegrityFailure), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrInvalidSubcommand), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrUvInvalid), + static_cast<uint8_t>( + CtapDeviceResponseCode::kCtap2ErrUnauthorizedPermission), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrOther), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrSpecLast), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrExtensionFirst), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrExtensionLast), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrVendorFirst), + static_cast<uint8_t>(CtapDeviceResponseCode::kCtap2ErrVendorLast), +}); // Commands supported by CTAPHID device as specified in // https://fidoalliance.org/specs/fido-v2.0-rd-20170927/fido-client-to-authenticator-protocol-v2.0-rd-20170927.html#ctaphid-commands
diff --git a/device/fido/virtual_ctap2_device.cc b/device/fido/virtual_ctap2_device.cc index 3f372af4..c60b8b38 100644 --- a/device/fido/virtual_ctap2_device.cc +++ b/device/fido/virtual_ctap2_device.cc
@@ -19,6 +19,7 @@ #include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/threading/thread_task_runner_handle.h" +#include "components/apdu/apdu_response.h" #include "components/cbor/reader.h" #include "components/cbor/writer.h" #include "crypto/ec_private_key.h" @@ -483,8 +484,6 @@ Init({ProtocolVersion::kCtap2}); std::vector<ProtocolVersion> versions = {ProtocolVersion::kCtap2}; if (config.u2f_support) { - // Devices with alwaysUv may disable u2f if they don't support internal uv. - DCHECK(!config.always_uv || config.internal_uv_support); versions.emplace_back(ProtocolVersion::kU2f); u2f_device_ = std::make_unique<VirtualU2fDevice>(NewReferenceToState()); } @@ -689,8 +688,19 @@ auto cmd_type = command[0]; // The CTAP2 commands start at one, so a "command" of zero indicates that this // is a U2F message. - if (cmd_type == 0 && config_.u2f_support && - (!config_.always_uv || mutable_state()->fingerprints_enrolled)) { + if (cmd_type == 0 && config_.u2f_support) { + if (config_.always_uv && !mutable_state()->fingerprints_enrolled) { + // The U2F_REGISTER and U2F_AUTHENTICATE commands MUST immediately fail + // and return SW_COMMAND_NOT_ALLOWED if the alwaysUv option is true and + // the device is not protected by a built-in user verification method. + // Have the authenticator will just fail all u2f requests for simplicity. + NOTREACHED(); + std::move(cb).Run( + apdu::ApduResponse({}, + apdu::ApduResponse::Status::SW_COMMAND_NOT_ALLOWED) + .GetEncodedResponse()); + return 0; + } u2f_device_->DeviceTransact(std::move(command), std::move(cb)); return 0; }
diff --git a/docs/speed/metrics_changelog/2020_11_cls.md b/docs/speed/metrics_changelog/2020_11_cls.md index 3141774d..de6b421 100644 --- a/docs/speed/metrics_changelog/2020_11_cls.md +++ b/docs/speed/metrics_changelog/2020_11_cls.md
@@ -16,23 +16,15 @@ ### Bug fix for content-visibility: auto -When the `content-visibility: auto` feature was shipped in Chrome 85, a CLS-impacting -flaw was present: the first time that content is rendered near the screen, a double render -occurs, once with sizing determined by `contain-intrinsic-size` and the second time -by the actual size of the content. +When the `content-visibility: auto` feature was shipped in Chrome 85, a +CLS-impacting flaw was present: changes between the skipped and not-skipped +state of a `content-visibility: auto` subtree caused an observed layout shift +in the `content;visibility: auto` element as it resized. -If the content was actually on-screen during the double render, it would affect -CLS scores; therefore the flaw mostly affects above-the-fold -`content-visibility:auto` content. For such content, there was an unavoidable -impact on CLS due to the double-render. In Chrome 85, this was a somewhat -accurate result, because there was a user-visible flicker for -such above-the-fold content. In Chrome 86, this was -[fixed](https://chromium-review.googlesource.com/c/chromium/src/+/2348415) -to avoid a flicker, but the problem with CLS remained. - -In Chrome 88, the CLS issue was [fixed](https://chromium-review.googlesource.com/c/chromium/src/+/2556211). -Going forward, there should be no first-render CLS penalty for -`content-visibility:auto` content. +In Chrome 88, the CLS issue was [fixed](https://crbug.com/1151526). +Going forward, there should be no CLS penalty for such elements. (Note that +there still may be a layout shift for onscreen elements adjacent to (but not +descendants of) the `content-visibility: auto` element. ## How does this affect a site's metrics?
diff --git a/docs/speed/metrics_changelog/cls.md b/docs/speed/metrics_changelog/cls.md index 19904eee..e4ae25e 100644 --- a/docs/speed/metrics_changelog/cls.md +++ b/docs/speed/metrics_changelog/cls.md
@@ -5,7 +5,7 @@ * Chrome 88 * Metric definition improvement: [Cumulative layout shift properly detects shifts of fixed position elements](2020_11_cls.md) * Metric definition improvement: [Cumulative layout shift properly detects shifts of descendents of a sticky element](2020_11_cls.md) - * Metric definition improvement: [No penalty for first unskipped render of content-visibility:auto content](2020_11_cls.md) + * Metric definition improvement: [no penalty for content-visibility: auto content](2020_11_cls.md) * Chrome 87 * Metric definition improvement: [Fix problem in Cumulative Layout shift calculation of impact region](2020_10_cls_2.md) * Metric definition improvement: [Cumulative Layout Shift properly handles clipping of elements styled contain:paint](2020_10_cls_2.md)
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.cc b/extensions/browser/api/declarative_net_request/action_tracker.cc index 619cf80c..5393dbd 100644 --- a/extensions/browser/api/declarative_net_request/action_tracker.cc +++ b/extensions/browser/api/declarative_net_request/action_tracker.cc
@@ -322,6 +322,23 @@ : tracked_info->second.matched_rules.size(); } +void ActionTracker::IncrementActionCountForTab(const ExtensionId& extension_id, + int tab_id, + int increment) { + TrackedInfo& tracked_info = rules_tracked_[{extension_id, tab_id}]; + size_t new_action_count = + std::max<int>(tracked_info.action_count + increment, 0); + + if (tracked_info.action_count == new_action_count) + return; + + DCHECK(ExtensionsAPIClient::Get()); + ExtensionsAPIClient::Get()->UpdateActionCount(browser_context_, extension_id, + tab_id, new_action_count, + false /* clear_badge_text */); + tracked_info.action_count = new_action_count; +} + template <typename T> ActionTracker::TrackedInfoContextKey<T>::TrackedInfoContextKey( ExtensionId extension_id,
diff --git a/extensions/browser/api/declarative_net_request/action_tracker.h b/extensions/browser/api/declarative_net_request/action_tracker.h index 4c310ca..f2d0161 100644 --- a/extensions/browser/api/declarative_net_request/action_tracker.h +++ b/extensions/browser/api/declarative_net_request/action_tracker.h
@@ -103,6 +103,13 @@ int GetPendingRuleCountForTest(const ExtensionId& extension_id, int64_t navigation_id); + // Increments the action count for the given |extension_id| and |tab_id|. + // A negative value for |increment| will decrement the action count, but the + // action count will never be less than 0. + void IncrementActionCountForTab(const ExtensionId& extension_id, + int tab_id, + int increment); + private: // Template key type used for TrackedInfo, specified by an extension_id and // another ID.
diff --git a/extensions/browser/api/declarative_net_request/constants.cc b/extensions/browser/api/declarative_net_request/constants.cc index 35c5d7f..e1c9170 100644 --- a/extensions/browser/api/declarative_net_request/constants.cc +++ b/extensions/browser/api/declarative_net_request/constants.cc
@@ -106,6 +106,11 @@ "limit."; const char kInternalErrorUpdatingEnabledRulesets[] = "Internal error."; +const char kTabNotFoundError[] = "No tab with id: *."; +const char kIncrementActionCountWithoutUseAsBadgeTextError[] = + "Cannot increment action count unless displaying action count as badge " + "text."; + const char kIndexAndPersistRulesTimeHistogram[] = "Extensions.DeclarativeNetRequest.IndexAndPersistRulesTime"; const char kManifestRulesCountHistogram[] =
diff --git a/extensions/browser/api/declarative_net_request/constants.h b/extensions/browser/api/declarative_net_request/constants.h index c36d275..90c6c01 100644 --- a/extensions/browser/api/declarative_net_request/constants.h +++ b/extensions/browser/api/declarative_net_request/constants.h
@@ -174,6 +174,10 @@ extern const char kEnabledRulesetsRegexRuleCountExceeded[]; extern const char kInternalErrorUpdatingEnabledRulesets[]; +// setExtensionActionOptions API errors. +extern const char kTabNotFoundError[]; +extern const char kIncrementActionCountWithoutUseAsBadgeTextError[]; + // Histogram names. extern const char kIndexAndPersistRulesTimeHistogram[]; extern const char kManifestRulesCountHistogram[];
diff --git a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc index 042eac34..4cd65fe76 100644 --- a/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc +++ b/extensions/browser/api/declarative_net_request/declarative_net_request_api.cc
@@ -30,6 +30,7 @@ #include "extensions/browser/api/extensions_api_client.h" #include "extensions/browser/extension_file_task_runner.h" #include "extensions/browser/extension_prefs.h" +#include "extensions/browser/extensions_browser_client.h" #include "extensions/browser/quota_service.h" #include "extensions/common/api/declarative_net_request.h" #include "extensions/common/api/declarative_net_request/constants.h" @@ -392,34 +393,58 @@ EXTENSION_FUNCTION_VALIDATE(params); EXTENSION_FUNCTION_VALIDATE(error.empty()); - bool use_action_count_as_badge_text = - params->options.display_action_count_as_badge_text; + declarative_net_request::RulesMonitorService* rules_monitor_service = + declarative_net_request::RulesMonitorService::Get(browser_context()); + DCHECK(rules_monitor_service); + ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context()); - if (use_action_count_as_badge_text == - prefs->GetDNRUseActionCountAsBadgeText(extension_id())) - return RespondNow(NoArguments()); + declarative_net_request::ActionTracker& action_tracker = + rules_monitor_service->action_tracker(); - prefs->SetDNRUseActionCountAsBadgeText(extension_id(), - use_action_count_as_badge_text); + bool use_action_count_as_badge_text = + prefs->GetDNRUseActionCountAsBadgeText(extension_id()); - // If the preference is switched on, update the extension's badge text with - // the number of actions matched for this extension. Otherwise, clear the - // action count for the extension's icon and show the default badge text if - // set. - if (use_action_count_as_badge_text) { - declarative_net_request::RulesMonitorService* rules_monitor_service = - declarative_net_request::RulesMonitorService::Get(browser_context()); - DCHECK(rules_monitor_service); + if (params->options.display_action_count_as_badge_text && + *params->options.display_action_count_as_badge_text != + use_action_count_as_badge_text) { + use_action_count_as_badge_text = + *params->options.display_action_count_as_badge_text; + prefs->SetDNRUseActionCountAsBadgeText(extension_id(), + use_action_count_as_badge_text); - const declarative_net_request::ActionTracker& action_tracker = - rules_monitor_service->action_tracker(); - action_tracker.OnPreferenceEnabled(extension_id()); - } else { - DCHECK(ExtensionsAPIClient::Get()); - ExtensionsAPIClient::Get()->ClearActionCount(browser_context(), - *extension()); + // If the preference is switched on, update the extension's badge text + // with the number of actions matched for this extension. Otherwise, clear + // the action count for the extension's icon and show the default badge + // text if set. + if (use_action_count_as_badge_text) + action_tracker.OnPreferenceEnabled(extension_id()); + else { + DCHECK(ExtensionsAPIClient::Get()); + ExtensionsAPIClient::Get()->ClearActionCount(browser_context(), + *extension()); + } } + if (params->options.tab_update) { + if (!use_action_count_as_badge_text) { + return RespondNow( + Error(declarative_net_request:: + kIncrementActionCountWithoutUseAsBadgeTextError)); + } + + const auto& update_options = *params->options.tab_update; + int tab_id = update_options.tab_id; + + if (!ExtensionsBrowserClient::Get()->IsValidTabId(browser_context(), + tab_id)) { + return RespondNow(Error(ErrorUtils::FormatErrorMessage( + declarative_net_request::kTabNotFoundError, + base::NumberToString(tab_id)))); + } + + action_tracker.IncrementActionCountForTab(extension_id(), tab_id, + update_options.increment); + } return RespondNow(NoArguments()); }
diff --git a/extensions/browser/extensions_browser_client.cc b/extensions/browser/extensions_browser_client.cc index cd58b88..d738595 100644 --- a/extensions/browser/extensions_browser_client.cc +++ b/extensions/browser/extensions_browser_client.cc
@@ -124,4 +124,9 @@ return false; } +bool ExtensionsBrowserClient::IsValidTabId(content::BrowserContext* context, + int tab_id) const { + return false; +} + } // namespace extensions
diff --git a/extensions/browser/extensions_browser_client.h b/extensions/browser/extensions_browser_client.h index 70a0dc0..7a222e3f 100644 --- a/extensions/browser/extensions_browser_client.h +++ b/extensions/browser/extensions_browser_client.h
@@ -370,6 +370,9 @@ // Protection policy. virtual bool IsScreenshotRestricted(content::WebContents* web_contents) const; + // Returns true if the given |tab_id| exists. + virtual bool IsValidTabId(content::BrowserContext* context, int tab_id) const; + private: std::vector<std::unique_ptr<ExtensionsBrowserAPIProvider>> providers_; };
diff --git a/extensions/common/api/declarative_net_request.idl b/extensions/common/api/declarative_net_request.idl index 3ff9096..405d770 100644 --- a/extensions/common/api/declarative_net_request.idl +++ b/extensions/common/api/declarative_net_request.idl
@@ -425,10 +425,20 @@ DOMString[]? enableRulesetIds; }; + dictionary TabActionCountUpdate { + // The tab for which to update the action count. + long tabId; + // The amount to increment the tab's action count by. Negative values will + // decrement the count. + long increment; + }; + dictionary ExtensionActionOptions { // Whether to automatically display the action count for a page as the - // extension's badge text. False by default. - boolean displayActionCountAsBadgeText; + // extension's badge text. This preference is persisted across sessions. + boolean? displayActionCountAsBadgeText; + // Details of how the tab's action count should be adjusted. + TabActionCountUpdate? tabUpdate; }; callback EmptyCallback = void(); @@ -531,10 +541,12 @@ static void getMatchedRules(optional MatchedRulesFilter filter, GetMatchedRulesCallback callback); - // Configures how matched actions will be displayed on the extension action. - // This preference is persisted across sessions. + // Configures if the action count for tabs should be displayed as the + // extension action's badge text and provides a way for that action count to + // be incremented. static void setExtensionActionOptions( - ExtensionActionOptions options); + ExtensionActionOptions options, + optional EmptyCallback callback); // Checks if the given regular expression will be supported as a // <code>regexFilter</code> rule condition.
diff --git a/gpu/command_buffer/common/gles2_cmd_utils.cc b/gpu/command_buffer/common/gles2_cmd_utils.cc index c8590aca..804a2b8 100644 --- a/gpu/command_buffer/common/gles2_cmd_utils.cc +++ b/gpu/command_buffer/common/gles2_cmd_utils.cc
@@ -1092,7 +1092,6 @@ case GL_R16UI: case GL_RG16UI: case GL_RGBA16UI: - case GL_RGB10_A2: case GL_RGB10_A2UI: case GL_R16_EXT: case GL_RG16_EXT:
diff --git a/gpu/config/gpu_switches.cc b/gpu/config/gpu_switches.cc index 82ede09b..761c23ac 100644 --- a/gpu/config/gpu_switches.cc +++ b/gpu/config/gpu_switches.cc
@@ -102,4 +102,9 @@ const char kDisableVulkanFallbackToGLForTesting[] = "disable-vulkan-fallback-to-gl-for-testing"; +#if BUILDFLAG(ENABLE_PLATFORM_HEVC) +// Enables playback of clear (unencrypted) HEVC content for testing purposes. +const char kEnableClearHevcForTesting[] = "enable-clear-hevc-for-testing"; +#endif + } // namespace switches
diff --git a/gpu/config/gpu_switches.h b/gpu/config/gpu_switches.h index 7135afdb..f935a3f 100644 --- a/gpu/config/gpu_switches.h +++ b/gpu/config/gpu_switches.h
@@ -6,6 +6,7 @@ #define GPU_CONFIG_GPU_SWITCHES_H_ #include "gpu/gpu_export.h" +#include "media/media_buildflags.h" namespace switches { @@ -34,6 +35,9 @@ GPU_EXPORT extern const char kEnableVulkanProtectedMemory[]; GPU_EXPORT extern const char kEnforceVulkanProtectedMemory[]; GPU_EXPORT extern const char kDisableVulkanFallbackToGLForTesting[]; +#if BUILDFLAG(ENABLE_PLATFORM_HEVC) +GPU_EXPORT extern const char kEnableClearHevcForTesting[]; +#endif } // namespace switches
diff --git a/gpu/ipc/common/BUILD.gn b/gpu/ipc/common/BUILD.gn index fde4f9e2..f665e4eb 100644 --- a/gpu/ipc/common/BUILD.gn +++ b/gpu/ipc/common/BUILD.gn
@@ -546,6 +546,8 @@ traits_public_deps = [ ":vulkan_types_mojom_traits" ] }, ] + + webui_module_path = "/" } mojom("test_interfaces") {
diff --git a/gpu/vulkan/x/vulkan_implementation_x11.cc b/gpu/vulkan/x/vulkan_implementation_x11.cc index 638345b..f3f48cc 100644 --- a/gpu/vulkan/x/vulkan_implementation_x11.cc +++ b/gpu/vulkan/x/vulkan_implementation_x11.cc
@@ -104,7 +104,8 @@ return true; auto* connection = x11::Connection::Get(); return vkGetPhysicalDeviceXcbPresentationSupportKHR( - device, queue_family_index, connection->XcbConnection(), + device, queue_family_index, + connection->GetXlibDisplay().GetXcbConnection(), static_cast<xcb_visualid_t>(connection->default_root_visual().visual_id)); }
diff --git a/gpu/vulkan/x/vulkan_surface_x11.cc b/gpu/vulkan/x/vulkan_surface_x11.cc index 29cc30a..82d43d9 100644 --- a/gpu/vulkan/x/vulkan_surface_x11.cc +++ b/gpu/vulkan/x/vulkan_surface_x11.cc
@@ -76,7 +76,7 @@ VkSurfaceKHR vk_surface; const VkXcbSurfaceCreateInfoKHR surface_create_info = { .sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR, - .connection = connection->XcbConnection(), + .connection = connection->GetXlibDisplay().GetXcbConnection(), .window = static_cast<xcb_window_t>(window), }; VkResult result = vkCreateXcbSurfaceKHR(vk_instance, &surface_create_info,
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg index 1ac7786..5869554 100644 --- a/infra/config/generated/commit-queue.cfg +++ b/infra/config/generated/commit-queue.cfg
@@ -1434,6 +1434,10 @@ includable_only: true } builders { + name: "chromium/try/tricium-oilpan-analysis" + includable_only: true + } + builders { name: "chromium/try/tricium-simple" includable_only: true }
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index d94d161..c739705 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -17020,11 +17020,11 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"12b5035g\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\",\"xcode_build_version\":\"12b5044c\"}" execution_timeout_secs: 36000 caches { - name: "xcode_ios_12b5035g" - path: "xcode_ios_12b5035g.app" + name: "xcode_ios_12b5044c" + path: "xcode_ios_12b5044c.app" } build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -18184,6 +18184,100 @@ } } builders { + name: "linux-paeverywhere-x64-fyi-dbg" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "pool:luci.chromium.ci" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + } + } + builders { + name: "linux-paeverywhere-x64-fyi-rel" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "pool:luci.chromium.ci" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + } + } + builders { name: "linux-perfetto-rel" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper" @@ -19355,6 +19449,98 @@ } } builders { + name: "mac-paeverywhere-x64-fyi-dbg" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Mac" + dimensions: "pool:luci.chromium.ci" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + } + } + builders { + name: "mac-paeverywhere-x64-fyi-rel" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Mac" + dimensions: "pool:luci.chromium.ci" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"chromium.fyi\",\"recipe\":\"chromium\"}" + execution_timeout_secs: 36000 + build_numbers: YES + service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "ci_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_ci_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + } + } + builders { name: "mac-swangle-chromium-x64" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper" @@ -32495,7 +32681,7 @@ cipd_version: "refs/heads/master" cmd: "recipes" } - properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.mac\",\"recipe\":\"chromium_trybot\",\"xcode_build_version\":\"12b5035g\"}" + properties: "{\"$build/goma\":{\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.mac\",\"recipe\":\"chromium_trybot\",\"xcode_build_version\":\"12b5044c\"}" execution_timeout_secs: 14400 expiration_secs: 7200 caches { @@ -32503,8 +32689,8 @@ path: "win_toolchain" } caches { - name: "xcode_ios_12b5035g" - path: "xcode_ios_12b5035g.app" + name: "xcode_ios_12b5044c" + path: "xcode_ios_12b5044c.app" } build_numbers: YES service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" @@ -37840,6 +38026,61 @@ } } builders { + name: "tricium-oilpan-analysis" + swarming_host: "chromium-swarm.appspot.com" + swarming_tags: "vpython:native-python-wrapper" + dimensions: "builderless:1" + dimensions: "cores:8" + dimensions: "cpu:x86-64" + dimensions: "os:Ubuntu-16.04" + dimensions: "pool:luci.chromium.try" + dimensions: "ssd:0" + exe { + cipd_package: "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build" + cipd_version: "refs/heads/master" + cmd: "recipes" + } + properties: "{\"$build/goma\":{\"enable_ats\":true,\"rpc_extra_params\":\"?prod\",\"server_host\":\"goma.chromium.org\",\"use_luci_auth\":true},\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"$recipe_engine/isolated\":{\"server\":\"https://isolateserver.appspot.com\"},\"builder_group\":\"tryserver.chromium.linux\",\"recipe\":\"tricium_oilpan\"}" + execution_timeout_secs: 14400 + expiration_secs: 7200 + caches { + name: "win_toolchain" + path: "win_toolchain" + } + build_numbers: YES + service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" + task_template_canary_percentage { + value: 5 + } + experiments { + key: "chromium.resultdb.result_sink" + value: 100 + } + experiments { + key: "luci.use_realms" + value: 100 + } + resultdb { + enable: true + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "try_test_results" + test_results {} + } + bq_exports { + project: "luci-resultdb" + dataset: "chromium" + table: "gpu_try_test_results" + test_results { + predicate { + test_id_regexp: "ninja://(chrome/test:|content/test:fuchsia_)telemetry_gpu_integration_test/.+" + } + } + } + } + } + builders { name: "tricium-simple" swarming_host: "chromium-swarm.appspot.com" swarming_tags: "vpython:native-python-wrapper"
diff --git a/infra/config/generated/goma-usage.pyl b/infra/config/generated/goma-usage.pyl index 1072600d..30c413c1 100644 --- a/infra/config/generated/goma-usage.pyl +++ b/infra/config/generated/goma-usage.pyl
@@ -3,15 +3,15 @@ # This is consumed by presubmit checks that need to validate the config { - # 61150 (scheduler total) + 344990 (weighted CQ total) + # 61470 (scheduler total) + 344990 (weighted CQ total) # (weighted CQ total) = 6899.8 (CQ total) * 50 (CQ weight) - '*weighted total*': 406140, + '*weighted total*': 406460, 'scheduler': { - '*total*': 61150, + '*total*': 61470, 'triggered': { - '*total*': 59600, + '*total*': 59920, ('https://chromium.googlesource.com/chromium/src', 'regexp:refs/heads/master'): { - '*total*': 58720, + '*total*': 59040, # 4 concurrent builds x 80 jobs 'ci/ASAN Debug': 320, # 5 concurrent builds x 80 jobs @@ -319,6 +319,8 @@ 'ci/linux-lacros-builder-rel': 80, 'ci/linux-official': 200, 'ci/linux-ozone-rel': 500, + 'ci/linux-paeverywhere-x64-fyi-dbg': 80, + 'ci/linux-paeverywhere-x64-fyi-rel': 80, 'ci/linux-perfetto-rel': 80, 'ci/linux-swangle-chromium-x64': 80, 'ci/linux-swangle-tot-angle-x64': 80, @@ -343,6 +345,8 @@ 'ci/mac-mojo-rel': 40, # jobs count assumes an 8-core machine 'ci/mac-official': 80, + 'ci/mac-paeverywhere-x64-fyi-dbg': 80, + 'ci/mac-paeverywhere-x64-fyi-rel': 80, # jobs count assumes an 8-core machine 'ci/mac-swangle-chromium-x64': 80, # jobs count assumes an 8-core machine
diff --git a/infra/config/generated/luci-milo.cfg b/infra/config/generated/luci-milo.cfg index f97d737..0bdcf8c 100644 --- a/infra/config/generated/luci-milo.cfg +++ b/infra/config/generated/luci-milo.cfg
@@ -5435,6 +5435,26 @@ short_name: "64rel" } builders { + name: "buildbucket/luci.chromium.ci/linux-paeverywhere-x64-fyi-dbg" + category: "paeverywhere|linux" + short_name: "64dbg" + } + builders { + name: "buildbucket/luci.chromium.ci/linux-paeverywhere-x64-fyi-rel" + category: "paeverywhere|linux" + short_name: "64rel" + } + builders { + name: "buildbucket/luci.chromium.ci/mac-paeverywhere-x64-fyi-dbg" + category: "paeverywhere|mac" + short_name: "64dbg" + } + builders { + name: "buildbucket/luci.chromium.ci/mac-paeverywhere-x64-fyi-rel" + category: "paeverywhere|mac" + short_name: "64rel" + } + builders { name: "buildbucket/luci.chromium.ci/win-paeverywhere-x86-fyi-dbg" category: "paeverywhere|win" short_name: "32dbg" @@ -12263,6 +12283,9 @@ name: "buildbucket/luci.chromium.try/tricium-metrics-analysis" } builders { + name: "buildbucket/luci.chromium.try/tricium-oilpan-analysis" + } + builders { name: "buildbucket/luci.chromium.try/tricium-simple" } builders { @@ -12994,6 +13017,9 @@ name: "buildbucket/luci.chromium.try/tricium-metrics-analysis" } builders { + name: "buildbucket/luci.chromium.try/tricium-oilpan-analysis" + } + builders { name: "buildbucket/luci.chromium.try/tricium-simple" } builder_view_only: true
diff --git a/infra/config/generated/luci-notify.cfg b/infra/config/generated/luci-notify.cfg index 7e83bb20..ef264a0a 100644 --- a/infra/config/generated/luci-notify.cfg +++ b/infra/config/generated/luci-notify.cfg
@@ -3082,6 +3082,32 @@ } notifiers { notifications { + on_change: true + email { + recipients: "chrome-memory-safety+bots@google.com" + } + } + builders { + bucket: "ci" + name: "linux-paeverywhere-x64-fyi-dbg" + repository: "https://chromium.googlesource.com/chromium/src" + } +} +notifiers { + notifications { + on_change: true + email { + recipients: "chrome-memory-safety+bots@google.com" + } + } + builders { + bucket: "ci" + name: "linux-paeverywhere-x64-fyi-rel" + repository: "https://chromium.googlesource.com/chromium/src" + } +} +notifiers { + notifications { on_occurrence: FAILURE failed_step_regexp: "bot_update|compile|gclient runhooks|runhooks|update" email { @@ -3165,6 +3191,32 @@ } notifiers { notifications { + on_change: true + email { + recipients: "chrome-memory-safety+bots@google.com" + } + } + builders { + bucket: "ci" + name: "mac-paeverywhere-x64-fyi-dbg" + repository: "https://chromium.googlesource.com/chromium/src" + } +} +notifiers { + notifications { + on_change: true + email { + recipients: "chrome-memory-safety+bots@google.com" + } + } + builders { + bucket: "ci" + name: "mac-paeverywhere-x64-fyi-rel" + repository: "https://chromium.googlesource.com/chromium/src" + } +} +notifiers { + notifications { on_new_status: FAILURE email { recipients: "chromium-component-mapping@google.com"
diff --git a/infra/config/generated/luci-scheduler.cfg b/infra/config/generated/luci-scheduler.cfg index db73ef4..b8a6f8e 100644 --- a/infra/config/generated/luci-scheduler.cfg +++ b/infra/config/generated/luci-scheduler.cfg
@@ -5491,6 +5491,26 @@ } } job { + id: "linux-paeverywhere-x64-fyi-dbg" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "linux-paeverywhere-x64-fyi-dbg" + } +} +job { + id: "linux-paeverywhere-x64-fyi-rel" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "linux-paeverywhere-x64-fyi-rel" + } +} +job { id: "linux-perfetto-rel" realm: "ci" acl_sets: "ci" @@ -5824,6 +5844,26 @@ } } job { + id: "mac-paeverywhere-x64-fyi-dbg" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "mac-paeverywhere-x64-fyi-dbg" + } +} +job { + id: "mac-paeverywhere-x64-fyi-rel" + realm: "ci" + acl_sets: "ci" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "luci.chromium.ci" + builder: "mac-paeverywhere-x64-fyi-rel" + } +} +job { id: "mac-swangle-chromium-x64" realm: "ci" acl_sets: "ci" @@ -6652,6 +6692,8 @@ triggers: "linux-lacros-builder-rel" triggers: "linux-official" triggers: "linux-ozone-rel" + triggers: "linux-paeverywhere-x64-fyi-dbg" + triggers: "linux-paeverywhere-x64-fyi-rel" triggers: "linux-perfetto-rel" triggers: "linux-swangle-chromium-x64" triggers: "linux-swangle-tot-angle-x64" @@ -6674,6 +6716,8 @@ triggers: "mac-hermetic-upgrade-rel" triggers: "mac-mojo-rel" triggers: "mac-official" + triggers: "mac-paeverywhere-x64-fyi-dbg" + triggers: "mac-paeverywhere-x64-fyi-rel" triggers: "mac-swangle-chromium-x64" triggers: "mac-updater-builder-dbg" triggers: "mac-updater-builder-rel"
diff --git a/infra/config/generated/tricium-prod.cfg b/infra/config/generated/tricium-prod.cfg index 1034e632..3f34a03 100644 --- a/infra/config/generated/tricium-prod.cfg +++ b/infra/config/generated/tricium-prod.cfg
@@ -59,6 +59,29 @@ } } +functions { + type: ANALYZER + name: "OilpanAnalyzer" + needs: GIT_FILE_DETAILS + provides: RESULTS + path_filters: "*.c" + path_filters: "*.cc" + path_filters: "*.cpp" + path_filters: "*.h" + owner: "yukiy@chromium.org" + monorail_component: "Infra>Platform>Tricium>Analyzer" + impls { + runtime_platform: LINUX + provides_for_platform: LINUX + recipe { + project: "chromium" + bucket: "try" + builder: "tricium-oilpan-analysis" + } + deadline: 900 + } +} + # Wrapper for simple legacy analyzers. functions { type: ANALYZER @@ -90,6 +113,11 @@ } selections { + function: "OilpanAnalyzer" + platform: LINUX +} + +selections { function: "Simple" platform: LINUX }
diff --git a/infra/config/lib/builders.star b/infra/config/lib/builders.star index dd52f2d..58dd6ea 100644 --- a/infra/config/lib/builders.star +++ b/infra/config/lib/builders.star
@@ -137,7 +137,7 @@ # (current default) xc12 gm seed x12a7209 = xcode_enum("xcode_ios_12a7209", "xcode_ios_12a7209.app"), # latest Xcode 12 beta version. - x12b5035g = xcode_enum("xcode_ios_12b5035g", "xcode_ios_12b5035g.app"), + x12b5044c = xcode_enum("xcode_ios_12b5044c", "xcode_ios_12b5044c.app"), ) ################################################################################
diff --git a/infra/config/recipes.star b/infra/config/recipes.star index 1fb975c..e0d73d95 100644 --- a/infra/config/recipes.star +++ b/infra/config/recipes.star
@@ -134,6 +134,10 @@ ) build_recipe( + name = "recipe:tricium_oilpan", +) + +build_recipe( name = "recipe:tricium_simple", )
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index ea9468df..8fac0a3 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -2589,6 +2589,28 @@ ) ci.fyi_builder( + name = "linux-paeverywhere-x64-fyi-dbg", + builderless = True, + console_view_entry = ci.console_view_entry( + category = "paeverywhere|linux", + short_name = "64dbg", + ), + notifies = ["chrome-memory-safety"], + os = os.LINUX_DEFAULT, +) + +ci.fyi_builder( + name = "linux-paeverywhere-x64-fyi-rel", + builderless = True, + console_view_entry = ci.console_view_entry( + category = "paeverywhere|linux", + short_name = "64rel", + ), + notifies = ["chrome-memory-safety"], + os = os.LINUX_DEFAULT, +) + +ci.fyi_builder( name = "linux-perfetto-rel", console_view_entry = ci.console_view_entry( category = "linux", @@ -2740,6 +2762,28 @@ triggered_by = ["mac-updater-builder-rel"], ) +ci.fyi_builder( + name = "mac-paeverywhere-x64-fyi-dbg", + builderless = True, + console_view_entry = ci.console_view_entry( + category = "paeverywhere|mac", + short_name = "64dbg", + ), + notifies = ["chrome-memory-safety"], + os = os.MAC_ANY, +) + +ci.fyi_builder( + name = "mac-paeverywhere-x64-fyi-rel", + builderless = True, + console_view_entry = ci.console_view_entry( + category = "paeverywhere|mac", + short_name = "64rel", + ), + notifies = ["chrome-memory-safety"], + os = os.MAC_ANY, +) + ci.updater_builder( name = "win-updater-builder-dbg", console_view_entry = ci.console_view_entry( @@ -3124,9 +3168,9 @@ category = "iOS|iOS14", short_name = "sdk14", ), - caches = [xcode_cache.x12b5035g], + caches = [xcode_cache.x12b5044c], properties = { - "xcode_build_version": "12b5035g", + "xcode_build_version": "12b5044c", }, )
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 4fff5a9..4001f369 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -1225,6 +1225,11 @@ ) try_.chromium_linux_builder( + name = "tricium-oilpan-analysis", + executable = "recipe:tricium_oilpan", +) + +try_.chromium_linux_builder( name = "tricium-simple", executable = "recipe:tricium_simple", ) @@ -1404,9 +1409,9 @@ try_.chromium_mac_ios_builder( name = "ios14-sdk-simulator", - caches = [xcode_cache.x12b5035g], + caches = [xcode_cache.x12b5044c], properties = { - "xcode_build_version": "12b5035g", + "xcode_build_version": "12b5044c", }, )
diff --git a/infra/config/tricium-prod.cfg b/infra/config/tricium-prod.cfg index 1034e632..3f34a03 100644 --- a/infra/config/tricium-prod.cfg +++ b/infra/config/tricium-prod.cfg
@@ -59,6 +59,29 @@ } } +functions { + type: ANALYZER + name: "OilpanAnalyzer" + needs: GIT_FILE_DETAILS + provides: RESULTS + path_filters: "*.c" + path_filters: "*.cc" + path_filters: "*.cpp" + path_filters: "*.h" + owner: "yukiy@chromium.org" + monorail_component: "Infra>Platform>Tricium>Analyzer" + impls { + runtime_platform: LINUX + provides_for_platform: LINUX + recipe { + project: "chromium" + bucket: "try" + builder: "tricium-oilpan-analysis" + } + deadline: 900 + } +} + # Wrapper for simple legacy analyzers. functions { type: ANALYZER @@ -90,6 +113,11 @@ } selections { + function: "OilpanAnalyzer" + platform: LINUX +} + +selections { function: "Simple" platform: LINUX }
diff --git a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm index ebcb788..e6de909c 100644 --- a/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm +++ b/ios/chrome/browser/crash_report/synthetic_crash_report_util.mm
@@ -106,8 +106,11 @@ base::SysInfo::HardwareModelName()); AppendConfigWithBreakpadServerParam(config, "breadcrumbs", base::JoinString(breadcrumbs, "\n")); - AppendConfigWithBreakpadServerParam( - config, "signature", breadcrumbs.back().substr(strlen("00:00 "))); + + std::string signature = breadcrumbs.empty() + ? "No Breadcrumbs" + : breadcrumbs.back().substr(strlen("00:00 ")); + AppendConfigWithBreakpadServerParam(config, "signature", signature); for (NSString* key in previous_session.reportParameters.allKeys) { AppendConfigWithBreakpadServerParam(
diff --git a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm index 07d18a5..f66385c 100644 --- a/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm +++ b/ios/chrome/browser/metrics/ios_chrome_metrics_service_client.mm
@@ -344,9 +344,6 @@ task_info(mach_task_self(), TASK_VM_INFO, reinterpret_cast<task_info_t>(&task_info_data), &count); if (kr == KERN_SUCCESS) { - base::UmaHistogramMemoryKB( - "Memory.Browser", - (task_info_data.resident_size - task_info_data.reusable) / 1024); mach_vm_size_t footprint_mb = task_info_data.phys_footprint / 1024 / 1024; base::UmaHistogramMemoryLargeMB("Memory.Browser.MemoryFootprint", footprint_mb);
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm index a893663..8f70367 100644 --- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm +++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -75,6 +75,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: return false; } @@ -126,6 +127,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: NOTREACHED() << "Unexpected value for access point " << static_cast<int>(access_point); @@ -179,6 +181,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: NOTREACHED() << "Unexpected value for access point " << static_cast<int>(access_point); @@ -232,6 +235,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: NOTREACHED() << "Unexpected value for access point " << static_cast<int>(access_point); @@ -277,6 +281,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: return nullptr; } @@ -320,6 +325,7 @@ case signin_metrics::AccessPoint::ACCESS_POINT_ACCOUNT_RENAMED: case signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN: case signin_metrics::AccessPoint::ACCESS_POINT_SAFETY_CHECK: + case signin_metrics::AccessPoint::ACCESS_POINT_KALEIDOSCOPE: case signin_metrics::AccessPoint::ACCESS_POINT_MAX: return nullptr; }
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_util.mm b/ios/chrome/browser/ui/omnibox/omnibox_util.mm index 49537571c..9f7e7fab 100644 --- a/ios/chrome/browser/ui/omnibox/omnibox_util.mm +++ b/ios/chrome/browser/ui/omnibox/omnibox_util.mm
@@ -90,14 +90,11 @@ case security_state::NONE: return INFO; case security_state::WARNING: - if (security_state::ShouldShowDangerTriangleForWarningLevel()) - return NOT_SECURE_WARNING; - return INFO; + case security_state::DANGEROUS: + return NOT_SECURE_WARNING; case security_state::SECURE: case security_state::SECURE_WITH_POLICY_INSTALLED_CERT: return SECURE; - case security_state::DANGEROUS: - return NOT_SECURE_WARNING; case security_state::SECURITY_LEVEL_COUNT: NOTREACHED(); return LOCATION_BAR_SECURITY_ICON_TYPE_COUNT;
diff --git a/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm b/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm index 534977a..a809b10 100644 --- a/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm +++ b/ios/chrome/browser/ui/page_info/page_info_site_security_mediator.mm
@@ -112,11 +112,7 @@ // Not HTTPS. This maps to the WARNING security level. Show the grey // triangle icon in page info based on the same logic used to determine // the iconography in the omnibox. - if (security_state::ShouldShowDangerTriangleForWarningLevel()) { - dataHolder.iconImageName = kSecurityIconDangerous; - } else { - dataHolder.iconImageName = kSecurityIconNotSecure; - } + dataHolder.iconImageName = kSecurityIconDangerous; dataHolder.message = [NSString stringWithFormat:@"%@ BEGIN_LINK %@ END_LINK", @@ -168,11 +164,7 @@ // so assume the WARNING state when determining whether to swap the icon for // a grey triangle. This will result in an inconsistency between the omnibox // and page info if the mixed content WARNING feature is disabled. - if (security_state::ShouldShowDangerTriangleForWarningLevel()) { - dataHolder.iconImageName = kSecurityIconDangerous; - } else { - dataHolder.iconImageName = kSecurityIconNotSecure; - } + dataHolder.iconImageName = kSecurityIconDangerous; dataHolder.message = BuildMessage(@[ [NSString stringWithFormat:@"%@ BEGIN_LINK %@ END_LINK",
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc index 8d0c021..2317c6c 100644 --- a/ios/chrome/browser/ui/webui/flags_ui.cc +++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -230,6 +230,7 @@ source->AddLocalizedString("reset", IDS_FLAGS_UI_PAGE_RESET); source->AddLocalizedString("reset-acknowledged", IDS_FLAGS_UI_RESET_ACKNOWLEDGED); + source->AddLocalizedString("search-label", IDS_FLAGS_UI_SEARCH_LABEL); source->AddLocalizedString("search-placeholder", IDS_FLAGS_UI_SEARCH_PLACEHOLDER); source->AddLocalizedString("title", IDS_FLAGS_UI_TITLE);
diff --git a/media/gpu/vaapi/vaapi_video_decoder.cc b/media/gpu/vaapi/vaapi_video_decoder.cc index 21a4de9..b68479d9 100644 --- a/media/gpu/vaapi/vaapi_video_decoder.cc +++ b/media/gpu/vaapi/vaapi_video_decoder.cc
@@ -9,9 +9,11 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/command_line.h" #include "base/memory/ptr_util.h" #include "base/metrics/histogram_macros.h" #include "base/trace_event/trace_event.h" +#include "gpu/config/gpu_switches.h" #include "media/base/bind_to_current_loop.h" #include "media/base/format_utils.h" #include "media/base/video_frame.h" @@ -174,6 +176,14 @@ base::BindRepeating(&VaapiVideoDecoder::OnCdmContextEvent, weak_this_factory_.GetWeakPtr())); #endif +#if BUILDFLAG(ENABLE_PLATFORM_HEVC) + } else if (config.codec() == kCodecHEVC && + !base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableClearHevcForTesting)) { + DVLOG(1) << "Clear HEVC content is not supported"; + std::move(init_cb).Run(StatusCode::kClearContentUnsupported); + return; +#endif } // We expect the decoder to have released all output buffers (by the client
diff --git a/mojo/public/js/mojo_bindings_resources.grd b/mojo/public/js/mojo_bindings_resources.grd index 999a411e..cfe32d3 100644 --- a/mojo/public/js/mojo_bindings_resources.grd +++ b/mojo/public/js/mojo_bindings_resources.grd
@@ -80,6 +80,11 @@ use_base_dir="false" resource_path="mojo/mojo/public/mojom/base/text_direction.mojom-lite.js" type="BINDATA" /> + <include name="IDR_MOJO_UNGUESSABLE_TOKEN_MOJOM_WEBUI_JS" + file="${root_gen_dir}/mojom-webui/mojo/public/mojom/base/unguessable_token.mojom-webui.js" + use_base_dir="false" + resource_path="mojo/mojo/public/mojom/base/unguessable_token.mojom-webui.js" + type="BINDATA" /> <if expr="is_win or is_macosx or is_linux or is_android"> <include name="IDR_MOJO_PROCESS_ID_MOJOM_WEBUI_JS" file="${root_gen_dir}/mojom-webui/mojo/public/mojom/base/process_id.mojom-webui.js"
diff --git a/net/base/port_util.cc b/net/base/port_util.cc index 72af86d..12bfd9a 100644 --- a/net/base/port_util.cc +++ b/net/base/port_util.cc
@@ -37,6 +37,7 @@ 42, // name 43, // nicname 53, // domain + 69, // tftp 77, // priv-rjs 79, // finger 87, // ttylink @@ -54,8 +55,10 @@ 119, // nntp 123, // NTP 135, // loc-srv /epmap + 137, // netbios 139, // netbios 143, // imap2 + 161, // snmp 179, // BGP 389, // ldap 427, // SLP (Also used by Apple Filing Protocol) @@ -70,6 +73,7 @@ 532, // netnews 540, // uucp 548, // AFP (Apple Filing Protocol) + 554, // rtsp 556, // remotefs 563, // nntp+ssl 587, // smtp (rfc6409) @@ -77,12 +81,16 @@ 636, // ldap+ssl 993, // ldap+ssl 995, // pop3+ssl + 1719, // h323gatestat + 1720, // h323hostcall + 1723, // pptp 2049, // nfs 3659, // apple-sasl / PasswordServer 4045, // lockd 5060, // sip 5061, // sips 6000, // X11 + 6566, // sane-port 6665, // Alternate IRC [Apple addition] 6666, // Alternate IRC [Apple addition] 6667, // Standard IRC [Apple addition]
diff --git a/sandbox/policy/mac/network.sb b/sandbox/policy/mac/network.sb index d6dcbcdd..550a623 100644 --- a/sandbox/policy/mac/network.sb +++ b/sandbox/policy/mac/network.sb
@@ -112,6 +112,7 @@ ; Kerberos support. This should be removed after GSS is moved out of the ; network service. https://crbug.com/1017830 (allow mach-lookup + (global-name "com.apple.GSSCred") ; https://crbug.com/1134449 (global-name "org.h5l.kcm") ) (allow file-read*
diff --git a/sandbox/win/src/crosscall_params.h b/sandbox/win/src/crosscall_params.h index eae3f89..3c97f3f 100644 --- a/sandbox/win/src/crosscall_params.h +++ b/sandbox/win/src/crosscall_params.h
@@ -179,7 +179,7 @@ // that NUMBER_PARAMS = 2 and a 32-bit build: // // [ tag 4 bytes] -// [ IsOnOut 4 bytes] +// [ IsInOut 4 bytes] // [ call return 52 bytes] // [ params count 4 bytes] // [ parameter 0 type 4 bytes]
diff --git a/services/network/cors/cors_url_loader.cc b/services/network/cors/cors_url_loader.cc index 0286bad..0bdef72a 100644 --- a/services/network/cors/cors_url_loader.cc +++ b/services/network/cors/cors_url_loader.cc
@@ -533,6 +533,13 @@ status.error_code); } + // TODO(crbug.com/1152550): Remove this histogram after platform apps no + // longer require relaxing CORB/CORS in their content scripts. + if (status.error_code == net::OK) { + UMA_HISTOGRAM_BOOLEAN("NetworkService.CorsForcedOffForIsolatedWorldOrigin", + has_cors_been_affected_by_isolated_world_origin_); + } + forwarding_client_->OnComplete(status); std::move(delete_callback_).Run(this); // |this| is deleted here. @@ -555,6 +562,8 @@ } if (HasSpecialAccessToDestination()) { + has_cors_been_affected_by_isolated_world_origin_ = + request_.isolated_world_origin.has_value(); return; }
diff --git a/services/network/cors/cors_url_loader.h b/services/network/cors/cors_url_loader.h index 98de492..4fa1963 100644 --- a/services/network/cors/cors_url_loader.h +++ b/services/network/cors/cors_url_loader.h
@@ -195,6 +195,8 @@ net::IsolationInfo isolation_info_; + bool has_cors_been_affected_by_isolated_world_origin_ = false; + // Used to run asynchronous class instance bound callbacks safely. base::WeakPtrFactory<CorsURLLoader> weak_factory_{this};
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index e76c24f6..de97e5d5 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -19,6 +19,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -65,6 +68,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -101,6 +107,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -137,6 +146,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -172,6 +184,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -208,6 +223,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -244,6 +262,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -279,6 +300,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -314,6 +338,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -349,6 +376,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -384,6 +414,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -420,6 +453,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -455,6 +491,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -490,6 +529,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -525,6 +567,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -561,6 +606,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -596,6 +644,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -632,6 +683,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -667,6 +721,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -702,6 +759,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -737,6 +797,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -868,6 +931,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -905,6 +971,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -940,6 +1009,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -976,6 +1048,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1015,6 +1090,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1052,6 +1130,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1091,6 +1172,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1127,6 +1211,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1162,6 +1249,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1197,6 +1287,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1232,6 +1325,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1267,6 +1363,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1302,6 +1401,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1337,6 +1439,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1372,6 +1477,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1407,6 +1515,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1445,6 +1556,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1480,6 +1594,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1515,6 +1632,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1550,6 +1670,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1585,6 +1708,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1620,6 +1746,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1655,6 +1784,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1690,6 +1822,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1725,6 +1860,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1760,6 +1898,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1795,6 +1936,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1831,6 +1975,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1866,6 +2013,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1901,6 +2051,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1936,6 +2089,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1971,6 +2127,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2006,6 +2165,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2041,6 +2203,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2077,6 +2242,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2113,6 +2281,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2148,6 +2319,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2183,6 +2357,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2218,6 +2395,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2253,6 +2433,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2288,6 +2471,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2323,6 +2509,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2358,6 +2547,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2393,6 +2585,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2428,6 +2623,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2463,6 +2661,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2498,6 +2699,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2534,6 +2738,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2569,6 +2776,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2604,6 +2814,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2639,6 +2852,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2674,6 +2890,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2709,6 +2928,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2744,6 +2966,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2788,6 +3013,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2827,6 +3055,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2863,6 +3094,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2898,6 +3132,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2933,6 +3170,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2973,6 +3213,9 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "name": "chrome_public_wpt", + "resultdb": { + "enable": true + }, "results_handler": "layout tests", "swarming": { "can_use_on_swarming_builders": true, @@ -3001,6 +3244,9 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "name": "system_webview_wpt", + "resultdb": { + "enable": true + }, "results_handler": "layout tests", "swarming": { "can_use_on_swarming_builders": true, @@ -3029,6 +3275,9 @@ "script": "//third_party/blink/tools/merge_web_test_results.py" }, "name": "weblayer_shell_wpt", + "resultdb": { + "enable": true + }, "results_handler": "layout tests", "swarming": { "can_use_on_swarming_builders": true, @@ -3068,6 +3317,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3137,6 +3389,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3211,6 +3466,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3285,6 +3543,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3359,6 +3620,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3433,6 +3697,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3507,6 +3774,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3581,6 +3851,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Client Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3655,6 +3928,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Implementation Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3724,6 +4000,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3793,6 +4072,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3867,6 +4149,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3941,6 +4226,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4015,6 +4303,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4089,6 +4380,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4163,6 +4457,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4237,6 +4534,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Client Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4311,6 +4611,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Implementation Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4380,6 +4683,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_apk_ToT_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4449,6 +4755,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4523,6 +4832,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M85_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4597,6 +4909,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4671,6 +4986,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M86_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4745,6 +5063,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Client_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4819,6 +5140,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M87_Implementation_Library_Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4893,6 +5217,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Client Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4967,6 +5294,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "weblayer_instrumentation_test_versions_apk_M88 Implementation Tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index d538d7b..d6eb2384 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -22,6 +22,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -70,6 +73,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -126,6 +132,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_cts_tests_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -180,6 +189,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -230,6 +242,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_ui_test_app_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -282,6 +297,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -329,6 +347,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -384,6 +405,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_cts_tests_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -437,6 +461,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -486,6 +513,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_ui_test_app_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -537,6 +567,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -585,6 +618,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -633,6 +669,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -689,6 +728,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_cts_tests_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -743,6 +785,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -794,6 +839,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_instrumentation_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -843,6 +891,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -893,6 +944,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_ui_test_app_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -945,6 +999,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -993,6 +1050,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1041,6 +1101,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1097,6 +1160,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_cts_tests_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1151,6 +1217,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1202,6 +1271,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_instrumentation_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1251,6 +1323,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1301,6 +1376,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_ui_test_app_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1353,6 +1431,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1400,6 +1481,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1447,6 +1531,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1502,6 +1589,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_cts_tests_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1555,6 +1645,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1605,6 +1698,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_instrumentation_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1653,6 +1749,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1702,6 +1801,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webview_ui_test_app_test_apk_no_field_trial", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1923,6 +2025,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -1970,6 +2075,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2018,6 +2126,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2065,6 +2176,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2107,6 +2221,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2138,6 +2255,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2185,6 +2305,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2232,6 +2355,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2279,6 +2405,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2326,6 +2455,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2374,6 +2506,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2422,6 +2557,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2469,6 +2607,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2516,6 +2657,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2564,6 +2708,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2611,6 +2758,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2658,6 +2808,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2705,6 +2858,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2752,6 +2908,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2799,6 +2958,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -2964,6 +3126,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3012,6 +3177,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3061,6 +3229,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3108,6 +3279,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3156,6 +3330,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3206,6 +3383,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3254,6 +3434,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3304,6 +3487,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3352,6 +3538,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3400,6 +3589,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3447,6 +3639,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3494,6 +3689,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3541,6 +3739,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3588,6 +3789,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3635,6 +3839,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3682,6 +3889,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3729,6 +3939,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3778,6 +3991,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3825,6 +4041,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3872,6 +4091,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3919,6 +4141,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3966,6 +4191,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4013,6 +4241,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4060,6 +4291,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4107,6 +4341,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4154,6 +4391,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4201,6 +4441,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4248,6 +4491,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4295,6 +4541,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4342,6 +4591,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4389,6 +4641,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4436,6 +4691,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4483,6 +4741,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4532,6 +4793,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4579,6 +4843,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4626,6 +4893,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4673,6 +4943,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4720,6 +4993,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4767,6 +5043,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4814,6 +5093,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4861,6 +5143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4908,6 +5193,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4955,6 +5243,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5003,6 +5294,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5050,6 +5344,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5097,6 +5394,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5144,6 +5444,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5191,6 +5494,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5238,6 +5544,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5285,6 +5594,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5332,6 +5644,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5379,6 +5694,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5426,6 +5744,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5473,6 +5794,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5524,6 +5848,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5572,6 +5899,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5619,6 +5949,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5670,6 +6003,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5717,6 +6053,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5765,6 +6104,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5812,6 +6154,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5854,6 +6199,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -5885,6 +6233,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5932,6 +6283,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5979,6 +6333,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6026,6 +6383,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6073,6 +6433,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6121,6 +6484,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6169,6 +6535,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6216,6 +6585,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6263,6 +6635,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6311,6 +6686,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6358,6 +6736,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6405,6 +6786,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6452,6 +6836,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6499,6 +6886,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6546,6 +6936,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6650,6 +7043,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6697,6 +7093,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6746,6 +7145,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6794,6 +7196,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6842,6 +7247,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6890,6 +7298,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6937,6 +7348,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6984,6 +7398,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7031,6 +7448,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7078,6 +7498,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7125,6 +7548,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7172,6 +7598,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7219,6 +7648,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7268,6 +7700,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7315,6 +7750,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7362,6 +7800,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7409,6 +7850,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7456,6 +7900,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7503,6 +7950,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7550,6 +8000,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7597,6 +8050,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7644,6 +8100,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7691,6 +8150,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7738,6 +8200,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7785,6 +8250,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7832,6 +8300,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7879,6 +8350,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7926,6 +8400,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7973,6 +8450,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8021,6 +8501,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8068,6 +8551,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8115,6 +8601,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8162,6 +8651,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8209,6 +8701,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8256,6 +8751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8303,6 +8801,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8350,6 +8851,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8397,6 +8901,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8444,6 +8951,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8492,6 +9002,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8539,6 +9052,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8586,6 +9102,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8633,6 +9152,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8680,6 +9202,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8727,6 +9252,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8774,6 +9302,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8821,6 +9352,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8868,6 +9402,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8915,6 +9452,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8962,6 +9502,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9010,6 +9553,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9057,6 +9603,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9108,6 +9657,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9154,6 +9706,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9201,6 +9756,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9247,6 +9805,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9288,6 +9849,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9318,6 +9882,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9364,6 +9931,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9410,6 +9980,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9456,6 +10029,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9502,6 +10078,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9549,6 +10128,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9597,6 +10179,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9643,6 +10228,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9689,6 +10277,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9736,6 +10327,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9782,6 +10376,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9828,6 +10425,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9874,6 +10474,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9920,6 +10523,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9966,6 +10572,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10128,6 +10737,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10175,6 +10787,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10223,6 +10838,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10269,6 +10887,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10316,6 +10937,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10365,6 +10989,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10412,6 +11039,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10461,6 +11091,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10508,6 +11141,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10555,6 +11191,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10601,6 +11240,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10647,6 +11289,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10693,6 +11338,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10739,6 +11387,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10785,6 +11436,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10831,6 +11485,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10877,6 +11534,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10925,6 +11585,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -10971,6 +11634,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11017,6 +11683,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11063,6 +11732,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11109,6 +11781,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11155,6 +11830,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11201,6 +11879,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11247,6 +11928,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11293,6 +11977,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11339,6 +12026,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11385,6 +12075,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11431,6 +12124,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11477,6 +12173,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11523,6 +12222,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11569,6 +12271,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11615,6 +12320,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11662,6 +12370,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11708,6 +12419,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11754,6 +12468,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11800,6 +12517,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11846,6 +12566,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11892,6 +12615,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11938,6 +12664,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -11984,6 +12713,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12030,6 +12762,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12076,6 +12811,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12123,6 +12861,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12169,6 +12910,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12215,6 +12959,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12261,6 +13008,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12307,6 +13057,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12353,6 +13106,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12399,6 +13155,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12445,6 +13204,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12491,6 +13253,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12537,6 +13302,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12583,6 +13351,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12633,6 +13404,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12680,6 +13454,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12726,6 +13503,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12776,6 +13556,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12823,6 +13606,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12871,6 +13657,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12918,6 +13707,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -12960,6 +13752,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -12991,6 +13786,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13038,6 +13836,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13085,6 +13886,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13132,6 +13936,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13179,6 +13986,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13227,6 +14037,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13275,6 +14088,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13322,6 +14138,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13369,6 +14188,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13417,6 +14239,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13464,6 +14289,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13511,6 +14339,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13558,6 +14389,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13605,6 +14439,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13652,6 +14489,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13758,6 +14598,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13805,6 +14648,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13854,6 +14700,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13902,6 +14751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13950,6 +14802,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -13998,6 +14853,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14045,6 +14903,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14092,6 +14953,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14139,6 +15003,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14186,6 +15053,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14233,6 +15103,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14280,6 +15153,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14327,6 +15203,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14376,6 +15255,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14423,6 +15305,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14470,6 +15355,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14517,6 +15405,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14564,6 +15455,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14611,6 +15505,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14658,6 +15555,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14705,6 +15605,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14752,6 +15655,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14799,6 +15705,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14846,6 +15755,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14893,6 +15805,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14940,6 +15855,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -14987,6 +15905,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15034,6 +15955,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15081,6 +16005,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15129,6 +16056,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15176,6 +16106,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15223,6 +16156,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15270,6 +16206,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15317,6 +16256,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15364,6 +16306,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15411,6 +16356,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15458,6 +16406,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15505,6 +16456,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15552,6 +16506,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15600,6 +16557,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15647,6 +16607,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15694,6 +16657,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15741,6 +16707,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15788,6 +16757,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15835,6 +16807,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15882,6 +16857,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15929,6 +16907,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15976,6 +16957,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16023,6 +17007,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16070,6 +17057,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16118,6 +17108,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16165,6 +17158,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16216,6 +17212,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16257,6 +17256,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-cardboard", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16306,6 +17308,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16351,6 +17356,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16388,6 +17396,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16425,6 +17436,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16462,6 +17476,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16500,6 +17517,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16541,6 +17561,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16648,6 +17671,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-cardboard", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16706,6 +17732,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16760,6 +17789,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16809,6 +17841,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-vega", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16855,6 +17890,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16901,6 +17939,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16947,6 +17988,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16994,6 +18038,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17042,6 +18089,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17096,6 +18146,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17143,6 +18196,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17190,6 +18246,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17244,6 +18303,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17290,6 +18352,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17337,6 +18402,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17383,6 +18451,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17424,6 +18495,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -17454,6 +18528,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17500,6 +18577,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17546,6 +18626,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17592,6 +18675,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17638,6 +18724,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17685,6 +18774,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17732,6 +18824,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17778,6 +18873,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17824,6 +18922,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17871,6 +18972,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17917,6 +19021,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17963,6 +19070,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18009,6 +19119,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18055,6 +19168,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18101,6 +19217,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18263,6 +19382,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18310,6 +19432,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18358,6 +19483,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18404,6 +19532,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18451,6 +19582,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18500,6 +19634,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18547,6 +19684,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18596,6 +19736,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18643,6 +19786,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18690,6 +19836,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18736,6 +19885,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18782,6 +19934,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18828,6 +19983,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18874,6 +20032,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18920,6 +20081,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18966,6 +20130,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19012,6 +20179,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19060,6 +20230,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19106,6 +20279,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19152,6 +20328,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19198,6 +20377,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19244,6 +20426,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19290,6 +20475,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19336,6 +20524,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19382,6 +20573,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19428,6 +20622,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19474,6 +20671,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19520,6 +20720,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19566,6 +20769,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19612,6 +20818,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19658,6 +20867,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19704,6 +20916,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19750,6 +20965,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19797,6 +21015,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19843,6 +21064,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19889,6 +21113,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19935,6 +21162,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -19981,6 +21211,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20027,6 +21260,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20073,6 +21309,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20119,6 +21358,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20165,6 +21407,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20211,6 +21456,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20258,6 +21506,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20304,6 +21555,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20350,6 +21604,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20396,6 +21653,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20442,6 +21702,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20488,6 +21751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20534,6 +21800,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20580,6 +21849,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20626,6 +21898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20672,6 +21947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20718,6 +21996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20768,6 +22049,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20815,6 +22099,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20861,6 +22148,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -20902,6 +22192,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "monochrome_public_apk_checker", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20918,126 +22211,189 @@ "junit_tests": [ { "name": "android_webview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "android_webview_junit_tests", "test_id_prefix": "ninja://android_webview/test:android_webview_junit_tests/" }, { "name": "base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "base_junit_tests", "test_id_prefix": "ninja://base:base_junit_tests/" }, { "name": "chrome_java_test_pagecontroller_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", "test_id_prefix": "ninja://chrome/test/android:chrome_java_test_pagecontroller_junit_tests/" }, { "name": "chrome_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_junit_tests", "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/" }, { "name": "components_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "components_junit_tests", "test_id_prefix": "ninja://components:components_junit_tests/" }, { "name": "content_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "content_junit_tests", "test_id_prefix": "ninja://content/public/android:content_junit_tests/" }, { "name": "device_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "device_junit_tests", "test_id_prefix": "ninja://device:device_junit_tests/" }, { "name": "junit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "junit_unit_tests", "test_id_prefix": "ninja://testing/android/junit:junit_unit_tests/" }, { "name": "keyboard_accessory_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "keyboard_accessory_junit_tests", "test_id_prefix": "ninja://chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests/" }, { "name": "media_base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "media_base_junit_tests", "test_id_prefix": "ninja://media/base/android:media_base_junit_tests/" }, { "name": "module_installer_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "module_installer_junit_tests", "test_id_prefix": "ninja://components/module_installer/android:module_installer_junit_tests/" }, { "name": "net_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "net_junit_tests", "test_id_prefix": "ninja://net/android:net_junit_tests/" }, { "name": "paint_preview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "paint_preview_junit_tests", "test_id_prefix": "ninja://components/paint_preview/player/android:paint_preview_junit_tests/" }, { "name": "password_check_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_check_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_check/android:password_check_junit_tests/" }, { "name": "password_manager_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_manager_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_manager/android:password_manager_junit_tests/" }, { "name": "services_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "services_junit_tests", "test_id_prefix": "ninja://services:services_junit_tests/" }, { "name": "touch_to_fill_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "touch_to_fill_junit_tests", "test_id_prefix": "ninja://chrome/browser/touch_to_fill/android:touch_to_fill_junit_tests/" }, { "name": "ui_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "ui_junit_tests", "test_id_prefix": "ninja://ui/android:ui_junit_tests/" }, { "name": "webapk_client_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_client_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/libs/client:webapk_client_junit_tests/" }, { "name": "webapk_shell_apk_h2o_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests/" }, { "name": "webapk_shell_apk_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests/" @@ -21062,6 +22418,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "bf_cache_android_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21168,6 +22527,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "bf_cache_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21217,6 +22579,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "bf_cache_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21266,6 +22631,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "bf_cache_content_unittests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21316,6 +22684,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "bf_cache_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21371,6 +22742,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21417,6 +22791,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21463,6 +22840,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21509,6 +22889,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21555,6 +22938,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21601,6 +22987,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21647,6 +23036,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21689,7 +23081,7 @@ }, "name": "cronet_sizes", "resultdb": { - "enable": false + "enable": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -21771,6 +23163,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21817,6 +23212,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21863,6 +23261,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21909,6 +23310,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -21955,6 +23359,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22001,6 +23408,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22047,6 +23457,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22098,6 +23511,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22144,6 +23560,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22190,6 +23609,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22236,6 +23658,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22282,6 +23707,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22328,6 +23756,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22374,6 +23805,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22519,6 +23953,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22565,6 +24002,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22611,6 +24051,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22657,6 +24100,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22703,6 +24149,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22749,6 +24198,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22795,6 +24247,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22850,6 +24305,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22896,6 +24354,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22942,6 +24403,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -22988,6 +24452,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23034,6 +24501,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23080,6 +24550,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23126,6 +24599,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23177,6 +24653,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23223,6 +24702,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23269,6 +24751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23315,6 +24800,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23361,6 +24849,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23407,6 +24898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23453,6 +24947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23599,6 +25096,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23702,6 +25202,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23758,6 +25261,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23804,6 +25310,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23845,6 +25354,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -23875,6 +25387,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23921,6 +25436,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -23967,6 +25485,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24013,6 +25534,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24059,6 +25583,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24105,6 +25632,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24151,6 +25681,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24197,6 +25730,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24244,6 +25780,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24290,6 +25829,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24336,6 +25878,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24382,6 +25927,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24430,6 +25978,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24477,6 +26028,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24523,6 +26077,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24570,6 +26127,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24617,6 +26177,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24664,6 +26227,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24710,6 +26276,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24756,6 +26325,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24802,6 +26374,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24848,6 +26423,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24894,6 +26472,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24940,6 +26521,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -24986,6 +26570,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25034,6 +26621,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25080,6 +26670,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25126,6 +26719,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25172,6 +26768,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25218,6 +26817,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25264,6 +26866,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25310,6 +26915,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25356,6 +26964,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25402,6 +27013,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25448,6 +27062,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25494,6 +27111,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25540,6 +27160,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25586,6 +27209,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25632,6 +27258,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25678,6 +27307,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25724,6 +27356,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25772,6 +27407,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25818,6 +27456,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25864,6 +27505,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25910,6 +27554,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -25956,6 +27603,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26002,6 +27652,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26048,6 +27701,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26094,6 +27750,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26140,6 +27799,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26186,6 +27848,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26233,6 +27898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26279,6 +27947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26325,6 +27996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26371,6 +28045,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26417,6 +28094,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26463,6 +28143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26509,6 +28192,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26564,6 +28250,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26611,6 +28300,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26658,6 +28350,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26700,6 +28395,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -26731,6 +28429,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26778,6 +28479,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26825,6 +28529,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26872,6 +28579,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26919,6 +28629,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -26967,6 +28680,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27015,6 +28731,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27062,6 +28781,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27109,6 +28831,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27157,6 +28882,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27204,6 +28932,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27251,6 +28982,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27298,6 +29032,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27345,6 +29082,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27392,6 +29132,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27498,6 +29241,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27546,6 +29292,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27593,6 +29342,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27641,6 +29393,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27689,6 +29444,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27736,6 +29494,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27783,6 +29544,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27830,6 +29594,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27877,6 +29644,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27924,6 +29694,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -27971,6 +29744,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28018,6 +29794,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28067,6 +29846,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28114,6 +29896,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28161,6 +29946,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28208,6 +29996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28255,6 +30046,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28302,6 +30096,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28349,6 +30146,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28396,6 +30196,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28443,6 +30246,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28490,6 +30296,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28537,6 +30346,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28584,6 +30396,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28631,6 +30446,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28678,6 +30496,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28725,6 +30546,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28772,6 +30596,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28820,6 +30647,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28867,6 +30697,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28914,6 +30747,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -28961,6 +30797,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29008,6 +30847,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29055,6 +30897,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29102,6 +30947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29149,6 +30997,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29196,6 +31047,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29243,6 +31097,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29290,6 +31147,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29337,6 +31197,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29384,6 +31247,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29431,6 +31297,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29478,6 +31347,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29525,6 +31397,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29572,6 +31447,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29619,6 +31497,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29666,6 +31547,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29713,6 +31597,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29760,6 +31647,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -29807,6 +31697,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "components_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -29833,8 +31726,7 @@ }, "name": "content_shell_crash_test", "resultdb": { - "enable": true, - "result_format": "single" + "enable": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -29887,6 +31779,9 @@ { "isolate_profile_data": true, "name": "android_webview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "android_webview_junit_tests", "test_id_prefix": "ninja://android_webview/test:android_webview_junit_tests/" @@ -29894,6 +31789,9 @@ { "isolate_profile_data": true, "name": "base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "base_junit_tests", "test_id_prefix": "ninja://base:base_junit_tests/" @@ -29901,6 +31799,9 @@ { "isolate_profile_data": true, "name": "chrome_java_test_pagecontroller_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", "test_id_prefix": "ninja://chrome/test/android:chrome_java_test_pagecontroller_junit_tests/" @@ -29908,6 +31809,9 @@ { "isolate_profile_data": true, "name": "chrome_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_junit_tests", "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/" @@ -29915,6 +31819,9 @@ { "isolate_profile_data": true, "name": "components_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "components_junit_tests", "test_id_prefix": "ninja://components:components_junit_tests/" @@ -29922,6 +31829,9 @@ { "isolate_profile_data": true, "name": "content_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "content_junit_tests", "test_id_prefix": "ninja://content/public/android:content_junit_tests/" @@ -29929,6 +31839,9 @@ { "isolate_profile_data": true, "name": "device_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "device_junit_tests", "test_id_prefix": "ninja://device:device_junit_tests/" @@ -29936,6 +31849,9 @@ { "isolate_profile_data": true, "name": "junit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "junit_unit_tests", "test_id_prefix": "ninja://testing/android/junit:junit_unit_tests/" @@ -29943,6 +31859,9 @@ { "isolate_profile_data": true, "name": "keyboard_accessory_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "keyboard_accessory_junit_tests", "test_id_prefix": "ninja://chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests/" @@ -29950,6 +31869,9 @@ { "isolate_profile_data": true, "name": "media_base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "media_base_junit_tests", "test_id_prefix": "ninja://media/base/android:media_base_junit_tests/" @@ -29957,6 +31879,9 @@ { "isolate_profile_data": true, "name": "module_installer_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "module_installer_junit_tests", "test_id_prefix": "ninja://components/module_installer/android:module_installer_junit_tests/" @@ -29964,6 +31889,9 @@ { "isolate_profile_data": true, "name": "net_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "net_junit_tests", "test_id_prefix": "ninja://net/android:net_junit_tests/" @@ -29971,6 +31899,9 @@ { "isolate_profile_data": true, "name": "paint_preview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "paint_preview_junit_tests", "test_id_prefix": "ninja://components/paint_preview/player/android:paint_preview_junit_tests/" @@ -29978,6 +31909,9 @@ { "isolate_profile_data": true, "name": "password_check_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_check_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_check/android:password_check_junit_tests/" @@ -29985,6 +31919,9 @@ { "isolate_profile_data": true, "name": "password_manager_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_manager_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_manager/android:password_manager_junit_tests/" @@ -29992,6 +31929,9 @@ { "isolate_profile_data": true, "name": "services_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "services_junit_tests", "test_id_prefix": "ninja://services:services_junit_tests/" @@ -29999,6 +31939,9 @@ { "isolate_profile_data": true, "name": "touch_to_fill_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "touch_to_fill_junit_tests", "test_id_prefix": "ninja://chrome/browser/touch_to_fill/android:touch_to_fill_junit_tests/" @@ -30006,6 +31949,9 @@ { "isolate_profile_data": true, "name": "ui_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "ui_junit_tests", "test_id_prefix": "ninja://ui/android:ui_junit_tests/" @@ -30013,6 +31959,9 @@ { "isolate_profile_data": true, "name": "webapk_client_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_client_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/libs/client:webapk_client_junit_tests/" @@ -30020,6 +31969,9 @@ { "isolate_profile_data": true, "name": "webapk_shell_apk_h2o_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests/" @@ -30027,6 +31979,9 @@ { "isolate_profile_data": true, "name": "webapk_shell_apk_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests/" @@ -30051,6 +32006,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30110,6 +32068,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30174,6 +32135,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30233,6 +32197,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30293,6 +32260,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30352,6 +32322,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30406,6 +32379,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -30449,6 +32425,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30508,6 +32487,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30567,6 +32549,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30626,6 +32611,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30685,6 +32673,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30745,6 +32736,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30805,6 +32799,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30864,6 +32861,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30923,6 +32923,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -30983,6 +32986,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31042,6 +33048,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31102,6 +33111,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31167,6 +33179,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31226,6 +33241,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31285,6 +33303,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31344,6 +33365,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31545,6 +33569,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31606,6 +33633,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31665,6 +33695,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31726,6 +33759,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31789,6 +33825,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31850,6 +33889,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31913,6 +33955,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -31973,6 +34018,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32033,6 +34081,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32092,6 +34143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32151,6 +34205,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32210,6 +34267,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32269,6 +34329,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32328,6 +34391,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32387,6 +34453,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32446,6 +34515,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32508,6 +34580,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32567,6 +34642,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32626,6 +34704,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32685,6 +34766,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32744,6 +34828,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32803,6 +34890,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32862,6 +34952,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32921,6 +35014,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -32980,6 +35076,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33039,6 +35138,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33098,6 +35200,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33158,6 +35263,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33217,6 +35325,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33276,6 +35387,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33335,6 +35449,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33395,6 +35512,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33456,6 +35576,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33515,6 +35638,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33574,6 +35700,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33633,6 +35762,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33692,6 +35824,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33751,6 +35886,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33810,6 +35948,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33869,6 +36010,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33928,6 +36072,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -33987,6 +36134,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34047,6 +36197,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34106,6 +36259,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34165,6 +36321,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34224,6 +36383,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34283,6 +36445,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34346,6 +36511,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34406,6 +36574,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34465,6 +36636,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34524,6 +36698,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "components_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -34560,6 +36737,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "monochrome_public_apk_checker", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -34608,6 +36788,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34654,6 +36837,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34701,6 +36887,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34747,6 +36936,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34788,6 +36980,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -34818,6 +37013,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34864,6 +37062,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34910,6 +37111,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -34956,6 +37160,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35003,6 +37210,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35050,6 +37260,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35097,6 +37310,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35143,6 +37359,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35189,6 +37408,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35236,6 +37458,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35282,6 +37507,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35328,6 +37556,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35374,6 +37605,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35420,6 +37654,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35466,6 +37703,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35572,6 +37812,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35619,6 +37862,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35665,6 +37911,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35713,6 +37962,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35760,6 +38012,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35807,6 +38062,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35854,6 +38112,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35900,6 +38161,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35946,6 +38210,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -35992,6 +38259,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36038,6 +38308,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36084,6 +38357,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36130,6 +38406,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36176,6 +38455,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36224,6 +38506,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36270,6 +38555,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36316,6 +38604,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36362,6 +38653,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36408,6 +38702,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36454,6 +38751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36500,6 +38800,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36546,6 +38849,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36592,6 +38898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36638,6 +38947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36684,6 +38996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36730,6 +39045,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36776,6 +39094,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36822,6 +39143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36868,6 +39192,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36914,6 +39241,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -36960,6 +39290,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37006,6 +39339,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37052,6 +39388,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37099,6 +39438,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37146,6 +39488,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37192,6 +39537,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37238,6 +39586,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37284,6 +39635,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37330,6 +39684,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37376,6 +39733,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37422,6 +39782,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37468,6 +39831,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37514,6 +39880,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37560,6 +39929,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37607,6 +39979,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37653,6 +40028,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37699,6 +40077,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37745,6 +40126,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37791,6 +40175,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37837,6 +40224,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37883,6 +40273,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37929,6 +40322,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -37975,6 +40371,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38021,6 +40420,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38067,6 +40469,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38117,6 +40522,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38164,6 +40572,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38210,6 +40621,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38256,6 +40670,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "components_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -38281,8 +40698,7 @@ }, "name": "content_shell_crash_test", "resultdb": { - "enable": true, - "result_format": "single" + "enable": true }, "swarming": { "can_use_on_swarming_builders": true, @@ -38305,6 +40721,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "monochrome_public_apk_checker", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -38399,6 +40818,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38446,6 +40868,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38493,6 +40918,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38544,6 +40972,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-cardboard", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38603,6 +41034,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38658,6 +41092,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "chrome_public_test_vr_apk-ddready-don-enabled", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38705,6 +41142,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38752,6 +41192,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38799,6 +41242,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38848,6 +41294,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38895,6 +41344,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38952,6 +41404,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -38999,6 +41454,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39046,6 +41504,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39093,6 +41554,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39140,6 +41604,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39188,6 +41655,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39235,6 +41705,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39282,6 +41755,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39329,6 +41805,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39376,6 +41855,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39423,6 +41905,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39476,6 +41961,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39529,6 +42017,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39589,6 +42080,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39649,6 +42143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39708,6 +42205,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39762,6 +42262,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -39805,6 +42308,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39864,6 +42370,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39923,6 +42432,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -39982,6 +42494,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40041,6 +42556,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40101,6 +42619,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40161,6 +42682,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40220,6 +42744,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40279,6 +42806,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40339,6 +42869,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40398,6 +42931,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40458,6 +42994,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40517,6 +43056,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40576,6 +43118,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40635,6 +43180,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40838,6 +43386,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40899,6 +43450,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -40958,6 +43512,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41019,6 +43576,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41082,6 +43642,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41143,6 +43706,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41206,6 +43772,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41266,6 +43835,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41326,6 +43898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41385,6 +43960,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41444,6 +44022,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41503,6 +44084,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41562,6 +44146,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41621,6 +44208,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41680,6 +44270,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41739,6 +44332,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41801,6 +44397,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41860,6 +44459,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41919,6 +44521,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -41978,6 +44583,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42037,6 +44645,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42096,6 +44707,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42155,6 +44769,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42214,6 +44831,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42273,6 +44893,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42332,6 +44955,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42391,6 +45017,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42451,6 +45080,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42510,6 +45142,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42569,6 +45204,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42628,6 +45266,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42687,6 +45328,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42746,6 +45390,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42805,6 +45452,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42865,6 +45515,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42926,6 +45579,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -42985,6 +45641,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43044,6 +45703,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43103,6 +45765,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43162,6 +45827,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43221,6 +45889,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43280,6 +45951,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43339,6 +46013,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43398,6 +46075,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43457,6 +46137,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43516,6 +46199,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43576,6 +46262,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43636,6 +46325,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43695,6 +46387,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43754,6 +46449,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43813,6 +46511,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43872,6 +46573,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43931,6 +46635,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -43990,6 +46697,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -44056,6 +46766,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -44119,6 +46832,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -44179,6 +46895,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -44238,6 +46957,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -44297,6 +47019,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 4b4241e..f56af5d0e 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -5140,6 +5140,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5186,6 +5189,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5233,6 +5239,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5279,6 +5288,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5320,6 +5332,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -5350,6 +5365,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5396,6 +5414,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5442,6 +5463,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5488,6 +5512,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5534,6 +5561,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5581,6 +5611,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5628,6 +5661,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5674,6 +5710,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5720,6 +5759,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5767,6 +5809,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5813,6 +5858,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5859,6 +5907,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5905,6 +5956,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6065,6 +6119,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6113,6 +6170,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6159,6 +6219,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6206,6 +6269,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6255,6 +6321,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6302,6 +6371,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6351,6 +6423,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6398,6 +6473,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6445,6 +6523,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6491,6 +6572,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6537,6 +6621,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6583,6 +6670,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6629,6 +6719,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6675,6 +6768,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6721,6 +6817,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6767,6 +6866,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6815,6 +6917,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6861,6 +6966,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6907,6 +7015,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6953,6 +7064,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6999,6 +7113,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7045,6 +7162,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7091,6 +7211,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7137,6 +7260,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7183,6 +7309,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7229,6 +7358,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7275,6 +7407,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7321,6 +7456,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7367,6 +7505,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7413,6 +7554,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7459,6 +7603,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7505,6 +7652,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7552,6 +7702,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7598,6 +7751,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7644,6 +7800,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7690,6 +7849,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7736,6 +7898,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7782,6 +7947,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7828,6 +7996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7874,6 +8045,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7920,6 +8094,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7966,6 +8143,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8013,6 +8193,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8059,6 +8242,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8105,6 +8291,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8151,6 +8340,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8197,6 +8389,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8243,6 +8438,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8289,6 +8487,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8330,6 +8531,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "monochrome_public_apk_checker", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -8346,126 +8550,189 @@ "junit_tests": [ { "name": "android_webview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "android_webview_junit_tests", "test_id_prefix": "ninja://android_webview/test:android_webview_junit_tests/" }, { "name": "base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "base_junit_tests", "test_id_prefix": "ninja://base:base_junit_tests/" }, { "name": "chrome_java_test_pagecontroller_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", "test_id_prefix": "ninja://chrome/test/android:chrome_java_test_pagecontroller_junit_tests/" }, { "name": "chrome_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_junit_tests", "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/" }, { "name": "components_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "components_junit_tests", "test_id_prefix": "ninja://components:components_junit_tests/" }, { "name": "content_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "content_junit_tests", "test_id_prefix": "ninja://content/public/android:content_junit_tests/" }, { "name": "device_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "device_junit_tests", "test_id_prefix": "ninja://device:device_junit_tests/" }, { "name": "junit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "junit_unit_tests", "test_id_prefix": "ninja://testing/android/junit:junit_unit_tests/" }, { "name": "keyboard_accessory_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "keyboard_accessory_junit_tests", "test_id_prefix": "ninja://chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests/" }, { "name": "media_base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "media_base_junit_tests", "test_id_prefix": "ninja://media/base/android:media_base_junit_tests/" }, { "name": "module_installer_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "module_installer_junit_tests", "test_id_prefix": "ninja://components/module_installer/android:module_installer_junit_tests/" }, { "name": "net_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "net_junit_tests", "test_id_prefix": "ninja://net/android:net_junit_tests/" }, { "name": "paint_preview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "paint_preview_junit_tests", "test_id_prefix": "ninja://components/paint_preview/player/android:paint_preview_junit_tests/" }, { "name": "password_check_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_check_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_check/android:password_check_junit_tests/" }, { "name": "password_manager_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_manager_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_manager/android:password_manager_junit_tests/" }, { "name": "services_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "services_junit_tests", "test_id_prefix": "ninja://services:services_junit_tests/" }, { "name": "touch_to_fill_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "touch_to_fill_junit_tests", "test_id_prefix": "ninja://chrome/browser/touch_to_fill/android:touch_to_fill_junit_tests/" }, { "name": "ui_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "ui_junit_tests", "test_id_prefix": "ninja://ui/android:ui_junit_tests/" }, { "name": "webapk_client_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_client_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/libs/client:webapk_client_junit_tests/" }, { "name": "webapk_shell_apk_h2o_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests/" }, { "name": "webapk_shell_apk_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests/" @@ -8507,6 +8774,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8543,6 +8813,9 @@ "junit_tests": [ { "name": "base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "base_junit_tests", "test_id_prefix": "ninja://base:base_junit_tests/"
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index ccbc638..da24421 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -1936,6 +1936,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_android_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1992,6 +1995,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2015,6 +2021,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_components_unittests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2040,6 +2049,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2064,6 +2076,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2088,6 +2103,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_content_unittests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2111,6 +2129,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "site_per_process_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2138,6 +2159,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3390,6 +3414,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3437,6 +3464,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3485,6 +3515,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3532,6 +3565,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3574,6 +3610,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3605,6 +3644,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3652,6 +3694,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3699,6 +3744,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3746,6 +3794,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3793,6 +3844,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3841,6 +3895,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3889,6 +3946,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3936,6 +3996,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3983,6 +4046,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4031,6 +4097,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4078,6 +4147,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4125,6 +4197,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4172,6 +4247,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4219,6 +4297,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4266,6 +4347,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4431,6 +4515,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4479,6 +4566,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4528,6 +4618,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4575,6 +4668,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4623,6 +4719,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4673,6 +4772,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4721,6 +4823,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4771,6 +4876,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4819,6 +4927,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4867,6 +4978,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4914,6 +5028,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4961,6 +5078,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5008,6 +5128,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5055,6 +5178,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5102,6 +5228,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5149,6 +5278,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5196,6 +5328,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5245,6 +5380,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5292,6 +5430,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5339,6 +5480,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5386,6 +5530,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5433,6 +5580,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5480,6 +5630,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5527,6 +5680,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5574,6 +5730,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5621,6 +5780,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5668,6 +5830,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5715,6 +5880,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5762,6 +5930,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5809,6 +5980,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5856,6 +6030,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5903,6 +6080,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5950,6 +6130,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5998,6 +6181,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6045,6 +6231,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6092,6 +6281,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6139,6 +6331,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6186,6 +6381,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6233,6 +6431,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6280,6 +6481,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6327,6 +6531,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6374,6 +6581,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6421,6 +6631,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6469,6 +6682,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6516,6 +6732,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6563,6 +6782,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6610,6 +6832,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6657,6 +6882,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6704,6 +6932,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6751,6 +6982,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6798,6 +7032,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6845,6 +7082,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6892,6 +7132,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6939,6 +7182,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -6992,6 +7238,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7043,6 +7292,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7091,6 +7343,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7138,6 +7393,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7185,6 +7443,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7222,6 +7483,9 @@ { "isolate_profile_data": true, "name": "android_webview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "android_webview_junit_tests", "test_id_prefix": "ninja://android_webview/test:android_webview_junit_tests/" @@ -7229,6 +7493,9 @@ { "isolate_profile_data": true, "name": "base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "base_junit_tests", "test_id_prefix": "ninja://base:base_junit_tests/" @@ -7236,6 +7503,9 @@ { "isolate_profile_data": true, "name": "chrome_java_test_pagecontroller_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_java_test_pagecontroller_junit_tests", "test_id_prefix": "ninja://chrome/test/android:chrome_java_test_pagecontroller_junit_tests/" @@ -7243,6 +7513,9 @@ { "isolate_profile_data": true, "name": "chrome_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "chrome_junit_tests", "test_id_prefix": "ninja://chrome/android:chrome_junit_tests/" @@ -7250,6 +7523,9 @@ { "isolate_profile_data": true, "name": "components_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "components_junit_tests", "test_id_prefix": "ninja://components:components_junit_tests/" @@ -7257,6 +7533,9 @@ { "isolate_profile_data": true, "name": "content_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "content_junit_tests", "test_id_prefix": "ninja://content/public/android:content_junit_tests/" @@ -7264,6 +7543,9 @@ { "isolate_profile_data": true, "name": "device_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "device_junit_tests", "test_id_prefix": "ninja://device:device_junit_tests/" @@ -7271,6 +7553,9 @@ { "isolate_profile_data": true, "name": "junit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "junit_unit_tests", "test_id_prefix": "ninja://testing/android/junit:junit_unit_tests/" @@ -7278,6 +7563,9 @@ { "isolate_profile_data": true, "name": "keyboard_accessory_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "keyboard_accessory_junit_tests", "test_id_prefix": "ninja://chrome/android/features/keyboard_accessory:keyboard_accessory_junit_tests/" @@ -7285,6 +7573,9 @@ { "isolate_profile_data": true, "name": "media_base_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "media_base_junit_tests", "test_id_prefix": "ninja://media/base/android:media_base_junit_tests/" @@ -7292,6 +7583,9 @@ { "isolate_profile_data": true, "name": "module_installer_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "module_installer_junit_tests", "test_id_prefix": "ninja://components/module_installer/android:module_installer_junit_tests/" @@ -7299,6 +7593,9 @@ { "isolate_profile_data": true, "name": "net_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "net_junit_tests", "test_id_prefix": "ninja://net/android:net_junit_tests/" @@ -7306,6 +7603,9 @@ { "isolate_profile_data": true, "name": "paint_preview_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "paint_preview_junit_tests", "test_id_prefix": "ninja://components/paint_preview/player/android:paint_preview_junit_tests/" @@ -7313,6 +7613,9 @@ { "isolate_profile_data": true, "name": "password_check_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_check_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_check/android:password_check_junit_tests/" @@ -7320,6 +7623,9 @@ { "isolate_profile_data": true, "name": "password_manager_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "password_manager_junit_tests", "test_id_prefix": "ninja://chrome/browser/password_manager/android:password_manager_junit_tests/" @@ -7327,6 +7633,9 @@ { "isolate_profile_data": true, "name": "services_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "services_junit_tests", "test_id_prefix": "ninja://services:services_junit_tests/" @@ -7334,6 +7643,9 @@ { "isolate_profile_data": true, "name": "touch_to_fill_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "touch_to_fill_junit_tests", "test_id_prefix": "ninja://chrome/browser/touch_to_fill/android:touch_to_fill_junit_tests/" @@ -7341,6 +7653,9 @@ { "isolate_profile_data": true, "name": "ui_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "ui_junit_tests", "test_id_prefix": "ninja://ui/android:ui_junit_tests/" @@ -7348,6 +7663,9 @@ { "isolate_profile_data": true, "name": "webapk_client_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_client_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/libs/client:webapk_client_junit_tests/" @@ -7355,6 +7673,9 @@ { "isolate_profile_data": true, "name": "webapk_shell_apk_h2o_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_h2o_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_h2o_junit_tests/" @@ -7362,6 +7683,9 @@ { "isolate_profile_data": true, "name": "webapk_shell_apk_junit_tests", + "resultdb": { + "enable": true + }, "swarming": {}, "test": "webapk_shell_apk_junit_tests", "test_id_prefix": "ninja://chrome/android/webapk/shell_apk:webapk_shell_apk_junit_tests/" @@ -7385,6 +7709,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7433,6 +7760,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7482,6 +7812,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7525,6 +7858,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7557,6 +7893,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7605,6 +7944,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7653,6 +7995,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7701,6 +8046,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7749,6 +8097,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7797,6 +8148,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7845,6 +8199,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7893,6 +8250,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7942,6 +8302,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -7990,6 +8353,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8038,6 +8404,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8086,6 +8455,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8134,6 +8506,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8182,6 +8557,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8230,6 +8608,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8278,6 +8659,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8326,6 +8710,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8374,6 +8761,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8422,6 +8812,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8472,6 +8865,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8520,6 +8916,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8568,6 +8967,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8616,6 +9018,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8664,6 +9069,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8712,6 +9120,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8760,6 +9171,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8808,6 +9222,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8856,6 +9273,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8904,6 +9324,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -8952,6 +9375,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9000,6 +9426,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9048,6 +9477,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9096,6 +9528,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9144,6 +9579,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9192,6 +9630,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9241,6 +9682,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9289,6 +9733,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9337,6 +9784,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9385,6 +9835,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9433,6 +9886,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9481,6 +9937,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9529,6 +9988,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9577,6 +10039,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9625,6 +10090,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9673,6 +10141,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9721,6 +10192,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9769,6 +10243,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9817,6 +10294,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -9859,6 +10339,66 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_browsertests", + "test_id_prefix": "ninja://chrome/test:android_browsertests/" + }, + { + "args": [ + "--test-launcher-batch-limit=1" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_webview_unittests", + "test_id_prefix": "ninja://android_webview/test:android_webview_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9877,6 +10417,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9895,6 +10438,27 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "breakpad_unittests", + "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9909,6 +10473,100 @@ "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/" }, { + "args": [ + "--git-revision=${got_revision}" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "precommit_args": [ + "--gerrit-issue=${patch_issue}", + "--gerrit-patchset=${patch_set}", + "--buildbucket-id=${buildbucket_build_id}" + ], + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", + "shards": 20 + }, + "test": "chrome_public_test_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_apk/" + }, + { + "args": [ + "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test": "chrome_public_test_vr_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "content_shell_test_apk", + "test_id_prefix": "ninja://content/shell/android:content_shell_test_apk/" + }, + { + "args": [ + "--use-cmd-decoder=validating" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "gl_tests_validating", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gl_tests", + "test_id_prefix": "ninja://gpu:gl_tests/" + }, + { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -9923,6 +10581,63 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "gl_unittests", + "test_id_prefix": "ninja://ui/gl:gl_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_test_apk", + "test_id_prefix": "ninja://mojo/public/java/system:mojo_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_android_unittests", + "test_id_prefix": "ninja://ui/android:ui_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -9931,6 +10646,46 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "vr_android_unittests", + "test_id_prefix": "ninja://chrome/browser/android/vr:vr_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 7 + }, + "test": "webview_instrumentation_test_apk", + "test_id_prefix": "ninja://android_webview/test:webview_instrumentation_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9963,6 +10718,63 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "android_browsertests", + "test_id_prefix": "ninja://chrome/test:android_browsertests/" + }, + { + "args": [ + "--test-launcher-batch-limit=1" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_webview_unittests", + "test_id_prefix": "ninja://android_webview/test:android_webview_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "base_unittests", "test_id_prefix": "ninja://base:base_unittests/" }, @@ -9999,10 +10811,176 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "breakpad_unittests", + "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "chrome_public_smoke_test", "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/" }, { + "args": [ + "--git-revision=${got_revision}" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "precommit_args": [ + "--gerrit-issue=${patch_issue}", + "--gerrit-patchset=${patch_set}", + "--buildbucket-id=${buildbucket_build_id}" + ], + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", + "shards": 20 + }, + "test": "chrome_public_test_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_apk/" + }, + { + "args": [ + "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test": "chrome_public_test_vr_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "content_shell_test_apk", + "test_id_prefix": "ninja://content/shell/android:content_shell_test_apk/" + }, + { + "args": [ + "--use-cmd-decoder=validating" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "gl_tests_validating", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gl_tests", + "test_id_prefix": "ninja://gpu:gl_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gl_unittests", + "test_id_prefix": "ninja://ui/gl:gl_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_test_apk", + "test_id_prefix": "ninja://mojo/public/java/system:mojo_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_android_unittests", + "test_id_prefix": "ninja://ui/android:ui_android_unittests/" + }, + { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -10035,6 +11013,43 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "vr_android_unittests", + "test_id_prefix": "ninja://chrome/browser/android/vr:vr_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 7 + }, + "test": "webview_instrumentation_test_apk", + "test_id_prefix": "ninja://android_webview/test:webview_instrumentation_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "wtf_unittests", "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" } @@ -10047,6 +11062,66 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_browsertests", + "test_id_prefix": "ninja://chrome/test:android_browsertests/" + }, + { + "args": [ + "--test-launcher-batch-limit=1" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_webview_unittests", + "test_id_prefix": "ninja://android_webview/test:android_webview_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10065,6 +11140,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10083,6 +11161,27 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "breakpad_unittests", + "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10097,6 +11196,100 @@ "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/" }, { + "args": [ + "--git-revision=${got_revision}" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "precommit_args": [ + "--gerrit-issue=${patch_issue}", + "--gerrit-patchset=${patch_set}", + "--buildbucket-id=${buildbucket_build_id}" + ], + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", + "shards": 20 + }, + "test": "chrome_public_test_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_apk/" + }, + { + "args": [ + "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test": "chrome_public_test_vr_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "content_shell_test_apk", + "test_id_prefix": "ninja://content/shell/android:content_shell_test_apk/" + }, + { + "args": [ + "--use-cmd-decoder=validating" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "gl_tests_validating", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gl_tests", + "test_id_prefix": "ninja://gpu:gl_tests/" + }, + { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -10111,6 +11304,63 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "gl_unittests", + "test_id_prefix": "ninja://ui/gl:gl_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_test_apk", + "test_id_prefix": "ninja://mojo/public/java/system:mojo_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_android_unittests", + "test_id_prefix": "ninja://ui/android:ui_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -10119,6 +11369,46 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "vr_android_unittests", + "test_id_prefix": "ninja://chrome/browser/android/vr:vr_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 7 + }, + "test": "webview_instrumentation_test_apk", + "test_id_prefix": "ninja://android_webview/test:webview_instrumentation_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10141,6 +11431,66 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_browsertests", + "test_id_prefix": "ninja://chrome/test:android_browsertests/" + }, + { + "args": [ + "--test-launcher-batch-limit=1" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:android_sync_integration_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "android_webview_unittests", + "test_id_prefix": "ninja://android_webview/test:android_webview_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10159,6 +11509,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10177,6 +11530,27 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "breakpad_unittests", + "test_id_prefix": "ninja://third_party/breakpad:breakpad_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -10191,6 +11565,100 @@ "test_id_prefix": "ninja://chrome/android:chrome_public_smoke_test/" }, { + "args": [ + "--git-revision=${got_revision}" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "precommit_args": [ + "--gerrit-issue=${patch_issue}", + "--gerrit-patchset=${patch_set}", + "--buildbucket-id=${buildbucket_build_id}" + ], + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chrome-gold@chops-service-accounts.iam.gserviceaccount.com", + "shards": 20 + }, + "test": "chrome_public_test_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_apk/" + }, + { + "args": [ + "--shared-prefs-file=//chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json", + "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 2 + }, + "test": "chrome_public_test_vr_apk", + "test_id_prefix": "ninja://chrome/android:chrome_public_test_vr_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "content_shell_test_apk", + "test_id_prefix": "ninja://content/shell/android:content_shell_test_apk/" + }, + { + "args": [ + "--use-cmd-decoder=validating" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "gl_tests_validating", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gl_tests", + "test_id_prefix": "ninja://gpu:gl_tests/" + }, + { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -10205,6 +11673,63 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "gl_unittests", + "test_id_prefix": "ninja://ui/gl:gl_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_test_apk", + "test_id_prefix": "ninja://mojo/public/java/system:mojo_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_android_unittests", + "test_id_prefix": "ninja://ui/android:ui_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -10213,6 +11738,46 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "vr_android_unittests", + "test_id_prefix": "ninja://chrome/browser/android/vr:vr_android_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "device_type": "walleye", + "os": "Android" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 7 + }, + "test": "webview_instrumentation_test_apk", + "test_id_prefix": "ninja://android_webview/test:webview_instrumentation_test_apk/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -35858,7 +37423,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "absl_hardening_tests", @@ -35883,7 +37448,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -35900,7 +37465,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "base_unittests", @@ -35925,7 +37490,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -35942,7 +37507,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "base_unittests", @@ -35967,7 +37532,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -35984,7 +37549,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "base_unittests", @@ -36009,7 +37574,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36026,7 +37591,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "boringssl_crypto_tests", @@ -36051,7 +37616,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36068,7 +37633,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "boringssl_ssl_tests", @@ -36093,7 +37658,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36110,7 +37675,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "components_unittests", @@ -36135,7 +37700,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36152,7 +37717,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "components_unittests", @@ -36177,7 +37742,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36194,7 +37759,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "components_unittests", @@ -36219,7 +37784,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36236,7 +37801,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "crypto_unittests", @@ -36261,7 +37826,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36278,7 +37843,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "gfx_unittests", @@ -36303,7 +37868,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36320,7 +37885,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "gfx_unittests", @@ -36345,7 +37910,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36362,7 +37927,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "gfx_unittests", @@ -36387,7 +37952,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36404,7 +37969,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "google_apis_unittests", @@ -36429,7 +37994,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36446,7 +38011,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36472,7 +38037,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36489,7 +38054,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36515,7 +38080,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36532,7 +38097,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36558,7 +38123,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36575,7 +38140,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36601,7 +38166,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36618,7 +38183,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36644,7 +38209,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36662,7 +38227,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36688,7 +38253,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36706,7 +38271,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36732,7 +38297,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36750,7 +38315,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36776,7 +38341,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36794,7 +38359,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36820,7 +38385,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36838,7 +38403,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36864,7 +38429,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36882,7 +38447,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36908,7 +38473,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36926,7 +38491,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36952,7 +38517,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -36970,7 +38535,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -36996,7 +38561,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37013,7 +38578,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37039,7 +38604,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37056,7 +38621,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37082,7 +38647,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37099,7 +38664,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37125,7 +38690,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37142,7 +38707,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37168,7 +38733,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37185,7 +38750,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37211,7 +38776,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37228,7 +38793,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37254,7 +38819,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37271,7 +38836,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37297,7 +38862,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37314,7 +38879,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37340,7 +38905,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37358,7 +38923,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37384,7 +38949,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37402,7 +38967,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37428,7 +38993,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37446,7 +39011,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37472,7 +39037,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37490,7 +39055,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_chrome_unittests", @@ -37515,7 +39080,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37532,7 +39097,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_chrome_unittests", @@ -37557,7 +39122,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37574,7 +39139,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_chrome_unittests", @@ -37599,7 +39164,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37616,7 +39181,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37642,7 +39207,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37659,7 +39224,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37685,7 +39250,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37702,7 +39267,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37728,7 +39293,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37745,7 +39310,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37771,7 +39336,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37788,7 +39353,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_components_unittests", @@ -37813,7 +39378,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37830,7 +39395,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_net_unittests", @@ -37855,7 +39420,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37872,7 +39437,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_remoting_unittests", @@ -37897,7 +39462,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37914,7 +39479,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37940,7 +39505,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -37957,7 +39522,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -37983,7 +39548,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38000,7 +39565,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38026,7 +39591,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38043,7 +39608,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38069,7 +39634,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38086,7 +39651,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_testing_unittests", @@ -38111,7 +39676,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38128,7 +39693,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_inttests", @@ -38153,7 +39718,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38170,7 +39735,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_inttests", @@ -38195,7 +39760,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38212,7 +39777,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_inttests", @@ -38237,7 +39802,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38254,7 +39819,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38280,7 +39845,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38297,7 +39862,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38323,7 +39888,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38340,7 +39905,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38366,7 +39931,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38383,7 +39948,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -38409,7 +39974,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38426,7 +39991,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_unittests", @@ -38451,7 +40016,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38468,7 +40033,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_unittests", @@ -38493,7 +40058,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38510,7 +40075,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_unittests", @@ -38535,7 +40100,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38552,7 +40117,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_inttests", @@ -38577,7 +40142,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38594,7 +40159,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_inttests", @@ -38619,7 +40184,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38636,7 +40201,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_inttests", @@ -38661,7 +40226,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38678,7 +40243,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_unittests", @@ -38703,7 +40268,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38720,7 +40285,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_unittests", @@ -38745,7 +40310,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38762,7 +40327,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_unittests", @@ -38787,7 +40352,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38804,7 +40369,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "net_unittests", @@ -38829,7 +40394,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38846,7 +40411,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "services_unittests", @@ -38871,7 +40436,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38888,7 +40453,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "skia_unittests", @@ -38913,7 +40478,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38930,7 +40495,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "skia_unittests", @@ -38955,7 +40520,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -38972,7 +40537,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "skia_unittests", @@ -38997,7 +40562,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39014,7 +40579,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "sql_unittests", @@ -39039,7 +40604,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39056,7 +40621,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ui_base_unittests", @@ -39081,7 +40646,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39098,7 +40663,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ui_base_unittests", @@ -39123,7 +40688,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39140,7 +40705,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ui_base_unittests", @@ -39165,7 +40730,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39182,7 +40747,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "url_unittests", @@ -39207,7 +40772,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39231,7 +40796,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "absl_hardening_tests", @@ -39256,7 +40821,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39273,7 +40838,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "base_unittests", @@ -39298,7 +40863,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39315,7 +40880,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "base_unittests", @@ -39340,7 +40905,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39357,7 +40922,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "boringssl_crypto_tests", @@ -39382,7 +40947,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39399,7 +40964,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "boringssl_ssl_tests", @@ -39424,7 +40989,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39441,7 +41006,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "components_unittests", @@ -39466,7 +41031,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39483,7 +41048,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "components_unittests", @@ -39508,7 +41073,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39525,7 +41090,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "crypto_unittests", @@ -39550,7 +41115,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39567,7 +41132,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "gfx_unittests", @@ -39592,7 +41157,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39609,7 +41174,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "gfx_unittests", @@ -39634,7 +41199,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39651,7 +41216,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "google_apis_unittests", @@ -39676,7 +41241,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39693,7 +41258,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39719,7 +41284,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39736,7 +41301,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39762,7 +41327,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39779,7 +41344,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39805,7 +41370,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39822,7 +41387,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39848,7 +41413,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39866,7 +41431,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39892,7 +41457,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39910,7 +41475,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39936,7 +41501,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39954,7 +41519,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -39980,7 +41545,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -39998,7 +41563,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40024,7 +41589,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40042,7 +41607,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40068,7 +41633,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40086,7 +41651,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40112,7 +41677,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40129,7 +41694,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40155,7 +41720,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40172,7 +41737,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40198,7 +41763,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40215,7 +41780,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40241,7 +41806,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40258,7 +41823,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40284,7 +41849,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40301,7 +41866,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40327,7 +41892,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40344,7 +41909,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40370,7 +41935,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40388,7 +41953,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40414,7 +41979,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40432,7 +41997,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40458,7 +42023,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40476,7 +42041,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_chrome_unittests", @@ -40501,7 +42066,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40518,7 +42083,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_chrome_unittests", @@ -40543,7 +42108,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40560,7 +42125,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40586,7 +42151,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40603,7 +42168,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40629,7 +42194,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40646,7 +42211,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40672,7 +42237,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40689,7 +42254,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_components_unittests", @@ -40714,7 +42279,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40731,7 +42296,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_net_unittests", @@ -40756,7 +42321,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40773,7 +42338,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_remoting_unittests", @@ -40798,7 +42363,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40815,7 +42380,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40841,7 +42406,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40858,7 +42423,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40884,7 +42449,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40901,7 +42466,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -40927,7 +42492,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40944,7 +42509,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_testing_unittests", @@ -40969,7 +42534,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -40986,7 +42551,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_inttests", @@ -41011,7 +42576,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41028,7 +42593,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_inttests", @@ -41053,7 +42618,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41070,7 +42635,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -41096,7 +42661,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41113,7 +42678,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -41139,7 +42704,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41156,7 +42721,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest", "--xcode-parallelization" ], @@ -41182,7 +42747,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41199,7 +42764,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_unittests", @@ -41224,7 +42789,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41241,7 +42806,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_unittests", @@ -41266,7 +42831,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41283,7 +42848,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_inttests", @@ -41308,7 +42873,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41325,7 +42890,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_inttests", @@ -41350,7 +42915,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41367,7 +42932,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_unittests", @@ -41392,7 +42957,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41409,7 +42974,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ios_web_view_unittests", @@ -41434,7 +42999,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41451,7 +43016,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "net_unittests", @@ -41476,7 +43041,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41493,7 +43058,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "services_unittests", @@ -41518,7 +43083,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41535,7 +43100,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "skia_unittests", @@ -41560,7 +43125,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41577,7 +43142,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "skia_unittests", @@ -41602,7 +43167,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41619,7 +43184,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "sql_unittests", @@ -41644,7 +43209,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41661,7 +43226,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ui_base_unittests", @@ -41686,7 +43251,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41703,7 +43268,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "ui_base_unittests", @@ -41728,7 +43293,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -41745,7 +43310,7 @@ "--out-dir", "${ISOLATED_OUTDIR}", "--xcode-build-version", - "12b5035g", + "12b5044c", "--xctest" ], "isolate_name": "url_unittests", @@ -41770,7 +43335,7 @@ ], "named_caches": [ { - "name": "xcode_ios_12b5035g", + "name": "xcode_ios_12b5044c", "path": "Xcode.app" } ], @@ -53349,6 +54914,266 @@ } ] }, + "linux-paeverywhere-x64-fyi-dbg": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_platform_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "openscreen_unittests", + "test_id_prefix": "ninja://chrome/browser/media/router:openscreen_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "unit_tests", + "test_id_prefix": "ninja://chrome/test:unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "wtf_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "x11_unittests", + "test_id_prefix": "ninja://ui/platform_window/x11:x11_unittests/" + } + ] + }, + "linux-paeverywhere-x64-fyi-rel": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_platform_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "openscreen_unittests", + "test_id_prefix": "ninja://chrome/browser/media/router:openscreen_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "unit_tests", + "test_id_prefix": "ninja://chrome/test:unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "wtf_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "x11_unittests", + "test_id_prefix": "ninja://ui/platform_window/x11:x11_unittests/" + } + ] + }, "linux-perfetto-rel": { "additional_compile_targets": [ "chrome" @@ -58940,6 +60765,304 @@ } ] }, + "mac-paeverywhere-x64-fyi-dbg": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_platform_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "openscreen_unittests", + "test_id_prefix": "ninja://chrome/browser/media/router:openscreen_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sandbox_mac_unittests", + "test_id_prefix": "ninja://sandbox/mac:sandbox_mac_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "unit_tests", + "test_id_prefix": "ninja://chrome/test:unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "updater_tests", + "test_id_prefix": "ninja://chrome/updater:updater_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "wtf_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "xr_browser_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "xr_browser_tests", + "test_id_prefix": "ninja://chrome/test:xr_browser_tests/" + } + ] + }, + "mac-paeverywhere-x64-fyi-rel": { + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_unittests", + "test_id_prefix": "ninja://base:base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_platform_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_platform_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "openscreen_unittests", + "test_id_prefix": "ninja://chrome/browser/media/router:openscreen_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sandbox_mac_unittests", + "test_id_prefix": "ninja://sandbox/mac:sandbox_mac_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "unit_tests", + "test_id_prefix": "ninja://chrome/test:unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "updater_tests", + "test_id_prefix": "ninja://chrome/updater:updater_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "wtf_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/wtf:wtf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "name": "xr_browser_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Mac-10.15" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "xr_browser_tests", + "test_id_prefix": "ninja://chrome/test:xr_browser_tests/" + } + ] + }, "mac-upload-perfetto": { "additional_compile_targets": [ "trace_processor_shell" @@ -59467,6 +61590,24 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-18363" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -59852,6 +61993,24 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-18363" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -60237,6 +62396,24 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-18363" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" }, @@ -60622,6 +62799,24 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "traffic_annotation_auditor_unittests", + "test_id_prefix": "ninja://tools/traffic_annotation/auditor:traffic_annotation_auditor_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "cpu": "x86-64", + "os": "Windows-10-18363" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "unit_tests", "test_id_prefix": "ninja://chrome/test:unit_tests/" },
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 5b43b992..6e85053 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2762,6 +2762,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2790,6 +2793,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2828,6 +2834,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "angle_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2863,6 +2872,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2895,6 +2907,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_egl_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2926,6 +2941,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles2_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2957,6 +2975,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles31_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -2988,6 +3009,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles3_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3019,6 +3043,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles2_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3049,6 +3076,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles31_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3080,6 +3110,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles32_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3110,6 +3143,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles3_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3147,6 +3183,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "angle_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3182,6 +3221,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3210,6 +3252,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3248,6 +3293,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "angle_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3283,6 +3331,9 @@ "--gerrit-patchset=${patch_set}", "--buildbucket-id=${buildbucket_build_id}" ], + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3315,6 +3366,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_egl_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3346,6 +3400,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles2_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3377,6 +3434,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles31_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3408,6 +3468,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_gles3_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3439,6 +3502,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles2_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3469,6 +3535,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles31_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3500,6 +3569,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles32_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3530,6 +3602,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "angle_deqp_khr_gles3_vulkan_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3562,6 +3637,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -3591,6 +3669,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3634,6 +3715,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -3677,6 +3761,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4111,6 +4198,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -4140,6 +4230,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4183,6 +4276,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4226,6 +4322,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4662,6 +4761,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -4689,6 +4791,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -4786,6 +4891,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "angle_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -5081,6 +5189,9 @@ "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, "name": "rendering_representative_perf_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -5254,6 +5365,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -5283,6 +5397,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5326,6 +5443,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5369,6 +5489,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5803,6 +5926,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -5832,6 +5958,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5875,6 +6004,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5918,6 +6050,9 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -5972,6 +6107,9 @@ "script": "//tools/perf/process_perf_results.py" }, "name": "angle_perftests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "containment_type": "AUTO", @@ -6604,6 +6742,9 @@ "script": "//testing/merge_scripts/standard_gtest_merge.py" }, "name": "vulkan_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index b08ff8f..044c4b84 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -1120,6 +1120,23 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, + "test": "cast_accessibility_unittests", + "test_id_prefix": "ninja://chromecast/browser/accessibility/flutter:cast_accessibility_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "dimension_sets": [ + { + "os": "Ubuntu-16.04" + } + ], + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, "test": "cast_audio_backend_unittests", "test_id_prefix": "ninja://chromecast/media/cma/backend:cast_audio_backend_unittests/" },
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index 6ae5567e..32d6d91 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -15720,6 +15720,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15766,6 +15769,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15813,6 +15819,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15859,6 +15868,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15900,6 +15912,9 @@ "args": [], "script": "//testing/merge_scripts/standard_isolated_script_merge.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -15930,6 +15945,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -15976,6 +15994,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16022,6 +16043,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16068,6 +16092,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16114,6 +16141,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16161,6 +16191,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "webkit_unit_tests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16208,6 +16241,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16254,6 +16290,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16301,6 +16340,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16348,6 +16390,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16394,6 +16439,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16440,6 +16488,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16486,6 +16537,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16532,6 +16586,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16578,6 +16635,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16626,6 +16686,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16673,6 +16736,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16720,6 +16786,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16766,6 +16835,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16812,6 +16884,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16858,6 +16933,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16904,6 +16982,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16950,6 +17031,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -16996,6 +17080,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17042,6 +17129,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17090,6 +17180,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "gl_tests_validating", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17136,6 +17229,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17182,6 +17278,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17228,6 +17327,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17274,6 +17376,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17320,6 +17425,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17367,6 +17475,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17413,6 +17524,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17459,6 +17573,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17505,6 +17622,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17551,6 +17671,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17597,6 +17720,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17643,6 +17769,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17689,6 +17818,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17735,6 +17867,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17782,6 +17917,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17829,6 +17967,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17875,6 +18016,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17921,6 +18065,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -17967,6 +18114,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18013,6 +18163,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18059,6 +18212,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18105,6 +18261,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18151,6 +18310,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18198,6 +18360,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18245,6 +18410,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18291,6 +18459,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18337,6 +18508,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18383,6 +18557,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18429,6 +18606,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18475,6 +18655,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -18521,6 +18704,9 @@ ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [
diff --git a/testing/buildbot/chromium.mojo.json b/testing/buildbot/chromium.mojo.json index 7585f6d..3a5d336 100644 --- a/testing/buildbot/chromium.mojo.json +++ b/testing/buildbot/chromium.mojo.json
@@ -285,6 +285,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_components_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -333,6 +336,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_browsertests", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -382,6 +388,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_out_of_process_content_shell_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [ @@ -432,6 +441,9 @@ "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, "name": "network_service_webview_instrumentation_test_apk", + "resultdb": { + "enable": true + }, "swarming": { "can_use_on_swarming_builders": true, "cipd_packages": [
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index f39543d2..09565e1a 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -341,6 +341,10 @@ "label": "//media/capture:capture_unittests", "type": "windowed_test_launcher", }, + "cast_accessibility_unittests": { + "label": "//chromecast/browser/accessibility/flutter:cast_accessibility_unittests", + "type": "console_test_launcher", + }, "cast_runner_browsertests": { "label": "//fuchsia/runners:cast_runner_browsertests", "type": "console_test_launcher",
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 1c0d344..92f6cc4 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -1075,17 +1075,17 @@ }, }, # latest Xcode 12 beta version. - 'xcode_12b5035g': { + 'xcode_12b5044c': { '$mixin_append': { 'args': [ '--xcode-build-version', - '12b5035g' + '12b5044c' ], }, 'swarming': { 'named_caches': [ { - 'name': 'xcode_ios_12b5035g', + 'name': 'xcode_ios_12b5044c', 'path': 'Xcode.app', }, ],
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 140e73b..3af80154 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -403,6 +403,7 @@ }, 'cast_video_specific_chromium_gtests': { + 'cast_accessibility_unittests': {}, 'cast_graphics_unittests': {}, 'exo_unittests': {}, 'views_unittests': { @@ -6135,11 +6136,26 @@ ], 'paeverywhere_android_gtests': [ + 'android_specific_chromium_gtests', 'android_smoke_tests', 'paeverywhere_common_tests' ], + 'paeverywhere_linux_gtests': [ + 'chromium_gtests_for_linux_and_mac_only', + 'chromium_gtests_for_linux_only', + 'chromium_gtests_for_win_and_linux_only', + 'paeverywhere_common_tests', + ], + + 'paeverywhere_mac_gtests': [ + 'chromium_gtests_for_linux_and_mac_only', + 'mac_specific_chromium_gtests', + 'paeverywhere_common_tests', + ], + 'paeverywhere_win_gtests': [ + 'chromium_gtests_for_win_and_linux_only', 'paeverywhere_common_tests', 'win_specific_chromium_gtests', ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 8e6b8ad..ad2c90d 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -583,6 +583,9 @@ 'test_suites': { 'gtest_tests': 'webview_bot_system_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -602,6 +605,9 @@ 'test_suites': { 'gtest_tests': 'webview_bot_system_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -620,6 +626,9 @@ 'test_suites': { 'gtest_tests': 'webview_bot_all_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -637,6 +646,7 @@ }, 'Android WebView O (dbg)': { 'mixins': [ + 'enable_resultdb', 'oreo_fleet', 'walleye', ], @@ -651,6 +661,7 @@ }, 'Android WebView P (dbg)': { 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -698,6 +709,9 @@ 'test_suites': { 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -715,6 +729,9 @@ 'test_suites': { 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -729,6 +746,7 @@ }, 'Marshmallow 64 bit Tester': { 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -741,6 +759,9 @@ 'test_suites': { 'gtest_tests': 'android_lollipop_marshmallow_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -757,6 +778,9 @@ 'test_suites': { 'gtest_tests': 'android_nougat_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -784,6 +808,9 @@ 'test_suites': { 'gtest_tests': 'android_oreo_gtests', }, + 'mixins': [ + 'enable_resultdb', + ], }, 'android-10-arm64-rel': { 'swarming': { @@ -801,12 +828,16 @@ }, 'use_swarming': True, 'os_type': 'android', + 'mixins': [ + 'enable_resultdb' + ], }, 'android-arm64-proguard-rel': { 'additional_compile_targets': [ 'all', ], 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -819,6 +850,7 @@ }, 'android-bfcache-rel': { 'mixins': [ + 'enable_resultdb', 'lollipop', 'hammerhead', ], @@ -829,6 +861,7 @@ }, 'android-cronet-arm-dbg': { 'mixins': [ + 'enable_resultdb', 'lollipop', 'hammerhead', ], @@ -852,6 +885,7 @@ }, 'android-cronet-arm-rel-kitkat-tests': { 'mixins': [ + 'enable_resultdb', 'kitkat', 'hammerhead', ], @@ -862,6 +896,7 @@ }, 'android-cronet-arm-rel-lollipop-tests': { 'mixins': [ + 'enable_resultdb', 'lollipop', 'hammerhead', ], @@ -904,6 +939,7 @@ }, 'android-cronet-arm64-rel-marshmallow-tests': { 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -914,6 +950,7 @@ }, 'android-cronet-asan-arm-rel': { 'mixins': [ + 'enable_resultdb', 'bullhead', 'marshmallow', ], @@ -928,6 +965,7 @@ }, 'android-cronet-marshmallow-arm64-rel': { 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -972,6 +1010,9 @@ 'test_suites': { 'gtest_tests': 'android_incremental_tests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -985,6 +1026,7 @@ }, 'android-lollipop-arm-rel': { 'mixins': [ + 'enable_resultdb', 'hammerhead', 'lollipop', ], @@ -1001,6 +1043,7 @@ }, 'android-marshmallow-arm64-rel': { 'mixins': [ + 'enable_resultdb', 'bullhead', 'isolate_profile_data', 'marshmallow', @@ -1018,6 +1061,7 @@ }, 'android-marshmallow-x86-rel': { 'mixins': [ + 'enable_resultdb', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1030,6 +1074,7 @@ }, 'android-marshmallow-x86-rel-non-cq': { 'mixins': [ + 'enable_resultdb', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1043,6 +1088,7 @@ }, 'android-nougat-arm64-rel': { 'mixins': [ + 'enable_resultdb', 'nougat', 'sailfish', ], @@ -1058,6 +1104,7 @@ }, 'android-pie-arm64-dbg': { 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -1068,6 +1115,7 @@ }, 'android-pie-arm64-rel': { 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -1088,6 +1136,7 @@ }, 'android-pie-x86-rel': { 'mixins': [ + 'enable_resultdb', 'pie-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1106,6 +1155,7 @@ 'machines': { 'Android WebView P FYI (rel)': { 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -1117,6 +1167,7 @@ }, 'android-inverse-fieldtrials-pie-x86-fyi-rel': { 'mixins': [ + 'enable_resultdb', 'pie-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1128,6 +1179,7 @@ }, 'android-pie-arm64-wpt-rel-non-cq': { 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -1139,6 +1191,7 @@ }, 'android-weblayer-10-x86-rel-tests': { 'mixins': [ + 'enable_resultdb', '10-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1151,6 +1204,7 @@ }, 'android-weblayer-marshmallow-x86-rel-tests': { 'mixins': [ + 'enable_resultdb', 'marshmallow-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1163,6 +1217,7 @@ }, 'android-weblayer-pie-x86-rel-tests': { 'mixins': [ + 'enable_resultdb', 'pie-x86-emulator', 'emulator-4-cores', 'linux-xenial', @@ -1355,6 +1410,7 @@ }, 'ToTAndroid': { 'mixins': [ + 'enable_resultdb', 'lollipop', 'hammerhead', ], @@ -1400,6 +1456,9 @@ 'gtest_tests': 'chromium_android_asan_gtests', 'junit_tests': 'chromium_android_asan_junit_tests', }, + 'mixins': [ + 'enable_resultdb' + ], 'swarming': { 'dimension_sets': [ { @@ -2183,9 +2242,13 @@ 'test_suites': { 'gtest_tests': 'site_isolation_android_fyi_gtests', }, + 'mixins': [ + 'enable_resultdb' + ], }, 'VR Linux': { 'mixins': [ + 'enable_resultdb', 'linux-xenial', ], 'additional_compile_targets': [ @@ -2232,6 +2295,7 @@ }, 'android-code-coverage': { 'mixins': [ + 'enable_resultdb', 'bullhead', 'isolate_profile_data', 'marshmallow', @@ -2244,6 +2308,7 @@ }, 'android-code-coverage-native': { 'mixins': [ + 'enable_resultdb', 'isolate_profile_data', 'pie_fleet', 'walleye', @@ -2259,6 +2324,7 @@ 'gtest_tests': 'paeverywhere_android_gtests', }, 'mixins': [ + 'enable_resultdb', 'walleye', ], }, @@ -2275,6 +2341,7 @@ 'gtest_tests': 'paeverywhere_android_gtests', }, 'mixins': [ + 'enable_resultdb', 'walleye', ], }, @@ -2283,6 +2350,7 @@ 'gtest_tests': 'paeverywhere_android_gtests', }, 'mixins': [ + 'enable_resultdb', 'walleye', ], }, @@ -2474,7 +2542,7 @@ 'mac_10.15', 'mac_toolchain', 'out_dir_arg', - 'xcode_12b5035g', + 'xcode_12b5044c', 'xctest', ], 'test_suites': { @@ -2491,7 +2559,7 @@ 'mac_10.15', 'mac_toolchain', 'out_dir_arg', - 'xcode_12b5035g', + 'xcode_12b5044c', 'xctest', ], 'test_suites': { @@ -2642,6 +2710,24 @@ 'gtest_tests': 'linux_lacros_gtests', }, }, + 'linux-paeverywhere-x64-fyi-dbg': { + 'test_suites': { + 'gtest_tests': 'paeverywhere_linux_gtests', + }, + 'mixins': [ + 'linux-xenial', + 'x86-64', + ], + }, + 'linux-paeverywhere-x64-fyi-rel': { + 'test_suites': { + 'gtest_tests': 'paeverywhere_linux_gtests', + }, + 'mixins': [ + 'linux-xenial', + 'x86-64', + ], + }, 'linux-perfetto-rel': { 'additional_compile_targets': [ 'chrome' ], 'mixins': [ @@ -2725,6 +2811,24 @@ 'isolated_scripts': 'chromium_mac_rel_isolated_scripts', }, }, + 'mac-paeverywhere-x64-fyi-dbg': { + 'test_suites': { + 'gtest_tests': 'paeverywhere_mac_gtests', + }, + 'mixins': [ + 'mac_10.15', + 'x86-64', + ], + }, + 'mac-paeverywhere-x64-fyi-rel': { + 'test_suites': { + 'gtest_tests': 'paeverywhere_mac_gtests', + }, + 'mixins': [ + 'mac_10.15', + 'x86-64', + ], + }, 'mac-upload-perfetto': { 'additional_compile_targets': [ 'trace_processor_shell' ], 'test_suites': { @@ -3479,6 +3583,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'android_q', 'walleye', @@ -3495,6 +3600,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'android_q', 'walleye', @@ -3506,6 +3612,7 @@ 'Android FYI 64 Perf (Pixel 2)': { 'os_type': 'android', 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'android_q', 'walleye', @@ -3518,6 +3625,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'android_q', 'walleye', @@ -3534,6 +3642,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'android_q', 'walleye', @@ -3547,6 +3656,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'foster', 'gpu-swarming-pool', 'nougat_generic', @@ -3561,6 +3671,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'hammerhead', 'lollipop_generic', @@ -3575,6 +3686,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -3590,6 +3702,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'gpu-swarming-pool', 'lollipop_generic', 'shamu', @@ -3605,6 +3718,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'flounder', 'gpu-swarming-pool', 'marshmallow_generic', @@ -3620,6 +3734,7 @@ 'os_type': 'android', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -3634,6 +3749,7 @@ 'browser_config': 'android-chromium', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'marshmallow', 'bullhead', ], @@ -3646,6 +3762,7 @@ 'browser_config': 'android-chromium', 'skip_merge_script': True, 'mixins': [ + 'enable_resultdb', 'pie_fleet', 'walleye', ], @@ -4990,6 +5107,7 @@ 'gtest_tests': 'chromium_android_gtests', }, 'mixins': [ + 'enable_resultdb', 'bullhead', 'marshmallow', ], @@ -5061,6 +5179,9 @@ 'test_suites': { 'gtest_tests': 'network_service_android_gtests', }, + 'mixins': [ + 'enable_resultdb', + ], }, 'mac-mojo-rel': { 'mixins': [
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index a669b81..6d8ab83 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -3135,22 +3135,6 @@ ] } ], - "GestureNavigation": [ - { - "platforms": [ - "android", - "android_weblayer" - ], - "experiments": [ - { - "name": "Enabled", - "enable_features": [ - "OverscrollHistoryNavigation" - ] - } - ] - } - ], "GlobalMediaControlsInProductHelp": [ { "platforms": [ @@ -4119,6 +4103,26 @@ ] } ], + "LookalikeTargetEmbeddingHeuristic": [ + { + "platforms": [ + "android", + "chromeos", + "ios", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "TargetEmbeddingLookalikes" + ] + } + ] + } + ], "LowPriorityAdProcesses": [ { "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index ff62f7fc..88ccabbf 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -94,6 +94,10 @@ // Enable LayoutNG. const base::Feature kLayoutNG{"LayoutNG", base::FEATURE_ENABLED_BY_DEFAULT}; +// Enable TableNG +const base::Feature kLayoutNGTable{"LayoutNGTable", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enable LayoutNGFieldset by default. This feature is for a kill switch. const base::Feature kLayoutNGFieldset{"LayoutNGFieldset", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/third_party/blink/perf_tests/parser/declarative-shadow-dom-cloning.html b/third_party/blink/perf_tests/parser/declarative-shadow-dom-cloning.html index 47f72891..e11a3992 100644 --- a/third_party/blink/perf_tests/parser/declarative-shadow-dom-cloning.html +++ b/third_party/blink/perf_tests/parser/declarative-shadow-dom-cloning.html
@@ -13,13 +13,18 @@ } } +function setInnerHTML(el,content) { + const fragment = (new DOMParser()).parseFromString(`<pre>${content}</pre>`, 'text/html', {includeShadowRoots: true}); + (el instanceof HTMLTemplateElement ? el.content : el).replaceChildren(...fragment.body.firstChild.childNodes); +} + const hostChildren = 100; function buildTemplate(slotted) { const template = document.createElement('template'); document.body.appendChild(template); const html = createDeepShadowTemplateContent(hostChildren, slotted); - template.setInnerHTML(html, {includeShadowRoots: true}); + setInnerHTML(template,html); return template; }
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index ceb0376..40caedc 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -39,6 +39,7 @@ BLINK_COMMON_EXPORT extern const base::Feature kTopLevelAwait; BLINK_COMMON_EXPORT extern const base::Feature kEditingNG; BLINK_COMMON_EXPORT extern const base::Feature kLayoutNG; +BLINK_COMMON_EXPORT extern const base::Feature kLayoutNGTable; BLINK_COMMON_EXPORT extern const base::Feature kLayoutNGFieldset; BLINK_COMMON_EXPORT extern const base::Feature kLayoutNGTextControl; BLINK_COMMON_EXPORT extern const base::Feature kFragmentItem;
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index 907d193..1f24081 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -53,6 +53,7 @@ labelfor labelwrapped legend + rubyannotation tablecaption title other
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni index 7bc97a2..5d2f428 100644 --- a/third_party/blink/renderer/bindings/generated_in_core.gni +++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -1373,6 +1373,8 @@ "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_wheel_event.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.h", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.cc", + "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.cc", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.h", "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_global_scope.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni index 768d466..2435cac 100644 --- a/third_party/blink/renderer/bindings/idl_in_core.gni +++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -273,6 +273,7 @@ "//third_party/blink/renderer/core/frame/navigator_ua_brand_version.idl", "//third_party/blink/renderer/core/frame/navigator_ua_data.idl", "//third_party/blink/renderer/core/frame/navigator_user_activation.idl", + "//third_party/blink/renderer/core/frame/navigator_window_controls_overlay.idl", "//third_party/blink/renderer/core/frame/report.idl", "//third_party/blink/renderer/core/frame/report_body.idl", "//third_party/blink/renderer/core/frame/reporting_observer.idl", @@ -287,6 +288,7 @@ "//third_party/blink/renderer/core/frame/user_activation.idl", "//third_party/blink/renderer/core/frame/visual_viewport.idl", "//third_party/blink/renderer/core/frame/window.idl", + "//third_party/blink/renderer/core/frame/window_controls_overlay.idl", "//third_party/blink/renderer/core/frame/window_event_handlers.idl", "//third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl", "//third_party/blink/renderer/core/frame/window_post_message_options.idl",
diff --git a/third_party/blink/renderer/core/clipboard/data_transfer.cc b/third_party/blink/renderer/core/clipboard/data_transfer.cc index 79ff44e..8c99eb1 100644 --- a/third_party/blink/renderer/core/clipboard/data_transfer.cc +++ b/third_party/blink/renderer/core/clipboard/data_transfer.cc
@@ -252,10 +252,6 @@ // The specification states that dropEffect can be changed at all times, even // if the DataTransfer instance is protected or neutered. - // - // Allowing these changes seems inconsequential, but findDropZone() in - // EventHandler.cpp relies on being able to call setDropEffect during - // dragenter, when the DataTransfer policy is DataTransferTypesReadable. drop_effect_ = effect; } @@ -587,16 +583,6 @@ drop_effect_ = ConvertDragOperationToEffectAllowed(op); } -bool DataTransfer::HasDropZoneType(const String& keyword) { - if (keyword.StartsWith("file:")) - return HasFileOfType(keyword.Substring(5)); - - if (keyword.StartsWith("string:")) - return HasStringOfType(keyword.Substring(7)); - - return false; -} - DataTransferItemList* DataTransfer::items() { // TODO: According to the spec, we are supposed to return the same collection // of items each time. We now return a wrapper that always wraps the *same* @@ -654,30 +640,6 @@ return data_object_->Types().Contains(type); } -DragOperation ConvertDropZoneOperationToDragOperation( - const String& drag_operation) { - if (drag_operation == "copy") - return kDragOperationCopy; - if (drag_operation == "move") - return kDragOperationMove; - if (drag_operation == "link") - return kDragOperationLink; - return kDragOperationNone; -} - -String ConvertDragOperationToDropZoneOperation(DragOperation operation) { - switch (operation) { - case kDragOperationCopy: - return String("copy"); - case kDragOperationMove: - return String("move"); - case kDragOperationLink: - return String("link"); - default: - return String("copy"); - } -} - void DataTransfer::Trace(Visitor* visitor) const { visitor->Trace(data_object_); visitor->Trace(drag_image_);
diff --git a/third_party/blink/renderer/core/clipboard/data_transfer.h b/third_party/blink/renderer/core/clipboard/data_transfer.h index 278e7ce..5d9bceb 100644 --- a/third_party/blink/renderer/core/clipboard/data_transfer.h +++ b/third_party/blink/renderer/core/clipboard/data_transfer.h
@@ -25,6 +25,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_CLIPBOARD_DATA_TRANSFER_H_ #include <memory> + #include "third_party/blink/public/common/page/drag_operation.h" #include "third_party/blink/renderer/core/clipboard/data_object.h" #include "third_party/blink/renderer/core/core_export.h" @@ -128,8 +129,6 @@ void SetSourceOperation(DragOperation); void SetDestinationOperation(DragOperation); - bool HasDropZoneType(const String&); - DataTransferItemList* items(); DataObject* GetDataObject() const; @@ -180,10 +179,6 @@ Member<Node> drag_image_element_; }; -DragOperation ConvertDropZoneOperationToDragOperation( - const String& drag_operation); -String ConvertDragOperationToDropZoneOperation(DragOperation); - } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_CORE_CLIPBOARD_DATA_TRANSFER_H_
diff --git a/third_party/blink/renderer/core/core_idl_files.gni b/third_party/blink/renderer/core/core_idl_files.gni index 3b079d4..7b56fa6 100644 --- a/third_party/blink/renderer/core/core_idl_files.gni +++ b/third_party/blink/renderer/core/core_idl_files.gni
@@ -201,6 +201,7 @@ "frame/test_report_body.idl", "frame/user_activation.idl", "frame/visual_viewport.idl", + "frame/window_controls_overlay.idl", "geometry/dom_matrix.idl", "geometry/dom_matrix_read_only.idl", "geometry/dom_point.idl", @@ -555,6 +556,7 @@ "frame/navigator_scheduling.idl", "frame/navigator_ua.idl", "frame/navigator_user_activation.idl", + "frame/navigator_window_controls_overlay.idl", "frame/window_event_handlers.idl", "frame/window_or_worker_global_scope.idl", "fullscreen/document_fullscreen.idl",
diff --git a/third_party/blink/renderer/core/editing/editing_strategy.cc b/third_party/blink/renderer/core/editing/editing_strategy.cc index 535905a..65a9467 100644 --- a/third_party/blink/renderer/core/editing/editing_strategy.cc +++ b/third_party/blink/renderer/core/editing/editing_strategy.cc
@@ -4,8 +4,9 @@ #include "third_party/blink/renderer/core/editing/editing_strategy.h" +#include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/editing/editing_utilities.h" -#include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/layout/layout_text.h" namespace { @@ -34,8 +35,8 @@ int EditingAlgorithm<Traversal>::CaretMaxOffset(const Node& node) { // For rendered text nodes, return the last position that a caret could // occupy. - if (node.IsTextNode() && node.GetLayoutObject()) - return node.GetLayoutObject()->CaretMaxOffset(); + if (IsA<Text>(node) && node.GetLayoutObject()) + return To<Text>(node).GetLayoutObject()->CaretMaxOffset(); // For containers return the number of children. For others do the same as // above. return LastOffsetForEditing(&node);
diff --git a/third_party/blink/renderer/core/editing/inline_box_position.cc b/third_party/blink/renderer/core/editing/inline_box_position.cc index 14cab4d..d607686 100644 --- a/third_party/blink/renderer/core/editing/inline_box_position.cc +++ b/third_party/blink/renderer/core/editing/inline_box_position.cc
@@ -324,20 +324,23 @@ const PositionTemplate<Strategy>& position = adjusted.GetPosition(); DCHECK(!position.AnchorNode()->IsShadowRoot()) << adjusted; DCHECK(position.AnchorNode()->GetLayoutObject()) << adjusted; - const LayoutObject& layout_object = *position.AnchorNode()->GetLayoutObject(); + LayoutObject& layout_object = *position.AnchorNode()->GetLayoutObject(); const int caret_offset = position.ComputeEditingOffset(); - const int round_offset = - std::min(caret_offset, layout_object.CaretMaxOffset()); if (layout_object.IsText()) { // TODO(yoichio): Consider |ToLayoutText(layout_object)->TextStartOffset()| // for first-letter tested with LocalCaretRectTest::FloatFirstLetter. - return ComputeInlineBoxPositionForTextNode( - &To<LayoutText>(layout_object), round_offset, adjusted.Affinity()); + const LayoutText& layout_text = To<LayoutText>(layout_object); + const int round_offset = + std::min(caret_offset, layout_text.CaretMaxOffset()); + return ComputeInlineBoxPositionForTextNode(&layout_text, round_offset, + adjusted.Affinity()); } DCHECK(layout_object.IsAtomicInlineLevel()); DCHECK(layout_object.IsInline()); + const int round_offset = + std::min(caret_offset, LineLayoutItem(&layout_object).CaretMaxOffset()); return ComputeInlineBoxPositionForAtomicInline(&layout_object, round_offset); }
diff --git a/third_party/blink/renderer/core/editing/visible_selection.cc b/third_party/blink/renderer/core/editing/visible_selection.cc index c6ab0e1..8bc4ed3 100644 --- a/third_party/blink/renderer/core/editing/visible_selection.cc +++ b/third_party/blink/renderer/core/editing/visible_selection.cc
@@ -264,37 +264,6 @@ return base_.IsValidFor(document) && extent_.IsValidFor(document); } -// TODO(yosin) This function breaks the invariant of this class. -// But because we use VisibleSelection to store values in editing commands for -// use when undoing the command, we need to be able to create a selection that -// while currently invalid, will be valid once the changes are undone. This is a -// design problem. To fix it we either need to change the invariants of -// |VisibleSelection| or create a new class for editing to use that can -// manipulate selections that are not currently valid. -template <typename Strategy> -VisibleSelectionTemplate<Strategy> -VisibleSelectionTemplate<Strategy>::CreateWithoutValidationDeprecated( - const PositionTemplate<Strategy>& base, - const PositionTemplate<Strategy>& extent, - TextAffinity affinity) { - DCHECK(base.IsNotNull()); - DCHECK(extent.IsNotNull()); - - VisibleSelectionTemplate<Strategy> visible_selection; - visible_selection.base_ = base; - visible_selection.extent_ = extent; - visible_selection.base_is_first_ = base.CompareTo(extent) <= 0; - if (base == extent) { - visible_selection.affinity_ = affinity; - return visible_selection; - } - // Since |affinity_| for non-|CaretSelection| is always |kDownstream|, - // we should keep this invariant. Note: This function can be called with - // |affinity_| is |kUpstream|. - visible_selection.affinity_ = TextAffinity::kDownstream; - return visible_selection; -} - template <typename Strategy> bool VisibleSelectionTemplate<Strategy>::IsContentEditable() const { return IsEditablePosition(Start());
diff --git a/third_party/blink/renderer/core/editing/visible_selection.h b/third_party/blink/renderer/core/editing/visible_selection.h index 95dfd06..ff900d1 100644 --- a/third_party/blink/renderer/core/editing/visible_selection.h +++ b/third_party/blink/renderer/core/editing/visible_selection.h
@@ -87,14 +87,6 @@ bool IsValidFor(const Document&) const; - // TODO(editing-dev): |CreateWithoutValidationDeprecated()| is allowed - // only to use in |TypingCommand| to remove part of grapheme cluster. - // Note: |base| and |extent| can be disconnect position. - static VisibleSelectionTemplate<Strategy> CreateWithoutValidationDeprecated( - const PositionTemplate<Strategy>& base, - const PositionTemplate<Strategy>& extent, - TextAffinity); - void Trace(Visitor*) const; #if DCHECK_IS_ON()
diff --git a/third_party/blink/renderer/core/editing/visible_units.cc b/third_party/blink/renderer/core/editing/visible_units.cc index 1ae38de..9a574384 100644 --- a/third_party/blink/renderer/core/editing/visible_units.cc +++ b/third_party/blink/renderer/core/editing/visible_units.cc
@@ -558,10 +558,11 @@ // TODO(yosin): We should use |AssociatedLayoutObjectOf()| in "visible_units.cc" // where it takes |LayoutObject| from |Position|. - int CaretMinOffset(const Node* node) { const LayoutObject* layout_object = AssociatedLayoutObjectOf(*node, 0); - return layout_object ? layout_object->CaretMinOffset() : 0; + if (const LayoutText* layout_text = DynamicTo<LayoutText>(layout_object)) + return layout_text->CaretMinOffset(); + return 0; } int CaretMaxOffset(const Node* n) { @@ -774,7 +775,8 @@ // Until we resolve that, disable this so we can run the web tests! // DCHECK_GE(currentOffset, layoutObject->caretMaxOffset()); return PositionTemplate<Strategy>( - current_node, layout_object->CaretMaxOffset() + text_start_offset); + current_node, + text_layout_object->CaretMaxOffset() + text_start_offset); } DCHECK_GE(current_pos.OffsetInLeafNode(), @@ -895,9 +897,8 @@ // ignored. if (EditingIgnoresContent(*current_node) || IsDisplayInsideTable(current_node)) { - if (current_pos.OffsetInLeafNode() <= layout_object->CaretMinOffset()) - return PositionTemplate<Strategy>::EditingPositionOf( - current_node, layout_object->CaretMinOffset()); + if (current_pos.OffsetInLeafNode() <= 0) + return PositionTemplate<Strategy>::EditingPositionOf(current_node, 0); continue; } @@ -912,7 +913,8 @@ DCHECK(current_pos.AtStartOfNode() || HasInvisibleFirstLetter(current_node)); return PositionTemplate<Strategy>( - current_node, layout_object->CaretMinOffset() + text_start_offset); + current_node, + text_layout_object->CaretMinOffset() + text_start_offset); } DCHECK_GE(current_pos.OffsetInLeafNode(),
diff --git a/third_party/blink/renderer/core/editing/visible_units_paragraph.cc b/third_party/blink/renderer/core/editing/visible_units_paragraph.cc index e78ec75..60892d8 100644 --- a/third_party/blink/renderer/core/editing/visible_units_paragraph.cc +++ b/third_party/blink/renderer/core/editing/visible_units_paragraph.cc
@@ -221,8 +221,7 @@ candidate_node = next_node_iterator; candidate_type = PositionAnchorType::kOffsetInAnchor; - candidate_offset = - layout_object->CaretMaxOffset() + text->TextStartOffset(); + candidate_offset = text->CaretMaxOffset() + text->TextStartOffset(); next_node_iterator = Strategy::Next(*next_node_iterator, start_block); } else if (EditingIgnoresContent(*next_node_iterator) || IsDisplayInsideTable(next_node_iterator)) {
diff --git a/third_party/blink/renderer/core/frame/build.gni b/third_party/blink/renderer/core/frame/build.gni index aea259f6..a154b84 100644 --- a/third_party/blink/renderer/core/frame/build.gni +++ b/third_party/blink/renderer/core/frame/build.gni
@@ -217,6 +217,8 @@ "web_local_frame_client.cc", "web_remote_frame_impl.h", "window_event_handlers.h", + "window_controls_overlay.cc", + "window_controls_overlay.h", "window_or_worker_global_scope.cc", "window_or_worker_global_scope.h", ]
diff --git a/third_party/blink/renderer/core/frame/frame.cc b/third_party/blink/renderer/core/frame/frame.cc index 70f7f080..d5f7a43 100644 --- a/third_party/blink/renderer/core/frame/frame.cc +++ b/third_party/blink/renderer/core/frame/frame.cc
@@ -151,7 +151,9 @@ // have unset itself as the provisional frame in `Swap()` already, so // this should never be reached. // 3. Similarly, when swapping local->local, the actual navigation is - // committing in this frame tree, and the same logic applies. + // committing in this frame tree, and the same logic applies except for + // one edge case where RenderDocument is enabled and a JS unload handler + // removes its own frame, causing it to be detached during a swap. DCHECK_EQ(FrameDetachType::kRemove, type); provisional_frame_->Detach(type); } @@ -539,12 +541,6 @@ // is being called on an already-detached frame which should never happen... if (!old_frame->IsAttached()) return false; - if (provisional_frame_) { - // `this` is about to be replaced, so if `provisional_frame_` is set, it - // should match `frame` which is being swapped in. - DCHECK_EQ(provisional_frame_, WebFrame::ToCoreFrame(*frame)); - provisional_frame_ = nullptr; - } FrameOwner* owner = old_frame->Owner(); FrameSwapScope frame_swap_scope(owner); Frame* new_frame_parent = WebFrame::ToCoreFrame(*frame) && frame->Parent() @@ -572,6 +568,13 @@ return false; } + if (provisional_frame_) { + // `this` is about to be replaced, so if `provisional_frame_` is set, it + // should match `frame` which is being swapped in. + DCHECK_EQ(provisional_frame_, WebFrame::ToCoreFrame(*frame)); + + provisional_frame_ = nullptr; + } // If there is a local parent, it might incorrectly declare itself complete // during the detach phase of this swap. Suppress its completion until swap is // over, at which point its completion will be correctly dependent on its
diff --git a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc index 31db0797..28e4f17 100644 --- a/third_party/blink/renderer/core/frame/local_frame_client_impl.cc +++ b/third_party/blink/renderer/core/frame/local_frame_client_impl.cc
@@ -548,6 +548,12 @@ web_frame_->Client()->DidCommitNavigation( commit_type, should_reset_browser_interface_broker, sandbox_flags, feature_policy_header, document_policy_header); + + // With local to local swap it's possible for the frame to be deleted as a + // side effect of JS event handlers called in DidCommitNavigation + // (e.g. unload). + if (!web_frame_->Client()) + return; if (web_frame_->GetFrame()->IsLocalRoot()) { // This update should be sent as soon as loading the new document begins // so that the browser and compositor could reset their states. However,
diff --git a/third_party/blink/renderer/core/frame/navigator_window_controls_overlay.idl b/third_party/blink/renderer/core/frame/navigator_window_controls_overlay.idl new file mode 100644 index 0000000..2ea293c --- /dev/null +++ b/third_party/blink/renderer/core/frame/navigator_window_controls_overlay.idl
@@ -0,0 +1,12 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// https://github.com/WICG/window-controls-overlay/blob/master/explainer.md + +[ + ImplementedAs=WindowControlsOverlay, + RuntimeEnabled=WebAppWindowControlsOverlay +] partial interface Navigator { + [SameObject] readonly attribute WindowControlsOverlay windowControlsOverlay; +};
diff --git a/third_party/blink/renderer/core/frame/window_controls_overlay.cc b/third_party/blink/renderer/core/frame/window_controls_overlay.cc new file mode 100644 index 0000000..90e16a0 --- /dev/null +++ b/third_party/blink/renderer/core/frame/window_controls_overlay.cc
@@ -0,0 +1,55 @@ +// Copyright 2020 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 "third_party/blink/renderer/core/frame/window_controls_overlay.h" + +#include "third_party/blink/renderer/core/frame/local_dom_window.h" +#include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/frame/navigator.h" +#include "third_party/blink/renderer/platform/heap/handle.h" + +namespace blink { + +// static +const char WindowControlsOverlay::kSupplementName[] = "WindowControlsOverlay"; + +// static +WindowControlsOverlay* WindowControlsOverlay::windowControlsOverlay( + Navigator& navigator) { + auto* supplement = + Supplement<Navigator>::From<WindowControlsOverlay>(navigator); + if (!supplement) { + supplement = MakeGarbageCollected<WindowControlsOverlay>(navigator); + ProvideTo(navigator, supplement); + } + return supplement; +} + +WindowControlsOverlay::WindowControlsOverlay(Navigator& navigator) + : Supplement<Navigator>(navigator) {} + +WindowControlsOverlay::~WindowControlsOverlay() = default; + +bool WindowControlsOverlay::visible() const { + if (!GetSupplementable()->DomWindow()->GetFrame()) + return false; + // TODO(crbug.com/937121): Replace the hardcoded value in the next javascript + // API CL. + return false; +} + +DOMRect* WindowControlsOverlay::getBoundingClientRect() const { + if (!GetSupplementable()->DomWindow()->GetFrame()) + return DOMRect::Create(0, 0, 0, 0); + // TODO(crbug.com/937121): Replace the hardcoded value in the next javascript + // API CL. + return DOMRect::Create(0, 0, 0, 0); +} + +void WindowControlsOverlay::Trace(blink::Visitor* visitor) const { + ScriptWrappable::Trace(visitor); + Supplement<Navigator>::Trace(visitor); +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/frame/window_controls_overlay.h b/third_party/blink/renderer/core/frame/window_controls_overlay.h new file mode 100644 index 0000000..f9f5435 --- /dev/null +++ b/third_party/blink/renderer/core/frame/window_controls_overlay.h
@@ -0,0 +1,42 @@ +// Copyright 2020 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 THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_ + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" +#include "third_party/blink/renderer/platform/heap/handle.h" +#include "third_party/blink/renderer/platform/supplementable.h" + +namespace blink { + +class DOMRect; +class Navigator; + +class CORE_EXPORT WindowControlsOverlay final : public ScriptWrappable, + public Supplement<Navigator> { + DEFINE_WRAPPERTYPEINFO(); + + public: + static const char kSupplementName[]; + // Web Exposed as navigator.windowControlsOverlay + static WindowControlsOverlay* windowControlsOverlay(Navigator& navigator); + + explicit WindowControlsOverlay(Navigator& navigator); + WindowControlsOverlay(const WindowControlsOverlay&) = delete; + ~WindowControlsOverlay() override; + + WindowControlsOverlay& operator=(const WindowControlsOverlay&) = delete; + + bool visible() const; + DOMRect* getBoundingClientRect() const; + + // ScriptWrappable + void Trace(Visitor*) const override; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_WINDOW_CONTROLS_OVERLAY_H_
diff --git a/third_party/blink/renderer/core/frame/window_controls_overlay.idl b/third_party/blink/renderer/core/frame/window_controls_overlay.idl new file mode 100644 index 0000000..1ef1d14 --- /dev/null +++ b/third_party/blink/renderer/core/frame/window_controls_overlay.idl
@@ -0,0 +1,13 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// https://github.com/WICG/window-controls-overlay/blob/master/explainer.md + +[ + RuntimeEnabled=WebAppWindowControlsOverlay, + Exposed=Window +] interface WindowControlsOverlay { + readonly attribute boolean visible; + DOMRect getBoundingClientRect(); +};
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc index 4d538f9..f98a3f5 100644 --- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc +++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -113,6 +113,10 @@ constexpr int kUndefinedQualityValue = -1.0; constexpr int kMinimumAccelerated2dCanvasSize = 128 * 129; +// A default size used for canvas memory allocation when canvas size is greater +// than 2^20. +constexpr uint32_t kMaximumCanvasSize = 2 << 20; + } // namespace HTMLCanvasElement::HTMLCanvasElement(Document& document) @@ -1534,12 +1538,15 @@ const int bytes_per_pixel = ColorParams().BytesPerPixel(); intptr_t gpu_memory_usage = 0; + uint32_t canvas_width = std::min(kMaximumCanvasSize, width()); + uint32_t canvas_height = std::min(kMaximumCanvasSize, height()); + if (gpu_buffer_count) { // Switch from cpu mode to gpu mode base::CheckedNumeric<intptr_t> checked_usage = gpu_buffer_count * bytes_per_pixel; - checked_usage *= width(); - checked_usage *= height(); + checked_usage *= canvas_width; + checked_usage *= canvas_height; gpu_memory_usage = checked_usage.ValueOrDefault(std::numeric_limits<intptr_t>::max()); } @@ -1548,8 +1555,8 @@ // in all cases. base::CheckedNumeric<intptr_t> checked_usage = non_gpu_buffer_count * bytes_per_pixel; - checked_usage *= width(); - checked_usage *= height(); + checked_usage *= canvas_width; + checked_usage *= canvas_height; checked_usage += gpu_memory_usage; intptr_t externally_allocated_memory = checked_usage.ValueOrDefault(std::numeric_limits<intptr_t>::max());
diff --git a/third_party/blink/renderer/core/layout/api/line_layout_item.h b/third_party/blink/renderer/core/layout/api/line_layout_item.h index 0b1a61b..069367d 100644 --- a/third_party/blink/renderer/core/layout/api/line_layout_item.h +++ b/third_party/blink/renderer/core/layout/api/line_layout_item.h
@@ -229,9 +229,18 @@ layout_object_->SetAncestorLineBoxDirty(); } - int CaretMinOffset() const { return layout_object_->CaretMinOffset(); } - - int CaretMaxOffset() const { return layout_object_->CaretMaxOffset(); } + // TODO(yosin): We should not use |CaretMaxOffset()|, because this function + // may be used for creating invalid pointer, e.g. <hr>@1. + int CaretMaxOffset() const { + if (layout_object_->IsAtomicInlineLevel()) { + if (Node* const node = layout_object_->GetNode()) + return std::max(1u, GetNode()->CountChildren()); + return 1; + } + if (layout_object_->IsHR()) + return 1; + return 0; + } bool HasFlippedBlocksWritingMode() const { return layout_object_->HasFlippedBlocksWritingMode();
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index 4e53247..33bcb108 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -1914,6 +1914,7 @@ void SavePreviousSize() { GetLayoutBox().previous_size_ = GetLayoutBox().Size(); } + void ClearPreviousSize() { GetLayoutBox().previous_size_ = LayoutSize(); } void SavePreviousOverflowData(); void ClearPreviousOverflowData() { DCHECK(!GetLayoutBox().HasVisualOverflow());
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index e62ce56..50603650 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -3800,7 +3800,7 @@ PositionWithAffinity LayoutObject::PositionForPoint( const PhysicalOffset&) const { NOT_DESTROYED(); - return CreatePositionWithAffinity(CaretMinOffset()); + return CreatePositionWithAffinity(0); } CompositingState LayoutObject::GetCompositingState() const { @@ -4068,20 +4068,6 @@ IsOutsideListMarkerForCustomContent(); } -int LayoutObject::CaretMinOffset() const { - NOT_DESTROYED(); - return 0; -} - -int LayoutObject::CaretMaxOffset() const { - NOT_DESTROYED(); - if (IsAtomicInlineLevel()) - return GetNode() ? std::max(1U, GetNode()->CountChildren()) : 1; - if (IsHR()) - return 1; - return 0; -} - bool LayoutObject::IsInert() const { NOT_DESTROYED(); const LayoutObject* layout_object = this;
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 0e30a3e..5bdc78a 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -2730,9 +2730,6 @@ return false; } - virtual int CaretMinOffset() const; - virtual int CaretMaxOffset() const; - // ImageResourceObserver override. void ImageChanged(ImageResourceContent*, CanDeferInvalidation) final; void ImageChanged(WrappedImagePtr, CanDeferInvalidation) override {
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc index 4ce7967c..2175f02 100644 --- a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc +++ b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
@@ -394,13 +394,13 @@ TEST_F(LayoutShiftTrackerTest, ContentVisibilityAutoFirstPaint) { SetBodyInnerHTML(R"HTML( <style> - #target { + .auto { content-visibility: auto; contain-intrinsic-size: 1px; width: 100px; } </style> - <div id=target> + <div id=target class=auto> <div style="width: 100px; height: 100px"></div> </div> )HTML"); @@ -417,24 +417,23 @@ ContentVisibilityAutoOffscreenAfterScrollFirstPaint) { SetBodyInnerHTML(R"HTML( <style> - #target { + .auto { content-visibility: auto; contain-intrinsic-size: 1px; width: 100px; } </style> - <div id=target style="position: relative; top: 100000px"> + <div id=target class=auto style="position: relative; top: 100000px"> <div style="width: 100px; height: 100px"></div> </div> )HTML"); auto* target = To<LayoutBox>(GetLayoutObjectByElementId("target")); - // #target starts offsceen, which doesn't count for CLS. EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); EXPECT_EQ(LayoutSize(100, 1), target->Size()); // In the next frame, we scroll it onto the screen, but it still doesn't - // count for CLS, and its subtree is not yet unskipped because the + // count for CLS, and its subtree is not yet unskipped, because the // intersection observation takes effect on the subsequent frame. GetDocument().domWindow()->scrollTo(0, 100000); UpdateAllLifecyclePhasesForTest(); @@ -453,13 +452,13 @@ TEST_F(LayoutShiftTrackerTest, ContentVisibilityHiddenFirstPaint) { SetBodyInnerHTML(R"HTML( <style> - #target { + .auto { content-visibility: hidden; contain-intrinsic-size: 1px; width: 100px; } </style> - <div id=target> + <div id=target class=auto> <div style="width: 100px; height: 100px"></div> </div> )HTML"); @@ -470,4 +469,91 @@ EXPECT_EQ(LayoutSize(100, 1), target->Size()); } +TEST_F(LayoutShiftTrackerTest, ContentVisibilityAutoResize) { + SetBodyInnerHTML(R"HTML( + <style> + .auto { + content-visibility: auto; + contain-intrinsic-size: 10px 3000px; + width: 100px; + } + .contained { + height: 100px; + } + </style> + <div class=auto><div class=contained></div></div> + <div class=auto id=target><div class=contained></div></div> + )HTML"); + + // Skipped subtrees don't cause CLS impact. + UpdateAllLifecyclePhasesForTest(); + auto* target = To<LayoutBox>(GetLayoutObjectByElementId("target")); + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 100), target->Size()); +} + +TEST_F(LayoutShiftTrackerTest, + ContentVisibilityAutoOnscreenAndOffscreenAfterScrollFirstPaint) { + SetBodyInnerHTML(R"HTML( + <style> + .auto { + content-visibility: auto; + contain-intrinsic-size: 1px; + width: 100px; + } + </style> + <div id=onscreen class=auto> + <div style="width: 100px; height: 100px"></div> + </div> + <div id=offscreen class=auto style="position: relative; top: 100000px"> + <div style="width: 100px; height: 100px"></div> + </div> + )HTML"); + auto* offscreen = To<LayoutBox>(GetLayoutObjectByElementId("offscreen")); + auto* onscreen = To<LayoutBox>(GetLayoutObjectByElementId("onscreen")); + + // #offscreen starts offsceen, which doesn't count for CLS. + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 1), offscreen->Size()); + EXPECT_EQ(LayoutSize(100, 100), onscreen->Size()); + + // In the next frame, we scroll it onto the screen, but it still doesn't + // count for CLS, and its subtree is not yet unskipped, because the + // intersection observation takes effect on the subsequent frame. + GetDocument().domWindow()->scrollTo(0, 100000 + 100); + UpdateAllLifecyclePhasesForTest(); + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 1), offscreen->Size()); + EXPECT_EQ(LayoutSize(100, 100), onscreen->Size()); + + // Now the subtree is unskipped, and #offscreen renders at size 100x100. + // Nevertheless, there is no impact on CLS. + UpdateAllLifecyclePhasesForTest(); + offscreen = To<LayoutBox>(GetLayoutObjectByElementId("offscreen")); + onscreen = To<LayoutBox>(GetLayoutObjectByElementId("onscreen")); + + // Target's LayoutObject gets re-attached. + offscreen = To<LayoutBox>(GetLayoutObjectByElementId("offscreen")); + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 100), offscreen->Size()); + EXPECT_EQ(LayoutSize(100, 1), onscreen->Size()); + + // Now scroll the element back off-screen. + GetDocument().domWindow()->scrollTo(0, 0); + UpdateAllLifecyclePhasesForTest(); + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 100), offscreen->Size()); + EXPECT_EQ(LayoutSize(100, 1), onscreen->Size()); + + // In the subsequent frame, #offscreen becomes locked and changes its + // layout size (and vice-versa for #onscreen). + UpdateAllLifecyclePhasesForTest(); + offscreen = To<LayoutBox>(GetLayoutObjectByElementId("offscreen")); + onscreen = To<LayoutBox>(GetLayoutObjectByElementId("onscreen")); + + EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score()); + EXPECT_EQ(LayoutSize(100, 1), offscreen->Size()); + EXPECT_EQ(LayoutSize(100, 100), onscreen->Size()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_text.h b/third_party/blink/renderer/core/layout/layout_text.h index 7734311..7ff680f 100644 --- a/third_party/blink/renderer/core/layout/layout_text.h +++ b/third_party/blink/renderer/core/layout/layout_text.h
@@ -297,8 +297,8 @@ bool IsBeforeNonCollapsedCharacter(unsigned) const; bool IsAfterNonCollapsedCharacter(unsigned) const; - int CaretMinOffset() const override; - int CaretMaxOffset() const override; + virtual int CaretMinOffset() const; + virtual int CaretMaxOffset() const; unsigned ResolvedTextLength() const; // True if any character remains after CSS white-space collapsing.
diff --git a/third_party/blink/renderer/core/layout/line/inline_box.cc b/third_party/blink/renderer/core/layout/line/inline_box.cc index 4c4642c..51891cf 100644 --- a/third_party/blink/renderer/core/layout/line/inline_box.cc +++ b/third_party/blink/renderer/core/layout/line/inline_box.cc
@@ -191,7 +191,7 @@ } int InlineBox::CaretMinOffset() const { - return GetLineLayoutItem().CaretMinOffset(); + return 0; } int InlineBox::CaretMaxOffset() const {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item_test.cc index 56039f1b..f6e42fa 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_item_test.cc
@@ -796,4 +796,27 @@ TestFirstDirtyLineIndex("container", 0); } +// This test creates various types of |NGFragmentItem| to check "natvis" (Native +// DebugVisualizers) for Windows Visual Studio. +TEST_F(NGFragmentItemTest, Disabled_DebugVisualizers) { + SetBodyInnerHTML(R"HTML( + <div id=container> + text + <span style="display: inline-block"></span> + </div> + )HTML"); + auto* container = + To<LayoutBlockFlow>(GetLayoutObjectByElementId("container")); + NGInlineCursor cursor(*container); + cursor.MoveToFirstLine(); + const NGFragmentItem* line = cursor.Current().Item(); + EXPECT_NE(line, nullptr); + cursor.MoveToNext(); + const NGFragmentItem* text = cursor.Current().Item(); + EXPECT_NE(text, nullptr); + cursor.MoveToNext(); + const NGFragmentItem* box = cursor.Current().Item(); + EXPECT_NE(box, nullptr); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc index 8e2f9c9..d69c8c1 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.cc
@@ -236,11 +236,18 @@ const LogicalSize& aspect_ratio, EBoxSizing box_sizing, LayoutUnit block_size) { - if (box_sizing == EBoxSizing::kBorderBox) - return block_size * aspect_ratio.inline_size / aspect_ratio.block_size; + // TODO(dgrogan/ikilpatrick): These calculations might need to be done in + // integer space, in a potential BoundedMultiplyAndDivide(LayoutUnit, + // LayoutUnit, LayoutUnit) function. + if (box_sizing == EBoxSizing::kBorderBox) { + return LayoutUnit::FromDoubleRound(block_size * + aspect_ratio.inline_size.ToDouble() / + aspect_ratio.block_size.ToDouble()); + } - return ((block_size - border_padding.BlockSum()) * aspect_ratio.inline_size / - aspect_ratio.block_size) + + return LayoutUnit::FromDoubleRound((block_size - border_padding.BlockSum()) * + aspect_ratio.inline_size.ToDouble() / + aspect_ratio.block_size.ToDouble()) + border_padding.InlineSum(); } @@ -248,11 +255,16 @@ const LogicalSize& aspect_ratio, EBoxSizing box_sizing, LayoutUnit inline_size) { - if (box_sizing == EBoxSizing::kBorderBox) - return inline_size * aspect_ratio.block_size / aspect_ratio.inline_size; + if (box_sizing == EBoxSizing::kBorderBox) { + return LayoutUnit::FromDoubleRound(inline_size * + aspect_ratio.block_size.ToDouble() / + aspect_ratio.inline_size.ToDouble()); + } - return ((inline_size - border_padding.InlineSum()) * aspect_ratio.block_size / - aspect_ratio.inline_size) + + return LayoutUnit::FromDoubleRound( + (inline_size - border_padding.InlineSum()) * + aspect_ratio.block_size.ToDouble() / + aspect_ratio.inline_size.ToDouble()) + border_padding.BlockSum(); }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h index 66ba61e..3070623 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils.h +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils.h
@@ -38,10 +38,11 @@ style.LogicalMaxWidth().IsContentOrIntrinsic(); } -LayoutUnit InlineSizeFromAspectRatio(const NGBoxStrut& border_padding, - const LogicalSize& aspect_ratio, - EBoxSizing box_sizing, - LayoutUnit block_size); +CORE_EXPORT LayoutUnit +InlineSizeFromAspectRatio(const NGBoxStrut& border_padding, + const LogicalSize& aspect_ratio, + EBoxSizing box_sizing, + LayoutUnit block_size); LayoutUnit BlockSizeFromAspectRatio(const NGBoxStrut& border_padding, const LogicalSize& aspect_ratio,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc b/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc index 535724d..1d37aa79 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_length_utils_test.cc
@@ -589,5 +589,28 @@ EXPECT_EQ(3, GetUsedColumnCount(3, 0, 10, 10)); } +LayoutUnit ComputeInlineSize(LogicalSize aspect_ratio, LayoutUnit block_size) { + return InlineSizeFromAspectRatio(NGBoxStrut(), aspect_ratio, + EBoxSizing::kBorderBox, block_size); +} +TEST_F(NGLengthUtilsTest, AspectRatio) { + EXPECT_EQ(LayoutUnit(8000), + ComputeInlineSize(LogicalSize(8000, 8000), LayoutUnit(8000))); + EXPECT_EQ(LayoutUnit(1), + ComputeInlineSize(LogicalSize(1, 10000), LayoutUnit(10000))); + EXPECT_EQ(LayoutUnit(4), + ComputeInlineSize(LogicalSize(1, 1000000), LayoutUnit(4000000))); + EXPECT_EQ(LayoutUnit(0), + ComputeInlineSize(LogicalSize(3, 5000000), LayoutUnit(5))); + // The literals are 8 million, 20 million, 10 million, 4 million. + EXPECT_EQ( + LayoutUnit(8000000), + ComputeInlineSize(LogicalSize(20000000, 10000000), LayoutUnit(4000000))); + // If you specify an aspect ratio of 10000:1 with a large block size, + // LayoutUnit saturates. + EXPECT_EQ(LayoutUnit::Max(), + ComputeInlineSize(LogicalSize(10000, 1), LayoutUnit(10000))); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc index 9c3a661..00b7841 100644 --- a/third_party/blink/renderer/core/loader/document_loader.cc +++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -1845,6 +1845,19 @@ previous_window != frame_->DomWindow(), frame_->DomWindow()->GetSandboxFlags(), security_init.FeaturePolicyHeader(), document_policy_.feature_state); + // Originally, before OOPIFs, the previous document associated with the + // frame will always already by detached at this point, so no JS unload + // handlers should run. However, with OOPIFs, this `LocalFrame` might + // still be provisional: it doesn't become swapped in until Blink notifies + // the embedder by calling `DidCommitNavigation()`. As a result, + // `DidCommitLoad()` might end up running the unload handlers for the + // previous *frame* when swapping it out, which might detach `this`. + // + // TODO(https://crbug.com/1153043): Fix this so that the frame is swapped + // in earlier, at `FrameLoader::DetachDocument()`. At that point, it is + // certain that the navigation will commit. + if (!frame_) + return; } // TODO(dgozman): make DidCreateScriptContext notification call currently // triggered by installing new document happen here, after commit.
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc index 587e26a..105b35e 100644 --- a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
@@ -392,22 +392,15 @@ return false; } -static bool IsContentVisibilityAutoWithoutFirstIntersection( - const LayoutBox& box) { - if (!box.GetNode() || !box.GetNode()->IsElementNode()) - return false; - - auto* display_lock_context = - To<Element>(box.GetNode())->GetDisplayLockContext(); +static bool IsContentVisibilityAutoAndHidden(const LayoutBox& box) { + auto* display_lock_context = box.GetDisplayLockContext(); if (!display_lock_context) return false; - if (!display_lock_context->IsLocked() || - display_lock_context->HadAnyViewportIntersectionNotifications() || - !display_lock_context->IsAuto()) + if (!display_lock_context->IsAuto()) return false; - return true; + return display_lock_context->IsLocked(); } bool BoxPaintInvalidator::NeedsToSavePreviousOverflowData() { @@ -430,20 +423,19 @@ void BoxPaintInvalidator::SavePreviousBoxGeometriesIfNeeded() { auto mutable_box = box_.GetMutableForPainting(); - // If a box has content-visibility:auto and has not yet been deemed to be near - // the viewport, then don't save its previous size. This prevents the - // LayoutShiftTracker (which computes CLS) from recording a layout shift when - // the element's subtree become unskipped for the first time. This is almost - // exactly equivalent to the current behavior of CLS computation for offscreen - // elements - i.e. those elements are not counted for CLS. The only difference - // is the one-frame leeway granted after box_ appears near the screen. + // Don't save previous sizes for hidden content-visibility: auto elements. + // This ensures content-visibility: auto never by itself causes a layout + // shift, because the LayoutShiftTracker will ignore elements whose previous + // or current size are empty. // // Note: The downside of this approach is that any change in size of |box_| // up to the time unskipping occurs will cause a full paint invalidation // of |box_|. Since this has no effect on its subtree (which is skipped), // and |box_| is not on-screen, this should not have a significant performance // impact. - if (!IsContentVisibilityAutoWithoutFirstIntersection(box_)) + if (IsContentVisibilityAutoAndHidden(box_)) + mutable_box.ClearPreviousSize(); + else mutable_box.SavePreviousSize(); if (NeedsToSavePreviousOverflowData())
diff --git a/third_party/blink/renderer/modules/accessibility/ax_enums.h b/third_party/blink/renderer/modules/accessibility/ax_enums.h index 559d48364..4bf9993 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_enums.h +++ b/third_party/blink/renderer/modules/accessibility/ax_enums.h
@@ -94,6 +94,7 @@ kAXTextFromNativeHTMLLabelFor, kAXTextFromNativeHTMLLabelWrapped, kAXTextFromNativeHTMLLegend, + kAXTextFromNativeHTMLRubyAnnotation, kAXTextFromNativeHTMLTableCaption, kAXTextFromNativeHTMLTitleElement, };
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 0e4567f2..171849f 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -388,6 +388,17 @@ always_included_computed_roles.end()) return kIncludeObject; + // Avoid double speech. The ruby text describes pronunciation of the ruby + // base, and generally produces redundant screen reader output. Expose it only + // as a description on the <ruby> element so that screen reader users can + // toggle it on/off as with other descriptions/annotations. + if (RoleValue() == ax::mojom::blink::Role::kRubyAnnotation || + (RoleValue() == ax::mojom::blink::Role::kStaticText && ParentObject() && + ParentObject()->RoleValue() == + ax::mojom::blink::Role::kRubyAnnotation)) { + return kIgnoreObject; + } + // If this element has aria attributes on it, it should not be ignored. if (HasGlobalARIAAttribute()) return kIncludeObject; @@ -3239,22 +3250,6 @@ AddChild(RemoteSVGRootElement()); } -bool AXNodeObject::ShouldUseLayoutBuilderTraversal() const { - // TODO(accessibility) Look into having one method of traversal, otherwise - // it's possible for the same object to become a child of 2 different nodes, - // e.g. if it has a different layout parent and DOM parent. - - Node* node = GetNode(); - if (!node) - return false; - - // <ruby>: special layout handling - if (IsA<HTMLRubyElement>(*node)) - return false; - - return true; -} - void AXNodeObject::AddNodeChildren() { for (Node* child = LayoutTreeBuilderTraversal::FirstChild(*node_); child; child = LayoutTreeBuilderTraversal::NextSibling(*child)) { @@ -4426,6 +4421,17 @@ AXRelatedObjectVector* related_objects) const { // If descriptionSources is non-null, relatedObjects is used in filling it in, // so it must be non-null as well. + // Important: create a DescriptionSource for every *potential* description + // source, even if it ends up not being present. + // When adding a new description_from type: + // * Also add it to AXValueNativeSourceType here: + // blink/public/devtools_protocol/browser_protocol.pdl + // * Update InspectorTypeBuilderHelper to map the new enum to + // the browser_protocol enum in NativeSourceType(): + // blink/renderer/modules/accessibility/inspector_type_builder_helper.cc + // * Update devtools_frontend to add a new string for the new type of + // description. See AXNativeSourceTypes at: + // devtools-frontend/src/front_end/accessibility/AccessibilityStrings.js if (description_sources) DCHECK(related_objects); @@ -4524,6 +4530,43 @@ } } + if (RoleValue() == ax::mojom::blink::Role::kRuby) { + description_from = ax::mojom::blink::DescriptionFrom::kRelatedElement; + if (description_sources) { + description_sources->push_back(DescriptionSource(found_description)); + description_sources->back().type = description_from; + description_sources->back().native_source = + kAXTextFromNativeHTMLRubyAnnotation; + } + AXObject* ruby_annotation_ax_object = nullptr; + for (const auto& child : children_) { + if (child->RoleValue() == ax::mojom::blink::Role::kRubyAnnotation && + child->GetNode() && + child->GetNode()->HasTagName(html_names::kRtTag)) { + ruby_annotation_ax_object = child; + break; + } + } + if (ruby_annotation_ax_object) { + AXObjectSet visited; + description = + RecursiveTextAlternative(*ruby_annotation_ax_object, true, visited); + if (related_objects) { + related_objects->push_back( + MakeGarbageCollected<NameSourceRelatedObject>( + ruby_annotation_ax_object, description)); + } + if (description_sources) { + DescriptionSource& source = description_sources->back(); + source.related_objects = *related_objects; + source.text = description; + found_description = true; + } else { + return description; + } + } + } + // table caption, 5.9.2 from: // http://rawgit.com/w3c/aria/master/html-aam/html-aam.html auto* table_element = DynamicTo<HTMLTableElement>(element);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_node_object.h b/third_party/blink/renderer/modules/accessibility/ax_node_object.h index 04fcc8ea..793b466 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.h
@@ -322,8 +322,6 @@ bool IsHtmlTable() const; void AddTableChildren(); void AddValidationMessageChild(); - // For some nodes, only LayoutBuilderTraversal visits the necessary children. - bool ShouldUseLayoutBuilderTraversal() const override; ax::mojom::blink::Dropeffect ParseDropeffect(String& dropeffect) const; DISALLOW_COPY_AND_ASSIGN(AXNodeObject);
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.cc b/third_party/blink/renderer/modules/accessibility/ax_object.cc index 82460e0..31a08cf 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object.cc
@@ -4589,7 +4589,6 @@ // if the row might receive focus case ax::mojom::blink::Role::kRow: case ax::mojom::blink::Role::kRuby: - case ax::mojom::blink::Role::kRubyAnnotation: case ax::mojom::blink::Role::kSection: case ax::mojom::blink::Role::kStrong: case ax::mojom::blink::Role::kTime: @@ -4619,6 +4618,22 @@ } break; + case ax::mojom::blink::Role::kRubyAnnotation: + // Ruby annotations are removed from accessible names and instead used + // as a description of the parent Role::kRuby object. The benefit is that + // announcement of the description can be toggled on/off per user choice. + // In this way, ruby annotations are treated like other annotations, e.g. + // <mark aria-description="annotation">base text</mark>. + // In order to achieve the above: + // * When recursive is true: + // Return false, so that the ruby annotation text does not contribute to + // the name of the parent Role::kRuby, since it will also be in the + // description of that object. + // * When recursive is false: + // Return true, so that text is generated for the object. This text will + // be assigned as the description of he parent Role::kRuby object. + return !recursive; + case ax::mojom::blink::Role::kPdfActionableHighlight: LOG(ERROR) << "PDF specific highlight role, Blink shouldn't generate " "this role type";
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object.h b/third_party/blink/renderer/modules/accessibility/ax_object.h index 6e0451b..b336448 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object.h
@@ -1085,8 +1085,12 @@ virtual AXObject* RawNextSibling() const { return nullptr; } virtual void AddChildren() {} - // For some nodes, only LayoutBuilderTraversal visits the necessary children. - virtual bool ShouldUseLayoutBuilderTraversal() const { return false; } + // If there is a DOM node, use LayoutBuilderTraversal, which visits DOM + // children and pseudo element nodes, otherwise this may be an anonymous node, + // such as an anonymous block that is inserted to enforce the rule that all + // children are blocks or all children are inlines. Anonymous blocks have a + // layout object but no DOM node. + virtual bool ShouldUseLayoutBuilderTraversal() const { return GetNode(); } virtual bool CanHaveChildren() const { return true; } bool HasChildren() const { return have_children_; } virtual void UpdateChildrenIfNecessary();
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc index 87c63ef..5654a3f 100644 --- a/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc +++ b/third_party/blink/renderer/modules/accessibility/inspector_type_builder_helper.cc
@@ -200,6 +200,8 @@ return SourceType::Labelfor; case kAXTextFromNativeHTMLLabelWrapped: return SourceType::Labelwrapped; + case kAXTextFromNativeHTMLRubyAnnotation: + return SourceType::Rubyannotation; case kAXTextFromNativeHTMLTableCaption: return SourceType::Tablecaption; case kAXTextFromNativeHTMLLegend:
diff --git a/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller.cc b/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller.cc index c1d92d0..1d51152 100644 --- a/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller.cc +++ b/third_party/blink/renderer/modules/screen_orientation/screen_orientation_controller.cc
@@ -147,6 +147,10 @@ } void ScreenOrientationController::NotifyOrientationChanged() { + // TODO(dcheng): Remove this and check in the caller. + if (!DomWindow()) + return; + // Keep track of the frames that need to be notified before notifying the // current frame as it will prevent side effects from the change event // handlers.
diff --git a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc index f1c1a73f..c2702ad 100644 --- a/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl2_rendering_context_base.cc
@@ -5527,7 +5527,6 @@ return false; } return true; - case GL_UNSIGNED_SHORT: case GL_UNSIGNED_SHORT_5_6_5: case GL_UNSIGNED_SHORT_4_4_4_4: case GL_UNSIGNED_SHORT_5_5_5_1: @@ -5538,6 +5537,23 @@ return false; } return true; + case GL_UNSIGNED_SHORT: + if (buffer && buffer->GetType() != DOMArrayBufferView::kTypeUint16) { + SynthesizeGLError( + GL_INVALID_OPERATION, "readPixels", + "type GL_UNSIGNED_SHORT but ArrayBufferView not Uint16Array"); + return false; + } + if (format == GL_RGBA) { + if (!ExtensionEnabled(kEXTTextureNorm16Name)) { + SynthesizeGLError( + GL_INVALID_ENUM, "readPixels", + "invalid format/type combination RGBA/UNSIGNED_SHORT without " + "EXT_texture_norm16 support"); + return false; + } + } + return true; case GL_SHORT: if (buffer && buffer->GetType() != DOMArrayBufferView::kTypeInt16) { SynthesizeGLError(GL_INVALID_OPERATION, "readPixels",
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index ec977bb2..5549499 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1742,8 +1742,6 @@ crbug.com/381684 [ Mac ] fonts/family-fallback-gardiner.html [ Skip ] crbug.com/381684 [ Win ] fonts/family-fallback-gardiner.html [ Skip ] -crbug.com/636239 [ Win7 ] media/video-zoom-controls.html [ Failure ] - crbug.com/377696 printing/setPrinting.html [ Failure ] # No support for WPT print-reftests: @@ -2577,12 +2575,6 @@ crbug.com/626703 external/wpt/mediacapture-record/MediaRecorder-peerconnection-no-sink.https.html [ Timeout ] crbug.com/626703 external/wpt/mediacapture-record/MediaRecorder-peerconnection.https.html [ Timeout ] crbug.com/626703 [ Win7 ] virtual/plz-dedicated-worker/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] -crbug.com/626703 external/wpt/fetch/api/request/request-bad-port.any.worker.html [ Timeout ] -crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/api/request/request-bad-port.any.worker.html [ Timeout ] -crbug.com/626703 external/wpt/fetch/api/request/request-bad-port.any.sharedworker.html [ Timeout ] -crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/api/request/request-bad-port.any.sharedworker.html [ Timeout ] -crbug.com/626703 external/wpt/fetch/api/request/request-bad-port.any.html [ Timeout ] -crbug.com/626703 virtual/plz-dedicated-worker/external/wpt/fetch/api/request/request-bad-port.any.html [ Timeout ] crbug.com/626703 external/wpt/input-events/input-events-get-target-ranges-joining-dl-element-and-another-list.tentative.html?Backspace [ Timeout ] crbug.com/626703 external/wpt/input-events/input-events-get-target-ranges-deleting-in-list-items.tentative.html?Backspace,ul [ Timeout ] crbug.com/626703 external/wpt/input-events/input-events-get-target-ranges-joining-dl-elements.tentative.html?Backspace [ Timeout ] @@ -5146,13 +5138,6 @@ crbug.com/994692 [ Linux ] compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ] crbug.com/994692 [ Win ] compositing/reflections/nested-reflection-anchor-point.html [ Pass Failure ] -# Video flakily not being being rendered on Mac -crbug.com/988248 media/controls/captions-menu-always-visible.html [ Pass Failure ] -crbug.com/988248 [ Mac ] media/controls/overflow-menu-always-visible.html [ Pass Failure ] -crbug.com/988248 [ Mac ] media/video-persistence.html [ Pass Failure ] -crbug.com/988248 [ Linux ] media/video-persistence.html [ Pass Failure ] -crbug.com/988248 [ Mac ] media/video-zoom.html [ Pass Failure ] - crbug.com/996219 [ Win ] virtual/text-antialias/emoji-vertical-origin-visual.html [ Failure ] # Sheriff 2019-08-22 @@ -6012,3 +5997,6 @@ # for waitings in web tests to trigger a detection event. crbug.com/1032681 http/tests/subresource_filter/overlay_popup_ad/* [ Skip ] crbug.com/1032681 virtual/disable-frequency-capping-for-overlay-popup-detection/http/tests/subresource_filter/overlay_popup_ad/* [ Pass ] + +#Sheriff 2020-12-01 +crbug.com/1153626 http/tests/wasm/wasm_worker_termination_while_compiling.html [ Pass Crash ]
diff --git a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt index 5d8dabc..78ff5aa 100644 --- a/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt +++ b/third_party/blink/web_tests/accessibility/element-role-mapping-normal-expected.txt
@@ -65,11 +65,9 @@ AXRole: AXStaticText "Paragraph" AXRole: AXInlineTextBox "Paragraph" AXRole: AXRuby - AXRole: AXRubyAnnotation - AXRole: AXStaticText "한êµ" - AXRole: AXInlineTextBox "한êµ" AXRole: AXStaticText "韓國" AXRole: AXInlineTextBox "韓國" + AXRole: AXRubyAnnotation "한êµ" AXRole: AXDescriptionList AXRole: AXDescriptionListTerm AXRole: AXStaticText "Coffee"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-size-003.html b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-size-003.html new file mode 100644 index 0000000..95d9e37 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-flexbox/flex-minimum-size-003.html
@@ -0,0 +1,23 @@ +<!doctype html> +<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org"> +<link rel="help" href="https://drafts.csswg.org/css-flexbox/#min-size-auto"> +<link rel="help" href="https://crbug.com/1151608"> +<meta name="assert" content="automatic minimum size computation doesn't overflow when multiplying by the aspect ratio" /> + +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/check-layout-th.js"></script> + +<body onload="checkLayout('img')"> + +<div id=log></div> + +<div style="display: flex; width: 300px;"> + <img src="data:image/svg+xml,%3Csvg viewBox='0 0 1 1' width='8000' height='8000' xmlns='http://www.w3.org/2000/svg' %3E%3C/svg%3E" data-expected-width=8000 style="height: 8000px;"> +</div> + +<div style="display: flex; flex-direction: column; height: 300px;"> + <img src="data:image/svg+xml,%3Csvg viewBox='0 0 1 1' width='8000' height='8000' xmlns='http://www.w3.org/2000/svg' %3E%3C/svg%3E" data-expected-height=8000 style="width: 8000px;"> +</div> + +</body>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-001-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-001-expected.txt deleted file mode 100644 index 9612dd0..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-001-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -FAIL linebreak only assert_equals: expected 144 but got 151 -FAIL spaces linebreak assert_equals: expected 144 but got 151 -FAIL linebreak spaces assert_equals: expected 144 but got 151 -FAIL spaces linebreak spaces assert_equals: expected 144 but got 151 -FAIL multiple linebreaks assert_equals: expected 144 but got 151 -FAIL multiple linebreaks + spaces assert_equals: expected 144 but got 151 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-002-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-002-expected.txt deleted file mode 100644 index 405bb8e..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-002-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -FAIL linebreak only assert_equals: expected 216 but got 223 -FAIL spaces linebreak assert_equals: expected 216 but got 223 -FAIL linebreak spaces assert_equals: expected 216 but got 223 -FAIL spaces linebreak spaces assert_equals: expected 216 but got 223 -FAIL multiple linebreaks assert_equals: expected 216 but got 223 -FAIL multiple linebreaks + spaces assert_equals: expected 216 but got 223 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-003-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-003-expected.txt deleted file mode 100644 index 716b04b..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-003-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -FAIL linebreak only assert_equals: expected 48 but got 55 -FAIL spaces linebreak assert_equals: expected 48 but got 55 -FAIL linebreak spaces assert_equals: expected 48 but got 55 -FAIL spaces linebreak spaces assert_equals: expected 48 but got 55 -FAIL multiple linebreaks assert_equals: expected 48 but got 55 -FAIL multiple linebreaks + spaces assert_equals: expected 48 but got 55 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-008-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-008-expected.txt deleted file mode 100644 index 69421f29..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-008-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -FAIL linebreak only assert_equals: expected 192 but got 199 -FAIL spaces linebreak assert_equals: expected 192 but got 199 -FAIL linebreak spaces assert_equals: expected 192 but got 199 -FAIL spaces linebreak spaces assert_equals: expected 192 but got 199 -FAIL multiple linebreaks assert_equals: expected 192 but got 199 -FAIL multiple linebreaks + spaces assert_equals: expected 192 but got 199 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-009-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-009-expected.txt deleted file mode 100644 index 283611a..0000000 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/seg-break-transformation-009-expected.txt +++ /dev/null
@@ -1,9 +0,0 @@ -This is a testharness.js-based test. -FAIL linebreak only assert_equals: expected 120 but got 127 -FAIL spaces linebreak assert_equals: expected 120 but got 127 -FAIL linebreak spaces assert_equals: expected 120 but got 127 -FAIL spaces linebreak spaces assert_equals: expected 120 but got 127 -FAIL multiple linebreaks assert_equals: expected 120 but got 127 -FAIL multiple linebreaks + spaces assert_equals: expected 120 but got 127 -Harness: the test ran to completion. -
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt b/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt new file mode 100644 index 0000000..3c87e7a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay-expected.txt
@@ -0,0 +1,9 @@ +This is a testharness.js-based test. +FAIL the windowControlsOverlay object should exist on the navigator object assert_idl_attribute: property "windowControlsOverlay" not found in prototype chain +FAIL visible should be a member of the windowControlsOverlay object assert_idl_attribute: provided value is not an object +FAIL visible should be false Cannot read property 'visible' of undefined +FAIL getBoundingClientRect should be a method of the windowControlsOverlay object assert_idl_attribute: provided value is not an object +FAIL getBoundingClientRect return type should be DOMRect Cannot read property 'getBoundingClientRect' of undefined +FAIL getBoundingClientRect should return a empty DOMRect Cannot read property 'getBoundingClientRect' of undefined +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay.html b/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay.html new file mode 100644 index 0000000..069ff16 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/webappapis/system-state-and-capabilities/the-navigator-object/navigator-window-controls-overlay.html
@@ -0,0 +1,37 @@ +<!DOCTYPE html> +<meta charset='utf-8'> +<title>navigator.windowControlsOverlay</title> + +<script src='/resources/testharness.js'></script> +<script src='/resources/testharnessreport.js'></script> + +<script> + test(function(){ + assert_idl_attribute(navigator, 'windowControlsOverlay'); + }, 'the windowControlsOverlay object should exist on the navigator object'); + + test(function(){ + assert_idl_attribute(navigator.windowControlsOverlay, 'visible'); + }, 'visible should be a member of the windowControlsOverlay object'); + + test(function(){ + assert_false(navigator.windowControlsOverlay.visible); + }, 'visible should be false'); + + test(function(){ + assert_idl_attribute(navigator.windowControlsOverlay, 'getBoundingClientRect'); + }, 'getBoundingClientRect should be a method of the windowControlsOverlay object'); + + test(function(){ + var rect = navigator.windowControlsOverlay.getBoundingClientRect(); + assert_true(rect instanceof DOMRect); + }, 'getBoundingClientRect return type should be DOMRect'); + + test(function(){ + var rect = navigator.windowControlsOverlay.getBoundingClientRect(); + assert_equals(rect.x, 0); + assert_equals(rect.y, 0); + assert_equals(rect.width, 0); + assert_equals(rect.height, 0); + }, 'getBoundingClientRect should return a empty DOMRect'); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html index 8356a34..af60412 100644 --- a/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html +++ b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-offscreen.html
@@ -2,13 +2,16 @@ <title>Layout Instability: off-screen content-visibility:auto content</title> <link rel="help" href="https://wicg.github.io/layout-instability/" /> <style> - #target { + #auto { content-visibility: auto; contain-intrinsic-size: 1px; width: 100px; } </style> -<div id=target style="position: relative; top: 100000px"> +<div class=auto> + <div style="width: 100px; height: 100px"></div> +</div> +<div class=auto style="position: relative; top: 100000px"> <div style="width: 100px; height: 100px"></div> </div> <script src="/resources/testharness.js"></script> @@ -21,7 +24,12 @@ // Wait for the initial render to complete. await waitForAnimationFrames(2); - window.scrollTo(0, 100000); + window.scrollTo(0, 100000 + 100); + await waitForAnimationFrames(2); + + assert_equals(watcher.score, 0); + + window.scrollTo(0, 0); await waitForAnimationFrames(2); assert_equals(watcher.score, 0);
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-resize.html b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-resize.html new file mode 100644 index 0000000..b8de7f5 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/content-visibility-auto-resize.html
@@ -0,0 +1,29 @@ +<!DOCTYPE html> +<title>Layout Instability: resizing content-visibility:auto content</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<style> + .auto { + content-visibility: auto; + contain-intrinsic-size: 10px 3000px; + width: 100px; + } + .contained { + height: 100px; + } + </style> + <div class=a><div class=contained></div></div> + <div class=a ><div class=contained></div></div> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<script> +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + assert_equals(watcher.score, 0); +}, 'off-screen content-visibility:auto'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/shadow-dom/declarative/support/helpers.js b/third_party/blink/web_tests/external/wpt/shadow-dom/declarative/support/helpers.js index 70808e8..0be3add 100644 --- a/third_party/blink/web_tests/external/wpt/shadow-dom/declarative/support/helpers.js +++ b/third_party/blink/web_tests/external/wpt/shadow-dom/declarative/support/helpers.js
@@ -1,4 +1,4 @@ function setInnerHTML(el,content) { const fragment = (new DOMParser()).parseFromString(`<pre>${content}</pre>`, 'text/html', {includeShadowRoots: true}); - el.replaceChildren(...fragment.body.firstChild.childNodes); + (el instanceof HTMLTemplateElement ? el.content : el).replaceChildren(...fragment.body.firstChild.childNodes); }
diff --git a/third_party/blink/web_tests/media/video-layer-crash.html b/third_party/blink/web_tests/media/video-layer-crash.html index a8f87960c..ffeeea1 100644 --- a/third_party/blink/web_tests/media/video-layer-crash.html +++ b/third_party/blink/web_tests/media/video-layer-crash.html
@@ -11,16 +11,18 @@ <body> <p>Test dynamic removal of transformed and reflected video </p> <video id="one" style="transform:rotate(20deg)"></video><br> - <video style="transform:scale(0.5)"></video><br> - <video style="transform:skew(20deg)"></video><br> + <video class="otherVids" style="transform:scale(0.5)"></video><br> + <video class="otherVids" style="transform:skew(20deg)"></video><br> <script> + var videos = Array.from(document.getElementsByClassName("otherVids")); + var presentationPromise = + Promise.all(videos.map(video => videoPresentationPromise(video))); + setSrcByTagName('video', 'content/test.ogv'); document.body.removeChild(document.getElementById('one')); document.body.offsetLeft; async_test(t => { - waitForMultipleEvents("canplaythrough", 2, () => { - t.done(); - }); + presentationPromise.then(() => t.done()); }); </script> </body>
diff --git a/third_party/blink/web_tests/media/video-zoom-controls.html b/third_party/blink/web_tests/media/video-zoom-controls.html index 76d401b2..24ed0cb 100644 --- a/third_party/blink/web_tests/media/video-zoom-controls.html +++ b/third_party/blink/web_tests/media/video-zoom-controls.html
@@ -14,7 +14,7 @@ <script src="video-paint-test.js"></script> <script src="media-controls.js"></script> </head> -<body onload="setSrcByTagName('video', 'content/test.ogv'); init()"> +<body onload="setVideoSrcAndWaitForFirstFrame('content/test.ogv');"> <p>Zoomed video with controls.</p> <video width="160" height="120" controls></video> <video class="rotated" width="160" height="120" controls></video>
diff --git a/third_party/blink/web_tests/media/video-zoom.html b/third_party/blink/web_tests/media/video-zoom.html index e6ae3ac..b65c5f91 100644 --- a/third_party/blink/web_tests/media/video-zoom.html +++ b/third_party/blink/web_tests/media/video-zoom.html
@@ -3,25 +3,16 @@ <style> video { zoom: 150%; border: 3px solid red; } </style> <script src=media-file.js></script> <script> - function waitForVideoPresentation(video) { - return new Promise(resolve => { - video.requestVideoFrameCallback(resolve); - }); - } - function init() { + var videosPresented = allVideosPresentedPromise(); setSrcByTagName("video", "content/test.ogv"); if (!window.testRunner) return; testRunner.waitUntilDone(); - let videos = Array.from(document.getElementsByTagName('video')); - Promise.all(videos.map( - video => waitForVideoPresentation(video))).then(() => { - testRunner.notifyDone(); - }); + videosPresented.then(() => testRunner.notifyDone()); } </script>
diff --git a/third_party/blink/web_tests/platform/mac-mac-arm11.0/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac-mac-arm11.0/media/video-zoom-expected.png new file mode 100644 index 0000000..34743ab --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac-arm11.0/media/video-zoom-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png index 34743ab..c8144b6b 100644 --- a/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png +++ b/third_party/blink/web_tests/platform/mac/media/video-zoom-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/media/video-zoom-controls-expected.png b/third_party/blink/web_tests/platform/win7/media/video-zoom-controls-expected.png deleted file mode 100644 index 5e8687a..0000000 --- a/third_party/blink/web_tests/platform/win7/media/video-zoom-controls-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/media/video-zoom-expected.png b/third_party/blink/web_tests/platform/win7/media/video-zoom-expected.png deleted file mode 100644 index ca939971..0000000 --- a/third_party/blink/web_tests/platform/win7/media/video-zoom-expected.png +++ /dev/null Binary files differ
diff --git a/third_party/grpc/BUILD.gn b/third_party/grpc/BUILD.gn index 0690227..48e5081 100644 --- a/third_party/grpc/BUILD.gn +++ b/third_party/grpc/BUILD.gn
@@ -1514,6 +1514,9 @@ public_configs = [ ":grpc_config", ] + configs += [ + ":grpc_config_private", + ] include_dirs = [ "src/third_party/address_sorting/include", ] @@ -1563,6 +1566,9 @@ public_configs = [ ":grpc_config", ] + configs += [ + ":grpc_config_private", + ] } } @@ -1621,6 +1627,9 @@ public_configs = [ ":grpc_config", ] + configs += [ + ":grpc_config_private", + ] visibility = [ "./*" ] if (!is_win) { configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
diff --git a/third_party/grpc/template/BUILD.chromium.gn.template b/third_party/grpc/template/BUILD.chromium.gn.template index 02acf61..cef612df 100644 --- a/third_party/grpc/template/BUILD.chromium.gn.template +++ b/third_party/grpc/template/BUILD.chromium.gn.template
@@ -374,12 +374,12 @@ if repeated: deps.append(":{}".format(repeated_lib_name)) %>\ - ${cc_library_internal(lib.name, indent, sources, deps, extra_stuff, [])} + ${cc_library_internal(lib.name, indent, sources, deps, extra_stuff, extra_configs)} % if repeated: # There are some .cc files that are in multiple places. GN doesn't like # that. Moving them to another target. - ${cc_library_internal(repeated_lib_name, indent, repeated, repeated_deps, extra_stuff, [])} + ${cc_library_internal(repeated_lib_name, indent, repeated, repeated_deps, extra_stuff, extra_configs)} % endif </%def>\ <%def name="cc_library_internal(name, indent, sources, lib_deps, extra_stuff, extra_configs)">\
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.h b/tools/clang/blink_gc_plugin/RecordInfo.h index de44d86..20ef058 100644 --- a/tools/clang/blink_gc_plugin/RecordInfo.h +++ b/tools/clang/blink_gc_plugin/RecordInfo.h
@@ -40,7 +40,7 @@ RecordInfo* info, const TracingStatus& status) : spec_(spec), info_(info), status_(status) {} - const TracingStatus NeedsTracing() { return status_; } + const TracingStatus NeedsTracing() override { return status_; } const clang::CXXBaseSpecifier& spec() { return spec_; } RecordInfo* info() { return info_; } @@ -54,7 +54,7 @@ public: FieldPoint(clang::FieldDecl* field, Edge* edge) : field_(field), edge_(edge) {} - const TracingStatus NeedsTracing() { + const TracingStatus NeedsTracing() override { return edge_->NeedsTracing(Edge::kRecursive); } clang::FieldDecl* field() { return field_; }
diff --git a/tools/clang/plugins/FindBadConstructsAction.h b/tools/clang/plugins/FindBadConstructsAction.h index 383db84..04cfc81 100644 --- a/tools/clang/plugins/FindBadConstructsAction.h +++ b/tools/clang/plugins/FindBadConstructsAction.h
@@ -16,12 +16,11 @@ FindBadConstructsAction(); protected: - // Overridden from PluginASTAction: - virtual std::unique_ptr<clang::ASTConsumer> CreateASTConsumer( + std::unique_ptr<clang::ASTConsumer> CreateASTConsumer( clang::CompilerInstance& instance, - llvm::StringRef ref); - virtual bool ParseArgs(const clang::CompilerInstance& instance, - const std::vector<std::string>& args); + llvm::StringRef ref) override; + bool ParseArgs(const clang::CompilerInstance& instance, + const std::vector<std::string>& args) override; private: Options options_;
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 176f353..d458ef6 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -311,6 +311,8 @@ 'linux-chromium-tests-staging-builder': 'release_bot', 'linux-code-coverage': 'clang_code_coverage', 'linux-fieldtrial-rel': 'release_bot_minimal_symbols', + 'linux-paeverywhere-x64-fyi-dbg': 'debug_bot_paeverywhere_x64', + 'linux-paeverywhere-x64-fyi-rel': 'release_trybot_paeverywhere_x64', 'linux-perfetto-rel': 'perfetto_release_bot', 'linux-upload-perfetto': 'release_bot', 'linux-wpt-fyi-rel': 'release_bot_minimal_symbols', @@ -319,6 +321,8 @@ 'linux-wpt-payments-fyi-rel': 'release_bot_minimal_symbols', 'mac-code-coverage': 'clang_code_coverage', 'mac-hermetic-upgrade-rel': 'release_bot', + 'mac-paeverywhere-x64-fyi-dbg': 'debug_bot_paeverywhere_x64', + 'mac-paeverywhere-x64-fyi-rel': 'release_trybot_paeverywhere_x64', 'mac-upload-perfetto': 'release_bot', 'win-annotator-rel': 'release_bot', 'win-celab-builder-rel': 'release_bot_minimal_symbols',
diff --git a/tools/mb/mb_config_expectations/chromium.fyi.json b/tools/mb/mb_config_expectations/chromium.fyi.json index 2846b8f2..05b31b01 100644 --- a/tools/mb/mb_config_expectations/chromium.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.fyi.json
@@ -633,6 +633,27 @@ "use_ozone": true } }, + "linux-paeverywhere-x64-fyi-dbg": { + "gn_args": { + "is_component_build": true, + "is_debug": true, + "symbol_level": 1, + "target_cpu": "x64", + "use_allocator": "partition", + "use_goma": true + } + }, + "linux-paeverywhere-x64-fyi-rel": { + "gn_args": { + "dcheck_always_on": true, + "is_component_build": false, + "is_debug": false, + "symbol_level": 1, + "target_cpu": "x64", + "use_allocator": "partition", + "use_goma": true + } + }, "linux-perfetto-rel": { "gn_args": { "is_component_build": false, @@ -697,6 +718,27 @@ "use_goma": true } }, + "mac-paeverywhere-x64-fyi-dbg": { + "gn_args": { + "is_component_build": true, + "is_debug": true, + "symbol_level": 1, + "target_cpu": "x64", + "use_allocator": "partition", + "use_goma": true + } + }, + "mac-paeverywhere-x64-fyi-rel": { + "gn_args": { + "dcheck_always_on": true, + "is_component_build": false, + "is_debug": false, + "symbol_level": 1, + "target_cpu": "x64", + "use_allocator": "partition", + "use_goma": true + } + }, "mac-upload-perfetto": { "gn_args": { "is_component_build": false,
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml index f114b64..0ab56f34 100644 --- a/tools/metrics/actions/actions.xml +++ b/tools/metrics/actions/actions.xml
@@ -21899,6 +21899,16 @@ </description> </action> +<action name="Signin_Impression_FromKaleidoscope"> + <owner>beccahughes@chromium.org</owner> + <owner>steimel@chromium.org</owner> + <owner>mlamouri@chromium.org</owner> + <owner>media-dev@chromium.org</owner> + <description> + Recorded when showing a sign-in page from Kaleidoscope. + </description> +</action> + <action name="Signin_Impression_FromManageCardsBubble" not_user_triggered="true"> <owner>manasverma@google.com</owner>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index d9dfd4c..c4faee1b 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -42032,6 +42032,7 @@ <int value="-1766648764" label="OmniboxShortBookmarkSuggestions:disabled"/> <int value="-1766162197" label="AppServiceInstanceRegistry:enabled"/> <int value="-1766129470" label="DataSaverLiteModeRebranding:disabled"/> + <int value="-1763899404" label="LayoutNGTable:enabled"/> <int value="-1760624380" label="ImprovedCookieControlsForThirdPartyCookieBlocking:enabled"/> <int value="-1758468685" label="DownloadHomeV2:disabled"/> @@ -43199,6 +43200,7 @@ <int value="-683370370" label="EnableAppDataSearch:enabled"/> <int value="-683306022" label="OverscrollHistoryNavigation:enabled"/> <int value="-682580680" label="DisableOfficeEditingComponentApp:disabled"/> + <int value="-681434111" label="WebFeed:disabled"/> <int value="-680787130" label="ExperimentalVRFeatures:disabled"/> <int value="-680589442" label="MacRTL:disabled"/> <int value="-679500267" label="UseXpsForPrinting:disabled"/> @@ -44313,6 +44315,7 @@ <int value="423615350" label="enable-tab-audio-muting"/> <int value="423855924" label="enable-tab-switcher-theme-colors"/> <int value="425072496" label="GridLayoutForNtpShortcuts:enabled"/> + <int value="427184788" label="WebFeed:enabled"/> <int value="430776375" label="TextureLayerSkipWaitForActivation:disabled"/> <int value="430959979" label="SyncStandaloneTransport:disabled"/> <int value="431691805" label="MediaDocumentDownloadButton:enabled"/> @@ -45070,6 +45073,7 @@ <int value="1173244409" label="AutofillUseMobileLabelDisambiguation:enabled"/> <int value="1174088940" label="enable-wasm"/> <int value="1177120582" label="InstallableInkDrop:disabled"/> + <int value="1177174300" label="LayoutNGTable:disabled"/> <int value="1177628103" label="GaiaActionButtons:disabled"/> <int value="1179013979" label="OmniboxUIExperimentMaxAutocompleteMatches:enabled"/> @@ -58076,6 +58080,12 @@ <int value="1" label="User dismissed notification"/> </enum> +<enum name="PhoneHubOptInEntryPoint"> + <int value="0" label="New user opted in via multidevice setup flow"/> + <int value="1" label="User opted in via onboarding promotion"/> + <int value="2" label="User opted in via Settings page"/> +</enum> + <enum name="PhoneHubQuickAction"> <int value="0" label="Toggle Hotspot On"/> <int value="1" label="Toggle Hotspot Off"/> @@ -60002,6 +60012,7 @@ <int value="6" label="PreviewPageRendered with no metafile (Deprecated)"/> <int value="7" label="Received bad printer settings"/> <int value="8" label="Capture metadata failed (Deprecated)"/> + <int value="9" label="Got empty printer settings"/> </enum> <enum name="PrintPreviewFontTypeType"> @@ -67490,6 +67501,7 @@ <int value="30" label="Re-signin after an account rename"/> <int value="31" label="Sign-in promo in the web sign-in flow"/> <int value="32" label="Safety check settings page"/> + <int value="33" label="Kaleidoscope"/> </enum> <enum name="SigninAccountEquality">
diff --git a/tools/metrics/histograms/histograms_xml/browser/histograms.xml b/tools/metrics/histograms/histograms_xml/browser/histograms.xml index aef341e..47f111a4 100644 --- a/tools/metrics/histograms/histograms_xml/browser/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/browser/histograms.xml
@@ -467,8 +467,8 @@ <histogram name="BrowserRenderProcessHost.BackgroundTime" units="ms" expires_after="2021-04-04"> - <owner>ericrobinson@chromium.org</owner> <owner>johnidel@chromium.org</owner> + <owner>chrome-ads-histograms@google.com</owner> <summary> Record the time spent in the background after RenderProcessHost initialization of the process. Recorded when the RenderProcessHost for the @@ -540,8 +540,8 @@ <histogram name="BrowserRenderProcessHost.FramePrioritiesSeen" enum="FramePrioritiesSeen" expires_after="2021-04-11"> - <owner>ericrobinson@chromium.org</owner> <owner>csharrison@chromium.org</owner> + <owner>chrome-ads-histograms@google.com</owner> <summary> Determines what combination of low and normal priority frames were attached to a render process during its lifetime. Recorded when the host for the @@ -573,8 +573,8 @@ <histogram name="BrowserRenderProcessHost.TotalTime" units="ms" expires_after="2021-02-21"> - <owner>ericrobinson@chromium.org</owner> <owner>johnidel@chromium.org</owner> + <owner>chrome-ads-histograms@google.com</owner> <summary> Record the lifetime of the RenderProcessHost after initialization of the process. Recorded when the RenderProcessHost for the process is destroyed.
diff --git a/tools/metrics/histograms/histograms_xml/network/histograms.xml b/tools/metrics/histograms/histograms_xml/network/histograms.xml index a0134d88..4ea30e0 100644 --- a/tools/metrics/histograms/histograms_xml/network/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/network/histograms.xml
@@ -2101,6 +2101,21 @@ </summary> </histogram> +<histogram name="NetworkService.CorsForcedOffForIsolatedWorldOrigin" + enum="BooleanForceDisabled" expires_after="M92"> + <owner>lukasza@chromium.org</owner> + <owner>rdevlin.cronin@chromium.org</owner> + <summary> + Whether CORS was turned off based on the origin of an isolated world (e.g. + for a content script of a platform app). + + Logged in CorsURLLoader::HandleComplete for all successful requests. + + The logged value depends on whether CorsURLLoader::SetCorsFlagIfNeeded had + been affected by network::ResourceRequest::isolated_world_origin. + </summary> +</histogram> + <histogram name="NetworkService.CrossOriginResourcePolicy.ReportOnlyResult" enum="NetworkServiceCorpResult" expires_after="2020-09-30"> <owner>mkwst@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml index 643c941..530d85e0 100644 --- a/tools/metrics/histograms/histograms_xml/others/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -2848,7 +2848,7 @@ </histogram> <histogram name="ContextMenu.DelayedElementDetails" - enum="ContextMenuDelayedElementDetails" expires_after="2020-12-11"> + enum="ContextMenuDelayedElementDetails" expires_after="2021-05-23"> <owner>michaeldo@chromium.org</owner> <owner>src/ios/web/web_state/ui/OWNERS</owner> <summary> @@ -3044,7 +3044,7 @@ </histogram> <histogram name="ContextMenu.WaitingForElementDetails" enum="BooleanHit" - expires_after="2020-12-11"> + expires_after="2021-05-23"> <owner>michaeldo@chromium.org</owner> <owner>src/ios/web/web_state/ui/OWNERS</owner> <summary> @@ -6542,8 +6542,8 @@ </histogram> <histogram name="HttpCache.HardReset" enum="Boolean" expires_after="2021-06-15"> - <owner>ericrobinson@chromium.org</owner> <owner>shivanisha@chromium.org</owner> + <owner>jkarlin@chromium.org</owner> <summary> Whether the HttpCache was forced to reset upon creation, effectively clearing out its previous content. This is recorded when the cache is @@ -16984,6 +16984,17 @@ </summary> </histogram> +<histogram name="WebApp.Preinstalled.UninstallAndReplaceCount" units="apps" + expires_after="2021-04-01"> + <owner>alancutter@chromium.org</owner> + <owner>desktop-pwas-team@google.com</owner> + <summary> + Records how many preinstalled web app installations uninstalled and replaced + an old default app (web app or Chrome app). This corresponds to the + "uninstall_and_replace" field in preinstalled web app configs. + </summary> +</histogram> + <histogram name="WebApp.Shortcuts.Creation.Result" enum="ShortcutsCreationResult" expires_after="M93"> <owner>phillis@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/page/histograms.xml b/tools/metrics/histograms/histograms_xml/page/histograms.xml index 884eb83..5af2de1 100644 --- a/tools/metrics/histograms/histograms_xml/page/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/page/histograms.xml
@@ -679,10 +679,9 @@ </summary> </histogram> -<histogram base="true" name="PageLoad.Cpu" units="units" - expires_after="2022-01-05"> - <owner>ericrobinson@chromium.org</owner> - <owner>csharrison@chromium.org</owner> +<histogram base="true" name="PageLoad.Cpu" units="units" expires_after="M92"> + <owner>johnidel@chromium.org</owner> + <owner>chrome-ads-histograms@google.com</owner> <summary> Only recorded if the page has at least one identified ad frame. Recorded in PageLoadMetrics when the page is destroyed. Cpu measures the wall time of @@ -1267,8 +1266,9 @@ </histogram> <histogram name="PageLoad.FrameCounts.AdFrames.PerFrame.OriginStatus" - enum="CrossOriginAdStatus" expires_after="M88"> - <owner>ericrobinson@chromium.org</owner> + enum="CrossOriginAdStatus" expires_after="M92"> + <owner>johnidel@chromium.org</owner> + <owner>chrome-ads-histograms@google.com</owner> <summary> For each identified ad frame, whether the origin of the ad matches the origin of the main frame, differs from the origin of the main frame, or is
diff --git a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml index ada49f1..bc4b438a 100644 --- a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
@@ -39,6 +39,16 @@ <summary>The steady state feature status of PhoneHub on user login.</summary> </histogram> +<histogram name="PhoneHub.Connection.Result" enum="BooleanSuccess" + expires_after="2021-11-30"> + <owner>khorimoto@chromium.org</owner> + <owner>better-together-dev@google.com</owner> + <summary> + Measures PhoneHub connection success rate, considering attempts where the + phone is not nearby as failures. + </summary> +</histogram> + <histogram name="PhoneHub.Connectivity.Duration" units="ms" expires_after="M98"> <owner>khorimoto@chromium.org</owner> <owner>better-together-dev@google.com</owner> @@ -59,6 +69,9 @@ <histogram name="PhoneHub.Connectivity.Success" enum="BooleanSuccess" expires_after="M98"> + <obsolete> + Renamed to PhoneHub.Connection.Result on 11/2020 in M89. + </obsolete> <owner>khorimoto@chromium.org</owner> <owner>better-together-dev@google.com</owner> <summary>The success rate of connecting to the Phone.</summary> @@ -109,6 +122,13 @@ <summary>Events for the given notification opt-in prompt.</summary> </histogram> +<histogram name="PhoneHub.OptInEntryPoint" enum="PhoneHubOptInEntryPoint" + expires_after="2021-11-25"> + <owner>meilinw@chromium.org</owner> + <owner>khorimoto@chromium.org</owner> + <summary>Tracks the UI surface with which users enable Phone Hub.</summary> +</histogram> + <histogram name="PhoneHub.QuickActionClicked" enum="PhoneHubQuickAction" expires_after="2021-10-31"> <owner>tengs@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml index deab08b..b3c4dd92 100644 --- a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml
@@ -591,7 +591,7 @@ </histogram> <histogram name="SafeBrowsing.DelayedWarnings.Event" - enum="SafeBrowsingDelayedWarningEvent" expires_after="M89"> + enum="SafeBrowsingDelayedWarningEvent" expires_after="M91"> <owner>meacer@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -604,7 +604,7 @@ </histogram> <histogram name="SafeBrowsing.DelayedWarnings.Event_UrlElisionDisabled" - enum="SafeBrowsingDelayedWarningEvent" expires_after="M89"> + enum="SafeBrowsingDelayedWarningEvent" expires_after="M91"> <owner>meacer@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/stability/histograms.xml b/tools/metrics/histograms/histograms_xml/stability/histograms.xml index ec42af7..e58012b 100644 --- a/tools/metrics/histograms/histograms_xml/stability/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/stability/histograms.xml
@@ -474,7 +474,7 @@ </histogram> <histogram name="Stability.iOS.UTE.OSVersion" enum="VersionComparison" - expires_after="2020-12-01"> + expires_after="2021-05-01"> <owner>michaeldo@chromium.org</owner> <owner>olivierrobin@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/subresource/histograms.xml b/tools/metrics/histograms/histograms_xml/subresource/histograms.xml index c9fc6e1..958d987 100644 --- a/tools/metrics/histograms/histograms_xml/subresource/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/subresource/histograms.xml
@@ -23,8 +23,7 @@ <histogram name="SubresourceFilter.Actions2" enum="SubresourceFilterActions2" expires_after="2021-04-18"> - <owner>ericrobinson@google.com</owner> - <owner>jkarlin@chromium.org</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Counts of various UI and user action events related to the @@ -84,7 +83,7 @@ <histogram name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Allowed" units="microseconds" expires_after="M92"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Records the total time a subframe navigation was delayed while calculating @@ -99,7 +98,7 @@ <histogram name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.Disallowed2" units="microseconds" expires_after="M92"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Records the total time a subframe navigation was delayed while calculating @@ -114,7 +113,7 @@ <histogram name="SubresourceFilter.DocumentLoad.SubframeFilteringDelay.WouldDisallow" units="microseconds" expires_after="M92"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Records the total time a subframe navigation was delayed while calculating @@ -152,7 +151,7 @@ <histogram name="SubresourceFilter.IndexRuleset.Verify.Status" enum="SubresourceFilterVerifyStatus" expires_after="2021-04-04"> - <owner>ericrobinson@chromium.org</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> The result of the IndexRulesetMatcher Verify method. Either pass if both the @@ -166,7 +165,7 @@ <histogram name="SubresourceFilter.IndexRuleset.Verify2.WallDuration" units="ms" expires_after="M92"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> The total time it took to verify the indexed ruleset in the browser process. @@ -262,7 +261,7 @@ <histogram name="SubresourceFilter.PageLoad.ActivationList" enum="ActivationList" expires_after="2021-05-09"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> The ActivationList or NONE that the main frame navigation matched with. @@ -272,7 +271,7 @@ <histogram name="SubresourceFilter.PageLoad.ActivationState" enum="SubresourceFilterActivationState" expires_after="2021-05-09"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Whenever a document load is committed in a main frame, records whether @@ -352,7 +351,7 @@ <histogram name="SubresourceFilter.PageLoad.SafeBrowsingDelay" units="ms" expires_after="M92"> - <owner>ericrobinson@google.com</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> The navigation delay imposed by the subresource filter on a given navigation @@ -420,7 +419,7 @@ <histogram name="SubresourceFilter.SafeBrowsing.TotalCheckTime" units="ms" expires_after="M92"> - <owner>ericrobinson@chromium.org</owner> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> The time an individual Safe Browsing URL check took before finishing, @@ -476,8 +475,8 @@ </histogram> <histogram name="SubresourceFilter.WriteRuleset.Result" - enum="SubresourceFilterWriteRulesetResult" expires_after="M88"> - <owner>ericrobinson@chromium.org</owner> + enum="SubresourceFilterWriteRulesetResult" expires_after="M92"> + <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> Whether indexing a version of the ruleset and writing it to disk succeeded,
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index c4db62e3..00bae90 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -3,6 +3,7 @@ Googlers can view additional information about internal perf infrastructure at,https://goto.google.com/chrome-benchmarking-sheet Benchmark name,Individual owners,Component,Documentation,Tags UNSCHEDULED_blink_perf.service_worker,"shimazu@chromium.org, falken@chromium.org, ting.shao@intel.com",Blink>ServiceWorker,https://bit.ly/blink-perf-benchmarks, +UNSCHEDULED_speedometer2-pcscan,tmrts@chromium.org,Blink,, base_perftests,"skyostil@chromium.org, gab@chromium.org",Internals>SequenceManager,https://chromium.googlesource.com/chromium/src/+/HEAD/base/README.md#performance-testing, blink_perf.accessibility,dmazzoni@chromium.org,Blink>Accessibility,https://bit.ly/blink-perf-benchmarks,all blink_perf.bindings,"jbroman@chromium.org, yukishiino@chromium.org, haraken@chromium.org",Blink>Bindings,https://bit.ly/blink-perf-benchmarks,all
diff --git a/tools/perf/benchmarks/speedometer2.py b/tools/perf/benchmarks/speedometer2.py index 64e27ab..ba90c25c2 100644 --- a/tools/perf/benchmarks/speedometer2.py +++ b/tools/perf/benchmarks/speedometer2.py
@@ -76,3 +76,18 @@ def SetExtraBrowserOptions(self, options): options.AppendExtraBrowserArgs('--enable-features=V8VmFuture') + + +@benchmark.Info(emails=['tmrts@chromium.org'], component='Blink') +class Speedometer2PCScan(Speedometer2): + """Speedometer2 benchmark with the PCSscan flag. + + Shows the performance of upcoming PCScan feature. + """ + + @classmethod + def Name(cls): + return 'UNSCHEDULED_speedometer2-pcscan' + + def SetExtraBrowserOptions(self, options): + options.AppendExtraBrowserArgs('--enable-features=PartitionAllocPCScan')
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index 0529f79c..9b4d62fe 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,12 +5,12 @@ "remote_path": "perfetto_binaries/trace_processor_shell/win/f37338cdaa2126eef2a11e1a6f0cb075888c20e6/trace_processor_shell.exe" }, "mac": { - "hash": "78d036e9d284668b97ab4930ac68ce3f4d6f78e0", - "remote_path": "perfetto_binaries/trace_processor_shell/mac/f37338cdaa2126eef2a11e1a6f0cb075888c20e6/trace_processor_shell" + "hash": "93f80fdc5944e51cabff3dd7cf60c2b5968898a0", + "remote_path": "perfetto_binaries/trace_processor_shell/mac/42433abb9596f1f471251070f7fd7d135c3e9df0/trace_processor_shell" }, "linux": { - "hash": "757b4657ed193f4d5dc0c9e3185a86b93a995d9c", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/f37338cdaa2126eef2a11e1a6f0cb075888c20e6/trace_processor_shell" + "hash": "1d4d4a899be58fbaf9404144b7ccadc523f2bda8", + "remote_path": "perfetto_binaries/trace_processor_shell/linux/42433abb9596f1f471251070f7fd7d135c3e9df0/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/tools/perf/core/undocumented_benchmarks.py b/tools/perf/core/undocumented_benchmarks.py index d108891..8e5d1be9 100644 --- a/tools/perf/core/undocumented_benchmarks.py +++ b/tools/perf/core/undocumented_benchmarks.py
@@ -1,3 +1,4 @@ + # Copyright 2018 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. @@ -22,6 +23,7 @@ 'speedometer-future', 'speedometer2', 'speedometer2-future', + 'UNSCHEDULED_speedometer2-pcscan', 'startup.mobile', 'system_health.webview_startup', 'tab_switching.typical_25',
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config index 06ef6bbf..2d4cee1bb 100644 --- a/tools/perf/expectations.config +++ b/tools/perf/expectations.config
@@ -65,7 +65,6 @@ crbug.com/966613 [ android-pixel-2 ] blink_perf.parser/query-selector-all-class-deep.html [ Skip ] crbug.com/966613 [ android-pixel-2 ] blink_perf.parser/query-selector-all-deep.html [ Skip ] crbug.com/966613 [ android-pixel-2 ] blink_perf.parser/query-selector-all-id-deep.html [ Skip ] -crbug.com/1042130 blink_perf.parser/declarative-shadow-dom-cloning.html [ Skip ] # Benchmark: blink_perf.shadow_dom crbug.com/702319 [ android-nexus-5x ] blink_perf.shadow_dom/* [ Skip ]
diff --git a/tools/win/DebugVisualizers/blink.natvis b/tools/win/DebugVisualizers/blink.natvis index 6fd480d..326ed20 100644 --- a/tools/win/DebugVisualizers/blink.natvis +++ b/tools/win/DebugVisualizers/blink.natvis
@@ -290,7 +290,11 @@ <Expand> <Item Name="Type">(blink::NGFragmentItem::ItemType)type_</Item> <Item Name="TextType" Condition="type_ == 0">(blink::NGTextType)sub_type_</Item> + <Item Name="Text" Condition="type_ == 0">text_</Item> + <Item Name="GeneratedText" Condition="type_ == 1">generated_text_</Item> <Item Name="LineBoxType" Condition="type_ == 2">(NGPhysicalLineBoxFragment::NGLineBoxType)sub_type_</Item> + <Item Name="Line" Condition="type_ == 2">line_</Item> + <Item Name="Box" Condition="type_ == 3">box_</Item> <Item Name="layout_object_">layout_object_</Item> <Item Name="rect_">rect_</Item> <Item Name="ink_overflow_type_">(NGInkOverflow::Type)ink_overflow_type_</Item>
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index 540a135..f02b7e5 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -2782,6 +2782,7 @@ case ax::mojom::Role::kGenericContainer: case ax::mojom::Role::kFooterAsNonLandmark: case ax::mojom::Role::kHeaderAsNonLandmark: + case ax::mojom::Role::kRuby: return ATK_ROLE_SECTION; case ax::mojom::Role::kGraphicsDocument: return ATK_ROLE_DOCUMENT_FRAME; @@ -2912,12 +2913,15 @@ return ATK_ROLE_PANEL; case ax::mojom::Role::kRowHeader: return ATK_ROLE_ROW_HEADER; - case ax::mojom::Role::kRuby: - return kStaticRole; case ax::mojom::Role::kRubyAnnotation: - // TODO(accessibility) Panels are generally for containers of widgets. - // This should probably be a section (if a container) or static if text. - return ATK_ROLE_PANEL; + // Generally exposed as description on <ruby> (Role::kRuby) element, not + // as its own object in the tree. + // However, it's possible to make a kRubyAnnotation element show up in the + // AX tree, for example by adding tabindex="0" to the source <rp> or <rt> + // element or making the source element the target of an aria-owns. + // Therefore, browser side needs to gracefully handle it if it actually + // shows up in the tree. + return kStaticRole; case ax::mojom::Role::kSection: { if (GetName().empty()) { // Do not use ARIA mapping for nameless <section>.
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm index 33e621a..db38795 100644 --- a/ui/accessibility/platform/ax_platform_node_mac.mm +++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -36,6 +36,8 @@ }; RoleMap BuildRoleMap() { + // TODO(accessibility) Are any missing? Consider switch statement so that + // compiler doesn't allow missing roles; const RoleMap::value_type roles[] = { {ax::mojom::Role::kAbbr, NSAccessibilityGroupRole}, {ax::mojom::Role::kAlert, NSAccessibilityGroupRole}, @@ -186,9 +188,7 @@ {ax::mojom::Role::kRow, NSAccessibilityRowRole}, {ax::mojom::Role::kRowGroup, NSAccessibilityGroupRole}, {ax::mojom::Role::kRowHeader, @"AXCell"}, - // TODO(accessibility) What should kRuby be? It's not listed? Any others - // missing? Maybe use switch statement so that compiler doesn't allow us - // to miss any. + {ax::mojom::Role::kRuby, NSAccessibilityGroupRole}, {ax::mojom::Role::kRubyAnnotation, NSAccessibilityUnknownRole}, {ax::mojom::Role::kScrollBar, NSAccessibilityScrollBarRole}, {ax::mojom::Role::kSearch, NSAccessibilityGroupRole},
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc index e8f8cda..7131fd4 100644 --- a/ui/accessibility/platform/ax_platform_node_win.cc +++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -5396,7 +5396,17 @@ return ROLE_SYSTEM_ROWHEADER; case ax::mojom::Role::kRuby: - return ROLE_SYSTEM_TEXT; + return ROLE_SYSTEM_GROUPING; + + case ax::mojom::Role::kRubyAnnotation: + // Generally exposed as description on <ruby> (Role::kRuby) element, not + // as its own object in the tree. + // However, it's possible to make a kRubyAnnotation element show up in the + // AX tree, for example by adding tabindex="0" to the source <rp> or <rt> + // element or making the source element the target of an aria-owns. + // Therefore, browser side needs to gracefully handle it if it actually + // shows up in the tree. + return ROLE_SYSTEM_STATICTEXT; case ax::mojom::Role::kSection: { if (GetNameAsString16().empty()) { @@ -5425,7 +5435,6 @@ case ax::mojom::Role::kSwitch: return ROLE_SYSTEM_CHECKBUTTON; - case ax::mojom::Role::kRubyAnnotation: case ax::mojom::Role::kStaticText: return ROLE_SYSTEM_STATICTEXT; @@ -5798,7 +5807,7 @@ ia2_role = IA2_ROLE_LANDMARK; break; case ax::mojom::Role::kRuby: - ia2_role = IA2_ROLE_TEXT_FRAME; + ia2_role = IA2_ROLE_SECTION; break; case ax::mojom::Role::kSearch: ia2_role = IA2_ROLE_LANDMARK; @@ -6227,7 +6236,17 @@ return L"rowheader"; case ax::mojom::Role::kRuby: - return L"region"; + return L"group"; + + case ax::mojom::Role::kRubyAnnotation: + // Generally exposed as description on <ruby> (Role::kRuby) element, not + // as its own object in the tree. + // However, it's possible to make a kRubyAnnotation element show up in the + // AX tree, for example by adding tabindex="0" to the source <rp> or <rt> + // element or making the source element the target of an aria-owns. + // Therefore, browser side needs to gracefully handle it if it actually + // shows up in the tree. + return L"description"; case ax::mojom::Role::kSection: { if (GetNameAsString16().empty()) { @@ -6259,7 +6278,6 @@ case ax::mojom::Role::kSwitch: return L"switch"; - case ax::mojom::Role::kRubyAnnotation: case ax::mojom::Role::kStaticText: return L"description"; @@ -6889,7 +6907,17 @@ return UIA_DataItemControlTypeId; case ax::mojom::Role::kRuby: - return UIA_PaneControlTypeId; + return UIA_GroupControlTypeId; + + case ax::mojom::Role::kRubyAnnotation: + // Generally exposed as description on <ruby> (Role::kRuby) element, not + // as its own object in the tree. + // However, it's possible to make a kRubyAnnotation element show up in the + // AX tree, for example by adding tabindex="0" to the source <rp> or <rt> + // element or making the source element the target of an aria-owns. + // Therefore, browser side needs to gracefully handle it if it actually + // shows up in the tree. + return UIA_TextControlTypeId; case ax::mojom::Role::kSection: return UIA_GroupControlTypeId; @@ -6912,7 +6940,6 @@ case ax::mojom::Role::kSwitch: return UIA_ButtonControlTypeId; - case ax::mojom::Role::kRubyAnnotation: case ax::mojom::Role::kStaticText: return UIA_TextControlTypeId;
diff --git a/ui/base/ime/chromeos/component_extension_ime_manager.cc b/ui/base/ime/chromeos/component_extension_ime_manager.cc index 4c6132b..9f7a9f7 100644 --- a/ui/base/ime/chromeos/component_extension_ime_manager.cc +++ b/ui/base/ime/chromeos/component_extension_ime_manager.cc
@@ -55,18 +55,15 @@ ComponentExtensionIME::~ComponentExtensionIME() = default; -ComponentExtensionIMEManager::ComponentExtensionIMEManager() { +ComponentExtensionIMEManager::ComponentExtensionIMEManager( + std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate) + : delegate_(std::move(delegate)) { for (const auto& input_method : input_method::kInputMethods) { if (input_method.is_login_keyboard) login_layout_set_.insert(input_method.xkb_layout_id); } -} -ComponentExtensionIMEManager::~ComponentExtensionIMEManager() = default; - -void ComponentExtensionIMEManager::Initialize( - std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate) { - delegate_ = std::move(delegate); + // Creates internal mapping between input method id and engine components. std::vector<ComponentExtensionIME> ext_list = delegate_->ListIME(); for (const auto& ext : ext_list) { bool extension_exists = IsAllowlistedExtension(ext.id); @@ -82,6 +79,8 @@ } } +ComponentExtensionIMEManager::~ComponentExtensionIMEManager() = default; + bool ComponentExtensionIMEManager::LoadComponentExtensionIME( Profile* profile, const std::string& input_method_id) {
diff --git a/ui/base/ime/chromeos/component_extension_ime_manager.h b/ui/base/ime/chromeos/component_extension_ime_manager.h index 268e4222..b21391d9 100644 --- a/ui/base/ime/chromeos/component_extension_ime_manager.h +++ b/ui/base/ime/chromeos/component_extension_ime_manager.h
@@ -51,14 +51,9 @@ // This class manages component extension input method. class COMPONENT_EXPORT(UI_BASE_IME_CHROMEOS) ComponentExtensionIMEManager { public: - ComponentExtensionIMEManager(); - virtual ~ComponentExtensionIMEManager(); - - // Initializes component extension manager. This function create internal - // mapping between input method id and engine components. This function must - // be called before using any other function. - void Initialize( + ComponentExtensionIMEManager( std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate); + virtual ~ComponentExtensionIMEManager(); // Loads |input_method_id| component extension IME. This function returns true // on success. This function is safe to call multiple times. Returns false if @@ -92,11 +87,11 @@ std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate_; // The map of extension_id to ComponentExtensionIME instance. - // It's filled by Initialize() method and never changed during runtime. + // It's filled by ctor and never changed during runtime. std::map<std::string, ComponentExtensionIME> component_extension_imes_; // For quick check the validity of a given input method id. - // It's filled by Initialize() method and never changed during runtime. + // It's filled by ctor and never changed during runtime. std::set<std::string> input_method_id_set_; std::set<std::string> login_layout_set_;
diff --git a/ui/chromeos/ui_chromeos_strings.grd b/ui/chromeos/ui_chromeos_strings.grd index 5c7ec78..01a02ce 100644 --- a/ui/chromeos/ui_chromeos_strings.grd +++ b/ui/chromeos/ui_chromeos_strings.grd
@@ -724,269 +724,269 @@ Kazakh </message> - <message name="IDS_IME_NAME_KEYBOARD_ARMENIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ARMENIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Armenian </message> - <message name="IDS_IME_NAME_KEYBOARD_BELARUSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BELARUSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Belarusian </message> - <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_DUTCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_DUTCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Dutch (Belgium) </message> - <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (Belgium) </message> - <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_GERMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BELGIAN_GERMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> German (Belgium) </message> - <message name="IDS_IME_NAME_KEYBOARD_BRAZILIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BRAZILIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Portuguese (Brazil) </message> - <message name="IDS_IME_NAME_KEYBOARD_BULGARIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BULGARIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Bulgarian </message> - <message name="IDS_IME_NAME_KEYBOARD_BULGARIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BULGARIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Bulgarian with Phonetic keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_ENGLISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_ENGLISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (Canada) </message> - <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (Canada) </message> - <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_MULTILINGUAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CANADIAN_MULTILINGUAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (Canada) with Multilingual keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_CATALAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CATALAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Catalan </message> - <message name="IDS_IME_NAME_KEYBOARD_CROATIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CROATIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Croatian </message> - <message name="IDS_IME_NAME_KEYBOARD_CZECH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CZECH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Czech </message> - <message name="IDS_IME_NAME_KEYBOARD_CZECH_QWERTY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_CZECH_QWERTY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Czech with Qwerty keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_DANISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_DANISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Danish </message> - <message name="IDS_IME_NAME_KEYBOARD_ESTONIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ESTONIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Estonian </message> - <message name="IDS_IME_NAME_KEYBOARD_FAROESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_FAROESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Faroese </message> - <message name="IDS_IME_NAME_KEYBOARD_FILIPINO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_FILIPINO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Filipino </message> - <message name="IDS_IME_NAME_KEYBOARD_FINNISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_FINNISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Finnish </message> - <message name="IDS_IME_NAME_KEYBOARD_FRENCH_BEPO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_FRENCH_BEPO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (France) with Bépo keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (France) </message> - <message name="IDS_IME_NAME_KEYBOARD_GEORGIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_GEORGIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Georgian </message> - <message name="IDS_IME_NAME_KEYBOARD_GERMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_GERMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> German (Germany) </message> - <message name="IDS_IME_NAME_KEYBOARD_GERMAN_NEO_2" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_GERMAN_NEO_2" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> German (Germany) with Neo 2 keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_GREEK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_GREEK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Greek </message> - <message name="IDS_IME_NAME_KEYBOARD_HEBREW" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_HEBREW" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Hebrew </message> - <message name="IDS_IME_NAME_KEYBOARD_HUNGARIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_HUNGARIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Hungarian </message> - <message name="IDS_IME_NAME_KEYBOARD_HUNGARIAN_QWERTY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_HUNGARIAN_QWERTY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Hungarian with Qwerty keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_ICELANDIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ICELANDIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Icelandic </message> - <message name="IDS_IME_NAME_KEYBOARD_INDONESIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_INDONESIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Indonesian </message> - <message name="IDS_IME_NAME_KEYBOARD_IRISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_IRISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Irish </message> - <message name="IDS_IME_NAME_KEYBOARD_ITALIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ITALIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Italian </message> - <message name="IDS_IME_NAME_KEYBOARD_JAPANESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. Native name in Japanese is '英数入力(日本語ã‚ーボード用)'. This refers to the keyboard with Japanese JIS layout that types Latin alphanumeric and symbol characters." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_JAPANESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. Native name in Japanese is '英数入力(日本語ã‚ーボード用)'. This refers to the keyboard with Japanese JIS layout that types Latin alphanumeric and symbol characters." meaning="Input method name"> Alphanumeric with Japanese keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_KAZAKH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_KAZAKH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Kazakh </message> - <message name="IDS_IME_NAME_KEYBOARD_LATIN_AMERICAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_LATIN_AMERICAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Spanish (Latin America) </message> - <message name="IDS_IME_NAME_KEYBOARD_LATVIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_LATVIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Latvian </message> - <message name="IDS_IME_NAME_KEYBOARD_LITHUANIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_LITHUANIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Lithuanian </message> - <message name="IDS_IME_NAME_KEYBOARD_MACEDONIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MACEDONIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Macedonian </message> - <message name="IDS_IME_NAME_KEYBOARD_MALAY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MALAY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Malay </message> - <message name="IDS_IME_NAME_KEYBOARD_MALTESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MALTESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Maltese </message> - <message name="IDS_IME_NAME_KEYBOARD_MONGOLIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MONGOLIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Mongolian </message> - <message name="IDS_IME_NAME_KEYBOARD_NETHERLANDS_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_NETHERLANDS_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Dutch (Netherlands) with US International PC keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_NETHERLANDS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_NETHERLANDS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Dutch (Netherlands) </message> - <message name="IDS_IME_NAME_KEYBOARD_NORWEGIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_NORWEGIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Norwegian </message> - <message name="IDS_IME_NAME_KEYBOARD_POLISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_POLISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Polish </message> - <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Portuguese (Portugal) </message> - <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE_US_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE_US_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Portuguese with US International keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_PORTUGUESE_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Portuguese with US International PC keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_ROMANIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ROMANIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Romanian </message> - <message name="IDS_IME_NAME_KEYBOARD_ROMANIAN_STANDARD" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ROMANIAN_STANDARD" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Romanian with Standard keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Russian </message> - <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Russian with Phonetic keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC_AATSEEL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC_AATSEEL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Russian with Phonetic AATSEEL keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC_YAZHERT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC_YAZHERT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Russian with Phonetic YaZHert keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_SERBIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SERBIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Serbian </message> - <message name="IDS_IME_NAME_KEYBOARD_SLOVAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SLOVAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Slovak </message> - <message name="IDS_IME_NAME_KEYBOARD_SLOVENIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SLOVENIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Slovenian </message> - <message name="IDS_IME_NAME_KEYBOARD_SPANISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SPANISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Spanish (Spain) </message> - <message name="IDS_IME_NAME_KEYBOARD_SWEDISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SWEDISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Swedish </message> - <message name="IDS_IME_NAME_KEYBOARD_SWISS_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SWISS_FRENCH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> French (Switzerland) </message> - <message name="IDS_IME_NAME_KEYBOARD_SWISS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SWISS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> German (Switzerland) </message> - <message name="IDS_IME_NAME_KEYBOARD_TURKISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TURKISH" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Turkish </message> - <message name="IDS_IME_NAME_KEYBOARD_TURKISH_F" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TURKISH_F" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Turkish with F-keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_UK_DVORAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_UK_DVORAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (UK) with Dvorak keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_UK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_UK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (UK) </message> - <message name="IDS_IME_NAME_KEYBOARD_UKRAINIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_UKRAINIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Ukrainian </message> - <message name="IDS_IME_NAME_KEYBOARD_US_COLEMAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_COLEMAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Colemak keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_DVORAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_DVORAK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Dvorak keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_DVP" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_DVP" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Programmer Dvorak keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_EXTENDED" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_EXTENDED" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Extended keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with International keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_INTERNATIONAL_PC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with International PC keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_WORKMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_WORKMAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Workman keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US_WORKMAN_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US_WORKMAN_INTERNATIONAL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) with Workman International keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_US" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_US" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> English (US) </message> - <message name="IDS_IME_NAME_INPUTMETHOD_ARRAY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Array (\u884c\u5217) input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_ARRAY" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Array (\u884c\u5217) input method for Traditional Chinese." meaning="Input method name"> Chinese Array </message> - <message name="IDS_IME_NAME_INPUTMETHOD_CANGJIE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Cangjie input method for Tradition Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_CANGJIE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Cangjie input method for Tradition Chinese." meaning="Input method name"> Chinese Cangjie </message> - <message name="IDS_IME_NAME_INPUTMETHOD_DAYI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Dayi (\u5927\u6613) input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_DAYI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Dayi (\u5927\u6613) input method for Traditional Chinese." meaning="Input method name"> Chinese Dayi </message> - <message name="IDS_IME_NAME_INPUTMETHOD_MOZC_JP" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Google Japanese input method on Japanese JIS keyboard layout. Native name in Japanese is '日本語入力(日本語ã‚ーボード用)'." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_MOZC_JP" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Google Japanese input method on Japanese JIS keyboard layout. Native name in Japanese is '日本語入力(日本語ã‚ーボード用)'." meaning="Input method name"> Japanese </message> - <message name="IDS_IME_NAME_INPUTMETHOD_MOZC_US" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Google Japanese input method on US ANSI keyboard layout. Native name in Japanese is '日本語入力(USã‚ーボード用)'" meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_MOZC_US" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Google Japanese input method on US ANSI keyboard layout. Native name in Japanese is '日本語入力(USã‚ーボード用)'" meaning="Input method name"> Japanese with US keyboard </message> - <message name="IDS_IME_NAME_INPUTMETHOD_PINYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Pinyin input method for Simplified Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_PINYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Pinyin input method for Simplified Chinese." meaning="Input method name"> Chinese Pinyin </message> - <message name="IDS_IME_NAME_INPUTMETHOD_QUICK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Quick input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_QUICK" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Quick input method for Traditional Chinese." meaning="Input method name"> Chinese Quick </message> - <message name="IDS_IME_NAME_INPUTMETHOD_TRADITIONAL_PINYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Pinyin input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_TRADITIONAL_PINYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Pinyin input method for Traditional Chinese." meaning="Input method name"> Chinese (Traditional) Pinyin </message> - <message name="IDS_IME_NAME_INPUTMETHOD_WUBI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Wubi input method for Simplified Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_WUBI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Wubi input method for Simplified Chinese." meaning="Input method name"> Chinese Wubi </message> - <message name="IDS_IME_NAME_INPUTMETHOD_ZHUYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Zhuyin input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_ZHUYIN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Zhuyin input method for Traditional Chinese." meaning="Input method name"> Chinese Zhuyin </message> - <message name="IDS_IME_NAME_INPUTMETHOD_CANTONESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Cantonese input method for Traditional Chinese." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_CANTONESE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Cantonese input method for Traditional Chinese." meaning="Input method name"> Cantonese </message> - <message name="IDS_IME_NAME_INPUTMETHOD_HANGUL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|. This is Korean Hangul input method." meaning="Input method name"> + <message name="IDS_IME_NAME_INPUTMETHOD_HANGUL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|. This is Korean Hangul input method." meaning="Input method name"> Korean </message> <message name="IDS_IME_NAME_INPUTMETHOD_HANGUL_2_SET" desc="The input method name shows in system tray menu, this is Korean Hangul input method, 2 Set mode."> @@ -1008,10 +1008,10 @@ Hangul Ahnmatae </message> - <message name="IDS_IME_NAME_KEYBOARD_ARABIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_ARABIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Arabic </message> - <message name="IDS_IME_NAME_KEYBOARD_BENGALI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_BENGALI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Bangla Phonetic </message> <message name="IDS_IME_NAME_KEYBOARD_DEVANAGARI_PHONETIC" desc="The input method name shows in system tray menu and settings page."> @@ -1020,143 +1020,143 @@ <message name="IDS_IME_NAME_KEYBOARD_ETHIOPIC" desc="The input method name shows in system tray menu and settings page."> Ethiopic keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_GUJARATI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_GUJARATI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Gujarati Phonetic </message> - <message name="IDS_IME_NAME_KEYBOARD_KANNADA_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_KANNADA_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Kannada Phonetic </message> - <message name="IDS_IME_NAME_KEYBOARD_KHMER" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_KHMER" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Khmer </message> - <message name="IDS_IME_NAME_KEYBOARD_LAO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_LAO" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Lao </message> - <message name="IDS_IME_NAME_KEYBOARD_MALAYALAM_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MALAYALAM_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Malayalam Phonetic </message> - <message name="IDS_IME_NAME_KEYBOARD_MYANMAR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MYANMAR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Burmese/Myanmar </message> - <message name="IDS_IME_NAME_KEYBOARD_MYANMAR_MYANSAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_MYANMAR_MYANSAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Burmese/Myanmar with Myansan keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_NEPALI_INSCRIPT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_NEPALI_INSCRIPT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Nepali with InScript keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_NEPALI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_NEPALI_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Nepali with Phonetic keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_PERSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_PERSIAN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Persian </message> - <message name="IDS_IME_NAME_KEYBOARD_SINHALA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SINHALA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Sinhala </message> - <message name="IDS_IME_NAME_KEYBOARD_SORANIKURDISH_AR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SORANIKURDISH_AR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Sorani Kurdish with Arabic-based keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_SORANIKURDISH_EN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_SORANIKURDISH_EN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Sorani Kurdish with English-based keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_TAMIL_INSCRIPT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TAMIL_INSCRIPT" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil with InScript keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_TAMIL_ITRANS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TAMIL_ITRANS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil ITRANS </message> - <message name="IDS_IME_NAME_KEYBOARD_TAMIL_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TAMIL_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil Phonetic </message> - <message name="IDS_IME_NAME_KEYBOARD_TAMIL_TAMIL99" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TAMIL_TAMIL99" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil with Tamil99 keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_TAMIL_TYPEWRITER" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TAMIL_TYPEWRITER" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil with Typewriter keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_TELUGU_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_TELUGU_PHONETIC" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Telugu Phonetic </message> - <message name="IDS_IME_NAME_KEYBOARD_THAI_KEDMANEE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_THAI_KEDMANEE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Thai with Kedmanee keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_THAI_PATTACHOTE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_THAI_PATTACHOTE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Thai with Pattachote keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_THAI_TIS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_THAI_TIS" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Thai with TIS 820-2531 keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_TCVN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_TCVN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Vietnamese with TCVN keyboard </message> - <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_TELEX" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_TELEX" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Vietnamese Telex </message> - <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_VIQR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_VIQR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Vietnamese VIQR </message> - <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_VNI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_KEYBOARD_VIETNAMESE_VNI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Vietnamese VNI </message> - <message name="IDS_IME_NAME_TRANSLITERATION_AM" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_AM" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Amharic Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_AR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_AR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Arabic Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_BN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_BN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Bangla Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_EL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_EL" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Greek Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_FA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_FA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Persian Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_GU" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_GU" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Gujarati Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_HE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_HE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Hebrew Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_HI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_HI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Hindi </message> - <message name="IDS_IME_NAME_TRANSLITERATION_KN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_KN" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Kannada Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_ML" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_ML" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Malayalam Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_MR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_MR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Marathi </message> - <message name="IDS_IME_NAME_TRANSLITERATION_NE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_NE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Nepali Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_OR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_OR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Odia </message> - <message name="IDS_IME_NAME_TRANSLITERATION_PA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_PA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Punjabi </message> - <message name="IDS_IME_NAME_TRANSLITERATION_SA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_SA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Sanskrit </message> - <message name="IDS_IME_NAME_TRANSLITERATION_SR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_SR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Serbian Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_TA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_TA" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tamil Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_TE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_TE" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Telugu Transliteration </message> - <message name="IDS_IME_NAME_TRANSLITERATION_TI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_TI" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Tigrinya </message> - <message name="IDS_IME_NAME_TRANSLITERATION_UR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|languages| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |languages|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |languages| when using a keyboard layout not designed for |languages|." meaning="Input method name"> + <message name="IDS_IME_NAME_TRANSLITERATION_UR" desc="Input method name, shown in system tray menu, settings page, etc. following this template: “|language| (|variant|) |IME| with |layout| keyboard” which means “an input method that supports typing in the |variant| of |language|, using |IME| and a keyboard with |layout|. When a part in this template is unambiguous, it’s dropped for brevity. Translations should strive for similar consistency in structure among input method names. Note: On Chrome OS, an “input method” is a suite of all input functionalities. |IME| in the template refers to an optional aspect of an “input method” on Chrome OS, i.e. sophisticated transforms into text in |language| when using a keyboard layout not designed for |language|." meaning="Input method name"> Urdu </message> </messages>
diff --git a/ui/file_manager/file_manager/foreground/css/file_manager.css b/ui/file_manager/file_manager/foreground/css/file_manager.css index d14c87c..adab168a 100644 --- a/ui/file_manager/file_manager/foreground/css/file_manager.css +++ b/ui/file_manager/file_manager/foreground/css/file_manager.css
@@ -120,12 +120,6 @@ position: relative; } -.dialog-navigation-list-footer { - display: flex; - flex: none; - flex-direction: column; -} - #directory-tree { bottom: 0; flex: none; @@ -3531,203 +3525,6 @@ min-height: calc(68px + 24px); } -/* Progress center */ - -@keyframes progress-center-toggle { - /* Height values of each frame are set by script. - * Keep the animation sync with JS. */ - from { - } - to { - } -} - -#progress-center { - background-color: transparent; - border-top: 1px solid rgb(214, 214, 214); - position: relative; - transition: background-color 300ms linear, - border 300ms linear; -} - -#progress-center.animated { - animation: progress-center-toggle 300ms ease-out; -} - -#progress-center-open-view { - max-height: 40vh; - opacity: 1; - overflow-y: auto; - padding-top: 10px; - transition: opacity 300ms linear; -} - -#progress-center:not(.opened) #progress-center-open-view { - opacity: 0; - pointer-events: none; - position: absolute; -} - -#progress-center-close-view { - opacity: 1; - padding-top: 20px; - transition: opacity 300ms linear; -} - -#progress-center.opened #progress-center-close-view { - opacity: 0; - pointer-events: none; - position: absolute; -} - -#progress-center.animated #progress-center-open-view, -#progress-center.animated #progress-center-close-view { - left: 0; - pointer-events: none; - position: absolute; - right: 0; - top: 0; - z-index: 1; -} - -#progress-center li { - display: flex; - /* This must not be margin-bottom to calculate parent's height correctly. */ - padding-bottom: 16px; - padding-inline-end: 12px; -} - -#progress-center label { - color: rgb(76, 76, 76); - display: block; - font-weight: 500; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -#progress-center li.error.single label { - white-space: normal; -} - -#progress-center .progress-frame { - flex: 1 0 0; - overflow: hidden; - padding-inline-end: 12px; - padding-inline-start: 16px; -} - -#progress-center .progress-bar { - background: rgb(224, 224, 224); - border-radius: 2px; - display: inline-block; - height: 4px; - margin-bottom: 3px; - opacity: 1; - overflow: hidden; - width: 100%; -} - -#progress-center li.error .progress-bar, -#progress-center-close-view.quiet .progress-bar { - display: none; -} - -#progress-center .progress-track { - background: rgb(26, 194, 34); - height: 100%; -} - -#progress-center .progress-track.animated { - transition: width 300ms linear; -} - -#progress-center .button-frame { - align-self: flex-start; - flex: none; -} - -#progress-center button { - border: none; - cursor: pointer; - display: inline-block; - height: 16px; - min-height: 0; - min-width: 0; - outline: none; - padding: 0; - vertical-align: middle; - width: 16px; -} - -#progress-center button.close { - background: -webkit-image-set( - url(../images/files/ui/expand_more_active.png) 1x, - url(../images/files/ui/2x/expand_more_active.png) 2x) - no-repeat; - display: block; - margin-bottom: 20px; - margin-inline-end: 12px; - margin-inline-start: auto; -} - -#progress-center button.open { - background: -webkit-image-set( - url(../images/files/ui/expand_less.png) 1x, - url(../images/files/ui/2x/expand_less.png) 2x) - no-repeat; - /* If progress bar exists, show open button at slighly higher position. */ - margin-bottom: 14px; -} - -#progress-center button.dismiss, -#progress-center button.cancel { - background: -webkit-image-set( - url(../images/files/ui/cancel.png) 1x, - url(../images/files/ui/2x/cancel.png) 2x) - no-repeat; -} - -#progress-center li.error button.open, -#progress-center li.quiet button.open { - margin-bottom: 0; -} - -#progress-center button.dismiss { - display: none; -} - -/* - * Dismiss button is shown only when - * - Single error in close view. - * - Error items in open view. - */ -li#progress-center-close-view.error.single button.dismiss, -#progress-center-open-view li.error button.dismiss { - display: block; -} - -#progress-center-close-view:not(.single) button.cancel { - display: none; -} - -#progress-center-close-view.single:not(.quiet) button.open { - display: none; -} - -#progress-center-close-view.quiet button.cancel, -#progress-center li:not(.cancelable) button.cancel { - display: none; -} - -.text-measure { - pointer-events: none; - position: absolute; - top: 0; - visibility: hidden; - z-index: -1; -} - files-toggle-ripple { bottom: 0; left: 0;
diff --git a/ui/file_manager/file_manager/foreground/js/progress_center_item_group.js b/ui/file_manager/file_manager/foreground/js/progress_center_item_group.js index 59aebf8..6b474af1 100644 --- a/ui/file_manager/file_manager/foreground/js/progress_center_item_group.js +++ b/ui/file_manager/file_manager/foreground/js/progress_center_item_group.js
@@ -74,44 +74,6 @@ } /** - * Makes the summarized item for the groups. - * - * When a group has only error items, getSummarizedItem of the item returns - * null. Basically the first result of the groups that the progress center - * panel contains is used as a summarized item. But If all the group returns - * null, the progress center panel generates the summarized item by using the - * method. - * - * @param {...ProgressCenterItemGroup} var_args List of groups. - * @return {ProgressCenterItem} Summarized item. - */ - static getSummarizedErrorItem(var_args) { - const groups = Array.prototype.slice.call(arguments); - const errorItems = []; - for (let i = 0; i < groups.length; i++) { - for (const id in groups[i].items_) { - const item = groups[i].items_[id]; - if (item.state === ProgressItemState.ERROR) { - errorItems.push(item); - } - } - } - if (errorItems.length === 0) { - return null; - } - - if (errorItems.length === 1) { - return errorItems[0].clone(); - } - - const item = new ProgressCenterItem(); - item.state = ProgressItemState.ERROR; - item.message = strf('ERROR_PROGRESS_SUMMARY_PLURAL', errorItems.length); - item.single = false; - return item; - } - - /** * @return {ProgressCenterItemGroup.State} State of the group. */ get state() { @@ -119,19 +81,6 @@ } /** - * @return {number} Number of error items that the group contains. - */ - get numErrors() { - let result = 0; - for (const id in this.items_) { - if (this.items_[id].state === ProgressItemState.ERROR) { - result++; - } - } - return result; - } - - /** * Obtains the progressing (or completed but animated) item. * * @param {string} id Item ID. @@ -151,14 +100,6 @@ } /** - * Obtains whether the summarized item should be animated or not. - * @return {boolean} Whether the summarized item should be animated or not. - */ - isSummarizedAnimated() { - return this.summarizedItemAnimated_; - } - - /** * Dismisses an error item. * @param {string} id Item id. */
diff --git a/ui/file_manager/file_manager/foreground/js/progress_center_item_group_unittest.js b/ui/file_manager/file_manager/foreground/js/progress_center_item_group_unittest.js index 361fa9cb..dfcb6d0d 100644 --- a/ui/file_manager/file_manager/foreground/js/progress_center_item_group_unittest.js +++ b/ui/file_manager/file_manager/foreground/js/progress_center_item_group_unittest.js
@@ -2,6 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +/** + * @fileoverview + * + * @suppress {visibility} To allow test code to reach to private attributes. + */ + 'use strict'; // Mock LoadTimeData strings. @@ -28,7 +34,7 @@ // Add an item. group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -37,7 +43,7 @@ item.progressValue = 0.5; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(0.5, group.getItem(item.id).progressValue); assertEquals(0.5, group.getSummarizedItem(0).progressValue); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -47,7 +53,7 @@ item.state = ProgressItemState.COMPLETED; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(100, group.getItem(item.id).progressRateInPercent); assertEquals(100, group.getSummarizedItem(0).progressRateInPercent); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -55,7 +61,7 @@ // The animation of the item is completed. group.completeItemAnimation(item.id); assertFalse(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(null, group.getItem(item.id)); assertTrue(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -77,7 +83,7 @@ // Add an item. group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -86,7 +92,7 @@ item.progressValue = 0.5; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(0.5, group.getItem(item.id).progressValue); assertEquals(0.5, group.getSummarizedItem(0).progressValue); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -94,14 +100,14 @@ // The animation of the item to 50% progress is completed. group.completeItemAnimation(item.id); assertFalse(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertTrue(!!group.getItem(item.id)); assertTrue(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); // The animation of the summarized item to 50% progress is completed. group.completeSummarizedItemAnimation(); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertTrue(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -110,7 +116,7 @@ item.state = ProgressItemState.COMPLETED; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(100, group.getItem(item.id).progressRateInPercent); assertEquals(100, group.getSummarizedItem(0).progressRateInPercent); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -122,7 +128,7 @@ // The animation of the item to 100% progress is completed. group.completeItemAnimation(item.id); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertFalse(!!group.getItem(item.id)); assertFalse(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state); @@ -141,7 +147,7 @@ // Add an item with 100% progress. group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -150,7 +156,7 @@ item.state = ProgressItemState.COMPLETED; group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(null, group.getItem(item.id)); assertEquals(null, group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state); @@ -169,7 +175,7 @@ // Add an item. group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -178,7 +184,7 @@ item.progressValue = 1.0; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -187,7 +193,7 @@ item.state = ProgressItemState.COMPLETED; group.update(item); assertTrue(group.isAnimated(item.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertTrue(!!group.getItem(item.id)); assertTrue(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -215,7 +221,7 @@ // Item 1 is added. group.update(item1); assertFalse(group.isAnimated(item1.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item1.id).message); assertEquals('TestItemMessage1', group.getSummarizedItem(0).message); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -224,7 +230,7 @@ group.update(item2); assertFalse(group.isAnimated(item1.id)); assertFalse(group.isAnimated(item2.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('TestItemMessage1', group.getItem(item1.id).message); assertEquals('TestItemMessage2', group.getItem(item2.id).message); assertEquals('Copying...', group.getSummarizedItem(0).message); @@ -240,7 +246,7 @@ group.update(item1); assertTrue(group.isAnimated(item1.id)); assertFalse(group.isAnimated(item2.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('Copying...', group.getSummarizedItem(0).message); assertEquals(3.0, group.getSummarizedItem(0).progressMax); assertEquals(2.0, group.getSummarizedItem(0).progressValue); @@ -249,7 +255,7 @@ // Item 1's animation is completed. group.completeItemAnimation(item1.id); assertFalse(group.isAnimated(item1.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('TestItemMessage2', group.getSummarizedItem(0).message); assertEquals(3.0, group.getSummarizedItem(0).progressMax); assertEquals(2.0, group.getSummarizedItem(0).progressValue); @@ -260,7 +266,7 @@ item2.state = ProgressItemState.COMPLETED; item2.progressValue = 2.0; group.update(item2); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('TestItemMessage2', group.getSummarizedItem(0).message); assertEquals(ProgressItemState.COMPLETED, group.getSummarizedItem(0).state); assertEquals(3.0, group.getSummarizedItem(0).progressMax); @@ -271,16 +277,17 @@ group.completeItemAnimation(item2.id); assertFalse(group.isAnimated(item2.id)); assertFalse(!!group.getItem(item2.id)); + console.error('item2 state: ' + item2.state); assertEquals(3.0, group.getSummarizedItem(0).progressMax); assertEquals(3.0, group.getSummarizedItem(0).progressValue); assertEquals(ProgressItemState.COMPLETED, group.getSummarizedItem(0).state); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); // Summarized item's animation is completed. group.completeSummarizedItemAnimation(); assertFalse(!!group.getSummarizedItem(0)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state); } @@ -306,7 +313,7 @@ assertTrue(!!group.getItem(item1.id)); assertFalse(group.isAnimated(item1.id)); assertEquals(null, group.getSummarizedItem(0)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); // Add another item without dismissing the error item. @@ -370,7 +377,7 @@ group.update(item2); assertFalse(group.isAnimated(item1.id)); assertFalse(group.isAnimated(item2.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message); assertEquals('Copying... 2 Errors.', group.getSummarizedItem(1).message); assertEquals(1.0, group.getSummarizedItem(0).progressMax); @@ -383,7 +390,7 @@ group.update(item1); assertTrue(group.isAnimated(item1.id)); assertFalse(group.isAnimated(item2.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message); assertEquals(1.0, group.getSummarizedItem(0).progressMax); assertEquals(1.0, group.getSummarizedItem(0).progressValue); @@ -395,21 +402,11 @@ group.completeSummarizedItemAnimation(); assertFalse(group.isAnimated(item1.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertFalse(!!group.getSummarizedItem(0)); - assertEquals( - 'Error message.', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); - assertEquals( - '2 Errors.', - ProgressCenterItemGroup.getSummarizedErrorItem(group, group).message); assertFalse(!!group.getItem(item1.id)); assertTrue(!!group.getItem(item2.id)); - assertEquals( - 'Error message.', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); - assertFalse(group.isSummarizedAnimated()); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); // Dismiss error item. @@ -447,14 +444,14 @@ item2.progressValue = 1.5; group.update(item2); assertTrue(group.isAnimated(item2.id)); - assertTrue(group.isSummarizedAnimated()); + assertTrue(group.summarizedItemAnimated_); // Item 2 enters the error state. item2.state = ProgressItemState.ERROR; item2.message = 'Error message.'; group.update(item2); assertFalse(group.isAnimated(item2.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals('Copying... 1 Error.', group.getSummarizedItem(0).message); assertEquals('Copying... 2 Errors.', group.getSummarizedItem(1).message); assertEquals(1.0, group.getSummarizedItem(0).progressMax); @@ -480,10 +477,7 @@ // Add an error item. group.update(item1); assertFalse(group.isAnimated(item1.id)); - assertFalse(group.isSummarizedAnimated()); - assertEquals( - 'Error message 1', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); + assertFalse(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); // Add another error item. @@ -491,10 +485,7 @@ assertTrue(!!group.getItem(item1.id)); assertTrue(!!group.getItem(item2.id)); assertFalse(group.isAnimated(item2.id)); - assertFalse(group.isSummarizedAnimated()); - assertEquals( - '2 Errors.', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); + assertFalse(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); // Dismiss Error message 1. @@ -502,9 +493,6 @@ assertFalse(!!group.getItem(item1.id)); assertTrue(!!group.getItem(item2.id)); - assertEquals( - 'Error message 2', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); } @@ -530,7 +518,7 @@ item.state = ProgressItemState.CANCELED; group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(null, group.getItem(item.id)); assertEquals(null, group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state); @@ -568,13 +556,10 @@ group.update(item1); assertFalse(group.isAnimated(item1.id)); assertFalse(group.isAnimated(item2.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(null, group.getItem(item1.id)); assertTrue(!!group.getItem(item2.id)); assertEquals(null, group.getSummarizedItem(0)); - assertEquals( - 'Error message 2', - ProgressCenterItemGroup.getSummarizedErrorItem(group).message); assertEquals(ProgressCenterItemGroup.State.INACTIVE, group.state); } @@ -591,7 +576,7 @@ // Add an item. group.update(item); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); // Start an animation of the item. @@ -600,7 +585,7 @@ assertTrue(group.isAnimated(item.id)); // Summarized item should not animated because the panel does not show // progress bar for quiet and summarized item. - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(0.5, group.getItem(item.id).progressValue); assertEquals(0.5, group.getSummarizedItem(0).progressValue); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -610,7 +595,7 @@ item.state = ProgressItemState.COMPLETED; group.update(item); assertTrue(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(100, group.getItem(item.id).progressRateInPercent); assertEquals(100, group.getSummarizedItem(0).progressRateInPercent); assertEquals(ProgressCenterItemGroup.State.ACTIVE, group.state); @@ -618,7 +603,7 @@ // The animation of the item is completed. group.completeItemAnimation(item.id); assertFalse(group.isAnimated(item.id)); - assertFalse(group.isSummarizedAnimated()); + assertFalse(group.summarizedItemAnimated_); assertEquals(null, group.getItem(item.id)); assertFalse(!!group.getSummarizedItem(0)); assertEquals(ProgressCenterItemGroup.State.EMPTY, group.state);
diff --git a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js index abe9994..a5a9cfcb 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js +++ b/ui/file_manager/file_manager/foreground/js/ui/file_manager_ui.js
@@ -254,8 +254,7 @@ * @type {!ProgressCenterPanel} * @const */ - this.progressCenterPanel = new ProgressCenterPanel( - queryRequiredElement('#progress-center', this.element)); + this.progressCenterPanel = new ProgressCenterPanel(); /** * Activity feedback panel. @@ -539,18 +538,6 @@ util.queryDecoratedElement('#directory-tree-context-menu', cr.ui.Menu); this.directoryTree.disabledContextMenu = util.queryDecoratedElement('#disabled-context-menu', cr.ui.Menu); - - // Visible height of the directory tree depends on the size of progress - // center panel. When the size of progress center panel changes, directory - // tree has to be notified to adjust its components (e.g. progress bar). - const relayoutLimiter = new AsyncUtil.RateLimiter( - directoryTree.relayout.bind(directoryTree), 200); - const observer = - new MutationObserver(relayoutLimiter.run.bind(relayoutLimiter)); - observer.observe( - this.progressCenterPanel.element, - /** @type {MutationObserverInit} */ - ({subtree: true, attributes: true, childList: true})); } /**
diff --git a/ui/file_manager/file_manager/foreground/js/ui/progress_center_panel.js b/ui/file_manager/file_manager/foreground/js/ui/progress_center_panel.js index 9842f9f..e384813 100644 --- a/ui/file_manager/file_manager/foreground/js/ui/progress_center_panel.js +++ b/ui/file_manager/file_manager/foreground/js/ui/progress_center_panel.js
@@ -3,213 +3,11 @@ // found in the LICENSE file. /** - * Item element of the progress center. - * @extends HTMLDivElement - */ -class ProgressCenterItemElement { - /** - * @param {Document} document Document which the new item belongs to. - */ - constructor(document) { - /** @private {?ProgressItemState} */ - this.state_ = null; - - /** @private {?function()} */ - this.cancelTransition_ = null; - - /** @private {?Element} */ - this.track_ = null; - - const label = document.createElement('label'); - label.className = 'label'; - - const progressBarIndicator = document.createElement('div'); - progressBarIndicator.className = 'progress-track'; - - const progressBar = document.createElement('div'); - progressBar.className = 'progress-bar'; - progressBar.appendChild(progressBarIndicator); - - const progressFrame = document.createElement('div'); - progressFrame.className = 'progress-frame'; - progressFrame.appendChild(label); - progressFrame.appendChild(progressBar); - - const cancelButton = document.createElement('button'); - cancelButton.className = 'cancel'; - cancelButton.setAttribute('tabindex', '-1'); - - // Dismiss button is shown for error item. - const dismissButton = document.createElement('button'); - dismissButton.classList.add('dismiss'); - dismissButton.setAttribute('tabindex', '-1'); - - const buttonFrame = document.createElement('div'); - buttonFrame.className = 'button-frame'; - buttonFrame.appendChild(cancelButton); - buttonFrame.appendChild(dismissButton); - - const itemElement = document.createElement('li'); - itemElement.appendChild(progressFrame); - itemElement.appendChild(buttonFrame); - - return ProgressCenterItemElement.decorate(itemElement); - } - - /** - * Ensures the animation triggers. - * - * @param {function(?)} callback Function to set the transition end - * properties. - * @return {function()} Function to cancel the request. - * @private - */ - static safelySetAnimation_(callback) { - let requestId = window.requestAnimationFrame(() => { - // The transition start properties currently set are rendered at this - // frame. And the transition end properties set by the callback is - // rendered at the next frame. - requestId = window.requestAnimationFrame(callback); - }); - return () => { - window.cancelAnimationFrame(requestId); - }; - } - - /** - * Decorates the given element as a progress item. - * @param {!Element} element Item to be decorated. - * @return {!ProgressCenterItemElement} Decorated item. - */ - static decorate(element) { - element.__proto__ = ProgressCenterItemElement.prototype; - element = /** @type {!ProgressCenterItemElement} */ (element); - element.state_ = ProgressItemState.PROGRESSING; - element.track_ = element.querySelector('.progress-track'); - element.track_.addEventListener( - 'transitionend', element.onTransitionEnd_.bind(element)); - element.cancelTransition_ = null; - return element; - } - - get quiet() { - return this.classList.contains('quiet'); - } - - /** - * Updates the element view according to the item. - * @param {ProgressCenterItem} item Item to be referred for the update. - * @param {boolean} animated Whether the progress width is applied as animated - * or not. - */ - update(item, animated) { - // Set element attributes. - this.state_ = item.state; - this.setAttribute('data-progress-id', item.id); - this.classList.toggle('error', item.state === ProgressItemState.ERROR); - this.classList.toggle('cancelable', item.cancelable); - this.classList.toggle('single', item.single); - this.classList.toggle('quiet', item.quiet); - - // Set label. - if (this.state_ === ProgressItemState.PROGRESSING || - this.state_ === ProgressItemState.ERROR) { - this.querySelector('label').textContent = item.message; - } else if (this.state_ === ProgressItemState.CANCELED) { - this.querySelector('label').textContent = ''; - } - - // Cancel the previous property set. - if (this.cancelTransition_) { - this.cancelTransition_(); - this.cancelTransition_ = null; - } - - // Set track width. - const setWidth = ((nextWidthFrame) => { - const currentWidthRate = - parseInt(this.track_.style.width, 10); - // Prevent assigning the same width to avoid stopping the - // animation. animated == false may be intended to cancel - // the animation, so in that case, the assignment should - // be done. - if (currentWidthRate === nextWidthFrame && animated) { - return; - } - this.track_.hidden = false; - this.track_.style.width = nextWidthFrame + '%'; - this.track_.classList.toggle('animated', animated); - }).bind(null, item.progressRateInPercent); - - if (animated) { - this.cancelTransition_ = - ProgressCenterItemElement.safelySetAnimation_(setWidth); - } else { - // For animated === false, we should call setWidth immediately to cancel - // the animation, otherwise the animation may complete before canceling - // it. - setWidth(); - } - } - - /** - * Resets the item. - */ - reset() { - this.track_.hidden = true; - this.track_.width = ''; - this.state_ = ProgressItemState.PROGRESSING; - } - - /** - * Handles transition end events. - * @param {Event} event Transition end event. - * @private - */ - onTransitionEnd_(event) { - if (event.propertyName !== 'width') { - return; - } - this.track_.classList.remove('animated'); - this.dispatchEvent(new Event( - ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT, - {bubbles: true})); - } -} - -ProgressCenterItemElement.prototype.__proto__ = HTMLDivElement.prototype; - -/** - * Event triggered when the item should be dismissed. - * @const {string} - */ -ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT = 'progressAnimationEnd'; - -/** * Progress center panel. * @implements {ProgressCenterPanelInterface} */ class ProgressCenterPanel { - /** - * @param {!Element} element DOM Element of the process center panel. - */ - constructor(element) { - /** - * Root element of the progress center. - * @type {!Element} - * @private - */ - this.element_ = element; - - /** - * Open view containing multiple progress items. - * @type {!HTMLDivElement} - * @private - */ - this.openView_ = assertInstanceof( - queryRequiredElement('#progress-center-open-view', this.element_), - HTMLDivElement); - + constructor() { /** * Reference to the feedback panel host. * TODO(crbug.com/947388) Add closure annotation here. @@ -217,22 +15,6 @@ this.feedbackHost_ = document.querySelector('#progress-panel'); /** - * Close view that is a summarized progress item. - * @type {ProgressCenterItemElement} - * @private - */ - this.closeView_ = ProgressCenterItemElement.decorate( - assert(this.element_.querySelector('#progress-center-close-view'))); - - /** - * Toggle animation rule of the progress center. - * @type {CSSKeyframesRule} - * @private - */ - this.toggleAnimation_ = - ProgressCenterPanel.getToggleAnimation_(element.ownerDocument); - - /** * Item group for normal priority items. * @type {ProgressCenterItemGroup} * @private @@ -247,21 +29,6 @@ this.quietItemGroup_ = new ProgressCenterItemGroup('quiet', true); /** - * Queries to obtains items for each group. - * @type {Object<string>} - * @private - */ - this.itemQuery_ = - Object.preventExtensions({normal: 'li:not(.quiet)', quiet: 'li.quiet'}); - - /** - * Timeout IDs of the inactive state of each group. - * @type {Object<?number>} - * @private - */ - this.timeoutId_ = Object.preventExtensions({normal: null, quiet: null}); - - /** * Callback to be called with the ID of the progress item when the cancel * button is clicked. * @type {?function(string)} @@ -283,59 +50,6 @@ if (window.IN_TEST) { this.PENDING_TIME_MS_ = 0; } - - // Register event handlers. - element.addEventListener('click', this.onClick_.bind(this)); - element.addEventListener( - 'animationend', this.onToggleAnimationEnd_.bind(this)); - element.addEventListener( - ProgressCenterItemElement.PROGRESS_ANIMATION_END_EVENT, - this.onItemAnimationEnd_.bind(this)); - } - - /** - * Obtains the toggle animation keyframes rule from the document. - * @param {Document} document Document containing the rule. - * @return {CSSKeyframesRule} Animation rule. - * @private - */ - static getToggleAnimation_(document) { - for (let i = 0; i < document.styleSheets.length; i++) { - const styleSheet = document.styleSheets[i]; - let rules = null; - // External stylesheets may not be accessible due to CORS restrictions. - // This try/catch is the only way avoid an exception when iterating over - // stylesheets that include chrome://resources. - // See https://crbug.com/775525/ for details. - try { - rules = styleSheet.cssRules; - } catch (err) { - if (err.name == 'SecurityError') { - continue; - } - throw err; - } - - for (let j = 0; j < rules.length; j++) { - // HACK: closure does not define experimental CSSRules. - const keyFramesRule = CSSRule.KEYFRAMES_RULE || 7; - const rule = rules[j]; - if (rule.type === keyFramesRule && - rule.name === 'progress-center-toggle') { - return rule; - } - } - } - - throw new Error('The progress-center-toggle rules is not found.'); - } - - /** - * Root element of the progress center. - * @type {HTMLElement} - */ - get element() { - return this.element_; } /** @@ -432,7 +146,6 @@ return ''; } - /** * Generate primary text string for display on the feedback panel. * It is used for TransferDetails mode. @@ -665,30 +378,6 @@ } /** - * Handles the item animation end. - * @param {Event} event Item animation end event. - * @private - * @suppress {checkTypes} - * TODO(crbug.com/947388) Remove the suppress, and fix closure compile. - */ - onItemAnimationEnd_(event) { - const targetGroup = event.target.classList.contains('quiet') ? - this.quietItemGroup_ : - this.normalItemGroup_; - if (event.target === this.closeView_) { - targetGroup.completeSummarizedItemAnimation(); - } else { - const itemId = event.target.getAttribute('data-progress-id'); - targetGroup.completeItemAnimation(itemId); - const panelItem = this.feedbackHost_.findPanelItemById(itemId); - if (panelItem) { - this.feedbackHost_.removePanelItem(panelItem); - } - } - this.updateCloseView_(); - } - - /** * Requests all item groups to dismiss an error item. * @param {string} id Item id. */ @@ -696,70 +385,6 @@ this.normalItemGroup_.dismissErrorItem(id); this.quietItemGroup_.dismissErrorItem(id); - const element = this.getItemElement_(id); - if (element) { - this.openView_.removeChild(element); - } - this.updateCloseView_(); - } - - /** - * Updates the close view. - * @private - */ - updateCloseView_() { - // Try to use the normal summarized item. - const normalSummarizedItem = - this.normalItemGroup_.getSummarizedItem(this.quietItemGroup_.numErrors); - if (normalSummarizedItem) { - // If the quiet animation is overridden by normal summarized item, discard - // the quiet animation. - if (this.quietItemGroup_.isSummarizedAnimated()) { - this.quietItemGroup_.completeSummarizedItemAnimation(); - } - - // Update the view state. - this.closeView_.update( - normalSummarizedItem, this.normalItemGroup_.isSummarizedAnimated()); - this.element_.hidden = false; - return; - } - - // Try to use the quiet summarized item. - const quietSummarizedItem = - this.quietItemGroup_.getSummarizedItem(this.normalItemGroup_.numErrors); - if (quietSummarizedItem) { - this.closeView_.update( - quietSummarizedItem, this.quietItemGroup_.isSummarizedAnimated()); - this.element_.hidden = false; - return; - } - - // Try to use the error summarized item. - const errorSummarizedItem = ProgressCenterItemGroup.getSummarizedErrorItem( - this.normalItemGroup_, this.quietItemGroup_); - if (errorSummarizedItem) { - this.closeView_.update(errorSummarizedItem, false); - this.element_.hidden = false; - return; - } - - // Hide the progress center because there is no items to show. - this.closeView_.reset(); - this.element_.hidden = true; - this.element_.classList.remove('opened'); - } - - /** - * Gets an item element having the specified ID. - * @param {string} id progress item ID. - * @return {ProgressCenterItemElement} Item element having the ID. - * @private - */ - getItemElement_(id) { - const query = 'li[data-progress-id="' + id + '"]'; - return /** @type {ProgressCenterItemElement} */ ( - this.openView_.querySelector(query)); } /** @@ -771,69 +396,4 @@ getGroupForItem_(item) { return item.quiet ? this.quietItemGroup_ : this.normalItemGroup_; } - - /** - * Handles the animation end event of the progress center. - * @param {Event} event Animation end event. - * @private - */ - onToggleAnimationEnd_(event) { - // Transition end of the root element's height. - if (event.target === this.element_ && - event.animationName === 'progress-center-toggle') { - this.element_.classList.remove('animated'); - return; - } - } - - /** - * Handles the click event. - * @param {Event} event Click event. - * @private - */ - onClick_(event) { - // Toggle button. - if (event.target.classList.contains('open') || - event.target.classList.contains('close')) { - // If the progress center has already animated, just return. - if (this.element_.classList.contains('animated')) { - return; - } - - // Obtains current and target height. - let currentHeight; - let targetHeight; - if (this.element_.classList.contains('opened')) { - currentHeight = this.openView_.getBoundingClientRect().height; - targetHeight = this.closeView_.getBoundingClientRect().height; - } else { - currentHeight = this.closeView_.getBoundingClientRect().height; - targetHeight = this.openView_.getBoundingClientRect().height; - } - - // Set styles for animation. - this.toggleAnimation_.cssRules[0].style.height = currentHeight + 'px'; - this.toggleAnimation_.cssRules[1].style.height = targetHeight + 'px'; - this.element_.classList.add('animated'); - this.element_.classList.toggle('opened'); - return; - } - - if (event.target.classList.contains('dismiss')) { - // To dismiss the error item in all windows, we send this to progress - // center in background page. - const itemElement = event.target.parentNode.parentNode; - const id = itemElement.getAttribute('data-progress-id'); - this.dismissErrorItemCallback(id); - } - - // Cancel button. - if (event.target.classList.contains('cancel')) { - const itemElement = event.target.parentNode.parentNode; - if (this.cancelCallback) { - const id = itemElement.getAttribute('data-progress-id'); - this.cancelCallback(id); - } - } - } }
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html index 782e86ed..525f133a 100644 --- a/ui/file_manager/file_manager/main.html +++ b/ui/file_manager/file_manager/main.html
@@ -506,26 +506,6 @@ <div class="dialog-navigation-list-contents" role="navigation"> <tree id="directory-tree" role="tree" tabindex="0" files-ng></tree> </div> - <div class="dialog-navigation-list-footer" hidden> - <div id="progress-center" hidden> - <li id="progress-center-close-view"> - <div class="progress-frame"> - <label></label> - <div class="progress-bar"> - <div class="progress-track" hidden></div> - </div> - </div> - <div class="button-frame"> - <button class="cancel" tabindex="-1"></button> - <button class="dismiss" tabindex="-1"></button> - <button class="open" tabindex="-1"></button> - </div> - </li> - <div id="progress-center-open-view"> - <button class="close" tabindex="-1"></button> - </div> - </div> - </div> </div> <div class="splitter" id="navigation-list-splitter"> <cr-button aria-hidden="true" class="splitter-button" tabindex="-1">
diff --git a/ui/file_manager/file_manager/test/BUILD.gn b/ui/file_manager/file_manager/test/BUILD.gn index 3b9f7e2..f48e22d 100644 --- a/ui/file_manager/file_manager/test/BUILD.gn +++ b/ui/file_manager/file_manager/test/BUILD.gn
@@ -25,7 +25,6 @@ "crostini_tasks.js", "js/strings.js", "menu.js", - "progress_center.js", ] deps = [ "//ui/resources:webui_resources_grd" ] args = [ "--output=" + rebase_path(output, root_build_dir) ] @@ -41,7 +40,6 @@ ":crostini_tasks", ":menu", ":plugin_vm", - ":progress_center", ] } @@ -56,7 +54,6 @@ "$externs_path/metrics_private.js", "//ui/file_manager/externs/background/background_base.js", "//ui/file_manager/externs/background/progress_center.js", - "//ui/file_manager/externs/progress_center_panel.js", "//ui/file_manager/externs/background/crostini.js", "//ui/file_manager/externs/entry_location.js", "//ui/file_manager/externs/volume_info.js", @@ -106,11 +103,3 @@ "//ui/webui/resources/js:webui_resource_test", ] } - -js_library("progress_center") { - deps = [ - "js:test_util", - "//ui/file_manager/file_manager/common/js:progress_center_common", - "//ui/webui/resources/js:webui_resource_test", - ] -}
diff --git a/ui/file_manager/file_manager/test/progress_center.js b/ui/file_manager/file_manager/test/progress_center.js deleted file mode 100644 index dcb6ec4b..0000000 --- a/ui/file_manager/file_manager/test/progress_center.js +++ /dev/null
@@ -1,53 +0,0 @@ -// Copyright 2018 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. - -const progressCenter = {}; - -/** - * @param {string} id - * @param {string} message - * @return {!ProgressCenterItem} - */ -progressCenter.createItem = function(id, message) { - const item = new ProgressCenterItem(); - item.id = id; - item.message = message; - return item; -}; - -progressCenter.testScrollWhenManyMessages = async (done) => { - const visibleClosed = '#progress-center:not([hidden]):not(.opened)'; - const visibleOpen = '#progress-center:not([hidden]).opened'; - const openIcon = '#progress-center-close-view .open'; - const navListFooter = '.dialog-navigation-list-footer'; - - const items = []; - const center = fileManager.fileBrowserBackground_.progressCenter; - // Load a single file. - await test.setupAndWaitUntilReady(); - - // Add lots of messages. - for (let i = 0; i < 100; i++) { - const item = progressCenter.createItem('id' + i, 'msg ' + i); - items.push(item); - center.updateItem(item); - } - // Wait for notification expand icon. - await test.waitForElement(visibleClosed); - - // Click open icon, ensure progress center is open. - assertTrue(test.fakeMouseClick(openIcon)); - await test.waitForElement(visibleOpen); - - // Ensure progress center is scrollable. - const footer = document.querySelector(navListFooter); - assertTrue(footer.scrollHeight > footer.clientHeight); - - // Clear items. - items.forEach((item) => { - item.state = ProgressItemState.COMPLETED; - center.updateItem(item); - }); - done(); -};
diff --git a/ui/file_manager/integration_tests/file_manager/transfer.js b/ui/file_manager/integration_tests/file_manager/transfer.js index a6b16b4..2540f652 100644 --- a/ui/file_manager/integration_tests/file_manager/transfer.js +++ b/ui/file_manager/integration_tests/file_manager/transfer.js
@@ -487,9 +487,11 @@ destination: TRANSFER_LOCATIONS.downloads, isMove: true, })); - chrome.test.assertEq( - '', - (await remoteCall.waitForElement(appId, '.progress-frame label')).text); + + // Check: No feedback panel items. + const panelItems = await remoteCall.callRemoteTestUtil( + 'deepQueryAllElements', appId, [['#progress-panel', '#panel']]); + chrome.test.assertEq(0, panelItems.length); }; /**
diff --git a/ui/gfx/mac/scoped_cocoa_disable_screen_updates.mm b/ui/gfx/mac/scoped_cocoa_disable_screen_updates.mm index 981a6eff..b31792b 100644 --- a/ui/gfx/mac/scoped_cocoa_disable_screen_updates.mm +++ b/ui/gfx/mac/scoped_cocoa_disable_screen_updates.mm
@@ -6,27 +6,14 @@ #import <Cocoa/Cocoa.h> -#include "base/mac/mac_util.h" - namespace gfx { ScopedCocoaDisableScreenUpdates::ScopedCocoaDisableScreenUpdates() { - if (base::mac::IsAtLeastOS10_11()) { - // Beginning with OS X 10.11, [NSAnimationContext beginGrouping] is the - // preferred way of disabling screen updates. Use of - // NSDisableScreenUpdates() is discouraged. - [NSAnimationContext beginGrouping]; - } else { - NSDisableScreenUpdates(); - } + [NSAnimationContext beginGrouping]; } ScopedCocoaDisableScreenUpdates::~ScopedCocoaDisableScreenUpdates() { - if (base::mac::IsAtLeastOS10_11()) { - [NSAnimationContext endGrouping]; - } else { - NSEnableScreenUpdates(); - } + [NSAnimationContext endGrouping]; } } // namespace gfx
diff --git a/ui/gfx/x/BUILD.gn b/ui/gfx/x/BUILD.gn index e64338d..f71409b 100644 --- a/ui/gfx/x/BUILD.gn +++ b/ui/gfx/x/BUILD.gn
@@ -38,6 +38,15 @@ ] } +generate_library_loader("xlib_xcb_loader") { + name = "XlibXcbLoader" + output_h = "xlib_xcb_loader.h" + output_cc = "xlib_xcb_loader.cc" + header = "\"ui/gfx/x/xlib_xcb.h\"" + + functions = [ "XGetXCBConnection" ] +} + action("gen_xprotos") { visibility = [ ":xprotos" ] script = "gen_xproto.py" @@ -100,6 +109,7 @@ deps = [ ":gen_xprotos", ":xlib_loader", + ":xlib_xcb_loader", "//base", "//base:i18n", "//ui/events/platform",
diff --git a/ui/gfx/x/xlib_support.cc b/ui/gfx/x/xlib_support.cc index 37817ee..90bb7f0 100644 --- a/ui/gfx/x/xlib_support.cc +++ b/ui/gfx/x/xlib_support.cc
@@ -9,6 +9,7 @@ #include "base/logging.h" #include "base/no_destructor.h" #include "library_loaders/xlib_loader.h" +#include "library_loaders/xlib_xcb_loader.h" namespace x11 { @@ -24,6 +25,11 @@ return xlib_loader.get(); } +XlibXcbLoader* GetXlibXcbLoader() { + static base::NoDestructor<XlibXcbLoader> xlib_xcb_loader; + return xlib_xcb_loader.get(); +} + } // namespace DISABLE_CFI_ICALL @@ -34,6 +40,9 @@ CHECK(xlib_loader->Load("libX11.so.6")); + auto* xlib_xcb_loader = GetXlibXcbLoader(); + CHECK(xlib_xcb_loader->Load("libX11-xcb.so.1")); + CHECK(xlib_loader->XInitThreads()); // The default Xlib error handler calls exit(1), which we don't want. This @@ -103,4 +112,9 @@ return *this; } +DISABLE_CFI_ICALL +struct xcb_connection_t* XlibDisplayWrapper::GetXcbConnection() { + return GetXlibXcbLoader()->XGetXCBConnection(display_); +} + } // namespace x11
diff --git a/ui/gfx/x/xlib_support.h b/ui/gfx/x/xlib_support.h index 312430e..26accef 100644 --- a/ui/gfx/x/xlib_support.h +++ b/ui/gfx/x/xlib_support.h
@@ -11,6 +11,7 @@ #include "base/component_export.h" struct _XDisplay; +struct xcb_connection_t; namespace x11 { @@ -60,6 +61,8 @@ } operator struct _XDisplay *() { return display_; } + struct xcb_connection_t* GetXcbConnection(); + XlibDisplayWrapper(XlibDisplayWrapper&& other); XlibDisplayWrapper& operator=(XlibDisplayWrapper&& other);
diff --git a/ui/gfx/x/xlib_xcb.h b/ui/gfx/x/xlib_xcb.h new file mode 100644 index 0000000..73d5649 --- /dev/null +++ b/ui/gfx/x/xlib_xcb.h
@@ -0,0 +1,12 @@ +// Copyright 2020 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 UI_GFX_X_XLIB_XCB_H_ +#define UI_GFX_X_XLIB_XCB_H_ + +extern "C" { +struct xcb_connection_t* XGetXCBConnection(struct _XDisplay*); +} + +#endif // UI_GFX_X_XLIB_XCB_H_
diff --git a/ui/webui/resources/cr_elements/cr_toast/cr_toast.js b/ui/webui/resources/cr_elements/cr_toast/cr_toast.js index 97b4d55..8470e0e9b 100644 --- a/ui/webui/resources/cr_elements/cr_toast/cr_toast.js +++ b/ui/webui/resources/cr_elements/cr_toast/cr_toast.js
@@ -38,7 +38,7 @@ if (this.open && this.duration !== 0) { this.hideTimeoutId_ = window.setTimeout(() => { - this._setOpen(false); + this.hide(); }, this.duration); } }, @@ -59,6 +59,10 @@ // the same as a previous toast. this.removeAttribute('role'); + // Reset the aria-hidden attribute as screen readers need to access the + // contents of an opened toast. + this.removeAttribute('aria-hidden'); + this._setOpen(true); this.setAttribute('role', 'alert'); @@ -67,8 +71,12 @@ } }, - /** Hides the toast. */ + /** + * Hides the toast and ensures that screen readers cannot its contents while + * hidden. + */ hide() { + this.setAttribute('aria-hidden', 'true'); this._setOpen(false); }, });
diff --git a/url/mojom/BUILD.gn b/url/mojom/BUILD.gn index 364d81b..a05533a 100644 --- a/url/mojom/BUILD.gn +++ b/url/mojom/BUILD.gn
@@ -84,6 +84,8 @@ traits_public_deps = [ "//url" ] }, ] + + webui_module_path = "chrome://resources/mojo/url/mojom" } mojom("test_url_mojom_gurl") {
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java index 81dc1e7..c483b2e0 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
@@ -777,7 +777,7 @@ @Test @SmallTest - @MinWebLayerVersion(89) + @MinWebLayerVersion(88) public void testCantUsePerNavigationAndDesktopMode() throws Exception { TestWebServer testServer = TestWebServer.start(); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(null); @@ -791,7 +791,7 @@ @Test @SmallTest - @MinWebLayerVersion(89) + @MinWebLayerVersion(88) public void testDesktopMode() throws Exception { TestWebServer testServer = TestWebServer.start(); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl("about:blank"); @@ -804,7 +804,7 @@ @Test @SmallTest - @MinWebLayerVersion(89) + @MinWebLayerVersion(88) public void testDesktopModeSticks() throws Exception { TestWebServer testServer = TestWebServer.start(); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl("about:blank"); @@ -819,7 +819,7 @@ @Test @SmallTest - @MinWebLayerVersion(89) + @MinWebLayerVersion(88) public void testDesktopModeGetter() throws Exception { TestWebServer testServer = TestWebServer.start(); InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(null);
diff --git a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ResourceUtil.java b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ResourceUtil.java index a74c25b..159f76d 100644 --- a/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ResourceUtil.java +++ b/weblayer/browser/android/javatests/src/org/chromium/weblayer/test/ResourceUtil.java
@@ -10,7 +10,7 @@ * Util class for dealing with resources. */ public class ResourceUtil { - public static final int REQUIRED_PACKAGE_IDENTIFIER = 12; + public static final int REQUIRED_PACKAGE_IDENTIFIER = 36; private ResourceUtil() {}
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java index 3c500e2..7500f3e4 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/UrlBarControllerImpl.java
@@ -278,8 +278,6 @@ return SecurityStatusIcon.getSecurityIconResource( UrlBarControllerImplJni.get().getConnectionSecurityLevel( mNativeUrlBarController), - UrlBarControllerImplJni.get().shouldShowDangerTriangleForWarningLevel( - mNativeUrlBarController), mBrowserImpl.isWindowOnSmallDevice(), /* skipIconForNeutralState= */ true); } @@ -292,6 +290,5 @@ String getUrlForDisplay(long nativeUrlBarControllerImpl); String getPublisherUrl(long nativeUrlBarControllerImpl); int getConnectionSecurityLevel(long nativeUrlBarControllerImpl); - boolean shouldShowDangerTriangleForWarningLevel(long nativeUrlBarControllerImpl); } }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java index 7e012363..5ee73de 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java +++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
@@ -118,7 +118,7 @@ // The required package ID for WebLayer when loaded as a shared library, hardcoded in the // resources. If this value changes make sure to change _SHARED_LIBRARY_HARDCODED_ID in // //build/android/gyp/util/protoresources.py. - private static final int REQUIRED_PACKAGE_IDENTIFIER = 12; + private static final int REQUIRED_PACKAGE_IDENTIFIER = 36; private final ProfileManager mProfileManager = new ProfileManager(); @@ -669,6 +669,10 @@ /** Forces adding entries to the package identifiers array until we hit the required ID. */ private static void forceAddAssetPaths(Context remoteContext, int packageId) { + if (packageId > REQUIRED_PACKAGE_IDENTIFIER) { + throw new AndroidRuntimeException( + "WebLayer package ID too large, aborting: " + packageId); + } try { Method addAssetPath = AssetManager.class.getMethod("addAssetPath", String.class); String path = remoteContext.getApplicationInfo().sourceDir;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl index 1bee5ef..faead03 100644 --- a/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl +++ b/weblayer/browser/java/org/chromium/weblayer_private/interfaces/ITab.aidl
@@ -79,8 +79,6 @@ // Added in 88 void setFloatingActionModeOverride(in int actionModeItemTypes) = 27; boolean willAutomaticallyReloadAfterCrash() = 28; - - // Added in 89 void setDesktopUserAgentEnabled(in boolean enable) = 29; boolean isDesktopUserAgentEnabled() = 30; }
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.cc b/weblayer/browser/url_bar/url_bar_controller_impl.cc index a6ad125..81ae2d8 100644 --- a/weblayer/browser/url_bar/url_bar_controller_impl.cc +++ b/weblayer/browser/url_bar/url_bar_controller_impl.cc
@@ -81,11 +81,6 @@ jint UrlBarControllerImpl::GetConnectionSecurityLevel(JNIEnv* env) { return GetConnectionSecurityLevel(); } - -jboolean UrlBarControllerImpl::ShouldShowDangerTriangleForWarningLevel( - JNIEnv* env) { - return ShouldShowDangerTriangleForWarningLevel(); -} #endif base::string16 UrlBarControllerImpl::GetUrlForDisplay() { @@ -104,10 +99,6 @@ *state, /* used_policy_installed_certificate= */ false); } -bool UrlBarControllerImpl::ShouldShowDangerTriangleForWarningLevel() { - return security_state::ShouldShowDangerTriangleForWarningLevel(); -} - bool UrlBarControllerImpl::GetURL(GURL* url) const { auto* active_web_contents = GetActiveWebContents(); if (!active_web_contents)
diff --git a/weblayer/browser/url_bar/url_bar_controller_impl.h b/weblayer/browser/url_bar/url_bar_controller_impl.h index c973d0d..a9ca78225 100644 --- a/weblayer/browser/url_bar/url_bar_controller_impl.h +++ b/weblayer/browser/url_bar/url_bar_controller_impl.h
@@ -35,13 +35,11 @@ base::android::ScopedJavaLocalRef<jstring> GetUrlForDisplay(JNIEnv* env); base::android::ScopedJavaLocalRef<jstring> GetPublisherUrl(JNIEnv* env); jint GetConnectionSecurityLevel(JNIEnv* env); - jboolean ShouldShowDangerTriangleForWarningLevel(JNIEnv* env); #endif // UrlBarController: base::string16 GetUrlForDisplay() override; security_state::SecurityLevel GetConnectionSecurityLevel() override; - bool ShouldShowDangerTriangleForWarningLevel() override; // LocationBarModelDelegate: bool GetURL(GURL* url) const override;
diff --git a/weblayer/public/java/org/chromium/weblayer/Tab.java b/weblayer/public/java/org/chromium/weblayer/Tab.java index ca30011..75c865f 100644 --- a/weblayer/public/java/org/chromium/weblayer/Tab.java +++ b/weblayer/public/java/org/chromium/weblayer/Tab.java
@@ -796,10 +796,10 @@ * back/forward navigations. The tab will be reloaded with the new user agent. * @param enable if true requests desktop site, otherwise mobile site. * - * @since 89 + * @since 88 */ public void setDesktopUserAgentEnabled(boolean enable) { - if (WebLayer.getSupportedMajorVersionInternal() < 89) { + if (WebLayer.getSupportedMajorVersionInternal() < 88) { throw new UnsupportedOperationException(); } try { @@ -812,10 +812,10 @@ /** * Returns true if the currently loaded page used a desktop user agent. * - * @since 89 + * @since 88 */ public boolean isDesktopUserAgentEnabled() { - if (WebLayer.getSupportedMajorVersionInternal() < 89) { + if (WebLayer.getSupportedMajorVersionInternal() < 88) { throw new UnsupportedOperationException(); } try {
diff --git a/weblayer/public/url_bar_controller.h b/weblayer/public/url_bar_controller.h index 68564d1..eb3cdda 100644 --- a/weblayer/public/url_bar_controller.h +++ b/weblayer/public/url_bar_controller.h
@@ -19,7 +19,6 @@ virtual ~UrlBarController() {} virtual base::string16 GetUrlForDisplay() = 0; virtual security_state::SecurityLevel GetConnectionSecurityLevel() = 0; - virtual bool ShouldShowDangerTriangleForWarningLevel() = 0; }; } // namespace weblayer