diff --git a/DEPS b/DEPS index 5102f66d..a002c01f 100644 --- a/DEPS +++ b/DEPS
@@ -195,11 +195,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': 'e7b08e4876fb1877fde4deb4d676031d1c54299a', + 'skia_revision': '4c97814f3adc8af74f73451b598a6a8d2d7c4eb1', # 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': '1e0d126cf79ed826bbf944072b5e9bbb0c572bbd', + 'v8_revision': '10ee7644b4de4f2e9cf8ccd921717c79db2a7025', # 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. @@ -207,7 +207,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': 'e4e2a847dab3512f10f28f212d8f6911336ed069', + 'angle_revision': 'c547fda2a9c6020f1577ec2a70c17cda3754c6ad', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -215,7 +215,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'fa9a15cb008b433d1c696fd779c025e301020a35', + 'pdfium_revision': 'fe8e758b920cfac78a21f518b3797fdb368ef958', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -258,7 +258,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': 'd84b21c3f04c3164609854d566514084bcca1da4', + 'catapult_revision': '6dacd170b8de6d4a17d8b836d5f2f22c50e06154', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -266,7 +266,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '011b0075cd53a71e094bf9dcfc85e553c5ff9c73', + 'devtools_frontend_revision': 'a4a8199cf1a3516b63bec2b89b838a63fadda390', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -318,7 +318,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': '076a4e58205dfa2bcf5e33cc8718aa4799d46735', + 'dawn_revision': '7ce4924a35eac58c0c44bd1b561b76d094ff6dee', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -831,7 +831,7 @@ }, 'src/third_party/breakpad/breakpad': - Var('chromium_git') + '/breakpad/breakpad.git' + '@' + 'a6218eb66d7b4880825168a83e66bfea746908a6', + Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '3d8daa2c7458c8e411e691ac6f0d503418ef6231', 'src/third_party/byte_buddy': { 'packages': [ @@ -895,7 +895,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '486f1812ef65fde35ad0c63e3939e89dc1c876a3', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'fb9c1110ef1460f5dbb3cb57cce3fc6f977abcff', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -946,7 +946,7 @@ Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'e46493b9148e0d1e63f55b5890bff503822616e5', 'src/third_party/glslang/src': - Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '2de6d657dde37a421ff8afb1bd820d522df5821d', + Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '695e1de8318d62ef5c0121f35d5e933f417fe4df', 'src/third_party/google_toolbox_for_mac/src': { 'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'), @@ -1231,7 +1231,7 @@ Var('chromium_git') + '/external/github.com/cisco/openh264' + '@' + '3dd5b80bc4f172dd82925bb259cb7c82348409c5', 'src/third_party/openscreen/src': - Var('chromium_git') + '/openscreen' + '@' + 'd6a5a2271e6ed06e41aa24f550dd7be5e98dc183', + Var('chromium_git') + '/openscreen' + '@' + '8f1c253940472b1a961a8c3ca548f612c441b5a7', 'src/third_party/openxr/src': { 'url': Var('chromium_git') + '/external/github.com/KhronosGroup/OpenXR-SDK' + '@' + '9e97b73e7dd2bfc07745489d728f6a36665c648f', @@ -1326,7 +1326,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'TfK3Whl6AfZifLOotcOS_jvckKztERlPvmVyZo16fN0C' + 'version': 'b2wLqzQvnFak6xeFsKed-lveaFyOpEEJgoGd4waUh70C' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1503,7 +1503,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'git_revision:98b51cb50bea650bac90ab1001ea509dcb6eac2f', + 'version': 'git_revision:e0376578f2f33586b6ac283a0787582c4678ecb1', }, ], 'dep_type': 'cipd', @@ -1513,7 +1513,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'git_revision:98b51cb50bea650bac90ab1001ea509dcb6eac2f', + 'version': 'git_revision:e0376578f2f33586b6ac283a0787582c4678ecb1', }, ], 'dep_type': 'cipd', @@ -1523,7 +1523,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'git_revision:98b51cb50bea650bac90ab1001ea509dcb6eac2f', + 'version': 'git_revision:e0376578f2f33586b6ac283a0787582c4678ecb1', }, ], 'dep_type': 'cipd', @@ -1537,7 +1537,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@08a9885983f136f2ae6aa4bcfd3da0634bcf489c', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@3b1b0980710f7ca7f189e38c334b37106ee493ea', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java index e0e26b5..6ac4faa 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java
@@ -48,7 +48,8 @@ import org.chromium.base.test.util.Feature; /** - * UI tests for the developer UI's Activities, Fragments, etc. + * UI tests for general developer UI functionality. Significant subcomponents (ex. Fragments) may + * have their own test class. */ @RunWith(AwJUnit4ClassRunner.class) public class DeveloperUiTest {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/devui/FlagsFragmentTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/devui/FlagsFragmentTest.java new file mode 100644 index 0000000..62ef7c2 --- /dev/null +++ b/android_webview/javatests/src/org/chromium/android_webview/test/devui/FlagsFragmentTest.java
@@ -0,0 +1,200 @@ +// 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.devui; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.replaceText; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; + +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.lessThan; + +import android.content.Intent; +import android.support.test.rule.ActivityTestRule; +import android.view.View; +import android.widget.EditText; +import android.widget.ListView; + +import androidx.test.filters.MediumTest; + +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.chromium.android_webview.common.AwSwitches; +import org.chromium.android_webview.devui.FlagsFragment; +import org.chromium.android_webview.devui.MainActivity; +import org.chromium.android_webview.devui.R; +import org.chromium.android_webview.test.AwJUnit4ClassRunner; +import org.chromium.base.test.util.CallbackHelper; +import org.chromium.base.test.util.Feature; + +/** + * UI tests for {@link FlagsFragment}. + */ +@RunWith(AwJUnit4ClassRunner.class) +public class FlagsFragmentTest { + @Rule + public ActivityTestRule mRule = + new ActivityTestRule<MainActivity>(MainActivity.class, false, false); + + @Before + public void setUp() throws Exception { + Intent intent = new Intent(); + intent.putExtra(MainActivity.FRAGMENT_ID_INTENT_EXTRA, MainActivity.FRAGMENT_ID_FLAGS); + mRule.launchActivity(intent); + } + + private CallbackHelper getFlagUiSearchBarListener() { + final CallbackHelper helper = new CallbackHelper(); + FlagsFragment.setFilterListener(() -> { helper.notifyCalled(); }); + return helper; + } + + private static Matcher<View> withHintText(final Matcher<String> stringMatcher) { + return new TypeSafeMatcher<View>() { + @Override + public boolean matchesSafely(View view) { + if (!(view instanceof EditText)) { + return false; + } + String hint = ((EditText) view).getHint().toString(); + return stringMatcher.matches(hint); + } + + @Override + public void describeTo(Description description) { + description.appendText("with hint text: "); + stringMatcher.describeTo(description); + } + }; + } + + private static Matcher<View> withHintText(final String expectedHint) { + return withHintText(is(expectedHint)); + } + + private static Matcher<View> withCount(final Matcher<Integer> intMatcher) { + return new TypeSafeMatcher<View>() { + @Override + public boolean matchesSafely(View view) { + if (!(view instanceof ListView)) { + return false; + } + int count = ((ListView) view).getCount(); + return intMatcher.matches(count); + } + + @Override + public void describeTo(Description description) { + description.appendText("with child-count: "); + intMatcher.describeTo(description); + } + }; + } + + private static Matcher<View> withCount(final int totalNumFlags) { + return withCount(is(totalNumFlags)); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testSearchEmptyByDefault() throws Throwable { + onView(withId(R.id.flag_search_bar)).check(matches(withText(""))); + onView(withId(R.id.flag_search_bar)).check(matches(withHintText("Search flags"))); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testSearchByName() throws Throwable { + CallbackHelper helper = getFlagUiSearchBarListener(); + + int searchBarChangeCount = helper.getCallCount(); + onView(withId(R.id.flag_search_bar)).perform(replaceText("logging")); + helper.waitForCallback(searchBarChangeCount, 1); + onView(allOf(withId(R.id.flag_name), withText(AwSwitches.WEBVIEW_VERBOSE_LOGGING))) + .check(matches(isDisplayed())); + onView(withId(R.id.flags_list)).check(matches(withCount(1))); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testSearchByDescription() throws Throwable { + CallbackHelper helper = getFlagUiSearchBarListener(); + + int searchBarChangeCount = helper.getCallCount(); + onView(withId(R.id.flag_search_bar)).perform(replaceText("highlight the contents")); + helper.waitForCallback(searchBarChangeCount, 1); + onView(allOf(withId(R.id.flag_name), withText(AwSwitches.HIGHLIGHT_ALL_WEBVIEWS))) + .check(matches(isDisplayed())); + onView(withId(R.id.flags_list)).check(matches(withCount(1))); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testCaseInsensitive() throws Throwable { + CallbackHelper helper = getFlagUiSearchBarListener(); + + int searchBarChangeCount = helper.getCallCount(); + onView(withId(R.id.flag_search_bar)).perform(replaceText("LOGGING")); + helper.waitForCallback(searchBarChangeCount, 1); + onView(allOf(withId(R.id.flag_name), withText(AwSwitches.WEBVIEW_VERBOSE_LOGGING))) + .check(matches(isDisplayed())); + onView(withId(R.id.flags_list)).check(matches(withCount(1))); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testMultipleResults() throws Throwable { + CallbackHelper helper = getFlagUiSearchBarListener(); + + ListView flagsList = mRule.getActivity().findViewById(R.id.flags_list); + int totalNumFlags = flagsList.getCount(); + + // This assumes: + // * There will always be > 1 flag which mentions WebView explicitly (ex. + // HIGHLIGHT_ALL_WEBVIEWS and WEBVIEW_VERBOSE_LOGGING) + // * There will always be >= 1 flag which does not mention WebView in its description (ex. + // --show-composited-layer-borders). + int searchBarChangeCount = helper.getCallCount(); + onView(withId(R.id.flag_search_bar)).perform(replaceText("webview")); + helper.waitForCallback(searchBarChangeCount, 1); + onView(withId(R.id.flags_list)) + .check(matches(withCount(allOf(greaterThan(1), lessThan(totalNumFlags))))); + } + + @Test + @MediumTest + @Feature({"AndroidWebView"}) + public void testClearingSearchShowsAllFlags() throws Throwable { + CallbackHelper helper = getFlagUiSearchBarListener(); + + ListView flagsList = mRule.getActivity().findViewById(R.id.flags_list); + int totalNumFlags = flagsList.getCount(); + + int searchBarChangeCount = helper.getCallCount(); + onView(withId(R.id.flag_search_bar)).perform(replaceText("logging")); + helper.waitForCallback(searchBarChangeCount, 1); + onView(withId(R.id.flags_list)).check(matches(withCount(1))); + + onView(withId(R.id.flag_search_bar)).perform(replaceText("")); + helper.waitForCallback(searchBarChangeCount, 2); + onView(withId(R.id.flags_list)).check(matches(withCount(totalNumFlags))); + } +}
diff --git a/android_webview/nonembedded/BUILD.gn b/android_webview/nonembedded/BUILD.gn index fbb00eb..af096464 100644 --- a/android_webview/nonembedded/BUILD.gn +++ b/android_webview/nonembedded/BUILD.gn
@@ -136,6 +136,7 @@ "java/res_devui/drawable/ic_action_home.xml", "java/res_devui/drawable/ic_alert_error.xml", "java/res_devui/drawable/ic_flag.xml", + "java/res_devui/drawable/ic_search.xml", "java/res_devui/layout/activity_main.xml", "java/res_devui/layout/crashes_list_item_body.xml", "java/res_devui/layout/crashes_list_item_header.xml",
diff --git a/android_webview/nonembedded/java/res_devui/drawable/ic_search.xml b/android_webview/nonembedded/java/res_devui/drawable/ic_search.xml new file mode 100644 index 0000000..df45002 --- /dev/null +++ b/android_webview/nonembedded/java/res_devui/drawable/ic_search.xml
@@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + <path + android:pathData="M0 0h24v24H0z" /> + <path + android:fillColor="#000000" + android:pathData="M15.5 14h-0.79l-0.28-0.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-0.59 4.23-1.57l0.27 0.28 v0.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" /> +</vector> \ No newline at end of file
diff --git a/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml b/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml index f8cee00..eb9a2d4 100644 --- a/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml +++ b/android_webview/nonembedded/java/res_devui/layout/fragment_flags.xml
@@ -14,15 +14,38 @@ android:paddingStart="8dp" android:paddingEnd="8dp"> - <!--suppress HardcodedText --> - <Button - android:text="Reset all to default" - android:id="@+id/reset_flags_button" + <RelativeLayout + android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:layout_marginBottom="8dp" - android:textAppearance="?android:attr/textAppearanceMedium"/> + android:layout_marginBottom="8dp"> + + <!--suppress HardcodedText --> + <EditText + android:id="@+id/flag_search_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_toStartOf="@id/reset_flags_button" + android:hint="Search flags" + android:inputType="textFilter" + android:singleLine="true" + android:drawablePadding="4dp" + android:drawableStart="@drawable/ic_search" + android:textAppearance="?android:attr/textAppearanceMedium"/> + + <!--suppress HardcodedText --> + <Button + android:text="Reset flags" + android:id="@+id/reset_flags_button" + android:layout_marginStart="8dp" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:textAppearance="?android:attr/textAppearanceMedium"/> + + </RelativeLayout> <!-- horizontal divider --> <View
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java index cb7b40f..5e250d08 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/FlagsFragment.java
@@ -13,6 +13,8 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; +import android.text.Editable; +import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -20,12 +22,16 @@ import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.EditText; +import android.widget.Filter; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.IntDef; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; import org.chromium.android_webview.common.DeveloperModeUtils; import org.chromium.android_webview.common.Flag; @@ -34,7 +40,11 @@ import org.chromium.android_webview.common.services.ServiceNames; import org.chromium.base.Log; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; +import java.util.Locale; import java.util.Map; /** @@ -58,6 +68,8 @@ private Context mContext; + private static volatile @Nullable Runnable sFilterListener; + @Override public void onAttach(Context context) { super.onAttach(context); @@ -94,6 +106,33 @@ Button resetFlagsButton = view.findViewById(R.id.reset_flags_button); resetFlagsButton.setOnClickListener((View flagButton) -> { resetAllFlags(); }); + + EditText searchBar = view.findViewById(R.id.flag_search_bar); + searchBar.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence cs, int start, int before, int count) { + mListAdapter.getFilter().filter(cs); + } + + @Override + public void beforeTextChanged(CharSequence cs, int start, int count, int after) {} + + @Override + public void afterTextChanged(Editable e) {} + }); + } + + /** + * Notifies the caller when ListView filtering is complete, in response to modifying the text in + * {@code R.id.flag_search_bar}. + */ + @VisibleForTesting + public static void setFilterListener(@Nullable Runnable listener) { + sFilterListener = listener; + } + + private void onFilterDone() { + if (sFilterListener != null) sFilterListener.run(); } /** @@ -175,12 +214,65 @@ int COUNT = 2; } + private static boolean flagMatchesQuery(Flag flag, String lowerCaseQuery) { + assert lowerCaseQuery.equals(lowerCaseQuery.toLowerCase(Locale.getDefault())) + : "lowerCaseQuery should already be converted to lower case"; + + // If empty query, match every everything (including the warning text) + if (lowerCaseQuery.isEmpty()) { + return true; + } + + // If the user is searching for something and flag represents the warning text, don't + // match the warning text + if (flag == null) { + return false; + } + + // Match if the flag name contains the query as a substring (case-insensitive) + String lowerCaseName = flag.getName().toLowerCase(Locale.getDefault()); + if (lowerCaseName.contains(lowerCaseQuery)) return true; + + // Or if the flag description contains the query as a substring (case-insensitive) + String lowerCaseDescription = flag.getDescription().toLowerCase(Locale.getDefault()); + if (lowerCaseDescription.contains(lowerCaseQuery)) return true; + + return false; + } + /** * Adapter to create rows of toggleable Flags. */ private class FlagsListAdapter extends ArrayAdapter<Flag> { + private List<Flag> mItems; + private final Filter mFilter; + public FlagsListAdapter(Flag[] flagsAndWarningText) { - super(mContext, 0, flagsAndWarningText); + super(mContext, 0); + mItems = Arrays.asList(flagsAndWarningText); + mFilter = new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + List<Flag> matches = new ArrayList<>(); + + String lowerCaseQuery = constraint.toString().toLowerCase(Locale.getDefault()); + for (Flag flag : flagsAndWarningText) { + if (flagMatchesQuery(flag, lowerCaseQuery)) matches.add(flag); + } + + FilterResults filterResults = new FilterResults(); + filterResults.values = matches; + filterResults.count = matches.size(); + return filterResults; + } + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + mItems = (List<Flag>) results.values; + notifyDataSetChanged(); + onFilterDone(); + } + }; } private View getToggleableFlag(@NonNull Flag flag, View view, ViewGroup parent) { @@ -230,6 +322,16 @@ } @Override + public int getCount() { + return mItems.size(); + } + + @Override + public Flag getItem(int position) { + return mItems.get(position); + } + + @Override @LayoutType public int getItemViewType(int position) { if (getItem(position) == null) return LayoutType.WARNING_MESSAGE; @@ -250,6 +352,11 @@ return getToggleableFlag(flag, view, parent); } } + + @Override + public Filter getFilter() { + return mFilter; + } } /**
diff --git a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java index 6a711f7..d23ce79a 100644 --- a/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java +++ b/android_webview/nonembedded/java/src/org/chromium/android_webview/devui/MainActivity.java
@@ -41,10 +41,10 @@ final Map<Integer, Integer> mFragmentIdMap = new HashMap<>(); // Keep in sync with DeveloperUiService.java - private static final String FRAGMENT_ID_INTENT_EXTRA = "fragment-id"; - private static final int FRAGMENT_ID_HOME = 0; - private static final int FRAGMENT_ID_CRASHES = 1; - private static final int FRAGMENT_ID_FLAGS = 2; + public static final String FRAGMENT_ID_INTENT_EXTRA = "fragment-id"; + public static final int FRAGMENT_ID_HOME = 0; + public static final int FRAGMENT_ID_CRASHES = 1; + public static final int FRAGMENT_ID_FLAGS = 2; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused.
diff --git a/android_webview/test/BUILD.gn b/android_webview/test/BUILD.gn index c9c31442..c5b2b18 100644 --- a/android_webview/test/BUILD.gn +++ b/android_webview/test/BUILD.gn
@@ -318,6 +318,7 @@ "../javatests/src/org/chromium/android_webview/test/common/variations/VariationsUtilsTest.java", "../javatests/src/org/chromium/android_webview/test/devui/AwNonembeddedUmaRecorderTest.java", "../javatests/src/org/chromium/android_webview/test/devui/DeveloperUiTest.java", + "../javatests/src/org/chromium/android_webview/test/devui/FlagsFragmentTest.java", "../javatests/src/org/chromium/android_webview/test/devui/util/CrashBugUrlFactoryTest.java", "../javatests/src/org/chromium/android_webview/test/devui/util/UnuploadedFilesStateLoaderTest.java", "../javatests/src/org/chromium/android_webview/test/devui/util/UploadedCrashesInfoLoaderTest.java",
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index bd44b65..cf9ded3 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1010,6 +1010,8 @@ "system/palette/tools/capture_screen_action.h", "system/palette/tools/create_note_action.cc", "system/palette/tools/create_note_action.h", + "system/palette/tools/enter_capture_mode.cc", + "system/palette/tools/enter_capture_mode.h", "system/palette/tools/laser_pointer_mode.cc", "system/palette/tools/laser_pointer_mode.h", "system/palette/tools/magnifier_mode.cc",
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h index 2a8363a..f4c8501 100644 --- a/ash/ambient/ambient_controller.h +++ b/ash/ambient/ambient_controller.h
@@ -44,7 +44,7 @@ public chromeos::PowerManagerClient::Observer { public: static constexpr base::TimeDelta kAutoShowWaitTimeInterval = - base::TimeDelta::FromSeconds(15); + base::TimeDelta::FromSeconds(7); static void RegisterProfilePrefs(PrefRegistrySimple* registry);
diff --git a/ash/app_list/model/app_list_model.h b/ash/app_list/model/app_list_model.h index 12aa8d4..4108532 100644 --- a/ash/app_list/model/app_list_model.h +++ b/ash/app_list/model/app_list_model.h
@@ -26,8 +26,8 @@ class AppListItemList; class AppListModelObserver; -// Master model of app list that holds AppListItemList, which owns a list -// of AppListItems and is displayed in the grid view. +// Main model for the app list. Holds AppListItemList, which owns a list of +// AppListItems and is displayed in the grid view. // NOTE: Currently this class observes |top_level_item_list_|. The View code may // move entries in the item list directly (but can not add or remove them) and // the model needs to notify its observers when this occurs.
diff --git a/ash/ash_strings.grd b/ash/ash_strings.grd index 36d7feb..52f7133 100644 --- a/ash/ash_strings.grd +++ b/ash/ash_strings.grd
@@ -902,6 +902,9 @@ <message name="IDS_ASH_STYLUS_TOOLS_CREATE_NOTE_ACTION" desc="Title of the capture screen action in the stylus tools (a pop-up panel next to the status tray). Clicking this opens up an application that the user can quickly jot a note down in."> Create note </message> + <message name="IDS_ASH_STYLUS_TOOLS_ENTER_CAPTURE_MODE_ACTION" desc="Title of the enter capture mode action in the stylus tools (a pop-up panel next to the status tray). This enters capture mode, which allows users to take screenshots and record video. Capture mode has an UI for users to modify what gets screenshotted or recorded."> + Screen capture + </message> <message name="IDS_ASH_STYLUS_TOOLS_LASER_POINTER_MODE" desc="Title of the laser pointer in the palette (a pop-up panel next to the status tray). Clicking this turns the mouse into a laser pointer. Additionally, the palette tray is closed."> Laser pointer </message>
diff --git a/ash/ash_strings_grd/IDS_ASH_STYLUS_TOOLS_ENTER_CAPTURE_MODE_ACTION.png.sha1 b/ash/ash_strings_grd/IDS_ASH_STYLUS_TOOLS_ENTER_CAPTURE_MODE_ACTION.png.sha1 new file mode 100644 index 0000000..fa09e96 --- /dev/null +++ b/ash/ash_strings_grd/IDS_ASH_STYLUS_TOOLS_ENTER_CAPTURE_MODE_ACTION.png.sha1
@@ -0,0 +1 @@ +63f784aae96294063012d6d7aa39e8071c1345ef \ No newline at end of file
diff --git a/ash/dbus/README.md b/ash/dbus/README.md index 28567f97..bfc0821 100644 --- a/ash/dbus/README.md +++ b/ash/dbus/README.md
@@ -13,4 +13,4 @@ See [Chrome OS D-Bus Usage in Chrome] for information about adding D-Bus services. -[Chrome OS D-Bus Usage in Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/master/dbus_in_chrome.md +[Chrome OS D-Bus Usage in Chrome]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/dbus_in_chrome.md
diff --git a/ash/login/ui/bottom_status_indicator.cc b/ash/login/ui/bottom_status_indicator.cc index a61039f3..2eb9c046 100644 --- a/ash/login/ui/bottom_status_indicator.cc +++ b/ash/login/ui/bottom_status_indicator.cc
@@ -13,8 +13,7 @@ namespace ash { BottomStatusIndicator::BottomStatusIndicator(TappedCallback on_tapped_callback) - : LabelButton(this, base::string16()), - on_tapped_callback_(std::move(on_tapped_callback)) { + : LabelButton(this), on_tapped_callback_(std::move(on_tapped_callback)) { label()->SetAutoColorReadabilityEnabled(false); label()->SetFontList( views::Label::GetDefaultFontList().DeriveWithSizeDelta(1));
diff --git a/ash/magnifier/magnifier_test_utils.cc b/ash/magnifier/magnifier_test_utils.cc index 1dd92de..79751279 100644 --- a/ash/magnifier/magnifier_test_utils.cc +++ b/ash/magnifier/magnifier_test_utils.cc
@@ -39,12 +39,10 @@ class TestFocusView : public views::WidgetDelegateView { public: TestFocusView() - : button_1_(new views::LabelButton(nullptr, {})), - button_2_(new views::LabelButton(nullptr, {})) { + : button_1_(AddChildView(std::make_unique<views::LabelButton>())), + button_2_(AddChildView(std::make_unique<views::LabelButton>())) { button_1_->SetFocusForPlatform(); button_2_->SetFocusForPlatform(); - AddChildView(button_1_); - AddChildView(button_2_); } ~TestFocusView() override = default;
diff --git a/ash/quick_answers/quick_answers_ui_controller.cc b/ash/quick_answers/quick_answers_ui_controller.cc index 5b8964f..32708b3 100644 --- a/ash/quick_answers/quick_answers_ui_controller.cc +++ b/ash/quick_answers/quick_answers_ui_controller.cc
@@ -36,7 +36,14 @@ const gfx::Rect& bounds, const std::string& title, const std::string& query) { - DCHECK(!quick_answers_view_); + // Currently there are timing issues that causes the quick answers view is not + // dismissed. TODO(updowndota): Remove the special handling after the root + // cause is found. + if (quick_answers_view_) { + LOG(ERROR) << "Quick answers view not dismissed."; + CloseQuickAnswersView(); + } + DCHECK(!user_consent_view_); SetActiveQuery(query); quick_answers_view_ = new QuickAnswersView(bounds, title, this);
diff --git a/ash/system/palette/palette_ids.cc b/ash/system/palette/palette_ids.cc index a8ed999..5856d432 100644 --- a/ash/system/palette/palette_ids.cc +++ b/ash/system/palette/palette_ids.cc
@@ -7,40 +7,6 @@ namespace ash { -std::string PaletteToolIdToString(PaletteToolId tool_id) { - switch (tool_id) { - case PaletteToolId::NONE: - return "NONE"; - case PaletteToolId::CREATE_NOTE: - return "CREATE_NOTE"; - case PaletteToolId::CAPTURE_REGION: - return "CAPTURE_REGION"; - case PaletteToolId::CAPTURE_SCREEN: - return "CAPTURE_SCREEN"; - case PaletteToolId::LASER_POINTER: - return "LASER_POINTER"; - case PaletteToolId::MAGNIFY: - return "MAGNIFY"; - case PaletteToolId::METALAYER: - return "METALAYER"; - } - - NOTREACHED(); - return std::string(); -} - -std::string PaletteGroupToString(PaletteGroup group) { - switch (group) { - case PaletteGroup::ACTION: - return "ACTION"; - case PaletteGroup::MODE: - return "MODE"; - } - - NOTREACHED(); - return std::string(); -} - PaletteTrayOptions PaletteToolIdToPaletteTrayOptions(PaletteToolId tool_id) { switch (tool_id) { case PaletteToolId::NONE: @@ -57,6 +23,8 @@ return PALETTE_MAGNIFY; case PaletteToolId::METALAYER: return PALETTE_METALAYER; + case PaletteToolId::ENTER_CAPTURE_MODE: + return PALETTE_ENTER_CAPTURE_MODE; } NOTREACHED();
diff --git a/ash/system/palette/palette_ids.h b/ash/system/palette/palette_ids.h index 7b61b8bc..3fe9cd0a 100644 --- a/ash/system/palette/palette_ids.h +++ b/ash/system/palette/palette_ids.h
@@ -5,10 +5,6 @@ #ifndef ASH_SYSTEM_PALETTE_PALETTE_IDS_H_ #define ASH_SYSTEM_PALETTE_PALETTE_IDS_H_ -#include <string> - -#include "ash/ash_export.h" - namespace ash { // Palette tools are grouped into different categories. Each tool corresponds to @@ -26,6 +22,7 @@ LASER_POINTER, MAGNIFY, METALAYER, + ENTER_CAPTURE_MODE, }; // Usage of each pen palette option. This enum is used to back an UMA histogram @@ -40,6 +37,7 @@ PALETTE_MAGNIFY, PALETTE_LASER_POINTER, PALETTE_METALAYER, + PALETTE_ENTER_CAPTURE_MODE, PALETTE_OPTIONS_COUNT }; @@ -59,17 +57,13 @@ SHORTCUT, }; -// Helper functions that convert PaletteToolIds and PaletteGroups to strings. -ASH_EXPORT std::string PaletteToolIdToString(PaletteToolId tool_id); -ASH_EXPORT std::string PaletteGroupToString(PaletteGroup group); - // Helper functions that convert PaletteToolIds to PaletteTrayOptions. -ASH_EXPORT PaletteTrayOptions -PaletteToolIdToPaletteTrayOptions(PaletteToolId tool_id); +PaletteTrayOptions PaletteToolIdToPaletteTrayOptions(PaletteToolId tool_id); // Helper functions that convert PaletteToolIds to PaletteModeCancelType. -ASH_EXPORT PaletteModeCancelType -PaletteToolIdToPaletteModeCancelType(PaletteToolId tool_id, bool is_switched); +PaletteModeCancelType PaletteToolIdToPaletteModeCancelType( + PaletteToolId tool_id, + bool is_switched); } // namespace ash
diff --git a/ash/system/palette/palette_tool.cc b/ash/system/palette/palette_tool.cc index ff99f08..438dcc0 100644 --- a/ash/system/palette/palette_tool.cc +++ b/ash/system/palette/palette_tool.cc
@@ -7,11 +7,13 @@ #include <memory> #include "ash/assistant/util/assistant_util.h" +#include "ash/public/cpp/ash_features.h" #include "ash/system/palette/palette_tool_manager.h" #include "ash/system/palette/palette_utils.h" #include "ash/system/palette/tools/capture_region_mode.h" #include "ash/system/palette/tools/capture_screen_action.h" #include "ash/system/palette/tools/create_note_action.h" +#include "ash/system/palette/tools/enter_capture_mode.h" #include "ash/system/palette/tools/laser_pointer_mode.h" #include "ash/system/palette/tools/magnifier_mode.h" #include "ash/system/palette/tools/metalayer_mode.h" @@ -21,8 +23,12 @@ // static void PaletteTool::RegisterToolInstances(PaletteToolManager* tool_manager) { - tool_manager->AddTool(std::make_unique<CaptureRegionMode>(tool_manager)); - tool_manager->AddTool(std::make_unique<CaptureScreenAction>(tool_manager)); + if (features::IsCaptureModeEnabled()) { + tool_manager->AddTool(std::make_unique<EnterCaptureMode>(tool_manager)); + } else { + tool_manager->AddTool(std::make_unique<CaptureRegionMode>(tool_manager)); + tool_manager->AddTool(std::make_unique<CaptureScreenAction>(tool_manager)); + } tool_manager->AddTool(std::make_unique<CreateNoteAction>(tool_manager)); if (assistant::util::IsGoogleDevice()) tool_manager->AddTool(std::make_unique<MetalayerMode>(tool_manager));
diff --git a/ash/system/palette/palette_tray.cc b/ash/system/palette/palette_tray.cc index abe356b..31613a0 100644 --- a/ash/system/palette/palette_tray.cc +++ b/ash/system/palette/palette_tray.cc
@@ -590,8 +590,6 @@ palette_tool_manager_->GetActiveTool(PaletteGroup::MODE); if (active_tool_id != PaletteToolId::NONE) { palette_tool_manager_->DeactivateTool(active_tool_id); - // TODO(sammiequon): Investigate whether we should removed |is_switched| - // from PaletteToolIdToPaletteModeCancelType. RecordPaletteModeCancellation(PaletteToolIdToPaletteModeCancelType( active_tool_id, false /*is_switched*/)); return true;
diff --git a/ash/system/palette/tools/enter_capture_mode.cc b/ash/system/palette/tools/enter_capture_mode.cc new file mode 100644 index 0000000..63cbe61 --- /dev/null +++ b/ash/system/palette/tools/enter_capture_mode.cc
@@ -0,0 +1,44 @@ +// 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 "ash/system/palette/tools/enter_capture_mode.h" + +#include "ash/capture_mode/capture_mode_controller.h" +#include "ash/resources/vector_icons/vector_icons.h" +#include "ash/strings/grit/ash_strings.h" +#include "ash/system/palette/palette_ids.h" +#include "ui/base/l10n/l10n_util.h" + +namespace ash { + +EnterCaptureMode::EnterCaptureMode(Delegate* delegate) + : CommonPaletteTool(delegate) {} + +EnterCaptureMode::~EnterCaptureMode() = default; + +PaletteGroup EnterCaptureMode::GetGroup() const { + return PaletteGroup::ACTION; +} + +PaletteToolId EnterCaptureMode::GetToolId() const { + return PaletteToolId::ENTER_CAPTURE_MODE; +} + +void EnterCaptureMode::OnEnable() { + CommonPaletteTool::OnEnable(); + delegate()->DisableTool(GetToolId()); + delegate()->HidePaletteImmediately(); + CaptureModeController::Get()->Start(); +} + +views::View* EnterCaptureMode::CreateView() { + return CreateDefaultView(l10n_util::GetStringUTF16( + IDS_ASH_STYLUS_TOOLS_ENTER_CAPTURE_MODE_ACTION)); +} + +const gfx::VectorIcon& EnterCaptureMode::GetPaletteIcon() const { + return kCaptureModeIcon; +} + +} // namespace ash
diff --git a/ash/system/palette/tools/enter_capture_mode.h b/ash/system/palette/tools/enter_capture_mode.h new file mode 100644 index 0000000..efde4c11 --- /dev/null +++ b/ash/system/palette/tools/enter_capture_mode.h
@@ -0,0 +1,31 @@ +// 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 ASH_SYSTEM_PALETTE_TOOLS_ENTER_CAPTURE_MODE_H_ +#define ASH_SYSTEM_PALETTE_TOOLS_ENTER_CAPTURE_MODE_H_ + +#include "ash/system/palette/common_palette_tool.h" + +namespace ash { + +// This class manages the palette tool which is a point of entry for capture +// mode. Capture mode allows users to take screenshots and record videos. +class EnterCaptureMode : public CommonPaletteTool { + public: + explicit EnterCaptureMode(Delegate* delegate); + EnterCaptureMode(const EnterCaptureMode&) = delete; + EnterCaptureMode& operator=(const EnterCaptureMode&) = delete; + ~EnterCaptureMode() override; + + // CommonPaletteTool: + PaletteGroup GetGroup() const override; + PaletteToolId GetToolId() const override; + void OnEnable() override; + views::View* CreateView() override; + const gfx::VectorIcon& GetPaletteIcon() const override; +}; + +} // namespace ash + +#endif // ASH_SYSTEM_PALETTE_TOOLS_ENTER_CAPTURE_MODE_H_
diff --git a/base/BUILD.gn b/base/BUILD.gn index 0b0f01a..8e24f090 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -2145,7 +2145,10 @@ public_deps += [ "//third_party/perfetto:libperfetto" ] - deps += [ "//third_party/perfetto/include/perfetto/protozero" ] + deps += [ + "//base/tracing/protos:chrome_track_event", + "//third_party/perfetto/include/perfetto/protozero", + ] all_dependent_configs += [ "//third_party/perfetto/gn:public_config" ]
diff --git a/base/profiler/module_cache_posix.cc b/base/profiler/module_cache_posix.cc index e38facd3..310ab39 100644 --- a/base/profiler/module_cache_posix.cc +++ b/base/profiler/module_cache_posix.cc
@@ -10,10 +10,24 @@ #include "base/debug/elf_reader.h" #include "build/build_config.h" +// arm64 has execute-only memory (XOM) protecting code pages from being read. +// PosixModule reads executable pages in order to extract module info. This may +// result in a crash if the module is mapped as XOM so the code is disabled on +// that arch. See https://crbug.com/957801. +#if defined(OS_ANDROID) && !defined(ARCH_CPU_ARM64) +extern "C" { +// &__executable_start is the start address of the current module. +extern const char __executable_start; +// &__etext is the end addesss of the code segment in the current module. +extern const char _etext; +} +#endif // defined(OS_ANDROID) && !defined(ARCH_CPU_ARM64) + namespace base { namespace { +#if !defined(ARCH_CPU_ARM64) // Returns the unique build ID for a module loaded at |module_addr|. Returns the // empty string if the function fails to get the build ID. // @@ -55,23 +69,26 @@ return max_offset; } -FilePath GetDebugBasenameForModule(const Dl_info& dl_info) { +FilePath GetDebugBasenameForModule(const void* base_address, const char* file) { #if defined(OS_ANDROID) // Preferentially identify the library using its soname on Android. Libraries // mapped directly from apks have the apk filename in |dl_info.dli_fname|, and // this doesn't distinguish the particular library. - Optional<StringPiece> library_name = - debug::ReadElfLibraryName(dl_info.dli_fbase); + Optional<StringPiece> library_name = debug::ReadElfLibraryName(base_address); if (library_name) return FilePath(*library_name); -#endif +#endif // defined(OS_ANDROID) - return FilePath(dl_info.dli_fname).BaseName(); + return FilePath(file).BaseName(); } +#endif // !defined(ARCH_CPU_ARM64) class PosixModule : public ModuleCache::Module { public: - PosixModule(const Dl_info& dl_info); + PosixModule(uintptr_t base_address, + const std::string& build_id, + const FilePath& debug_basename, + size_t size); PosixModule(const PosixModule&) = delete; PosixModule& operator=(const PosixModule&) = delete; @@ -90,11 +107,14 @@ size_t size_; }; -PosixModule::PosixModule(const Dl_info& dl_info) - : base_address_(reinterpret_cast<uintptr_t>(dl_info.dli_fbase)), - id_(GetUniqueBuildId(dl_info.dli_fbase)), - debug_basename_(GetDebugBasenameForModule(dl_info)), - size_(GetLastExecutableOffset(dl_info.dli_fbase)) {} +PosixModule::PosixModule(uintptr_t base_address, + const std::string& build_id, + const FilePath& debug_basename, + size_t size) + : base_address_(base_address), + id_(build_id), + debug_basename_(debug_basename), + size_(size) {} } // namespace @@ -109,10 +129,31 @@ return nullptr; #else Dl_info info; - if (!dladdr(reinterpret_cast<const void*>(address), &info)) + if (!dladdr(reinterpret_cast<const void*>(address), &info)) { +#if defined(OS_ANDROID) + // dladdr doesn't know about the Chrome module in Android targets using the + // crazy linker. Explicitly check against the module's extents in that case. + if (address >= reinterpret_cast<uintptr_t>(&__executable_start) && + address < reinterpret_cast<uintptr_t>(&_etext)) { + const void* const base_address = + reinterpret_cast<const void*>(&__executable_start); + return std::make_unique<PosixModule>( + reinterpret_cast<uintptr_t>(&__executable_start), + GetUniqueBuildId(base_address), + // Extract the soname from the module. It is expected to exist, but if + // it doesn't use an empty string. + GetDebugBasenameForModule(base_address, /* file = */ ""), + GetLastExecutableOffset(base_address)); + } +#endif return nullptr; + } - return std::make_unique<PosixModule>(info); + return std::make_unique<PosixModule>( + reinterpret_cast<uintptr_t>(info.dli_fbase), + GetUniqueBuildId(info.dli_fbase), + GetDebugBasenameForModule(info.dli_fbase, info.dli_fname), + GetLastExecutableOffset(info.dli_fbase)); #endif }
diff --git a/base/tracing/protos/BUILD.gn b/base/tracing/protos/BUILD.gn new file mode 100644 index 0000000..79e98e6 --- /dev/null +++ b/base/tracing/protos/BUILD.gn
@@ -0,0 +1,14 @@ +# Copyright (c) 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. + +import("//third_party/protobuf/proto_library.gni") + +proto_library("chrome_track_event") { + proto_in_dir = "//" + import_dirs = [ "//third_party/perfetto/" ] + sources = [ "chrome_track_event.proto" ] + generate_cc = false + generate_python = false + generate_descriptor = "chrome_track_event.descriptor" +}
diff --git a/base/tracing/protos/chrome_track_event.proto b/base/tracing/protos/chrome_track_event.proto new file mode 100644 index 0000000..31cd53a --- /dev/null +++ b/base/tracing/protos/chrome_track_event.proto
@@ -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. + +syntax = "proto2"; + +import "third_party/perfetto/protos/perfetto/trace/track_event/track_event.proto"; + +package perfetto.protos; + +enum ChromeAppState { + APP_STATE_FOREGROUND = 1; + APP_STATE_BACKGROUND = 2; +} + +message ChromeTrackEvent { + // Extension range for Chrome: 1000-1099 + extend TrackEvent { optional ChromeAppState chrome_app_state = 1000; } +}
diff --git a/base/win/pe_image.h b/base/win/pe_image.h index 5f6d003b..97a4d30 100644 --- a/base/win/pe_image.h +++ b/base/win/pe_image.h
@@ -26,7 +26,12 @@ // This class is a wrapper for the Portable Executable File Format (PE). // Its main purpose is to provide an easy way to work with imports and exports -// from a file, mapped in memory as image. +// from a file, mapped in memory as image. A PEImage object is constructed from +// a loaded PE file by passing the HMODULE to the constructor. Loading a PE file +// as an image will execute code and should only be done with trusted images. +// Parsing of untrusted PE files is better done with PeImageReader. +// PEImage can only parse PE files that match the bitness of the process. +// See also PEImageAsData. class PEImage { public: // Callback to enumerate sections.
diff --git a/base/win/pe_image_reader.h b/base/win/pe_image_reader.h index 9804eb69..d6acb8d7 100644 --- a/base/win/pe_image_reader.h +++ b/base/win/pe_image_reader.h
@@ -18,7 +18,11 @@ namespace win { // Parses headers and various data from a PE image. This parser is safe for use -// on untrusted data. +// on untrusted data and works on PE files with different bitness from the +// current process. The PeImageReader is initialized after construction by +// passing the address and size of a PE file that has been read into memory - +// not loaded by the OS as an image. Parsing of a PE file that has been loaded +// as an image can be done with PEImage. class BASE_EXPORT PeImageReader { public: enum WordSize {
diff --git a/build/lacros/test_runner.py b/build/lacros/test_runner.py index 290c7cc..6d38458d 100755 --- a/build/lacros/test_runner.py +++ b/build/lacros/test_runner.py
@@ -81,6 +81,7 @@ # regex patters. '.*_browsertests', + '.*interactive_ui_tests' ] def _GetAshChromeDirPath(version):
diff --git a/cc/input/scroll_utils.cc b/cc/input/scroll_utils.cc index e9c036e..af78599 100644 --- a/cc/input/scroll_utils.cc +++ b/cc/input/scroll_utils.cc
@@ -4,6 +4,8 @@ #include "cc/input/scroll_utils.h" +#include <algorithm> + #include "base/numerics/ranges.h" #include "ui/gfx/geometry/size_f.h" #include "ui/gfx/geometry/vector2d_f.h" @@ -21,22 +23,13 @@ float delta_x = std::abs(delta.x()); float delta_y = std::abs(delta.y()); - // Resolved deltas in percent based scrolling are clamped at min by 16 pixels. - float min = kMinPixelDeltaForPercentBasedScroll; - // Resolve and clamp horizontal scroll - if (delta_x > 0) { + if (delta_x > 0) delta_x = delta_x * std::min(scroller.width(), viewport.width()); - if (delta_x < min) - delta_x = min; - } // Resolve and clamps vertical scroll. - if (delta_y > 0) { + if (delta_y > 0) delta_y = delta_y * std::min(scroller.height(), viewport.height()); - if (delta_y < min) - delta_y = min; - } return gfx::Vector2dF(std::copysign(delta_x, sign_x), std::copysign(delta_y, sign_y));
diff --git a/cc/input/scroll_utils.h b/cc/input/scroll_utils.h index 34fb3be7..c73d5c42 100644 --- a/cc/input/scroll_utils.h +++ b/cc/input/scroll_utils.h
@@ -21,17 +21,12 @@ // the scrollable area. static constexpr float kPercentDeltaForDirectionalScroll = 0.125f; -// Scroll deltas are lower-bounded by 16 physical pixels in percent-based -// scrolls. -static constexpr float kMinPixelDeltaForPercentBasedScroll = 16; - // Class for scroll helper methods in cc and blink. class CC_EXPORT ScrollUtils { public: // Transforms a |scroll_delta| in percent units to pixel units based in its - // |scroller_size|. Clamps it by 16 pixels to avoid too small deltas for tiny - // scrollers and 12.5% of |viewport_size| to avoid too large deltas. - // Inputs and output muest be in physical pixels. + // |scroller_size|. Limits it by a maximum of 12.5% of |viewport_size| to + // avoid too large deltas. Inputs and output must be in physical pixels. static gfx::Vector2dF ResolveScrollPercentageToPixels( const gfx::Vector2dF& scroll_delta, const gfx::SizeF& scroller_size,
diff --git a/cc/metrics/frame_sequence_metrics.cc b/cc/metrics/frame_sequence_metrics.cc index 4b7cc9b..d909e861 100644 --- a/cc/metrics/frame_sequence_metrics.cc +++ b/cc/metrics/frame_sequence_metrics.cc
@@ -22,7 +22,7 @@ // Avoid reporting any throughput metric for sequences that do not have a // sufficient number of frames. -constexpr int kMinFramesForThroughputMetric = 100; +constexpr int kMinFramesForThroughputMetric = 20; constexpr int kBuiltinSequenceNum = static_cast<int>(FrameSequenceTrackerType::kMaxType) + 1;
diff --git a/cc/metrics/frame_sequence_metrics_unittest.cc b/cc/metrics/frame_sequence_metrics_unittest.cc index 622045b7..1c07625b 100644 --- a/cc/metrics/frame_sequence_metrics_unittest.cc +++ b/cc/metrics/frame_sequence_metrics_unittest.cc
@@ -53,15 +53,15 @@ // Create a metric with only a small number of frames. It shouldn't report any // metrics. FrameSequenceMetrics first(FrameSequenceTrackerType::kTouchScroll, nullptr); - first.impl_throughput().frames_expected = 20; - first.impl_throughput().frames_produced = 10; + first.impl_throughput().frames_expected = 15; + first.impl_throughput().frames_produced = 5; EXPECT_FALSE(first.HasEnoughDataForReporting()); // Create a second metric with too few frames to report any metrics. auto second = std::make_unique<FrameSequenceMetrics>( FrameSequenceTrackerType::kTouchScroll, nullptr); - second->impl_throughput().frames_expected = 90; - second->impl_throughput().frames_produced = 60; + second->impl_throughput().frames_expected = 10; + second->impl_throughput().frames_produced = 5; EXPECT_FALSE(second->HasEnoughDataForReporting()); // Merge the two metrics. The result should have enough frames to report @@ -74,13 +74,13 @@ TEST(FrameSequenceMetricsTest, ScrollingThreadMergeMetrics) { FrameSequenceMetrics first(FrameSequenceTrackerType::kTouchScroll, nullptr); first.SetScrollingThread(FrameSequenceMetrics::ThreadType::kCompositor); - first.impl_throughput().frames_expected = 20; - first.impl_throughput().frames_produced = 10; + first.impl_throughput().frames_expected = 15; + first.impl_throughput().frames_produced = 5; auto second = std::make_unique<FrameSequenceMetrics>( FrameSequenceTrackerType::kTouchScroll, nullptr); second->SetScrollingThread(FrameSequenceMetrics::ThreadType::kMain); - second->main_throughput().frames_expected = 50; + second->main_throughput().frames_expected = 15; second->main_throughput().frames_produced = 10; ASSERT_DEATH(first.Merge(std::move(second)), ""); @@ -93,10 +93,10 @@ // Create a metric with enough frames on impl to be reported, but not enough // on main. FrameSequenceMetrics first(FrameSequenceTrackerType::kTouchScroll, nullptr); - first.impl_throughput().frames_expected = 120; - first.impl_throughput().frames_produced = 80; - first.main_throughput().frames_expected = 20; - first.main_throughput().frames_produced = 10; + first.impl_throughput().frames_expected = 30; + first.impl_throughput().frames_produced = 10; + first.main_throughput().frames_expected = 10; + first.main_throughput().frames_produced = 5; EXPECT_TRUE(first.HasEnoughDataForReporting()); first.ReportMetrics(); @@ -113,9 +113,9 @@ auto second = std::make_unique<FrameSequenceMetrics>( FrameSequenceTrackerType::kTouchScroll, nullptr); - second->impl_throughput().frames_expected = 110; - second->impl_throughput().frames_produced = 100; - second->main_throughput().frames_expected = 90; + second->impl_throughput().frames_expected = 30; + second->impl_throughput().frames_produced = 20; + second->main_throughput().frames_expected = 10; first.Merge(std::move(second)); EXPECT_TRUE(first.HasEnoughDataForReporting()); first.ReportMetrics(); @@ -128,10 +128,10 @@ EXPECT_FALSE(first.HasDataLeftForReporting()); FrameSequenceMetrics third(FrameSequenceTrackerType::kUniversal, nullptr); - third.impl_throughput().frames_expected = 120; - third.impl_throughput().frames_produced = 80; - third.main_throughput().frames_expected = 120; - third.main_throughput().frames_produced = 80; + third.impl_throughput().frames_expected = 30; + third.impl_throughput().frames_produced = 10; + third.main_throughput().frames_expected = 30; + third.main_throughput().frames_produced = 10; EXPECT_TRUE(third.HasEnoughDataForReporting()); third.ReportMetrics();
diff --git a/cc/metrics/frame_sequence_tracker.h b/cc/metrics/frame_sequence_tracker.h index 5d1d92e..315f5fe 100644 --- a/cc/metrics/frame_sequence_tracker.h +++ b/cc/metrics/frame_sequence_tracker.h
@@ -230,8 +230,8 @@ // present a frame even if it is ignored by ReportSubmitFrame. base::flat_set<uint32_t> ignored_frame_tokens_; - // Report the throughput metrics every 5 seconds. - const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(5); + // Report the throughput metrics every 1 seconds. + const base::TimeDelta time_delta_to_report_ = base::TimeDelta::FromSeconds(1); uint64_t last_started_impl_sequence_ = 0; uint64_t last_processed_impl_sequence_ = 0;
diff --git a/cc/metrics/frame_sequence_tracker_unittest.cc b/cc/metrics/frame_sequence_tracker_unittest.cc index dfe1e41..d290c34 100644 --- a/cc/metrics/frame_sequence_tracker_unittest.cc +++ b/cc/metrics/frame_sequence_tracker_unittest.cc
@@ -2044,12 +2044,12 @@ // Do a short scroll on the compositor thread, then do another short scroll on // the compositor thread. Make sure these are merged. base::HistogramTester histogram_tester; - const char first_sequence[] = "b(1)s(1)e(1,0)P(1)b(80)s(2)e(80,0)P(2)"; + const char first_sequence[] = "b(1)s(1)e(1,0)P(1)b(10)s(2)e(10,0)P(2)"; GenerateSequence(first_sequence); collection_.StopSequence(FrameSequenceTrackerType::kTouchScroll); CreateNewTracker(FrameSequenceMetrics::ThreadType::kCompositor); - const char second_sequence[] = "b(81)s(3)e(81,0)P(3)b(101)s(4)e(101,0)P(4)"; + const char second_sequence[] = "b(11)s(3)e(11,0)P(3)b(21)s(4)e(21,0)P(4)"; GenerateSequence(second_sequence); collection_.StopSequence(FrameSequenceTrackerType::kTouchScroll); @@ -2065,13 +2065,12 @@ // Do a short scroll on the compositor thread, then do another short scroll on // the main-thread. Make sure these are not merged. base::HistogramTester histogram_tester; - const char compscroll_sequence[] = "b(1)s(1)e(1,0)P(1)b(80)s(2)e(80,0)P(2)"; + const char compscroll_sequence[] = "b(1)s(1)e(1,0)P(1)b(10)s(2)e(10,0)P(2)"; GenerateSequence(compscroll_sequence); collection_.StopSequence(FrameSequenceTrackerType::kTouchScroll); CreateNewTracker(FrameSequenceMetrics::ThreadType::kMain); - const char mainscroll_sequence[] = - "b(81)s(3)e(81,0)P(3)b(101)s(4)e(101,0)P(4)"; + const char mainscroll_sequence[] = "b(11)s(3)e(11,0)P(3)b(21)s(4)e(21,0)P(4)"; GenerateSequence(mainscroll_sequence); collection_.StopSequence(FrameSequenceTrackerType::kTouchScroll);
diff --git a/cc/trees/layer_tree_host_pixeltest_readback.cc b/cc/trees/layer_tree_host_pixeltest_readback.cc index cebb1e7..e049e13e 100644 --- a/cc/trees/layer_tree_host_pixeltest_readback.cc +++ b/cc/trees/layer_tree_host_pixeltest_readback.cc
@@ -420,12 +420,7 @@ ReadbackTestConfig{TestRendererType::kSoftware, TestReadBackType::kBitmap}, ReadbackTestConfig{TestRendererType::kGL, TestReadBackType::kTexture}, ReadbackTestConfig{TestRendererType::kGL, TestReadBackType::kBitmap}, - // TODO(crbug.com/1046788): The skia readback path doesn't support - // RGBA_TEXTURE readback requests yet. Don't run these tests on platforms - // that have UseSkiaForGLReadback enabled by default. - // - // ReadbackTestConfig{TestRendererType::kSkiaGL, - // TestReadBackType::kTexture}, + ReadbackTestConfig{TestRendererType::kSkiaGL, TestReadBackType::kTexture}, ReadbackTestConfig{TestRendererType::kSkiaGL, TestReadBackType::kBitmap}, #if defined(ENABLE_CC_VULKAN_TESTS) ReadbackTestConfig{TestRendererType::kSkiaVk, TestReadBackType::kBitmap}, @@ -445,12 +440,7 @@ ReadbackTestConfig{TestRendererType::kSoftware, TestReadBackType::kBitmap}, ReadbackTestConfig{TestRendererType::kGL, TestReadBackType::kTexture}, ReadbackTestConfig{TestRendererType::kGL, TestReadBackType::kBitmap}, - // TODO(crbug.com/1046788): The skia readback path doesn't support - // RGBA_TEXTURE readback requests yet. Don't run these tests on platforms - // that have UseSkiaForGLReadback enabled by default. - // - // ReadbackTestConfig{TestRendererType::kSkiaGL, - // TestReadBackType::kTexture}, + ReadbackTestConfig{TestRendererType::kSkiaGL, TestReadBackType::kTexture}, ReadbackTestConfig{TestRendererType::kSkiaGL, TestReadBackType::kBitmap}, #if defined(ENABLE_CC_VULKAN_TESTS) && !defined(THREAD_SANITIZER) && \ !defined(MEMORY_SANITIZER)
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index ccf93843..19581c81 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -341,6 +341,7 @@ "//chrome/browser/ui/android/native_page:java", "//chrome/browser/ui/messages/android:java", "//chrome/browser/util:java", + "//chrome/browser/webauthn/android:java", "//chrome/browser/xsurface:java", "//components/autofill/android:autofill_java", "//components/autofill_assistant/browser:proto_java", @@ -661,6 +662,7 @@ "//chrome/browser/ui/android/favicon:jni_headers", "//chrome/browser/ui/messages/android:jni_headers", "//chrome/browser/util:jni_headers", + "//chrome/browser/webauthn/android:jni_headers", ] }
diff --git a/chrome/android/DEPS b/chrome/android/DEPS index df84c8f4..ca417ebb 100644 --- a/chrome/android/DEPS +++ b/chrome/android/DEPS
@@ -12,6 +12,7 @@ "+chrome/browser/ui/android/native_page", "+chrome/browser/ui/messages/android", "+chrome/browser/util/android/java", + "+chrome/browser/webauthn/android", "+chrome/browser/xsurface/android", "+components/browser_ui/android/bottomsheet", "+components/browser_ui/banners/android",
diff --git a/chrome/android/features/ar/OWNERS b/chrome/android/features/ar/OWNERS index 99d4a71..1217881 100644 --- a/chrome/android/features/ar/OWNERS +++ b/chrome/android/features/ar/OWNERS
@@ -1,4 +1,4 @@ -vollick@chromium.org +file://chrome/android/features/vr/OWNERS # TEAM: xr-dev@chromium.org # COMPONENT: Internals>XR>AR
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java index 2b40ba1..dcc82cc 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java
@@ -21,6 +21,7 @@ import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.NativeMethods; +import org.chromium.base.task.PostTask; import org.chromium.chrome.R; import org.chromium.chrome.browser.AppHooks; import org.chromium.chrome.browser.flags.ChromeFeatureList; @@ -52,6 +53,7 @@ import org.chromium.components.signin.base.CoreAccountInfo; import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.common.Referrer; import org.chromium.network.mojom.ReferrerPolicy; import org.chromium.ui.base.PageTransition; @@ -380,7 +382,7 @@ * Attempts to load more content if it can be triggered. * @return true if loading more content can be triggered. */ - public boolean maybeLoadMore() { + boolean maybeLoadMore() { // Checks if loading more can be triggered. boolean canLoadMore = false; LinearLayoutManager layoutManager = (LinearLayoutManager) mRootView.getLayoutManager(); @@ -396,8 +398,14 @@ // Starts to load more content if not yet. if (!mIsLoadingMoreContent) { mIsLoadingMoreContent = true; - FeedStreamSurfaceJni.get().loadMore(mNativeFeedStreamSurface, FeedStreamSurface.this, - (Boolean success) -> { mIsLoadingMoreContent = false; }); + // The native loadMore() call may immediately result in onStreamUpdated(), which can + // result in a crash if maybeLoadMore() is being called in response to certain events. + // Use postTask to avoid this. + PostTask.postTask(UiThreadTaskTraits.DEFAULT, + () + -> FeedStreamSurfaceJni.get().loadMore(mNativeFeedStreamSurface, + FeedStreamSurface.this, + (Boolean success) -> { mIsLoadingMoreContent = false; })); } return true;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java index c4674f7a..93e6518 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
@@ -123,6 +123,9 @@ // Set to true when the user has started typing new input in the omnibox, set to false // when the omnibox loses focus or becomes empty. private boolean mHasStartedNewOmniboxEditSession; + // Set at the end of the Omnibox interaction to indicate whether the user selected an item + // from the list (true) or left the Omnibox and suggestions list with no action taken (false). + private boolean mOmniboxFocusResultedInNavigation; /** * The text shown in the URL bar (user text + inline autocomplete) after the most recent set of @@ -395,6 +398,7 @@ /** @see org.chromium.chrome.browser.omnibox.UrlFocusChangeListener#onUrlFocusChange(boolean) */ void onUrlFocusChange(boolean hasFocus) { if (hasFocus) { + mOmniboxFocusResultedInNavigation = false; mUrlFocusTime = System.currentTimeMillis(); setSuggestionVisibilityState(SuggestionVisibilityState.PENDING_ALLOW); @@ -417,6 +421,8 @@ } else { if (mNativeInitialized) mDropdownViewInfoListManager.recordSuggestionsShown(); + SuggestionsMetrics.recordOmniboxFocusResultedInNavigation( + mOmniboxFocusResultedInNavigation); setSuggestionVisibilityState(SuggestionVisibilityState.DISALLOWED); mHasStartedNewOmniboxEditSession = false; mNewOmniboxEditSessionTimestamp = -1; @@ -925,6 +931,7 @@ RecordHistogram.recordMediumTimesHistogram( "Omnibox.FocusToOpenTimeAnyPopupState3", activationTime - mUrlFocusTime); + mOmniboxFocusResultedInNavigation = true; GURL url = updateSuggestionUrlIfNeeded(suggestion, matchPosition, !inVisibleSuggestionList); // loadUrl modifies AutocompleteController's state clearing the native
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionsMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionsMetrics.java index ef178979..e099057b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionsMetrics.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionsMetrics.java
@@ -92,4 +92,15 @@ static final void recordSuggestionViewReused(boolean reused) { RecordHistogram.recordBooleanHistogram("Android.Omnibox.SuggestionView.Reused", reused); } + + /** + * Record whether the interaction with the Omnibox resulted with a navigation (true) or user + * leaving the omnibox and suggestions list. + * + * @param focusResultedInNavigation Whether the user completed interaction with navigation. + */ + static final void recordOmniboxFocusResultedInNavigation(boolean focusResultedInNavigation) { + RecordHistogram.recordBooleanHistogram( + "Omnibox.FocusResultedInNavigation", focusResultedInNavigation); + } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java index 5629519..04755985 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/password_manager/settings/PasswordSettings.java
@@ -42,7 +42,7 @@ import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate; import org.chromium.chrome.browser.settings.SettingsLauncher; import org.chromium.chrome.browser.settings.SettingsLauncherImpl; -import org.chromium.chrome.modules.cablev2_authenticator.CableAuthenticatorModuleProvider; +import org.chromium.chrome.browser.webauthn.CableAuthenticatorModuleProvider; import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference; import org.chromium.components.browser_ui.settings.ChromeBasePreference; import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java index 7d03a23..2967b48 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -665,7 +665,7 @@ || methodName.equals(MethodStrings.GOOGLE_PLAY_BILLING)) { if (!appSupportedDelegations.providesAll( mFactoryDelegate.getParams().getPaymentOptions())) { - Log.e(TAG, ErrorStrings.SKIP_APP_FOR_PARTIAL_DELEGATION.replace("$1", packageName)); + Log.e(TAG, ErrorStrings.SKIP_APP_FOR_PARTIAL_DELEGATION.replace("$", packageName)); return; } }
diff --git a/chrome/android/modules/cablev2_authenticator/public/BUILD.gn b/chrome/android/modules/cablev2_authenticator/public/BUILD.gn index 3102adc..0c6d5fa 100644 --- a/chrome/android/modules/cablev2_authenticator/public/BUILD.gn +++ b/chrome/android/modules/cablev2_authenticator/public/BUILD.gn
@@ -6,7 +6,6 @@ android_library("java") { sources = [ - "java/src/org/chromium/chrome/modules/cablev2_authenticator/CableAuthenticatorModuleProvider.java", "java/src/org/chromium/chrome/modules/cablev2_authenticator/Module.java", ] deps = [
diff --git a/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/Module.java b/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/Module.java index 2277924..90ac8697 100644 --- a/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/Module.java +++ b/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/Module.java
@@ -17,7 +17,7 @@ */ @ModuleInterface(module = "cablev2_authenticator", impl = "org.chromium.chrome.modules.cablev2_authenticator.ModuleImpl") -interface Module { +public interface Module { /** Returns a {@link Fragment} that contains the authenticator UI. */ public Fragment getFragment(); }
diff --git a/chrome/app/chromium_strings.grd b/chrome/app/chromium_strings.grd index b2d8bc1..f86df9d 100644 --- a/chrome/app/chromium_strings.grd +++ b/chrome/app/chromium_strings.grd
@@ -1153,6 +1153,9 @@ <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> Use Chromium Spaces to keep your browsing organized on this device </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE" desc="Remove warning message shown for signed in profiles shown when the user selects remove from the 3 dotted menu"> + This space’s browsing data will be deleted from this device. To recover the data, sign in to Chromium as + </message> <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE" desc="Profile picker profile type choice title"> Set up your new Chromium Space
diff --git a/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1 b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/chromium_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/google_chrome_strings.grd b/chrome/app/google_chrome_strings.grd index c79665ff..d86661db 100644 --- a/chrome/app/google_chrome_strings.grd +++ b/chrome/app/google_chrome_strings.grd
@@ -1169,6 +1169,9 @@ <message name="IDS_PROFILE_PICKER_MAIN_VIEW_SUBTITLE" desc="Profile picker main view subtitle"> Use Chrome Spaces to keep your browsing organized on this device </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE" desc="Remove warning message shown for signed in profiles shown when the user selects remove from the 3 dotted menu"> + This space’s browsing data will be deleted from this device. To recover the data, sign in to Chrome as + </message> <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE" desc="Profile picker profile type choice title"> Set up your new Chrome Space
diff --git a/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1 b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/google_chrome_strings_grd/IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/profiles_strings.grdp b/chrome/app/profiles_strings.grdp index 2d1e688..ce61793 100644 --- a/chrome/app/profiles_strings.grdp +++ b/chrome/app/profiles_strings.grdp
@@ -673,6 +673,30 @@ <message name="IDS_PROFILE_PICKER_BACK_BUTTON_LABEL" desc="Label for a button that navigates user to the previous page"> Back </message> + <message name="IDS_PROFILE_PICKER_PROFILE_MENU_BUTTON_NAME" desc="Text to be spoken when the focus is set to the menu button of the profile card on the picker main screen or shown on hover."> + Options menu for <ph name="PROFILE_LOCAL_NAME">$1<ex>Personal</ex></ph> + </message> + <message name="IDS_PROFILE_PICKER_PROFILE_MENU_REMOVE_TEXT" desc="Text of the remove button in profile card menu and on the title of the remove warning."> + Remove + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_LOCAL_PROFILE" desc="Main text shown as a warning when attempting to remove an user."> + This will permanently delete your browsing data from this device. + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_HISTORY" desc="The title of a statistic (browsing history) shown inside a table below the warning text when attempting to remove an user. A number is displayed next to it."> + Browsing history + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_PASSWORDS" desc="The title of a statistic (passwords) shown inside a table below the warning text when attempting to remove a profile. A number is displayed next to it."> + Passwords + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_BOOKMARKS" desc="The title of a statistic (bookmarks) shown inside a table below the warning text when attempting to remove a profile. A number is displayed next to it."> + Bookmarks + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_AUTOFILL" desc="The title of a statistic (autofill) shown inside a table below the warning text when attempting to remove a profile. A number is displayed next to it."> + Autofill form data + </message> + <message name="IDS_PROFILE_PICKER_REMOVE_WARNING_CALCULATING" desc="This is shown next to the loading statistics in the remove action menu. All occurrences of '...' will be eventually replaced by numbers when the statistics are loaded."> + ... + </message> <message name="IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_SUBTITLE" desc="Profile picker profile type choice subtitle"> Sign in to Sync your bookmarks, passwords, history and more on all your devices
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_BUTTON_NAME.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_BUTTON_NAME.png.sha1 new file mode 100644 index 0000000..a4f9f0407 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_BUTTON_NAME.png.sha1
@@ -0,0 +1 @@ +10bff9f18c6ba460847f7ba4c3d7744784459e46 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_REMOVE_TEXT.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_REMOVE_TEXT.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_PROFILE_MENU_REMOVE_TEXT.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_AUTOFILL.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_AUTOFILL.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_AUTOFILL.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_BOOKMARKS.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_BOOKMARKS.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_BOOKMARKS.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_CALCULATING.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_CALCULATING.png.sha1 new file mode 100644 index 0000000..99513a3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_CALCULATING.png.sha1
@@ -0,0 +1 @@ +9b7ea173a8fb0ffe3fb351fd117b3846fce1e058 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_HISTORY.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_HISTORY.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_HISTORY.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_LOCAL_PROFILE.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_LOCAL_PROFILE.png.sha1 new file mode 100644 index 0000000..c1b5e5a --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_LOCAL_PROFILE.png.sha1
@@ -0,0 +1 @@ +e9dd45d35c36c4f38d438ee50b7246feb4c7ce71 \ No newline at end of file
diff --git a/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_PASSWORDS.png.sha1 b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_PASSWORDS.png.sha1 new file mode 100644 index 0000000..e22eff3 --- /dev/null +++ b/chrome/app/profiles_strings_grdp/IDS_PROFILE_PICKER_REMOVE_WARNING_PASSWORDS.png.sha1
@@ -0,0 +1 @@ +142eeb0b333995bb9e97f4e8deacb899fd9a3781 \ No newline at end of file
diff --git a/chrome/app/settings_chromium_strings.grdp b/chrome/app/settings_chromium_strings.grdp index f98a4e7..2e405b0 100644 --- a/chrome/app/settings_chromium_strings.grdp +++ b/chrome/app/settings_chromium_strings.grdp
@@ -158,12 +158,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_INFECTED" desc="This text describes that Chrome found harmful software on the computer."> Chromium found harmful software on your computer </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR" desc="This text describes that Chrome can't check for unwanted software due to an error."> - An error occurred while Chromium was checking the device software - </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_DISABLED_BY_ADMIN" desc="This text describes that Chrome can't check for unwanted software because an administrator disabled the feature."> - Your administrator has disabled Chromium's check for harmful software - </message> <!-- People Page --> <message name="IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_SINGULAR" desc="Warning message displayed in the Sign out of Chrome dialog that indicates profile browsing data will be removed from the device.">
diff --git a/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 b/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 deleted file mode 100644 index 24223b0..0000000 --- a/chrome/app/settings_chromium_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -11adbc65a727f22fea63e7aaa7517e4786d7b382 \ No newline at end of file
diff --git a/chrome/app/settings_google_chrome_strings.grdp b/chrome/app/settings_google_chrome_strings.grdp index a6714f7e..b892df36 100644 --- a/chrome/app/settings_google_chrome_strings.grdp +++ b/chrome/app/settings_google_chrome_strings.grdp
@@ -159,12 +159,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_INFECTED" desc="This text describes that Chrome found harmful software on the computer."> Chrome found harmful software on your computer </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR" desc="This text describes that Chrome can't check for unwanted software due to an error."> - An error occurred while Chrome was checking the device software - </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_DISABLED_BY_ADMIN" desc="This text describes that Chrome can't check for unwanted software because an administrator disabled the feature."> - Your administrator has disabled Chrome's check for harmful software - </message> <!-- People Page --> <message name="IDS_SETTINGS_SYNC_DISCONNECT_DELETE_PROFILE_WARNING_WITH_COUNTS_SINGULAR" desc="Warning message displayed in the Sign out of Chrome dialog that indicates profile browsing data will be removed from the device.">
diff --git a/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 b/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 deleted file mode 100644 index 24223b0..0000000 --- a/chrome/app/settings_google_chrome_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -11adbc65a727f22fea63e7aaa7517e4786d7b382 \ No newline at end of file
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index 86a5f92..50b177fc 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -1193,9 +1193,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW" desc="Text for a button that allows users to review safety check findings, such as compromised passwords or blocklisted extensions."> Review </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_REVIEW_ERROR_DETAILS" desc="Accessibility text for a button that allows users to review error details."> - Review error details - </message> <message name="IDS_SETTINGS_SAFETY_CHECK_UPDATES_PRIMARY_LABEL" desc="'Updates' is an element in safety check that shows the update status of Chrome."> Updates </message> @@ -1262,9 +1259,6 @@ <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_BUTTON_ARIA_LABEL" desc="Accessiblity text for the button that allows users to review and remove harmful software found on their computer."> Review device software </message> - <message name="IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL" desc="Accessiblity text for the button that leads users to the Chrome cleaner page, which explains details about the device softrware check."> - Show details of the device software check - </message> <message name="IDS_SETTINGS_NETWORK_PREDICTION_ENABLED_LABEL" desc="In the advanced options tab, the text next to the checkbox that enables prediction of network actions. Actions include browser-initiated DNS prefetching, TCP and SSL preconnection, and prerendering of webpages."> Preload pages for faster browsing and searching
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL.png.sha1 deleted file mode 100644 index afeeb31..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -8cba4a7618c7021e673c6fe4bbfe38d3caed87bb \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_ERROR_DETAILS.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_ERROR_DETAILS.png.sha1 deleted file mode 100644 index 24223b0..0000000 --- a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SAFETY_CHECK_REVIEW_ERROR_DETAILS.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -11adbc65a727f22fea63e7aaa7517e4786d7b382 \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 10fff30..d6ede6ab 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1293,15 +1293,10 @@ "prerender/isolated/isolated_prerender_url_loader_interceptor.h", "prerender/isolated/prefetched_mainframe_response_container.cc", "prerender/isolated/prefetched_mainframe_response_container.h", - "prerender/prerender_link_manager.cc", - "prerender/prerender_link_manager.h", "prerender/prerender_link_manager_factory.cc", "prerender/prerender_link_manager_factory.h", "prerender/prerender_manager_factory.cc", "prerender/prerender_manager_factory.h", - "prerender/prerender_processor_impl.cc", - "prerender/prerender_processor_impl.h", - "prerender/prerender_processor_impl_delegate.h", "prerender/prerender_tab_helper.cc", "prerender/prerender_tab_helper.h", "previews/previews_content_util.cc", @@ -2903,6 +2898,7 @@ "updates/update_notification_client.h", "updates/update_notification_service_bridge_android.cc", "updates/update_notification_service_bridge_android.h", + "webauthn/android/cable_module_android.cc", ] public_deps += [ "//chrome/android/features/dev_ui:buildflags",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 4427ee3..1d2d6244 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -6171,7 +6171,7 @@ #if defined(OS_CHROMEOS) {"frame-throttle-fps", flag_descriptions::kFrameThrottleFpsName, flag_descriptions::kFrameThrottleFpsDescription, kOsCrOS, - MULTI_VALUE_TYPE(kFrameThrottleFpsChoices)} + MULTI_VALUE_TYPE(kFrameThrottleFpsChoices)}, #endif // defined(OS_CHROMEOS) #if defined(OS_ANDROID) @@ -6182,6 +6182,11 @@ password_manager::features::kFillingPasswordsFromAnyOrigin)}, #endif // OS_ANDROID + {"h264-decoder-is-buffer-complete-frame", + flag_descriptions::kH264DecoderBufferIsCompleteFrameName, + flag_descriptions::kH264DecoderBufferIsCompleteFrameDescription, kOsAll, + FEATURE_VALUE_TYPE(media::kH264DecoderBufferIsCompleteFrame)}, + // NOTE: Adding a new flag requires adding a corresponding entry to enum // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/android/battery/android_battery_metrics.cc b/chrome/browser/android/battery/android_battery_metrics.cc index e75c723e..0595203f 100644 --- a/chrome/browser/android/battery/android_battery_metrics.cc +++ b/chrome/browser/android/battery/android_battery_metrics.cc
@@ -67,8 +67,11 @@ AndroidBatteryMetrics::AndroidBatteryMetrics() : app_state_listener_(base::android::ApplicationStatusListener::New( base::BindRepeating(&AndroidBatteryMetrics::OnAppStateChanged, - base::Unretained(this)))) { + base::Unretained(this)))), + app_state_(base::android::ApplicationStatusListener::GetState()), + on_battery_power_(base::PowerMonitor::IsOnBatteryPower()) { base::PowerMonitor::AddObserver(this); + UpdateDrainMetricsEnabled(); } AndroidBatteryMetrics::~AndroidBatteryMetrics() {
diff --git a/chrome/browser/android/battery/android_battery_metrics.h b/chrome/browser/android/battery/android_battery_metrics.h index e882e09a..a7027a2 100644 --- a/chrome/browser/android/battery/android_battery_metrics.h +++ b/chrome/browser/android/battery/android_battery_metrics.h
@@ -38,9 +38,8 @@ base::TimeDelta::FromSeconds(30); std::unique_ptr<base::android::ApplicationStatusListener> app_state_listener_; - base::android::ApplicationState app_state_ = - base::android::APPLICATION_STATE_UNKNOWN; - bool on_battery_power_ = false; + base::android::ApplicationState app_state_; + bool on_battery_power_; int last_remaining_capacity_uah_ = 0; base::RepeatingTimer drain_metrics_timer_; int skipped_timers_ = 0;
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc index 59f344c..7d06f9c 100644 --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -37,7 +37,6 @@ #include "chrome/browser/download/download_prefs.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/pdf/pdf_extension_test_util.h" -#include "chrome/browser/prerender/prerender_link_manager.h" #include "chrome/browser/prerender/prerender_link_manager_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_context_menu/render_view_context_menu.h" @@ -58,6 +57,7 @@ #include "components/guest_view/browser/guest_view_manager_delegate.h" #include "components/guest_view/browser/guest_view_manager_factory.h" #include "components/guest_view/browser/test_guest_view_manager.h" +#include "components/prerender/browser/prerender_link_manager.h" #include "components/security_interstitials/content/security_interstitial_tab_helper.h" #include "components/version_info/channel.h" #include "components/version_info/version_info.h"
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc index d498242..62a0c79 100644 --- a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc +++ b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
@@ -81,13 +81,14 @@ void SetPolicy(policy::PolicyMap* policies, const char* key, - base::Value value) { + std::unique_ptr<base::Value> value) { policies->Set(key, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_PLATFORM, std::move(value), nullptr); } void EnableBrowserSwitcher(policy::PolicyMap* policies) { - SetPolicy(policies, policy::key::kBrowserSwitcherEnabled, base::Value(true)); + SetPolicy(policies, policy::key::kBrowserSwitcherEnabled, + std::make_unique<base::Value>(true)); } } // namespace @@ -127,7 +128,7 @@ policy::PolicyMap policies; EnableBrowserSwitcher(&policies); SetPolicy(&policies, policy::key::kBrowserSwitcherUseIeSitelist, - base::Value(use_ie_sitelist)); + std::make_unique<base::Value>(use_ie_sitelist)); provider_.UpdateChromePolicy(policies); base::RunLoop().RunUntilIdle(); } @@ -136,7 +137,7 @@ policy::PolicyMap policies; EnableBrowserSwitcher(&policies); SetPolicy(&policies, policy::key::kBrowserSwitcherExternalSitelistUrl, - base::Value(url)); + std::make_unique<base::Value>(url)); provider_.UpdateChromePolicy(policies); base::RunLoop().RunUntilIdle(); } @@ -367,12 +368,12 @@ ExternalGreylistFetchAndParseAfterStartup) { policy::PolicyMap policies; EnableBrowserSwitcher(&policies); - base::Value url_list(base::Value::Type::LIST); - url_list.Append("*"); + auto url_list = std::make_unique<base::ListValue>(); + url_list->Append("*"); SetPolicy(&policies, policy::key::kBrowserSwitcherUrlList, std::move(url_list)); SetPolicy(&policies, policy::key::kBrowserSwitcherExternalGreylistUrl, - base::Value(kAValidUrl)); + std::make_unique<base::Value>(kAValidUrl)); policy_provider().UpdateChromePolicy(policies); base::RunLoop().RunUntilIdle(); @@ -512,23 +513,23 @@ policy::PolicyMap policies; EnableBrowserSwitcher(&policies); SetPolicy(&policies, policy::key::kAlternativeBrowserPath, - base::Value("IExplore.exe")); - base::Value alt_params(base::Value::Type::LIST); - alt_params.Append("--bogus-flag"); + std::make_unique<base::Value>("IExplore.exe")); + auto alt_params = std::make_unique<base::ListValue>(); + alt_params->Append(base::Value("--bogus-flag")); SetPolicy(&policies, policy::key::kAlternativeBrowserParameters, std::move(alt_params)); SetPolicy(&policies, policy::key::kBrowserSwitcherChromePath, - base::Value("chrome.exe")); - base::Value chrome_params(base::Value::Type::LIST); - chrome_params.Append("--force-dark-mode"); + std::make_unique<base::Value>("chrome.exe")); + auto chrome_params = std::make_unique<base::ListValue>(); + chrome_params->Append(base::Value("--force-dark-mode")); SetPolicy(&policies, policy::key::kBrowserSwitcherChromeParameters, std::move(chrome_params)); - base::Value url_list(base::Value::Type::LIST); - url_list.Append("example.com"); + auto url_list = std::make_unique<base::ListValue>(); + url_list->Append(base::Value("example.com")); SetPolicy(&policies, policy::key::kBrowserSwitcherUrlList, std::move(url_list)); - base::Value greylist(base::Value::Type::LIST); - greylist.Append("foo.example.com"); + auto greylist = std::make_unique<base::ListValue>(); + greylist->Append(base::Value("foo.example.com")); SetPolicy(&policies, policy::key::kBrowserSwitcherUrlGreylist, std::move(greylist)); policy_provider().UpdateChromePolicy(policies); @@ -579,11 +580,13 @@ policy::PolicyMap policies; EnableBrowserSwitcher(&policies); SetPolicy(&policies, policy::key::kBrowserSwitcherExternalSitelistUrl, - base::Value(net::FilePathToFileURL(external_sitelist_path).spec())); + std::make_unique<base::Value>( + net::FilePathToFileURL(external_sitelist_path).spec())); SetPolicy(&policies, policy::key::kBrowserSwitcherExternalGreylistUrl, - base::Value(net::FilePathToFileURL(external_greylist_path).spec())); + std::make_unique<base::Value>( + net::FilePathToFileURL(external_greylist_path).spec())); SetPolicy(&policies, policy::key::kBrowserSwitcherUseIeSitelist, - base::Value(true)); + std::make_unique<base::Value>(true)); policy_provider().UpdateChromePolicy(policies); base::RunLoop().RunUntilIdle(); BrowserSwitcherServiceWin::SetIeemSitelistUrlForTesting(
diff --git a/chrome/browser/browsing_data/access_context_audit_service_unittest.cc b/chrome/browser/browsing_data/access_context_audit_service_unittest.cc index bd92371b..eae050481 100644 --- a/chrome/browser/browsing_data/access_context_audit_service_unittest.cc +++ b/chrome/browser/browsing_data/access_context_audit_service_unittest.cc
@@ -448,7 +448,12 @@ CheckContainsStorageAPIRecord(kOrigin1, kTestStorageType2, kOrigin1, records); } -TEST_F(AccessContextAuditServiceTest, SessionOnlyRecords) { +#if defined(THREAD_SANITIZER) +#define MAYBE_SessionOnlyRecords DISABLED_SessionOnlyRecords +#else +#define MAYBE_SessionOnlyRecords SessionOnlyRecords +#endif +TEST_F(AccessContextAuditServiceTest, MAYBE_SessionOnlyRecords) { // Check that data for cookie domains and storage origins are cleared on // service shutdown when the associated content settings indicate they should. const GURL kTestPersistentURL("https://persistent.com");
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index dff7470..b524384 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -22,7 +22,6 @@ #include "chrome/browser/predictors/network_hints_handler_impl.h" #include "chrome/browser/prerender/chrome_prerender_contents_delegate.h" #include "chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h" -#include "chrome/browser/prerender/prerender_processor_impl.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ssl/insecure_sensitive_input_driver_factory.h" #include "chrome/browser/ssl/security_state_tab_helper.h" @@ -51,6 +50,7 @@ #include "components/performance_manager/public/performance_manager.h" #include "components/prefs/pref_service.h" #include "components/prerender/browser/prerender_contents.h" +#include "components/prerender/browser/prerender_processor_impl.h" #include "components/safe_browsing/buildflags.h" #include "components/security_state/content/content_utils.h" #include "components/security_state/core/security_state.h"
diff --git a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.cc b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.cc index 4dd62510..eb64f8d 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.cc +++ b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.cc
@@ -307,8 +307,7 @@ } void ArcTracingBridge::GetCategories(std::set<std::string>* category_set) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - + base::AutoLock lock(categories_lock_); for (const auto& category : categories_) { category_set->insert(category.full_name); } @@ -328,6 +327,7 @@ const std::vector<std::string>& categories) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + base::AutoLock lock(categories_lock_); // There is no API in TraceLog to remove a category from the UI. As an // alternative, the old category that is no longer in |categories_| will be // ignored when calling |StartTracing|. @@ -366,9 +366,12 @@ } std::vector<std::string> selected_categories; - for (const auto& category : categories_) { - if (trace_config.IsCategoryGroupEnabled(category.full_name)) - selected_categories.push_back(category.name); + { + base::AutoLock lock(categories_lock_); + for (const auto& category : categories_) { + if (trace_config.IsCategoryGroupEnabled(category.full_name)) + selected_categories.push_back(category.name); + } } tracing_instance->StartTracing( @@ -448,7 +451,6 @@ void ArcTracingBridge::ArcTracingAgent::GetCategories( std::set<std::string>* category_set) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); bridge_->GetCategories(category_set); }
diff --git a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h index 4a8c679..acbecb00 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h +++ b/chrome/browser/chromeos/arc/tracing/arc_tracing_bridge.h
@@ -16,6 +16,8 @@ #include "base/files/scoped_file.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/synchronization/lock.h" +#include "base/thread_annotations.h" #include "components/arc/mojom/tracing.mojom-forward.h" #include "components/arc/session/connection_observer.h" #include "components/keyed_service/core/keyed_service.h" @@ -120,7 +122,8 @@ ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager. // List of available categories. - std::vector<Category> categories_; + base::Lock categories_lock_; + std::vector<Category> categories_ GUARDED_BY(categories_lock_); ArcTracingAgent agent_;
diff --git a/chrome/browser/chromeos/extensions/document_scan/document_scan_api.cc b/chrome/browser/chromeos/extensions/document_scan/document_scan_api.cc index ced29e6..6a6e633 100644 --- a/chrome/browser/chromeos/extensions/document_scan/document_scan_api.cc +++ b/chrome/browser/chromeos/extensions/document_scan/document_scan_api.cc
@@ -86,9 +86,10 @@ const auto& scanner = response->scanners()[0]; chromeos::LorgnetteManagerClient::ScanProperties properties; properties.mode = lorgnette::kScanPropertyModeColor; - GetLorgnetteManagerClient()->ScanImageToString( + GetLorgnetteManagerClient()->StartScan( scanner.name(), properties, - base::BindOnce(&DocumentScanScanFunction::OnResultsReceived, this)); + base::BindOnce(&DocumentScanScanFunction::OnResultsReceived, this), + base::nullopt); } void DocumentScanScanFunction::OnResultsReceived(
diff --git a/chrome/browser/chromeos/extensions/document_scan/document_scan_api_unittest.cc b/chrome/browser/chromeos/extensions/document_scan/document_scan_api_unittest.cc index f2f0c83d..62ce8352 100644 --- a/chrome/browser/chromeos/extensions/document_scan/document_scan_api_unittest.cc +++ b/chrome/browser/chromeos/extensions/document_scan/document_scan_api_unittest.cc
@@ -100,7 +100,7 @@ TEST_F(DocumentScanScanFunctionTest, ScanImageError) { GetLorgnetteManagerClient()->SetListScannersResponse( CreateListScannersResponse()); - GetLorgnetteManagerClient()->SetScanImageToStringResponse(base::nullopt); + GetLorgnetteManagerClient()->SetScanResponse(base::nullopt); EXPECT_EQ("Failed to scan image", RunFunctionAndReturnError("[{\"mimeTypes\": [\"image/png\"]}]")); } @@ -108,7 +108,7 @@ TEST_F(DocumentScanScanFunctionTest, Success) { GetLorgnetteManagerClient()->SetListScannersResponse( CreateListScannersResponse()); - GetLorgnetteManagerClient()->SetScanImageToStringResponse("PrettyPicture"); + GetLorgnetteManagerClient()->SetScanResponse("PrettyPicture"); std::unique_ptr<base::DictionaryValue> result(RunFunctionAndReturnDictionary( function_.get(), "[{\"mimeTypes\": [\"image/png\"]}]")); ASSERT_NE(nullptr, result.get());
diff --git a/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc index d9498ccb..0851bef0 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc
@@ -118,6 +118,10 @@ // Add 'unsafe-inline' to CSP to allow the inline <script> in the // generated HTML to run see js_test_gen_html.py. return "script-src chrome://resources 'self' 'unsafe-inline'; "; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc index a079012..0137cfe 100644 --- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc +++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc
@@ -508,7 +508,8 @@ account_id.GetUserEmail(), std::string() /* instance_id */, std::string() /* name */, std::string() /* pii_free_name */, decoded_public_key, decoded_psk /* persistent_symmetric_key */, - 0L /* last_update_time_millis */, software_features, beacon_seeds); + 0L /* last_update_time_millis */, software_features, beacon_seeds, + std::string() /* bluetooth_public_address */); remote_devices.push_back(remote_device); PA_LOG(VERBOSE) << "Loaded Remote Device:\n"
diff --git a/chrome/browser/chromeos/printing/cups_print_job_manager_impl.cc b/chrome/browser/chromeos/printing/cups_print_job_manager_impl.cc index ff09c22..2b4430d 100644 --- a/chrome/browser/chromeos/printing/cups_print_job_manager_impl.cc +++ b/chrome/browser/chromeos/printing/cups_print_job_manager_impl.cc
@@ -467,7 +467,7 @@ NotifyJobDone(job); break; case State::STATE_ERROR: - NotifyJobUpdated(job); + NotifyJobFailed(job); break; } }
diff --git a/chrome/browser/chromeos/printing/cups_print_job_notification.cc b/chrome/browser/chromeos/printing/cups_print_job_notification.cc index ccd3bb34..3d63c326 100644 --- a/chrome/browser/chromeos/printing/cups_print_job_notification.cc +++ b/chrome/browser/chromeos/printing/cups_print_job_notification.cc
@@ -107,9 +107,12 @@ CupsPrintJobNotification::~CupsPrintJobNotification() = default; void CupsPrintJobNotification::OnPrintJobStatusUpdated() { - // After cancellation, ignore all updates. - if (cancelled_by_user_) - return; + if (!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)) { + // After cancellation, ignore all updates. + if (cancelled_by_user_) { + return; + } + } UpdateNotification(); } @@ -136,6 +139,12 @@ return; } + if (base::FeatureList::IsEnabled(features::kPrintJobManagementApp)) { + // Both the "Cancel" and "Get help" buttons are hidden when the print + // management app is enabled. + return; + } + DCHECK(*button_index >= 0 && static_cast<size_t>(*button_index) < button_commands_.size()); @@ -188,7 +197,9 @@ UpdateNotificationIcon(); UpdateNotificationBodyMessage(); UpdateNotificationType(); - UpdateNotificationButtons(); + if (!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)) { + UpdateNotificationButtons(); + } // |STATE_STARTED| and |STATE_PAGE_DONE| are special since if the user closes // the notification in the middle, which means they're not interested in the @@ -306,6 +317,10 @@ case CupsPrintJob::State::STATE_SUSPENDED: case CupsPrintJob::State::STATE_RESUMED: case CupsPrintJob::State::STATE_ERROR: + if (base::FeatureList::IsEnabled(features::kPrintJobManagementApp)) { + // Do not show the progress bar if the print management app is enabled. + break; + } notification_->set_type(message_center::NOTIFICATION_TYPE_PROGRESS); notification_->set_progress(print_job_->printed_page_number() * 100 / print_job_->total_page_number()); @@ -322,6 +337,8 @@ } void CupsPrintJobNotification::UpdateNotificationButtons() { + DCHECK(!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)); + std::vector<message_center::ButtonInfo> buttons; button_commands_ = GetButtonCommands(); for (const auto& it : button_commands_) { @@ -335,8 +352,11 @@ std::vector<CupsPrintJobNotification::ButtonCommand> CupsPrintJobNotification::GetButtonCommands() const { - if (!print_job_) + DCHECK(!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)); + + if (!print_job_) { return {}; + } std::vector<CupsPrintJobNotification::ButtonCommand> commands; switch (print_job_->state()) { case CupsPrintJob::State::STATE_WAITING: @@ -359,6 +379,8 @@ base::string16 CupsPrintJobNotification::GetButtonLabel( ButtonCommand button) const { + DCHECK(!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)); + switch (button) { case ButtonCommand::CANCEL_PRINTING: return l10n_util::GetStringUTF16( @@ -371,6 +393,8 @@ } gfx::Image CupsPrintJobNotification::GetButtonIcon(ButtonCommand button) const { + DCHECK(!base::FeatureList::IsEnabled(features::kPrintJobManagementApp)); + ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); gfx::Image icon; switch (button) {
diff --git a/chrome/browser/chromeos/printing/history/print_job_info_proto_conversions.cc b/chrome/browser/chromeos/printing/history/print_job_info_proto_conversions.cc index a78d9d9..875bfb2f 100644 --- a/chrome/browser/chromeos/printing/history/print_job_info_proto_conversions.cc +++ b/chrome/browser/chromeos/printing/history/print_job_info_proto_conversions.cc
@@ -66,6 +66,7 @@ proto::PrintJobInfo_PrintJobStatus PrintJobStateToProto( CupsPrintJob::State state) { switch (state) { + case CupsPrintJob::State::STATE_ERROR: case CupsPrintJob::State::STATE_FAILED: return proto::PrintJobInfo_PrintJobStatus_FAILED; case CupsPrintJob::State::STATE_CANCELLED:
diff --git a/chrome/browser/chromeos/printing/usb_printer_detector.cc b/chrome/browser/chromeos/printing/usb_printer_detector.cc index efaf3c2..b3e7591 100644 --- a/chrome/browser/chromeos/printing/usb_printer_detector.cc +++ b/chrome/browser/chromeos/printing/usb_printer_detector.cc
@@ -28,6 +28,7 @@ #include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "chromeos/printing/ppd_provider.h" #include "chromeos/printing/usb_printer_id.h" +#include "components/device_event_log/device_event_log.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/device_service.h" @@ -114,14 +115,16 @@ std::unique_ptr<Printer> converted = UsbDeviceToPrinter(device_info); if (!converted.get()) { // An error will already have been logged if we failed to convert. + PRINTER_LOG(EVENT) << "USB printer was detected but not recognized"; return; } + std::string make_and_model = GuessEffectiveMakeAndModel(device_info); + PRINTER_LOG(EVENT) << "USB printer was detected: " << make_and_model; DetectedPrinter entry; entry.printer = *converted; entry.ppd_search_data.usb_vendor_id = device_info.vendor_id; entry.ppd_search_data.usb_product_id = device_info.product_id; - entry.ppd_search_data.make_and_model.push_back( - GuessEffectiveMakeAndModel(device_info)); + entry.ppd_search_data.make_and_model.push_back(std::move(make_and_model)); entry.ppd_search_data.discovery_type = PrinterSearchData::PrinterDiscoveryType::kUsb; @@ -139,6 +142,8 @@ void OnGetDeviceId(DetectedPrinter entry, std::string guid, UsbPrinterId printer_id) { + PRINTER_LOG(EVENT) << "USB printer returned ID: " << printer_id.make() + << " " << printer_id.model(); entry.ppd_search_data.printer_id = std::move(printer_id); // Add detected printer.
diff --git a/chrome/browser/chromeos/web_applications/terminal_source.cc b/chrome/browser/chromeos/web_applications/terminal_source.cc index 76aaa2bf..4f0a2bf 100644 --- a/chrome/browser/chromeos/web_applications/terminal_source.cc +++ b/chrome/browser/chromeos/web_applications/terminal_source.cc
@@ -163,6 +163,13 @@ return "media-src data:;"; case network::mojom::CSPDirectiveName::StyleSrc: return "style-src * 'unsafe-inline'; font-src *;"; + case network::mojom::CSPDirectiveName::RequireTrustedTypesFor: + FALLTHROUGH; + case network::mojom::CSPDirectiveName::TrustedTypes: + // TODO(crbug.com/1098685): Trusted Type remaining WebUI + // This removes require-trusted-types-for and trusted-types directives + // from the CSP header. + return std::string(); default: return content::URLDataSource::GetContentSecurityPolicy(directive); }
diff --git a/chrome/browser/extensions/api/messaging/native_messaging_apitest.cc b/chrome/browser/extensions/api/messaging/native_messaging_apitest.cc index 3f87fc8e..02e7ce7a 100644 --- a/chrome/browser/extensions/api/messaging/native_messaging_apitest.cc +++ b/chrome/browser/extensions/api/messaging/native_messaging_apitest.cc
@@ -74,20 +74,18 @@ INSTANTIATE_TEST_SUITE_P(EventPage, NativeMessagingLazyApiTest, ::testing::Values(ContextType::kEventPage)); -INSTANTIATE_TEST_SUITE_P(ServiceWorker, - NativeMessagingLazyApiTest, - ::testing::Values(ContextType::kServiceWorker)); +// Service Worker versions of these tests are flaky. +// See http://crbug.com/1111536 and http://crbug.com/1111337. +// INSTANTIATE_TEST_SUITE_P(ServiceWorker, +// NativeMessagingLazyApiTest, +// ::testing::Values(ContextType::kServiceWorker)); -// Flaky test: http://crbug.com/1111536 -IN_PROC_BROWSER_TEST_P(NativeMessagingLazyApiTest, - DISABLED_NativeMessagingBasic) { +IN_PROC_BROWSER_TEST_P(NativeMessagingLazyApiTest, NativeMessagingBasic) { ASSERT_NO_FATAL_FAILURE(test_host_.RegisterTestHost(false)); ASSERT_TRUE(RunLazyTest("native_messaging_lazy")) << message_; } -// Flaky test: http://crbug.com/1111337 -IN_PROC_BROWSER_TEST_P(NativeMessagingLazyApiTest, - DISABLED_UserLevelNativeMessaging) { +IN_PROC_BROWSER_TEST_P(NativeMessagingLazyApiTest, UserLevelNativeMessaging) { ASSERT_NO_FATAL_FAILURE(test_host_.RegisterTestHost(true)); ASSERT_TRUE(RunLazyTest("native_messaging_lazy")) << message_; }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 202bf00f..f17ef3a4 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -2624,6 +2624,11 @@ "expiry_milestone": 87 }, { + "name": "h264-decoder-is-buffer-complete-frame", + "owners": [ "jkardatzke", "mcasas" ], + "expiry_milestone": 89 + }, + { "name": "handwriting-gesture", "owners": [ "essential-inputs-team@google.com" ], "expiry_milestone": 90
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 0492393..daef70d 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1183,6 +1183,12 @@ const char kGooglePasswordManagerDescription[] = "Enables access to the Google Password Manager UI from Chrome."; +const char kH264DecoderBufferIsCompleteFrameName[] = + "H.264 Decoder Buffer Is Complete Frame"; +const char kH264DecoderBufferIsCompleteFrameDescription[] = + "H.264 decoder will treat each DecoderBuffer as a complete frame. Defaults " + "to enabled."; + const char kHandwritingGestureName[] = "Handwriting Gestures"; const char kHandwritingGestureDescription[] = "Enables handwriting gestures within the virtual keyboard. This will send "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 43b84ee..6ef9abcb 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -691,6 +691,9 @@ extern const char kGooglePasswordManagerName[]; extern const char kGooglePasswordManagerDescription[]; +extern const char kH264DecoderBufferIsCompleteFrameName[]; +extern const char kH264DecoderBufferIsCompleteFrameDescription[]; + extern const char kHandwritingGestureName[]; extern const char kHandwritingGestureDescription[];
diff --git a/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc b/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc index fd2e74a..e826f22 100644 --- a/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc +++ b/chrome/browser/media/kaleidoscope/kaleidoscope_ui.cc
@@ -220,6 +220,7 @@ untrusted_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::StyleSrc, "style-src chrome-untrusted://resources 'unsafe-inline' 'self';"); + untrusted_source->DisableTrustedTypesCSP(); // Allow workers from chrome-untrusted://kaleidoscope. untrusted_source->OverrideContentSecurityPolicy( @@ -285,6 +286,7 @@ html_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ChildSrc, "child-src chrome-untrusted://kaleidoscope;"); + html_source->DisableTrustedTypesCSP(); // Add a request filter to handle strings.js html_source->SetRequestFilter(base::BindRepeating(OnShouldHandleRequest),
diff --git a/chrome/browser/metrics/perf/perf_events_collector.cc b/chrome/browser/metrics/perf/perf_events_collector.cc index be7c35d..ae0b44a 100644 --- a/chrome/browser/metrics/perf/perf_events_collector.cc +++ b/chrome/browser/metrics/perf/perf_events_collector.cc
@@ -120,28 +120,29 @@ // TLB miss cycles for IvyBridge, Haswell, Broadwell and SandyBridge. const char kPerfITLBMissCyclesCmdIvyBridge[] = - "perf record -a -e itlb_misses.walk_duration -c 20001"; + "perf record -a -e itlb_misses.walk_duration -c 30001"; const char kPerfDTLBMissCyclesCmdIvyBridge[] = - "perf record -a -e dtlb_load_misses.walk_duration -c 20001"; + "perf record -a -e dtlb_load_misses.walk_duration -g -c 160001"; // TLB miss cycles for Skylake and Kabylake. const char kPerfITLBMissCyclesCmdSkylake[] = - "perf record -a -e itlb_misses.walk_pending -c 20001"; + "perf record -a -e itlb_misses.walk_pending -c 30001"; const char kPerfDTLBMissCyclesCmdSkylake[] = - "perf record -a -e dtlb_load_misses.walk_pending -c 20001"; + "perf record -a -e dtlb_load_misses.walk_pending -g -c 160001"; // TLB miss cycles for Atom, including Silvermont, Airmont and Goldmont. const char kPerfITLBMissCyclesCmdAtom[] = - "perf record -a -e page_walks.i_side_cycles -c 20001"; + "perf record -a -e page_walks.i_side_cycles -c 30001"; const char kPerfDTLBMissCyclesCmdAtom[] = - "perf record -a -e page_walks.d_side_cycles -c 20001"; + "perf record -a -e page_walks.d_side_cycles -c -g 160001"; -const char kPerfLLCMissesCmd[] = "perf record -a -e r412e -c 12007"; +const char kPerfLLCMissesCmd[] = "perf record -a -e r412e -g -c 30007"; // Precise events (request zero skid) for last level cache misses. -const char kPerfLLCMissesPreciseCmd[] = "perf record -a -e r412e:pp -c 12007"; +const char kPerfLLCMissesPreciseCmd[] = + "perf record -a -e r412e:pp -g -c 30007"; const std::vector<RandomSelector::WeightAndValue> GetDefaultCommands_x86_64( const CPUIdentity& cpuid) {
diff --git a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc index a93cda51..d859f82 100644 --- a/chrome/browser/metrics/perf/perf_events_collector_unittest.cc +++ b/chrome/browser/metrics/perf/perf_events_collector_unittest.cc
@@ -35,13 +35,14 @@ const char kPerfLBRCmd[] = "perf record -a -e r20c4 -b -c 200011"; const char kPerfLBRCmdAtom[] = "perf record -a -e rc4 -b -c 300001"; const char kPerfITLBMissCyclesCmdIvyBridge[] = - "perf record -a -e itlb_misses.walk_duration -c 20001"; + "perf record -a -e itlb_misses.walk_duration -c 30001"; const char kPerfITLBMissCyclesCmdSkylake[] = - "perf record -a -e itlb_misses.walk_pending -c 20001"; + "perf record -a -e itlb_misses.walk_pending -c 30001"; const char kPerfITLBMissCyclesCmdAtom[] = - "perf record -a -e page_walks.i_side_cycles -c 20001"; -const char kPerfLLCMissesCmd[] = "perf record -a -e r412e -c 12007"; -const char kPerfLLCMissesPreciseCmd[] = "perf record -a -e r412e:pp -c 12007"; + "perf record -a -e page_walks.i_side_cycles -c 30001"; +const char kPerfLLCMissesCmd[] = "perf record -a -e r412e -g -c 30007"; +const char kPerfLLCMissesPreciseCmd[] = + "perf record -a -e r412e:pp -g -c 30007"; // Converts a protobuf to serialized format as a byte vector. std::vector<uint8_t> SerializeMessageToVector(
diff --git a/chrome/browser/payments/payment_handler_enforce_full_delegation_browsertest.cc b/chrome/browser/payments/payment_handler_enforce_full_delegation_browsertest.cc index 9a7fb050..be14a65 100644 --- a/chrome/browser/payments/payment_handler_enforce_full_delegation_browsertest.cc +++ b/chrome/browser/payments/payment_handler_enforce_full_delegation_browsertest.cc
@@ -12,8 +12,8 @@ namespace { enum EnforceFullDelegationFlag { + DISABLED = 0, ENABLED, - DISABLED, }; class PaymentHandlerEnforceFullDelegationTest @@ -33,7 +33,6 @@ void SetUpOnMainThread() override { PaymentRequestPlatformBrowserTestBase::SetUpOnMainThread(); - NavigateTo("/enforce_full_delegation.com/index.html"); } private: @@ -41,7 +40,56 @@ }; IN_PROC_BROWSER_TEST_P(PaymentHandlerEnforceFullDelegationTest, - ShowPaymentSheetWhenEnabledRejectWhenDisabled) { + ShowPaymentSheetWhenOnlySomeAppsAreSkipped) { + std::string expected = "success"; + + std::string method_name1 = + https_server()->GetURL("a.com", "/method_manifest.json").spec(); + NavigateTo("a.com", "/enforce_full_delegation.com/index.html"); + EXPECT_EQ(expected, + content::EvalJs(GetActiveWebContents(), + content::JsReplace("install($1)", method_name1))); + EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), + "enableDelegations(['payerName'])")); + + std::string method_name2 = + https_server()->GetURL("b.com", "/method_manifest.json").spec(); + NavigateTo("b.com", "/enforce_full_delegation.com/index.html"); + EXPECT_EQ(expected, + content::EvalJs(GetActiveWebContents(), + content::JsReplace("install($1)", method_name2))); + EXPECT_EQ(expected, + content::EvalJs(GetActiveWebContents(), "enableDelegations([])")); + + EXPECT_EQ(expected, + content::EvalJs(GetActiveWebContents(), + content::JsReplace("addSupportedMethods([$1, $2])", + method_name1, method_name2))); + EXPECT_EQ(expected, + content::EvalJs( + GetActiveWebContents(), + "createPaymentRequestWithOptions({requestPayerName: true})")); + + // When enforcing full delegation: although b.com app is skipped for partial + // delegation, a.com app is still expected to appear in the payment sheet. + // When not enforcing: both apps are expected to appear in the sheet. So the + // sheet appears in both enabled and disabled cases. + ResetEventWaiterForSingleEvent(TestEvent::kAppListReady); + + EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), "show()")); + WaitForObservedEvent(); + + if (GetParam() == ENABLED) { + EXPECT_EQ(1u, test_controller()->app_descriptions().size()); + } else { + EXPECT_EQ(2u, test_controller()->app_descriptions().size()); + } +} + +IN_PROC_BROWSER_TEST_P(PaymentHandlerEnforceFullDelegationTest, + WhenEnabled_ShowPaymentSheet_WhenDisabled_Reject) { + NavigateTo("/enforce_full_delegation.com/index.html"); + std::string expected = "success"; EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), "install()")); EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(), @@ -63,7 +111,12 @@ WaitForObservedEvent(); if (GetParam() == ENABLED) { - EXPECT_GE(1u, test_controller()->app_descriptions().size()); + EXPECT_EQ(0u, test_controller()->app_descriptions().size()); + ExpectBodyContains( + "Skipping \"MaxPay\" for not providing all of the requested " + "PaymentOptions."); + } else { + EXPECT_EQ(1u, test_controller()->app_descriptions().size()); } } @@ -71,6 +124,6 @@ // features::kEnforceFullDelegation. INSTANTIATE_TEST_SUITE_P(All, PaymentHandlerEnforceFullDelegationTest, - ::testing::Values(ENABLED, DISABLED)); + ::testing::Values(DISABLED, ENABLED)); } // namespace } // namespace payments
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 7d57fe2..db1a822 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -877,12 +877,8 @@ IN_PROC_BROWSER_TEST_F(PDFExtensionJSTest, WhitespaceTitle) { RunTestsInJsModule("whitespace_title_test.js", "test-whitespace-title.pdf"); } -#if defined(OS_WIN) -#define MAYBE_PageChange DISABLED_PageChange -#else -#define MAYBE_PageChange PageChange -#endif -IN_PROC_BROWSER_TEST_F(PDFExtensionJSTest, MAYBE_PageChange) { + +IN_PROC_BROWSER_TEST_F(PDFExtensionJSTest, PageChange) { RunTestsInJsModule("page_change_test.js", "test-bookmarks.pdf"); }
diff --git a/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.cc b/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.cc index 40579b1..089ff9b 100644 --- a/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.cc +++ b/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.cc
@@ -4,8 +4,8 @@ #include "chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h" -#include "chrome/browser/prerender/prerender_link_manager.h" #include "chrome/browser/prerender/prerender_link_manager_factory.h" +#include "components/prerender/browser/prerender_link_manager.h" #include "content/public/browser/browser_context.h" namespace prerender {
diff --git a/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h b/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h index 10274c37..6fee8cf 100644 --- a/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h +++ b/chrome/browser/prerender/chrome_prerender_processor_impl_delegate.h
@@ -5,7 +5,7 @@ #ifndef CHROME_BROWSER_PRERENDER_CHROME_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ #define CHROME_BROWSER_PRERENDER_CHROME_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ -#include "chrome/browser/prerender/prerender_processor_impl_delegate.h" +#include "components/prerender/browser/prerender_processor_impl_delegate.h" namespace content { class BrowserContext;
diff --git a/chrome/browser/prerender/prerender_link_manager_factory.cc b/chrome/browser/prerender/prerender_link_manager_factory.cc index f872afa..c1e11665 100644 --- a/chrome/browser/prerender/prerender_link_manager_factory.cc +++ b/chrome/browser/prerender/prerender_link_manager_factory.cc
@@ -4,11 +4,11 @@ #include "chrome/browser/prerender/prerender_link_manager_factory.h" -#include "chrome/browser/prerender/prerender_link_manager.h" #include "chrome/browser/prerender/prerender_manager_factory.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "components/prerender/browser/prerender_link_manager.h" #include "components/prerender/browser/prerender_manager.h" namespace prerender {
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc index 4f2bc360..eb346cd 100644 --- a/chrome/browser/prerender/prerender_unittest.cc +++ b/chrome/browser/prerender/prerender_unittest.cc
@@ -28,7 +28,6 @@ #include "chrome/browser/predictors/loading_predictor_factory.h" #include "chrome/browser/predictors/loading_test_util.h" #include "chrome/browser/prerender/chrome_prerender_manager_delegate.h" -#include "chrome/browser/prerender/prerender_link_manager.h" #include "chrome/browser/prerender/prerender_test_utils.h" #include "chrome/common/chrome_features.h" #include "chrome/common/chrome_switches.h" @@ -40,6 +39,7 @@ #include "components/prerender/browser/prerender_contents.h" #include "components/prerender/browser/prerender_field_trial.h" #include "components/prerender/browser/prerender_handle.h" +#include "components/prerender/browser/prerender_link_manager.h" #include "components/prerender/browser/prerender_manager.h" #include "components/prerender/common/prerender_origin.h" #include "components/prerender/common/prerender_types.mojom.h"
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille_background.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille_background.js index 0c3a7f8..8af79b26 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille_background.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/braille_background.js
@@ -116,6 +116,16 @@ return this.translatorManager_; } + /** @override */ + panLeft() { + this.displayManager_.panLeft(); + } + + /** @override */ + panRight() { + this.displayManager_.panRight(); + } + /** * @param {!NavBraille} newContent * @param {?string} newContentId
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/braille/braille_display_manager.js b/chrome/browser/resources/chromeos/accessibility/chromevox/braille/braille_display_manager.js index d848806..7bf27996 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/braille/braille_display_manager.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/braille/braille_display_manager.js
@@ -382,10 +382,10 @@ onKeyEvent_(event) { switch (event.command) { case BrailleKeyCommand.PAN_LEFT: - this.panLeft_(); + this.panLeft(); break; case BrailleKeyCommand.PAN_RIGHT: - this.panRight_(); + this.panRight(); break; case BrailleKeyCommand.ROUTING: event.displayPosition = this.brailleToTextPosition_( @@ -403,9 +403,8 @@ * Shift the display by one full display size and refresh the content. * Sends the appropriate command if the display is already at the leftmost * position. - * @private */ - panLeft_() { + panLeft() { if (this.panStrategy_.previous()) { this.refresh_(); } else { @@ -418,9 +417,8 @@ * Shifts the display position to the right by one full display size and * refreshes the content. Sends the appropriate command if the display is * already at its rightmost position. - * @private */ - panRight_() { + panRight() { if (this.panStrategy_.next()) { this.refresh_(); } else {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/common/braille_interface.js b/chrome/browser/resources/chromeos/accessibility/chromevox/common/braille_interface.js index 9fcf1780..840627d 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/common/braille_interface.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/common/braille_interface.js
@@ -48,4 +48,14 @@ * @return {!BrailleDisplayState} The current display state. */ getDisplayState() {} + + /** + * Requests the braille display pan left. + */ + panLeft() {} + + /** + * Requests the braille display pan right. + */ + panRight() {} };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.css b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.css index 99df620b..d8144cbb 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.css +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.css
@@ -83,6 +83,26 @@ background-image: url(/chromevox/images/close-hover-19.png); } +#braille-pan-left { + /* Draw a left-facing triangle. */ + border-bottom: 8px solid transparent; + border-inline-end: 8px solid white; + border-top: 8px solid transparent; + height: 0; + margin: 10px; + width: 0; +} + +#braille-pan-right { + /* Draw a right-facing triangle. */ + border-bottom: 8px solid transparent; + border-inline-start: 8px solid white; + border-top: 8px solid transparent; + height: 0; + margin: 10px 0; + width: 0; +} + #caption { color: #fff; flex-grow: 1;
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html index a05884c0..b19e9a7 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.html
@@ -36,6 +36,14 @@ <table id="braille-table2"> </table> </div> + <div hidden id="braille-pan-left_title" class="i18n" + msgid="braille_pan_left"></div> + <button id="braille-pan-left" aria-labelledby="braille-pan-left_title"> + </button> + <div hidden id="braille-pan-right_title" class="i18n" + msgid="braille_pan_right"></div> + <button id="braille-pan-right" + aria-labelledby="braille-pan-right_title"></button> </div> </div> <div id="search-container">
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js index 54a7741..648ad34 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel.js
@@ -88,6 +88,18 @@ Panel.brailleTableElement_ = $('braille-table'); Panel.brailleTableElement2_ = $('braille-table2'); + /** @private {Element} */ + Panel.braillePanLeft_ = $('braille-pan-left'); + Panel.braillePanLeft_.addEventListener('click', () => { + chrome.extension.getBackgroundPage()['ChromeVox'].braille.panLeft(); + }, false); + + /** @private {Element} */ + Panel.braillePanRight_ = $('braille-pan-right'); + Panel.braillePanRight_.addEventListener('click', () => { + chrome.extension.getBackgroundPage()['ChromeVox'].braille.panRight(); + }, false); + /** @type {Panel.Mode} @private */ Panel.mode_ = Panel.Mode.COLLAPSED;
diff --git a/chrome/browser/resources/chromeos/accessibility/common/key_code.js b/chrome/browser/resources/chromeos/accessibility/common/key_code.js new file mode 100644 index 0000000..aa7e9832 --- /dev/null +++ b/chrome/browser/resources/chromeos/accessibility/common/key_code.js
@@ -0,0 +1,206 @@ +// 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. + +/** + * @fileoverview A centralized listing for keycodes used by accessibility + * component extensions. Largely taken from + * ui/events/keycodes/keyboard_codes_posix.h, but with specific edits for Chrome + * OS and accessibility. + */ + +goog.provide('KeyCode'); + +KeyCode = { + CANCEL: 3, + BACK: 8, + TAB: 9, + BACKTAB: 10, + CLEAR: 12, + RETURN: 13, + SHIFT: 16, + CONTROL: 17, + MENU: 18, + PAUSE: 19, + CAPITAL: 20, + KANA: 21, + HANGUL: 21, + PASTE: 22, + JUNJA: 23, + FINAL: 24, + HANJA: 25, + KANJI: 25, + ESCAPE: 27, + CONVERT: 28, + NONCONVERT: 29, + ACCEPT: 30, + MODECHANGE: 31, + SPACE: 32, + PRIOR: 33, + NEXT: 34, + END: 35, + HOME: 36, + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + SELECT: 41, + PRINT: 42, + EXECUTE: 43, + SNAPSHOT: 44, + INSERT: 45, + DELETE: 46, + HELP: 47, + ZERO: 48, + ONE: 49, + TWO: 50, + THREE: 51, + FOUR: 52, + FIVE: 53, + SIX: 54, + SEVEN: 55, + EIGHT: 56, + NINE: 57, + A: 65, + B: 66, + C: 67, + D: 68, + E: 69, + F: 70, + G: 71, + H: 72, + I: 73, + J: 74, + K: 75, + L: 76, + M: 77, + N: 78, + O: 79, + P: 80, + Q: 81, + R: 82, + S: 83, + T: 84, + U: 85, + V: 86, + W: 87, + X: 88, + Y: 89, + Z: 90, + SEARCH: 91, + RWIN: 92, + APPS: 93, + SLEEP: 95, + NUMPAD0: 96, + NUMPAD1: 97, + NUMPAD2: 98, + NUMPAD3: 99, + NUMPAD4: 100, + NUMPAD5: 101, + NUMPAD6: 102, + NUMPAD7: 103, + NUMPAD8: 104, + NUMPAD9: 105, + MULTIPLY: 106, + ADD: 107, + SEPARATOR: 108, + SUBTRACT: 109, + DECIMAL: 110, + DIVIDE: 111, + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F5: 116, + F6: 117, + F7: 118, + F8: 119, + F9: 120, + F10: 121, + F11: 122, + F12: 123, + F13: 124, + F14: 125, + F15: 126, + F16: 127, + F17: 128, + F18: 129, + F19: 130, + F20: 131, + F21: 132, + F22: 133, + F23: 134, + F24: 135, + NUMLOCK: 144, + SCROLL: 145, + LSHIFT: 160, + RSHIFT: 161, + LCONTROL: 162, + RCONTROL: 163, + LMENU: 164, + RMENU: 165, + BROWSER_BACK: 166, + BROWSER_FORWARD: 167, + BROWSER_REFRESH: 168, + BROWSER_STOP: 169, + BROWSER_SEARCH: 170, + BROWSER_FAVORITES: 171, + BROWSER_HOME: 172, + VOLUME_MUTE: 173, + VOLUME_DOWN: 174, + VOLUME_UP: 175, + MEDIA_NEXT_TRACK: 176, + MEDIA_PREV_TRACK: 177, + MEDIA_STOP: 178, + MEDIA_PLAY_PAUSE: 179, + MEDIA_LAUNCH_MAIL: 180, + MEDIA_LAUNCH_MEDIA_SELECT: 181, + MEDIA_LAUNCH_APP1: 182, + MEDIA_LAUNCH_APP2: 183, + OEM_1: 186, + OEM_PLUS: 187, + OEM_COMMA: 188, + OEM_MINUS: 189, + OEM_PERIOD: 190, + OEM_2: 191, + OEM_3: 192, + OEM_4: 219, + OEM_5: 220, + OEM_6: 221, + OEM_7: 222, + OEM_8: 223, + OEM_102: 226, + OEM_103: 227, + OEM_104: 228, + PROCESSKEY: 229, + PACKET: 231, + OEM_ATTN: 240, + OEM_FINISH: 241, + OEM_COPY: 242, + DBE_SBCSCHAR: 243, + DBE_DBCSCHAR: 244, + OEM_BACKTAB: 245, + ATTN: 246, + CRSEL: 247, + EXSEL: 248, + EREOF: 249, + PLAY: 250, + ZOOM: 251, + NONAME: 252, + PA1: 253, + OEM_CLEAR: 254, + UNKNOWN: 0, + WLAN: 151, + POWER: 152, + ASSISTANT: 153, + SETTINGS: 154, + PRIVACY_SCREEN_TOGGLE: 155, + BRIGHTNESS_DOWN: 216, + BRIGHTNESS_UP: 217, + KBD_BRIGHTNESS_DOWN: 218, + KBD_BRIGHTNESS_UP: 232, + ALTGR: 225, + COMPOSE: 230, + MEDIA_PLAY: 233, + MEDIA_PAUSE: 234, +};
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/combo_box_node.js b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/combo_box_node.js index 361e73e..a086b7a 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/combo_box_node.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/combo_box_node.js
@@ -25,6 +25,11 @@ } /** @override */ + isGroup() { + return false; + } + + /** @override */ performAction(action) { // The box of options that typically pops up with combo boxes is not // currently given a location in the automation tree, so we work around that
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/node_wrapper.js b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/node_wrapper.js index b92fb23b..852751e 100644 --- a/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/node_wrapper.js +++ b/chrome/browser/resources/chromeos/accessibility/switch_access/nodes/node_wrapper.js
@@ -20,9 +20,6 @@ /** @private {?SARootNode} */ this.parent_ = parent; - /** @private {boolean} */ - this.isGroup_ = SwitchAccessPredicate.isGroup(this.baseNode_, parent); - /** @private {RepeatedEventHandler} */ this.locationChangedHandler_; } @@ -105,7 +102,7 @@ /** @override */ isGroup() { - return this.isGroup_; + return SwitchAccessPredicate.isGroup(this.baseNode_, this.parent_); } /** @override */
diff --git a/chrome/browser/resources/identity_internals/identity_internals.js b/chrome/browser/resources/identity_internals/identity_internals.js index 5e3fd4f..06c211a7 100644 --- a/chrome/browser/resources/identity_internals/identity_internals.js +++ b/chrome/browser/resources/identity_internals/identity_internals.js
@@ -34,6 +34,8 @@ 'Extension Name', this.data_.extensionName, 'extension-name')); tbody.appendChild(this.createEntry_( 'Extension Id', this.data_.extensionId, 'extension-id')); + tbody.appendChild(this.createEntry_( + 'Account Id', this.data_.accountId, 'account-id')); tbody.appendChild( this.createEntry_('Token Status', this.data_.status, 'token-status')); tbody.appendChild(this.createEntry_(
diff --git a/chrome/browser/resources/kaleidoscope/OWNERS b/chrome/browser/resources/kaleidoscope/OWNERS new file mode 100644 index 0000000..d91fac21 --- /dev/null +++ b/chrome/browser/resources/kaleidoscope/OWNERS
@@ -0,0 +1,3 @@ +file://chrome/browser/media/kaleidoscope/OWNERS + +# COMPONENT: Internals>Media>UI>Kaleidoscope
diff --git a/chrome/browser/resources/kaleidoscope/toolbar.html b/chrome/browser/resources/kaleidoscope/toolbar.html index 1fe0da6..6f46adbd 100644 --- a/chrome/browser/resources/kaleidoscope/toolbar.html +++ b/chrome/browser/resources/kaleidoscope/toolbar.html
@@ -8,4 +8,4 @@ z-index: 1; } </style> -<cr-toolbar id="toolbar" show-menu></cr-toolbar> +<cr-toolbar id="toolbar" show-menu show-search="[[showSearch]]"></cr-toolbar>
diff --git a/chrome/browser/resources/kaleidoscope/toolbar.js b/chrome/browser/resources/kaleidoscope/toolbar.js index 7e2f8464..1e465e5 100644 --- a/chrome/browser/resources/kaleidoscope/toolbar.js +++ b/chrome/browser/resources/kaleidoscope/toolbar.js
@@ -14,6 +14,13 @@ static get template() { return html`{__html_template__}`; } + + static get properties() { + return { + // Controls whether the search field is shown. + showSearch: {type: Boolean, value: false}, + }; + } } customElements.define(
diff --git a/chrome/browser/resources/new_tab_page/logo.html b/chrome/browser/resources/new_tab_page/logo.html index 5ad96d0..1acc98d9 100644 --- a/chrome/browser/resources/new_tab_page/logo.html +++ b/chrome/browser/resources/new_tab_page/logo.html
@@ -115,7 +115,8 @@ hidden="[[!showAnimation_]]"> </ntp-iframe> <cr-button id="shareButton" title="$i18n{shareDoodle}" - on-click="onShareButtonClick_"> + on-click="onShareButtonClick_" + hidden="[[!imageDoodle_.shareButton]]"> <img id="shareButtonImage" src="[[imageDoodle_.shareButton.iconUrl.url]]"> </img>
diff --git a/chrome/browser/resources/new_tab_page/logo.js b/chrome/browser/resources/new_tab_page/logo.js index ee70378..70fd49ed 100644 --- a/chrome/browser/resources/new_tab_page/logo.js +++ b/chrome/browser/resources/new_tab_page/logo.js
@@ -204,8 +204,8 @@ /** @private */ onImageDoodleChange_() { - if (this.imageDoodle_) { - const shareButton = this.imageDoodle_.shareButton; + const shareButton = this.imageDoodle_ && this.imageDoodle_.shareButton; + if (shareButton) { const height = this.imageDoodle_.height; const width = this.imageDoodle_.width; this.updateStyles({ @@ -217,8 +217,6 @@ `${SHARE_BUTTON_SIZE_PX / width * 100}%`, '--ntp-logo-share-button-x': `${shareButton.x / width * 100}%`, '--ntp-logo-share-button-y': `${shareButton.y / height * 100}%`, - '--ntp-logo-box-color': - skColorToRgba(this.imageDoodle_.backgroundColor), }); } else { this.updateStyles({ @@ -227,6 +225,15 @@ '--ntp-logo-share-button-width': null, '--ntp-logo-share-button-x': null, '--ntp-logo-share-button-y': null, + }); + } + if (this.imageDoodle_) { + this.updateStyles({ + '--ntp-logo-box-color': + skColorToRgba(this.imageDoodle_.backgroundColor), + }); + } else { + this.updateStyles({ '--ntp-logo-box-color': null, }); }
diff --git a/chrome/browser/resources/settings/chromeos/device_page/pointers.js b/chrome/browser/resources/settings/chromeos/device_page/pointers.js index 539c321..0219721f 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/pointers.js +++ b/chrome/browser/resources/settings/chromeos/device_page/pointers.js
@@ -112,6 +112,6 @@ onReverseScrollRowClicked_: function() { this.setPrefValue( 'settings.touchpad.natural_scroll', - this.getPref('settings.touchpad.natural_scroll').value); + !this.getPref('settings.touchpad.natural_scroll').value); }, });
diff --git a/chrome/browser/resources/settings/safety_check_page/BUILD.gn b/chrome/browser/resources/settings/safety_check_page/BUILD.gn index 208ae2e..9e29620 100644 --- a/chrome/browser/resources/settings/safety_check_page/BUILD.gn +++ b/chrome/browser/resources/settings/safety_check_page/BUILD.gn
@@ -45,6 +45,7 @@ "../chrome_cleanup_page:chrome_cleanup_proxy", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/js:assert.m", + "//ui/webui/resources/js:load_time_data.m", "//ui/webui/resources/js:web_ui_listener_behavior.m", ] } @@ -63,6 +64,10 @@ js_library("safety_check_page") { deps = [ ":safety_check_browser_proxy", + + # This element is included on all platforms to ensure it's type checked (the element itself + # only exists in Windows). + ":safety_check_chrome_cleaner_child", ":safety_check_extensions_child", ":safety_check_passwords_child", ":safety_check_safe_browsing_child", @@ -77,10 +82,6 @@ "//ui/webui/resources/js:i18n_behavior.m", "//ui/webui/resources/js:web_ui_listener_behavior.m", ] - - if (is_win) { - deps += [ ":safety_check_chrome_cleaner_child" ] - } } js_library("safety_check_passwords_child") {
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_browser_proxy.js b/chrome/browser/resources/settings/safety_check_page/safety_check_browser_proxy.js index f400785..227552c 100644 --- a/chrome/browser/resources/settings/safety_check_page/safety_check_browser_proxy.js +++ b/chrome/browser/resources/settings/safety_check_page/safety_check_browser_proxy.js
@@ -113,23 +113,10 @@ * @enum {number} */ export const SafetyCheckChromeCleanerStatus = { - CHECKING: 0, - INITIAL: 1, - REPORTER_FOUND_NOTHING: 2, - REPORTER_FAILED: 3, - SCANNING_FOUND_NOTHING: 4, - SCANNING_FAILED: 5, - CONNECTION_LOST: 6, - USER_DECLINED_CLEANUP: 7, - CLEANING_FAILED: 8, - CLEANING_SUCCEEDED: 9, - CLEANER_DOWNLOAD_FAILED: 10, - REPORTER_RUNNING: 11, - SCANNING: 12, - INFECTED: 13, - CLEANING: 14, - REBOOT_REQUIRED: 15, - DISABLED_BY_ADMIN: 16, + HIDDEN: 0, + CHECKING: 1, + INFECTED: 2, + REBOOT_REQUIRED: 3, }; /** @interface */
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.html b/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.html index 93cfbc7..c1bab72 100644 --- a/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.html +++ b/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.html
@@ -1,10 +1,13 @@ -<settings-safety-check-child - id="safetyCheckChild" - icon-status="[[getIconStatus_(status_)]]" - label="$i18n{safetyCheckChromeCleanerPrimaryLabel}" - sub-label="[[displayString_]]" - button-label="[[getButtonLabel_(status_)]]" - button-aria-label="[[getButtonAriaLabel_(status_)]]" - button-class="[[getButtonClass_(status_)]]" - on-button-click="onButtonClick_"> -</settings-safety-check-child> +<template is="dom-if" if="[[showChild_(status_)]]" + restamp> + <settings-safety-check-child + id="safetyCheckChild" + icon-status="[[getIconStatus_(status_)]]" + label="$i18n{safetyCheckChromeCleanerPrimaryLabel}" + sub-label="[[displayString_]]" + button-label="[[getButtonLabel_(status_)]]" + button-aria-label="[[getButtonAriaLabel_(status_)]]" + button-class="[[getButtonClass_(status_)]]" + on-button-click="onButtonClick_"> + </settings-safety-check-child> +</template> \ No newline at end of file
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.js b/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.js index ebbc0f74..5b7372a 100644 --- a/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.js +++ b/chrome/browser/resources/settings/safety_check_page/safety_check_chrome_cleaner_child.js
@@ -10,6 +10,7 @@ import {assertNotReached} from 'chrome://resources/js/assert.m.js'; import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {ChromeCleanupProxy, ChromeCleanupProxyImpl} from '../chrome_cleanup_page/chrome_cleanup_proxy.js'; @@ -45,7 +46,7 @@ */ status_: { type: Number, - value: SafetyCheckChromeCleanerStatus.CHECKING, + value: SafetyCheckChromeCleanerStatus.HIDDEN, }, /** @@ -81,36 +82,29 @@ this.displayString_ = event.displayString; }, + + /** + * @return {boolean} + * @private + */ + showChild_: function() { + return this.status_ !== SafetyCheckChromeCleanerStatus.HIDDEN && + loadTimeData.valueExists('safetyCheckChromeCleanerChildEnabled') && + loadTimeData.getBoolean('safetyCheckChromeCleanerChildEnabled'); + }, + /** * @return {SafetyCheckIconStatus} * @private */ getIconStatus_: function() { switch (this.status_) { + case SafetyCheckChromeCleanerStatus.HIDDEN: case SafetyCheckChromeCleanerStatus.CHECKING: return SafetyCheckIconStatus.RUNNING; - case SafetyCheckChromeCleanerStatus.INITIAL: - case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED: - case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING: - case SafetyCheckChromeCleanerStatus.SCANNING: - // Safe states. - return SafetyCheckIconStatus.SAFE; - case SafetyCheckChromeCleanerStatus.REPORTER_FAILED: - case SafetyCheckChromeCleanerStatus.SCANNING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED: - // Error states. - case SafetyCheckChromeCleanerStatus.CLEANING: case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED: - case SafetyCheckChromeCleanerStatus.DISABLED_BY_ADMIN: - // Other states. return SafetyCheckIconStatus.INFO; - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: case SafetyCheckChromeCleanerStatus.INFECTED: - // Infected states. return SafetyCheckIconStatus.WARNING; default: assertNotReached(); @@ -123,26 +117,7 @@ */ getButtonLabel_: function() { switch (this.status_) { - case SafetyCheckChromeCleanerStatus.INITIAL: - case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED: - case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING: - case SafetyCheckChromeCleanerStatus.SCANNING: - // Safe states. - return this.i18n('privacyPageMore'); - case SafetyCheckChromeCleanerStatus.REPORTER_FAILED: - case SafetyCheckChromeCleanerStatus.SCANNING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED: - // Error states. - return this.i18n('passwordViewDetails'); - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: case SafetyCheckChromeCleanerStatus.INFECTED: - // Infected states. - case SafetyCheckChromeCleanerStatus.CLEANING: - // Cleaning in progress. return this.i18n('safetyCheckReview'); case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED: return this.i18n('chromeCleanupRestartButtonLabel'); @@ -157,26 +132,7 @@ */ getButtonAriaLabel_: function() { switch (this.status_) { - case SafetyCheckChromeCleanerStatus.INITIAL: - case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED: - case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING: - case SafetyCheckChromeCleanerStatus.SCANNING: - // Safe states. - return this.i18n('safetyCheckChromeCleanerMoreButtonAriaLabel'); - case SafetyCheckChromeCleanerStatus.REPORTER_FAILED: - case SafetyCheckChromeCleanerStatus.SCANNING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED: - // Error states. - return this.i18n('safetyCheckReviewErrorDetails'); - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: case SafetyCheckChromeCleanerStatus.INFECTED: - // Infected states. - case SafetyCheckChromeCleanerStatus.CLEANING: - // Cleaning in progress. return this.i18n('safetyCheckChromeCleanerButtonAriaLabel'); case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED: return this.i18n('chromeCleanupRestartButtonLabel'); @@ -191,8 +147,6 @@ */ getButtonClass_: function() { switch (this.status_) { - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: case SafetyCheckChromeCleanerStatus.INFECTED: case SafetyCheckChromeCleanerStatus.REBOOT_REQUIRED: return 'action-button'; @@ -206,24 +160,7 @@ // TODO(crbug.com/1087263): Add metrics for safety check CCT child user // actions. switch (this.status_) { - case SafetyCheckChromeCleanerStatus.INITIAL: - case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED: - case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING: - case SafetyCheckChromeCleanerStatus.SCANNING: - // Safe states. - case SafetyCheckChromeCleanerStatus.REPORTER_FAILED: - case SafetyCheckChromeCleanerStatus.SCANNING_FAILED: - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - case SafetyCheckChromeCleanerStatus.CLEANING_FAILED: - // Error states. - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: - case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED: case SafetyCheckChromeCleanerStatus.INFECTED: - // Infected states. - case SafetyCheckChromeCleanerStatus.CLEANING: - // Cleaning in progress. Router.getInstance().navigateTo( routes.CHROME_CLEANUP, /* dynamicParams= */ null, /* removeSearch= */ true);
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html index fce795c..cb53810 100644 --- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.html +++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.html
@@ -46,10 +46,7 @@ <settings-safety-check-extensions-child> </settings-safety-check-extensions-child> <if expr="_google_chrome and is_win"> - <template is="dom-if" if="[[showChromeCleanerChild_(parentStatus_)]]" - restamp> - <settings-safety-check-chrome-cleaner-child id="chromeCleanerChild"> - </settings-safety-check-chrome-cleaner-child> - </template> + <settings-safety-check-chrome-cleaner-child id="chromeCleanerChild"> + </settings-safety-check-chrome-cleaner-child> </if> </iron-collapse>
diff --git a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js index 500adff..cb7e141e 100644 --- a/chrome/browser/resources/settings/safety_check_page/safety_check_page.js +++ b/chrome/browser/resources/settings/safety_check_page/safety_check_page.js
@@ -25,7 +25,6 @@ import './safety_check_chrome_cleaner_child.js'; // </if> -import {assertNotReached} from 'chrome://resources/js/assert.m.js'; import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; import {IronA11yAnnouncer} from 'chrome://resources/polymer/v3_0/iron-a11y-announcer/iron-a11y-announcer.js'; @@ -182,13 +181,4 @@ shouldShowChildren_: function() { return this.parentStatus_ !== SafetyCheckParentStatus.BEFORE; }, - - /** - * @return {boolean} - * @private - */ - showChromeCleanerChild_: function() { - return loadTimeData.valueExists('safetyCheckChromeCleanerChildEnabled') && - loadTimeData.getBoolean('safetyCheckChromeCleanerChildEnabled'); - }, });
diff --git a/chrome/browser/resources/signin/profile_picker/BUILD.gn b/chrome/browser/resources/signin/profile_picker/BUILD.gn index 3ba44dc..25f9d0b 100644 --- a/chrome/browser/resources/signin/profile_picker/BUILD.gn +++ b/chrome/browser/resources/signin/profile_picker/BUILD.gn
@@ -29,6 +29,7 @@ deps = [ ":manage_profiles_browser_proxy", ":navigation_behavior", + ":profile_card", "//third_party/polymer/v3_0/components-chromium/iron-icon", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/cr_elements/cr_checkbox:cr_checkbox.m", @@ -54,6 +55,28 @@ ] } +js_library("profile_card") { + deps = [ + ":manage_profiles_browser_proxy", + ":profile_card_menu", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_elements/cr_button:cr_button.m", + ] +} + +js_library("profile_card_menu") { + deps = [ + ":manage_profiles_browser_proxy", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu.m", + "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m", + "//ui/webui/resources/js:assert.m", + "//ui/webui/resources/js:i18n_behavior.m", + "//ui/webui/resources/js:load_time_data.m", + "//ui/webui/resources/js:web_ui_listener_behavior.m", + ] +} + js_library("manage_profiles_browser_proxy") { deps = [ "//ui/webui/resources/js:cr.m" ] externs_list = [ "$externs_path/chrome_send.js" ] @@ -71,6 +94,7 @@ "profile_picker_app.js", "profile_picker_main_view.js", "profile_card.js", + "profile_card_menu.js", "profile_picker_shared_css.js", ] }
diff --git a/chrome/browser/resources/signin/profile_picker/manage_profiles_browser_proxy.js b/chrome/browser/resources/signin/profile_picker/manage_profiles_browser_proxy.js index 9ae932f..2ddbbb2 100644 --- a/chrome/browser/resources/signin/profile_picker/manage_profiles_browser_proxy.js +++ b/chrome/browser/resources/signin/profile_picker/manage_profiles_browser_proxy.js
@@ -9,7 +9,9 @@ * @typedef {{ * profilePath: string, * localProfileName: string, + * isSignedIn: Boolean, * gaiaName: string, + * userName: string, * avatarIcon: string, * }} */ @@ -54,6 +56,12 @@ */ getNewProfileSuggestedThemeInfo() {} + /** + * Retrieves profile statistics to be shown in the remove profile warning. + * @param {string} profilePath + */ + getProfileStatistics(profilePath) {} + /** Loads Google sign in page.*/ loadSignInProfileCreationFlow() {} } @@ -86,6 +94,11 @@ } /** @override */ + getProfileStatistics(profilePath) { + chrome.send('getProfileStatistics', [profilePath]); + } + + /** @override */ loadSignInProfileCreationFlow() { chrome.send('loadSignInProfileCreationFlow'); }
diff --git a/chrome/browser/resources/signin/profile_picker/profile_card.html b/chrome/browser/resources/signin/profile_picker/profile_card.html index 34fb89dd..91c6b031 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_card.html +++ b/chrome/browser/resources/signin/profile_picker/profile_card.html
@@ -33,6 +33,7 @@ </style> <cr-button on-click="onProfileClick_"> + <profile-card-menu profile-state="[[profileState]]"></profile-card-menu> <!-- TODO(msalama): Implement editing local profile name in place --> <div class="profile-info">[[profileState.localProfileName]]</div> <img class="profile-avatar" alt="" src="[[profileState.avatarIcon]]">
diff --git a/chrome/browser/resources/signin/profile_picker/profile_card.js b/chrome/browser/resources/signin/profile_picker/profile_card.js index b2b7d1ca..530e9f3f 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_card.js +++ b/chrome/browser/resources/signin/profile_picker/profile_card.js
@@ -3,6 +3,7 @@ // found in the LICENSE file. import 'chrome://resources/cr_elements/cr_button/cr_button.m.js'; +import './profile_card_menu.js'; import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {ManageProfilesBrowserProxy, ManageProfilesBrowserProxyImpl, ProfileState} from './manage_profiles_browser_proxy.js'; @@ -16,7 +17,7 @@ /** @type {!ProfileState} */ profileState: { type: Object, - } + }, }, /** @private {ManageProfilesBrowserProxy} */ @@ -33,5 +34,4 @@ this.manageProfilesBrowserProxy_.launchSelectedProfile( this.profileState.profilePath); }, - });
diff --git a/chrome/browser/resources/signin/profile_picker/profile_card_menu.html b/chrome/browser/resources/signin/profile_picker/profile_card_menu.html new file mode 100644 index 0000000..9a90116 --- /dev/null +++ b/chrome/browser/resources/signin/profile_picker/profile_card_menu.html
@@ -0,0 +1,114 @@ +<style include="cr-icons profile-picker-shared"> + #moreActionsButton { + --cr-icon-button-icon-size: 14px; + --cr-icon-button-margin-end: 0; + --cr-icon-button-margin-start: 0; + --cr-icon-button-size: 24px; + position: absolute; + right: 4px; + top: 4px; + } + + cr-action-menu { + font-weight: normal; + } + + #removeActionMenu { + pointer-events: none; + } + + #removeConfirmation { + margin-top: 16px; + pointer-events: none; + width: 234px; + } + + #removeConfirmation > * { + margin: 0 16px 16px 16px; + } + + .header { + font-size: 1.17em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .key-text { + font-weight: 500; + } + + .statistics { + border: 1px solid var(--google-grey-refresh-100); + border-radius: 4px; + box-sizing: border-box; + padding: 12px 16px 16px 12px; + width: -webkit-fill-available; + } + + .category { + text-align: start; + } + + .count { + color: var(--google-grey-refresh-500); + text-align: end; + } + + #removeConfirmationButton { + --active-shadow-action-rgb: var(--google-red-500-rgb); + --bg-action: var(--google-red-700); + --hover-bg-action: rgba(var(--google-red-700-rgb), .9); + --hover-shadow-action-rgb: var(--google-red-500-rgb); + background-color: var(--google-red-700); + border-radius: 4px; + color: var(--ink-color-action); + font-weight: 500; + left: 50%; + margin-bottom: 16px; + pointer-events: auto; + transform: translateX(-50%); + width: 111px; + } + + #removeConfirmationButton:hover { + background-color: var(--hover-bg-action); + } +</style> + +<cr-icon-button class="icon-more-vert" id="moreActionsButton" + on-click="onMoreActionsButtonClicked_" title$="[[profileMenuText_]]" + aria-label$="[[profileMenuText_]]"> +</cr-icon-button> + +<cr-action-menu id="actionMenu" role-description="menu"> + <button class="dropdown-item" on-click="onRemoveButtonClicked_"> + $i18n{profileMenuRemoveText} + </button> +</cr-action-menu> + +<cr-action-menu id="removeActionMenu" role-description="menu"> + <div id="removeConfirmation"> + <div class="header"> + $i18n{profileMenuRemoveText} + <span class="key-text">[[profileState.localProfileName]]</span> + </div> + <div> + [[removeWarningText_]] + <span class="key-text">[[profileState.userName]]</span> + </div> + <table class="statistics"> + <template is="dom-repeat" items="[[profileStatistics_]]"> + <tr> + <td class="category">[[getProfileStatisticText_(item)]]</td> + <td class="count"> + [[getProfileStatisticCount_(item, statistics_)]]</td> + <tr> + </template> + </table> + </div> + <cr-button id="removeConfirmationButton"class="dropdown-item action-button" + on-click="onRemoveComfirationClicked_"> + $i18n{profileMenuRemoveText} + </cr-button> +</cr-action-menu>
diff --git a/chrome/browser/resources/signin/profile_picker/profile_card_menu.js b/chrome/browser/resources/signin/profile_picker/profile_card_menu.js new file mode 100644 index 0000000..0a2358d --- /dev/null +++ b/chrome/browser/resources/signin/profile_picker/profile_card_menu.js
@@ -0,0 +1,210 @@ +// 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. + +import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js'; +import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.m.js'; +import 'chrome://resources/cr_elements/cr_icons_css.m.js'; +import 'chrome://resources/cr_elements/shared_vars_css.m.js'; +import './profile_picker_shared_css.js'; + +import {assertNotReached} from 'chrome://resources/js/assert.m.js'; +import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; +import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js'; +import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import './strings.js'; + +import {ManageProfilesBrowserProxy, ManageProfilesBrowserProxyImpl, ProfileState} from './manage_profiles_browser_proxy.js'; + +/** + * @typedef {{ + * BrowsingHistory: number, + * Passwords: number, + * Bookmarks: number, + * Autofill: number, + * }} + */ +let Statistics; + +/** + * This is the data structure sent back and forth between C++ and JS. + * @typedef {{ + * profilePath: string, + * statistics: Statistics, + * }} + */ +let StatisticsResult; + + +/** + * Profile statistics data types. + * @enum {string} + */ +const ProfileStatistics = { + BROWSING_HISTORY: 'BrowsingHistory', + PASSWORDS: 'Passwords', + BOOKMARKS: 'Bookmarks', + AUTOFILL: 'Autofill', +}; + +Polymer({ + is: 'profile-card-menu', + + _template: html`{__html_template__}`, + + behaviors: [I18nBehavior, WebUIListenerBehavior], + + properties: { + /** @type {!ProfileState} */ + profileState: { + type: Object, + }, + + /** + * Results of profile statistics, keyed by the suffix of the corresponding + * data type, as reported by the C++ side. + * @private {!Object<number>} + */ + statistics_: { + type: Object, + // Will be filled as results are reported. + value() { + return {}; + } + }, + + /** + * List of selected data types. + * @private {!Array<string>} + */ + profileStatistics_: { + type: Object, + value: [ + ProfileStatistics.BROWSING_HISTORY, ProfileStatistics.PASSWORDS, + ProfileStatistics.BOOKMARKS, ProfileStatistics.AUTOFILL + ], + }, + + profileMenuText_: { + type: String, + computed: 'computeProfileMenuText_(profileState)', + }, + + removeWarningText_: { + type: String, + computed: 'computeRemoveWarningText_(profileState)', + }, + }, + + /** @private {ManageProfilesBrowserProxy} */ + manageProfilesBrowserProxy_: null, + + /** @override */ + ready() { + this.manageProfilesBrowserProxy_ = + ManageProfilesBrowserProxyImpl.getInstance(); + }, + + /** @override */ + attached() { + this.addWebUIListener( + 'profile-statistics-received', + this.handleProfileStatsReceived_.bind(this)); + }, + + /** + * @return {string} + * @private + */ + computeProfileMenuText_() { + return this.i18n('profileMenuName', this.profileState.localProfileName); + }, + + /** + * @return {string} + * @private + */ + computeRemoveWarningText_() { + if (this.profileState.isSignedIn) { + return this.i18n('removeWarningSignedInProfile'); + } + return this.i18n('removeWarningLocalProfile'); + }, + + /** + * @param {!Event} e + * @private + */ + onMoreActionsButtonClicked_(e) { + e.stopPropagation(); + e.preventDefault(); + this.$.actionMenu.showAt(this.$.moreActionsButton); + }, + + /** + * @param {!Event} e + * @private + */ + onRemoveButtonClicked_(e) { + e.stopPropagation(); + e.preventDefault(); + this.dataCounters_ = {}; + this.manageProfilesBrowserProxy_.getProfileStatistics( + this.profileState.profilePath); + this.$.actionMenu.close(); + this.$.removeActionMenu.showAt(this.$.moreActionsButton); + }, + + /** + * @param {!StatisticsResult} result + * @private + */ + handleProfileStatsReceived_(result) { + if (result.profilePath !== this.profileState.profilePath) { + return; + } + this.statistics_ = result.statistics; + }, + + /** + * @param {string} dataType + * @return {string} + * @private + */ + getProfileStatisticText_(dataType) { + switch (dataType) { + case ProfileStatistics.BROWSING_HISTORY: + return this.i18n('removeWarningHistory'); + case ProfileStatistics.PASSWORDS: + return this.i18n('removeWarningPasswords'); + case ProfileStatistics.BOOKMARKS: + return this.i18n('removeWarningBookmarks'); + case ProfileStatistics.AUTOFILL: + return this.i18n('removeWarningAutofill'); + default: + assertNotReached(); + } + }, + + /** + * @param {string} dataType + * @return {string} + * @private + */ + getProfileStatisticCount_(dataType) { + const count = this.statistics_[dataType]; + return (count === undefined) ? this.i18n('removeWarningCalculating') : + count.toString(); + }, + + /** + * @param {!Event} e + * @private + */ + onRemoveComfirationClicked_(e) { + e.stopPropagation(); + e.preventDefault(); + // TODO(crbug.com/1063856): Add implementation. + }, +});
diff --git a/chrome/browser/resources/signin/profile_picker/profile_picker_resources.grd b/chrome/browser/resources/signin/profile_picker/profile_picker_resources.grd index 2d1d1ca..bdb33ea0 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_picker_resources.grd +++ b/chrome/browser/resources/signin/profile_picker/profile_picker_resources.grd
@@ -33,7 +33,10 @@ use_base_dir="false" type="BINDATA"/> <include name="IDR_PROFILE_PICKER_PROFILE_CARD_JS" file="${root_gen_dir}/chrome/browser/resources/signin/profile_picker/profile_card.js" - use_base_dir="false" type="BINDATA" preprocess="true"/> + use_base_dir="false" type="BINDATA"/> + <include name="IDR_PROFILE_PICKER_PROFILE_CARD_MENU_JS" + file="${root_gen_dir}/chrome/browser/resources/signin/profile_picker/profile_card_menu.js" + use_base_dir="false" type="BINDATA"/> <include name="IDR_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_JS" file="${root_gen_dir}/chrome/browser/resources/signin/profile_picker/profile_creation_flow/profile_type_choice.js" use_base_dir="false" type="BINDATA"/>
diff --git a/chrome/browser/resources/signin/profile_picker/profile_picker_shared_css.html b/chrome/browser/resources/signin/profile_picker/profile_picker_shared_css.html index 79857699..6d0c8ee5 100644 --- a/chrome/browser/resources/signin/profile_picker/profile_picker_shared_css.html +++ b/chrome/browser/resources/signin/profile_picker/profile_picker_shared_css.html
@@ -1,9 +1,14 @@ <template> <style> + html { + font-family: roboto; + } + h2 { font-size: 1.85em; font-weight: normal; } + h3 { color: var(--google-grey-refresh-700); font-weight: normal;
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc index 3327ac76..1db9d02 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.cc
@@ -113,7 +113,7 @@ binary_fcm_service_(BinaryFCMService::Create(profile)), profile_(profile), weakptr_factory_(this) { - DCHECK(base::FeatureList::IsEnabled(kSafeBrowsingSeparateNetworkContexts)); + DCHECK(base::FeatureList::IsEnabled(kSafeBrowsingRemoveCookies)); } BinaryUploadService::BinaryUploadService(
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.cc b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.cc index 213b918..84c4260 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.cc
@@ -36,7 +36,7 @@ KeyedService* BinaryUploadServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { Profile* profile = Profile::FromBrowserContext(context); - if (base::FeatureList::IsEnabled(kSafeBrowsingSeparateNetworkContexts)) { + if (base::FeatureList::IsEnabled(kSafeBrowsingRemoveCookies)) { return new BinaryUploadService(profile); } else { return new BinaryUploadService(
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/multipart_uploader.cc b/chrome/browser/safe_browsing/cloud_content_scanning/multipart_uploader.cc index 1f4aa00f4b..ff84f971 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/multipart_uploader.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/multipart_uploader.cc
@@ -86,7 +86,7 @@ resource_request->method = "POST"; resource_request->headers.SetHeader("X-Goog-Upload-Protocol", "multipart"); - if (base::FeatureList::IsEnabled(kSafeBrowsingSeparateNetworkContexts)) { + if (base::FeatureList::IsEnabled(kSafeBrowsingRemoveCookies)) { resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; }
diff --git a/chrome/browser/safe_browsing/v4_embedded_test_server_browsertest.cc b/chrome/browser/safe_browsing/v4_embedded_test_server_browsertest.cc index f354a08..70000a14 100644 --- a/chrome/browser/safe_browsing/v4_embedded_test_server_browsertest.cc +++ b/chrome/browser/safe_browsing/v4_embedded_test_server_browsertest.cc
@@ -169,21 +169,19 @@ EXPECT_FALSE(IsShowingInterstitial(contents)); } -class V4EmbeddedTestServerWithSeparateNetworkContexts +class V4EmbeddedTestServerWithoutCookies : public V4EmbeddedTestServerBrowserTest { public: - V4EmbeddedTestServerWithSeparateNetworkContexts() { + V4EmbeddedTestServerWithoutCookies() { scoped_feature_list_.Reset(); - scoped_feature_list_.InitWithFeatures( - {kSafeBrowsingSeparateNetworkContexts}, {}); + scoped_feature_list_.InitWithFeatures({kSafeBrowsingRemoveCookies}, {}); } private: base::test::ScopedFeatureList scoped_feature_list_; }; -IN_PROC_BROWSER_TEST_F(V4EmbeddedTestServerWithSeparateNetworkContexts, - DoesNotSaveCookies) { +IN_PROC_BROWSER_TEST_F(V4EmbeddedTestServerWithoutCookies, DoesNotSaveCookies) { ASSERT_TRUE(secure_embedded_test_server_->InitializeAndListen()); const char kMalwarePage[] = "/safe_browsing/malware.html"; const GURL bad_url = secure_embedded_test_server_->GetURL(kMalwarePage);
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc index 153db81e..0fafb9b3 100644 --- a/chrome/browser/ssl/ssl_browsertest.cc +++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -6278,7 +6278,8 @@ policy::PolicyMap policies; policies.Set(policy::key::kInsecureFormsWarningsEnabled, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, - policy::POLICY_SOURCE_CLOUD, base::Value(false), nullptr); + policy::POLICY_SOURCE_CLOUD, + std::make_unique<base::Value>(false), nullptr); UpdateProviderPolicy(policies); // Pref should now be set to false. EXPECT_FALSE(browser()->profile()->GetPrefs()->GetBoolean(
diff --git a/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc index c0a65c94..00df4ea 100644 --- a/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc +++ b/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc
@@ -65,7 +65,8 @@ policy::PolicyMap policy; policy.Set(policy::key::kDefaultPopupsSetting, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, - policy::POLICY_SOURCE_CLOUD, base::Value(popup_setting), + policy::POLICY_SOURCE_CLOUD, + std::make_unique<base::Value>(popup_setting), nullptr /* external_data_fetcher */); provider_.UpdateChromePolicy(policy); }
diff --git a/chrome/browser/ui/managed_ui_browsertest.cc b/chrome/browser/ui/managed_ui_browsertest.cc index 5b2a80b5..0982201 100644 --- a/chrome/browser/ui/managed_ui_browsertest.cc +++ b/chrome/browser/ui/managed_ui_browsertest.cc
@@ -43,7 +43,7 @@ policy::PolicyMap policy_map; policy_map.Set("test-policy", policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_PLATFORM, - base::Value("hello world"), nullptr); + std::make_unique<base::Value>("hello world"), nullptr); provider()->UpdateChromePolicy(policy_map); #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc index 73eb5ccc..e1623447 100644 --- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc +++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
@@ -887,7 +887,7 @@ policy::PolicyMap policies; policies.Set("DefaultSearchProviderEnabled", policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_PLATFORM, - base::Value(false), nullptr); + std::make_unique<base::Value>(false), nullptr); policy_provider()->UpdateChromePolicy(policies); base::RunLoop().RunUntilIdle();
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc index 4e9553003..d09a67a 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -1528,8 +1528,9 @@ policy_map_.Set(policy::key::kRestoreOnStartup, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_CLOUD, base::Value(4), nullptr); - base::Value url_list(base::Value::Type::LIST); - url_list.Append(embedded_test_server()->GetURL("/title1.html").spec()); + auto url_list = std::make_unique<base::Value>(base::Value::Type::LIST); + url_list->Append( + base::Value(embedded_test_server()->GetURL("/title1.html").spec())); policy_map_.Set(policy::key::kRestoreOnStartupURLs, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_CLOUD, std::move(url_list), nullptr);
diff --git a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc index 7540cfd9..e5d3393 100644 --- a/chrome/browser/ui/startup/startup_browser_policy_unittest.cc +++ b/chrome/browser/ui/startup/startup_browser_policy_unittest.cc
@@ -99,7 +99,7 @@ Args... args) { policy_map.Set(policy, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, - base::Value(args...), nullptr); + std::make_unique<base::Value>(args...), nullptr); } template <typename... Args>
diff --git a/chrome/browser/ui/views/download/download_item_view.cc b/chrome/browser/ui/views/download/download_item_view.cc index 3d66176..ec056947 100644 --- a/chrome/browser/ui/views/download/download_item_view.cc +++ b/chrome/browser/ui/views/download/download_item_view.cc
@@ -315,6 +315,7 @@ dropdown_button->SetBorder(views::CreateEmptyBorder(gfx::Insets(10))); dropdown_button->set_has_ink_drop_action_on_click(false); dropdown_button->SetFocusForPlatform(); + dropdown_button->SizeToPreferredSize(); dropdown_button_ = AddChildView(std::move(dropdown_button)); complete_animation_.SetSlideDuration(base::TimeDelta::FromMilliseconds(2500)); @@ -335,78 +336,42 @@ View::Layout(); open_button_->SetBoundsRect(GetLocalBounds()); + dropdown_button_->SetPosition( + gfx::Point(width() - kEndPadding - dropdown_button_->width(), + CenterY(dropdown_button_->height()))); - if (is_download_warning(mode_)) { - gfx::Point child_origin( - kStartPadding + GetIcon().Size().width() + kStartPadding, - CenterY(warning_label_->height())); - warning_label_->SetPosition(child_origin); - - child_origin.Offset(warning_label_->width() + kLabelPadding, 0); - gfx::Size button_size = GetButtonSize(); - child_origin.set_y(CenterY(button_size.height())); - if (save_button_->GetVisible()) { - save_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); - child_origin.Offset(button_size.width() + kSaveDiscardButtonPadding, 0); - } - if (discard_button_->GetVisible()) - discard_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); - if (scan_button_->GetVisible()) - scan_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); - } else if (is_mixed_content(mode_)) { - gfx::Point child_origin( - kStartPadding + GetIcon().Size().width() + kStartPadding, - CenterY(warning_label_->height())); - warning_label_->SetPosition(child_origin); - - child_origin.Offset(warning_label_->width() + kLabelPadding, 0); - gfx::Size button_size = GetButtonSize(); - child_origin.set_y(CenterY(button_size.height())); - if (save_button_->GetVisible()) - save_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); - if (discard_button_->GetVisible()) - discard_button_->SetBoundsRect(gfx::Rect(child_origin, button_size)); - } else if (mode_ == Mode::kDeepScanning) { - gfx::Point child_origin( - kStartPadding + GetIcon().Size().width() + kStartPadding, - CenterY(deep_scanning_label_->height())); - deep_scanning_label_->SetPosition(child_origin); - - if (open_now_button_->GetVisible()) { - child_origin.set_y( - CenterY(open_now_button_->GetPreferredSize().height())); - child_origin.Offset(deep_scanning_label_->width() + kLabelPadding, 0); - open_now_button_->SetBoundsRect( - gfx::Rect(child_origin, open_now_button_->GetPreferredSize())); - } - } else { - const int mirrored_x = GetMirroredXWithWidthInView( - kStartPadding + kProgressIndicatorSize + kProgressTextPadding, - kTextWidth); - + if (mode_ == Mode::kNormal) { + const int text_x = + kStartPadding + kProgressIndicatorSize + kProgressTextPadding; + const int text_end = dropdown_button_->GetVisible() + ? dropdown_button_->bounds().right() + : (dropdown_button_->x() - kEndPadding); + const int text_width = text_end - text_x; int text_height = file_name_label_->GetLineHeight(); if (!status_label_->GetText().empty()) text_height += status_label_->GetLineHeight(); - const int file_name_y = CenterY(text_height); - file_name_label_->SetBounds(mirrored_x, file_name_y, kTextWidth, + + file_name_label_->SetBounds(text_x, CenterY(text_height), text_width, file_name_label_->GetPreferredSize().height()); + status_label_->SetBounds( + text_x, file_name_label_->y() + file_name_label_->GetLineHeight(), + text_width, status_label_->GetPreferredSize().height()); + } else { + auto* const label = + (mode_ == Mode::kDeepScanning) ? deep_scanning_label_ : warning_label_; + label->SetPosition(gfx::Point(kStartPadding * 2 + GetIcon().Size().width(), + CenterY(label->height()))); - const int status_y = file_name_y + file_name_label_->GetLineHeight(); - const bool should_expand_for_status_text = - (model_->GetDangerType() == - download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_SAFE); - const gfx::Size status_size = status_label_->GetPreferredSize(); - const int status_width = - should_expand_for_status_text ? status_size.width() : kTextWidth; - status_label_->SetBoundsRect( - gfx::Rect(mirrored_x, status_y, status_width, status_size.height())); - } - - if (mode_ != Mode::kDangerous) { - dropdown_button_->SizeToPreferredSize(); - dropdown_button_->SetPosition( - gfx::Point(width() - dropdown_button_->width() - kEndPadding, - CenterY(dropdown_button_->height()))); + const gfx::Size button_size = GetButtonSize(); + gfx::Rect button_bounds(gfx::Point(label->bounds().right() + kLabelPadding, + CenterY(button_size.height())), + button_size); + for (auto* button : + {save_button_, discard_button_, scan_button_, open_now_button_}) { + button->SetBoundsRect(button_bounds); + if (button->GetVisible()) + button_bounds.set_x(button_bounds.right() + kSaveDiscardButtonPadding); + } } } @@ -583,54 +548,46 @@ } gfx::Size DownloadItemView::CalculatePreferredSize() const { - int width = 0; - // We set the height to the height of two rows or text plus margins. - int child_height = - file_name_label_->GetLineHeight() + status_label_->GetLineHeight(); + int height, + width = dropdown_button_->GetVisible() + ? (dropdown_button_->GetPreferredSize().width() + kEndPadding) + : 0; - if (has_warning_label(mode_)) { - // Width. - const gfx::Size icon_size = GetIcon().Size(); - width = kStartPadding + icon_size.width() + kStartPadding + - warning_label_->width() + kLabelPadding; - gfx::Size button_size = GetButtonSize(); - if (save_button_->GetVisible() && discard_button_->GetVisible()) - width += button_size.width() + kSaveDiscardButtonPadding; - width += button_size.width() + kEndPadding; - - // Height: make sure the button fits and the warning icon fits. - child_height = - std::max({child_height, button_size.height(), icon_size.height()}); - } else if (mode_ == Mode::kDeepScanning) { - const gfx::Size icon_size = GetIcon().Size(); - width = kStartPadding + icon_size.width() + kStartPadding + - deep_scanning_label_->width() + kLabelPadding; - if (open_now_button_->GetVisible()) { - width += open_now_button_->GetPreferredSize().width(); - // Height: make sure the button fits and the warning icon fits. - child_height = - std::max({child_height, open_now_button_->GetPreferredSize().height(), - icon_size.height()}); - width += kEndPadding; - } - } else { - int status_width = kTextWidth; + if (mode_ == Mode::kNormal) { + int label_width = + std::max(file_name_label_->GetPreferredSize().width(), kTextWidth); if (model_->GetDangerType() == download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_SAFE) { - status_width = - std::max(status_width, status_label_->GetPreferredSize().width()); + label_width = + std::max(label_width, status_label_->GetPreferredSize().width()); } - width = kStartPadding + kProgressIndicatorSize + kProgressTextPadding + - status_width + kEndPadding; + width += kStartPadding + kProgressIndicatorSize + kProgressTextPadding + + label_width + kEndPadding; + height = file_name_label_->GetLineHeight() + status_label_->GetLineHeight(); + } else { + auto* const label = + (mode_ == Mode::kDeepScanning) ? deep_scanning_label_ : warning_label_; + height = label->GetLineHeight() * 2; + const gfx::Size icon_size = GetIcon().Size(); + width += + kStartPadding * 2 + icon_size.width() + label->width() + kEndPadding; + height = std::max(height, icon_size.height()); + const int visible_buttons = util::ranges::count( + std::array<const views::View*, 4>{save_button_, discard_button_, + scan_button_, open_now_button_}, + true, &views::View::GetVisible); + if (visible_buttons > 0) { + const gfx::Size button_size = GetButtonSize(); + width += kLabelPadding + button_size.width() * visible_buttons + + kSaveDiscardButtonPadding * (visible_buttons - 1); + height = std::max(height, button_size.height()); + } } - if (model_->ShouldShowDropdown()) - width += dropdown_button_->GetPreferredSize().width(); - // The normal height of the item which may be exceeded if text is large. constexpr int kDefaultDownloadItemHeight = 48; return gfx::Size(width, std::max(kDefaultDownloadItemHeight, - 2 * kMinimumVerticalPadding + child_height)); + 2 * kMinimumVerticalPadding + height)); } void DownloadItemView::OnPaintBackground(gfx::Canvas* canvas) { @@ -1150,6 +1107,9 @@ } gfx::Size DownloadItemView::GetButtonSize() const { + if (mode_ == Mode::kDeepScanning) + return open_now_button_->GetPreferredSize(); + gfx::Size size; if (discard_button_->GetVisible()) size.SetToMax(discard_button_->GetPreferredSize());
diff --git a/chrome/browser/ui/views/extensions/extensions_menu_button.cc b/chrome/browser/ui/views/extensions/extensions_menu_button.cc index 63497c8..a98ed3e 100644 --- a/chrome/browser/ui/views/extensions/extensions_menu_button.cc +++ b/chrome/browser/ui/views/extensions/extensions_menu_button.cc
@@ -26,7 +26,7 @@ ExtensionsMenuItemView* parent, ToolbarActionViewController* controller, bool allow_pinning) - : views::LabelButton(this, base::string16(), views::style::CONTEXT_BUTTON), + : views::LabelButton(this), browser_(browser), parent_(parent), controller_(controller),
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc index 41f3328..3190247 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -129,16 +129,14 @@ IconLabelBubbleView::IconLabelBubbleView(const gfx::FontList& font_list, Delegate* delegate) - : LabelButton(nullptr, base::string16()), - delegate_(delegate), - separator_view_(new SeparatorView(this)) { + : delegate_(delegate), + separator_view_(AddChildView(std::make_unique<SeparatorView>(this))) { DCHECK(delegate_); SetFontList(font_list); SetHorizontalAlignment(gfx::ALIGN_LEFT); separator_view_->SetVisible(ShouldShowSeparator()); - AddChildView(separator_view_); set_ink_drop_visible_opacity( GetOmniboxStateOpacity(OmniboxPartState::SELECTED));
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc index fbfda14..366c3a6c 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.cc
@@ -237,6 +237,13 @@ return static_cast<OmniboxRowView*>(children()[i])->result_view(); } +OmniboxResultView* OmniboxPopupContentsView::GetSelectedResultView() { + size_t selected_line = model_->selected_line(); + if (selected_line == OmniboxPopupModel::kNoMatch) + return nullptr; + return result_view_at(selected_line); +} + bool OmniboxPopupContentsView::InExplicitExperimentalKeywordMode() { return model_->edit_model()->InExplicitExperimentalKeywordMode(); } @@ -590,12 +597,6 @@ node_data->role = ax::mojom::Role::kListBox; if (IsOpen()) { node_data->AddState(ax::mojom::State::kExpanded); - OmniboxResultView* selected_result_view = - result_view_at(model_->selected_line()); - if (selected_result_view) - node_data->AddIntAttribute( - ax::mojom::IntAttribute::kActivedescendantId, - selected_result_view->GetViewAccessibility().GetUniqueId().Get()); } else { node_data->AddState(ax::mojom::State::kCollapsed); node_data->AddState(ax::mojom::State::kInvisible);
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h index 97c28d5..2c6dbdac 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h
@@ -63,6 +63,9 @@ // Gets the OmniboxResultView for match |i|. OmniboxResultView* result_view_at(size_t i); + // Currently selected OmniboxResultView, or nullptr if nothing is selected. + OmniboxResultView* GetSelectedResultView(); + // Returns whether we're in experimental keyword mode and the input gives // sufficient confidence that the user wants keyword mode. bool InExplicitExperimentalKeywordMode();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc index 4161111..c25350c 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_popup_contents_view_browsertest.cc
@@ -32,6 +32,7 @@ #include "ui/events/test/event_generator.h" #include "ui/views/accessibility/ax_event_manager.h" #include "ui/views/accessibility/ax_event_observer.h" +#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/widget/widget.h" #if defined(USE_AURA) @@ -451,6 +452,14 @@ EXPECT_TRUE(contains(observer.selected_option_name(), "foobarbaz.com")); EXPECT_TRUE(contains(observer.omnibox_value(), "FooBarBazCom")); EXPECT_TRUE(contains(observer.selected_option_name(), "FooBarBazCom")); + + // Check that active descendant on textbox matches the selected result view. + ui::AXNodeData ax_node_data_omnibox; + omnibox_view()->GetAccessibleNodeData(&ax_node_data_omnibox); + OmniboxResultView* selected_result_view = GetResultViewAt(2); + EXPECT_EQ(ax_node_data_omnibox.GetIntAttribute( + ax::mojom::IntAttribute::kActivedescendantId), + selected_result_view->GetViewAccessibility().GetUniqueId().Get()); } IN_PROC_BROWSER_TEST_F(OmniboxPopupContentsViewTest, @@ -574,7 +583,5 @@ EXPECT_FALSE( popup_node_data_while_open.HasState(ax::mojom::State::kInvisible)); EXPECT_TRUE(popup_node_data_while_open.HasIntAttribute( - ax::mojom::IntAttribute::kActivedescendantId)); - EXPECT_TRUE(popup_node_data_while_open.HasIntAttribute( ax::mojom::IntAttribute::kPopupForId)); }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc index 128706d..08a6aa13 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view_unittest.cc
@@ -271,8 +271,6 @@ EXPECT_FALSE(popup_node_data.HasState(ax::mojom::State::kExpanded)); EXPECT_TRUE(popup_node_data.HasState(ax::mojom::State::kCollapsed)); EXPECT_TRUE(popup_node_data.HasState(ax::mojom::State::kInvisible)); - EXPECT_FALSE(popup_node_data.HasIntAttribute( - ax::mojom::IntAttribute::kActivedescendantId)); EXPECT_FALSE( popup_node_data.HasIntAttribute(ax::mojom::IntAttribute::kPopupForId)); }
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc index b675d14..2ac9f139 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc
@@ -332,11 +332,6 @@ view_->SchedulePaint(); } -void OmniboxViewViews::ElideAnimation::AnimationEnded( - const gfx::Animation* animation) { - AnimationProgressed(animation); -} - // OmniboxViewViews ----------------------------------------------------------- // static @@ -1575,6 +1570,13 @@ popup_view_->GetViewAccessibility().GetUniqueId().Get(); node_data->AddIntListAttribute(ax::mojom::IntListAttribute::kControlsIds, {popup_view_id}); + OmniboxResultView* selected_result_view = + popup_view_->GetSelectedResultView(); + if (selected_result_view) { + node_data->AddIntAttribute( + ax::mojom::IntAttribute::kActivedescendantId, + selected_result_view->GetViewAccessibility().GetUniqueId().Get()); + } } base::string16::size_type entry_start;
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.h b/chrome/browser/ui/views/omnibox/omnibox_view_views.h index 729d9c8..a8a466a 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views.h +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.h
@@ -172,6 +172,10 @@ void OnThemeChanged() override; bool IsDropCursorForInsertion() const override; + // Applies the given |color| to |range|. This is a wrapper method around + // Textfield::ApplyColor that tests can override. + virtual void ApplyColor(SkColor color, const gfx::Range& range); + private: FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsRevealOnHoverTest, HoverAndExit); FRIEND_TEST_ALL_PREFIXES( @@ -184,6 +188,8 @@ OmniboxViewViewsHideOnInteractionAndRevealOnHoverTest, BoundsChanged); FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsRevealOnHoverTest, BoundsChanged); + FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsRevealOnHoverTest, + CancellingAnimationDoesNotCrash); FRIEND_TEST_ALL_PREFIXES( OmniboxViewViewsHideOnInteractionAndRevealOnHoverTest, SchemeAndTrivialSubdomainElision); @@ -214,6 +220,8 @@ FRIEND_TEST_ALL_PREFIXES( OmniboxViewViewsRevealOnHoverAndMaybeHideOnInteractionTest, UnsetAlwaysShowFullURLs); + FRIEND_TEST_ALL_PREFIXES(OmniboxPopupContentsViewTest, + EmitAccessibilityEvents); // TODO(tommycli): Remove the rest of these friends after porting these // browser tests to unit tests. FRIEND_TEST_ALL_PREFIXES(OmniboxViewViewsTest, CloseOmniboxPopupOnTextDrag); @@ -284,7 +292,6 @@ // views::AnimationDelegateViews: void AnimationProgressed(const gfx::Animation* animation) override; - void AnimationEnded(const gfx::Animation* animation) override; private: // Non-owning pointers. |view_| and |render_text_| must always outlive this @@ -506,10 +513,6 @@ // applicable), and returns the result. url::Component GetHostComponentAfterTrivialSubdomain(); - // Applies the given |color| to |range|. This is a wrapper method around - // Textfield::ApplyColor that tests can override. - virtual void ApplyColor(SkColor color, const gfx::Range& range); - ElideAnimation* GetHoverElideOrUnelideAnimationForTesting(); ElideAnimation* GetElideAfterInteractionAnimationForTesting();
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc index 46799fe9..ff251566 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
@@ -196,6 +196,7 @@ void TestingOmniboxView::ApplyColor(SkColor color, const gfx::Range& range) { range_colors_.emplace_back(std::pair<SkColor, gfx::Range>(color, range)); + OmniboxViewViews::ApplyColor(color, range); } // TestingOmniboxEditController ----------------------------------------------- @@ -1910,6 +1911,48 @@ kSimplifiedDomainDisplayUrlPath, ShouldElideToRegistrableDomain())); } +// Tests that the simplified domain animation doesn't crash when it's cancelled. +// Regression test for https://crbug.com/1103738. +TEST_P(OmniboxViewViewsRevealOnHoverTest, CancellingAnimationDoesNotCrash) { + SetUpSimplifiedDomainTest(); + + ASSERT_NO_FATAL_FAILURE(ExpectElidedToSimplifiedDomain( + omnibox_view(), kSimplifiedDomainDisplayUrlScheme, + kSimplifiedDomainDisplayUrlSubdomain, + kSimplifiedDomainDisplayUrlHostnameAndScheme, + kSimplifiedDomainDisplayUrlPath, ShouldElideToRegistrableDomain())); + + // Hover over the omnibox to begin the unelision animation, then change the + // URL such that the current animation would go out of bounds if it continued + // running. + omnibox_view()->OnMouseMoved(CreateMouseEvent(ui::ET_MOUSE_MOVED, {0, 0})); + OmniboxViewViews::ElideAnimation* unelide_animation = + omnibox_view()->GetHoverElideOrUnelideAnimationForTesting(); + ASSERT_TRUE(unelide_animation); + EXPECT_TRUE(unelide_animation->IsAnimating()); + // Step through the animation partially so that it has a nonzero current + // value. (A zero current value causes an early return that circumvents the + // crash we are regression-testing.) + gfx::AnimationContainerElement* unelide_as_element = + static_cast<gfx::AnimationContainerElement*>( + unelide_animation->GetAnimationForTesting()); + unelide_as_element->SetStartTime(base::TimeTicks()); + unelide_as_element->Step( + base::TimeTicks() + + base::TimeDelta::FromMilliseconds( + OmniboxFieldTrial::UnelideURLOnHoverThresholdMs() + 1)); + + location_bar_model()->set_url(GURL(base::ASCIIToUTF16("https://foo.test"))); + location_bar_model()->set_url_for_display( + base::ASCIIToUTF16("https://foo.test")); + omnibox_view()->model()->ResetDisplayTexts(); + omnibox_view()->RevertAll(); + + // Stopping the animation after changing the underlying display text should + // not crash. + unelide_animation->Stop(); +} + // Tests scheme and trivial subdomain elision when simplified domain field // trials are enabled. TEST_P(OmniboxViewViewsHideOnInteractionAndRevealOnHoverTest,
diff --git a/chrome/browser/ui/views/sharing/click_to_call_browsertest.cc b/chrome/browser/ui/views/sharing/click_to_call_browsertest.cc index 2f060a1..8c98940 100644 --- a/chrome/browser/ui/views/sharing/click_to_call_browsertest.cc +++ b/chrome/browser/ui/views/sharing/click_to_call_browsertest.cc
@@ -509,7 +509,7 @@ policies.Set(policy::key::kClickToCallEnabled, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_ENTERPRISE_DEFAULT, - base::Value(policy_bool), nullptr); + std::make_unique<base::Value>(policy_bool), nullptr); } provider_.UpdateChromePolicy(policies);
diff --git a/chrome/browser/ui/webui/about_ui.cc b/chrome/browser/ui/webui/about_ui.cc index d6729e2..d071393 100644 --- a/chrome/browser/ui/webui/about_ui.cc +++ b/chrome/browser/ui/webui/about_ui.cc
@@ -693,6 +693,15 @@ return content::URLDataSource::ShouldAddContentSecurityPolicy(); } +std::string AboutUIHTMLSource::GetContentSecurityPolicy( + network::mojom::CSPDirectiveName directive) { + if (source_name_ == chrome::kChromeUICreditsHost && + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + return "trusted-types credits-static;"; + } + return content::URLDataSource::GetContentSecurityPolicy(directive); +} + std::string AboutUIHTMLSource::GetAccessControlAllowOriginForOrigin( const std::string& origin) { #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/about_ui.h b/chrome/browser/ui/webui/about_ui.h index 8a77e03b..43c6f6b9 100644 --- a/chrome/browser/ui/webui/about_ui.h +++ b/chrome/browser/ui/webui/about_ui.h
@@ -30,6 +30,8 @@ content::URLDataSource::GotDataCallback callback) override; std::string GetMimeType(const std::string& path) override; bool ShouldAddContentSecurityPolicy() override; + std::string GetContentSecurityPolicy( + network::mojom::CSPDirectiveName directive) override; std::string GetAccessControlAllowOriginForOrigin( const std::string& origin) override;
diff --git a/chrome/browser/ui/webui/app_launcher_page_ui.cc b/chrome/browser/ui/webui/app_launcher_page_ui.cc index 1fcf042..f8fb273 100644 --- a/chrome/browser/ui/webui/app_launcher_page_ui.cc +++ b/chrome/browser/ui/webui/app_launcher_page_ui.cc
@@ -150,6 +150,9 @@ } else if (directive == network::mojom::CSPDirectiveName::ImgSrc) { return "img-src chrome://extension-icon chrome://app-icon chrome://theme " "chrome://resources data:;"; + } else if (directive == network::mojom::CSPDirectiveName::TrustedTypes) { + return "trusted-types apps-page-js cr-ui-bubble-js-static " + "parse-html-subset;"; } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc index 47c701f..d20b347 100644 --- a/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc +++ b/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc
@@ -92,6 +92,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUIBrowserSwitchHost); + source->DisableTrustedTypesCSP(); + auto* service = GetBrowserSwitcherService(web_ui); source->AddInteger("launchDelay", service->prefs().GetDelay());
diff --git a/chrome/browser/ui/webui/certificate_viewer_ui.cc b/chrome/browser/ui/webui/certificate_viewer_ui.cc index 1f56b479..651ea36 100644 --- a/chrome/browser/ui/webui/certificate_viewer_ui.cc +++ b/chrome/browser/ui/webui/certificate_viewer_ui.cc
@@ -15,6 +15,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" #include "ui/base/webui/web_ui_util.h" #include "ui/web_dialogs/web_dialog_delegate.h" @@ -47,6 +48,10 @@ }; AddLocalizedStringsBulk(html_source, kStrings); + html_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types cr-ui-tree-js-static;"); + html_source->UseStringsJs(); // Add required resources.
diff --git a/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc b/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc index 01faa026..f57884f7 100644 --- a/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc +++ b/chrome/browser/ui/webui/chrome_url_data_manager_browsertest.cc
@@ -5,6 +5,7 @@ #include "base/macros.h" #include "base/strings/string_piece.h" #include "base/test/scoped_feature_list.h" +#include "build/build_config.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/url_constants.h" @@ -148,11 +149,13 @@ } void CheckTrustedTypesViolation(base::StringPiece url) { - std::string message_filter = "*This document requires*assignment*"; + std::string message_filter1 = "*This document requires*assignment*"; + std::string message_filter2 = "*Refused to create a TrustedTypePolicy*"; content::WebContents* content = browser()->tab_strip_model()->GetActiveWebContents(); content::WebContentsConsoleObserver console_observer(content); - console_observer.SetPattern(message_filter); + console_observer.SetPattern(message_filter1); + console_observer.SetPattern(message_filter2); ASSERT_TRUE(embedded_test_server()->Start()); ui_test_utils::NavigateToURL(browser(), GURL(url)); @@ -177,71 +180,126 @@ // This list was derived from chrome://about. :) static constexpr const char* const kChromeUrls[] = { "chrome://accessibility", + "chrome://appcache-internals", "chrome://apps", "chrome://autofill-internals", "chrome://blob-internals", "chrome://bluetooth-internals", + "chrome://bookmarks", + "chrome://browser-switch", "chrome://chrome-urls", "chrome://components", "chrome://conflicts", + "chrome://connection-help", + "chrome://connection-monitoring-detected", "chrome://conversion-internals", "chrome://crashes", "chrome://credits", - "chrome://cryptohome", "chrome://device-log", "chrome://devices", + "chrome://dino", + "chrome://discards", + "chrome://domain-reliability-internals", "chrome://download-internals", - "chrome://drive-internals", - "chrome://explore-sites-internals", - "chrome://first-run", + "chrome://downloads", + "chrome://extensions", + "chrome://extensions-internals", "chrome://flags", "chrome://gcm-internals", "chrome://gpu", "chrome://histograms", + "chrome://history", + "chrome://identity-internals", "chrome://indexeddb-internals", "chrome://inspect", "chrome://interstitials/ssl", "chrome://interventions-internals", "chrome://invalidations", - "chrome://linux-proxy-config", "chrome://local-state", - "chrome://machine-learning-internals", + "chrome://management", + "chrome://md-user-manager", "chrome://media-engagement", "chrome://media-feeds", "chrome://media-history", "chrome://media-internals", + "chrome://media-router-internals", + "chrome://memory-internals", "chrome://nacl", "chrome://net-export", "chrome://net-internals", + "chrome://network-error", "chrome://network-errors", + "chrome://new-tab-page", + "chrome://newtab", + "chrome://notifications-internals", "chrome://ntp-tiles-internals", "chrome://omnibox", "chrome://password-manager-internals", "chrome://policy", - "chrome://power", "chrome://predictors", "chrome://prefs-internals", + "chrome://print", "chrome://process-internals", "chrome://quota-internals", + "chrome://reset-password", "chrome://safe-browsing", "chrome://sandbox", "chrome://serviceworker-internals", + "chrome://settings", + "chrome://signin-email-confirmation", "chrome://signin-internals", "chrome://site-engagement", "chrome://snippets-internals", "chrome://suggestions", - "chrome://supervised-user-internals", "chrome://sync-internals", + "chrome://syncfs-internals", "chrome://system", "chrome://terms", + "chrome://tracing", "chrome://translate-internals", "chrome://ukm", "chrome://usb-internals", "chrome://user-actions", "chrome://version", - "chrome://webapks", "chrome://webrtc-internals", "chrome://webrtc-logs", + "chrome://welcome", +#if defined(OS_ANDROID) + "chrome://explore-sites-internals", + "chrome://offline-internals", + "chrome://webapks", +#endif +#if defined(OS_CHROMEOS) + "chrome://account-manager-error", + "chrome://account-manager-welcome", + "chrome://account-migration-welcome", + "chrome://add-supervision", + "chrome://assistant-optin", + "chrome://bluetooth-pairing", + "chrome://cellular-setup", + "chrome://certificate-manager", + "chrome://crostini-credits", + "chrome://crostini-installer", + "chrome://cryptohome", + "chrome://drive-internals", + "chrome://first-run", + "chrome://internet-config-dialog", + "chrome://internet-detail-dialog", + "chrome://linux-proxy-config", + "chrome://machine-learning-internals", + "chrome://multidevice-setup", + "chrome://network", + "chrome://oobe", + "chrome://os-credits", + "chrome://power", + "chrome://proximity-auth/proximity_auth.html", + "chrome://set-time", + "chrome://slow", + "chrome://smb-credentials-dialog", + "chrome://smb-share-dialog", + "chrome://supervised-user-internals", + "chrome://sys-internals", +#endif }; INSTANTIATE_TEST_SUITE_P(
diff --git a/chrome/browser/ui/webui/chrome_url_disabled_ui.cc b/chrome/browser/ui/webui/chrome_url_disabled_ui.cc index 2338aa07..817d778 100644 --- a/chrome/browser/ui/webui/chrome_url_disabled_ui.cc +++ b/chrome/browser/ui/webui/chrome_url_disabled_ui.cc
@@ -15,6 +15,8 @@ content::WebUIDataSource* html_source = content::WebUIDataSource::Create(chrome::kChromeUIAppDisabledHost); + html_source->DisableTrustedTypesCSP(); + html_source->UseStringsJs(); html_source->AddLocalizedString("disabledPageHeader",
diff --git a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_error_ui.cc b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_error_ui.cc index b329c68..2ff95e73 100644 --- a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_error_ui.cc +++ b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_error_ui.cc
@@ -25,6 +25,8 @@ "closeDialog", base::BindRepeating(&WebDialogUI::CloseDialog, weak_factory_.GetWeakPtr())); + html_source->DisableTrustedTypesCSP(); + html_source->UseStringsJs(); html_source->AddLocalizedString(
diff --git a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_ui.cc b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_ui.cc index 8248231..cb31fbc 100644 --- a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_ui.cc +++ b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_ui.cc
@@ -27,6 +27,8 @@ "closeDialog", base::BindRepeating(&WebDialogUI::CloseDialog, weak_factory_.GetWeakPtr())); + html_source->DisableTrustedTypesCSP(); + html_source->UseStringsJs(); // Add localized strings.
diff --git a/chrome/browser/ui/webui/chromeos/account_manager/account_migration_welcome_ui.cc b/chrome/browser/ui/webui/chromeos/account_manager/account_migration_welcome_ui.cc index 2d65965..17ca156d 100644 --- a/chrome/browser/ui/webui/chromeos/account_manager/account_migration_welcome_ui.cc +++ b/chrome/browser/ui/webui/chromeos/account_manager/account_migration_welcome_ui.cc
@@ -78,6 +78,8 @@ content::WebUIDataSource* html_source = content::WebUIDataSource::Create( chrome::kChromeUIAccountMigrationWelcomeHost); + html_source->DisableTrustedTypesCSP(); + html_source->UseStringsJs(); // Add localized strings.
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc index e8b4f48..00bdb20 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc
@@ -201,6 +201,8 @@ DCHECK(supervision_url_.DomainIs("google.com")); } + source->DisableTrustedTypesCSP(); + // Forward data to the WebUI. source->AddResourcePath("post_message_api.js", IDR_ADD_SUPERVISION_POST_MESSAGE_API_JS);
diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc index 7550b31..026c9872 100644 --- a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc +++ b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc
@@ -96,6 +96,7 @@ IDR_ASSISTANT_VOICE_MATCH_ALREADY_SETUP_ANIMATION); source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::WorkerSrc, "worker-src blob: 'self';"); + source->DisableTrustedTypesCSP(); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); // Do not zoom for Assistant opt-in web contents.
diff --git a/chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.cc b/chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.cc index c9c2b3e..23b88fb 100644 --- a/chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.cc
@@ -110,6 +110,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUICellularSetupHost); + source->DisableTrustedTypesCSP(); + chromeos::cellular_setup::AddLocalizedStrings(source); source->UseStringsJs(); source->SetDefaultResource(IDR_CELLULAR_SETUP_CELLULAR_SETUP_DIALOG_HTML);
diff --git a/chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.cc b/chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.cc index 7ea12dca..6f93d70e 100644 --- a/chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.cc +++ b/chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.cc
@@ -47,6 +47,8 @@ content::WebUIDataSource::Create(chrome::kChromeUICertificateManagerHost); Profile* profile = Profile::FromWebUI(web_ui); + source->DisableTrustedTypesCSP(); + AddCertificateManagerStrings(source); source->AddBoolean( "isGuest",
diff --git a/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc b/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc index 0e249a5e..c5c2c9bef 100644 --- a/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc +++ b/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc
@@ -142,6 +142,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + source->DisableTrustedTypesCSP(); AddStringResources(source); source->AddBoolean( "diskResizingEnabled",
diff --git a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.cc b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.cc index 58835da..960955a 100644 --- a/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.cc +++ b/chrome/browser/ui/webui/chromeos/crostini_upgrader/crostini_upgrader_ui.cc
@@ -102,6 +102,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + source->DisableTrustedTypesCSP(); AddStringResources(source); source->AddResourcePath("images/linux_illustration.png",
diff --git a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.cc b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.cc index ae817d9e..4899056 100644 --- a/chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.cc +++ b/chrome/browser/ui/webui/chromeos/emulator/device_emulator_ui.cc
@@ -22,6 +22,8 @@ content::WebUIDataSource* html = content::WebUIDataSource::Create(chrome::kChromeUIDeviceEmulatorHost); + html->DisableTrustedTypesCSP(); + // Add resources. html->AddResourcePath("audio_settings.js", IDR_DEVICE_EMULATOR_AUDIO_SETTINGS_JS);
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_ui.cc b/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_ui.cc index 02e8de71..008f444d 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_ui.cc +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_ui.cc
@@ -89,6 +89,8 @@ web_ui->AddMessageHandler( std::make_unique<PasswordChangeHandler>(password_change_url)); + source->DisableTrustedTypesCSP(); + source->AddString("hostedHeader", GetHostedHeaderText(password_change_url)); source->UseStringsJs(); @@ -112,6 +114,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUIConfirmPasswordChangeHost); + source->DisableTrustedTypesCSP(); + static constexpr webui::LocalizedString kLocalizedStrings[] = { {"title", IDS_PASSWORD_CHANGE_CONFIRM_DIALOG_TITLE}, {"bothPasswordsPrompt", @@ -157,6 +161,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUIUrgentPasswordExpiryNotificationHost); + source->DisableTrustedTypesCSP(); + SamlPasswordAttributes attrs = SamlPasswordAttributes::LoadFromPrefs(prefs); if (attrs.has_expiration_time()) { const base::Time expiration_time = attrs.expiration_time();
diff --git a/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc b/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc index af861bf..d805793 100644 --- a/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc
@@ -150,6 +150,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUIInternetConfigDialogHost); + source->DisableTrustedTypesCSP(); + AddInternetStrings(source); source->AddLocalizedString("title", IDS_SETTINGS_INTERNET_CONFIG); source->UseStringsJs();
diff --git a/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc b/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc index ed0ce9f..c2723b0 100644 --- a/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc
@@ -133,6 +133,7 @@ : ui::MojoWebDialogUI(web_ui) { content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUIInternetDetailDialogHost); + source->DisableTrustedTypesCSP(); source->AddBoolean("showTechnologyBadge", !ash::features::IsSeparateNetworkIconsEnabled()); AddInternetStrings(source);
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 10d7730..eca56ce9 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -339,6 +339,7 @@ source->AddResourcePath(kKeyboardUtilsJSPath, IDR_KEYBOARD_UTILS_JS); source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ObjectSrc, "object-src chrome:;"); + source->DisableTrustedTypesCSP(); // Only add a filter when runing as test. const bool is_running_test = command_line->HasSwitch(::switches::kTestName) ||
diff --git a/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc b/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc index 09cb31f..bf9bac61 100644 --- a/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc
@@ -112,6 +112,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUIMultiDeviceSetupHost); + source->DisableTrustedTypesCSP(); + chromeos::multidevice_setup::AddLocalizedStrings(source); source->UseStringsJs(); source->SetDefaultResource(
diff --git a/chrome/browser/ui/webui/chromeos/network_ui.cc b/chrome/browser/ui/webui/chromeos/network_ui.cc index 1da1e96..920db8b 100644 --- a/chrome/browser/ui/webui/chromeos/network_ui.cc +++ b/chrome/browser/ui/webui/chromeos/network_ui.cc
@@ -467,6 +467,9 @@ content::WebUIDataSource* html = content::WebUIDataSource::Create(chrome::kChromeUINetworkHost); + + html->DisableTrustedTypesCSP(); + html->AddLocalizedStrings(localized_strings); network_health::AddLocalizedStrings(html);
diff --git a/chrome/browser/ui/webui/chromeos/set_time_ui.cc b/chrome/browser/ui/webui/chromeos/set_time_ui.cc index c1a0275..8bd9a19 100644 --- a/chrome/browser/ui/webui/chromeos/set_time_ui.cc +++ b/chrome/browser/ui/webui/chromeos/set_time_ui.cc
@@ -177,6 +177,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + source->DisableTrustedTypesCSP(); static constexpr webui::LocalizedString kStrings[] = { {"setTimeTitle", IDS_SET_TIME_TITLE},
diff --git a/chrome/browser/ui/webui/chromeos/smb_shares/smb_credentials_dialog.cc b/chrome/browser/ui/webui/chromeos/smb_shares/smb_credentials_dialog.cc index 1fc4d7b..e6ff93f2 100644 --- a/chrome/browser/ui/webui/chromeos/smb_shares/smb_credentials_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/smb_shares/smb_credentials_dialog.cc
@@ -109,6 +109,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISmbCredentialsHost); + source->DisableTrustedTypesCSP(); + AddSmbCredentialsDialogStrings(source); source->UseStringsJs();
diff --git a/chrome/browser/ui/webui/chromeos/smb_shares/smb_share_dialog.cc b/chrome/browser/ui/webui/chromeos/smb_shares/smb_share_dialog.cc index 8ffea982..79483914 100644 --- a/chrome/browser/ui/webui/chromeos/smb_shares/smb_share_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/smb_shares/smb_share_dialog.cc
@@ -64,6 +64,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISmbShareHost); + source->DisableTrustedTypesCSP(); + AddSmbSharesStrings(source); Profile* const profile = Profile::FromWebUI(web_ui);
diff --git a/chrome/browser/ui/webui/components/components_ui.cc b/chrome/browser/ui/webui/components/components_ui.cc index 3eaf975..49b8400 100644 --- a/chrome/browser/ui/webui/components/components_ui.cc +++ b/chrome/browser/ui/webui/components/components_ui.cc
@@ -44,6 +44,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate parse-html-subset;"); static constexpr webui::LocalizedString kStrings[] = { {"componentsTitle", IDS_COMPONENTS_TITLE},
diff --git a/chrome/browser/ui/webui/conflicts/conflicts_ui.cc b/chrome/browser/ui/webui/conflicts/conflicts_ui.cc index 15d96b0b..fe3085a9 100644 --- a/chrome/browser/ui/webui/conflicts/conflicts_ui.cc +++ b/chrome/browser/ui/webui/conflicts/conflicts_ui.cc
@@ -27,6 +27,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddResourcePath("conflicts.js", IDR_ABOUT_CONFLICTS_JS); source->SetDefaultResource(IDR_ABOUT_CONFLICTS_HTML);
diff --git a/chrome/browser/ui/webui/discards/discards_ui.cc b/chrome/browser/ui/webui/discards/discards_ui.cc index 74a7a2a..2068e0e 100644 --- a/chrome/browser/ui/webui/discards/discards_ui.cc +++ b/chrome/browser/ui/webui/discards/discards_ui.cc
@@ -215,6 +215,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + source->DisableTrustedTypesCSP(); source->AddResourcePath("discards.js", IDR_DISCARDS_JS);
diff --git a/chrome/browser/ui/webui/domain_reliability_internals_ui.cc b/chrome/browser/ui/webui/domain_reliability_internals_ui.cc index a37d09a..6aa875b3 100644 --- a/chrome/browser/ui/webui/domain_reliability_internals_ui.cc +++ b/chrome/browser/ui/webui/domain_reliability_internals_ui.cc
@@ -24,6 +24,9 @@ html_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + html_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); html_source->AddResourcePath("domain_reliability_internals.css", IDR_DOMAIN_RELIABILITY_INTERNALS_CSS); html_source->AddResourcePath("domain_reliability_internals.js",
diff --git a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc index 7ca1ee5..ec6d63aa 100644 --- a/chrome/browser/ui/webui/download_internals/download_internals_ui.cc +++ b/chrome/browser/ui/webui/download_internals/download_internals_ui.cc
@@ -23,6 +23,9 @@ html_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + html_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); // Required resources. html_source->UseStringsJs();
diff --git a/chrome/browser/ui/webui/flags_ui.cc b/chrome/browser/ui/webui/flags_ui.cc index 9cfe2e6..19f84f7 100644 --- a/chrome/browser/ui/webui/flags_ui.cc +++ b/chrome/browser/ui/webui/flags_ui.cc
@@ -66,6 +66,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddString(flags_ui::kVersion, version_info::GetVersionNumber()); #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/ui/webui/identity_internals_ui.cc b/chrome/browser/ui/webui/identity_internals_ui.cc index 7b10f4d..307f7926 100644 --- a/chrome/browser/ui/webui/identity_internals_ui.cc +++ b/chrome/browser/ui/webui/identity_internals_ui.cc
@@ -211,6 +211,7 @@ const extensions::IdentityTokenCacheValue& token_cache_value) { auto token_data = std::make_unique<base::DictionaryValue>(); token_data->SetString("extensionId", token_cache_key.extension_id); + token_data->SetString("accountId", token_cache_key.account_id.ToString()); token_data->SetString("extensionName", GetExtensionName(token_cache_key)); token_data->Set("scopes", GetScopes(token_cache_key)); token_data->SetString("status", GetStatus(token_cache_value));
diff --git a/chrome/browser/ui/webui/identity_internals_ui_browsertest.cc b/chrome/browser/ui/webui/identity_internals_ui_browsertest.cc index 7a64f666..ce00fa1 100644 --- a/chrome/browser/ui/webui/identity_internals_ui_browsertest.cc +++ b/chrome/browser/ui/webui/identity_internals_ui_browsertest.cc
@@ -28,30 +28,34 @@ token_id += token_number; std::string extension_id("extension"); extension_id += token_number; + std::string account_id("account"); + account_id += token_number; std::vector<std::string> scopes; - scopes.push_back(std::string("scope_1_") + token_number); - scopes.push_back(std::string("scope_2_") + token_number); - AddTokenToCache(token_id, extension_id, scopes, kOneHour); + scopes.emplace_back("scope_1_" + token_number); + scopes.emplace_back("scope_2_" + token_number); + AddTokenToCache(token_id, extension_id, account_id, scopes, kOneHour); } } void IdentityInternalsUIBrowserTest::SetupTokenCacheWithStoreApp() { std::vector<std::string> scopes; - scopes.push_back(std::string("store_scope1")); - scopes.push_back(std::string("store_scope2")); - AddTokenToCache("store_token", kChromeWebStoreId, scopes, kOneHour); + scopes.emplace_back("store_scope1"); + scopes.emplace_back("store_scope2"); + AddTokenToCache("store_token", kChromeWebStoreId, "store_account", scopes, + kOneHour); } void IdentityInternalsUIBrowserTest::AddTokenToCache( - const std::string token_id, - const std::string extension_id, + const std::string& token_id, + const std::string& extension_id, + const std::string& account_id, const std::vector<std::string>& scopes, int time_to_live) { extensions::IdentityTokenCacheValue token_cache_value = extensions::IdentityTokenCacheValue::CreateToken( token_id, base::TimeDelta::FromSeconds(time_to_live)); extensions::ExtensionTokenKey key( - extension_id, CoreAccountId("account_id"), + extension_id, CoreAccountId(account_id), std::set<std::string>(scopes.begin(), scopes.end())); extensions::IdentityAPI::GetFactoryInstance() ->Get(browser()->profile())
diff --git a/chrome/browser/ui/webui/identity_internals_ui_browsertest.h b/chrome/browser/ui/webui/identity_internals_ui_browsertest.h index ab9dd46..a7f0dfc 100644 --- a/chrome/browser/ui/webui/identity_internals_ui_browsertest.h +++ b/chrome/browser/ui/webui/identity_internals_ui_browsertest.h
@@ -22,8 +22,9 @@ void SetupTokenCacheWithStoreApp(); private: - void AddTokenToCache(const std::string token_id, - const std::string extension_id, + void AddTokenToCache(const std::string& token_id, + const std::string& extension_id, + const std::string& account_id, const std::vector<std::string>& scopes, int time_to_live);
diff --git a/chrome/browser/ui/webui/identity_internals_ui_browsertest.js b/chrome/browser/ui/webui/identity_internals_ui_browsertest.js index 2297ddd..76110ff 100644 --- a/chrome/browser/ui/webui/identity_internals_ui_browsertest.js +++ b/chrome/browser/ui/webui/identity_internals_ui_browsertest.js
@@ -60,6 +60,15 @@ }, /** + * Gets the account id displayed on the page for a given entry. + * @param {Element} tokenEntry Display element holding token information. + * @return {string} Account Id of the token. + */ + getAccountId: function(tokenEntry) { + return tokenEntry.querySelector('.account-id').innerText; + }, + + /** * Gets the extension name displayed on the page for a given entry. * @param {Element} tokenEntry Display element holding token information. * @return {string} Extension Name of the token. @@ -70,7 +79,7 @@ /** * Gets the revoke button of the token entry. - * @param {Element} tokenEntry Diplsy element holding token information. + * @param {Element} tokenEntry Display element holding token information. * @return {HTMLButtonElement} Revoke button belonging related to the token. */ getRevokeButton: function(tokenEntry) { @@ -138,6 +147,8 @@ expectEquals('Web Store', this.getExtensionName(tokenListEntries[0])); expectEquals('ahfgeienlihckogmohjhadlkjgocpleb', this.getExtensionId(tokenListEntries[0])); + expectEquals('store_account', + this.getAccountId(tokenListEntries[0])); expectEquals('store_token', this.getAccessToken(tokenListEntries[0])); expectEquals('Token Present', this.getTokenStatus(tokenListEntries[0])); expectLT(this.getExpirationTime(tokenListEntries[0]) - new Date(), @@ -161,6 +172,8 @@ tokenListEntries[0].querySelector('.extension-name').innerText); expectEquals(this.getExtensionId(tokenListEntries[0]), tokenListEntries[0].querySelector('.extension-id').innerText); + expectEquals(this.getAccountId(tokenListEntries[0]), + tokenListEntries[0].querySelector('.account-id').innerText); expectEquals(this.getAccessToken(tokenListEntries[0]), tokenListEntries[0].querySelector('.access-token').innerText); expectEquals(this.getTokenStatus(tokenListEntries[0]), @@ -205,6 +218,8 @@ expectEquals('', this.getExtensionName(tokenListEntries[0])); expectEquals('extension0', this.getExtensionId(tokenListEntries[0])); + expectEquals('account0', + this.getAccountId(tokenListEntries[0])); expectEquals('token0', this.getAccessToken(tokenListEntries[0])); expectEquals('Token Present', this.getTokenStatus(tokenListEntries[0])); expectLT(this.getExpirationTime(tokenListEntries[0]) - new Date(), @@ -217,6 +232,8 @@ expectEquals('', this.getExtensionName(tokenListEntries[1])); expectEquals('extension1', this.getExtensionId(tokenListEntries[1])); + expectEquals('account1', + this.getAccountId(tokenListEntries[1])); expectEquals('token1', this.getAccessToken(tokenListEntries[1])); expectEquals('Token Present', this.getTokenStatus(tokenListEntries[1])); expectLT(this.getExpirationTime(tokenListEntries[1]) - new Date(),
diff --git a/chrome/browser/ui/webui/invalidations_ui.cc b/chrome/browser/ui/webui/invalidations_ui.cc index 4846ced..b7114777 100644 --- a/chrome/browser/ui/webui/invalidations_ui.cc +++ b/chrome/browser/ui/webui/invalidations_ui.cc
@@ -23,6 +23,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddResourcePath("about_invalidations.js", IDR_ABOUT_INVALIDATIONS_JS); source->SetDefaultResource(IDR_ABOUT_INVALIDATIONS_HTML); return source;
diff --git a/chrome/browser/ui/webui/managed_ui_handler_unittest.cc b/chrome/browser/ui/webui/managed_ui_handler_unittest.cc index cc1126a..c165d33a 100644 --- a/chrome/browser/ui/webui/managed_ui_handler_unittest.cc +++ b/chrome/browser/ui/webui/managed_ui_handler_unittest.cc
@@ -104,7 +104,7 @@ policy::PolicyMap non_empty_map; non_empty_map.Set("FakePolicyName", policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, - base::Value("fake"), nullptr); + std::make_unique<base::Value>("fake"), nullptr); policy_provider()->UpdateChromePolicy(non_empty_map); // Source should auto-update.
diff --git a/chrome/browser/ui/webui/management_ui.cc b/chrome/browser/ui/webui/management_ui.cc index 9979e99..fcf7ad7 100644 --- a/chrome/browser/ui/webui/management_ui.cc +++ b/chrome/browser/ui/webui/management_ui.cc
@@ -40,6 +40,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUIManagementHost); + source->DisableTrustedTypesCSP(); + source->AddString("pageSubtitle", ManagementUI::GetManagementPageSubtitle(profile));
diff --git a/chrome/browser/ui/webui/management_ui_browsertest.cc b/chrome/browser/ui/webui/management_ui_browsertest.cc index 806e9c1..961468b 100644 --- a/chrome/browser/ui/webui/management_ui_browsertest.cc +++ b/chrome/browser/ui/webui/management_ui_browsertest.cc
@@ -92,7 +92,7 @@ policy::PolicyMap policy_map; policy_map.Set("test-policy", policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_PLATFORM, - base::Value("hello world"), nullptr); + std::make_unique<base::Value>("hello world"), nullptr); provider()->UpdateExtensionPolicy(policy_map, kOnPremReportingExtensionBetaId);
diff --git a/chrome/browser/ui/webui/nacl_ui.cc b/chrome/browser/ui/webui/nacl_ui.cc index c784e81..300baa7 100644 --- a/chrome/browser/ui/webui/nacl_ui.cc +++ b/chrome/browser/ui/webui/nacl_ui.cc
@@ -64,6 +64,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->UseStringsJs(); source->AddResourcePath("about_nacl.css", IDR_ABOUT_NACL_CSS); source->AddResourcePath("about_nacl.js", IDR_ABOUT_NACL_JS);
diff --git a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc index bb8debc7..796187b 100644 --- a/chrome/browser/ui/webui/net_internals/net_internals_ui.cc +++ b/chrome/browser/ui/webui/net_internals/net_internals_ui.cc
@@ -41,9 +41,6 @@ content::WebUIDataSource* CreateNetInternalsHTMLSource() { content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUINetInternalsHost); - source->OverrideContentSecurityPolicy( - network::mojom::CSPDirectiveName::ScriptSrc, - "script-src chrome://resources 'self' 'unsafe-eval';"); source->SetDefaultResource(IDR_NET_INTERNALS_INDEX_HTML); source->AddResourcePath("index.js", IDR_NET_INTERNALS_INDEX_JS);
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom index 14f4200..dd6e4eda 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom
@@ -207,7 +207,7 @@ // differs from that color we show the doodle in a box of that color. skia.mojom.SkColor background_color; // Specification of the share button. - DoodleShareButton share_button; + DoodleShareButton? share_button; // URLs to be pinged when an image has been shown. url.mojom.Url image_impression_log_url; url.mojom.Url? animation_impression_log_url;
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc index 9fcf8282..39ee907 100644 --- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc +++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -268,12 +268,14 @@ doodle->width = width_px; doodle->height = height_px; doodle->background_color = ParseHexColor(background_color); - doodle->share_button = new_tab_page::mojom::DoodleShareButton::New(); - doodle->share_button->x = share_button_x; - doodle->share_button->y = share_button_y; - doodle->share_button->icon_url = GURL(base::StringPrintf( - "data:image/png;base64,%s", share_button_icon.c_str())); - doodle->share_button->background_color = ParseHexColor(share_button_bg); + if (!share_button_icon.empty()) { + doodle->share_button = new_tab_page::mojom::DoodleShareButton::New(); + doodle->share_button->x = share_button_x; + doodle->share_button->y = share_button_y; + doodle->share_button->icon_url = GURL(base::StringPrintf( + "data:image/png;base64,%s", share_button_icon.c_str())); + doodle->share_button->background_color = ParseHexColor(share_button_bg); + } if (type == search_provider_logos::LogoType::ANIMATED) { doodle->image_impression_log_url = cta_log_url; doodle->animation_impression_log_url = log_url;
diff --git a/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chrome/browser/ui/webui/ntp/new_tab_ui.cc index 466de0c..49c37c2d 100644 --- a/chrome/browser/ui/webui/ntp/new_tab_ui.cc +++ b/chrome/browser/ui/webui/ntp/new_tab_ui.cc
@@ -205,6 +205,13 @@ "chrome-search://theme chrome://theme data:;"; } else if (directive == network::mojom::CSPDirectiveName::ChildSrc) { return "child-src chrome-search://most-visited;"; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + // TODO(crbug.com/1098687): Trusted Type New Tab Page + // This removes require-trusted-types-for and trusted-types directives + // from the CSP header. + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc b/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc index 96de4f8d4..2f75261 100644 --- a/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc +++ b/chrome/browser/ui/webui/ntp_tiles_internals_ui.cc
@@ -129,6 +129,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddResourcePath("ntp_tiles_internals.js", IDR_NTP_TILES_INTERNALS_JS); source->AddResourcePath("ntp_tiles_internals.css",
diff --git a/chrome/browser/ui/webui/offline/offline_internals_ui.cc b/chrome/browser/ui/webui/offline/offline_internals_ui.cc index fd62303..3e32dadb 100644 --- a/chrome/browser/ui/webui/offline/offline_internals_ui.cc +++ b/chrome/browser/ui/webui/offline/offline_internals_ui.cc
@@ -14,6 +14,7 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" OfflineInternalsUI::OfflineInternalsUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { @@ -21,6 +22,9 @@ content::WebUIDataSource* html_source = content::WebUIDataSource::Create(chrome::kChromeUIOfflineInternalsHost); + html_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types parse-html-subset;"); // Required resources. html_source->UseStringsJs(); html_source->AddResourcePath("offline_internals.css",
diff --git a/chrome/browser/ui/webui/omnibox/omnibox_ui.cc b/chrome/browser/ui/webui/omnibox/omnibox_ui.cc index 419acca..ba37706f 100644 --- a/chrome/browser/ui/webui/omnibox/omnibox_ui.cc +++ b/chrome/browser/ui/webui/omnibox/omnibox_ui.cc
@@ -19,6 +19,7 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" #if !defined(OS_ANDROID) #include "chrome/browser/ui/webui/omnibox/omnibox_popup_handler.h" @@ -30,6 +31,10 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUIOmniboxHost); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types parse-html-subset;"); + // Expose version information to client because it is useful in output. VersionUI::AddVersionDetailStrings(source); source->UseStringsJs();
diff --git a/chrome/browser/ui/webui/quota_internals/quota_internals_ui.cc b/chrome/browser/ui/webui/quota_internals/quota_internals_ui.cc index c119a8f1..d22aa451 100644 --- a/chrome/browser/ui/webui/quota_internals/quota_internals_ui.cc +++ b/chrome/browser/ui/webui/quota_internals/quota_internals_ui.cc
@@ -14,6 +14,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" using content::WebContents; @@ -29,6 +30,9 @@ source->AddResourcePath( "message_dispatcher.js", IDR_QUOTA_INTERNALS_MESSAGE_DISPATCHER_JS); source->SetDefaultResource(IDR_QUOTA_INTERNALS_MAIN_HTML); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types cr-ui-tree-js-static;"); return source; }
diff --git a/chrome/browser/ui/webui/reset_password/reset_password_ui.cc b/chrome/browser/ui/webui/reset_password/reset_password_ui.cc index abb08f0..adfeeab4f 100644 --- a/chrome/browser/ui/webui/reset_password/reset_password_ui.cc +++ b/chrome/browser/ui/webui/reset_password/reset_password_ui.cc
@@ -113,6 +113,7 @@ password_type_(GetPasswordType(web_ui->GetWebContents())) { std::unique_ptr<content::WebUIDataSource> html_source( content::WebUIDataSource::Create(chrome::kChromeUIResetPasswordHost)); + html_source->DisableTrustedTypesCSP(); html_source->AddResourcePath("reset_password.js", IDR_RESET_PASSWORD_JS); html_source->AddResourcePath("reset_password.mojom-lite.js", IDR_RESET_PASSWORD_MOJOM_LITE_JS);
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc index 36aee62..d301f7a91 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
@@ -176,7 +176,7 @@ // Sets a policy update which will cause power pref managed change. void SetPolicyForPolicyKey(policy::PolicyMap* policy_map, const std::string& policy_key, - base::Value value) { + std::unique_ptr<base::Value> value) { policy_map->Set(policy_key, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, std::move(value), nullptr); @@ -224,20 +224,21 @@ // Making an arbitrary AC delay pref managed should result in the AC idle // setting being reported as managed. SetPolicyForPolicyKey(&policy_map, policy::key::kScreenDimDelayAC, - base::Value(10000)); + std::make_unique<base::Value>(10000)); DevicePowerSettings settings; settings.ac_idle_managed = true; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); // Ditto for battery delay pref managed. SetPolicyForPolicyKey(&policy_map, policy::key::kScreenDimDelayBattery, - base::Value(10000)); + std::make_unique<base::Value>(10000)); settings.battery_idle_managed = true; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); // Ditto for making the lid action pref managed. - SetPolicyForPolicyKey(&policy_map, policy::key::kLidCloseAction, - base::Value(PowerPolicyController::ACTION_SUSPEND)); + SetPolicyForPolicyKey( + &policy_map, policy::key::kLidCloseAction, + std::make_unique<base::Value>(PowerPolicyController::ACTION_SUSPEND)); settings.lid_closed_controlled = true; EXPECT_EQ(ToString(settings), GetLastSettingsChangedMessage()); } @@ -287,9 +288,9 @@ // Set Enterpise policy that forces AC idle action to suspend. Only possible // AC idle option visible to the user should be DISPLAY_OFF_SLEEP and the // current should also be set to same. - SetPolicyForPolicyKey( - &policy_map, policy::key::kIdleActionAC, - base::Value(chromeos::PowerPolicyController::ACTION_SUSPEND)); + SetPolicyForPolicyKey(&policy_map, policy::key::kIdleActionAC, + std::make_unique<base::Value>( + chromeos::PowerPolicyController::ACTION_SUSPEND)); DevicePowerSettings settings; std::set<PowerHandler::IdleBehavior> behaviors; behaviors.insert(PowerHandler::IdleBehavior::DISPLAY_OFF_SLEEP); @@ -300,9 +301,9 @@ // Set Enterpise policy that forces battery idle action to Shutdown. Only // possible battery idle option visible to the user then should be OTHER and // the default should also be set to same. - SetPolicyForPolicyKey( - &policy_map, policy::key::kIdleActionBattery, - base::Value(chromeos::PowerPolicyController::ACTION_SHUT_DOWN)); + SetPolicyForPolicyKey(&policy_map, policy::key::kIdleActionBattery, + std::make_unique<base::Value>( + chromeos::PowerPolicyController::ACTION_SHUT_DOWN)); behaviors.clear(); behaviors.insert(PowerHandler::IdleBehavior::OTHER); settings.possible_battery_behaviors = behaviors; @@ -316,7 +317,8 @@ // should not see DISPLAY_OFF_SLEEP in available options. SetPolicyForPolicyKey( &policy_map, policy::key::kIdleActionBattery, - base::Value(chromeos::PowerPolicyController::ACTION_DO_NOTHING)); + std::make_unique<base::Value>( + chromeos::PowerPolicyController::ACTION_DO_NOTHING)); behaviors.clear(); behaviors.insert(PowerHandler::IdleBehavior::DISPLAY_OFF); behaviors.insert(PowerHandler::IdleBehavior::DISPLAY_ON); @@ -328,7 +330,7 @@ // action. The user should see only see DISPLAY_OFF as the possible battery // idle action. SetPolicyForPolicyKey(&policy_map, policy::key::kScreenOffDelayBattery, - base::Value(10000)); + std::make_unique<base::Value>(10000)); behaviors.clear(); behaviors.insert(PowerHandler::IdleBehavior::DISPLAY_OFF); settings.possible_battery_behaviors = behaviors;
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler.cc b/chrome/browser/ui/webui/settings/safety_check_handler.cc index d254ad3..a5d61f5 100644 --- a/chrome/browser/ui/webui/settings/safety_check_handler.cc +++ b/chrome/browser/ui/webui/settings/safety_check_handler.cc
@@ -98,48 +98,47 @@ case safe_browsing::ChromeCleanerController::State::kIdle: switch (idle_reason) { case safe_browsing::ChromeCleanerController::IdleReason::kInitial: - return SafetyCheckHandler::ChromeCleanerStatus::kInitial; case safe_browsing::ChromeCleanerController::IdleReason:: kReporterFoundNothing: - return SafetyCheckHandler::ChromeCleanerStatus::kReporterFoundNothing; case safe_browsing::ChromeCleanerController::IdleReason:: kReporterFailed: - return SafetyCheckHandler::ChromeCleanerStatus::kReporterFailed; case safe_browsing::ChromeCleanerController::IdleReason:: kScanningFoundNothing: - return SafetyCheckHandler::ChromeCleanerStatus::kScanningFoundNothing; case safe_browsing::ChromeCleanerController::IdleReason:: kScanningFailed: - return SafetyCheckHandler::ChromeCleanerStatus::kScanningFailed; - case safe_browsing::ChromeCleanerController::IdleReason:: - kConnectionLost: - return SafetyCheckHandler::ChromeCleanerStatus::kConnectionLost; - case safe_browsing::ChromeCleanerController::IdleReason:: - kUserDeclinedCleanup: - return SafetyCheckHandler::ChromeCleanerStatus::kUserDeclinedCleanup; case safe_browsing::ChromeCleanerController::IdleReason:: kCleaningFailed: - return SafetyCheckHandler::ChromeCleanerStatus::kCleaningFailed; case safe_browsing::ChromeCleanerController::IdleReason:: kCleaningSucceeded: - return SafetyCheckHandler::ChromeCleanerStatus::kCleaningSucceeded; case safe_browsing::ChromeCleanerController::IdleReason:: kCleanerDownloadFailed: - return SafetyCheckHandler::ChromeCleanerStatus:: - kCleanerDownloadFailed; + return SafetyCheckHandler::ChromeCleanerStatus::kHidden; + case safe_browsing::ChromeCleanerController::IdleReason:: + kConnectionLost: + case safe_browsing::ChromeCleanerController::IdleReason:: + kUserDeclinedCleanup: + return SafetyCheckHandler::ChromeCleanerStatus::kInfected; } case safe_browsing::ChromeCleanerController::State::kReporterRunning: - return SafetyCheckHandler::ChromeCleanerStatus::kReporterRunning; case safe_browsing::ChromeCleanerController::State::kScanning: - return SafetyCheckHandler::ChromeCleanerStatus::kScanning; + case safe_browsing::ChromeCleanerController::State::kCleaning: + return SafetyCheckHandler::ChromeCleanerStatus::kHidden; case safe_browsing::ChromeCleanerController::State::kInfected: return SafetyCheckHandler::ChromeCleanerStatus::kInfected; - case safe_browsing::ChromeCleanerController::State::kCleaning: - return SafetyCheckHandler::ChromeCleanerStatus::kCleaning; case safe_browsing::ChromeCleanerController::State::kRebootRequired: return SafetyCheckHandler::ChromeCleanerStatus::kRebootRequired; } } + +SafetyCheckHandler::ChromeCleanerStatus fetchCurrentChromeCleanerStatus() { + if (!safe_browsing::ChromeCleanerController::GetInstance() + ->IsAllowedByPolicy()) { + return SafetyCheckHandler::ChromeCleanerStatus::kHidden; + } + return ConvertToChromeCleanerStatus( + safe_browsing::ChromeCleanerController::GetInstance()->state(), + safe_browsing::ChromeCleanerController::GetInstance()->idle_reason()); +} #endif } // namespace @@ -157,7 +156,16 @@ passwords_status_ = PasswordsStatus::kChecking; safe_browsing_status_ = SafeBrowsingStatus::kChecking; extensions_status_ = ExtensionsStatus::kChecking; - chrome_cleaner_status_ = ChromeCleanerStatus::kChecking; +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + // If the Chrome cleaner status results in the child being hidden, + // then also hide it already in the "running" state. + if (fetchCurrentChromeCleanerStatus() == + SafetyCheckHandler::ChromeCleanerStatus::kHidden) { + chrome_cleaner_status_ = SafetyCheckHandler::ChromeCleanerStatus::kHidden; + } else { + chrome_cleaner_status_ = SafetyCheckHandler::ChromeCleanerStatus::kChecking; + } +#endif // Update WebUi. FireBasicSafetyCheckWebUiListener(kUpdatesEvent, @@ -347,14 +355,9 @@ #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) void SafetyCheckHandler::CheckChromeCleaner() { - if (safe_browsing::ChromeCleanerController::GetInstance() - ->IsAllowedByPolicy()) { - OnChromeCleanerCheckResult(ConvertToChromeCleanerStatus( - safe_browsing::ChromeCleanerController::GetInstance()->state(), - safe_browsing::ChromeCleanerController::GetInstance()->idle_reason())); - } else { - OnChromeCleanerCheckResult(ChromeCleanerStatus::kDisabledByAdmin); - } + // Registering the observer immediately triggers a callback with the + // current state. + safe_browsing::ChromeCleanerController::GetInstance()->AddObserver(this); } #endif @@ -597,37 +600,15 @@ base::string16 SafetyCheckHandler::GetStringForChromeCleaner( ChromeCleanerStatus status) { switch (status) { + case ChromeCleanerStatus::kHidden: case ChromeCleanerStatus::kChecking: return base::UTF8ToUTF16(""); - case ChromeCleanerStatus::kInitial: - case ChromeCleanerStatus::kReporterFoundNothing: - case ChromeCleanerStatus::kScanningFoundNothing: - case ChromeCleanerStatus::kCleaningSucceeded: - case ChromeCleanerStatus::kReporterRunning: - case ChromeCleanerStatus::kScanning: - return l10n_util::GetStringUTF16( - IDS_SETTINGS_RESET_CLEANUP_TITLE_NOTHING_FOUND); - case ChromeCleanerStatus::kReporterFailed: - case ChromeCleanerStatus::kScanningFailed: - case ChromeCleanerStatus::kCleaningFailed: - case ChromeCleanerStatus::kCleanerDownloadFailed: - return l10n_util::GetStringUTF16( - IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_ERROR); - case ChromeCleanerStatus::kConnectionLost: - case ChromeCleanerStatus::kUserDeclinedCleanup: case ChromeCleanerStatus::kInfected: return l10n_util::GetStringUTF16( IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_INFECTED); - case ChromeCleanerStatus::kCleaning: - return l10n_util::GetStringUTF16( - IDS_SETTINGS_RESET_CLEANUP_TITLE_REMOVING); case ChromeCleanerStatus::kRebootRequired: return l10n_util::GetStringUTF16( IDS_SETTINGS_RESET_CLEANUP_TITLE_RESTART); - case ChromeCleanerStatus::kDisabledByAdmin: - return l10n_util::GetStringFUTF16( - IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_DISABLED_BY_ADMIN, - base::ASCIIToUTF16(chrome::kWhoIsMyAdministratorHelpURL)); } } #endif @@ -835,6 +816,40 @@ total); } } +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) +void SafetyCheckHandler::OnIdle( + safe_browsing::ChromeCleanerController::IdleReason idle_reason) { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnReporterRunning() { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnScanning() { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnInfected( + bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& scanner_results) { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnCleaning( + bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& scanner_results) { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnRebootRequired() { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} + +void SafetyCheckHandler::OnRebootFailed() { + OnChromeCleanerCheckResult(fetchCurrentChromeCleanerStatus()); +} +#endif void SafetyCheckHandler::OnJavascriptAllowed() {} @@ -853,6 +868,10 @@ version_updater_.reset(); // Stop observing safety check events. safety_check_.reset(nullptr); +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + // Remove |this| as an observer for the Chrome cleaner. + safe_browsing::ChromeCleanerController::GetInstance()->RemoveObserver(this); +#endif } void SafetyCheckHandler::RegisterMessages() {
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler.h b/chrome/browser/ui/webui/settings/safety_check_handler.h index b779c231..dbfdb37b2 100644 --- a/chrome/browser/ui/webui/settings/safety_check_handler.h +++ b/chrome/browser/ui/webui/settings/safety_check_handler.h
@@ -27,12 +27,20 @@ #include "extensions/browser/extension_prefs.h" #include "extensions/browser/extension_registry.h" +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) +#include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h" +#include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_scanner_results_win.h" +#endif + // Settings page UI handler that checks four areas of browser safety: // browser updates, password leaks, malicious extensions, and unwanted // software. class SafetyCheckHandler : public settings::SettingsPageUIHandler, public password_manager::BulkLeakCheckServiceInterface::Observer, +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + public safe_browsing::ChromeCleanerController::Observer, +#endif public safety_check::SafetyCheck::SafetyCheckHandlerInterface { public: // The following enum represent the state of the safety check parent @@ -89,25 +97,12 @@ kMaxValue = kBlocklistedReenabledAllByAdmin, }; enum class ChromeCleanerStatus { - kChecking = 0, - kInitial = 1, - kReporterFoundNothing = 2, - kReporterFailed = 3, - kScanningFoundNothing = 4, - kScanningFailed = 5, - kConnectionLost = 6, - kUserDeclinedCleanup = 7, - kCleaningFailed = 8, - kCleaningSucceeded = 9, - kCleanerDownloadFailed = 10, - kReporterRunning = 11, - kScanning = 12, - kInfected = 13, - kCleaning = 14, - kRebootRequired = 15, - kDisabledByAdmin = 16, + kHidden = 0, + kChecking = 1, + kInfected = 2, + kRebootRequired = 3, // New enum values must go above here. - kMaxValue = kDisabledByAdmin, + kMaxValue = kRebootRequired, }; SafetyCheckHandler(); @@ -259,6 +254,22 @@ void OnCredentialDone(const password_manager::LeakCheckCredential& credential, password_manager::IsLeaked is_leaked) override; +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + // safe_browsing::ChromeCleanerController::Observer overrides. + void OnIdle( + safe_browsing::ChromeCleanerController::IdleReason idle_reason) override; + void OnReporterRunning() override; + void OnScanning() override; + void OnInfected(bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& + scanner_results) override; + void OnCleaning(bool is_powered_by_partner, + const safe_browsing::ChromeCleanerScannerResults& + scanner_results) override; + void OnRebootRequired() override; + void OnRebootFailed() override; +#endif + // SettingsPageUIHandler implementation. void OnJavascriptAllowed() override; void OnJavascriptDisallowed() override; @@ -281,8 +292,7 @@ PasswordsStatus passwords_status_ = PasswordsStatus::kChecking; SafeBrowsingStatus safe_browsing_status_ = SafeBrowsingStatus::kChecking; ExtensionsStatus extensions_status_ = ExtensionsStatus::kChecking; - ChromeCleanerStatus chrome_cleaner_status_ = ChromeCleanerStatus::kChecking; - + ChromeCleanerStatus chrome_cleaner_status_ = ChromeCleanerStatus::kHidden; // System time when safety check completed. base::Time safety_check_completion_time_;
diff --git a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc index cd46942..9c223c8 100644 --- a/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/safety_check_handler_unittest.cc
@@ -41,7 +41,6 @@ #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) #include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_impl_win.h" -#include "chrome/browser/safe_browsing/chrome_cleaner/chrome_cleaner_controller_win.h" #endif #if defined(OS_CHROMEOS) @@ -1159,51 +1158,47 @@ SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kInitial, - SafetyCheckHandler::ChromeCleanerStatus::kInitial, - base::UTF8ToUTF16("No harmful software found")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); -INSTANTIATE_TEST_SUITE_P( - CheckChromeCleaner_ReporterFoundNothing, - SafetyCheckHandlerChromeCleanerIdleTest, - ::testing::Values(std::make_tuple( - safe_browsing::ChromeCleanerController::IdleReason:: - kReporterFoundNothing, - SafetyCheckHandler::ChromeCleanerStatus::kReporterFoundNothing, - base::UTF8ToUTF16("No harmful software found")))); +INSTANTIATE_TEST_SUITE_P(CheckChromeCleaner_ReporterFoundNothing, + SafetyCheckHandlerChromeCleanerIdleTest, + ::testing::Values(std::make_tuple( + safe_browsing::ChromeCleanerController:: + IdleReason::kReporterFoundNothing, + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_ReporterFailed, SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kReporterFailed, - SafetyCheckHandler::ChromeCleanerStatus::kReporterFailed, - base::UTF8ToUTF16("An error occurred while Browser was checking the " - "device software")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); -INSTANTIATE_TEST_SUITE_P( - CheckChromeCleaner_ScanningFoundNothing, - SafetyCheckHandlerChromeCleanerIdleTest, - ::testing::Values(std::make_tuple( - safe_browsing::ChromeCleanerController::IdleReason:: - kScanningFoundNothing, - SafetyCheckHandler::ChromeCleanerStatus::kScanningFoundNothing, - base::UTF8ToUTF16("No harmful software found")))); +INSTANTIATE_TEST_SUITE_P(CheckChromeCleaner_ScanningFoundNothing, + SafetyCheckHandlerChromeCleanerIdleTest, + ::testing::Values(std::make_tuple( + safe_browsing::ChromeCleanerController:: + IdleReason::kScanningFoundNothing, + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_ScanningFailed, SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kScanningFailed, - SafetyCheckHandler::ChromeCleanerStatus::kScanningFailed, - base::UTF8ToUTF16("An error occurred while Browser was checking the " - "device software")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_ConnectionLost, SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kConnectionLost, - SafetyCheckHandler::ChromeCleanerStatus::kConnectionLost, + SafetyCheckHandler::ChromeCleanerStatus::kInfected, base::UTF8ToUTF16("Browser found harmful software on your computer")))); INSTANTIATE_TEST_SUITE_P( @@ -1212,7 +1207,7 @@ ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason:: kUserDeclinedCleanup, - SafetyCheckHandler::ChromeCleanerStatus::kUserDeclinedCleanup, + SafetyCheckHandler::ChromeCleanerStatus::kInfected, base::UTF8ToUTF16("Browser found harmful software on your computer")))); INSTANTIATE_TEST_SUITE_P( @@ -1220,27 +1215,24 @@ SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kCleaningFailed, - SafetyCheckHandler::ChromeCleanerStatus::kCleaningFailed, - base::UTF8ToUTF16("An error occurred while Browser was checking the " - "device software")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_CleaningSucceed, SafetyCheckHandlerChromeCleanerIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::IdleReason::kCleaningSucceeded, - SafetyCheckHandler::ChromeCleanerStatus::kCleaningSucceeded, - base::UTF8ToUTF16("No harmful software found")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); -INSTANTIATE_TEST_SUITE_P( - CheckChromeCleaner_CleanerDownloadFailed, - SafetyCheckHandlerChromeCleanerIdleTest, - ::testing::Values(std::make_tuple( - safe_browsing::ChromeCleanerController::IdleReason:: - kCleanerDownloadFailed, - SafetyCheckHandler::ChromeCleanerStatus::kCleanerDownloadFailed, - base::UTF8ToUTF16("An error occurred while Browser was checking the " - "device software")))); +INSTANTIATE_TEST_SUITE_P(CheckChromeCleaner_CleanerDownloadFailed, + SafetyCheckHandlerChromeCleanerIdleTest, + ::testing::Values(std::make_tuple( + safe_browsing::ChromeCleanerController:: + IdleReason::kCleanerDownloadFailed, + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); class SafetyCheckHandlerChromeCleanerNonIdleTest : public SafetyCheckHandlerTest, @@ -1279,16 +1271,16 @@ SafetyCheckHandlerChromeCleanerNonIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::State::kReporterRunning, - SafetyCheckHandler::ChromeCleanerStatus::kReporterRunning, - base::UTF8ToUTF16("No harmful software found")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_Scanning, SafetyCheckHandlerChromeCleanerNonIdleTest, ::testing::Values(std::make_tuple( safe_browsing::ChromeCleanerController::State::kScanning, - SafetyCheckHandler::ChromeCleanerStatus::kScanning, - base::UTF8ToUTF16("No harmful software found")))); + SafetyCheckHandler::ChromeCleanerStatus::kHidden, + base::UTF8ToUTF16("")))); INSTANTIATE_TEST_SUITE_P( CheckChromeCleaner_Infected, @@ -1316,12 +1308,9 @@ const base::DictionaryValue* event = GetSafetyCheckStatusChangedWithDataIfExists( kChromeCleaner, - static_cast<int>( - SafetyCheckHandler::ChromeCleanerStatus::kDisabledByAdmin)); + static_cast<int>(SafetyCheckHandler::ChromeCleanerStatus::kHidden)); ASSERT_TRUE(event); - VerifyDisplayString( - event, - "Your administrator has disabled Browser's check for harmful software"); + VerifyDisplayString(event, ""); } #endif @@ -1471,11 +1460,17 @@ // Mock safety check invocation. safety_check_->PerformSafetyCheck(); - // Password mocks need to be triggered with a non-checking state to fire. - // All other mocks fire automatically when invoked. + // Set the password check mock response. test_leak_service_->set_state_and_notify( password_manager::BulkLeakCheckService::State::kSignedOut); +#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) + // Set the Chrome cleaner mock response. + safe_browsing::ChromeCleanerControllerImpl::ResetInstanceForTesting(); + safe_browsing::ChromeCleanerControllerImpl::GetInstance()->SetStateForTesting( + safe_browsing::ChromeCleanerController::State::kInfected); +#endif + // Check that the parent update is sent after all children checks completed. const base::DictionaryValue* event_parent = GetSafetyCheckStatusChangedWithDataIfExists(
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 3738208..bd2a0851 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1359,8 +1359,6 @@ {"safetyCheckIconWarningAriaLabel", IDS_SETTINGS_SAFETY_CHECK_ICON_WARNING_ARIA_LABEL}, {"safetyCheckReview", IDS_SETTINGS_SAFETY_CHECK_REVIEW}, - {"safetyCheckReviewErrorDetails", - IDS_SETTINGS_SAFETY_CHECK_REVIEW_ERROR_DETAILS}, {"safetyCheckUpdatesPrimaryLabel", IDS_SETTINGS_SAFETY_CHECK_UPDATES_PRIMARY_LABEL}, {"safetyCheckUpdatesButtonAriaLabel", @@ -1379,8 +1377,6 @@ IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_PRIMARY_LABEL}, {"safetyCheckChromeCleanerButtonAriaLabel", IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_BUTTON_ARIA_LABEL}, - {"safetyCheckChromeCleanerMoreButtonAriaLabel", - IDS_SETTINGS_SAFETY_CHECK_CHROME_CLEANER_MORE_BUTTON_ARIA_LABEL}, }; AddLocalizedStringsBulk(html_source, kLocalizedStrings);
diff --git a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc index 378b66e..81aa102 100644 --- a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc +++ b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
@@ -174,7 +174,7 @@ // Sets a policy update which will cause power pref managed change. void SetPolicyForPolicyKey(policy::PolicyMap* policy_map, const std::string& policy_key, - base::Value value) { + std::unique_ptr<base::Value> value) { policy_map->Set(policy_key, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, std::move(value), nullptr); @@ -225,8 +225,9 @@ IN_PROC_BROWSER_TEST_F(SecureDnsHandlerTest, SecureDnsPolicy) { policy::PolicyMap policy_map; - SetPolicyForPolicyKey(&policy_map, policy::key::kDnsOverHttpsMode, - base::Value(SecureDnsConfig::kModeAutomatic)); + SetPolicyForPolicyKey( + &policy_map, policy::key::kDnsOverHttpsMode, + std::make_unique<base::Value>(SecureDnsConfig::kModeAutomatic)); PrefService* local_state = g_browser_process->local_state(); local_state->SetString(prefs::kDnsOverHttpsMode, @@ -244,8 +245,9 @@ IN_PROC_BROWSER_TEST_F(SecureDnsHandlerTest, SecureDnsPolicyChange) { policy::PolicyMap policy_map; - SetPolicyForPolicyKey(&policy_map, policy::key::kDnsOverHttpsMode, - base::Value(SecureDnsConfig::kModeAutomatic)); + SetPolicyForPolicyKey( + &policy_map, policy::key::kDnsOverHttpsMode, + std::make_unique<base::Value>(SecureDnsConfig::kModeAutomatic)); std::string secure_dns_mode; std::vector<std::string> secure_dns_templates; @@ -256,8 +258,9 @@ EXPECT_EQ(static_cast<int>(SecureDnsConfig::ManagementMode::kNoOverride), management_mode); - SetPolicyForPolicyKey(&policy_map, policy::key::kDnsOverHttpsMode, - base::Value(SecureDnsConfig::kModeOff)); + SetPolicyForPolicyKey( + &policy_map, policy::key::kDnsOverHttpsMode, + std::make_unique<base::Value>(SecureDnsConfig::kModeOff)); EXPECT_TRUE(GetLastSettingsChangedMessage( &secure_dns_mode, &secure_dns_templates, &management_mode)); EXPECT_EQ(SecureDnsConfig::kModeOff, secure_dns_mode); @@ -271,7 +274,7 @@ IN_PROC_BROWSER_TEST_F(SecureDnsHandlerTest, OtherPoliciesSet) { policy::PolicyMap policy_map; SetPolicyForPolicyKey(&policy_map, policy::key::kIncognitoModeAvailability, - base::Value(1)); + std::make_unique<base::Value>(1)); PrefService* local_state = g_browser_process->local_state(); local_state->SetString(prefs::kDnsOverHttpsMode,
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.cc b/chrome/browser/ui/webui/signin/profile_picker_handler.cc index c5c9c685..2554cfc9 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.cc
@@ -13,7 +13,10 @@ #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/profiles/profile_statistics.h" +#include "chrome/browser/profiles/profile_statistics_factory.h" #include "chrome/browser/profiles/profile_window.h" +#include "chrome/browser/profiles/profiles_state.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/profile_picker.h" #include "chrome/common/pref_names.h" @@ -56,6 +59,10 @@ &ProfilePickerHandler::HandleGetNewProfileSuggestedThemeInfo, base::Unretained(this))); web_ui()->RegisterMessageCallback( + "getProfileStatistics", + base::BindRepeating(&ProfilePickerHandler::HandleGetProfileStatistics, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( "loadSignInProfileCreationFlow", base::BindRepeating( &ProfilePickerHandler::HandleLoadSignInProfileCreationFlow, @@ -149,6 +156,57 @@ ResolveJavascriptCallback(callback_id, std::move(dict)); } +void ProfilePickerHandler::HandleGetProfileStatistics( + const base::ListValue* args) { + AllowJavascript(); + CHECK_EQ(1U, args->GetSize()); + const base::Value& profile_path_value = args->GetList()[0]; + base::Optional<base::FilePath> profile_path = + util::ValueToFilePath(profile_path_value); + if (!profile_path) + return; + + Profile* profile = + g_browser_process->profile_manager()->GetProfileByPath(*profile_path); + + if (profile) { + GatherProfileStatistics(profile); + } else { + g_browser_process->profile_manager()->LoadProfileByPath( + *profile_path, false, + base::BindOnce(&ProfilePickerHandler::GatherProfileStatistics, + weak_factory_.GetWeakPtr())); + } +} + +void ProfilePickerHandler::GatherProfileStatistics(Profile* profile) { + if (!profile) { + return; + } + + ProfileStatisticsFactory::GetForProfile(profile)->GatherStatistics( + base::BindRepeating(&ProfilePickerHandler::OnProfileStatisticsReceived, + weak_factory_.GetWeakPtr(), profile->GetPath())); +} + +void ProfilePickerHandler::OnProfileStatisticsReceived( + base::FilePath profile_path, + profiles::ProfileCategoryStats result) { + if (!IsJavascriptAllowed()) + return; + + base::Value dict(base::Value::Type::DICTIONARY); + dict.SetKey("profilePath", util::FilePathToValue(profile_path)); + base::Value stats(base::Value::Type::DICTIONARY); + // Categories are defined in |kProfileStatisticsCategories| + // {"BrowsingHistory", "Passwords", "Bookmarks", "Autofill"}. + for (const auto& item : result) { + stats.SetIntKey(item.category, item.count); + } + dict.SetKey("statistics", std::move(stats)); + FireWebUIListener("profile-statistics-received", std::move(dict)); +} + void ProfilePickerHandler::HandleLoadSignInProfileCreationFlow( const base::ListValue* args) { // TODO(crbug.com/1063856): Add implementation. @@ -179,8 +237,12 @@ profile_entry->SetKey("profilePath", util::FilePathToValue(entry->GetPath())); profile_entry->SetString("localProfileName", entry->GetLocalProfileName()); - // GAIA name can be empty, if the profile is not signed in to chrome. + profile_entry->SetBoolPath( + "isSignedIn", entry->GetSigninState() != SigninState::kNotSignedIn); + // GAIA name/user name can be empty, if the profile is not signed in to + // chrome. profile_entry->SetString("gaiaName", entry->GetGAIANameToDisplay()); + profile_entry->SetString("userName", entry->GetUserName()); gfx::Image icon = profiles::GetSizedAvatarIcon( entry->GetAvatarIcon(), true, kAvatarIconSize, kAvatarIconSize); std::string icon_url = webui::GetBitmapDataUrl(icon.AsBitmap());
diff --git a/chrome/browser/ui/webui/signin/profile_picker_handler.h b/chrome/browser/ui/webui/signin/profile_picker_handler.h index 6b2269d..aa8ff0f 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_handler.h +++ b/chrome/browser/ui/webui/signin/profile_picker_handler.h
@@ -9,6 +9,7 @@ #include "base/values.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_attributes_storage.h" +#include "chrome/browser/profiles/profile_statistics_common.h" #include "content/public/browser/web_ui_message_handler.h" // The handler for Javascript messages related to the profile picker main view. @@ -29,8 +30,12 @@ void HandleLaunchGuestProfile(const base::ListValue* args); void HandleAskOnStartupChanged(const base::ListValue* args); void HandleGetNewProfileSuggestedThemeInfo(const base::ListValue* args); + void HandleGetProfileStatistics(const base::ListValue* args); void HandleLoadSignInProfileCreationFlow(const base::ListValue* args); + void GatherProfileStatistics(Profile* profile); + void OnProfileStatisticsReceived(base::FilePath profile_path, + profiles::ProfileCategoryStats result); void OnSwitchToProfileComplete(Profile* profile, Profile::CreateStatus profile_create_status); void PushProfilesList();
diff --git a/chrome/browser/ui/webui/signin/profile_picker_ui.cc b/chrome/browser/ui/webui/signin/profile_picker_ui.cc index 2ff67fd9..060db6e4 100644 --- a/chrome/browser/ui/webui/signin/profile_picker_ui.cc +++ b/chrome/browser/ui/webui/signin/profile_picker_ui.cc
@@ -27,6 +27,18 @@ {"askOnStartupCheckboxText", IDS_PROFILE_PICKER_ASK_ON_STARTUP}, {"browseAsGuestButton", IDS_PROFILE_PICKER_BROWSE_AS_GUEST_BUTTON}, {"backButtonLabel", IDS_PROFILE_PICKER_BACK_BUTTON_LABEL}, + {"profileMenuName", IDS_PROFILE_PICKER_PROFILE_MENU_BUTTON_NAME}, + {"profileMenuRemoveText", IDS_PROFILE_PICKER_PROFILE_MENU_REMOVE_TEXT}, + {"removeWarningLocalProfile", + IDS_PROFILE_PICKER_REMOVE_WARNING_LOCAL_PROFILE}, + {"removeWarningSignedInProfile", + IDS_PROFILE_PICKER_REMOVE_WARNING_SIGNED_IN_PROFILE}, + {"removeWarningHistory", IDS_PROFILE_PICKER_REMOVE_WARNING_HISTORY}, + {"removeWarningPasswords", IDS_PROFILE_PICKER_REMOVE_WARNING_PASSWORDS}, + {"removeWarningBookmarks", IDS_PROFILE_PICKER_REMOVE_WARNING_BOOKMARKS}, + {"removeWarningAutofill", IDS_PROFILE_PICKER_REMOVE_WARNING_AUTOFILL}, + {"removeWarningCalculating", + IDS_PROFILE_PICKER_REMOVE_WARNING_CALCULATING}, {"profileTypeChoiceTitle", IDS_PROFILE_PICKER_PROFILE_CREATION_FLOW_PROFILE_TYPE_CHOICE_TITLE}, {"profileTypeChoiceSubtitle",
diff --git a/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc b/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc index f21e82a7..4d2d43c 100644 --- a/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc +++ b/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc
@@ -23,6 +23,7 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUISigninEmailConfirmationHost); + source->DisableTrustedTypesCSP(); source->UseStringsJs(); source->EnableReplaceI18nInJS(); source->SetDefaultResource(IDR_SIGNIN_EMAIL_CONFIRMATION_HTML);
diff --git a/chrome/browser/ui/webui/signin/signin_error_ui.cc b/chrome/browser/ui/webui/signin/signin_error_ui.cc index 48d6356..5be30b6 100644 --- a/chrome/browser/ui/webui/signin/signin_error_ui.cc +++ b/chrome/browser/ui/webui/signin/signin_error_ui.cc
@@ -66,6 +66,7 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISigninErrorHost); + source->DisableTrustedTypesCSP(); source->UseStringsJs(); source->EnableReplaceI18nInJS(); source->SetDefaultResource(IDR_SIGNIN_ERROR_HTML);
diff --git a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc index b273030..b455aac6 100644 --- a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc +++ b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc
@@ -103,6 +103,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + source->DisableTrustedTypesCSP(); source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER); source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER);
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc index cdbfd06..6e854c5ef 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc
@@ -106,6 +106,8 @@ IDS_SYNC_DISABLED_CONFIRMATION_UNDO_BUTTON_LABEL); } + source->DisableTrustedTypesCSP(); + base::DictionaryValue strings; webui::SetLoadTimeDataDefaults( g_browser_process->GetApplicationLocale(), &strings);
diff --git a/chrome/browser/ui/webui/signin/user_manager_ui.cc b/chrome/browser/ui/webui/signin/user_manager_ui.cc index 1e3dd27..9bbfc7a3 100644 --- a/chrome/browser/ui/webui/signin/user_manager_ui.cc +++ b/chrome/browser/ui/webui/signin/user_manager_ui.cc
@@ -56,6 +56,9 @@ const base::DictionaryValue& localized_strings) { content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUIMdUserManagerHost); + + source->DisableTrustedTypesCSP(); + source->AddLocalizedStrings(localized_strings); source->AddBoolean("profileShortcutsEnabled", ProfileShortcutManager::IsFeatureEnabled());
diff --git a/chrome/browser/ui/webui/signin_internals_ui.cc b/chrome/browser/ui/webui/signin_internals_ui.cc index 8473929..550968a0 100644 --- a/chrome/browser/ui/webui/signin_internals_ui.cc +++ b/chrome/browser/ui/webui/signin_internals_ui.cc
@@ -28,6 +28,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->UseStringsJs(); source->AddResourcePath("signin_internals.js", IDR_SIGNIN_INTERNALS_INDEX_JS);
diff --git a/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc b/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc index 498f2d09..f64bcef 100644 --- a/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc +++ b/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc
@@ -29,6 +29,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddResourcePath("snippets_internals.css", IDR_SNIPPETS_INTERNALS_CSS); source->AddResourcePath("snippets_internals.js", IDR_SNIPPETS_INTERNALS_JS); source->AddResourcePath("snippets_internals.mojom-lite.js",
diff --git a/chrome/browser/ui/webui/supervised_user_internals_ui.cc b/chrome/browser/ui/webui/supervised_user_internals_ui.cc index 1935820..2102059 100644 --- a/chrome/browser/ui/webui/supervised_user_internals_ui.cc +++ b/chrome/browser/ui/webui/supervised_user_internals_ui.cc
@@ -22,6 +22,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->AddResourcePath("supervised_user_internals.js", IDR_SUPERVISED_USER_INTERNALS_JS);
diff --git a/chrome/browser/ui/webui/sync_internals_ui.cc b/chrome/browser/ui/webui/sync_internals_ui.cc index ac5b655..cd5cfc1 100644 --- a/chrome/browser/ui/webui/sync_internals_ui.cc +++ b/chrome/browser/ui/webui/sync_internals_ui.cc
@@ -24,6 +24,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate cr-ui-tree-js-static;"); source->UseStringsJs();
diff --git a/chrome/browser/ui/webui/test_data_source.cc b/chrome/browser/ui/webui/test_data_source.cc index e6ba2efa..ce6566d 100644 --- a/chrome/browser/ui/webui/test_data_source.cc +++ b/chrome/browser/ui/webui/test_data_source.cc
@@ -83,6 +83,10 @@ return "script-src chrome://* 'self';"; } else if (directive == network::mojom::CSPDirectiveName::WorkerSrc) { return "worker-src blob: 'self';"; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc b/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc index 582e633..4be6d11 100644 --- a/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc +++ b/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc
@@ -12,6 +12,7 @@ #include "chrome/grit/browser_resources.h" #include "chrome/grit/usb_internals_resources.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui) { @@ -37,6 +38,9 @@ webui::AddResourcePathsBulk(source, kPaths); source->SetDefaultResource(IDR_USB_INTERNALS_HTML); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types cr-ui-tree-js-static;"); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); }
diff --git a/chrome/browser/ui/webui/webui_util.cc b/chrome/browser/ui/webui/webui_util.cc index 4fd3152..6de0452b 100644 --- a/chrome/browser/ui/webui/webui_util.cc +++ b/chrome/browser/ui/webui/webui_util.cc
@@ -19,6 +19,8 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + // TODO(crbug.com/1098690): Trusted Type Polymer + source->DisableTrustedTypesCSP(); source->UseStringsJs(); source->EnableReplaceI18nInJS(); source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER);
diff --git a/chrome/browser/webauthn/android/BUILD.gn b/chrome/browser/webauthn/android/BUILD.gn new file mode 100644 index 0000000..42d085df --- /dev/null +++ b/chrome/browser/webauthn/android/BUILD.gn
@@ -0,0 +1,21 @@ +# 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. + +import("//build/config/android/rules.gni") + +android_library("java") { + sources = [ "java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java" ] + deps = [ + "//base:base_java", + "//base:jni_java", + "//chrome/android/modules/cablev2_authenticator/public:java", + "//third_party/android_deps:android_support_v7_appcompat_java", + "//third_party/android_deps:androidx_annotation_annotation_java", + ] + annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ] +} + +generate_jni("jni_headers") { + sources = [ "java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java" ] +}
diff --git a/chrome/browser/webauthn/android/cable_module_android.cc b/chrome/browser/webauthn/android/cable_module_android.cc new file mode 100644 index 0000000..f54b62a --- /dev/null +++ b/chrome/browser/webauthn/android/cable_module_android.cc
@@ -0,0 +1,17 @@ +// 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/net/system_network_context_manager.h" + +// This "header" actually contains function definitions and thus can only be +// included once across Chromium. +#include "chrome/browser/webauthn/android/jni_headers/CableAuthenticatorModuleProvider_jni.h" + +static jlong JNI_CableAuthenticatorModuleProvider_GetSystemNetworkContext( + JNIEnv* env) { + static_assert(sizeof(jlong) >= sizeof(uintptr_t), + "Java longs are too small to contain pointers"); + return static_cast<jlong>(reinterpret_cast<uintptr_t>( + SystemNetworkContextManager::GetInstance()->GetContext())); +}
diff --git a/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/CableAuthenticatorModuleProvider.java b/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java similarity index 67% rename from chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/CableAuthenticatorModuleProvider.java rename to chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java index 026374c..9240b6d 100644 --- a/chrome/android/modules/cablev2_authenticator/public/java/src/org/chromium/chrome/modules/cablev2_authenticator/CableAuthenticatorModuleProvider.java +++ b/chrome/browser/webauthn/android/java/src/org/chromium/chrome/browser/webauthn/CableAuthenticatorModuleProvider.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.modules.cablev2_authenticator; +package org.chromium.chrome.browser.webauthn; import android.annotation.SuppressLint; import android.content.Context; @@ -17,6 +17,9 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; +import org.chromium.base.annotations.NativeMethods; +import org.chromium.chrome.modules.cablev2_authenticator.Cablev2AuthenticatorModule; + /** * Provides a UI that attempts to install the caBLEv2 Authenticator module. If already installed, or * successfully installed, it replaces itself in the back-stack with the authenticator UI. @@ -27,6 +30,11 @@ * settings UI, while {@link ModuleInstallUi} assumes that the UI does in a {@link Tab}. */ public class CableAuthenticatorModuleProvider extends Fragment { + // NETWORK_CONTEXT_KEY is the key under which a pointer to a NetworkContext + // is passed (as a long) in the arguments {@link Bundle} to the {@link + // Fragment} in the module. + private static final String NETWORK_CONTEXT_KEY = + "org.chromium.chrome.modules.cablev2_authenticator.NetworkContext"; private TextView mStatus; @Override @@ -71,9 +79,27 @@ FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); - transaction.replace(getId(), Cablev2AuthenticatorModule.getImpl().getFragment()); + Fragment fragment = Cablev2AuthenticatorModule.getImpl().getFragment(); + Bundle arguments = getArguments(); + if (arguments == null) { + arguments = new Bundle(); + } + arguments.putLong(NETWORK_CONTEXT_KEY, + CableAuthenticatorModuleProviderJni.get().getSystemNetworkContext()); + fragment.setArguments(arguments); + transaction.replace(getId(), fragment); // This fragment is deliberately not added to the back-stack here so // that it appears to have been "replaced" by the authenticator UI. transaction.commit(); } + + @NativeMethods + interface Natives { + // getSystemNetworkContext returns a pointer, encoded in a long, to the + // global NetworkContext for system services that hangs off + // |g_browser|. This is needed because //chrome/browser, being a + // static_library, cannot be depended on by another component thus we + // pass this value into the feature module. + long getSystemNetworkContext(); + } }
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index 63f80ca5..ee95192e 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1596628771-e32af535197a262fe54680b0a1a803a0983bdd0a.profdata +chrome-win32-master-1596643173-1c5e3b62f80a4dd3f16924cb334ea677bc923f5e.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index cfedcfe9..1d5d021b 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -5877,6 +5877,10 @@ } test("interactive_ui_tests") { + if ((is_linux && !is_chromeos) || chromeos_is_browser_only) { + use_xvfb = true + } + sources = [ "../browser/about_flags_browsertest.cc", "../browser/apps/guest_view/web_view_interactive_browsertest.cc",
diff --git a/chrome/test/base/web_ui_browser_test.cc b/chrome/test/base/web_ui_browser_test.cc index e9d8ff3..92157f8 100644 --- a/chrome/test/base/web_ui_browser_test.cc +++ b/chrome/test/base/web_ui_browser_test.cc
@@ -402,6 +402,10 @@ const network::mojom::CSPDirectiveName directive) override { if (directive == network::mojom::CSPDirectiveName::ScriptSrc) { return "script-src chrome://resources 'self' 'unsafe-eval';"; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/chrome/test/data/extensions/api_test/service_worker/worker_based_background/tabs_basic/service_worker_background.js b/chrome/test/data/extensions/api_test/service_worker/worker_based_background/tabs_basic/service_worker_background.js index f15c27d..92cf666 100644 --- a/chrome/test/data/extensions/api_test/service_worker/worker_based_background/tabs_basic/service_worker_background.js +++ b/chrome/test/data/extensions/api_test/service_worker/worker_based_background/tabs_basic/service_worker_background.js
@@ -154,8 +154,30 @@ function testTabQuery3() { queryTabUtil({currentWindow: true}, function(tabs) { chrome.test.assertEq(1, tabs.length); - chrome.test.assertEq(tabs[0].id, tabProps[0].id); - chrome.test.assertEq(tabs[0].url, tabProps[0].url); + chrome.test.assertEq(tabProps[0].id, tabs[0].id); + chrome.test.assertEq(tabProps[0].url, tabs[0].url); + chrome.test.succeed(); + }); + }, + // Reload the remaining tab. + function testTabReload() { + chrome.tabs.onUpdated.addListener(function localListener(tabId, + changeInfo, + tab) { + if (changeInfo.status == 'complete') { + chrome.tabs.onUpdated.removeListener(localListener); + chrome.test.assertEq(tabProps[0].id, tabId); + chrome.test.assertEq(tabProps[0].url, tab.url); + chrome.test.succeed(); + } + }); + chrome.tabs.reload(tabProps[0].id, {bypassCache: true}); + }, + // Update the remaining tab. + function testTabUpdate() { + chrome.tabs.update(tabProps[0].id, {url: tabProps[1].url}, function(tab) { + chrome.test.assertEq(tabProps[0].id, tab.id); + chrome.test.assertEq(tabProps[1].url, tab.pendingUrl); chrome.test.succeed(); }); },
diff --git a/chrome/test/data/webui/new_tab_page/logo_test.js b/chrome/test/data/webui/new_tab_page/logo_test.js index c7a4faeb..8e3484f 100644 --- a/chrome/test/data/webui/new_tab_page/logo_test.js +++ b/chrome/test/data/webui/new_tab_page/logo_test.js
@@ -149,6 +149,22 @@ }); }); + [true, false].forEach(dark => { + test(`hide share button in ${dark ? 'dark' : 'light'} mode`, async () => { + // Arrange. + const doodle = createImageDoodle(); + const imageDoodle = dark ? doodle.image.dark : doodle.image.light; + delete imageDoodle.shareButton; + + // Act. + const logo = await createLogo(doodle); + logo.dark = dark; + + // Assert. + assertStyle($$(logo, '#shareButton'), 'display', 'none'); + }); + }); + [null, '#ff0000'].forEach(color => { test(`${color || 'no'} background color shows box`, async () => { // Arrange.
diff --git a/chrome/test/data/webui/settings/BUILD.gn b/chrome/test/data/webui/settings/BUILD.gn index 7509ae3..15098acb 100644 --- a/chrome/test/data/webui/settings/BUILD.gn +++ b/chrome/test/data/webui/settings/BUILD.gn
@@ -136,7 +136,6 @@ #":reset_profile_banner_test", #":route_tests", ":safety_check_chrome_cleaner_test", - ":safety_check_page_branded_windows_test", ":safety_check_page_test", #":search_engines_page_test", @@ -302,15 +301,6 @@ externs_list = [ "$externs_path/mocha-2.5.js" ] } -js_library("safety_check_page_branded_windows_test") { - deps = [ - "..:chai_assert", - "//chrome/browser/resources/settings:settings", - "//ui/webui/resources/js:load_time_data.m", - ] - externs_list = [ "$externs_path/mocha-2.5.js" ] -} - js_library("safety_check_page_test") { deps = [ ":test_hats_browser_proxy",
diff --git a/chrome/test/data/webui/settings/chromeos/device_page_tests.js b/chrome/test/data/webui/settings/chromeos/device_page_tests.js index ba66e51..9b7015c9 100644 --- a/chrome/test/data/webui/settings/chromeos/device_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/device_page_tests.js
@@ -687,7 +687,7 @@ // Check specifically clicking the row changes pref. const reverseScrollSettings = pointersPage.$$('#reverseScrollRow'); - reverseScrollToggle.click(); + reverseScrollSettings.click(); expectReverseScrollValue(pointersPage, true); devicePage.set('prefs.settings.touchpad.natural_scroll.value', false); expectReverseScrollValue(pointersPage, false);
diff --git a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js index c21423c..63a3a5a1 100644 --- a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
@@ -302,30 +302,6 @@ }); // eslint-disable-next-line no-var -var CrSettingsSafetyCheckPageBrandedWindowsV3Test = - class extends CrSettingsV3BrowserTest { - /** @override */ - get browsePreload() { - return 'chrome://settings/test_loader.html?module=settings/safety_check_page_test.js'; - } - - /** @override */ - get featureListInternal() { - return { - enabled: [ - 'features::kSafetyCheckChromeCleanerChild', - ], - }; - } -}; - -GEN('#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)'); -TEST_F('CrSettingsSafetyCheckPageBrandedWindowsV3Test', 'All', function() { - mocha.run(); -}); -GEN('#endif // defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)'); - -// eslint-disable-next-line no-var var CrSettingsSafetyCheckPageV3Test = class extends CrSettingsV3BrowserTest { /** @override */ get browsePreload() { @@ -347,11 +323,21 @@ }); // eslint-disable-next-line no-var -var CrSettingsSafetyCheckChromeCleanerV3Test = class extends CrSettingsV3BrowserTest { +var CrSettingsSafetyCheckChromeCleanerV3Test = + class extends CrSettingsV3BrowserTest { /** @override */ get browsePreload() { return 'chrome://settings/test_loader.html?module=settings/safety_check_chrome_cleaner_test.js'; } + + /** @override */ + get featureListInternal() { + return { + enabled: [ + 'features::kSafetyCheckChromeCleanerChild', + ], + }; + } }; GEN('#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)');
diff --git a/chrome/test/data/webui/settings/safety_check_chrome_cleaner_test.js b/chrome/test/data/webui/settings/safety_check_chrome_cleaner_test.js index 580ca77..56dacd3 100644 --- a/chrome/test/data/webui/settings/safety_check_chrome_cleaner_test.js +++ b/chrome/test/data/webui/settings/safety_check_chrome_cleaner_test.js
@@ -3,6 +3,7 @@ // found in the LICENSE file. // clang-format off +import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {ChromeCleanupProxy, ChromeCleanupProxyImpl} from 'chrome://settings/lazy_load.js'; @@ -53,6 +54,7 @@ managedIcon }) { const safetyCheckChild = page.$$('#safetyCheckChild'); + assertTrue(!!safetyCheckChild); assertTrue(safetyCheckChild.iconStatus === iconStatus); assertTrue(safetyCheckChild.label === label); assertTrue(safetyCheckChild.subLabel === testDisplayString); @@ -73,9 +75,15 @@ /** @type {?TestMetricsBrowserProxy} */ let metricsBrowserProxy = null; - /** @type {!SettingsSafetyCheckExtensionsChildElement} */ + /** @type {!SettingsSafetyCheckChromeCleanerChildElement} */ let page; + suiteSetup(function() { + loadTimeData.overrideValues({ + safetyCheckChromeCleanerChildEnabled: true, + }); + }); + setup(function() { chromeCleanupBrowserProxy = TestBrowserProxy.fromClass(ChromeCleanupProxy); chromeCleanupBrowserProxy.setResultFor( @@ -86,7 +94,7 @@ MetricsBrowserProxyImpl.instance_ = metricsBrowserProxy; document.body.innerHTML = ''; - page = /** @type {!SettingsSafetyCheckExtensionsChildElement} */ ( + page = /** @type {!SettingsSafetyCheckChromeCleanerChildElement} */ ( document.createElement('settings-safety-check-chrome-cleaner-child')); document.body.appendChild(page); flush(); @@ -105,6 +113,13 @@ assertEquals(routes.CHROME_CLEANUP, Router.getInstance().getCurrentRoute()); } + test('chromeCleanerHiddenUiTest', function() { + fireSafetyCheckChromeCleanerEvent(SafetyCheckChromeCleanerStatus.HIDDEN); + flush(); + // There is no Chrome cleaner child in safety check. + assertFalse(!!page.$$('#safetyCheckChild')); + }); + test('chromeCleanerCheckingUiTest', function() { fireSafetyCheckChromeCleanerEvent(SafetyCheckChromeCleanerStatus.CHECKING); flush(); @@ -115,103 +130,18 @@ }); }); - test('chromeCleanerSafeStatesUiTest', function() { - for (const state of Object.values(SafetyCheckChromeCleanerStatus)) { - switch (state) { - case SafetyCheckChromeCleanerStatus.INITIAL: - case SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.SCANNING_FOUND_NOTHING: - case SafetyCheckChromeCleanerStatus.CLEANING_SUCCEEDED: - case SafetyCheckChromeCleanerStatus.REPORTER_RUNNING: - case SafetyCheckChromeCleanerStatus.SCANNING: - fireSafetyCheckChromeCleanerEvent(state); - flush(); - assertSafetyCheckChild({ - page: page, - iconStatus: SafetyCheckIconStatus.SAFE, - label: 'Device software', - buttonLabel: 'More', - buttonAriaLabel: 'Show details of the device software check', - }); - expectChromeCleanerRouteButtonClickActions(); - break; - default: - // Not covered by this test. - break; - } - } - }); - - test('chromeCleanerErrorStates', function() { - for (const state of Object.values(SafetyCheckChromeCleanerStatus)) { - switch (state) { - case SafetyCheckChromeCleanerStatus.REPORTER_FAILED: - case SafetyCheckChromeCleanerStatus.SCANNING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANING_FAILED: - case SafetyCheckChromeCleanerStatus.CLEANER_DOWNLOAD_FAILED: - fireSafetyCheckChromeCleanerEvent(state); - flush(); - assertSafetyCheckChild({ - page: page, - iconStatus: SafetyCheckIconStatus.INFO, - label: 'Device software', - buttonLabel: 'Details', - buttonAriaLabel: 'Review error details', - }); - expectChromeCleanerRouteButtonClickActions(); - break; - default: - // Not covered by this test. - break; - } - } - }); - - test('chromeCleanerInfoWithDefaultButtonStatesUiTest', function() { - for (const state of Object.values(SafetyCheckChromeCleanerStatus)) { - switch (state) { - case SafetyCheckChromeCleanerStatus.CLEANING: - fireSafetyCheckChromeCleanerEvent(state); - flush(); - assertSafetyCheckChild({ - page: page, - iconStatus: SafetyCheckIconStatus.INFO, - label: 'Device software', - buttonLabel: 'Review', - buttonAriaLabel: 'Review device software', - }); - expectChromeCleanerRouteButtonClickActions(); - break; - default: - // Not covered by this test. - break; - } - } - }); - - test('chromeCleanerWarningStatesUiTest', function() { - for (const state of Object.values(SafetyCheckChromeCleanerStatus)) { - switch (state) { - case SafetyCheckChromeCleanerStatus.USER_DECLINED_CLEANUP: - case SafetyCheckChromeCleanerStatus.INFECTED: - case SafetyCheckChromeCleanerStatus.CONNECTION_LOST: - fireSafetyCheckChromeCleanerEvent(state); - flush(); - assertSafetyCheckChild({ - page: page, - iconStatus: SafetyCheckIconStatus.WARNING, - label: 'Device software', - buttonLabel: 'Review', - buttonAriaLabel: 'Review device software', - buttonClass: 'action-button', - }); - expectChromeCleanerRouteButtonClickActions(); - break; - default: - // Not covered by this test. - break; - } - } + test('chromeCleanerInfectedTest', function() { + fireSafetyCheckChromeCleanerEvent(SafetyCheckChromeCleanerStatus.INFECTED); + flush(); + assertSafetyCheckChild({ + page: page, + iconStatus: SafetyCheckIconStatus.WARNING, + label: 'Device software', + buttonLabel: 'Review', + buttonAriaLabel: 'Review device software', + buttonClass: 'action-button', + }); + expectChromeCleanerRouteButtonClickActions(); }); test('chromeCleanerRebootRequiredUiTest', function() { @@ -232,15 +162,34 @@ // Ensure the browser proxy call is done. return chromeCleanupBrowserProxy.whenCalled('restartComputer'); }); +}); - test('chromeCleanerDisabledByAdminUiTest', function() { - fireSafetyCheckChromeCleanerEvent( - SafetyCheckChromeCleanerStatus.DISABLED_BY_ADMIN); - flush(); - assertSafetyCheckChild({ - page: page, - iconStatus: SafetyCheckIconStatus.INFO, - label: 'Device software', +suite('SafetyCheckChromeCleanerFlagDisabledTests', function() { + /** @type {!SettingsSafetyCheckChromeCleanerChildElement} */ + let page; + + suiteSetup(function() { + loadTimeData.overrideValues({ + safetyCheckChromeCleanerChildEnabled: false, }); }); + + setup(function() { + document.body.innerHTML = ''; + page = /** @type {!SettingsSafetyCheckChromeCleanerChildElement} */ ( + document.createElement('settings-safety-check-chrome-cleaner-child')); + document.body.appendChild(page); + flush(); + }); + + teardown(function() { + page.remove(); + }); + + test('testChromeCleanerNotPresent', function() { + fireSafetyCheckChromeCleanerEvent(SafetyCheckChromeCleanerStatus.INFECTED); + flush(); + // The UI is not visible. + assertFalse(!!page.$$('#safetyCheckChild')); + }); });
diff --git a/chrome/test/data/webui/settings/safety_check_page_branded_windows_test.js b/chrome/test/data/webui/settings/safety_check_page_branded_windows_test.js deleted file mode 100644 index 54d767e..0000000 --- a/chrome/test/data/webui/settings/safety_check_page_branded_windows_test.js +++ /dev/null
@@ -1,71 +0,0 @@ -// 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. - -// clang-format off -import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; -import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js'; -// clang-format on - -suite('SafetyCheckPageChromeCleanerFlagDisabledTests', function() { - /** @type {!SettingsSafetyCheckPageElement} */ - let page; - - suiteSetup(function() { - loadTimeData.overrideValues({ - safetyCheckChromeCleanerChildEnabled: false, - }); - }); - - setup(function() { - document.body.innerHTML = ''; - page = /** @type {!SettingsSafetyCheckPageElement} */ ( - document.createElement('settings-safety-check-page')); - document.body.appendChild(page); - flush(); - }); - - teardown(function() { - page.remove(); - }); - - test('testChromeCleanerNotPresent', async function() { - // User starts check. - page.$$('#safetyCheckParentButton').click(); - flush(); - // There is no Chrome cleaner child in safety check. - assertFalse(!!page.$$('#chromeCleanerChild')); - }); -}); - -suite('SafetyCheckPageChromeCleanerFlagEnabledTests', function() { - /** @type {!SettingsSafetyCheckPageElement} */ - let page; - - suiteSetup(function() { - loadTimeData.overrideValues({ - safetyCheckChromeCleanerChildEnabled: true, - }); - }); - - setup(function() { - document.body.innerHTML = ''; - page = /** @type {!SettingsSafetyCheckPageElement} */ ( - document.createElement('settings-safety-check-page')); - document.body.appendChild(page); - flush(); - }); - - teardown(function() { - page.remove(); - }); - - test('testChromeCleanerNotPresent', async function() { - // User starts check. - page.$$('#safetyCheckParentButton').click(); - flush(); - // There is a Chrome cleaner child in safety check. - assertTrue(!!page.$$('#chromeCleanerChild')); - }); -});
diff --git a/chrome/test/data/webui/settings/safety_check_page_test.js b/chrome/test/data/webui/settings/safety_check_page_test.js index 8dc02b08..618f473a 100644 --- a/chrome/test/data/webui/settings/safety_check_page_test.js +++ b/chrome/test/data/webui/settings/safety_check_page_test.js
@@ -232,8 +232,7 @@ SafetyCheckSafeBrowsingStatus.ENABLED_STANDARD); fireSafetyCheckExtensionsEvent( SafetyCheckExtensionsStatus.NO_BLOCKLISTED_EXTENSIONS); - fireSafetyCheckChromeCleanerEvent( - SafetyCheckChromeCleanerStatus.REPORTER_FOUND_NOTHING); + fireSafetyCheckChromeCleanerEvent(SafetyCheckChromeCleanerStatus.INFECTED); fireSafetyCheckParentEvent(SafetyCheckParentStatus.AFTER); flush();
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc index ed5d756..3483370e 100644 --- a/chrome/test/media_router/media_router_integration_browsertest.cc +++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -389,7 +389,7 @@ policy::PolicyMap policy; policy.Set(policy::key::kEnableMediaRouter, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, - base::Value(enable), nullptr); + std::make_unique<base::Value>(enable), nullptr); provider_.UpdateChromePolicy(policy); base::RunLoop().RunUntilIdle(); }
diff --git a/chromecast/bindings/BUILD.gn b/chromecast/bindings/BUILD.gn index fd90189d..343c254 100644 --- a/chromecast/bindings/BUILD.gn +++ b/chromecast/bindings/BUILD.gn
@@ -62,6 +62,7 @@ ":bindings_resources", "//base", "//chromecast/browser:public", + "//components/on_load_script_injector/browser", "//mojo/public/cpp/system", "//third_party/blink/public/common", ]
diff --git a/chromecast/bindings/DEPS b/chromecast/bindings/DEPS index 928a6fbc..d2bba5b 100644 --- a/chromecast/bindings/DEPS +++ b/chromecast/bindings/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+chromecast/browser", "+components/cast/api_bindings", + "+components/on_load_script_injector/browser", "+content/public/common", "+content/public/test", "+fuchsia",
diff --git a/chromecast/bindings/bindings_manager_cast.cc b/chromecast/bindings/bindings_manager_cast.cc index 4c3c6be..7234304b 100644 --- a/chromecast/bindings/bindings_manager_cast.cc +++ b/chromecast/bindings/bindings_manager_cast.cc
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "base/strings/utf_string_conversions.h" #include "chromecast/bindings/grit/resources.h" +#include "components/on_load_script_injector/browser/on_load_script_injector_host.h" #include "mojo/public/cpp/bindings/connector.h" #include "ui/base/resource/resource_bundle.h" @@ -25,7 +26,15 @@ } // namespace -BindingsManagerCast::BindingsManagerCast() : cast_web_contents_(nullptr) { +BindingsManagerCast::BindingsManagerCast( + chromecast::CastWebContents* cast_web_contents) + : cast_web_contents_(cast_web_contents) { + DCHECK(cast_web_contents_); + + // TODO(crbug.com/1103058): Remove this when NamedMessagePortConnector is + // added as a Component. + CastWebContents::Observer::Observe(cast_web_contents_); + // NamedMessagePortConnector binding will be injected into page first. AddBinding(kNamedMessagePortConnectorBindingsId, ui::ResourceBundle::GetSharedInstance().LoadDataResourceString( @@ -36,43 +45,8 @@ void BindingsManagerCast::AddBinding(base::StringPiece binding_name, base::StringPiece binding_script) { - bindings_by_id_[binding_name.as_string()] = binding_script.as_string(); -} - -void BindingsManagerCast::AttachToPage( - chromecast::CastWebContents* cast_web_contents) { - DCHECK(!cast_web_contents_) << "AttachToPage() was called twice."; - DCHECK(cast_web_contents); - - cast_web_contents_ = cast_web_contents; - CastWebContents::Observer::Observe(cast_web_contents_); - - for (const auto& binding : bindings_by_id_) { - LOG(INFO) << "Register bindings for page. bindingId: " << binding.first; - cast_web_contents_->AddBeforeLoadJavaScript( - binding.first /* binding ID */, {"*"}, binding.second /* binding JS */); - } -} - -void BindingsManagerCast::OnPageStateChanged( - CastWebContents* cast_web_contents) { - auto page_state = cast_web_contents->page_state(); - - switch (page_state) { - case CastWebContents::PageState::IDLE: - case CastWebContents::PageState::LOADING: - case CastWebContents::PageState::CLOSED: - return; - case CastWebContents::PageState::DESTROYED: - case CastWebContents::PageState::ERROR: - blink_port_.Reset(); - CastWebContents::Observer::Observe(nullptr); - cast_web_contents_ = nullptr; - return; - case CastWebContents::PageState::LOADED: - OnPageLoaded(); - return; - } + cast_web_contents_->script_injector()->AddScriptForAllOrigins( + binding_name.as_string(), binding_script); } void BindingsManagerCast::OnPageLoaded() { @@ -98,6 +72,29 @@ std::move(message_ports)); } +void BindingsManagerCast::OnPageStateChanged( + CastWebContents* cast_web_contents) { + auto page_state = cast_web_contents->page_state(); + + switch (page_state) { + case CastWebContents::PageState::LOADING: + cast_web_contents_->InjectScriptsIntoMainFrame(); + return; + case CastWebContents::PageState::DESTROYED: + case CastWebContents::PageState::ERROR: + blink_port_.Reset(); + CastWebContents::Observer::Observe(nullptr); + cast_web_contents_ = nullptr; + return; + case CastWebContents::PageState::LOADED: + OnPageLoaded(); + return; + case CastWebContents::PageState::IDLE: + case CastWebContents::PageState::CLOSED: + return; + } +} + bool BindingsManagerCast::OnMessage(blink::WebMessagePort::Message message) { // Receive MessagePort and forward ports to their corresponding // binding handlers.
diff --git a/chromecast/bindings/bindings_manager_cast.h b/chromecast/bindings/bindings_manager_cast.h index 5597de58..ccd3785 100644 --- a/chromecast/bindings/bindings_manager_cast.h +++ b/chromecast/bindings/bindings_manager_cast.h
@@ -23,13 +23,9 @@ public CastWebContents::Observer, public blink::WebMessagePort::MessageReceiver { public: - BindingsManagerCast(); + explicit BindingsManagerCast(chromecast::CastWebContents* cast_web_contents); ~BindingsManagerCast() override; - // Add JS bindings to the page |cast_web_contents_|. - // Start Observing the PageState changes. - void AttachToPage(chromecast::CastWebContents* cast_web_contents); - // The document and its statically-declared subresources are loaded. // BindingsManagerCast will inject all registered bindings at this time. // BindingsManagerCast will post a message that conveys an end of MessagePort @@ -37,21 +33,20 @@ // port to communicate with the native part. void OnPageLoaded(); - // BindingsManager implementation: + // BindingsManager implementation. void AddBinding(base::StringPiece binding_name, base::StringPiece binding_script) override; - // CastWebContents::Observer implementation: + private: + // CastWebContents::Observer implementation. void OnPageStateChanged(CastWebContents* cast_web_contents) override; - private: // blink::WebMessagePort::MessageReceiver implementation: bool OnMessage(blink::WebMessagePort::Message message) override; void OnPipeError() override; - // Stores all bindings, keyed on the string-based IDs. - std::map<std::string, std::string> bindings_by_id_; chromecast::CastWebContents* cast_web_contents_; + // Receives messages from JS. blink::WebMessagePort blink_port_;
diff --git a/chromecast/bindings/bindings_manager_cast_browsertest.cc b/chromecast/bindings/bindings_manager_cast_browsertest.cc index 6ae4c26..7ea738b 100644 --- a/chromecast/bindings/bindings_manager_cast_browsertest.cc +++ b/chromecast/bindings/bindings_manager_cast_browsertest.cc
@@ -290,7 +290,8 @@ cast_web_contents_ = std::make_unique<CastWebContentsImpl>(web_contents_.get(), init_params); title_change_observer_.Observe(cast_web_contents_.get()); - bindings_manager_ = std::make_unique<bindings::BindingsManagerCast>(); + bindings_manager_ = std::make_unique<bindings::BindingsManagerCast>( + cast_web_contents_.get()); } void PostRunTestOnMainThread() override { @@ -345,9 +346,6 @@ std::make_unique<TestBindingBackend>(bindings_manager_.get()); // TestBindingBackend test_binding_backend(bindings_manager_.get()); - // Attach BindingsManager to the page. - bindings_manager_->AttachToPage(cast_web_contents_.get()); - // Load test page. constexpr char kTestPageTitle[] = "bindings"; cast_web_contents_->LoadUrl(test_url);
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn index 56f6614d..c8c157d 100644 --- a/chromecast/browser/BUILD.gn +++ b/chromecast/browser/BUILD.gn
@@ -201,6 +201,7 @@ "//components/metrics", "//components/metrics:content", "//components/metrics:net", + "//components/on_load_script_injector/browser", "//components/variations/net", # TODO(gfhuang): Eliminate this dependency if ScreenInfoMetricsProvider
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS index 140d0251..119c5d9 100644 --- a/chromecast/browser/DEPS +++ b/chromecast/browser/DEPS
@@ -23,6 +23,7 @@ "+components/media_control/mojom", "+components/network_hints", "+components/network_session_configurator/common", + "+components/on_load_script_injector/browser", "+components/policy/core/browser", "+components/prefs", "+components/pref_registry",
diff --git a/chromecast/browser/cast_web_contents.h b/chromecast/browser/cast_web_contents.h index 220c33d4..5724ada9 100644 --- a/chromecast/browser/cast_web_contents.h +++ b/chromecast/browser/cast_web_contents.h
@@ -27,6 +27,10 @@ class AssociatedInterfaceProvider; } // namespace blink +namespace on_load_script_injector { +class OnLoadScriptInjectorHost; +} // namespace on_load_script_injector + namespace content { class WebContents; } // namespace content @@ -332,29 +336,13 @@ // Page Communication // =========================================================================== - // Executes a UTF-8 encoded |script| for every subsequent page load where - // the frame's URL has an origin reflected in |origins|. The script is - // executed early, prior to the execution of the document's scripts. - // - // Scripts are identified by a string-based client-managed |id|. Any - // script previously injected using the same |id| will be replaced. - // - // The order in which multiple bindings are executed is the same as the - // order in which the bindings were Added. If a script is added which - // clobbers an existing script of the same |id|, the previous script's - // precedence in the injection order will be preserved. - // |script| and |id| must be non-empty string. - // - // At least one |origins| entry must be specified. - // If a wildcard "*" is specified in |origins|, then the script will be - // evaluated for all documents. - virtual void AddBeforeLoadJavaScript(base::StringPiece id, - const std::vector<std::string>& origins, - base::StringPiece script) = 0; + // Returns the script injector instance, which injects scripts at page load + // time. + virtual on_load_script_injector::OnLoadScriptInjectorHost* + script_injector() = 0; - // Removes a previously added JavaScript snippet identified by |id|. - // This is a no-op if there is no JavaScript snippet identified by |id|. - virtual void RemoveBeforeLoadJavaScript(base::StringPiece id) = 0; + // Injects on-load scripts into the WebContents' main frame. + virtual void InjectScriptsIntoMainFrame() = 0; // Posts a message to the frame's onMessage handler. //
diff --git a/chromecast/browser/cast_web_contents_browsertest.cc b/chromecast/browser/cast_web_contents_browsertest.cc index 45b419b..601dc488 100644 --- a/chromecast/browser/cast_web_contents_browsertest.cc +++ b/chromecast/browser/cast_web_contents_browsertest.cc
@@ -749,249 +749,6 @@ run_loop->Run(); } -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, ExecuteJavaScriptOnLoad) { - // =========================================================================== - // Test: Injecting script to change title should work. - // =========================================================================== - constexpr char kExpectedTitle[] = "hello"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - - // The script should be able to run before HTML <script> tag starts running. - // The original title will be loaded first and then the injected script. Other - // scripts must run after the injected script. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kExpectedTitle))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))); - constexpr char kBindingsId[] = "1234"; - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId, {gurl.GetOrigin().spec()}, "stashed_title = 'hello';"); - - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kExpectedTitle); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptUpdatedOnLoad) { - // =========================================================================== - // Test: Verify that this script replaces the previous script with same - // binding id, as opposed to being injected alongside it. (The latter would - // result in the title being "helloclobber"). - // =========================================================================== - constexpr char kReplaceTitle[] = "clobber"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - - // The script should be able to run before HTML <script> tag starts running. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kReplaceTitle))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))); - - constexpr char kBindingsId[] = "1234"; - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId, {gurl.GetOrigin().spec()}, "stashed_title = 'hello';"); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId, {gurl.GetOrigin().spec()}, - "stashed_title = document.title + 'clobber';"); - - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kReplaceTitle); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptOnLoadOrdered) { - // =========================================================================== - // Test: Verifies that bindings are injected in order by producing a - // cumulative, non-commutative result. - // =========================================================================== - constexpr char kExpectedTitle[] = "hello there"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - constexpr char kBindingsId1[] = "1234"; - constexpr char kBindingsId2[] = "5678"; - - // The script should be able to run before HTML <script> tag starts running. - // The original title will be loaded first and then the injected script. Other - // scripts must run after the injected script. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kExpectedTitle))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))); - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId1, {gurl.GetOrigin().spec()}, "stashed_title = 'hello';"); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId2, {gurl.GetOrigin().spec()}, "stashed_title += ' there';"); - - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kExpectedTitle); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptOnLoadRemoved) { - // =========================================================================== - // Test: Verifies that bindings could be removed successfully before page - // starts loading. - // =========================================================================== - constexpr char kExpectedTitle[] = "foo"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - constexpr char kBindingsId1[] = "1234"; - constexpr char kBindingsId2[] = "5678"; - - // The script should be able to run before HTML <script> tag starts running. - // The original title will be loaded first and then the injected script. Other - // scripts must run after the injected script. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kExpectedTitle))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))); - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId1, {gurl.GetOrigin().spec()}, "stashed_title = 'foo';"); - // Add a script which clobbers "foo". - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId2, {gurl.GetOrigin().spec()}, "stashed_title = 'bar';"); - // Deletes the clobbering script. - cast_web_contents_->RemoveBeforeLoadJavaScript(kBindingsId2); - - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kExpectedTitle); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptOnLoadWrongOrigin) { - // =========================================================================== - // Test: Injecting script should not happen if the to-be-loaded page's origin - // is not whitelisted for the injection script. - // =========================================================================== - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - constexpr char kBindingsId[] = "1234"; - - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))); - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId, {"http://example.com"}, "stashed_title = 'hello';"); - - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kOriginalTitle); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptOnLoadWildcardOrigin) { - // Start test server for hosting test HTML pages. - embedded_test_server()->ServeFilesFromSourceDirectory(GetTestDataPath()); - StartTestServer(); - // =========================================================================== - // Test: Injecting script should be able to load on arbitrary origins with - // wildcard origin restriction set. - // =========================================================================== - constexpr char kInjectedTitle1[] = "hello"; - constexpr char kInjectedTitle2[] = "world"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - constexpr char kBindingsId1[] = "1234"; - constexpr char kBindingsId2[] = "5678"; - - // The script should be able to run before HTML <script> tag starts running. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))) - .Times(2); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kInjectedTitle1))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kInjectedTitle2))); - - GURL gurl{embedded_test_server()->GetURL("/dynamic_title.html")}; - - cast_web_contents_->AddBeforeLoadJavaScript(kBindingsId1, {"*"}, - "stashed_title = 'hello';"); - // Test script injection for the origin 127.0.0.1. - // Load title "hello": - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kInjectedTitle1); - - // Load AboutBlank page: - cast_web_contents_->LoadUrl(GURL(url::kAboutBlankURL)); - - cast_web_contents_->AddBeforeLoadJavaScript(kBindingsId2, {"*"}, - "stashed_title = 'world';"); - // Test script injection using a different origin ("localhost"), which should - // still be picked up by the wildcard. And the title should be initialized as - // origianl title first, then as 'world'. - GURL alt_url = - embedded_test_server()->GetURL("localhost", "/dynamic_title.html"); - cast_web_contents_->LoadUrl(alt_url); - title_change_observer_.RunUntilTitleEquals(kInjectedTitle2); -} - -IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, - ExecuteJavaScriptOnLoadEarlyAndLateRegistrations) { - // =========================================================================== - // Test: Tests that we can inject scripts before and after RenderFrame - // creation. - // =========================================================================== - constexpr char kExpectedTitle1[] = "foo"; - constexpr char kExpectedTitle2[] = "foo bar"; - constexpr char kOriginalTitle[] = - "Welcome to Stan the Offline Dino's Homepage"; - constexpr char kBindingsId1[] = "1234"; - constexpr char kBindingsId2[] = "5678"; - - // The script should be able to run before HTML <script> tag starts running. - // The original title will be loaded first and then the injected script. Other - // scripts must run after the injected script. - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kExpectedTitle2))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kExpectedTitle1))); - EXPECT_CALL(mock_cast_wc_observer_, - UpdateTitle(base::ASCIIToUTF16(kOriginalTitle))) - .Times(2); - - GURL gurl = content::GetFileUrlWithQuery( - GetTestDataFilePath("dynamic_title.html"), ""); - - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId1, {gurl.GetOrigin().spec()}, "stashed_title = 'foo';"); - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kExpectedTitle1); - - // Inject bindings after RenderFrameCreation - cast_web_contents_->AddBeforeLoadJavaScript( - kBindingsId2, {gurl.GetOrigin().spec()}, "stashed_title += ' bar';"); - - // Navigate away to clean the state. - cast_web_contents_->LoadUrl(GURL(url::kAboutBlankURL)); - - // Navigate back and see if both scripts are working. - cast_web_contents_->LoadUrl(gurl); - title_change_observer_.RunUntilTitleEquals(kExpectedTitle2); -} - IN_PROC_BROWSER_TEST_F(CastWebContentsBrowserTest, PostMessageToMainFrame) { // =========================================================================== // Test: Tests that we can trigger onmessage event on a web page. This test
diff --git a/chromecast/browser/cast_web_contents_impl.cc b/chromecast/browser/cast_web_contents_impl.cc index 7f224f9..312fa12 100644 --- a/chromecast/browser/cast_web_contents_impl.cc +++ b/chromecast/browser/cast_web_contents_impl.cc
@@ -22,7 +22,6 @@ #include "chromecast/browser/devtools/remote_debugging_server.h" #include "chromecast/browser/queryable_data_host_cast.h" #include "chromecast/common/mojom/activity_url_filter.mojom.h" -#include "chromecast/common/mojom/on_load_script_injector.mojom.h" #include "chromecast/common/mojom/queryable_data_store.mojom.h" #include "chromecast/common/queryable_data.h" #include "chromecast/net/connectivity_checker.h" @@ -64,24 +63,6 @@ } } -bool IsOriginWhitelisted(const GURL& url, - const std::vector<std::string>& allowed_origins) { - constexpr const char kWildcard[] = "*"; - url::Origin url_origin = url::Origin::Create(url); - - for (const std::string& allowed_origin : allowed_origins) { - if (allowed_origin == kWildcard) - return true; - - if (url_origin.IsSameOriginWith(url::Origin::Create(GURL(allowed_origin)))) - return true; - - // TODO(crbug.com/893236): Add handling for nonstandard origins - // (e.g. data: URIs). - } - return false; -} - } // namespace // static @@ -346,48 +327,14 @@ } } -CastWebContentsImpl::OriginScopedScript::OriginScopedScript() = default; - -CastWebContentsImpl::OriginScopedScript::OriginScopedScript( - const std::vector<std::string>& origins, - std::string script) - : origins_(std::move(origins)), script_(std::move(script)) {} - -CastWebContentsImpl::OriginScopedScript& -CastWebContentsImpl::OriginScopedScript::operator=( - CastWebContentsImpl::OriginScopedScript&& other) { - origins_ = std::move(other.origins_); - script_ = std::move(other.script_); - return *this; +on_load_script_injector::OnLoadScriptInjectorHost* +CastWebContentsImpl::script_injector() { + return &script_injector_; } -CastWebContentsImpl::OriginScopedScript::~OriginScopedScript() = default; - -void CastWebContentsImpl::AddBeforeLoadJavaScript( - base::StringPiece id, - const std::vector<std::string>& origins, - base::StringPiece script) { - DCHECK(!id.empty() && !script.empty() && !origins.empty()) - << "Invalid empty parameters were passed to AddBeforeLoadJavascript"; - // If there is no script with the identifier |id|, then create a place for it - // at the end of the injection sequence. - if (before_load_scripts_.find(id.as_string()) == before_load_scripts_.end()) { - before_load_scripts_order_.push_back(id.as_string()); - } - before_load_scripts_[id.as_string()] = - OriginScopedScript(origins, script.as_string()); -} - -void CastWebContentsImpl::RemoveBeforeLoadJavaScript(base::StringPiece id) { - before_load_scripts_.erase(id.as_string()); - - for (auto script_id_iter = before_load_scripts_order_.begin(); - script_id_iter != before_load_scripts_order_.end(); ++script_id_iter) { - if (*script_id_iter == id) { - before_load_scripts_order_.erase(script_id_iter); - return; - } - } +void CastWebContentsImpl::InjectScriptsIntoMainFrame() { + script_injector_.InjectScriptsForURL(web_contents_->GetURL(), + web_contents_->GetMainFrame()); } void CastWebContentsImpl::PostMessageToMainFrame( @@ -666,32 +613,6 @@ UpdatePageState(); DCHECK_EQ(page_state_, PageState::LOADING); NotifyPageState(); - - if (before_load_scripts_.empty()) - return; - - if (!navigation_handle->IsInMainFrame() || - navigation_handle->IsSameDocument() || navigation_handle->IsErrorPage()) - return; - - mojo::AssociatedRemote<chromecast::shell::mojom::OnLoadScriptInjector> - before_load_script_injector; - navigation_handle->GetRenderFrameHost() - ->GetRemoteAssociatedInterfaces() - ->GetInterface(&before_load_script_injector); - - // Provision the renderer's ScriptInjector with the scripts scoped to this - // page's origin. - before_load_script_injector->ClearOnLoadScripts(); - for (auto script_id : before_load_scripts_order_) { - const OriginScopedScript& origin_scoped_script = - before_load_scripts_[script_id]; - if (IsOriginWhitelisted(navigation_handle->GetURL(), - origin_scoped_script.origins())) { - before_load_script_injector->AddOnLoadScript( - origin_scoped_script.script()); - } - } } void CastWebContentsImpl::DidFinishNavigation(
diff --git a/chromecast/browser/cast_web_contents_impl.h b/chromecast/browser/cast_web_contents_impl.h index 6c2a8cbf..d383ff1 100644 --- a/chromecast/browser/cast_web_contents_impl.h +++ b/chromecast/browser/cast_web_contents_impl.h
@@ -23,6 +23,7 @@ #include "base/time/time.h" #include "chromecast/browser/cast_media_blocker.h" #include "chromecast/browser/cast_web_contents.h" +#include "components/on_load_script_injector/browser/on_load_script_injector_host.h" #include "content/public/browser/render_process_host_observer.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" @@ -69,10 +70,8 @@ void BlockMediaLoading(bool blocked) override; void BlockMediaStarting(bool blocked) override; void EnableBackgroundVideoPlayback(bool enabled) override; - void AddBeforeLoadJavaScript(base::StringPiece id, - const std::vector<std::string>& origins, - base::StringPiece script) override; - void RemoveBeforeLoadJavaScript(base::StringPiece id) override; + on_load_script_injector::OnLoadScriptInjectorHost* script_injector() override; + void InjectScriptsIntoMainFrame() override; void PostMessageToMainFrame( const std::string& target_origin, const std::string& data, @@ -136,22 +135,6 @@ content::WebContentsObserver::MediaStoppedReason reason) override; private: - struct OriginScopedScript { - OriginScopedScript(); - OriginScopedScript(const std::vector<std::string>& origins, - std::string script); - OriginScopedScript& operator=(OriginScopedScript&& other); - ~OriginScopedScript(); - - const std::vector<std::string>& origins() const { return origins_; } - const std::string script() const { return script_; } - - std::vector<std::string> origins_; - std::string script_; - - DISALLOW_COPY_AND_ASSIGN(OriginScopedScript); - }; - void OnPageLoading(); void OnPageLoaded(); void UpdatePageState(); @@ -192,8 +175,7 @@ bool notifying_; int last_error_; - std::map<std::string, OriginScopedScript> before_load_scripts_; - std::vector<std::string> before_load_scripts_order_; + on_load_script_injector::OnLoadScriptInjectorHost script_injector_; base::ObserverList<Observer>::Unchecked observer_list_;
diff --git a/chromecast/browser/test/mock_cast_web_view.h b/chromecast/browser/test/mock_cast_web_view.h index 38ec872..3466cbf 100644 --- a/chromecast/browser/test/mock_cast_web_view.h +++ b/chromecast/browser/test/mock_cast_web_view.h
@@ -37,16 +37,11 @@ MOCK_METHOD(void, BlockMediaLoading, (bool), (override)); MOCK_METHOD(void, BlockMediaStarting, (bool), (override)); MOCK_METHOD(void, EnableBackgroundVideoPlayback, (bool), (override)); - MOCK_METHOD(void, - AddBeforeLoadJavaScript, - (base::StringPiece, - const std::vector<std::string>&, - base::StringPiece), + MOCK_METHOD(on_load_script_injector::OnLoadScriptInjectorHost*, + script_injector, + (), (override)); - MOCK_METHOD(void, - RemoveBeforeLoadJavaScript, - (base::StringPiece), - (override)); + MOCK_METHOD(void, InjectScriptsIntoMainFrame, (), (override)); MOCK_METHOD(void, PostMessageToMainFrame, (const std::string&,
diff --git a/chromecast/common/mojom/BUILD.gn b/chromecast/common/mojom/BUILD.gn index 59d529c15..33717acf 100644 --- a/chromecast/common/mojom/BUILD.gn +++ b/chromecast/common/mojom/BUILD.gn
@@ -15,7 +15,6 @@ "media_caps.mojom", "memory_pressure.mojom", "multiroom.mojom", - "on_load_script_injector.mojom", "queryable_data_store.mojom", "service_connector.mojom", ]
diff --git a/chromecast/common/mojom/on_load_script_injector.mojom b/chromecast/common/mojom/on_load_script_injector.mojom deleted file mode 100644 index 58c38b1..0000000 --- a/chromecast/common/mojom/on_load_script_injector.mojom +++ /dev/null
@@ -1,17 +0,0 @@ -// Copyright 2019 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. - -module chromecast.shell.mojom; - -// Interface associated with RenderFrames for managing on-load JavaScript -// injection tasks per frame. Does not enforce script injection policies, -// which must be implemented at a higher level. -interface OnLoadScriptInjector { - // Add an on-load JavaScript injection task. The script will be - // executed before any other script (e.g. <script> tag) runs. - AddOnLoadScript(string script); - - // Clear all registered on-load JavaScript injection tasks. - ClearOnLoadScripts(); -};
diff --git a/chromecast/renderer/BUILD.gn b/chromecast/renderer/BUILD.gn index 21e1a95c..b705edb 100644 --- a/chromecast/renderer/BUILD.gn +++ b/chromecast/renderer/BUILD.gn
@@ -43,8 +43,6 @@ "js_channel_bindings.h", "native_bindings_helper.cc", "native_bindings_helper.h", - "on_load_script_injector.cc", - "on_load_script_injector.h", "queryable_data_bindings.cc", "queryable_data_bindings.h", "queryable_data_store.cc", @@ -72,6 +70,7 @@ "//chromecast/media/base:media_codec_support", "//components/media_control/renderer", "//components/network_hints/renderer", + "//components/on_load_script_injector/renderer", "//content/public/common", "//content/public/renderer", "//crypto",
diff --git a/chromecast/renderer/DEPS b/chromecast/renderer/DEPS index 8c15e22..be0e393 100644 --- a/chromecast/renderer/DEPS +++ b/chromecast/renderer/DEPS
@@ -6,6 +6,7 @@ "+components/media_control/renderer", "+components/media_control/mojom", "+components/network_hints/renderer", + "+components/on_load_script_injector/renderer", "+components/version_info", "+content/public/common", "+content/public/renderer",
diff --git a/chromecast/renderer/cast_content_renderer_client.cc b/chromecast/renderer/cast_content_renderer_client.cc index 33aafd5b..4a7589d5 100644 --- a/chromecast/renderer/cast_content_renderer_client.cc +++ b/chromecast/renderer/cast_content_renderer_client.cc
@@ -22,10 +22,10 @@ #include "chromecast/renderer/js_channel_bindings.h" #include "chromecast/renderer/media/key_systems_cast.h" #include "chromecast/renderer/media/media_caps_observer_impl.h" -#include "chromecast/renderer/on_load_script_injector.h" #include "chromecast/renderer/queryable_data_bindings.h" #include "components/media_control/renderer/media_playback_options.h" #include "components/network_hints/renderer/web_prescient_networking_impl.h" +#include "components/on_load_script_injector/renderer/on_load_script_injector.h" #include "content/public/common/content_switches.h" #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_thread.h" @@ -187,8 +187,8 @@ } // Add script injection support to the RenderFrame, used by Cast platform - // APIs. The objects' lifetimes are bound to the RenderFrame's lifetime. - new OnLoadScriptInjector(render_frame); + // APIs. The injector's lifetime is bound to the RenderFrame's lifetime. + new on_load_script_injector::OnLoadScriptInjector(render_frame); if (!app_media_capabilities_observer_receiver_.is_bound()) { mojo::Remote<mojom::ApplicationMediaCapabilities> app_media_capabilities;
diff --git a/chromecast/renderer/on_load_script_injector.cc b/chromecast/renderer/on_load_script_injector.cc deleted file mode 100644 index 0adc978..0000000 --- a/chromecast/renderer/on_load_script_injector.cc +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2019 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 "chromecast/renderer/on_load_script_injector.h" - -#include <utility> -#include <vector> - -#include "base/bind.h" -#include "base/strings/string_piece.h" -#include "base/strings/utf_string_conversions.h" -#include "content/public/renderer/render_frame.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" - -namespace chromecast { -namespace shell { - -OnLoadScriptInjector::OnLoadScriptInjector(content::RenderFrame* frame) - : RenderFrameObserver(frame), weak_ptr_factory_(this) { - render_frame()->GetAssociatedInterfaceRegistry()->AddInterface( - base::BindRepeating(&OnLoadScriptInjector::BindToReceiver, - weak_ptr_factory_.GetWeakPtr())); -} - -OnLoadScriptInjector::~OnLoadScriptInjector() {} - -void OnLoadScriptInjector::BindToReceiver( - mojo::PendingAssociatedReceiver<mojom::OnLoadScriptInjector> receiver) { - receivers_.Add(this, std::move(receiver)); -} - -void OnLoadScriptInjector::DidCommitProvisionalLoad( - ui::PageTransition transition) { - // Don't inject anything for subframes. - if (!render_frame()->IsMainFrame()) - return; - - for (std::string& script : on_load_scripts_) { - base::string16 script_utf16 = base::UTF8ToUTF16(script); - render_frame()->ExecuteJavaScript(script_utf16); - } -} - -void OnLoadScriptInjector::AddOnLoadScript(const std::string& script) { - on_load_scripts_.push_back(std::move(script)); -} - -void OnLoadScriptInjector::ClearOnLoadScripts() { - on_load_scripts_.clear(); -} - -void OnLoadScriptInjector::OnDestruct() { - delete this; -} - -} // namespace shell -} // namespace chromecast
diff --git a/chromecast/renderer/on_load_script_injector.h b/chromecast/renderer/on_load_script_injector.h deleted file mode 100644 index ab5c2b6..0000000 --- a/chromecast/renderer/on_load_script_injector.h +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2019 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 CHROMECAST_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ -#define CHROMECAST_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ - -#include <vector> - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/strings/string_piece_forward.h" -#include "chromecast/common/mojom/on_load_script_injector.mojom.h" -#include "content/public/renderer/render_frame_observer.h" -#include "mojo/public/cpp/bindings/associated_receiver_set.h" -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" - -namespace chromecast { -namespace shell { - -// Injects one or more scripts into a RenderFrame at the earliest possible time -// during the page load process. -class OnLoadScriptInjector : public content::RenderFrameObserver, - public mojom::OnLoadScriptInjector { - public: - explicit OnLoadScriptInjector(content::RenderFrame* frame); - - void BindToReceiver( - mojo::PendingAssociatedReceiver<mojom::OnLoadScriptInjector> receiver); - - void AddOnLoadScript(const std::string& script) override; - void ClearOnLoadScripts() override; - - // RenderFrameObserver override: - void OnDestruct() override; - void DidCommitProvisionalLoad(ui::PageTransition transition) override; - - private: - // Called by OnDestruct(), when the RenderFrame is destroyed. - ~OnLoadScriptInjector() override; - - std::vector<std::string> on_load_scripts_; - mojo::AssociatedReceiverSet<mojom::OnLoadScriptInjector> receivers_; - base::WeakPtrFactory<OnLoadScriptInjector> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(OnLoadScriptInjector); -}; - -} // namespace shell -} // namespace chromecast - -#endif // CHROMECAST_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_
diff --git a/chromeos/chromeos_strings.grd b/chromeos/chromeos_strings.grd index 8557559..6403457 100644 --- a/chromeos/chromeos_strings.grd +++ b/chromeos/chromeos_strings.grd
@@ -173,7 +173,7 @@ <!-- Pop-up enterprise management. --> <message name="IDS_ASH_LOGIN_ENTERPRISE_MANAGED_POP_UP" desc="Text shown in the management pop-up when user clicks on status tray enterprise management."> - This <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> is managed by <ph name="ENROLLMENT_DOMAIN">$2<ex>example.com</ex></ph>. Administrators may remotely configure and monitor the device. + This <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> is managed by <ph name="ENROLLMENT_DOMAIN">$2<ex>example.com</ex></ph>. Administrators may remotely configure the device. </message> <!-- Status tray enterprise management. -->
diff --git a/chromeos/chromeos_strings_grd/IDS_ASH_LOGIN_ENTERPRISE_MANAGED_POP_UP.png.sha1 b/chromeos/chromeos_strings_grd/IDS_ASH_LOGIN_ENTERPRISE_MANAGED_POP_UP.png.sha1 index df3482d..307c041 100644 --- a/chromeos/chromeos_strings_grd/IDS_ASH_LOGIN_ENTERPRISE_MANAGED_POP_UP.png.sha1 +++ b/chromeos/chromeos_strings_grd/IDS_ASH_LOGIN_ENTERPRISE_MANAGED_POP_UP.png.sha1
@@ -1 +1 @@ -26deb6b92b57eb921837cb19279ff6dd4765e8fb \ No newline at end of file +c3f10d6433d4a26768653c8cbb49730eb1955009 \ No newline at end of file
diff --git a/chromeos/components/camera_app_ui/camera_app_ui.cc b/chromeos/components/camera_app_ui/camera_app_ui.cc index cab39e1b..b08d4c03 100644 --- a/chromeos/components/camera_app_ui/camera_app_ui.cc +++ b/chromeos/components/camera_app_ui/camera_app_ui.cc
@@ -66,6 +66,8 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(kChromeUICameraAppHost); + source->DisableTrustedTypesCSP(); + // Add all settings resources. for (size_t i = 0; i < kChromeosCameraAppResourcesSize; i++) { source->AddResourcePath(kChromeosCameraAppResources[i].name,
diff --git a/chromeos/components/multidevice/DEPS b/chromeos/components/multidevice/DEPS index 3011d73..bbcf3a6 100644 --- a/chromeos/components/multidevice/DEPS +++ b/chromeos/components/multidevice/DEPS
@@ -1,4 +1,5 @@ include_rules = [ + "+device/bluetooth/public/cpp", "+mojo/public/cpp", "+third_party/securemessage", ]
diff --git a/chromeos/components/multidevice/mojom/multidevice.typemap b/chromeos/components/multidevice/mojom/multidevice.typemap index dba77de..f0ffd8e 100644 --- a/chromeos/components/multidevice/mojom/multidevice.typemap +++ b/chromeos/components/multidevice/mojom/multidevice.typemap
@@ -20,7 +20,9 @@ public_deps = [ "//chromeos/components/multidevice", + "//chromeos/components/multidevice/logging", "//chromeos/services/device_sync/proto", + "//device/bluetooth/public/cpp", ] type_mappings = [
diff --git a/chromeos/components/multidevice/mojom/multidevice_mojom_traits.cc b/chromeos/components/multidevice/mojom/multidevice_mojom_traits.cc index cfcb0c0..3f5dd83 100644 --- a/chromeos/components/multidevice/mojom/multidevice_mojom_traits.cc +++ b/chromeos/components/multidevice/mojom/multidevice_mojom_traits.cc
@@ -5,7 +5,9 @@ #include "chromeos/components/multidevice/mojom/multidevice_mojom_traits.h" #include "base/notreached.h" +#include "chromeos/components/multidevice/logging/logging.h" #include "chromeos/components/multidevice/remote_device_ref.h" +#include "device/bluetooth/public/cpp/bluetooth_address.h" #include "mojo/public/cpp/base/time_mojom_traits.h" namespace mojo { @@ -113,6 +115,14 @@ return remote_device.beacon_seeds; } +const std::string& +StructTraits<chromeos::multidevice::mojom::RemoteDeviceDataView, + chromeos::multidevice::RemoteDevice>:: + bluetooth_public_address( + const chromeos::multidevice::RemoteDevice& remote_device) { + return remote_device.bluetooth_public_address; +} + bool StructTraits<chromeos::multidevice::mojom::RemoteDeviceDataView, chromeos::multidevice::RemoteDevice>:: Read(chromeos::multidevice::mojom::RemoteDeviceDataView in, @@ -127,10 +137,29 @@ !in.ReadPersistentSymmetricKey(&out->persistent_symmetric_key) || !in.ReadLastUpdateTime(&last_update_time) || !in.ReadSoftwareFeatures(&out->software_features) || - !in.ReadBeaconSeeds(&out->beacon_seeds)) { + !in.ReadBeaconSeeds(&out->beacon_seeds) || + !in.ReadBluetoothPublicAddress(&out->bluetooth_public_address)) { return false; } + // Note: |bluetooth_public_address| may be empty if it has not been synced. + if (!out->bluetooth_public_address.empty()) { + std::string bluetooth_public_address_before_canonicalizing = + out->bluetooth_public_address; + + // Canonicalize address, which capitalizes all hex digits. Note that if the + // input address is invalid, CanonicalizeAddress() returns an empty string. + out->bluetooth_public_address = + device::CanonicalizeBluetoothAddress(out->bluetooth_public_address); + + if (out->bluetooth_public_address.empty()) { + PA_LOG(ERROR) << "Invalid bluetooth public address \"" + << bluetooth_public_address_before_canonicalizing + << "\" for device with ID \"" << out->GetDeviceId() + << "\"; clearing."; + } + } + out->public_key = chromeos::multidevice::RemoteDevice::DerivePublicKey(device_id); out->last_update_time_millis = last_update_time.ToJavaTime();
diff --git a/chromeos/components/multidevice/mojom/multidevice_mojom_traits.h b/chromeos/components/multidevice/mojom/multidevice_mojom_traits.h index 4bb229c07..37e66d1 100644 --- a/chromeos/components/multidevice/mojom/multidevice_mojom_traits.h +++ b/chromeos/components/multidevice/mojom/multidevice_mojom_traits.h
@@ -57,6 +57,8 @@ software_features(const chromeos::multidevice::RemoteDevice& remote_device); static const std::vector<chromeos::multidevice::BeaconSeed>& beacon_seeds( const chromeos::multidevice::RemoteDevice& remote_device); + static const std::string& bluetooth_public_address( + const chromeos::multidevice::RemoteDevice& remote_device); static bool Read(chromeos::multidevice::mojom::RemoteDeviceDataView in, chromeos::multidevice::RemoteDevice* out);
diff --git a/chromeos/components/multidevice/mojom/multidevice_mojom_traits_unittest.cc b/chromeos/components/multidevice/mojom/multidevice_mojom_traits_unittest.cc index 82b2520..f59496a 100644 --- a/chromeos/components/multidevice/mojom/multidevice_mojom_traits_unittest.cc +++ b/chromeos/components/multidevice/mojom/multidevice_mojom_traits_unittest.cc
@@ -62,6 +62,7 @@ input.last_update_time_millis = 3L; input.software_features = software_features; input.beacon_seeds = {CreateTestBeaconSeed()}; + input.bluetooth_public_address = "01:23:45:67:89:AB"; chromeos::multidevice::RemoteDevice output; EXPECT_TRUE(mojo::test::SerializeAndDeserialize< @@ -81,6 +82,7 @@ output.beacon_seeds[0].start_time().ToJavaTime()); EXPECT_EQ(kTestBeaconSeedEndTimeMillis, output.beacon_seeds[0].end_time().ToJavaTime()); + EXPECT_EQ("01:23:45:67:89:AB", output.bluetooth_public_address); } TEST(DeviceSyncMojomEnumTraitsTest, SoftwareFeature) {
diff --git a/chromeos/components/multidevice/mojom/multidevice_types.mojom b/chromeos/components/multidevice/mojom/multidevice_types.mojom index 83d85bf..1012dd9b4 100644 --- a/chromeos/components/multidevice/mojom/multidevice_types.mojom +++ b/chromeos/components/multidevice/mojom/multidevice_types.mojom
@@ -94,4 +94,9 @@ // metadata synced for over 30 days, it is possible that a connection will not // be able to be established over BLE. array<BeaconSeed> beacon_seeds; + + // Bluetooth public address, formatted as a hex string with colons and capital + // letters (example: "01:23:45:67:89:AB"). If the device does not have a + // synced address, this field is empty. + string bluetooth_public_address; };
diff --git a/chromeos/components/multidevice/remote_device.cc b/chromeos/components/multidevice/remote_device.cc index 6f29554..03cd4af 100644 --- a/chromeos/components/multidevice/remote_device.cc +++ b/chromeos/components/multidevice/remote_device.cc
@@ -37,7 +37,8 @@ const std::string& persistent_symmetric_key, int64_t last_update_time_millis, const std::map<SoftwareFeature, SoftwareFeatureState>& software_features, - const std::vector<BeaconSeed>& beacon_seeds) + const std::vector<BeaconSeed>& beacon_seeds, + const std::string& bluetooth_public_address) : user_email(user_email), instance_id(instance_id), name(name), @@ -46,7 +47,8 @@ persistent_symmetric_key(persistent_symmetric_key), last_update_time_millis(last_update_time_millis), software_features(software_features), - beacon_seeds(beacon_seeds) {} + beacon_seeds(beacon_seeds), + bluetooth_public_address(bluetooth_public_address) {} RemoteDevice::RemoteDevice(const RemoteDevice& other) = default; @@ -63,7 +65,8 @@ persistent_symmetric_key == other.persistent_symmetric_key && last_update_time_millis == other.last_update_time_millis && software_features == other.software_features && - beacon_seeds == other.beacon_seeds; + beacon_seeds == other.beacon_seeds && + bluetooth_public_address == other.bluetooth_public_address; } bool RemoteDevice::operator<(const RemoteDevice& other) const {
diff --git a/chromeos/components/multidevice/remote_device.h b/chromeos/components/multidevice/remote_device.h index 5274382..0fdc09f 100644 --- a/chromeos/components/multidevice/remote_device.h +++ b/chromeos/components/multidevice/remote_device.h
@@ -42,6 +42,11 @@ std::map<SoftwareFeature, SoftwareFeatureState> software_features; std::vector<BeaconSeed> beacon_seeds; + // Bluetooth public address, formatted as a hex string with colons and capital + // letters (example: "01:23:45:67:89:AB"). If the device does not have a + // synced address, this field is empty. + std::string bluetooth_public_address; + RemoteDevice(); RemoteDevice( const std::string& user_email, @@ -52,7 +57,8 @@ const std::string& persistent_symmetric_key, int64_t last_update_time_millis, const std::map<SoftwareFeature, SoftwareFeatureState>& software_features, - const std::vector<BeaconSeed>& beacon_seeds); + const std::vector<BeaconSeed>& beacon_seeds, + const std::string& bluetooth_public_address); RemoteDevice(const RemoteDevice& other); ~RemoteDevice();
diff --git a/chromeos/components/multidevice/remote_device_ref.h b/chromeos/components/multidevice/remote_device_ref.h index 680709e..4856151 100644 --- a/chromeos/components/multidevice/remote_device_ref.h +++ b/chromeos/components/multidevice/remote_device_ref.h
@@ -65,6 +65,9 @@ const std::vector<BeaconSeed>& beacon_seeds() const { return remote_device_->beacon_seeds; } + const std::string& bluetooth_public_address() const { + return remote_device_->bluetooth_public_address; + } std::string GetDeviceId() const; SoftwareFeatureState GetSoftwareFeatureState(
diff --git a/chromeos/components/multidevice/remote_device_ref_unittest.cc b/chromeos/components/multidevice/remote_device_ref_unittest.cc index a75f5e3..e8a2ac0 100644 --- a/chromeos/components/multidevice/remote_device_ref_unittest.cc +++ b/chromeos/components/multidevice/remote_device_ref_unittest.cc
@@ -14,6 +14,10 @@ namespace multidevice { +namespace { +const char kFakeBluetoothPublicAddress[] = "01:23:45:67:89:AB"; +} // namespace + class RemoteDeviceRefTest : public testing::Test { protected: RemoteDeviceRefTest() = default; @@ -33,7 +37,8 @@ "user_email", "instance_id", "name", "pii_free_name", "public_key", "persistent_symmetric_key", 42000 /* last_update_time_millis */, software_feature_to_state_map /* software_features */, - beacon_seeds /* beacon_seeds */); + beacon_seeds /* beacon_seeds */, + kFakeBluetoothPublicAddress /* bluetooth_public_address */); } std::shared_ptr<RemoteDevice> remote_device_; @@ -54,6 +59,8 @@ EXPECT_EQ(remote_device_->last_update_time_millis, remote_device_ref.last_update_time_millis()); EXPECT_EQ(&remote_device_->beacon_seeds, &remote_device_ref.beacon_seeds()); + EXPECT_EQ(kFakeBluetoothPublicAddress, + remote_device_ref.bluetooth_public_address()); EXPECT_EQ(SoftwareFeatureState::kNotSupported, remote_device_ref.GetSoftwareFeatureState(
diff --git a/chromeos/components/multidevice/remote_device_test_util.cc b/chromeos/components/multidevice/remote_device_test_util.cc index 90f72ce..2337992 100644 --- a/chromeos/components/multidevice/remote_device_test_util.cc +++ b/chromeos/components/multidevice/remote_device_test_util.cc
@@ -59,6 +59,7 @@ // Attributes of the default test remote device. const char kTestRemoteDeviceName[] = "remote device"; const char kTestRemoteDevicePublicKey[] = "public key"; +const char kTestRemoteDeviceBluetoothPublicAddress[] = "01:23:45:67:89:AB"; RemoteDeviceRefBuilder::RemoteDeviceRefBuilder() { remote_device_ = std::make_shared<RemoteDevice>(CreateRemoteDeviceForTest()); @@ -123,6 +124,12 @@ return *this; } +RemoteDeviceRefBuilder& RemoteDeviceRefBuilder::SetBluetoothPublicAddress( + const std::string& bluetooth_public_address) { + remote_device_->bluetooth_public_address = bluetooth_public_address; + return *this; +} + RemoteDeviceRef RemoteDeviceRefBuilder::Build() { return RemoteDeviceRef(remote_device_); } @@ -141,7 +148,8 @@ kTestRemoteDeviceLastUpdateTimeMillis, software_features, {multidevice::BeaconSeed( kBeaconSeedData, base::Time::FromJavaTime(kBeaconSeedStartTimeMillis), - base::Time::FromJavaTime(kBeaconSeedEndTimeMillis))}); + base::Time::FromJavaTime(kBeaconSeedEndTimeMillis))}, + kTestRemoteDeviceBluetoothPublicAddress); } RemoteDeviceRef CreateRemoteDeviceRefForTest() {
diff --git a/chromeos/components/multidevice/remote_device_test_util.h b/chromeos/components/multidevice/remote_device_test_util.h index c9fb837..316de4f6 100644 --- a/chromeos/components/multidevice/remote_device_test_util.h +++ b/chromeos/components/multidevice/remote_device_test_util.h
@@ -18,6 +18,7 @@ // Attributes of the default test remote device. extern const char kTestRemoteDeviceName[]; extern const char kTestRemoteDevicePublicKey[]; +extern const char kTestRemoteDeviceBluetoothPublicAddress[]; class RemoteDeviceRefBuilder { public: @@ -37,6 +38,8 @@ int64_t last_update_time_millis); RemoteDeviceRefBuilder& SetBeaconSeeds( const std::vector<BeaconSeed>& beacon_seeds); + RemoteDeviceRefBuilder& SetBluetoothPublicAddress( + const std::string& bluetooth_public_address); RemoteDeviceRef Build(); private:
diff --git a/chromeos/components/print_management/print_management_ui.cc b/chromeos/components/print_management/print_management_ui.cc index 31f5bcb..9dfc2c12a 100644 --- a/chromeos/components/print_management/print_management_ui.cc +++ b/chromeos/components/print_management/print_management_ui.cc
@@ -106,6 +106,7 @@ html_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources chrome://test 'self';"); + html_source->DisableTrustedTypesCSP(); const auto resources = base::make_span(kChromeosPrintManagementResources, kChromeosPrintManagementResourcesSize);
diff --git a/chromeos/components/telemetry_extension_ui/telemetry_extension_ui.cc b/chromeos/components/telemetry_extension_ui/telemetry_extension_ui.cc index f0bcb96..b16d6ab 100644 --- a/chromeos/components/telemetry_extension_ui/telemetry_extension_ui.cc +++ b/chromeos/components/telemetry_extension_ui/telemetry_extension_ui.cc
@@ -84,6 +84,9 @@ chromeos::kChromeUITelemetryExtensionURL + ";"); untrusted_source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::WorkerSrc, "worker-src 'self';"); + untrusted_source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types telemetry-extension-static;"); return untrusted_source; }
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.cc b/chromeos/dbus/fake_lorgnette_manager_client.cc index bab69ad4a..ddbd720 100644 --- a/chromeos/dbus/fake_lorgnette_manager_client.cc +++ b/chromeos/dbus/fake_lorgnette_manager_client.cc
@@ -35,13 +35,31 @@ base::BindOnce(std::move(callback), std::move(scan_image_response_))); } +void FakeLorgnetteManagerClient::StartScan( + std::string device_name, + const ScanProperties& properties, + DBusMethodCallback<std::string> completion_callback, + base::Optional<base::RepeatingCallback<void(int)>> progress_callback) { + // Simulate progress reporting for the scan job. + if (progress_callback.has_value()) { + base::RepeatingCallback<void(int)> callback = progress_callback.value(); + for (int progress : {7, 22, 40, 42, 59, 74, 95}) { + callback.Run(progress); + } + } + + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(completion_callback), + std::move(scan_image_response_))); +} + void FakeLorgnetteManagerClient::SetListScannersResponse( const base::Optional<lorgnette::ListScannersResponse>& list_scanners_response) { list_scanners_response_ = list_scanners_response; } -void FakeLorgnetteManagerClient::SetScanImageToStringResponse( +void FakeLorgnetteManagerClient::SetScanResponse( const base::Optional<std::string>& scan_image_response) { scan_image_response_ = scan_image_response; }
diff --git a/chromeos/dbus/fake_lorgnette_manager_client.h b/chromeos/dbus/fake_lorgnette_manager_client.h index f48c383..9e1d7d13 100644 --- a/chromeos/dbus/fake_lorgnette_manager_client.h +++ b/chromeos/dbus/fake_lorgnette_manager_client.h
@@ -30,14 +30,19 @@ const ScanProperties& properties, DBusMethodCallback<std::string> callback) override; + void StartScan(std::string device_name, + const ScanProperties& properties, + DBusMethodCallback<std::string> completion_callback, + base::Optional<base::RepeatingCallback<void(int)>> + progress_callback) override; + // Sets the response returned by ListScanners(). void SetListScannersResponse( const base::Optional<lorgnette::ListScannersResponse>& list_scanners_response); - // Sets the response returned by ScanImageToString(). - void SetScanImageToStringResponse( - const base::Optional<std::string>& scan_image_response); + // Sets the response returned by ScanImageToString() and StartScan(). + void SetScanResponse(const base::Optional<std::string>& scan_image_response); private: base::Optional<lorgnette::ListScannersResponse> list_scanners_response_;
diff --git a/chromeos/dbus/lorgnette_manager_client.cc b/chromeos/dbus/lorgnette_manager_client.cc index 5a845cf..00ae9ce4 100644 --- a/chromeos/dbus/lorgnette_manager_client.cc +++ b/chromeos/dbus/lorgnette_manager_client.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback.h" +#include "base/containers/flat_map.h" #include "base/files/scoped_file.h" #include "base/location.h" #include "base/logging.h" @@ -18,7 +19,9 @@ #include "base/optional.h" #include "base/task/post_task.h" #include "base/task/thread_pool.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" +#include "chromeos/dbus/lorgnette/lorgnette_service.pb.h" #include "chromeos/dbus/pipe_reader.h" #include "dbus/bus.h" #include "dbus/message.h" @@ -94,11 +97,65 @@ std::move(scan_data_reader))); } + void StartScan(std::string device_name, + const ScanProperties& properties, + DBusMethodCallback<std::string> completion_callback, + base::Optional<base::RepeatingCallback<void(int)>> + progress_callback) override { + lorgnette::StartScanRequest request; + request.set_device_name(device_name); + request.mutable_settings()->set_resolution(properties.resolution_dpi); + + lorgnette::ColorMode mode = lorgnette::MODE_UNSPECIFIED; + // Defined in system_api/dbus/lorgnette/dbus-constants.h + if (properties.mode == lorgnette::kScanPropertyModeColor) { + mode = lorgnette::MODE_COLOR; + } else if (properties.mode == lorgnette::kScanPropertyModeGray) { + mode = lorgnette::MODE_GRAYSCALE; + } else if (properties.mode == lorgnette::kScanPropertyModeLineart) { + mode = lorgnette::MODE_LINEART; + } + request.mutable_settings()->set_color_mode(mode); + + dbus::MethodCall method_call(lorgnette::kManagerServiceInterface, + lorgnette::kStartScanMethod); + dbus::MessageWriter writer(&method_call); + if (!writer.AppendProtoAsArrayOfBytes(request)) { + LOG(ERROR) << "Failed to encode StartScanRequest protobuf"; + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(std::move(completion_callback), base::nullopt)); + return; + } + + auto scan_data_reader = std::make_unique<ScanDataReader>(); + base::ScopedFD fd = scan_data_reader->Start(); + writer.AppendFileDescriptor(fd.get()); + + ScanJobState state; + state.completion_callback = std::move(completion_callback); + state.progress_callback = progress_callback; + state.scan_data_reader = std::move(scan_data_reader); + + lorgnette_daemon_proxy_->CallMethod( + &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, + base::BindOnce(&LorgnetteManagerClientImpl::OnStartScanResponse, + weak_ptr_factory_.GetWeakPtr(), std::move(state))); + } + protected: void Init(dbus::Bus* bus) override { lorgnette_daemon_proxy_ = bus->GetObjectProxy(lorgnette::kManagerServiceName, dbus::ObjectPath(lorgnette::kManagerServicePath)); + lorgnette_daemon_proxy_->ConnectToSignal( + lorgnette::kManagerServiceInterface, + lorgnette::kScanStatusChangedSignal, + base::BindRepeating( + &LorgnetteManagerClientImpl::ScanStatusChangedReceived, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&LorgnetteManagerClientImpl::ScanStatusChangedConnected, + weak_ptr_factory_.GetWeakPtr())); } private: @@ -167,6 +224,16 @@ DISALLOW_COPY_AND_ASSIGN(ScanDataReader); }; + // The state tracked for an in-progress scan job. + // Contains callbacks used to report progress and job completion or failure, + // as well as a ScanDataReader which is responsible for reading from the pipe + // of data into a string. + struct ScanJobState { + DBusMethodCallback<std::string> completion_callback; + base::Optional<base::RepeatingCallback<void(int)>> progress_callback; + std::unique_ptr<ScanDataReader> scan_data_reader; + }; + // Called when ListScanners completes. void OnListScanners( DBusMethodCallback<lorgnette::ListScannersResponse> callback, @@ -214,7 +281,77 @@ std::move(callback).Run(std::move(data)); } + void OnStartScanResponse(ScanJobState state, dbus::Response* response) { + if (!response) { + LOG(ERROR) << "Failed to obtain StartScanResponse"; + std::move(state.completion_callback).Run(base::nullopt); + return; + } + + lorgnette::StartScanResponse response_proto; + dbus::MessageReader reader(response); + if (!reader.PopArrayOfBytesAsProto(&response_proto)) { + LOG(ERROR) << "Failed to decode StartScanResponse proto"; + std::move(state.completion_callback).Run(base::nullopt); + return; + } + + if (response_proto.state() == lorgnette::SCAN_STATE_FAILED) { + LOG(ERROR) << "Starting Scan failed: " << response_proto.failure_reason(); + std::move(state.completion_callback).Run(base::nullopt); + return; + } + + scan_job_state_[response_proto.scan_uuid()] = std::move(state); + } + + void ScanStatusChangedReceived(dbus::Signal* signal) { + dbus::MessageReader reader(signal); + lorgnette::ScanStatusChangedSignal signal_proto; + if (!reader.PopArrayOfBytesAsProto(&signal_proto)) { + LOG(ERROR) << "Failed to decode ScanStatusChangedSignal proto"; + return; + } + + if (!base::Contains(scan_job_state_, signal_proto.scan_uuid())) { + LOG(ERROR) << "Received signal for unrecognized scan job: " + << signal_proto.scan_uuid(); + return; + } + ScanJobState& state = scan_job_state_[signal_proto.scan_uuid()]; + + if (signal_proto.state() == lorgnette::SCAN_STATE_FAILED) { + LOG(ERROR) << "Scan job " << signal_proto.scan_uuid() + << " failed: " << signal_proto.failure_reason(); + std::move(state.completion_callback).Run(base::nullopt); + scan_job_state_.erase(signal_proto.scan_uuid()); + } else if (signal_proto.state() == lorgnette::SCAN_STATE_COMPLETED) { + VLOG(1) << "Scan job " << signal_proto.scan_uuid() + << " completed successfully"; + ScanDataReader* reader = state.scan_data_reader.get(); + reader->Wait(base::BindOnce( + &LorgnetteManagerClientImpl::OnScanDataCompleted, + weak_ptr_factory_.GetWeakPtr(), std::move(state.completion_callback), + std::move(state.scan_data_reader))); + scan_job_state_.erase(signal_proto.scan_uuid()); + } else if (signal_proto.state() == lorgnette::SCAN_STATE_IN_PROGRESS && + state.progress_callback.has_value()) { + state.progress_callback.value().Run(signal_proto.progress()); + } + } + + void ScanStatusChangedConnected(const std::string& interface_name, + const std::string& signal_name, + bool success) { + LOG_IF(WARNING, !success) + << "Failed to connect to ScanStatusChanged signal."; + } + dbus::ObjectProxy* lorgnette_daemon_proxy_ = nullptr; + + // Map from scan UUIDs to ScanDataReader and callbacks for reporting scan + // progress and completion. + base::flat_map<std::string, ScanJobState> scan_job_state_; base::WeakPtrFactory<LorgnetteManagerClientImpl> weak_ptr_factory_{this}; };
diff --git a/chromeos/dbus/lorgnette_manager_client.h b/chromeos/dbus/lorgnette_manager_client.h index f53bde1..0228c5a 100644 --- a/chromeos/dbus/lorgnette_manager_client.h +++ b/chromeos/dbus/lorgnette_manager_client.h
@@ -43,6 +43,18 @@ const ScanProperties& properties, DBusMethodCallback<std::string> callback) = 0; + // Request a scanned image using lorgnette's StartScan API and calls + // |completion_callback| when completed with a string pointing at the scanned + // image data. Image data will be stored in the .png format. + // + // If |progress_callback| is provided, it will be called as scan progress + // increases.The progress will be passed as a value from 0-100. + virtual void StartScan( + std::string device_name, + const ScanProperties& properties, + DBusMethodCallback<std::string> completion_callback, + base::Optional<base::RepeatingCallback<void(int)>> progress_callback) = 0; + // Factory function, creates a new instance and returns ownership. // For normal usage, access the singleton via DBusThreadManager::Get(). static std::unique_ptr<LorgnetteManagerClient> Create();
diff --git a/chromeos/services/device_sync/proto/cryptauth_better_together_device_metadata.proto b/chromeos/services/device_sync/proto/cryptauth_better_together_device_metadata.proto index 77e8a8d..660f2cc 100644 --- a/chromeos/services/device_sync/proto/cryptauth_better_together_device_metadata.proto +++ b/chromeos/services/device_sync/proto/cryptauth_better_together_device_metadata.proto
@@ -24,7 +24,7 @@ // Device metadata relevant to the suite of multi-device (Better Together) // features. This data is sent to and received from CryptAuth--using end-to-end // encryption--as part of DeviceSync v2. -// Next ID: 4 +// Next ID: 5 message BetterTogetherDeviceMetadata { // A cryptographic public key associated with the device. // The format of this key is a serialized SecureMessage.GenericPublicKey. @@ -35,4 +35,8 @@ // A list of seeds for EID BLE advertisements targeting this device. repeated BeaconSeed beacon_seeds = 3; + + // Bluetooth public address, formatted as a hex string with colons and capital + // letters. Example: "01:23:45:67:89:AB" + string bluetooth_public_address = 4; }
diff --git a/chromeos/services/device_sync/remote_device_loader.cc b/chromeos/services/device_sync/remote_device_loader.cc index 382d30e6..b44104d 100644 --- a/chromeos/services/device_sync/remote_device_loader.cc +++ b/chromeos/services/device_sync/remote_device_loader.cc
@@ -138,7 +138,8 @@ user_email_, std::string() /* instance_id */, device.friendly_device_name(), device.no_pii_device_name(), device.public_key(), psk, device.last_update_time_millis(), - GetSoftwareFeatureToStateMap(device), multidevice_beacon_seeds); + GetSoftwareFeatureToStateMap(device), multidevice_beacon_seeds, + device.bluetooth_address()); remote_devices_.push_back(remote_device);
diff --git a/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc b/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc index 2d10b548..d3b60f5 100644 --- a/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc +++ b/chromeos/services/device_sync/remote_device_provider_impl_unittest.cc
@@ -41,6 +41,7 @@ const char kTestRemoteDevicePiiFreeNamePrefix[] = "piiFreeName-"; const char kTestRemoteDevicePublicKeyPrefix[] = "publicKey-"; const char kTestRemoteDevicePskPrefix[] = "psk-"; +const char kTestRemoteDeviceBluetoothPublicAddressPrefix[] = "address-"; multidevice::RemoteDevice CreateRemoteDeviceForTest(const std::string& suffix, bool has_instance_id, @@ -62,7 +63,8 @@ kTestRemoteDevicePskPrefix + suffix, 100L /* last_update_time_millis */, {} /* software_features */, {multidevice::BeaconSeed(beacon_seed_data, base::Time::FromJavaTime(200L), - base::Time::FromJavaTime(300L))}); + base::Time::FromJavaTime(300L))}, + kTestRemoteDeviceBluetoothPublicAddressPrefix + suffix); } // Provide four fake RemoteDevices associated with a v1 DeviceSync. These
diff --git a/chromeos/services/device_sync/remote_device_v2_loader_impl.cc b/chromeos/services/device_sync/remote_device_v2_loader_impl.cc index 56ae755..700ec48 100644 --- a/chromeos/services/device_sync/remote_device_v2_loader_impl.cc +++ b/chromeos/services/device_sync/remote_device_v2_loader_impl.cc
@@ -107,7 +107,9 @@ device.last_update_time.ToJavaTime(), device.feature_states, beto_metadata ? multidevice::FromCryptAuthV2SeedRepeatedPtrField( beto_metadata->beacon_seeds()) - : std::vector<multidevice::BeaconSeed>()); + : std::vector<multidevice::BeaconSeed>(), + beto_metadata ? beto_metadata->bluetooth_public_address() + : std::string()); remaining_ids_to_process_.erase(device.instance_id());
diff --git a/chromeos/services/device_sync/remote_device_v2_loader_impl_unittest.cc b/chromeos/services/device_sync/remote_device_v2_loader_impl_unittest.cc index 3907a14..0af0c74 100644 --- a/chromeos/services/device_sync/remote_device_v2_loader_impl_unittest.cc +++ b/chromeos/services/device_sync/remote_device_v2_loader_impl_unittest.cc
@@ -28,6 +28,7 @@ const char kPublicKeyPrefix[] = "public_key"; const char kInstanceIdPrefix[] = "instance_id"; const char kPskPlaceholder[] = "psk_placeholder"; +const char kBluetoothPublicAddressPrefix[] = "bluetooth_public_address"; // The id of the user who the remote devices belong to. const char kUserId[] = "example@gmail.com"; @@ -53,7 +54,8 @@ // CryptAuthDevice.better_together_device_metadata.public_key is not set. CryptAuthDevice CreateCryptAuthDevice(const std::string& suffix, bool has_beto_metadata, - bool has_public_key) { + bool has_public_key, + bool has_bluetooth_address) { base::Optional<cryptauthv2::BetterTogetherDeviceMetadata> beto_metadata; if (has_beto_metadata) { @@ -67,6 +69,11 @@ if (has_public_key) beto_metadata->set_public_key(kPublicKeyPrefix + suffix); + + if (has_bluetooth_address) { + beto_metadata->set_bluetooth_public_address( + kBluetoothPublicAddressPrefix + suffix); + } } return CryptAuthDevice(kInstanceIdPrefix + suffix, kDeviceNamePrefix + suffix, @@ -85,12 +92,16 @@ multidevice::RemoteDevice CreateRemoteDevice(const std::string& suffix, bool has_pii_free_name, bool has_public_key, - bool has_beacon_seeds) { + bool has_beacon_seeds, + bool has_bluetooth_address) { std::string pii_free_name = has_pii_free_name ? kNoPiiDeviceNamePrefix + suffix : std::string(); std::string public_key = has_public_key ? kPublicKeyPrefix + suffix : std::string(); std::string psk = has_public_key ? kPskPlaceholder : std::string(); + std::string bluetooth_address = has_bluetooth_address + ? kBluetoothPublicAddressPrefix + suffix + : std::string(); std::vector<multidevice::BeaconSeed> beacon_seeds; if (has_beacon_seeds) { @@ -104,7 +115,7 @@ pii_free_name, public_key, psk, kLastUpdateTimeMs, {{multidevice::SoftwareFeature::kBetterTogetherHost, multidevice::SoftwareFeatureState::kSupported}}, - beacon_seeds); + beacon_seeds, bluetooth_address); } } // namespace @@ -195,21 +206,25 @@ TEST_F(DeviceSyncRemoteDeviceV2LoaderImplTest, Success) { CallLoad({CreateCryptAuthDevice("device1", true /* has_beto_metadata */, - true /* has_public_key */), + true /* has_public_key */, + true /* has_bluetooth_address */), CreateCryptAuthDevice("device2", true /* has_beto_metadata */, - false /* has_public_key */), + false /* has_public_key */, + false /* has_bluetooth_address */), CreateCryptAuthDevice("device3", false /* has_beto_metadata */, - false /* has_public_key */)}); + false /* has_public_key */, + false /* has_bluetooth_address */)}); - VerifyLoad({CreateRemoteDevice("device1", true /* has_pii_free_name */, - true /* has_public_key */, - true /* has_beacon_seeds */), - CreateRemoteDevice("device2", true /* has_pii_free_name */, - false /* has_public_key */, - true /* has_beacon_seeds */), - CreateRemoteDevice("device3", false /* has_pii_free_name */, - false /* has_public_key */, - false /* has_beacon_seeds */)}); + VerifyLoad( + {CreateRemoteDevice( + "device1", true /* has_pii_free_name */, true /* has_public_key */, + true /* has_beacon_seeds */, true /* has_bluetooth_address */), + CreateRemoteDevice( + "device2", true /* has_pii_free_name */, false /* has_public_key */, + true /* has_beacon_seeds */, false /* has_bluetooth_address */), + CreateRemoteDevice( + "device3", false /* has_pii_free_name */, false /* has_public_key */, + false /* has_beacon_seeds */, false /* has_bluetooth_address */)}); } } // namespace device_sync
diff --git a/components/autofill_assistant/browser/actions/save_generated_password_action.cc b/components/autofill_assistant/browser/actions/save_generated_password_action.cc index 259b1d19..0d64dabd 100644 --- a/components/autofill_assistant/browser/actions/save_generated_password_action.cc +++ b/components/autofill_assistant/browser/actions/save_generated_password_action.cc
@@ -12,16 +12,6 @@ namespace autofill_assistant { -namespace { - -void ClearAdditionalValue(const std::string& key, - UserData* user_data, - UserData::FieldChange* field_change) { - DCHECK(user_data); - user_data->additional_values_.erase(key); -} -} // namespace - SaveGeneratedPasswordAction::SaveGeneratedPasswordAction( ActionDelegate* delegate, const ActionProto& proto) @@ -65,9 +55,6 @@ delegate_->GetWebsiteLoginManager()->CommitGeneratedPassword(); - delegate_->WriteUserData( - base::BindOnce(&ClearAdditionalValue, save_password.memory_key())); - EndAction(ClientStatus(ACTION_APPLIED)); }
diff --git a/components/autofill_assistant/browser/actions/save_generated_password_action_unittest.cc b/components/autofill_assistant/browser/actions/save_generated_password_action_unittest.cc index 6bc67c93..06e4796 100644 --- a/components/autofill_assistant/browser/actions/save_generated_password_action_unittest.cc +++ b/components/autofill_assistant/browser/actions/save_generated_password_action_unittest.cc
@@ -72,7 +72,7 @@ action.ProcessAction(callback_.Get()); - EXPECT_FALSE(user_data_.has_additional_value(kMemoryKeyForGeneratedPassword)); + EXPECT_TRUE(user_data_.has_additional_value(kMemoryKeyForGeneratedPassword)); } TEST_F(SaveGeneratedPasswordActionTest, MissingMemoryKeyPreconditionFails) {
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp index 2c240d5..ea7d379 100644 --- a/components/autofill_strings.grdp +++ b/components/autofill_strings.grdp
@@ -22,7 +22,7 @@ Automatic credit card filling is disabled because this form does not use a secure connection. </message> <message name="IDS_AUTOFILL_WARNING_MIXED_FORM" desc="Warning text shown when autofill is disabled due to a form on a secure site being submitted over an insecure connection."> - This form is submitted over an insecure connection. Automatic filling is disabled. + This form is not secure. Autofill has been turned off. </message> <message name="IDS_AUTOFILL_CREDIT_CARD_SIGNIN_PROMO" desc="Promo text shown alongside credit card suggestions to get people to sign in."> To use cards from your Google Account, sign in to Chrome
diff --git a/components/autofill_strings_grdp/IDS_AUTOFILL_WARNING_MIXED_FORM.png.sha1 b/components/autofill_strings_grdp/IDS_AUTOFILL_WARNING_MIXED_FORM.png.sha1 index 5b6d382..cd8619ab 100644 --- a/components/autofill_strings_grdp/IDS_AUTOFILL_WARNING_MIXED_FORM.png.sha1 +++ b/components/autofill_strings_grdp/IDS_AUTOFILL_WARNING_MIXED_FORM.png.sha1
@@ -1 +1 @@ -a7a5f360119ebc1a0c1c01983ead9f5decba558f \ No newline at end of file +1d1c4ba53e34a56825b5438d318511afa373ba51 \ No newline at end of file
diff --git a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc index 77ee98d..b70f967 100644 --- a/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc +++ b/components/dom_distiller/content/browser/dom_distiller_viewer_source.cc
@@ -294,6 +294,12 @@ return "style-src 'self' https://fonts.googleapis.com;"; } else if (directive == network::mojom::CSPDirectiveName::ChildSrc) { return "child-src *;"; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + // This removes require-trusted-types-for and trusted-types directives + // from the CSP header. + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/components/favicon/core/BUILD.gn b/components/favicon/core/BUILD.gn index 48d426b..462d30a 100644 --- a/components/favicon/core/BUILD.gn +++ b/components/favicon/core/BUILD.gn
@@ -4,6 +4,7 @@ static_library("core") { sources = [ + "core_favicon_service.cc", "core_favicon_service.h", "fallback_url_util.cc", "fallback_url_util.h",
diff --git a/components/favicon/core/core_favicon_service.cc b/components/favicon/core/core_favicon_service.cc new file mode 100644 index 0000000..1b9dfbc --- /dev/null +++ b/components/favicon/core/core_favicon_service.cc
@@ -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. + +#include "components/favicon/core/core_favicon_service.h" + +#include "base/stl_util.h" +#include "components/favicon_base/favicon_util.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/image/image.h" +#include "ui/gfx/image/image_skia.h" +#include "ui/gfx/image/image_skia_rep.h" + +namespace favicon { + +// static +std::vector<int> CoreFaviconService::GetPixelSizesForFaviconScales( + int size_in_dip) { + // NOTE: GetFaviconScales() always returns 1x on android. + std::vector<float> scales = favicon_base::GetFaviconScales(); + std::vector<int> sizes_in_pixel; + for (float scale : scales) + sizes_in_pixel.push_back(std::ceil(size_in_dip * scale)); + return sizes_in_pixel; +} + +// static +std::vector<SkBitmap> CoreFaviconService::ExtractSkBitmapsToStore( + const gfx::Image& image) { + gfx::ImageSkia image_skia = image.AsImageSkia(); + image_skia.EnsureRepsForSupportedScales(); + std::vector<SkBitmap> bitmaps; + const std::vector<float> favicon_scales = favicon_base::GetFaviconScales(); + for (const gfx::ImageSkiaRep& rep : image_skia.image_reps()) { + // Only save images with a supported sale. + if (base::Contains(favicon_scales, rep.scale())) + bitmaps.push_back(rep.GetBitmap()); + } + return bitmaps; +} + +} // namespace favicon
diff --git a/components/favicon/core/core_favicon_service.h b/components/favicon/core/core_favicon_service.h index d4687f4..84011c9 100644 --- a/components/favicon/core/core_favicon_service.h +++ b/components/favicon/core/core_favicon_service.h
@@ -5,6 +5,8 @@ #ifndef COMPONENTS_FAVICON_CORE_CORE_FAVICON_SERVICE_H_ #define COMPONENTS_FAVICON_CORE_CORE_FAVICON_SERVICE_H_ +#include <vector> + #include "base/callback.h" #include "base/containers/flat_set.h" #include "base/task/cancelable_task_tracker.h" @@ -14,6 +16,11 @@ #include "components/keyed_service/core/keyed_service.h" class GURL; +class SkBitmap; + +namespace gfx { +class Image; +} namespace favicon { @@ -97,6 +104,14 @@ virtual void UnableToDownloadFavicon(const GURL& icon_url) = 0; virtual void ClearUnableToDownloadFavicons() = 0; virtual bool WasUnableToDownloadFavicon(const GURL& icon_url) const = 0; + + protected: + // Returns a vector of pixel edge sizes from |size_in_dip| and + // GetFaviconScales(). + static std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip); + + // Returns a vector of the bitmaps to store for the specified image. + static std::vector<SkBitmap> ExtractSkBitmapsToStore(const gfx::Image& image); }; } // namespace favicon
diff --git a/components/favicon/core/favicon_service_impl.cc b/components/favicon/core/favicon_service_impl.cc index 38679d9..e38d0bb 100644 --- a/components/favicon/core/favicon_service_impl.cc +++ b/components/favicon/core/favicon_service_impl.cc
@@ -20,39 +20,9 @@ #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/codec/png_codec.h" #include "ui/gfx/favicon_size.h" -#include "ui/gfx/image/image_skia.h" #include "url/gurl.h" namespace favicon { -namespace { - -// Returns a vector of pixel edge sizes from |size_in_dip| and -// favicon_base::GetFaviconScales(). -std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) { - std::vector<float> scales = favicon_base::GetFaviconScales(); - std::vector<int> sizes_in_pixel; - for (size_t i = 0; i < scales.size(); ++i) { - sizes_in_pixel.push_back(std::ceil(size_in_dip * scales[i])); - } - return sizes_in_pixel; -} - -std::vector<SkBitmap> ExtractSkBitmapsToStore(const gfx::Image& image) { - gfx::ImageSkia image_skia = image.AsImageSkia(); - image_skia.EnsureRepsForSupportedScales(); - const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps(); - std::vector<SkBitmap> bitmaps; - const std::vector<float> favicon_scales = favicon_base::GetFaviconScales(); - for (size_t i = 0; i < image_reps.size(); ++i) { - // Don't save if the scale isn't one of supported favicon scales. - if (!base::Contains(favicon_scales, image_reps[i].scale())) - continue; - bitmaps.push_back(image_reps[i].GetBitmap()); - } - return bitmaps; -} - -} // namespace FaviconServiceImpl::FaviconServiceImpl( std::unique_ptr<FaviconClient> favicon_client,
diff --git a/components/guest_view/OWNERS b/components/guest_view/OWNERS index 439b190..b788969 100644 --- a/components/guest_view/OWNERS +++ b/components/guest_view/OWNERS
@@ -1,10 +1,12 @@ -fsamuel@chromium.org hanxi@chromium.org lazyboy@chromium.org lfg@chromium.org wjmaclean@chromium.org -paulmeyer@chromium.org -ekaramad@chromium.org mcnee@chromium.org # COMPONENT: Platform>Apps>BrowserTag + +# Emeritus: +# fsamuel@chromium.org +# paulmeyer@chromium.org +# ekaramad@chromium.org
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc index 76471877..96746653 100644 --- a/components/omnibox/browser/omnibox_edit_model.cc +++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -72,6 +72,9 @@ // OnAfterPossibleChange()). const char kOmniboxUserTextClearedHistogram[] = "Omnibox.UserTextCleared"; +const char kOmniboxFocusResultedInNavigation[] = + "Omnibox.FocusResultedInNavigation"; + enum UserTextClearedType { OMNIBOX_USER_TEXT_CLEARED_BY_EDITING = 0, OMNIBOX_USER_TEXT_CLEARED_WITH_ESCAPE = 1, @@ -725,6 +728,9 @@ autocomplete_controller()->UpdateMatchDestinationURLWithQueryFormulationTime( elapsed_time_since_user_first_modified_omnibox, &match); + // Save the result of the interaction, but do not record the histogram yet. + focus_resulted_in_navigation_ = true; + // Matches with |pedal| may be opened normally or executed, but when a match // is a dedicated Pedal suggestion, it should always be executed. This only // happens when the button row feature is disabled. @@ -1069,6 +1075,7 @@ void OmniboxEditModel::OnSetFocus(bool control_down) { last_omnibox_focus_ = base::TimeTicks::Now(); user_input_since_focus_ = false; + focus_resulted_in_navigation_ = false; // If the omnibox lost focus while the caret was hidden and then regained // focus, OnSetFocus() is called and should restore visibility. Note that @@ -1131,6 +1138,8 @@ } void OmniboxEditModel::OnKillFocus() { + UMA_HISTOGRAM_BOOLEAN(kOmniboxFocusResultedInNavigation, + focus_resulted_in_navigation_); SetFocusState(OMNIBOX_FOCUS_NONE, OMNIBOX_FOCUS_CHANGE_EXPLICIT); focus_source_ = OmniboxFocusSource::INVALID; last_omnibox_focus_ = base::TimeTicks();
diff --git a/components/omnibox/browser/omnibox_edit_model.h b/components/omnibox/browser/omnibox_edit_model.h index 5fda6579..5db7310 100644 --- a/components/omnibox/browser/omnibox_edit_model.h +++ b/components/omnibox/browser/omnibox_edit_model.h
@@ -550,6 +550,13 @@ // there was no focus event. bool user_input_since_focus_; + // Indicates whether the current interaction with the Omnibox resulted in + // navigation (true), or user leaving the omnibox without taking any action + // (false). + // The value is initialized when the Omnibox receives focus and available for + // use when the focus is about to be cleared. + bool focus_resulted_in_navigation_; + // We keep track of when the user began modifying the omnibox text. // This should be valid whenever user_input_in_progress_ is true. base::TimeTicks time_user_first_modified_omnibox_;
diff --git a/components/omnibox/browser/url_index_private_data.cc b/components/omnibox/browser/url_index_private_data.cc index f685ca4..06ac2e00 100644 --- a/components/omnibox/browser/url_index_private_data.cc +++ b/components/omnibox/browser/url_index_private_data.cc
@@ -405,11 +405,6 @@ UMA_HISTOGRAM_COUNTS_1M("History.InMemoryURLHistoryItems", restored_data->history_id_word_map_.size()); - UMA_HISTOGRAM_COUNTS_1M("History.InMemoryURLCacheSize", data.size()); - UMA_HISTOGRAM_COUNTS_10000("History.InMemoryURLWords", - restored_data->word_map_.size()); - UMA_HISTOGRAM_COUNTS_10000("History.InMemoryURLChars", - restored_data->char_word_map_.size()); if (restored_data->Empty()) return nullptr; // 'No data' is the same as a failed reload. return restored_data; @@ -452,10 +447,6 @@ base::TimeTicks::Now() - beginning_time); UMA_HISTOGRAM_COUNTS_1M("History.InMemoryURLHistoryItems", rebuilt_data->history_id_word_map_.size()); - UMA_HISTOGRAM_COUNTS_10000("History.InMemoryURLWords", - rebuilt_data->word_map_.size()); - UMA_HISTOGRAM_COUNTS_10000("History.InMemoryURLChars", - rebuilt_data->char_word_map_.size()); return rebuilt_data; }
diff --git a/components/omnibox_strings.grdp b/components/omnibox_strings.grdp index 8f9aa87..1d921f2 100644 --- a/components/omnibox_strings.grdp +++ b/components/omnibox_strings.grdp
@@ -101,63 +101,63 @@ <!-- Omnibox Pedals --> <message name="IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT" desc="The button text contents to suggest pedal action, clear browsing data."> - Clear Data + Clear browsing data </message> <message name="IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, clear browsing data."> Clear </message> <message name="IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, clear browsing data."> - Clear Chrome's browsing history data + Clear your browsing history, cookies, cache, and more in Chrome settings </message> <message name="IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT" desc="The button text contents to suggest pedal action, manage passwords."> - Manage Passwords + Manage passwords </message> <message name="IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, change language."> Manage </message> <message name="IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, change language."> - Manage passwords in Chrome settings + View and manage your passwords in Chrome settings </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT" desc="The button text contents to suggest pedal action, update credit card."> - Update Credit Card + Manage payment methods </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, update credit card."> - Update + Manage </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, update credit card."> - Update credit card autofill info in Chrome settings + Manage your payments and credit card info in Chrome settings </message> <message name="IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT" desc="The button text contents to suggest pedal action, launch incognito."> - Open Incognito Window + Open Incognito window </message> <message name="IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, launch incognito."> Open </message> <message name="IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, launch incognito."> - Open new Chrome incognito window + Open a new Incognito window to browse privately </message> <message name="IDS_OMNIBOX_PEDAL_TRANSLATE_HINT" desc="The button text contents to suggest pedal action, translate."> - Translate Page + Translate page </message> <message name="IDS_OMNIBOX_PEDAL_TRANSLATE_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, translate."> Translate </message> <message name="IDS_OMNIBOX_PEDAL_TRANSLATE_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, translate."> - Translate this page + Translate this page with Google Translate </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT" desc="The button text contents to suggest pedal action, update chrome."> - Relaunch to Update + Update Chrome </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT_SHORT" desc="The short one-word button text contents to suggest pedal action, update chrome."> - Relaunch + Update </message> <message name="IDS_OMNIBOX_PEDAL_UPDATE_CHROME_SUGGESTION_CONTENTS" desc="The suggestion content text to suggest pedal action, update chrome."> - Relaunch + Update Chrome from your Chrome settings </message> <!-- Accessibility labels for autocomplete match types.
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_CLEAR_BROWSING_DATA_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_LAUNCH_INCOGNITO_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_MANAGE_PASSWORDS_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_TRANSLATE_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT_SHORT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT_SHORT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_HINT_SHORT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CHROME_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT_SHORT.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT_SHORT.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_HINT_SHORT.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUGGESTION_CONTENTS.png.sha1 b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUGGESTION_CONTENTS.png.sha1 new file mode 100644 index 0000000..0fe00c8 --- /dev/null +++ b/components/omnibox_strings_grdp/IDS_OMNIBOX_PEDAL_UPDATE_CREDIT_CARD_SUGGESTION_CONTENTS.png.sha1
@@ -0,0 +1 @@ +969d87bd3efe6833191692416d2afabaaadf1f1b \ No newline at end of file
diff --git a/components/on_load_script_injector/BUILD.gn b/components/on_load_script_injector/BUILD.gn new file mode 100644 index 0000000..3b73edb --- /dev/null +++ b/components/on_load_script_injector/BUILD.gn
@@ -0,0 +1,16 @@ +# 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. + +import("//mojo/public/tools/bindings/mojom.gni") + +mojom("on_load_script_injector_mojom") { + sources = [ "on_load_script_injector.mojom" ] + + public_deps = [ "//mojo/public/mojom/base" ] + visibility = [ "./*" ] +} + +source_set("export") { + sources = [ "export.h" ] +}
diff --git a/components/on_load_script_injector/OWNERS b/components/on_load_script_injector/OWNERS new file mode 100644 index 0000000..b817b00 --- /dev/null +++ b/components/on_load_script_injector/OWNERS
@@ -0,0 +1,7 @@ +file://build/fuchsia/OWNERS +# COMPONENT: Fuchsia +# OS: Fuchsia +# TEAM: cr-fuchsia@chromium.org + +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/components/on_load_script_injector/browser/BUILD.gn b/components/on_load_script_injector/browser/BUILD.gn new file mode 100644 index 0000000..c4ce673 --- /dev/null +++ b/components/on_load_script_injector/browser/BUILD.gn
@@ -0,0 +1,29 @@ +# 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. + +import("//build/config/features.gni") + +component("browser") { + sources = [ + "on_load_script_injector_host.cc", + "on_load_script_injector_host.h", + ] + + defines = [ "ON_LOAD_SCRIPT_INJECTOR_IMPLEMENTATION" ] + + deps = [ + "//base", + "//components/on_load_script_injector:export", + "//components/on_load_script_injector:on_load_script_injector_mojom", + "//content/public/browser", + "//mojo/public/cpp/bindings", + "//third_party/blink/public/common", + ] + + visibility = [ + "//chromecast/bindings:bindings_manager_cast", + "//chromecast/browser:browser", + "//fuchsia/engine:web_engine_core", + ] +}
diff --git a/components/on_load_script_injector/browser/DEPS b/components/on_load_script_injector/browser/DEPS new file mode 100644 index 0000000..f7617f6 --- /dev/null +++ b/components/on_load_script_injector/browser/DEPS
@@ -0,0 +1,5 @@ +include_rules = [ + "+content/public/browser", + "+mojo/public/cpp/bindings", + "+third_party/blink/public/common", +]
diff --git a/components/on_load_script_injector/browser/on_load_script_injector_host.cc b/components/on_load_script_injector/browser/on_load_script_injector_host.cc new file mode 100644 index 0000000..7a6e56cc --- /dev/null +++ b/components/on_load_script_injector/browser/on_load_script_injector_host.cc
@@ -0,0 +1,126 @@ +// 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 "components/on_load_script_injector/browser/on_load_script_injector_host.h" + +#include <utility> + +#include "base/numerics/safe_math.h" +#include "components/on_load_script_injector/on_load_script_injector.mojom.h" +#include "content/public/browser/navigation_handle.h" +#include "mojo/public/cpp/bindings/associated_remote.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" + +namespace on_load_script_injector { + +OnLoadScriptInjectorHost::OnLoadScriptInjectorHost() = default; + +OnLoadScriptInjectorHost::~OnLoadScriptInjectorHost() = default; + +void OnLoadScriptInjectorHost::AddScript( + ScriptId id, + std::vector<url::Origin> origins_to_inject, + base::StringPiece script) { + // If there is no script with the identifier |id|, then create a place for it + // at the end of the injection sequence. + if (before_load_scripts_.find(id) == before_load_scripts_.end()) + before_load_scripts_order_.push_back(id); + + // Convert script to UTF-16. + base::string16 script_utf16 = base::UTF8ToUTF16(script); + size_t script_utf16_size = + (base::CheckedNumeric<size_t>(script_utf16.size()) * sizeof(base::char16)) + .ValueOrDie(); + base::WritableSharedMemoryRegion script_shared_memory = + base::WritableSharedMemoryRegion::Create(script_utf16_size); + memcpy(script_shared_memory.Map().memory(), script_utf16.data(), + script_utf16_size); + + base::ReadOnlySharedMemoryRegion script_shared_memory_readonly = + base::WritableSharedMemoryRegion::ConvertToReadOnly( + std::move(script_shared_memory)); + CHECK(script_shared_memory_readonly.IsValid()); + + before_load_scripts_[id] = OriginScopedScript( + origins_to_inject, std::move(script_shared_memory_readonly)); +} + +void OnLoadScriptInjectorHost::AddScriptForAllOrigins( + ScriptId id, + base::StringPiece script) { + AddScript(id, {kMatchAllOrigins}, script); +} + +void OnLoadScriptInjectorHost::RemoveScript(ScriptId id) { + before_load_scripts_.erase(id); + + for (auto script_id_iter = before_load_scripts_order_.begin(); + script_id_iter != before_load_scripts_order_.end(); ++script_id_iter) { + if (*script_id_iter == id) { + before_load_scripts_order_.erase(script_id_iter); + return; + } + } + + LOG(WARNING) << "Ignoring attempt to remove unknown OnLoad script: " << id; +} + +void OnLoadScriptInjectorHost::InjectScriptsForURL( + const GURL& url, + content::RenderFrameHost* render_frame_host) { + DCHECK(url.is_valid()); + + mojo::AssociatedRemote<mojom::OnLoadScriptInjector> injector; + render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface(&injector); + + injector->ClearOnLoadScripts(); + + if (before_load_scripts_.empty()) + return; + + // Provision the renderer's ScriptInjector with the scripts associated with + // |url|. + for (ScriptId script_id : before_load_scripts_order_) { + const OriginScopedScript& script = before_load_scripts_[script_id]; + if (IsUrlMatchedByOriginList(url, script.origins())) + injector->AddOnLoadScript(script.script().Duplicate()); + } +} + +// static +bool OnLoadScriptInjectorHost::IsUrlMatchedByOriginList( + const GURL& url, + const std::vector<url::Origin>& allowed_origins) { + url::Origin url_origin = url::Origin::Create(url); + + for (const url::Origin& allowed_origin : allowed_origins) { + if (allowed_origin == kMatchAllOrigins) + return true; + + DCHECK(!allowed_origin.opaque()); + if (url_origin.IsSameOriginWith(allowed_origin)) + return true; + } + + return false; +} + +OnLoadScriptInjectorHost::OriginScopedScript::OriginScopedScript() = default; + +OnLoadScriptInjectorHost::OriginScopedScript::OriginScopedScript( + std::vector<url::Origin> origins, + base::ReadOnlySharedMemoryRegion script) + : origins_(std::move(origins)), script_(std::move(script)) {} + +OnLoadScriptInjectorHost::OriginScopedScript& +OnLoadScriptInjectorHost::OriginScopedScript::operator=( + OnLoadScriptInjectorHost::OriginScopedScript&& other) { + origins_ = std::move(other.origins_); + script_ = std::move(other.script_); + return *this; +} + +OnLoadScriptInjectorHost::OriginScopedScript::~OriginScopedScript() = default; + +} // namespace on_load_script_injector
diff --git a/components/on_load_script_injector/browser/on_load_script_injector_host.h b/components/on_load_script_injector/browser/on_load_script_injector_host.h new file mode 100644 index 0000000..f94d675 --- /dev/null +++ b/components/on_load_script_injector/browser/on_load_script_injector_host.h
@@ -0,0 +1,91 @@ +// 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 COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_BROWSER_ON_LOAD_SCRIPT_INJECTOR_HOST_H_ +#define COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_BROWSER_ON_LOAD_SCRIPT_INJECTOR_HOST_H_ + +#include <map> +#include <string> +#include <vector> + +#include "base/memory/read_only_shared_memory_region.h" +#include "base/strings/utf_string_conversions.h" +#include "build/build_config.h" +#include "components/on_load_script_injector/export.h" +#include "content/public/browser/render_frame_host.h" +#include "url/origin.h" + +namespace on_load_script_injector { + +// Manages the set of scripts to be injected into document just prior to +// document load. +class ON_LOAD_SCRIPT_INJECTOR_EXPORT OnLoadScriptInjectorHost { + public: +#if defined(OS_FUCHSIA) + using ScriptId = uint64_t; +#else + using ScriptId = std::string; +#endif + + OnLoadScriptInjectorHost(); + ~OnLoadScriptInjectorHost(); + + OnLoadScriptInjectorHost(const OnLoadScriptInjectorHost&) = delete; + OnLoadScriptInjectorHost& operator=(const OnLoadScriptInjectorHost&) = delete; + + // Adds a |script| to be injected on pages whose URL's origin matches at least + // one entry of |origins_to_inject|. + // Scripts will be loaded in the order they are added. + // If a script with |id| already exists, it will be replaced with the original + // sequence position preserved. + // All entries of |origins_to_inject| must be valid/not opaque. + void AddScript(ScriptId id, + std::vector<url::Origin> origins_to_inject, + base::StringPiece script); + + // Same as AddScript(), except that scripts are injected for all pages. + void AddScriptForAllOrigins(ScriptId id, base::StringPiece script); + + // Removes the script |id|. + void RemoveScript(ScriptId id); + + // Injects the scripts associated with the origin of |url| into the document + // hosted by |render_frame_host|. + void InjectScriptsForURL(const GURL& url, + content::RenderFrameHost* render_frame_host); + + private: + class OriginScopedScript { + public: + OriginScopedScript(); + OriginScopedScript(std::vector<url::Origin> origins, + base::ReadOnlySharedMemoryRegion script); + OriginScopedScript& operator=(OriginScopedScript&& other); + ~OriginScopedScript(); + + const std::vector<url::Origin>& origins() const { return origins_; } + const base::ReadOnlySharedMemoryRegion& script() const { return script_; } + + private: + std::vector<url::Origin> origins_; + + // A shared memory buffer containing the script, encoded as UTF16. + base::ReadOnlySharedMemoryRegion script_; + }; + + bool IsUrlMatchedByOriginList( + const GURL& url, + const std::vector<url::Origin>& allowed_origins); + + // An opaque Origin that, when specified, allows script injection on all URLs + // regardless of origin. + const url::Origin kMatchAllOrigins; + + std::map<ScriptId, OriginScopedScript> before_load_scripts_; + std::vector<ScriptId> before_load_scripts_order_; +}; + +} // namespace on_load_script_injector + +#endif // COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_BROWSER_ON_LOAD_SCRIPT_INJECTOR_HOST_
diff --git a/components/on_load_script_injector/export.h b/components/on_load_script_injector/export.h new file mode 100644 index 0000000..e0bdd04 --- /dev/null +++ b/components/on_load_script_injector/export.h
@@ -0,0 +1,15 @@ +// 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 COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_EXPORT_H_ +#define COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_EXPORT_H_ + +#if defined(COMPONENT_BUILD) && defined(ON_LOAD_SCRIPT_INJECTOR_IMPLEMENTATION) +#define ON_LOAD_SCRIPT_INJECTOR_EXPORT __attribute__((visibility("default"))) +#else // !defined(COMPONENT_BUILD) || + // !defined(ON_LOAD_SCRIPT_INJECTOR_IMPLEMENTATION) +#define ON_LOAD_SCRIPT_INJECTOR_EXPORT +#endif + +#endif // COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_EXPORT_H_
diff --git a/fuchsia/engine/on_load_script_injector.mojom b/components/on_load_script_injector/on_load_script_injector.mojom similarity index 66% rename from fuchsia/engine/on_load_script_injector.mojom rename to components/on_load_script_injector/on_load_script_injector.mojom index 1cac32b..0094808 100644 --- a/fuchsia/engine/on_load_script_injector.mojom +++ b/components/on_load_script_injector/on_load_script_injector.mojom
@@ -2,14 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -module mojom; +module on_load_script_injector.mojom; + +import "mojo/public/mojom/base/shared_memory.mojom"; // Interface associated with RenderFrames for managing on-load JavaScript // injection tasks the frame. Does not enforce script injection policies, // which must be implemented at a higher level. interface OnLoadScriptInjector { - // TODO(crbug.com/1060846): Stop using handle<shared_buffer>. - AddOnLoadScript(handle<shared_buffer> script); + // |script|: The script to inject, in UTF-16. + AddOnLoadScript(mojo_base.mojom.ReadOnlySharedMemoryRegion script); ClearOnLoadScripts(); };
diff --git a/components/on_load_script_injector/renderer/BUILD.gn b/components/on_load_script_injector/renderer/BUILD.gn new file mode 100644 index 0000000..bb9ee65 --- /dev/null +++ b/components/on_load_script_injector/renderer/BUILD.gn
@@ -0,0 +1,29 @@ +# 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. + +import("//build/config/features.gni") + +component("renderer") { + sources = [ + "on_load_script_injector.cc", + "on_load_script_injector.h", + ] + + defines = [ "ON_LOAD_SCRIPT_INJECTOR_IMPLEMENTATION" ] + + deps = [ + "//base", + "//components/on_load_script_injector:export", + "//components/on_load_script_injector:on_load_script_injector_mojom", + "//content/public/common", + "//content/public/renderer", + "//mojo/public/cpp/bindings", + "//third_party/blink/public/common", + ] + + visibility = [ + "//chromecast/renderer/*", + "//fuchsia/engine:web_engine_core", + ] +}
diff --git a/components/on_load_script_injector/renderer/DEPS b/components/on_load_script_injector/renderer/DEPS new file mode 100644 index 0000000..396b5a7 --- /dev/null +++ b/components/on_load_script_injector/renderer/DEPS
@@ -0,0 +1,5 @@ +include_rules = [ + "+content/public/renderer", + "+mojo/public/cpp/bindings", + "+third_party/blink/public", +]
diff --git a/fuchsia/engine/renderer/on_load_script_injector.cc b/components/on_load_script_injector/renderer/on_load_script_injector.cc similarity index 71% rename from fuchsia/engine/renderer/on_load_script_injector.cc rename to components/on_load_script_injector/renderer/on_load_script_injector.cc index 6fd0a6d..2d5f1e5 100644 --- a/fuchsia/engine/renderer/on_load_script_injector.cc +++ b/components/on_load_script_injector/renderer/on_load_script_injector.cc
@@ -2,9 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "fuchsia/engine/renderer/on_load_script_injector.h" +#include "components/on_load_script_injector/renderer/on_load_script_injector.h" -#include <lib/zx/vmo.h> #include <utility> #include <vector> @@ -13,6 +12,8 @@ #include "content/public/renderer/render_frame.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h" +namespace on_load_script_injector { + OnLoadScriptInjector::OnLoadScriptInjector(content::RenderFrame* frame) : RenderFrameObserver(frame), weak_ptr_factory_(this) { render_frame()->GetAssociatedInterfaceRegistry()->AddInterface( @@ -33,18 +34,19 @@ if (!render_frame()->IsMainFrame()) return; - for (mojo::ScopedSharedBufferHandle& script : on_load_scripts_) { - DCHECK_EQ(script->GetSize() % 2, 0u); // Crude check to see this is UTF-16. + for (base::ReadOnlySharedMemoryRegion& script : on_load_scripts_) { + // Crude check to see this is UTF-16. + DCHECK_EQ(script.GetSize() % sizeof(base::char16), 0u); - auto mapping = script->Map(script->GetSize()); - base::string16 script_converted(static_cast<base::char16*>(mapping.get()), - script->GetSize() / sizeof(base::char16)); + auto mapping = script.Map(); + base::string16 script_converted(mapping.GetMemoryAs<base::char16>(), + script.GetSize() / sizeof(base::char16)); render_frame()->ExecuteJavaScript(script_converted); } } void OnLoadScriptInjector::AddOnLoadScript( - mojo::ScopedSharedBufferHandle script) { + base::ReadOnlySharedMemoryRegion script) { on_load_scripts_.push_back(std::move(script)); } @@ -55,3 +57,5 @@ void OnLoadScriptInjector::OnDestruct() { delete this; } + +} // namespace on_load_script_injector
diff --git a/components/on_load_script_injector/renderer/on_load_script_injector.h b/components/on_load_script_injector/renderer/on_load_script_injector.h new file mode 100644 index 0000000..99411fe7 --- /dev/null +++ b/components/on_load_script_injector/renderer/on_load_script_injector.h
@@ -0,0 +1,52 @@ +// 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. + +#ifndef COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ +#define COMPONENTS_ON_LOAD_SCRIPT_INJECTOR_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ + +#include <vector> + +#include "base/memory/weak_ptr.h" +#include "components/on_load_script_injector/export.h" +#include "components/on_load_script_injector/on_load_script_injector.mojom.h" +#include "content/public/renderer/render_frame_observer.h" +#include "mojo/public/cpp/bindings/associated_receiver_set.h" +#include "mojo/public/cpp/bindings/pending_associated_receiver.h" + +namespace on_load_script_injector { + +// Injects one or more scripts into a RenderFrame at the earliest possible time +// during the page load process. +class ON_LOAD_SCRIPT_INJECTOR_EXPORT OnLoadScriptInjector + : public content::RenderFrameObserver, + public mojom::OnLoadScriptInjector { + public: + explicit OnLoadScriptInjector(content::RenderFrame* frame); + + OnLoadScriptInjector(const OnLoadScriptInjector&) = delete; + OnLoadScriptInjector& operator=(const OnLoadScriptInjector&) = delete; + + void BindToReceiver( + mojo::PendingAssociatedReceiver<mojom::OnLoadScriptInjector> receiver); + + // mojom::OnLoadScriptInjector implementation. + void AddOnLoadScript(base::ReadOnlySharedMemoryRegion script) override; + void ClearOnLoadScripts() override; + + // RenderFrameObserver overrides. + void OnDestruct() override; + void DidCommitProvisionalLoad(ui::PageTransition transition) override; + + private: + // Called by OnDestruct(), when the RenderFrame is destroyed. + ~OnLoadScriptInjector() override; + + std::vector<base::ReadOnlySharedMemoryRegion> on_load_scripts_; + mojo::AssociatedReceiverSet<mojom::OnLoadScriptInjector> receivers_; + base::WeakPtrFactory<OnLoadScriptInjector> weak_ptr_factory_; +}; + +} // namespace on_load_script_injector + +#endif // COMPONENTS_CAST_API_BINDINGS_API_BINDINGS_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_
diff --git a/components/payments/content/service_worker_payment_app_factory.cc b/components/payments/content/service_worker_payment_app_factory.cc index e563d46..4663c9fe 100644 --- a/components/payments/content/service_worker_payment_app_factory.cc +++ b/components/payments/content/service_worker_payment_app_factory.cc
@@ -10,9 +10,11 @@ #include "base/bind.h" #include "base/check_op.h" #include "base/memory/weak_ptr.h" +#include "components/payments/content/developer_console_logger.h" #include "components/payments/content/payment_manifest_web_data_service.h" #include "components/payments/content/service_worker_payment_app.h" #include "components/payments/content/service_worker_payment_app_finder.h" +#include "components/payments/core/error_message_util.h" #include "components/payments/core/features.h" #include "components/payments/core/method_strings.h" #include "content/public/browser/stored_payment_app.h" @@ -38,7 +40,7 @@ ServiceWorkerPaymentAppCreator( ServiceWorkerPaymentAppFactory* owner, base::WeakPtr<PaymentAppFactory::Delegate> delegate) - : owner_(owner), delegate_(delegate) {} + : owner_(owner), delegate_(delegate), log_(delegate->GetWebContents()) {} ~ServiceWorkerPaymentAppCreator() {} @@ -56,7 +58,7 @@ base::RepeatingClosure show_processing_spinner = base::BindRepeating( &PaymentAppFactory::Delegate::ShowProcessingSpinner, delegate_); - + std::vector<std::string> skipped_app_names; for (auto& installed_app : apps) { std::vector<std::string> enabled_methods = installed_app.second->enabled_methods; @@ -67,7 +69,7 @@ if (ShouldSkipAppForPartialDelegation( installed_app.second->supported_delegations, delegate_, has_app_store_billing_method)) { - // TODO(crbug.com/1100656): give the developer an error message. + skipped_app_names.emplace_back(installed_app.second->name); continue; } auto app = std::make_unique<ServiceWorkerPaymentApp>( @@ -89,7 +91,7 @@ if (ShouldSkipAppForPartialDelegation( installable_app.second->supported_delegations, delegate_, is_app_store_billing_method)) { - // TODO(crbug.com/1100656): give the developer an error message. + skipped_app_names.emplace_back(installable_app.second->name); continue; } auto app = std::make_unique<ServiceWorkerPaymentApp>( @@ -105,8 +107,20 @@ number_of_pending_sw_payment_apps_++; } - if (number_of_pending_sw_payment_apps_ == 0U) + if (!skipped_app_names.empty()) { + std::string warning_message = + GetAppsSkippedForPartialDelegationErrorMessage(skipped_app_names); + log_.Warn(warning_message); + } + + if (number_of_pending_sw_payment_apps_ == 0U) { + if (error_message.empty() && !skipped_app_names.empty()) { + std::string new_error_message = + GetAppsSkippedForPartialDelegationErrorMessage(skipped_app_names); + delegate_->OnPaymentAppCreationError(new_error_message); + } FinishAndCleanup(); + } } bool ShouldSkipAppForPartialDelegation( @@ -150,6 +164,7 @@ ServiceWorkerPaymentAppFactory* owner_; base::WeakPtr<PaymentAppFactory::Delegate> delegate_; std::map<PaymentApp*, std::unique_ptr<PaymentApp>> available_apps_; + DeveloperConsoleLogger log_; int number_of_pending_sw_payment_apps_ = 0; base::WeakPtrFactory<ServiceWorkerPaymentAppCreator> weak_ptr_factory_{this};
diff --git a/components/payments/core/error_message_util.cc b/components/payments/core/error_message_util.cc index 1fdf75f..dd96cbba 100644 --- a/components/payments/core/error_message_util.cc +++ b/components/payments/core/error_message_util.cc
@@ -9,27 +9,46 @@ #include "base/check.h" #include "base/strings/string_util.h" +#include "components/payments/core/error_strings.h" #include "components/payments/core/native_error_strings.h" namespace payments { +namespace { + +template <class Collection> +std::string concatNamesWithQuotesAndCommma(const Collection& names) { + std::vector<std::string> with_quotes(names.size()); + std::transform( + names.begin(), names.end(), with_quotes.begin(), + [](const std::string& method_name) { return "\"" + method_name + "\""; }); + std::string result = base::JoinString(with_quotes, ", "); + return result; +} + +} // namespace + std::string GetNotSupportedErrorMessage(const std::set<std::string>& methods) { if (methods.empty()) return errors::kGenericPaymentMethodNotSupportedMessage; - std::vector<std::string> with_quotes(methods.size()); - std::transform( - methods.begin(), methods.end(), with_quotes.begin(), - [](const std::string& method_name) { return "\"" + method_name + "\""; }); - std::string output; bool replaced = base::ReplaceChars( - with_quotes.size() == 1 - ? errors::kSinglePaymentMethodNotSupportedFormat - : errors::kMultiplePaymentMethodsNotSupportedFormat, - "$", base::JoinString(with_quotes, ", "), &output); + methods.size() == 1 ? errors::kSinglePaymentMethodNotSupportedFormat + : errors::kMultiplePaymentMethodsNotSupportedFormat, + "$", concatNamesWithQuotesAndCommma(methods), &output); DCHECK(replaced); return output; } +std::string GetAppsSkippedForPartialDelegationErrorMessage( + const std::vector<std::string>& skipped_app_names) { + std::string output; + bool replaced = base::ReplaceChars( + errors::kSkipAppForPartialDelegation, "$", + concatNamesWithQuotesAndCommma(skipped_app_names), &output); + + DCHECK(replaced); + return output; +} } // namespace payments
diff --git a/components/payments/core/error_message_util.h b/components/payments/core/error_message_util.h index a998704..6f5ceff 100644 --- a/components/payments/core/error_message_util.h +++ b/components/payments/core/error_message_util.h
@@ -14,6 +14,11 @@ // not supported. std::string GetNotSupportedErrorMessage(const std::set<std::string>& methods); +// Returns a developer-facing error message that the apps are skipped because +// they do not support full delegation. +std::string GetAppsSkippedForPartialDelegationErrorMessage( + const std::vector<std::string>& skipped_apps); + } // namespace payments #endif // COMPONENTS_PAYMENTS_CORE_ERROR_MESSAGE_UTIL_H_
diff --git a/components/payments/core/error_strings.cc b/components/payments/core/error_strings.cc index 1c2bc09..4ba6e75 100644 --- a/components/payments/core/error_strings.cc +++ b/components/payments/core/error_strings.cc
@@ -32,7 +32,7 @@ const char kShippingAddressInvalid[] = "Payment app returned invalid shipping address in response."; const char kShippingOptionEmpty[] = "Payment app returned invalid response. Missing field \"shipping option\"."; const char kShippingOptionIdRequired[] = "Shipping option identifier required."; -const char kSkipAppForPartialDelegation[] = "Skipping \"$1\" because it does not provide all of the requested PaymentOptions."; +const char kSkipAppForPartialDelegation[] = "Skipping $ for not providing all of the requested PaymentOptions."; const char kStrictBasicCardShowReject[] = "User does not have valid information on file."; const char kTotalRequired[] = "Total required."; const char kUserCancelled[] = "User closed the Payment Request UI.";
diff --git a/components/policy/core/browser/policy_pref_mapping_test.cc b/components/policy/core/browser/policy_pref_mapping_test.cc index 14a5aa5a..7dcdf70 100644 --- a/components/policy/core/browser/policy_pref_mapping_test.cc +++ b/components/policy/core/browser/policy_pref_mapping_test.cc
@@ -359,7 +359,7 @@ ASSERT_TRUE(policy_details); policy_map.Set( it.first, level, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, - it.second.Clone(), + it.second.CreateDeepCopy(), policy_details->max_external_data_size ? std::make_unique<ExternalDataFetcher>(nullptr, it.first) : nullptr);
diff --git a/components/policy/core/common/async_policy_provider_unittest.cc b/components/policy/core/common/async_policy_provider_unittest.cc index 7594fd225..a9d618e2 100644 --- a/components/policy/core/common/async_policy_provider_unittest.cc +++ b/components/policy/core/common/async_policy_provider_unittest.cc
@@ -34,7 +34,8 @@ const std::string& value) { bundle->Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) .Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, - POLICY_SOURCE_PLATFORM, base::Value(value), nullptr); + POLICY_SOURCE_PLATFORM, std::make_unique<base::Value>(value), + nullptr); } class MockPolicyLoader : public AsyncPolicyLoader {
diff --git a/components/policy/core/common/cloud/component_cloud_policy_store.cc b/components/policy/core/common/cloud/component_cloud_policy_store.cc index 4800bfbd..1c39b22 100644 --- a/components/policy/core/common/cloud/component_cloud_policy_store.cc +++ b/components/policy/core/common/cloud/component_cloud_policy_store.cc
@@ -435,7 +435,8 @@ level = POLICY_LEVEL_RECOMMENDED; policy->Set(policy_name, level, domain_constants_->scope, policy_source_, - std::move(value.value()), nullptr); + base::Value::ToUniquePtrValue(std::move(value.value())), + nullptr); } return true;
diff --git a/components/policy/core/common/cloud/user_cloud_policy_manager.cc b/components/policy/core/common/cloud/user_cloud_policy_manager.cc index 4201a729..9384f98 100644 --- a/components/policy/core/common/cloud/user_cloud_policy_manager.cc +++ b/components/policy/core/common/cloud/user_cloud_policy_manager.cc
@@ -114,7 +114,8 @@ !policy_map->Get(key::kNTPContentSuggestionsEnabled)) { policy_map->Set(key::kNTPContentSuggestionsEnabled, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_ENTERPRISE_DEFAULT, - base::Value(false), nullptr /* external_data_fetcher */); + std::make_unique<base::Value>(false), + nullptr /* external_data_fetcher */); } #endif }
diff --git a/components/policy/core/common/generate_policy_source_unittest.cc b/components/policy/core/common/generate_policy_source_unittest.cc index d7c75da..59de129 100644 --- a/components/policy/core/common/generate_policy_source_unittest.cc +++ b/components/policy/core/common/generate_policy_source_unittest.cc
@@ -221,7 +221,7 @@ // If policy already configured, it's not changed to enterprise defaults. policy_map.Set(key::kChromeOsMultiProfileUserBehavior, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, - base::Value("test_value"), nullptr); + std::make_unique<base::Value>("test_value"), nullptr); SetEnterpriseUsersDefaults(&policy_map); multiprof_behavior = policy_map.GetValue(key::kChromeOsMultiProfileUserBehavior);
diff --git a/components/policy/core/common/legacy_chrome_policy_migrator_unittest.cc b/components/policy/core/common/legacy_chrome_policy_migrator_unittest.cc index f9cac88c..2577ad0 100644 --- a/components/policy/core/common/legacy_chrome_policy_migrator_unittest.cc +++ b/components/policy/core/common/legacy_chrome_policy_migrator_unittest.cc
@@ -28,7 +28,9 @@ *val = base::Value(val->GetInt() * 3); } -void SetPolicy(PolicyMap* policy, const char* policy_name, base::Value value) { +void SetPolicy(PolicyMap* policy, + const char* policy_name, + std::unique_ptr<base::Value> value) { policy->Set(policy_name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(value), nullptr); } @@ -40,8 +42,9 @@ PolicyMap& chrome_map = bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")); - SetPolicy(&chrome_map, kOldPolicy, base::Value(kOldValue)); - SetPolicy(&chrome_map, kOtherPolicy, base::Value(kOtherValue)); + SetPolicy(&chrome_map, kOldPolicy, std::make_unique<base::Value>(kOldValue)); + SetPolicy(&chrome_map, kOtherPolicy, + std::make_unique<base::Value>(kOtherValue)); LegacyChromePolicyMigrator migrator(kOldPolicy, kNewPolicy); @@ -68,7 +71,7 @@ PolicyMap& chrome_map = bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")); - SetPolicy(&chrome_map, kOldPolicy, base::Value(kOldValue)); + SetPolicy(&chrome_map, kOldPolicy, std::make_unique<base::Value>(kOldValue)); LegacyChromePolicyMigrator migrator(kOldPolicy, kNewPolicy, base::BindRepeating(&MultiplyByThree)); @@ -85,8 +88,8 @@ PolicyMap& chrome_map = bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, "")); - SetPolicy(&chrome_map, kOldPolicy, base::Value(kOldValue)); - SetPolicy(&chrome_map, kNewPolicy, base::Value(kNewValue)); + SetPolicy(&chrome_map, kOldPolicy, std::make_unique<base::Value>(kOldValue)); + SetPolicy(&chrome_map, kNewPolicy, std::make_unique<base::Value>(kNewValue)); LegacyChromePolicyMigrator migrator(kOldPolicy, kNewPolicy);
diff --git a/components/policy/core/common/policy_bundle_unittest.cc b/components/policy/core/common/policy_bundle_unittest.cc index 09104ea..6625447e 100644 --- a/components/policy/core/common/policy_bundle_unittest.cc +++ b/components/policy/core/common/policy_bundle_unittest.cc
@@ -37,10 +37,10 @@ POLICY_SOURCE_CLOUD, base::Value("omg"), nullptr); policy->Set("recommended-user", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, base::Value(true), nullptr); - base::Value dict(base::Value::Type::DICTIONARY); - dict.SetBoolKey("false", false); - dict.SetIntKey("int", 456); - dict.SetStringKey("str", "bbq"); + std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); + dict->SetBoolean("false", false); + dict->SetInteger("int", 456); + dict->SetString("str", "bbq"); policy->Set("recommended-machine", POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(dict), nullptr);
diff --git a/components/policy/core/common/policy_loader_ios.h b/components/policy/core/common/policy_loader_ios.h index ca4682c..c04a579 100644 --- a/components/policy/core/common/policy_loader_ios.h +++ b/components/policy/core/common/policy_loader_ios.h
@@ -40,8 +40,9 @@ // Validates the given policy data against the stored |schema_|, converting // data to the expected type if necessary. The returned value is suitable for // adding to a PolicyMap. - base::Value ConvertPolicyDataIfNecessary(const std::string& key, - const base::Value& value); + std::unique_ptr<base::Value> ConvertPolicyDataIfNecessary( + const std::string& key, + const base::Value& value); // The schema used by |ValidatePolicyData()|. const Schema* policy_schema_;
diff --git a/components/policy/core/common/policy_loader_ios.mm b/components/policy/core/common/policy_loader_ios.mm index 8e58ebf..36b57d8 100644 --- a/components/policy/core/common/policy_loader_ios.mm +++ b/components/policy/core/common/policy_loader_ios.mm
@@ -149,13 +149,13 @@ } } -base::Value PolicyLoaderIOS::ConvertPolicyDataIfNecessary( +std::unique_ptr<base::Value> PolicyLoaderIOS::ConvertPolicyDataIfNecessary( const std::string& key, const base::Value& value) { const Schema schema = policy_schema_->GetKnownProperty(key); if (!schema.valid()) { - return value.Clone(); + return value.CreateDeepCopy(); } // Handle the case of a JSON-encoded string for a dict policy. @@ -163,12 +163,12 @@ base::Optional<base::Value> decoded_value = base::JSONReader::Read( value.GetString(), base::JSONParserOptions::JSON_ALLOW_TRAILING_COMMAS); if (decoded_value.has_value()) { - return std::move(decoded_value.value()); + return base::Value::ToUniquePtrValue(std::move(decoded_value.value())); } } // Otherwise return an unchanged value. - return value.Clone(); + return value.CreateDeepCopy(); } } // namespace policy
diff --git a/components/policy/core/common/policy_loader_mac.mm b/components/policy/core/common/policy_loader_mac.mm index 7bbe6c53..bb19a66e 100644 --- a/components/policy/core/common/policy_loader_mac.mm +++ b/components/policy/core/common/policy_loader_mac.mm
@@ -134,7 +134,7 @@ std::unique_ptr<base::Value> policy = PropertyToValue(value); if (policy) { chrome_policy.Set(it.key(), level, POLICY_SCOPE_MACHINE, - POLICY_SOURCE_PLATFORM, std::move(*policy), nullptr); + POLICY_SOURCE_PLATFORM, std::move(policy), nullptr); } else { status.Add(POLICY_LOAD_STATUS_PARSE_ERROR); } @@ -234,7 +234,7 @@ std::unique_ptr<base::Value> policy_value = PropertyToValue(value); if (policy_value) { policy->Set(it.key(), level, POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, - std::move(*policy_value), nullptr); + std::move(policy_value), nullptr); } } }
diff --git a/components/policy/core/common/policy_loader_mac_unittest.cc b/components/policy/core/common/policy_loader_mac_unittest.cc index 1e5ea05..846af796 100644 --- a/components/policy/core/common/policy_loader_mac_unittest.cc +++ b/components/policy/core/common/policy_loader_mac_unittest.cc
@@ -197,7 +197,7 @@ expected_bundle.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())) .Set(test_keys::kKeyString, POLICY_LEVEL_RECOMMENDED, POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, - base::Value("string value"), nullptr); + std::make_unique<base::Value>("string value"), nullptr); EXPECT_TRUE(provider_->policies().Equals(expected_bundle)); }
diff --git a/components/policy/core/common/policy_map.cc b/components/policy/core/common/policy_map.cc index 8c8cb7d..3fa33e9 100644 --- a/components/policy/core/common/policy_map.cc +++ b/components/policy/core/common/policy_map.cc
@@ -217,6 +217,19 @@ PolicyLevel level, PolicyScope scope, PolicySource source, + std::unique_ptr<base::Value> value, + std::unique_ptr<ExternalDataFetcher> external_data_fetcher) { + Entry entry(level, scope, source, + value ? base::make_optional(std::move(*value)) : base::nullopt, + std::move(external_data_fetcher)); + Set(policy, std::move(entry)); +} + +void PolicyMap::Set( + const std::string& policy, + PolicyLevel level, + PolicyScope scope, + PolicySource source, base::Optional<base::Value> value, std::unique_ptr<ExternalDataFetcher> external_data_fetcher) { Entry entry(level, scope, source, std::move(value),
diff --git a/components/policy/core/common/policy_map.h b/components/policy/core/common/policy_map.h index 9b07543..5990345 100644 --- a/components/policy/core/common/policy_map.h +++ b/components/policy/core/common/policy_map.h
@@ -143,6 +143,16 @@ // Overwrites any existing information stored in the map for the key |policy|. // Resets the error for that policy to the empty string. + // DEPRECATED: Use the other version that takes base::Optional<base::Value> + // below. + // TODO(crbug.com/1092469): Migrate the existing usages and delete this + // method. + void Set(const std::string& policy, + PolicyLevel level, + PolicyScope scope, + PolicySource source, + std::unique_ptr<base::Value> value, + std::unique_ptr<ExternalDataFetcher> external_data_fetcher); void Set(const std::string& policy, PolicyLevel level, PolicyScope scope,
diff --git a/components/policy/core/common/policy_service_impl.cc b/components/policy/core/common/policy_service_impl.cc index aeb346a..81dad68d 100644 --- a/components/policy/core/common/policy_service_impl.cc +++ b/components/policy/core/common/policy_service_impl.cc
@@ -47,19 +47,21 @@ // first, and then only policies with those exact attributes are merged. PolicyMap::Entry current_priority; // Defaults to the lowest priority. PolicySource inherited_source = POLICY_SOURCE_ENTERPRISE_DEFAULT; - base::Value proxy_settings(base::Value::Type::DICTIONARY); + std::unique_ptr<base::DictionaryValue> proxy_settings( + new base::DictionaryValue); for (size_t i = 0; i < base::size(kProxyPolicies); ++i) { const PolicyMap::Entry* entry = policies->Get(kProxyPolicies[i]); if (entry) { if (entry->has_higher_priority_than(current_priority)) { - proxy_settings = base::Value(base::Value::Type::DICTIONARY); + proxy_settings->Clear(); current_priority = entry->DeepCopy(); if (entry->source > inherited_source) // Higher priority? inherited_source = entry->source; } if (!entry->has_higher_priority_than(current_priority) && !current_priority.has_higher_priority_than(*entry)) { - proxy_settings.SetKey(kProxyPolicies[i], entry->value()->Clone()); + proxy_settings->Set(kProxyPolicies[i], + entry->value()->CreateDeepCopy()); } policies->Erase(kProxyPolicies[i]); } @@ -67,7 +69,7 @@ // Sets the new |proxy_settings| if kProxySettings isn't set yet, or if the // new priority is higher. const PolicyMap::Entry* existing = policies->Get(key::kProxySettings); - if (!proxy_settings.DictEmpty() && + if (!proxy_settings->empty() && (!existing || current_priority.has_higher_priority_than(*existing))) { policies->Set(key::kProxySettings, current_priority.level, current_priority.scope, inherited_source,
diff --git a/components/policy/core/common/policy_statistics_collector_unittest.cc b/components/policy/core/common/policy_statistics_collector_unittest.cc index d6fdb11..2d01549 100644 --- a/components/policy/core/common/policy_statistics_collector_unittest.cc +++ b/components/policy/core/common/policy_statistics_collector_unittest.cc
@@ -116,7 +116,8 @@ void SetPolicy(const std::string& name) { policy_map_.Set(name, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER, - POLICY_SOURCE_CLOUD, base::Value(true), nullptr); + POLICY_SOURCE_CLOUD, std::make_unique<base::Value>(true), + nullptr); } void SetPolicyIgnoredByAtomicGroup(const std::string& name) {
diff --git a/components/policy/tools/generate_policy_source.py b/components/policy/tools/generate_policy_source.py index 0fed66a..6d6c9ea 100755 --- a/components/policy/tools/generate_policy_source.py +++ b/components/policy/tools/generate_policy_source.py
@@ -1009,17 +1009,17 @@ |value|: The deserialized value to convert to base::Value.""" if type(value) == bool or type(value) == int: - return [], 'base::Value(%s)' % json.dumps(value) + return [], 'std::make_unique<base::Value>(%s)' % json.dumps(value) elif type(value) == str: - return [], 'base::Value("%s")' % value + return [], 'std::make_unique<base::Value>("%s")' % value elif type(value) == list: - setup = ['base::Value default_value(base::Value::Type::LIST);'] + setup = ['auto default_value = std::make_unique<base::ListValue>();'] for entry in value: decl, fetch = _GenerateDefaultValue(entry) # Nested lists are not supported. if decl: return [], None - setup.append('default_value.Append(%s);' % fetch) + setup.append('default_value->Append(%s);' % fetch) return setup, 'std::move(default_value)' return [], None
diff --git a/components/prerender/browser/BUILD.gn b/components/prerender/browser/BUILD.gn index 3e4e3bf..d8729fa8 100644 --- a/components/prerender/browser/BUILD.gn +++ b/components/prerender/browser/BUILD.gn
@@ -17,9 +17,14 @@ "prerender_histograms.h", "prerender_history.cc", "prerender_history.h", + "prerender_link_manager.cc", + "prerender_link_manager.h", "prerender_manager.cc", "prerender_manager.h", "prerender_manager_delegate.h", + "prerender_processor_impl.cc", + "prerender_processor_impl.h", + "prerender_processor_impl_delegate.h", "prerender_util.cc", "prerender_util.h", ] @@ -35,6 +40,11 @@ "//ui/gfx/image/mojom:mojom_traits", "//url", ] + + # TODO(crbug.com/722453): Use a dedicated build flag for GuestView. + if (!is_android && !is_ios && !is_fuchsia) { + deps += [ "//components/guest_view/browser" ] + } } source_set("unit_tests") {
diff --git a/components/prerender/browser/DEPS b/components/prerender/browser/DEPS index a41004d..3b36e31 100644 --- a/components/prerender/browser/DEPS +++ b/components/prerender/browser/DEPS
@@ -1,6 +1,7 @@ include_rules = [ "+components/content_settings/core", "+components/google/core/common", + "+components/guest_view/browser", "+components/keyed_service/core", "+content/public/browser", "+content/public/common",
diff --git a/chrome/browser/prerender/prerender_link_manager.cc b/components/prerender/browser/prerender_link_manager.cc similarity index 95% rename from chrome/browser/prerender/prerender_link_manager.cc rename to components/prerender/browser/prerender_link_manager.cc index f104b80..b0550313 100644 --- a/chrome/browser/prerender/prerender_link_manager.cc +++ b/components/prerender/browser/prerender_link_manager.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/prerender/prerender_link_manager.h" +#include "components/prerender/browser/prerender_link_manager.h" #include <functional> #include <limits> @@ -13,6 +13,7 @@ #include "base/metrics/field_trial.h" #include "base/metrics/histogram_macros.h" +#include "build/build_config.h" #include "components/prerender/browser/prerender_contents.h" #include "components/prerender/browser/prerender_handle.h" #include "components/prerender/browser/prerender_manager.h" @@ -20,7 +21,6 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/session_storage_namespace.h" #include "content/public/common/referrer.h" -#include "extensions/buildflags/buildflags.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/common/prerender/prerender_rel_type.h" @@ -28,8 +28,9 @@ #include "url/gurl.h" #include "url/origin.h" -#if BUILDFLAG(ENABLE_EXTENSIONS) -#include "components/guest_view/browser/guest_view_base.h" +// TODO(crbug.com/722453): Use a dedicated build flag for GuestView. +#if !defined(OS_ANDROID) && !defined(OS_IOS) && !defined(OS_FUCHSIA) +#include "components/guest_view/browser/guest_view_base.h" // nogncheck #endif using base::TimeDelta; @@ -157,7 +158,8 @@ blink::mojom::PrerenderAttributesPtr attributes, mojo::PendingRemote<blink::mojom::PrerenderHandleClient> handle_client, mojo::PendingReceiver<blink::mojom::PrerenderHandle> handle) { -#if BUILDFLAG(ENABLE_EXTENSIONS) +// TODO(crbug.com/722453): Use a dedicated build flag for GuestView. +#if !defined(OS_ANDROID) && !defined(OS_IOS) && !defined(OS_FUCHSIA) content::RenderViewHost* rvh = content::RenderViewHost::FromID( launcher_render_process_id, launcher_render_view_id); content::WebContents* web_contents = @@ -258,8 +260,7 @@ std::list<LinkPrerender*> abandoned_prerenders; std::list<std::list<std::unique_ptr<LinkPrerender>>::iterator> pending_prerenders; - std::multiset<std::pair<int, int> > - running_launcher_and_render_view_routes; + std::multiset<std::pair<int, int>> running_launcher_and_render_view_routes; // Scan the list, counting how many prerenders have handles (and so were added // to the PrerenderManager). The count is done for the system as a whole, and @@ -406,8 +407,7 @@ } // In practice, this is always called from PrerenderLinkManager::OnAddPrerender. -void PrerenderLinkManager::OnPrerenderStart( - PrerenderHandle* prerender_handle) { +void PrerenderLinkManager::OnPrerenderStart(PrerenderHandle* prerender_handle) { LinkPrerender* prerender = FindByPrerenderHandle(prerender_handle); if (!prerender) return; @@ -433,8 +433,7 @@ prerender->remote_handle_client->OnPrerenderDomContentLoaded(); } -void PrerenderLinkManager::OnPrerenderStop( - PrerenderHandle* prerender_handle) { +void PrerenderLinkManager::OnPrerenderStop(PrerenderHandle* prerender_handle) { LinkPrerender* prerender = FindByPrerenderHandle(prerender_handle); if (!prerender) return;
diff --git a/chrome/browser/prerender/prerender_link_manager.h b/components/prerender/browser/prerender_link_manager.h similarity index 94% rename from chrome/browser/prerender/prerender_link_manager.h rename to components/prerender/browser/prerender_link_manager.h index c6c16f9..2d7fe521 100644 --- a/chrome/browser/prerender/prerender_link_manager.h +++ b/components/prerender/browser/prerender_link_manager.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ -#define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ +#ifndef COMPONENTS_PRERENDER_BROWSER_PRERENDER_LINK_MANAGER_H_ +#define COMPONENTS_PRERENDER_BROWSER_PRERENDER_LINK_MANAGER_H_ #include <stddef.h> #include <stdint.h> @@ -111,4 +111,4 @@ } // namespace prerender -#endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ +#endif // COMPONENTS_PRERENDER_BROWSER_PRERENDER_LINK_MANAGER_H_
diff --git a/chrome/browser/prerender/prerender_processor_impl.cc b/components/prerender/browser/prerender_processor_impl.cc similarity index 94% rename from chrome/browser/prerender/prerender_processor_impl.cc rename to components/prerender/browser/prerender_processor_impl.cc index aadf906..e803dda 100644 --- a/chrome/browser/prerender/prerender_processor_impl.cc +++ b/components/prerender/browser/prerender_processor_impl.cc
@@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/prerender/prerender_processor_impl.h" +#include "components/prerender/browser/prerender_processor_impl.h" -#include "chrome/browser/prerender/prerender_link_manager.h" +#include "components/prerender/browser/prerender_link_manager.h" #include "content/public/browser/child_process_security_policy.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h"
diff --git a/chrome/browser/prerender/prerender_processor_impl.h b/components/prerender/browser/prerender_processor_impl.h similarity index 81% rename from chrome/browser/prerender/prerender_processor_impl.h rename to components/prerender/browser/prerender_processor_impl.h index b7e05fc..de4a63c 100644 --- a/chrome/browser/prerender/prerender_processor_impl.h +++ b/components/prerender/browser/prerender_processor_impl.h
@@ -2,10 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_H_ -#define CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_H_ +#ifndef COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_H_ +#define COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_H_ -#include "chrome/browser/prerender/prerender_processor_impl_delegate.h" +#include "components/prerender/browser/prerender_processor_impl_delegate.h" #include "third_party/blink/public/mojom/prerender/prerender.mojom.h" namespace content { @@ -41,4 +41,4 @@ } // namespace prerender -#endif // CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_H_ +#endif // COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_H_
diff --git a/chrome/browser/prerender/prerender_processor_impl_delegate.h b/components/prerender/browser/prerender_processor_impl_delegate.h similarity index 71% rename from chrome/browser/prerender/prerender_processor_impl_delegate.h rename to components/prerender/browser/prerender_processor_impl_delegate.h index 601ca18..37099688 100644 --- a/chrome/browser/prerender/prerender_processor_impl_delegate.h +++ b/components/prerender/browser/prerender_processor_impl_delegate.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ -#define CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ +#ifndef COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ +#define COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ namespace content { class BrowserContext; @@ -24,4 +24,4 @@ } // namespace prerender -#endif // CHROME_BROWSER_PRERENDER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_ +#endif // COMPONENTS_PRERENDER_BROWSER_PRERENDER_PROCESSOR_IMPL_DELEGATE_H_
diff --git a/components/safe_browsing/core/db/v4_get_hash_protocol_manager.cc b/components/safe_browsing/core/db/v4_get_hash_protocol_manager.cc index 8761276..7025de1 100644 --- a/components/safe_browsing/core/db/v4_get_hash_protocol_manager.cc +++ b/components/safe_browsing/core/db/v4_get_hash_protocol_manager.cc
@@ -340,7 +340,7 @@ &resource_request->headers); resource_request->load_flags = net::LOAD_DISABLE_CACHE; - if (base::FeatureList::IsEnabled(kSafeBrowsingSeparateNetworkContexts)) { + if (base::FeatureList::IsEnabled(kSafeBrowsingRemoveCookies)) { resource_request->load_flags |= net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES; }
diff --git a/components/safe_browsing/core/features.cc b/components/safe_browsing/core/features.cc index aebba0a..3fce6ab 100644 --- a/components/safe_browsing/core/features.cc +++ b/components/safe_browsing/core/features.cc
@@ -118,6 +118,9 @@ const base::Feature kSafeBrowsingSeparateNetworkContexts{ "SafeBrowsingSeparateNetworkContexts", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kSafeBrowsingRemoveCookies{ + "SafeBrowsingRemoveCookies", base::FEATURE_DISABLED_BY_DEFAULT}; + constexpr base::FeatureParam<bool> kShouldFillOldPhishGuardProto{ &kPasswordProtectionForSignedInUsers, "DeprecateOldProto", false};
diff --git a/components/safe_browsing/core/features.h b/components/safe_browsing/core/features.h index 099825cd..1ce4726 100644 --- a/components/safe_browsing/core/features.h +++ b/components/safe_browsing/core/features.h
@@ -77,6 +77,10 @@ // Controls whether the security section is shown on the settings UI on Android. extern const base::Feature kSafeBrowsingSecuritySectionUIAndroid; +// Controls whether cookies are removed from certain communications with Safe +// Browsing. +extern const base::Feature kSafeBrowsingRemoveCookies; + // Controls the daily quota for the suspicious site trigger. extern const base::Feature kSuspiciousSiteTriggerQuotaFeature;
diff --git a/components/security_interstitials_strings.grdp b/components/security_interstitials_strings.grdp index 353af23..60469773 100644 --- a/components/security_interstitials_strings.grdp +++ b/components/security_interstitials_strings.grdp
@@ -526,19 +526,19 @@ <!-- Insecure form submission interstitial--> <message name="IDS_INSECURE_FORM_TITLE" desc="Tab Title for insecure form submission warning"> - Insecure Form + Form is not secure </message> <message name="IDS_INSECURE_FORM_HEADING" desc="Large heading of the warning shown when submitting an insecure form"> - The data in this form is being sent through an insecure connection + The information you’re about to submit is not secure </message> <message name="IDS_INSECURE_FORM_PRIMARY_PARAGRAPH" desc="Main paragraph of the insecure form submission warning. This warning is shown when a form shown on a secure website is submitted over an insecure connection."> - This form is being submitted over an insecure connection, which may expose your information (for example, passwords, messages, or credit cards) when it is sent to this site. + Because the site is using a connection that’s not completely secure, your information will be visible to others. </message> <message name="IDS_INSECURE_FORM_BACK_BUTTON" desc="Text for the button in the insecure form warning that takes the user back to the previous page"> - Go Back + Go back </message> <message name="IDS_INSECURE_FORM_SUBMIT_BUTTON" desc="Text for the button in the insecure form warning that bypasses the warning and submits the form"> - Submit Anyways + Send anyway </message> </grit-part>
diff --git a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_BACK_BUTTON.png.sha1 b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_BACK_BUTTON.png.sha1 index 98ff9a0..786c2acb 100644 --- a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_BACK_BUTTON.png.sha1 +++ b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_BACK_BUTTON.png.sha1
@@ -1 +1 @@ -f3458963cb806453eb547140d093c75d7d7080e1 \ No newline at end of file +57e519dbb05ed2d3541523dd174ea7d469dda94e \ No newline at end of file
diff --git a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_HEADING.png.sha1 b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_HEADING.png.sha1 index 98ff9a0..786c2acb 100644 --- a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_HEADING.png.sha1 +++ b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_HEADING.png.sha1
@@ -1 +1 @@ -f3458963cb806453eb547140d093c75d7d7080e1 \ No newline at end of file +57e519dbb05ed2d3541523dd174ea7d469dda94e \ No newline at end of file
diff --git a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_PRIMARY_PARAGRAPH.png.sha1 b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_PRIMARY_PARAGRAPH.png.sha1 index 98ff9a0..786c2acb 100644 --- a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_PRIMARY_PARAGRAPH.png.sha1 +++ b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_PRIMARY_PARAGRAPH.png.sha1
@@ -1 +1 @@ -f3458963cb806453eb547140d093c75d7d7080e1 \ No newline at end of file +57e519dbb05ed2d3541523dd174ea7d469dda94e \ No newline at end of file
diff --git a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_SUBMIT_BUTTON.png.sha1 b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_SUBMIT_BUTTON.png.sha1 index 98ff9a0..786c2acb 100644 --- a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_SUBMIT_BUTTON.png.sha1 +++ b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_SUBMIT_BUTTON.png.sha1
@@ -1 +1 @@ -f3458963cb806453eb547140d093c75d7d7080e1 \ No newline at end of file +57e519dbb05ed2d3541523dd174ea7d469dda94e \ No newline at end of file
diff --git a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_TITLE.png.sha1 b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_TITLE.png.sha1 index 98ff9a0..786c2acb 100644 --- a/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_TITLE.png.sha1 +++ b/components/security_interstitials_strings_grdp/IDS_INSECURE_FORM_TITLE.png.sha1
@@ -1 +1 @@ -f3458963cb806453eb547140d093c75d7d7080e1 \ No newline at end of file +57e519dbb05ed2d3541523dd174ea7d469dda94e \ No newline at end of file
diff --git a/components/sync/protocol/autofill_offer_specifics.proto b/components/sync/protocol/autofill_offer_specifics.proto new file mode 100644 index 0000000..5a1e0292 --- /dev/null +++ b/components/sync/protocol/autofill_offer_specifics.proto
@@ -0,0 +1,71 @@ +// 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. + +// If you change or add any fields in this file, update proto_visitors.h and +// potentially proto_enum_conversions.{h, cc}. + +syntax = "proto2"; + +option java_multiple_files = true; +option java_package = "org.chromium.components.sync.protocol"; + +option optimize_for = LITE_RUNTIME; + +package sync_pb; + +// Properties of Autofill wallet offer related objects. + +message AutofillOfferSpecifics { + // The id for this offer data. Will be used as the client tag. + optional int64 id = 1; + + // The link leading to the offer details page on Gpay app. Will be populated + // on Android only. + optional string offer_details_deep_link_clank = 2; + + // Merchant domain and merchant app package name refers to the merchant this + // offer is applied to. + optional string merchant_domain = 3; + optional string merchant_app_package = 4; + + // The expiry of this offer. Will be represented in the form of unix epoch + // time in seconds. Once the offer is expired it will not be shown in the + // client. + optional int64 offer_expiry_date = 5; + + message CardLinkedOfferData { + // The server id of the card to which the offer is linked. Both the id and + // the legacy id should be passed down to the client. Right now only the + // legacy_instrument_id will be used but in the future the server will + // migrate to instrument_id. The legacy_instrument_id matches the id in the + // masked_credit_cards table. + repeated string instrument_id = 1; + repeated string legacy_instrument_id = 2; + } + + // The unique offer data for different offer types. + oneof type_specific_offer_data { + CardLinkedOfferData card_linked_offer_data = 6; + } + + // This value will be shown in the offer text template as "XXX% cashback". + // Percentage has a range of (0, 100]. + message PercentageReward { + // The string contains a number and a percent sign. + optional string percentage = 1; + } + + // This value will be shown in the offer text template as "XXX$ off". + message FixedAmountReward { + // The string contains a number and a currency sign. + optional string amount = 1; + } + + // The reward type of the offer. Will be used to generate the display text in + // the UI. Each type has its own client side text template. + oneof reward_type { + PercentageReward percentage_reward = 7; + FixedAmountReward fixed_amount_reward = 8; + } +}
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h index 6e4aa33..c1410ee 100644 --- a/components/sync/protocol/proto_visitors.h +++ b/components/sync/protocol/proto_visitors.h
@@ -10,6 +10,7 @@ #include "components/sync/protocol/app_setting_specifics.pb.h" #include "components/sync/protocol/app_specifics.pb.h" #include "components/sync/protocol/arc_package_specifics.pb.h" +#include "components/sync/protocol/autofill_offer_specifics.pb.h" #include "components/sync/protocol/autofill_specifics.pb.h" #include "components/sync/protocol/bookmark_specifics.pb.h" #include "components/sync/protocol/dictionary_specifics.pb.h" @@ -136,6 +137,33 @@ VISIT(enabled); } +VISIT_PROTO_FIELDS(const sync_pb::AutofillOfferSpecifics& proto) { + VISIT(id); + VISIT(offer_details_deep_link_clank); + VISIT(merchant_domain); + VISIT(merchant_app_package); + VISIT(offer_expiry_date); + VISIT(card_linked_offer_data); + VISIT(percentage_reward); + VISIT(fixed_amount_reward); +} + +VISIT_PROTO_FIELDS( + const sync_pb::AutofillOfferSpecifics::CardLinkedOfferData& proto) { + VISIT_REP(instrument_id); + VISIT_REP(legacy_instrument_id); +} + +VISIT_PROTO_FIELDS( + const sync_pb::AutofillOfferSpecifics::PercentageReward& proto) { + VISIT(percentage); +} + +VISIT_PROTO_FIELDS( + const sync_pb::AutofillOfferSpecifics::FixedAmountReward& proto) { + VISIT(amount); +} + VISIT_PROTO_FIELDS(const sync_pb::AutofillProfileSpecifics& proto) { VISIT(guid); VISIT(origin);
diff --git a/components/sync/protocol/protocol_sources.gni b/components/sync/protocol/protocol_sources.gni index b3c9ee9..1db5c64 100644 --- a/components/sync/protocol/protocol_sources.gni +++ b/components/sync/protocol/protocol_sources.gni
@@ -8,6 +8,7 @@ "app_specifics", "app_list_specifics", "arc_package_specifics", + "autofill_offer_specifics", "autofill_specifics", "bookmark_model_metadata", "bookmark_specifics",
diff --git a/components/test/data/payments/enforce_full_delegation.com/index.js b/components/test/data/payments/enforce_full_delegation.com/index.js index d527b47..d9de116 100644 --- a/components/test/data/payments/enforce_full_delegation.com/index.js +++ b/components/test/data/payments/enforce_full_delegation.com/index.js
@@ -4,35 +4,59 @@ * found in the LICENSE file. */ -const methodName = window.location.origin + '/method_manifest.json'; -const swSrcUrl = 'app.js'; +const CURRENT_URL = window.location.origin + window.location.pathname; +const METHOD_NAME = CURRENT_URL.substring(0, CURRENT_URL.lastIndexOf('/')) + + '/method_manifest.json'; +const SW_SRC_URL = 'app.js'; let request; let supportedInstruments = []; /** - * Install a payment app. - * @return {string} - a message indicating whether the installation is - * successful. + * Installs the given payment handler with the given payment method. + * @param {string} method - The payment method that this service worker + * supports. + * @return {Promise<string>} - 'success' or error message on failure. */ -async function install() { // eslint-disable-line no-unused-vars +async function install(method=METHOD_NAME) { // eslint-disable-line no-unused-vars, max-len info('installing'); - - await navigator.serviceWorker.register(swSrcUrl); - const registration = await navigator.serviceWorker.ready; - if (!registration.paymentManager) { - return 'No payment handler capability in this browser. Is' + - 'chrome://flags/#service-worker-payment-apps enabled?'; + try { + const registration = await navigator.serviceWorker.register(SW_SRC_URL); + await activation(registration); + await registration.paymentManager.instruments.set( + 'instrument-for-' + method, {name: 'Instrument Name', method}); + return 'success'; + } catch (e) { + return e.message; } +} - if (!registration.paymentManager.instruments) { - return 'Payment handler is not fully implemented. ' + - 'Cannot set the instruments.'; - } - await registration.paymentManager.instruments.set('instrument-key', { - name: 'MaxPay', - method: methodName, +/** + * Returns a promise that resolves when the service worker of the given + * registration has activated. + * @param {ServiceWorkerRegistration} registration - A service worker + * registration. + * @return {Promise<void>} - A promise that resolves when the service worker + * has activated. + */ +async function activation(registration) { + return new Promise((resolve) => { + if (registration.active) { + resolve(); + return; + } + registration.addEventListener('updatefound', () => { + const newWorker = registration.installing; + if (newWorker.state == 'activated') { + resolve(); + return; + } + newWorker.addEventListener('statechange', () => { + if (newWorker.state == 'activated') { + resolve(); + } + }); + }); }); - return 'success'; } /** @@ -41,7 +65,7 @@ */ async function uninstall() { // eslint-disable-line no-unused-vars info('uninstall'); - let registration = await navigator.serviceWorker.getRegistration(swSrcUrl); + let registration = await navigator.serviceWorker.getRegistration(SW_SRC_URL); if (!registration) { return 'The Payment handler has not been installed yet.'; } @@ -59,7 +83,7 @@ try { await navigator.serviceWorker.ready; let registration = - await navigator.serviceWorker.getRegistration(swSrcUrl); + await navigator.serviceWorker.getRegistration(SW_SRC_URL); if (!registration) { return 'The payment handler is not installed.'; } @@ -78,16 +102,18 @@ } /** - * Add a payment method to the payment request. - * @param {string} method - the payment method. + * Add payment methods to the payment request. + * @param {string[]} methods - the payment methods. * @return {string} - a message indicating whether the operation is successful. */ -function addSupportedMethod(method) { // eslint-disable-line no-unused-vars - info('addSupportedMethod: ' + method); - supportedInstruments.push({ - supportedMethods: [ - method, - ], +function addSupportedMethods(methods) { // eslint-disable-line no-unused-vars + info('addSupportedMethods: ' + JSON.stringify(methods)); + methods.forEach((method)=>{ + supportedInstruments.push({ + supportedMethods: [ + method, + ], + }); }); return 'success'; } @@ -97,7 +123,7 @@ * @return {string} - a message indicating whether the operation is successful. */ function addDefaultSupportedMethod() { // eslint-disable-line no-unused-vars - return addSupportedMethod(methodName); + return addSupportedMethods([METHOD_NAME]); } /**
diff --git a/components/variations/field_trial_config/BUILD.gn b/components/variations/field_trial_config/BUILD.gn index b0490e7b..a3a11359 100644 --- a/components/variations/field_trial_config/BUILD.gn +++ b/components/variations/field_trial_config/BUILD.gn
@@ -2,6 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +declare_args() { + invert_fieldtrials = false +} + action("field_trial_testing_config_action") { visibility = [ ":field_trial_config" ] script = "//tools/variations/fieldtrial_to_struct.py" @@ -35,6 +39,10 @@ "--output=$out_name", ] + if (invert_fieldtrials) { + args += [ "--invert_fieldtrials" ] + } + # At build-time, Android Chrome and WebView/WebLayer use the platform # "android", but at run-time, variations has separate platforms "android", # "android_webview" and "android_weblayer". So if building "android", also
diff --git a/components/vector_icons/BUILD.gn b/components/vector_icons/BUILD.gn index 966bb53..10f81bcd 100644 --- a/components/vector_icons/BUILD.gn +++ b/components/vector_icons/BUILD.gn
@@ -36,7 +36,7 @@ "folder_managed_touch.icon", "folder_open.icon", "folder_touch.icon", - "font_access.icon", + "font_download.icon", "forward_arrow.icon", "headset.icon", "help.icon",
diff --git a/components/vector_icons/font_access.icon b/components/vector_icons/font_download.icon similarity index 100% rename from components/vector_icons/font_access.icon rename to components/vector_icons/font_download.icon
diff --git a/components/viz/client/client_resource_provider.h b/components/viz/client/client_resource_provider.h index afd3e04..6fff095 100644 --- a/components/viz/client/client_resource_provider.h +++ b/components/viz/client/client_resource_provider.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_VIZ_CLIENT_CLIENT_RESOURCE_PROVIDER_H_ #define COMPONENTS_VIZ_CLIENT_CLIENT_RESOURCE_PROVIDER_H_ +#include <memory> #include <vector> #include "base/threading/thread_checker.h" @@ -19,7 +20,6 @@ #include "third_party/khronos/GLES2/gl2.h" #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" -#include "third_party/skia/include/gpu/GrContext.h" namespace gpu { namespace gles2 {
diff --git a/components/viz/common/gpu/context_cache_controller.cc b/components/viz/common/gpu/context_cache_controller.cc index 90289935..f0058e2 100644 --- a/components/viz/common/gpu/context_cache_controller.cc +++ b/components/viz/common/gpu/context_cache_controller.cc
@@ -12,7 +12,7 @@ #include "base/memory/ptr_util.h" #include "base/synchronization/lock.h" #include "gpu/command_buffer/client/context_support.h" -#include "third_party/skia/include/gpu/GrContext.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" namespace viz { namespace { @@ -48,7 +48,7 @@ ClientBecameNotVisible(std::move(held_visibility_)); } -void ContextCacheController::SetGrContext(GrContext* gr_context) { +void ContextCacheController::SetGrContext(GrDirectContext* gr_context) { gr_context_ = gr_context; }
diff --git a/components/viz/common/gpu/context_cache_controller.h b/components/viz/common/gpu/context_cache_controller.h index b76e43d..7b5c5f86 100644 --- a/components/viz/common/gpu/context_cache_controller.h +++ b/components/viz/common/gpu/context_cache_controller.h
@@ -14,7 +14,7 @@ #include "base/single_thread_task_runner.h" #include "components/viz/common/viz_common_export.h" -class GrContext; +class GrDirectContext; namespace base { class Lock; @@ -53,7 +53,7 @@ scoped_refptr<base::SingleThreadTaskRunner> task_runner); virtual ~ContextCacheController(); - void SetGrContext(GrContext* gr_context); + void SetGrContext(GrDirectContext* gr_context); void SetLock(base::Lock* lock); // Clients of the owning ContextProvider should call this function when they @@ -89,7 +89,7 @@ gpu::ContextSupport* context_support_; scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - GrContext* gr_context_ = nullptr; + GrDirectContext* gr_context_ = nullptr; std::unique_ptr<ScopedVisibility> held_visibility_;
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc index 7e6da41..3dc5c652 100644 --- a/components/viz/service/display/gl_renderer.cc +++ b/components/viz/service/display/gl_renderer.cc
@@ -655,7 +655,7 @@ static sk_sp<SkImage> WrapTexture(uint32_t texture_id, uint32_t target, const gfx::Size& size, - GrContext* context, + GrDirectContext* context, bool flip_texture, SkColorType format, bool adopt_texture) {
diff --git a/components/viz/service/display_embedder/skia_output_device_webview.cc b/components/viz/service/display_embedder/skia_output_device_webview.cc index dd59bb7..4fe0b573 100644 --- a/components/viz/service/display_embedder/skia_output_device_webview.cc +++ b/components/viz/service/display_embedder/skia_output_device_webview.cc
@@ -10,7 +10,6 @@ #include "gpu/command_buffer/service/gl_utils.h" #include "gpu/command_buffer/service/shared_context_state.h" #include "third_party/skia/include/core/SkSurface.h" -#include "third_party/skia/include/gpu/GrContext.h" #include "ui/gfx/buffer_format_util.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_surface.h"
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index 49e8487..2819059d 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -9,6 +9,7 @@ #include "base/bind_helpers.h" #include "base/callback_helpers.h" #include "base/optional.h" +#include "base/threading/thread_task_runner_handle.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/trace_event.h" #include "components/viz/common/frame_sinks/copy_output_request.h" @@ -115,45 +116,6 @@ base::WeakPtr<SkiaOutputSurfaceImplOnGpu> impl_on_gpu; }; -class SharedImageSubMemoryTracker : public gpu::MemoryTracker { - public: - SharedImageSubMemoryTracker(gpu::CommandBufferId command_buffer_id, - uint64_t client_tracing_id, - Observer* observer) - : command_buffer_id_(command_buffer_id), - client_tracing_id_(client_tracing_id), - observer_(observer) {} - SharedImageSubMemoryTracker(const SharedImageSubMemoryTracker&) = delete; - SharedImageSubMemoryTracker& operator=(const SharedImageSubMemoryTracker&) = - delete; - ~SharedImageSubMemoryTracker() override { DCHECK(!size_); } - - // MemoryTracker implementation: - void TrackMemoryAllocatedChange(int64_t delta) override { - DCHECK(delta >= 0 || size_ >= static_cast<uint64_t>(-delta)); - uint64_t old_size = size_; - size_ += delta; - DCHECK(observer_); - observer_->OnMemoryAllocatedChange( - command_buffer_id_, old_size, size_, - gpu::GpuPeakMemoryAllocationSource::SKIA); - } - uint64_t GetSize() const override { return size_; } - uint64_t ClientTracingId() const override { return client_tracing_id_; } - int ClientId() const override { - return gpu::ChannelIdFromCommandBufferId(command_buffer_id_); - } - uint64_t ContextGroupTracingId() const override { - return command_buffer_id_.GetUnsafeValue(); - } - - private: - gpu::CommandBufferId command_buffer_id_; - const uint64_t client_tracing_id_; - MemoryTracker::Observer* const observer_; - uint64_t size_ = 0; -}; - class CopyOutputResultYUV : public CopyOutputResult { public: CopyOutputResultYUV(const gfx::Rect& rect, @@ -427,14 +389,9 @@ feature_info_(std::move(feature_info)), sync_point_client_state_( CreateSyncPointClientState(dependency_, sequence_id)), - memory_tracker_(std::make_unique<SharedImageSubMemoryTracker>( - sync_point_client_state_->command_buffer_id(), - base::trace_event::MemoryDumpManager::GetInstance() - ->GetTracingProcessId(), - dependency_->GetSharedContextState()->memory_tracker())), + memory_tracker_(dependency_->GetSharedContextState()->memory_tracker()), shared_image_representation_factory_( - CreateSharedImageRepresentationFactory(dependency_, - memory_tracker_.get())), + CreateSharedImageRepresentationFactory(dependency_, memory_tracker_)), vulkan_context_provider_(dependency_->GetVulkanContextProvider()), dawn_context_provider_(dependency_->GetDawnContextProvider()), renderer_settings_(renderer_settings), @@ -714,6 +671,15 @@ // |image_contexts| will go out of scope and be destroyed now. } +static void PostTaskFromMainToImplThread( + scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner, + ReleaseCallback callback, + const gpu::SyncToken& sync_token, + bool is_lost) { + impl_task_runner->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), sync_token, is_lost)); +} + bool SkiaOutputSurfaceImplOnGpu::CopyOutput( RenderPassId id, copy_output::RenderPassGeometry geometry, @@ -765,10 +731,6 @@ gpu::kInProcessCommandBufferClientId); } - // Skia readback could be synchronous. Incremement counter in case - // ReadbackCompleted is called immediately. - num_readbacks_pending_++; - // For downscaling, use the GOOD quality setting (appropriate for // thumbnailing); and, for upscaling, use the BEST quality. bool is_downscale_in_both_dimensions = @@ -807,6 +769,9 @@ std::make_unique<ReadPixelsContext>(std::move(request), geometry.result_selection, color_space, weak_ptr_); + // Skia readback could be synchronous. Incremement counter in case + // ReadbackCompleted is called immediately. + num_readbacks_pending_++; surface->asyncRescaleAndReadPixelsYUV420( kRec709_SkYUVColorSpace, SkColorSpace::MakeSRGB(), src_rect, {geometry.result_selection.width(), geometry.result_selection.height()}, @@ -824,16 +789,97 @@ std::make_unique<ReadPixelsContext>(std::move(request), geometry.result_selection, color_space, weak_ptr_); + // Skia readback could be synchronous. Incremement counter in case + // ReadbackCompleted is called immediately. + num_readbacks_pending_++; surface->asyncRescaleAndReadPixels( dst_info, src_rect, SkSurface::RescaleGamma::kSrc, filter_quality, &OnRGBAReadbackDone, context.release()); + } else if (request->result_format() == + CopyOutputRequest::ResultFormat::RGBA_TEXTURE) { + gpu::Mailbox mailbox = gpu::Mailbox::GenerateForSharedImage(); + constexpr auto kUsage = gpu::SHARED_IMAGE_USAGE_GLES2 | + gpu::SHARED_IMAGE_USAGE_GLES2_FRAMEBUFFER_HINT | + gpu::SHARED_IMAGE_USAGE_RASTER | + gpu::SHARED_IMAGE_USAGE_DISPLAY; + bool result = shared_image_factory_->CreateSharedImage( + mailbox, ResourceFormat::RGBA_8888, + gfx::Size(geometry.result_bounds.width(), + geometry.result_bounds.height()), + color_space, kBottomLeft_GrSurfaceOrigin, kUnpremul_SkAlphaType, + gpu::kNullSurfaceHandle, kUsage); + if (!result) { + DLOG(ERROR) << "Failed to create shared image."; + return false; + } + + auto representation = dependency_->GetSharedImageManager()->ProduceSkia( + mailbox, context_state_->memory_type_tracker(), context_state_); + shared_image_factory_->DestroySharedImage(mailbox); + + SkSurfaceProps surface_props{0, kUnknown_SkPixelGeometry}; + std::vector<GrBackendSemaphore> begin_semaphores; + std::vector<GrBackendSemaphore> end_semaphores; + + representation->SetCleared(); + auto scoped_write = representation->BeginScopedWriteAccess( + 0 /* final_msaa_count */, surface_props, &begin_semaphores, + &end_semaphores, + gpu::SharedImageRepresentation::AllowUnclearedAccess::kYes); + SkSurface* dest_surface = scoped_write->surface(); + dest_surface->wait(begin_semaphores.size(), begin_semaphores.data()); + SkCanvas* dest_canvas = dest_surface->getCanvas(); + if (request->is_scaled()) { + dest_canvas->scale(request->scale_from().x() / request->scale_to().x(), + request->scale_from().y() / request->scale_to().y()); + } + + SkPaint paint; + paint.setFilterQuality(filter_quality); + sk_sp<SkImage> image = surface->makeImageSnapshot(src_rect); + dest_canvas->clipRect( + SkRect::MakeXYWH(0, 0, src_rect.width(), src_rect.height())); + surface->draw(dest_canvas, -src_rect.x(), -src_rect.y(), &paint); + + GrFlushInfo flush_info; + flush_info.fNumSemaphores = end_semaphores.size(); + flush_info.fSignalSemaphores = end_semaphores.data(); + gpu::AddVulkanCleanupTaskForSkiaFlush(vulkan_context_provider_, + &flush_info); + auto flush_result = dest_surface->flush( + SkSurface::BackendSurfaceAccess::kNoAccess, flush_info); + if (flush_result != GrSemaphoresSubmitted::kYes && + !(begin_semaphores.empty() && end_semaphores.empty())) { + // TODO(penghuang): handle vulkan device lost. + DLOG(ERROR) << "dest_surface->flush() failed."; + return false; + } + auto release_callback = base::BindOnce( + &SkiaOutputSurfaceImplOnGpu::DestroySharedImageOnImplThread, + weak_ptr_factory_.GetWeakPtr(), std::move(representation), + context_state_); + auto main_callback = SingleReleaseCallback::Create(base::BindOnce( + &PostTaskFromMainToImplThread, base::ThreadTaskRunnerHandle::Get(), + std::move(release_callback))); + request->SendResult(std::make_unique<CopyOutputTextureResult>( + geometry.result_bounds, mailbox, gpu::SyncToken(), color_space, + std::move(main_callback))); } else { - NOTIMPLEMENTED(); // ResultFormat::RGBA_TEXTURE + NOTREACHED(); } ScheduleCheckReadbackCompletion(); return true; } +void SkiaOutputSurfaceImplOnGpu::DestroySharedImageOnImplThread( + std::unique_ptr<gpu::SharedImageRepresentationSkia> representation, + scoped_refptr<gpu::SharedContextState> context_state, + const gpu::SyncToken& sync_token, + bool is_lost) { + context_state_->MakeCurrent(nullptr); + representation.reset(); +} + void SkiaOutputSurfaceImplOnGpu::BeginAccessImages( const std::vector<ImageContextImpl*>& image_contexts, std::vector<GrBackendSemaphore>* begin_semaphores, @@ -932,7 +978,7 @@ DCHECK(dependency_->IsOffscreen()); output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, capabilities.output_surface_origin, - renderer_settings_.requires_alpha_channel, memory_tracker_.get(), + renderer_settings_.requires_alpha_channel, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } @@ -969,6 +1015,23 @@ return false; } + // Even with Vulkan/Dawn compositing, the SharedImageFactory constructor + // always initializes a GL-backed SharedImage factory to fall back on. + // Creating the SharedImageBackingFactoryGLTexture invokes GL API calls, so + // we need to ensure there is a current GL context. + if (!context_state_->MakeCurrent(nullptr, true /* need_gl */)) { + LOG(ERROR) << "Failed to make current during initialization."; + return false; + } + context_state_->set_need_context_state_reset(true); + shared_image_factory_ = std::make_unique<gpu::SharedImageFactory>( + dependency_->GetGpuPreferences(), + dependency_->GetGpuDriverBugWorkarounds(), + dependency_->GetGpuFeatureInfo(), + dependency_->GetSharedContextState().get(), + dependency_->GetMailboxManager(), dependency_->GetSharedImageManager(), + dependency_->GetGpuImageFactory(), memory_tracker_, + true /* enable_wrapped_sk_image */), max_resource_cache_bytes_ = context_state_->gr_context()->getResourceCacheLimit(); if (context_state_) @@ -991,7 +1054,7 @@ output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kTopLeft, - renderer_settings_.requires_alpha_channel, memory_tracker_.get(), + renderer_settings_.requires_alpha_channel, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { gl_surface_ = @@ -1004,20 +1067,19 @@ if (gl_surface_->IsSurfaceless()) { output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( std::make_unique<OutputPresenterGL>(gl_surface_, dependency_, - memory_tracker_.get()), - dependency_, memory_tracker_.get(), - GetDidSwapBuffersCompleteCallback()); + memory_tracker_), + dependency_, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { if (dependency_->NeedsSupportForExternalStencil()) { output_device_ = std::make_unique<SkiaOutputDeviceWebView>( - context_state_.get(), gl_surface_, memory_tracker_.get(), + context_state_.get(), gl_surface_, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { output_device_ = std::make_unique<SkiaOutputDeviceGL>( dependency_->GetMailboxManager(), shared_image_representation_factory_.get(), context_state_.get(), - gl_surface_, feature_info_, memory_tracker_.get(), + gl_surface_, feature_info_, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } } @@ -1037,7 +1099,7 @@ if (dependency_->IsOffscreen()) { output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kBottomLeft, - renderer_settings_.requires_alpha_channel, memory_tracker_.get(), + renderer_settings_.requires_alpha_channel, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { #if defined(USE_X11) @@ -1045,22 +1107,22 @@ if (!gpu_preferences_.disable_vulkan_surface) { output_device_ = SkiaOutputDeviceVulkan::Create( vulkan_context_provider_, dependency_->GetSurfaceHandle(), - memory_tracker_.get(), GetDidSwapBuffersCompleteCallback()); + memory_tracker_, GetDidSwapBuffersCompleteCallback()); } if (!output_device_) { output_device_ = std::make_unique<SkiaOutputDeviceX11>( - context_state_, dependency_->GetSurfaceHandle(), - memory_tracker_.get(), GetDidSwapBuffersCompleteCallback()); + context_state_, dependency_->GetSurfaceHandle(), memory_tracker_, + GetDidSwapBuffersCompleteCallback()); } } #endif if (!output_device_) { #if defined(OS_FUCHSIA) auto output_presenter = OutputPresenterFuchsia::Create( - window_surface_.get(), dependency_, memory_tracker_.get()); + window_surface_.get(), dependency_, memory_tracker_); #else auto output_presenter = - OutputPresenterGL::Create(dependency_, memory_tracker_.get()); + OutputPresenterGL::Create(dependency_, memory_tracker_); if (output_presenter) { // TODO(https://crbug.com/1012401): don't depend on GL. gl_surface_ = output_presenter->gl_surface(); @@ -1068,12 +1130,12 @@ #endif if (output_presenter) { output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( - std::move(output_presenter), dependency_, memory_tracker_.get(), + std::move(output_presenter), dependency_, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { auto output_device = SkiaOutputDeviceVulkan::Create( vulkan_context_provider_, dependency_->GetSurfaceHandle(), - memory_tracker_.get(), GetDidSwapBuffersCompleteCallback()); + memory_tracker_, GetDidSwapBuffersCompleteCallback()); #if defined(OS_WIN) gpu::SurfaceHandle child_surface = output_device ? output_device->GetChildSurfaceHandle() @@ -1096,7 +1158,7 @@ if (dependency_->IsOffscreen()) { output_device_ = std::make_unique<SkiaOutputDeviceOffscreen>( context_state_, gfx::SurfaceOrigin::kBottomLeft, - renderer_settings_.requires_alpha_channel, memory_tracker_.get(), + renderer_settings_.requires_alpha_channel, memory_tracker_, GetDidSwapBuffersCompleteCallback()); } else { #if defined(USE_X11) @@ -1104,8 +1166,8 @@ // SkiaOutputDeviceDawn. if (!features::IsUsingOzonePlatform()) { output_device_ = std::make_unique<SkiaOutputDeviceX11>( - context_state_, dependency_->GetSurfaceHandle(), - memory_tracker_.get(), GetDidSwapBuffersCompleteCallback()); + context_state_, dependency_->GetSurfaceHandle(), memory_tracker_, + GetDidSwapBuffersCompleteCallback()); } else { return false; } @@ -1113,7 +1175,7 @@ std::unique_ptr<SkiaOutputDeviceDawn> output_device = std::make_unique<SkiaOutputDeviceDawn>( dawn_context_provider_, dependency_->GetSurfaceHandle(), - gfx::SurfaceOrigin::kTopLeft, memory_tracker_.get(), + gfx::SurfaceOrigin::kTopLeft, memory_tracker_, GetDidSwapBuffersCompleteCallback()); const gpu::SurfaceHandle child_surface_handle = output_device->GetChildSurfaceHandle();
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h index ee16509..69df345 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h
@@ -26,6 +26,7 @@ #include "gpu/command_buffer/common/mailbox.h" #include "gpu/command_buffer/common/sync_token.h" #include "gpu/command_buffer/service/shared_context_state.h" +#include "gpu/command_buffer/service/shared_image_representation.h" #include "gpu/command_buffer/service/sync_point_manager.h" #include "gpu/ipc/service/context_url.h" #include "gpu/ipc/service/display_context.h" @@ -45,6 +46,7 @@ namespace gpu { class SharedImageRepresentationFactory; +class SharedImageFactory; class SyncPointClientState; } @@ -204,7 +206,7 @@ num_readbacks_pending_--; } - gpu::MemoryTracker* GetMemoryTracker() { return memory_tracker_.get(); } + gpu::MemoryTracker* GetMemoryTracker() { return memory_tracker_; } private: class OffscreenSurface; @@ -226,6 +228,12 @@ bool MakeCurrent(bool need_fbo0); void MarkContextLost(ContextLostReason reason); + void DestroySharedImageOnImplThread( + std::unique_ptr<gpu::SharedImageRepresentationSkia> representation, + scoped_refptr<gpu::SharedContextState> context_state, + const gpu::SyncToken& sync_token, + bool is_lost); + void PullTextureUpdates(std::vector<gpu::SyncToken> sync_token); void ReleaseFenceSyncAndPushTextureUpdates(uint64_t sync_fence_release); @@ -234,7 +242,7 @@ base::OnceCallback<bool()> deferred_framebuffer_draw_closure, OutputSurfaceFrame* frame = nullptr); - GrContext* gr_context() { return context_state_->gr_context(); } + GrDirectContext* gr_context() { return context_state_->gr_context(); } bool is_using_vulkan() const { return !!vulkan_context_provider_ && @@ -277,9 +285,10 @@ SkiaOutputSurfaceDependency* const dependency_; scoped_refptr<gpu::gles2::FeatureInfo> feature_info_; scoped_refptr<gpu::SyncPointClientState> sync_point_client_state_; - std::unique_ptr<gpu::MemoryTracker> memory_tracker_; + gpu::MemoryTracker* memory_tracker_; std::unique_ptr<gpu::SharedImageRepresentationFactory> shared_image_representation_factory_; + std::unique_ptr<gpu::SharedImageFactory> shared_image_factory_; VulkanContextProvider* const vulkan_context_provider_; DawnContextProvider* const dawn_context_provider_; const RendererSettings renderer_settings_;
diff --git a/components/viz/service/gl/gpu_service_impl.cc b/components/viz/service/gl/gpu_service_impl.cc index b60f2ea9..2308d21 100644 --- a/components/viz/service/gl/gpu_service_impl.cc +++ b/components/viz/service/gl/gpu_service_impl.cc
@@ -7,6 +7,7 @@ #include <memory> #include <string> #include <utility> +#include <vector> #include "base/bind.h" #include "base/command_line.h" @@ -52,7 +53,7 @@ #include "media/mojo/services/mojo_video_encode_accelerator_provider.h" #include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "skia/buildflags.h" -#include "third_party/skia/include/gpu/GrContext.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" #include "third_party/skia/include/gpu/gl/GrGLAssembleInterface.h" #include "third_party/skia/include/gpu/gl/GrGLInterface.h" #include "ui/gl/gl_context.h"
diff --git a/components/viz/test/test_context_support.cc b/components/viz/test/test_context_support.cc index f2cd6b7..cb24565 100644 --- a/components/viz/test/test_context_support.cc +++ b/components/viz/test/test_context_support.cc
@@ -7,6 +7,9 @@ #include <stddef.h> #include <stdint.h> +#include <memory> +#include <utility> + #include "base/bind.h" #include "base/location.h" #include "base/single_thread_task_runner.h" @@ -146,7 +149,7 @@ return true; } -void TestContextSupport::SetGrContext(GrContext* gr) {} +void TestContextSupport::SetGrContext(GrDirectContext* gr) {} void TestContextSupport::WillCallGLFromSkia() {}
diff --git a/components/viz/test/test_context_support.h b/components/viz/test/test_context_support.h index 8c1a124..1cdc9fb3 100644 --- a/components/viz/test/test_context_support.h +++ b/components/viz/test/test_context_support.h
@@ -7,7 +7,9 @@ #include <stdint.h> +#include <memory> #include <set> +#include <utility> #include <vector> #include "base/macros.h" @@ -82,7 +84,7 @@ bool CanDecodeWithHardwareAcceleration( const cc::ImageHeaderMetadata* image_metadata) const override; bool HasGrContextSupport() const override; - void SetGrContext(GrContext* gr) override; + void SetGrContext(GrDirectContext* gr) override; void WillCallGLFromSkia() override; void DidCallGLFromSkia() override; void SetDisplayTransform(gfx::OverlayTransform transform) override {}
diff --git a/content/browser/accessibility/dump_accessibility_events_browsertest.cc b/content/browser/accessibility/dump_accessibility_events_browsertest.cc index 35b8f41..d62c622 100644 --- a/content/browser/accessibility/dump_accessibility_events_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_events_browsertest.cc
@@ -545,22 +545,6 @@ } IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, - AccessibilityEventsAriaHiddenDescendants) { - RunEventTest(FILE_PATH_LITERAL("aria-hidden-descendants.html")); -} - -IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, - AccessibilityEventsAriaHiddenDescendantsAlreadyIgnored) { - RunEventTest( - FILE_PATH_LITERAL("aria-hidden-descendants-already-ignored.html")); -} - -IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, - AccessibilityEventsCSSDisplayDescendants) { - RunEventTest(FILE_PATH_LITERAL("css-display-descendants.html")); -} - -IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, AccessibilityEventsCSSFlexTextUpdate) { RunEventTest(FILE_PATH_LITERAL("css-flex-text-update.html")); } @@ -571,11 +555,6 @@ } IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, - AccessibilityEventsCSSVisibilityDescendants) { - RunEventTest(FILE_PATH_LITERAL("css-visibility-descendants.html")); -} - -IN_PROC_BROWSER_TEST_P(DumpAccessibilityEventsTest, AccessibilityEventsCSSCollapse) { RunEventTest(FILE_PATH_LITERAL("css-visibility-collapse.html")); }
diff --git a/content/browser/appcache/appcache_internals_ui.cc b/content/browser/appcache/appcache_internals_ui.cc index ab51766f..28c83c5b 100644 --- a/content/browser/appcache/appcache_internals_ui.cc +++ b/content/browser/appcache/appcache_internals_ui.cc
@@ -365,6 +365,7 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->DisableTrustedTypesCSP(); source->UseStringsJs(); source->AddResourcePath("appcache_internals.js", IDR_APPCACHE_INTERNALS_JS);
diff --git a/content/browser/back_forward_cache_browsertest.cc b/content/browser/back_forward_cache_browsertest.cc index 8d21810..8e62a3c 100644 --- a/content/browser/back_forward_cache_browsertest.cc +++ b/content/browser/back_forward_cache_browsertest.cc
@@ -6449,4 +6449,60 @@ FROM_HERE); } +// RenderFrameHostImpl::coep_reporter() must be preserved when doing a back +// navigation using the BackForwardCache. +// Regression test for https://crbug.com/1102285. +IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, CoepReporter) { + ASSERT_TRUE(CreateHttpsServer()->Start()); + GURL url_a(https_server()->GetURL("a.com", + "/set-header?" + "Cross-Origin-Embedder-Policy-Report-Only: " + "same-origin; report-to%3d\"a\"")); + GURL url_b(https_server()->GetURL("b.com", "/title1.html")); + + // Navigate to a document that set RenderFrameHostImpl::coep_reporter(). + EXPECT_TRUE(NavigateToURL(shell(), url_a)); + RenderFrameHostImpl* rfh_a = current_frame_host(); + EXPECT_TRUE(rfh_a->coep_reporter()); + + // Navigate away and back using the BackForwardCache. The + // RenderFrameHostImpl::coep_reporter() must still be there. + RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a); + EXPECT_TRUE(NavigateToURL(shell(), url_b)); + web_contents()->GetController().GoBack(); + EXPECT_TRUE(WaitForLoadStop(web_contents())); + EXPECT_FALSE(delete_observer_rfh_a.deleted()); + EXPECT_EQ(rfh_a, current_frame_host()); + + EXPECT_TRUE(rfh_a->coep_reporter()); +} + +// RenderFrameHostImpl::coop_reporter() must be preserved when doing a back +// navigation using the BackForwardCache. +// Regression test for https://crbug.com/1102285. +IN_PROC_BROWSER_TEST_F(BackForwardCacheBrowserTest, CoopReporter) { + ASSERT_TRUE(CreateHttpsServer()->Start()); + GURL url_a(https_server()->GetURL("a.com", + "/set-header?" + "Cross-Origin-Opener-Policy-Report-Only: " + "same-origin; report-to%3d\"a\"")); + GURL url_b(https_server()->GetURL("b.com", "/title1.html")); + + // Navigate to a document that set RenderFrameHostImpl::coop_reporter(). + EXPECT_TRUE(NavigateToURL(shell(), url_a)); + RenderFrameHostImpl* rfh_a = current_frame_host(); + EXPECT_TRUE(rfh_a->coop_reporter()); + + // Navigate away and back using the BackForwardCache. The + // RenderFrameHostImpl::coop_reporter() must still be there. + RenderFrameDeletedObserver delete_observer_rfh_a(rfh_a); + EXPECT_TRUE(NavigateToURL(shell(), url_b)); + web_contents()->GetController().GoBack(); + EXPECT_TRUE(WaitForLoadStop(web_contents())); + EXPECT_FALSE(delete_observer_rfh_a.deleted()); + EXPECT_EQ(rfh_a, current_frame_host()); + + EXPECT_TRUE(rfh_a->coop_reporter()); +} + } // namespace content
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index 4d8877a4..c74c8b6 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc
@@ -493,15 +493,14 @@ if (host->GetBrowserContext() == this) { rph_crash_key_value += "{"; - rph_crash_key_value += " process_lock='" + - policy->GetProcessLock(host->GetID()).ToString() + - "'"; + rph_crash_key_value += + " pl='" + policy->GetProcessLock(host->GetID()).ToString() + "'"; if (host->HostHasNotBeenUsed()) - rph_crash_key_value += " has_not_been_used "; + rph_crash_key_value += " hnbu"; if (RenderProcessHostImpl::IsSpareProcessForCrashReporting(host)) - rph_crash_key_value += " is_spare"; + rph_crash_key_value += " spr"; rph_crash_key_value += " }"; } @@ -510,7 +509,7 @@ NOTREACHED() << "rph_with_bc_reference : " << rph_crash_key_value; static auto* crash_key = base::debug::AllocateCrashKeyString( - "rph_with_bc_reference", base::debug::CrashKeySize::Size32); + "rph_with_bc_reference", base::debug::CrashKeySize::Size256); base::debug::ScopedCrashKeyString auto_clear(crash_key, rph_crash_key_value); base::debug::DumpWithoutCrashing();
diff --git a/content/browser/conversions/conversion_internals_ui.cc b/content/browser/conversions/conversion_internals_ui.cc index 20306d5f..17475d39 100644 --- a/content/browser/conversions/conversion_internals_ui.cc +++ b/content/browser/conversions/conversion_internals_ui.cc
@@ -13,6 +13,7 @@ #include "content/public/browser/web_ui_data_source.h" #include "content/public/common/bindings_policy.h" #include "content/public/common/url_constants.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" namespace content { @@ -31,6 +32,9 @@ source->AddResourcePath("conversion_internals.css", IDR_CONVERSION_INTERNALS_CSS); source->SetDefaultResource(IDR_CONVERSION_INTERNALS_HTML); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types cr-ui-tree-js-static;"); WebUIDataSource::Add(web_ui->GetWebContents()->GetBrowserContext(), source); }
diff --git a/content/browser/cross_origin_opener_policy_browsertest.cc b/content/browser/cross_origin_opener_policy_browsertest.cc index f9e45a3..aaede9e 100644 --- a/content/browser/cross_origin_opener_policy_browsertest.cc +++ b/content/browser/cross_origin_opener_policy_browsertest.cc
@@ -1759,7 +1759,8 @@ // Navigates in between two pages from a different browsing context group. Then // use the history API to navigate back and forth. Check their virtual browsing // context group isn't restored. -// The goal is to spot differences when the BackForwardCache is enabled. +// The goal is to spot differences when the BackForwardCache is enabled. See +// https://crbug.com/1109648. IN_PROC_BROWSER_TEST_P(VirtualBrowsingContextGroupTest, HistoryNavigation) { GURL url_a = https_server()->GetURL( "a.com", @@ -1778,24 +1779,32 @@ EXPECT_TRUE(NavigateToURL(shell(), url_b)); int group_2 = VirtualBrowsingContextGroup(web_contents()); - EXPECT_TRUE(ExecJs(web_contents(), "history.back()")); + web_contents()->GetController().GoBack(); EXPECT_TRUE(WaitForLoadStop(web_contents())); int group_3 = VirtualBrowsingContextGroup(web_contents()); - EXPECT_TRUE(ExecJs(web_contents(), "history.forward()")); + web_contents()->GetController().GoForward(); EXPECT_TRUE(WaitForLoadStop(web_contents())); int group_4 = VirtualBrowsingContextGroup(web_contents()); + // No matter whether the BackForwardCache is enabled or not, the navigation in + // between the two URLs must always cross a virtual browsing context group. EXPECT_NE(group_1, group_2); - EXPECT_NE(group_1, group_3); - EXPECT_NE(group_1, group_4); EXPECT_NE(group_2, group_3); - EXPECT_NE(group_2, group_4); + EXPECT_NE(group_3, group_4); + EXPECT_NE(group_1, group_4); + + // TODO(https://crbug.com/1112256) During history navigation, the virtual + // browsing context group must be restored whenever the SiteInstance is + // restored. Currently, the SiteInstance is restored, but the virtual browsing + // context group is new. + if (IsBackForwardCacheEnabled()) { - // TODO(https://crbug.com.com/1109648): This must not happen. Fix this. - EXPECT_EQ(group_3, group_4); + EXPECT_EQ(group_1, group_3); + EXPECT_EQ(group_2, group_4); } else { - EXPECT_NE(group_3, group_4); + EXPECT_NE(group_1, group_3); + EXPECT_NE(group_2, group_4); } }
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 116b5c8..99963e26 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -8099,20 +8099,18 @@ !is_same_document_navigation && !navigation_request->IsServedFromBackForwardCache(); - if (created_new_document) { - // IsWaitingToCommit can be false inside DidCommitNavigationInternal only in - // specific circumstances listed above, and specifically for the fake - // initial navigations triggered by the blank window.open() and creating a - // blank iframe. In that case we do not want to reset the per-document - // states as we are not really creating a new Document and we want to - // preserve the states set by WebContentsCreated delegate notification - // (which among other things create tab helpers) or RenderFrameCreated. - if (!navigation_request->IsWaitingToCommit()) - created_new_document = false; - } - // TODO(crbug.com/936696): Remove this after we have RenderDocument. - if (created_new_document) { + // IsWaitingToCommit can be false inside DidCommitNavigationInternal only in + // specific circumstances listed above, and specifically for the fake + // initial navigations triggered by the blank window.open() and creating a + // blank iframe. In that case we do not want to reset the per-document + // states as we are not really creating a new Document and we want to + // preserve the states set by WebContentsCreated delegate notification + // (which among other things create tab helpers) or RenderFrameCreated. + bool navigated_to_new_document = + created_new_document && navigation_request->IsWaitingToCommit(); + + if (navigated_to_new_document) { TRACE_EVENT1("content", "DidCommitProvisionalLoad_StateResetForNewDocument", "render_frame_host", this); if (navigation_request->IsInMainFrame()) { @@ -8140,9 +8138,10 @@ // Keep track of the sandbox policy of the document that has just committed. // It will be compared with the value computed from the renderer. The latter // is expected to be received in DidSetFramePolicyHeaders(..). - active_sandbox_flags_control_ = navigation_request->SandboxFlagsToCommit(); + base::Optional<network::mojom::WebSandboxFlags> active_sandbox_flags_control = + navigation_request->SandboxFlagsToCommit(); - virtual_browsing_context_group_ = + int virtual_browsing_context_group = navigation_request->coop_status().virtual_browsing_context_group; // If we still have a PeakGpuMemoryTracker, then the loading it was observing @@ -8158,19 +8157,6 @@ navigation_request->TakeClientSecurityState(); std::unique_ptr<CrossOriginEmbedderPolicyReporter> coep_reporter = navigation_request->TakeCoepReporter(); - if (coep_reporter) { - mojo::PendingRemote<blink::mojom::ReportingObserver> remote; - mojo::PendingReceiver<blink::mojom::ReportingObserver> receiver = - remote.InitWithNewPipeAndPassReceiver(); - coep_reporter->BindObserver(std::move(remote)); - // As some tests overrides the associated frame after commit, do not - // call GetAssociatedLocalFrame now. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&RenderFrameHostImpl::BindReportingObserver, - weak_ptr_factory_.GetWeakPtr(), std::move(receiver))); - } - std::unique_ptr<CrossOriginOpenerPolicyReporter> coop_reporter = navigation_request->TakeCoopReporter(); @@ -8196,6 +8182,11 @@ } } + // TODO(arthursonzogni, altimin): By taking ownership and deleting the + // NavigationRequest, this line triggers the DidFinishNavigation event. There + // are several document's associated state assigned below when a new document + // is created. We might prefer to fully update the RenderFrameHost before + // dispatching the event. frame_tree_node()->navigator().DidNavigate(this, *params, std::move(navigation_request), is_same_document_navigation); @@ -8209,12 +8200,30 @@ last_commit_params_ = std::move(params); } - if (!is_same_document_navigation) { + // TODO(arthursonzogni): Investigate what must be done when + // navigation_request->IsWaitingToCommit() is false here. + if (created_new_document) { renderer_reported_scheduler_tracked_features_ = 0; browser_reported_scheduler_tracked_features_ = 0; last_committed_client_security_state_ = std::move(client_security_state); + active_sandbox_flags_control_ = std::move(active_sandbox_flags_control); + virtual_browsing_context_group_ = std::move(virtual_browsing_context_group); coep_reporter_ = std::move(coep_reporter); coop_reporter_ = std::move(coop_reporter); + + if (coep_reporter_) { + mojo::PendingRemote<blink::mojom::ReportingObserver> remote; + mojo::PendingReceiver<blink::mojom::ReportingObserver> receiver = + remote.InitWithNewPipeAndPassReceiver(); + coep_reporter_->BindObserver(std::move(remote)); + // As some tests override the associated frame after commit, do not + // call GetAssociatedLocalFrame now. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&RenderFrameHostImpl::BindReportingObserver, + weak_ptr_factory_.GetWeakPtr(), std::move(receiver))); + } + } RecordCrossOriginIsolationMetrics(this);
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc index a8aab86..5033457 100644 --- a/content/browser/frame_host/render_frame_host_manager.cc +++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -1892,11 +1892,19 @@ SiteInstance* source_instance, bool was_server_redirect, bool is_failure) { + if (!source_instance) + return false; + // We use the source SiteInstance in case of data URLs, about:srcdoc pages and // about:blank pages because the content is then controlled and/or scriptable - // by the source SiteInstance. + // by the initiator and therefore needs to stay in the |source_instance|. + if (!IsDataOrAbout(dest_url)) + return false; + + // One exception (where data URLs, about:srcdoc or about:blank pages are *not* + // controlled by the initiator) is when these URLs are reached via a server + // redirect. // - // One exception to this is when these URLs are reached via a server redirect. // Normally, redirects to data: or about: URLs are disallowed as // net::ERR_UNSAFE_REDIRECT, but extensions can still redirect arbitrary // requests to those URLs using webRequest or declarativeWebRequest API (for @@ -1905,10 +1913,18 @@ // redirects, the content is controlled by the extension (rather than by the // |source_instance|), so we don't use the |source_instance| for data: URLs if // there was a server redirect. - return source_instance && IsDataOrAbout(dest_url) && - (!was_server_redirect || !dest_url.SchemeIs(url::kDataScheme)) && - IsSiteInstanceCompatibleWithErrorIsolation( - source_instance, frame_tree_node_->IsMainFrame(), is_failure); + if (was_server_redirect && dest_url.SchemeIs(url::kDataScheme)) + return false; + + // Make sure that error isolation is taken into account. See also + // ChromeNavigationBrowserTest.RedirectErrorPageReloadToAboutBlank. + if (!IsSiteInstanceCompatibleWithErrorIsolation( + source_instance, frame_tree_node_->IsMainFrame(), is_failure)) { + return false; + } + + // Okay to use |source_instance|. + return true; } bool RenderFrameHostManager::IsCurrentlySameSite(RenderFrameHostImpl* candidate,
diff --git a/content/browser/gpu/gpu_internals_ui.cc b/content/browser/gpu/gpu_internals_ui.cc index 096a85d..618abbc 100644 --- a/content/browser/gpu/gpu_internals_ui.cc +++ b/content/browser/gpu/gpu_internals_ui.cc
@@ -76,6 +76,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->UseStringsJs(); source->AddResourcePath("gpu_internals.js", IDR_GPU_INTERNALS_JS);
diff --git a/content/browser/indexed_db/indexed_db_internals_ui.cc b/content/browser/indexed_db/indexed_db_internals_ui.cc index b67daae10..e407601 100644 --- a/content/browser/indexed_db/indexed_db_internals_ui.cc +++ b/content/browser/indexed_db/indexed_db_internals_ui.cc
@@ -54,6 +54,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->UseStringsJs(); source->AddResourcePath("indexeddb_internals.js", IDR_INDEXED_DB_INTERNALS_JS);
diff --git a/content/browser/media/media_web_contents_observer.cc b/content/browser/media/media_web_contents_observer.cc index ab6645c..6f48b57 100644 --- a/content/browser/media/media_web_contents_observer.cc +++ b/content/browser/media/media_web_contents_observer.cc
@@ -7,9 +7,13 @@ #include <memory> #include <tuple> +#include "base/bind.h" +#include "base/threading/sequenced_task_runner_handle.h" #include "build/build_config.h" #include "content/browser/media/audible_metrics.h" #include "content/browser/media/audio_stream_monitor.h" +#include "content/browser/media/media_devices_util.h" +#include "content/browser/renderer_host/media/media_stream_manager.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/media/media_player_delegate_messages.h" #include "content/public/browser/render_frame_host.h" @@ -18,6 +22,7 @@ #include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/device/public/mojom/wake_lock_context.mojom.h" #include "services/media_session/public/cpp/media_position.h" +#include "third_party/blink/public/common/mediastream/media_devices.h" #include "third_party/blink/public/platform/web_fullscreen_video_status.h" #include "ui/gfx/geometry/size.h" @@ -381,10 +386,49 @@ RenderFrameHost* render_frame_host, int delegate_id, std::string hashed_device_id) { - // TODO(1111432): Translate |hashed_device_id| into a raw device id before - // passing to controllers manager. - session_controllers_manager_.OnAudioOutputSinkChanged( - MediaPlayerId(render_frame_host, delegate_id), hashed_device_id); + auto salt_and_origin = content::GetMediaDeviceSaltAndOrigin( + render_frame_host->GetProcess()->GetID(), + render_frame_host->GetRoutingID()); + + auto callback_on_io_thread = base::BindOnce( + [](const std::string& salt, const url::Origin& origin, + const std::string& hashed_device_id, + base::OnceCallback<void(const base::Optional<std::string>&)> + callback) { + MediaStreamManager::GetMediaDeviceIDForHMAC( + blink::MediaDeviceType::MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, salt, + std::move(origin), hashed_device_id, + base::SequencedTaskRunnerHandle::Get(), std::move(callback)); + }, + salt_and_origin.device_id_salt, std::move(salt_and_origin.origin), + hashed_device_id, + base::BindOnce(&MediaWebContentsObserver::OnAudioOutputDeviceIdTranslated, + weak_ptr_factory_.GetWeakPtr(), render_frame_host, + delegate_id)); + + content::GetIOThreadTaskRunner({})->PostTask( + FROM_HERE, std::move(callback_on_io_thread)); +} + +void MediaWebContentsObserver::OnAudioOutputDeviceIdTranslated( + RenderFrameHost* render_frame_host, + int delegate_id, + const base::Optional<std::string>& raw_device_id) { + if (!raw_device_id.has_value()) + return; + + auto callback_on_ui_thread = base::BindOnce( + [](MediaSessionControllersManager* controllers_manager, + RenderFrameHost* render_frame_host, int delegate_id, + const std::string& raw_device_id) { + controllers_manager->OnAudioOutputSinkChanged( + MediaPlayerId(render_frame_host, delegate_id), raw_device_id); + }, + session_controllers_manager(), render_frame_host, delegate_id, + raw_device_id.value()); + + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, std::move(callback_on_ui_thread)); } void MediaWebContentsObserver::OnBufferUnderflow(
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h index 6c03674c..99c3c4636 100644 --- a/content/browser/media/media_web_contents_observer.h +++ b/content/browser/media/media_web_contents_observer.h
@@ -12,6 +12,7 @@ #include "base/containers/flat_map.h" #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "base/optional.h" #include "build/build_config.h" #include "content/browser/media/media_power_experiment_manager.h" @@ -151,6 +152,10 @@ void OnAudioOutputSinkChanged(RenderFrameHost* render_frame_host, int delegate_id, std::string hashed_device_id); + void OnAudioOutputDeviceIdTranslated( + RenderFrameHost* render_frame_host, + int delegate_id, + const base::Optional<std::string>& raw_device_id); void OnBufferUnderflow(RenderFrameHost* render_frame_host, int delegate_id); device::mojom::WakeLock* GetAudioWakeLock(); @@ -190,6 +195,7 @@ std::unique_ptr<base::WeakPtrFactory<MediaWebContentsObserver>>> per_frame_factory_; + base::WeakPtrFactory<MediaWebContentsObserver> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(MediaWebContentsObserver); };
diff --git a/content/browser/media/session/media_session_controller.cc b/content/browser/media/session/media_session_controller.cc index 31a6f84..8c87599 100644 --- a/content/browser/media/session/media_session_controller.cc +++ b/content/browser/media/session/media_session_controller.cc
@@ -161,7 +161,10 @@ } void MediaSessionController::OnAudioOutputSinkChanged( - const std::string& raw_device_id) {} + const std::string& raw_device_id) { + audio_output_sink_id_ = raw_device_id; + media_session_->OnAudioOutputSinkIdChanged(); +} bool MediaSessionController::IsMediaSessionNeeded() const { if (!is_playback_in_progress_) @@ -211,4 +214,9 @@ return has_video_ && has_audio_; } +std::string MediaSessionController::GetAudioOutputSinkId(int player_id) const { + DCHECK_EQ(player_id_, player_id); + return audio_output_sink_id_; +} + } // namespace content
diff --git a/content/browser/media/session/media_session_controller.h b/content/browser/media/session/media_session_controller.h index d8a4b9a..ca7752d 100644 --- a/content/browser/media/session/media_session_controller.h +++ b/content/browser/media/session/media_session_controller.h
@@ -13,6 +13,7 @@ #include "content/common/content_export.h" #include "content/public/browser/media_player_id.h" #include "content/public/browser/web_contents_observer.h" +#include "media/audio/audio_device_description.h" #include "media/base/media_content_type.h" #include "services/media_session/public/cpp/media_position.h" @@ -58,6 +59,7 @@ int player_id) const override; bool IsPictureInPictureAvailable(int player_id) const override; bool HasVideo(int player_id) const override; + std::string GetAudioOutputSinkId(int player_id) const override; // Test helpers. int get_player_id_for_testing() const { return player_id_; } @@ -103,6 +105,8 @@ bool has_audio_ = false; bool has_video_ = false; bool is_picture_in_picture_available_ = false; + std::string audio_output_sink_id_ = + media::AudioDeviceDescription::kDefaultDeviceId; media::MediaContentType media_content_type_ = media::MediaContentType::Persistent;
diff --git a/content/browser/media/session/media_session_controller_unittest.cc b/content/browser/media/session/media_session_controller_unittest.cc index bb3f4179..09ba107 100644 --- a/content/browser/media/session/media_session_controller_unittest.cc +++ b/content/browser/media/session/media_session_controller_unittest.cc
@@ -11,6 +11,7 @@ #include "content/common/media/media_player_delegate_messages.h" #include "content/test/test_render_view_host.h" #include "content/test/test_web_contents.h" +#include "media/audio/audio_device_description.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { @@ -279,6 +280,17 @@ controller_->get_player_id_for_testing())); } +TEST_F(MediaSessionControllerTest, AudioOutputSinkIdChange) { + EXPECT_EQ(controller_->GetAudioOutputSinkId( + controller_->get_player_id_for_testing()), + media::AudioDeviceDescription::kDefaultDeviceId); + + controller_->OnAudioOutputSinkChanged("1"); + EXPECT_EQ(controller_->GetAudioOutputSinkId( + controller_->get_player_id_for_testing()), + "1"); +} + TEST_F(MediaSessionControllerTest, AddPlayerWhenUnmuted) { contents()->SetAudioMuted(true);
diff --git a/content/browser/media/session/media_session_impl.cc b/content/browser/media/session/media_session_impl.cc index 493f719..39db8b7f 100644 --- a/content/browser/media/session/media_session_impl.cc +++ b/content/browser/media/session/media_session_impl.cc
@@ -958,6 +958,12 @@ : media_session::mojom::MediaPictureInPictureState:: kNotInPictureInPicture; + auto shared_audio_device_id = GetSharedAudioOutputDeviceId(); + // When the default audio device is in use, or this session's players are + // using different devices, the |audio_sink_id| attribute should remain unset. + if (shared_audio_device_id != media::AudioDeviceDescription::kDefaultDeviceId) + info->audio_sink_id = shared_audio_device_id; + return info; } @@ -1359,6 +1365,10 @@ RebuildAndNotifyActionsChanged(); } +void MediaSessionImpl::OnAudioOutputSinkIdChanged() { + RebuildAndNotifyMediaSessionInfoChanged(); +} + bool MediaSessionImpl::ShouldRouteAction( media_session::mojom::MediaSessionAction action) const { return routed_service_ && base::Contains(routed_service_->actions(), action); @@ -1479,6 +1489,23 @@ return first.observer->IsPictureInPictureAvailable(first.player_id); } +std::string MediaSessionImpl::GetSharedAudioOutputDeviceId() const { + if (normal_players_.empty()) + return media::AudioDeviceDescription::kDefaultDeviceId; + + auto& first = normal_players_.begin()->first; + const auto& first_id = first.observer->GetAudioOutputSinkId(first.player_id); + if (std::all_of(normal_players_.cbegin(), normal_players_.cend(), + [&first_id](const auto& player) { + return player.first.observer->GetAudioOutputSinkId( + player.first.player_id) == first_id; + })) { + return first_id; + } + + return media::AudioDeviceDescription::kDefaultDeviceId; +} + MediaAudioVideoState MediaSessionImpl::GetMediaAudioVideoState() { RenderFrameHost* routed_rfh = routed_service_ ? routed_service_->GetRenderFrameHost() : nullptr;
diff --git a/content/browser/media/session/media_session_impl.h b/content/browser/media/session/media_session_impl.h index 33e9acc..35c69ed 100644 --- a/content/browser/media/session/media_session_impl.h +++ b/content/browser/media/session/media_session_impl.h
@@ -272,6 +272,10 @@ void OnPictureInPictureAvailabilityChanged(); + // Called when any of the normal players have switched to a different audio + // output device. + void OnAudioOutputSinkIdChanged(); + // Returns whether the action should be routed to |routed_service_|. bool ShouldRouteAction(media_session::mojom::MediaSessionAction action) const; @@ -388,6 +392,11 @@ bool IsPictureInPictureAvailable() const; + // Returns the device ID for the audio output device being used by all of the + // normal players. If the players are not all using the same audio output + // device, the id of the default device will be returned. + std::string GetSharedAudioOutputDeviceId() const; + // Called when a MediaSessionAction is received. The action will be forwarded // to blink::MediaSession corresponding to the current routed service. void DidReceiveAction(media_session::mojom::MediaSessionAction action,
diff --git a/content/browser/media/session/media_session_impl_browsertest.cc b/content/browser/media/session/media_session_impl_browsertest.cc index d8bb5076..00d65e8 100644 --- a/content/browser/media/session/media_session_impl_browsertest.cc +++ b/content/browser/media/session/media_session_impl_browsertest.cc
@@ -2606,7 +2606,7 @@ UISetAudioSink(kExampleSinkId); EXPECT_EQ(player_observer->received_set_audio_sink_id_calls(), 1); - EXPECT_EQ(player_observer->GetAudioSinkId(0), kExampleSinkId); + EXPECT_EQ(player_observer->GetAudioOutputSinkId(0), kExampleSinkId); } class MediaSessionFaviconBrowserTest : public ContentBrowserTest {
diff --git a/content/browser/media/session/media_session_impl_service_routing_unittest.cc b/content/browser/media/session/media_session_impl_service_routing_unittest.cc index 5ab5476..8e8dbb8a 100644 --- a/content/browser/media/session/media_session_impl_service_routing_unittest.cc +++ b/content/browser/media/session/media_session_impl_service_routing_unittest.cc
@@ -72,6 +72,8 @@ bool HasVideo(int player_id) const override { return has_video_; } + std::string GetAudioOutputSinkId(int player_id) const override { return ""; } + RenderFrameHost* render_frame_host() const override { return render_frame_host_; }
diff --git a/content/browser/media/session/media_session_impl_uma_unittest.cc b/content/browser/media/session/media_session_impl_uma_unittest.cc index 099c5889..e50aa6ff 100644 --- a/content/browser/media/session/media_session_impl_uma_unittest.cc +++ b/content/browser/media/session/media_session_impl_uma_unittest.cc
@@ -55,6 +55,8 @@ bool HasVideo(int player_id) const override { return false; } + std::string GetAudioOutputSinkId(int player_id) const override { return ""; } + RenderFrameHost* render_frame_host() const override { return render_frame_host_; }
diff --git a/content/browser/media/session/media_session_impl_unittest.cc b/content/browser/media/session/media_session_impl_unittest.cc index 42f539a..15573c2 100644 --- a/content/browser/media/session/media_session_impl_unittest.cc +++ b/content/browser/media/session/media_session_impl_unittest.cc
@@ -30,9 +30,9 @@ namespace content { using media_session::mojom::AudioFocusType; +using media_session::mojom::MediaPlaybackState; using media_session::mojom::MediaSessionInfo; using media_session::mojom::MediaSessionInfoPtr; -using media_session::mojom::MediaPlaybackState; using media_session::test::MockMediaSessionMojoObserver; using media_session::test::TestAudioFocusObserver; @@ -549,7 +549,6 @@ observer->WaitForGainedEvent(); } - { MockMediaSessionMojoObserver observer(*media_session_1); observer.WaitForState(MediaSessionInfo::SessionState::kDucking); @@ -695,4 +694,30 @@ media_session::mojom::MediaPictureInPictureState::kNotInPictureInPicture); } +TEST_F(MediaSessionImplTest, SessionInfoAudioSink) { + // When the session is created it should be using the default audio device. + // When the default audio device is in use, the |audio_sink_id| attribute + // should be unset. + EXPECT_FALSE(media_session::test::GetMediaSessionInfoSync(GetMediaSession()) + ->audio_sink_id.has_value()); + int player1 = player_observer_->StartNewPlayer(); + int player2 = player_observer_->StartNewPlayer(); + GetMediaSession()->AddPlayer(player_observer_.get(), player1, + media::MediaContentType::Persistent); + GetMediaSession()->AddPlayer(player_observer_.get(), player2, + media::MediaContentType::Persistent); + player_observer_->SetAudioSinkId(player1, "1"); + player_observer_->SetAudioSinkId(player2, "1"); + + auto info = media_session::test::GetMediaSessionInfoSync(GetMediaSession()); + ASSERT_TRUE(info->audio_sink_id.has_value()); + EXPECT_EQ(info->audio_sink_id.value(), "1"); + + // If multiple audio devices are being used the audio sink id attribute should + // be unset. + player_observer_->SetAudioSinkId(player2, "2"); + info = media_session::test::GetMediaSessionInfoSync(GetMediaSession()); + EXPECT_FALSE(info->audio_sink_id.has_value()); +} + } // namespace content
diff --git a/content/browser/media/session/media_session_player_observer.h b/content/browser/media/session/media_session_player_observer.h index dbd1e5fb..e4304f8 100644 --- a/content/browser/media/session/media_session_player_observer.h +++ b/content/browser/media/session/media_session_player_observer.h
@@ -59,6 +59,10 @@ // Returns true if the |player_id| has video tracks. virtual bool HasVideo(int player_id) const = 0; + // Returns the id of the audio output device used by |player_id|. Returns the + // empty string if unavailable. + virtual std::string GetAudioOutputSinkId(int player_id) const = 0; + // Returns the RenderFrameHost this player observer belongs to. Returns // nullptr if unavailable. virtual RenderFrameHost* render_frame_host() const = 0;
diff --git a/content/browser/media/session/media_session_service_impl_browsertest.cc b/content/browser/media/session/media_session_service_impl_browsertest.cc index 2b2a30b5..2ee9b13 100644 --- a/content/browser/media/session/media_session_service_impl_browsertest.cc +++ b/content/browser/media/session/media_session_service_impl_browsertest.cc
@@ -68,6 +68,8 @@ bool HasVideo(int player_id) const override { return false; } + std::string GetAudioOutputSinkId(int player_id) const override { return ""; } + RenderFrameHost* render_frame_host() const override { return render_frame_host_; }
diff --git a/content/browser/media/session/mock_media_session_player_observer.cc b/content/browser/media/session/mock_media_session_player_observer.cc index 1ad3845d..ccf7e214 100644 --- a/content/browser/media/session/mock_media_session_player_observer.cc +++ b/content/browser/media/session/mock_media_session_player_observer.cc
@@ -115,10 +115,10 @@ return players_[player_id].volume_multiplier_; } -const std::string& MockMediaSessionPlayerObserver::GetAudioSinkId( - size_t player_id) { +void MockMediaSessionPlayerObserver::SetAudioSinkId(size_t player_id, + std::string sink_id) { EXPECT_GT(players_.size(), player_id); - return players_[player_id].audio_sink_id_; + players_[player_id].audio_sink_id_ = std::move(sink_id); } void MockMediaSessionPlayerObserver::SetPlaying(size_t player_id, @@ -170,13 +170,16 @@ return false; } -MockMediaSessionPlayerObserver::MockPlayer::MockPlayer( - bool is_playing, - double volume_multiplier, - const std::string& audio_sink_id) - : is_playing_(is_playing), - volume_multiplier_(volume_multiplier), - audio_sink_id_(audio_sink_id) {} +std::string MockMediaSessionPlayerObserver::GetAudioOutputSinkId( + int player_id) const { + EXPECT_GE(player_id, 0); + EXPECT_GT(players_.size(), static_cast<size_t>(player_id)); + return players_.at(player_id).audio_sink_id_; +} + +MockMediaSessionPlayerObserver::MockPlayer::MockPlayer(bool is_playing, + double volume_multiplier) + : is_playing_(is_playing), volume_multiplier_(volume_multiplier) {} MockMediaSessionPlayerObserver::MockPlayer::~MockPlayer() = default;
diff --git a/content/browser/media/session/mock_media_session_player_observer.h b/content/browser/media/session/mock_media_session_player_observer.h index e50db8b4..5727be9 100644 --- a/content/browser/media/session/mock_media_session_player_observer.h +++ b/content/browser/media/session/mock_media_session_player_observer.h
@@ -10,6 +10,7 @@ #include "base/time/time.h" #include "content/browser/media/session/media_session_player_observer.h" +#include "media/audio/audio_device_description.h" #include "services/media_session/public/cpp/media_position.h" namespace content { @@ -37,6 +38,7 @@ bool IsPictureInPictureAvailable(int player_id) const override; RenderFrameHost* render_frame_host() const override; bool HasVideo(int player_id) const override; + std::string GetAudioOutputSinkId(int player_id) const override; // Simulate that a new player started. // Returns the player_id. @@ -48,8 +50,8 @@ // Returns the volume multiplier of |player_id|. double GetVolumeMultiplier(size_t player_id); - // Returns the sink id being used for the audio output of |player_id| - const std::string& GetAudioSinkId(size_t player_id); + // Changes the audio output sink id of |player_id|. + void SetAudioSinkId(size_t player_id, std::string sink_id); // Simulate a play state change for |player_id|. void SetPlaying(size_t player_id, bool playing); @@ -70,8 +72,7 @@ struct MockPlayer { public: explicit MockPlayer(bool is_playing = true, - double volume_multiplier = 1.0f, - const std::string& audio_sink_id = ""); + double volume_multiplier = 1.0f); ~MockPlayer(); MockPlayer(const MockPlayer&); @@ -79,7 +80,8 @@ double volume_multiplier_; base::Optional<media_session::MediaPosition> position_; bool is_in_picture_in_picture_; - std::string audio_sink_id_; + std::string audio_sink_id_ = + media::AudioDeviceDescription::kDefaultDeviceId; }; // Basic representation of the players. The position in the vector is the
diff --git a/content/browser/media/session/pepper_player_delegate.cc b/content/browser/media/session/pepper_player_delegate.cc index 2e5648c8..a8b35bc 100644 --- a/content/browser/media/session/pepper_player_delegate.cc +++ b/content/browser/media/session/pepper_player_delegate.cc
@@ -21,10 +21,9 @@ const int PepperPlayerDelegate::kPlayerId = 0; -PepperPlayerDelegate::PepperPlayerDelegate( - RenderFrameHost* render_frame_host, int32_t pp_instance) - : render_frame_host_(render_frame_host), - pp_instance_(pp_instance) {} +PepperPlayerDelegate::PepperPlayerDelegate(RenderFrameHost* render_frame_host, + int32_t pp_instance) + : render_frame_host_(render_frame_host), pp_instance_(pp_instance) {} PepperPlayerDelegate::~PepperPlayerDelegate() = default; @@ -104,4 +103,9 @@ return true; } +std::string PepperPlayerDelegate::GetAudioOutputSinkId(int player_id) const { + // This operation is not supported for pepper players. + return ""; +} + } // namespace content
diff --git a/content/browser/media/session/pepper_player_delegate.h b/content/browser/media/session/pepper_player_delegate.h index 9b24467d..d265577 100644 --- a/content/browser/media/session/pepper_player_delegate.h +++ b/content/browser/media/session/pepper_player_delegate.h
@@ -28,8 +28,7 @@ void OnResume(int player_id) override; void OnSeekForward(int player_id, base::TimeDelta seek_time) override; void OnSeekBackward(int player_id, base::TimeDelta seek_time) override; - void OnSetVolumeMultiplier(int player_id, - double volume_multiplier) override; + void OnSetVolumeMultiplier(int player_id, double volume_multiplier) override; void OnEnterPictureInPicture(int player_id) override; void OnExitPictureInPicture(int player_id) override; void OnSetAudioSinkId(int player_id, @@ -39,6 +38,7 @@ bool IsPictureInPictureAvailable(int player_id) const override; RenderFrameHost* render_frame_host() const override; bool HasVideo(int player_id) const override; + std::string GetAudioOutputSinkId(int player_id) const override; private: void SetVolume(int player_id, double volume);
diff --git a/content/browser/native_file_system/file_system_chooser_test_helpers.cc b/content/browser/native_file_system/file_system_chooser_test_helpers.cc index 317f0d0..c583919 100644 --- a/content/browser/native_file_system/file_system_chooser_test_helpers.cc +++ b/content/browser/native_file_system/file_system_chooser_test_helpers.cc
@@ -32,6 +32,7 @@ else out_params_->file_types = base::nullopt; out_params_->owning_window = owning_window; + out_params_->file_type_index = file_type_index; } listener_->FileSelectionCanceled(params); } @@ -73,6 +74,7 @@ else out_params_->file_types = base::nullopt; out_params_->owning_window = owning_window; + out_params_->file_type_index = file_type_index; } if (result_.size() == 1) listener_->FileSelected(result_[0], 0, params);
diff --git a/content/browser/native_file_system/file_system_chooser_test_helpers.h b/content/browser/native_file_system/file_system_chooser_test_helpers.h index 1fc6f1f..8047d186 100644 --- a/content/browser/native_file_system/file_system_chooser_test_helpers.h +++ b/content/browser/native_file_system/file_system_chooser_test_helpers.h
@@ -22,6 +22,7 @@ ui::SelectFileDialog::Type type = ui::SelectFileDialog::SELECT_NONE; base::Optional<ui::SelectFileDialog::FileTypeInfo> file_types; gfx::NativeWindow owning_window = {}; + int file_type_index = -1; }; // A fake ui::SelectFileDialog, which will cancel the file selection instead of
diff --git a/content/browser/native_file_system/file_system_chooser_unittest.cc b/content/browser/native_file_system/file_system_chooser_unittest.cc index ec17a69..5607c27 100644 --- a/content/browser/native_file_system/file_system_chooser_unittest.cc +++ b/content/browser/native_file_system/file_system_chooser_unittest.cc
@@ -54,6 +54,7 @@ EXPECT_EQ(0u, dialog_params.file_types->extensions.size()); EXPECT_EQ(0u, dialog_params.file_types->extension_description_overrides.size()); + EXPECT_EQ(0, dialog_params.file_type_index); } TEST_F(FileSystemChooserTest, EmptyAcceptsIgnoresIncludeAcceptsAll) { @@ -68,6 +69,7 @@ EXPECT_EQ(0u, dialog_params.file_types->extensions.size()); EXPECT_EQ(0u, dialog_params.file_types->extension_description_overrides.size()); + EXPECT_EQ(0, dialog_params.file_type_index); } TEST_F(FileSystemChooserTest, AcceptsMimeTypes) { @@ -86,6 +88,7 @@ ASSERT_TRUE(dialog_params.file_types); EXPECT_TRUE(dialog_params.file_types->include_all_files); ASSERT_EQ(2u, dialog_params.file_types->extensions.size()); + EXPECT_EQ(1, dialog_params.file_type_index); EXPECT_TRUE(base::Contains(dialog_params.file_types->extensions[0], FILE_PATH_LITERAL("text"))); @@ -124,6 +127,7 @@ ASSERT_TRUE(dialog_params.file_types); EXPECT_TRUE(dialog_params.file_types->include_all_files); ASSERT_EQ(1u, dialog_params.file_types->extensions.size()); + EXPECT_EQ(1, dialog_params.file_type_index); ASSERT_EQ(2u, dialog_params.file_types->extensions[0].size()); EXPECT_EQ(dialog_params.file_types->extensions[0][0], @@ -150,6 +154,7 @@ ASSERT_TRUE(dialog_params.file_types); EXPECT_FALSE(dialog_params.file_types->include_all_files); ASSERT_EQ(1u, dialog_params.file_types->extensions.size()); + EXPECT_EQ(1, dialog_params.file_type_index); ASSERT_GE(dialog_params.file_types->extensions[0].size(), 4u); EXPECT_EQ(dialog_params.file_types->extensions[0][0],
diff --git a/content/browser/process_internals/process_internals_ui.cc b/content/browser/process_internals/process_internals_ui.cc index a04f4498..2c72ee5 100644 --- a/content/browser/process_internals/process_internals_ui.cc +++ b/content/browser/process_internals/process_internals_ui.cc
@@ -21,6 +21,7 @@ #include "content/public/browser/web_ui_message_handler.h" #include "content/public/common/bindings_policy.h" #include "content/public/common/url_constants.h" +#include "services/network/public/mojom/content_security_policy.mojom.h" namespace content { @@ -39,6 +40,9 @@ source->AddResourcePath("process_internals.mojom-lite.js", IDR_PROCESS_INTERNALS_MOJO_JS); source->SetDefaultResource(IDR_PROCESS_INTERNALS_HTML); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types cr-ui-tree-js-static;"); WebUIDataSource::Add(web_contents()->GetBrowserContext(), source); }
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 20f1eb7d..e31ae09d 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -70,6 +70,7 @@ #include "media/capture/video/video_capture_system_impl.h" #include "media/mojo/mojom/display_media_information.mojom.h" #include "services/video_capture/public/uma/video_capture_service_event.h" +#include "third_party/blink/public/common/mediastream/media_devices.h" #include "url/gurl.h" #include "url/origin.h" @@ -429,8 +430,6 @@ scoped_refptr<base::SequencedTaskRunner> task_runner, base::OnceCallback<void(const base::Optional<std::string>&)> callback, const MediaDeviceEnumeration& enumeration) { - DCHECK(type == blink::MEDIA_DEVICE_TYPE_AUDIO_INPUT || - type == blink::MEDIA_DEVICE_TYPE_VIDEO_INPUT); for (const auto& device : enumeration[type]) { if (MediaStreamManager::DoesMediaDeviceIDMatchHMAC( salt, security_origin, source_id, device.device_id)) { @@ -2492,8 +2491,21 @@ DCHECK_CURRENTLY_ON(BrowserThread::IO); DCHECK(stream_type == MediaStreamType::DEVICE_AUDIO_CAPTURE || stream_type == MediaStreamType::DEVICE_VIDEO_CAPTURE); - MediaStreamManager* msm = g_media_stream_manager_tls_ptr.Pointer()->Get(); blink::MediaDeviceType device_type = ConvertToMediaDeviceType(stream_type); + MediaStreamManager::GetMediaDeviceIDForHMAC( + device_type, std::move(salt), std::move(security_origin), + std::move(hmac_device_id), std::move(task_runner), std::move(callback)); +} + +void MediaStreamManager::GetMediaDeviceIDForHMAC( + blink::MediaDeviceType device_type, + std::string salt, + url::Origin security_origin, + std::string hmac_device_id, + scoped_refptr<base::SequencedTaskRunner> task_runner, + base::OnceCallback<void(const base::Optional<std::string>&)> callback) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + MediaStreamManager* msm = g_media_stream_manager_tls_ptr.Pointer()->Get(); MediaDevicesManager::BoolDeviceTypes requested_types; requested_types[device_type] = true; msm->media_devices_manager()->EnumerateDevices(
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h index f01af6b..4d1e4877 100644 --- a/content/browser/renderer_host/media/media_stream_manager.h +++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -320,6 +320,16 @@ std::string hmac_device_id, scoped_refptr<base::SequencedTaskRunner> task_runner, base::OnceCallback<void(const base::Optional<std::string>&)> callback); + // Overload that allows for a blink::MediaDeviceType to be specified instead + // of a blink::mojom::MediaStreamType. This allows for getting the raw device + // ID from the HMAC of an audio output device. + static void GetMediaDeviceIDForHMAC( + blink::MediaDeviceType device_type, + std::string salt, + url::Origin security_origin, + std::string hmac_device_id, + scoped_refptr<base::SequencedTaskRunner> task_runner, + base::OnceCallback<void(const base::Optional<std::string>&)> callback); // Returns true if the renderer process identified with |render_process_id| // is allowed to access |origin|.
diff --git a/content/browser/service_worker/service_worker_internals_ui.cc b/content/browser/service_worker/service_worker_internals_ui.cc index 2c6ab157..7bf102e 100644 --- a/content/browser/service_worker/service_worker_internals_ui.cc +++ b/content/browser/service_worker/service_worker_internals_ui.cc
@@ -373,6 +373,9 @@ source->OverrideContentSecurityPolicy( network::mojom::CSPDirectiveName::ScriptSrc, "script-src chrome://resources 'self' 'unsafe-eval';"); + source->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, + "trusted-types jstemplate;"); source->UseStringsJs(); source->AddResourcePath("serviceworker_internals.js", IDR_SERVICE_WORKER_INTERNALS_JS);
diff --git a/content/browser/tracing/tracing_ui.cc b/content/browser/tracing/tracing_ui.cc index 3ca7b7f..2bffb5eb 100644 --- a/content/browser/tracing/tracing_ui.cc +++ b/content/browser/tracing/tracing_ui.cc
@@ -240,6 +240,7 @@ web_ui->GetWebContents()->GetBrowserContext(); WebUIDataSource* source = WebUIDataSource::Create(kChromeUITracingHost); + source->DisableTrustedTypesCSP(); source->UseStringsJs(); source->SetDefaultResource(IDR_TRACING_HTML); source->AddResourcePath("tracing.js", IDR_TRACING_JS);
diff --git a/content/browser/webui/shared_resources_data_source.cc b/content/browser/webui/shared_resources_data_source.cc index 6566cdf4..b9dc7cc 100644 --- a/content/browser/webui/shared_resources_data_source.cc +++ b/content/browser/webui/shared_resources_data_source.cc
@@ -408,6 +408,13 @@ network::mojom::CSPDirectiveName directive) { if (directive == network::mojom::CSPDirectiveName::WorkerSrc) { return "worker-src blob: 'self';"; + } else if (directive == + network::mojom::CSPDirectiveName::RequireTrustedTypesFor || + directive == network::mojom::CSPDirectiveName::TrustedTypes) { + // TODO(crbug.com/1098690): Trusted Type Polymer + // This removes require-trusted-types-for and trusted-types directives + // from the CSP header. + return std::string(); } return content::URLDataSource::GetContentSecurityPolicy(directive);
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc index 49885ce..84bbb996 100644 --- a/content/browser/webui/url_data_manager_backend.cc +++ b/content/browser/webui/url_data_manager_backend.cc
@@ -51,8 +51,6 @@ "Content-Security-Policy"; const char kChromeURLContentSecurityPolicyReportOnlyHeaderName[] = "Content-Security-Policy-Report-Only"; -const char kChromeURLContentSecurityPolicyReportOnlyHeaderValue[] = - "require-trusted-types-for 'script'"; const char kChromeURLXFrameOptionsHeaderName[] = "X-Frame-Options"; const char kChromeURLXFrameOptionsHeaderValue[] = "DENY"; @@ -194,9 +192,16 @@ kChromeURLXFrameOptionsHeaderValue); } - if (base::FeatureList::IsEnabled(features::kWebUIReportOnlyTrustedTypes)) + if (base::FeatureList::IsEnabled(features::kWebUIReportOnlyTrustedTypes) && + source->ShouldAddContentSecurityPolicy()) { + std::string csp_report_only_header; + csp_report_only_header.append(source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor)); + csp_report_only_header.append(source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes)); headers->SetHeader(kChromeURLContentSecurityPolicyReportOnlyHeaderName, - kChromeURLContentSecurityPolicyReportOnlyHeaderValue); + csp_report_only_header); + } if (!source->AllowCaching()) headers->SetHeader("Cache-Control", "no-cache");
diff --git a/content/browser/webui/web_ui_data_source_impl.cc b/content/browser/webui/web_ui_data_source_impl.cc index 3b43e495..adaf7fd 100644 --- a/content/browser/webui/web_ui_data_source_impl.cc +++ b/content/browser/webui/web_ui_data_source_impl.cc
@@ -200,6 +200,16 @@ csp_overrides_.insert_or_assign(directive, value); } +void WebUIDataSourceImpl::DisableTrustedTypesCSP() { + // TODO(crbug.com/1098685): Trusted Type remaining WebUI + // This removes require-trusted-types-for and trusted-types directives + // from the CSP header. + OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor, std::string()); + OverrideContentSecurityPolicy(network::mojom::CSPDirectiveName::TrustedTypes, + std::string()); +} + void WebUIDataSourceImpl::AddFrameAncestor(const GURL& frame_ancestor) { // Do not allow a wildcard to be a frame ancestor or it will allow any website // to embed the WebUI.
diff --git a/content/browser/webui/web_ui_data_source_impl.h b/content/browser/webui/web_ui_data_source_impl.h index 626edd93..637d466 100644 --- a/content/browser/webui/web_ui_data_source_impl.h +++ b/content/browser/webui/web_ui_data_source_impl.h
@@ -48,6 +48,7 @@ void DisableContentSecurityPolicy() override; void OverrideContentSecurityPolicy(network::mojom::CSPDirectiveName directive, const std::string& value) override; + void DisableTrustedTypesCSP() override; void DisableDenyXFrameOptions() override; void EnableReplaceI18nInJS() override; std::string GetSource() override;
diff --git a/content/browser/webui/web_ui_data_source_unittest.cc b/content/browser/webui/web_ui_data_source_unittest.cc index 7ef131ba..49c7315 100644 --- a/content/browser/webui/web_ui_data_source_unittest.cc +++ b/content/browser/webui/web_ui_data_source_unittest.cc
@@ -295,6 +295,12 @@ network::mojom::CSPDirectiveName::ScriptSrc)); EXPECT_EQ("", url_data_source->GetContentSecurityPolicy( network::mojom::CSPDirectiveName::StyleSrc)); + EXPECT_EQ("require-trusted-types-for 'script';", + url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor)); + EXPECT_EQ("trusted-types;", + url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes)); // Override each directive and test it updates the underlying URLDataSource. source()->OverrideContentSecurityPolicy( @@ -353,6 +359,23 @@ EXPECT_EQ("style-src 'self' 'unsafe-inline';", url_data_source->GetContentSecurityPolicy( network::mojom::CSPDirectiveName::StyleSrc)); + + source()->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor, + "require-trusted-types-for 'wasm';"); + EXPECT_EQ("require-trusted-types-for 'wasm';", + url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor)); + source()->OverrideContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes, "trusted-types test;"); + EXPECT_EQ("trusted-types test;", + url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes)); + source()->DisableTrustedTypesCSP(); + EXPECT_EQ("", url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::RequireTrustedTypesFor)); + EXPECT_EQ("", url_data_source->GetContentSecurityPolicy( + network::mojom::CSPDirectiveName::TrustedTypes)); } } // namespace content
diff --git a/content/public/browser/url_data_source.cc b/content/public/browser/url_data_source.cc index 38489fe..5264296 100644 --- a/content/public/browser/url_data_source.cc +++ b/content/public/browser/url_data_source.cc
@@ -82,6 +82,10 @@ return "script-src chrome://resources 'self';"; case network::mojom::CSPDirectiveName::FrameAncestors: return "frame-ancestors 'none';"; + case network::mojom::CSPDirectiveName::RequireTrustedTypesFor: + return "require-trusted-types-for 'script';"; + case network::mojom::CSPDirectiveName::TrustedTypes: + return "trusted-types;"; case network::mojom::CSPDirectiveName::BaseURI: case network::mojom::CSPDirectiveName::BlockAllMixedContent: case network::mojom::CSPDirectiveName::ConnectSrc: @@ -93,7 +97,6 @@ case network::mojom::CSPDirectiveName::MediaSrc: case network::mojom::CSPDirectiveName::PrefetchSrc: case network::mojom::CSPDirectiveName::ReportURI: - case network::mojom::CSPDirectiveName::RequireTrustedTypesFor: case network::mojom::CSPDirectiveName::Sandbox: case network::mojom::CSPDirectiveName::ScriptSrcAttr: case network::mojom::CSPDirectiveName::ScriptSrcElem: @@ -102,7 +105,6 @@ case network::mojom::CSPDirectiveName::StyleSrcElem: case network::mojom::CSPDirectiveName::UpgradeInsecureRequests: case network::mojom::CSPDirectiveName::TreatAsPublicAddress: - case network::mojom::CSPDirectiveName::TrustedTypes: case network::mojom::CSPDirectiveName::WorkerSrc: case network::mojom::CSPDirectiveName::ReportTo: case network::mojom::CSPDirectiveName::NavigateTo:
diff --git a/content/public/browser/web_ui_data_source.h b/content/public/browser/web_ui_data_source.h index 0c97a5c4..d14df48 100644 --- a/content/public/browser/web_ui_data_source.h +++ b/content/public/browser/web_ui_data_source.h
@@ -118,6 +118,9 @@ network::mojom::CSPDirectiveName directive, const std::string& value) = 0; + // Removes directives related to Trusted Types from the CSP header. + virtual void DisableTrustedTypesCSP() = 0; + // This method is deprecated and AddFrameAncestors should be used instead. virtual void DisableDenyXFrameOptions() = 0; virtual void AddFrameAncestor(const GURL& frame_ancestor) = 0;
diff --git a/content/renderer/accessibility/render_accessibility_impl.cc b/content/renderer/accessibility/render_accessibility_impl.cc index 5ea591e..77fae0e 100644 --- a/content/renderer/accessibility/render_accessibility_impl.cc +++ b/content/renderer/accessibility/render_accessibility_impl.cc
@@ -986,15 +986,11 @@ if (!root.UpdateLayoutAndCheckValidity()) return; - // Do a breadth-first explore of the whole blink AX tree. - base::queue<WebAXObject> objs_to_explore; - objs_to_explore.push(root); - while (objs_to_explore.size()) { - WebAXObject obj = objs_to_explore.front(); - objs_to_explore.pop(); - + blink::WebVector<WebAXObject> changed_bounds_objects; + root.GetAllObjectsWithChangedBounds(changed_bounds_objects); + for (const WebAXObject& obj : changed_bounds_objects) { // See if we had a previous location. If not, this whole subtree must - // be new, so don't continue to explore this branch. + // be new, so no need to update. int id = obj.AxID(); if (!tree_source_->HasCachedBoundingBox(id)) continue; @@ -1007,12 +1003,6 @@ // Save the new location. tree_source_->SetCachedBoundingBox(id, new_location); - - // Explore children of this object. - std::vector<WebAXObject> children; - tree_source_->GetChildren(obj, &children); - for (WebAXObject& child : children) - objs_to_explore.push(child); } // Ensure that the number of cached bounding boxes doesn't exceed the
diff --git a/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored-expected-win.txt b/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored-expected-win.txt deleted file mode 100644 index de0c564..0000000 --- a/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored-expected-win.txt +++ /dev/null
@@ -1,4 +0,0 @@ -EVENT_OBJECT_HIDE on <div#heading-root.a> role=ROLE_SYSTEM_GROUPING name="Heading" INVISIBLE level=2 -EVENT_OBJECT_REORDER on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL -IA2_EVENT_TEXT_INSERTED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL new_text={'<obj>' start=0 end=1} -IA2_EVENT_TEXT_REMOVED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored.html b/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored.html deleted file mode 100644 index b1f94e799..0000000 --- a/content/test/data/accessibility/event/aria-hidden-descendants-already-ignored.html +++ /dev/null
@@ -1,23 +0,0 @@ -<!DOCTYPE html> -<html> -<body> -<!-- Hide events only need to occur on the root of what's shown/hidden, - not for each descendant, with some descendants already ignored. --> -<div role="toolbar"> - <div id="heading-root" role="heading" aria-label="Heading" class="a"> - <div> <!-- already ignored--> - <div> <!-- already ignored --> - <div id="heading-child"> - <div id="heading-grandchild"></div> - </div> - </div> - </div> - </div> -</div> -<script> - function go() { - document.querySelector('.a').setAttribute("aria-hidden", "true"); - } -</script> -</body> -</html>
diff --git a/content/test/data/accessibility/event/aria-hidden-descendants-expected-win.txt b/content/test/data/accessibility/event/aria-hidden-descendants-expected-win.txt deleted file mode 100644 index 269850a..0000000 --- a/content/test/data/accessibility/event/aria-hidden-descendants-expected-win.txt +++ /dev/null
@@ -1,5 +0,0 @@ -EVENT_OBJECT_HIDE on <div#heading-root.a> role=ROLE_SYSTEM_GROUPING name="Heading" INVISIBLE level=2 -EVENT_OBJECT_REORDER on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL -EVENT_OBJECT_SHOW on <div#banner-root.b> role=ROLE_SYSTEM_GROUPING name="Banner" -IA2_EVENT_TEXT_INSERTED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL new_text={'<obj>' start=0 end=1} -IA2_EVENT_TEXT_REMOVED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/aria-hidden-descendants.html b/content/test/data/accessibility/event/aria-hidden-descendants.html deleted file mode 100644 index ab2441d..0000000 --- a/content/test/data/accessibility/event/aria-hidden-descendants.html +++ /dev/null
@@ -1,25 +0,0 @@ -<!DOCTYPE html> -<html> -<body> -<!-- Show/hide events only need to occur on the root of what's shown/hidden, - not for each descendant --> -<div role="toolbar"> - <div id="heading-root" role="heading" aria-label="Heading" class="a"> - <div id="heading-child"> - <div id="heading-grandchild"></div> - </div> - </div> - <div id="banner-root" role="banner" aria-label="Banner" aria-hidden="true" class="b"> - <div id="banner-child"> - <div id="banner-grandchild"></div> - </div> - </div> -</div> -<script> - function go() { - document.querySelector('.a').setAttribute("aria-hidden", "true"); - document.querySelector('.b').removeAttribute("aria-hidden"); - } -</script> -</body> -</html>
diff --git a/content/test/data/accessibility/event/css-display-descendants-expected-win.txt b/content/test/data/accessibility/event/css-display-descendants-expected-win.txt deleted file mode 100644 index ea4bec0..0000000 --- a/content/test/data/accessibility/event/css-display-descendants-expected-win.txt +++ /dev/null
@@ -1,6 +0,0 @@ -EVENT_OBJECT_HIDE on <div#heading-root.a> role=ROLE_SYSTEM_GROUPING name="Heading" level=2 -EVENT_OBJECT_REORDER on <div#banner-child> role=ROLE_SYSTEM_GROUPING -EVENT_OBJECT_REORDER on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL -EVENT_OBJECT_SHOW on <div#banner-root.b> role=ROLE_SYSTEM_GROUPING name="Banner" -IA2_EVENT_TEXT_INSERTED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL new_text={'<obj>' start=0 end=1} -IA2_EVENT_TEXT_REMOVED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/css-display-descendants.html b/content/test/data/accessibility/event/css-display-descendants.html deleted file mode 100644 index 832d8dbe..0000000 --- a/content/test/data/accessibility/event/css-display-descendants.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> - .a { display: block; } - .b { display: none; } - body.flip .a { display: none; } - body.flip .b { display: block; } -</style> -</head> -<body> -<!-- Show/hide events only need to occur on the root of what's shown/hidden, - not for each descendant --> -<div role="toolbar"> - <div id="heading-root" role="heading" aria-label="Heading" class="a"> - <div id="heading-child"> - <div id="heading-grandchild"></div> - </div> - </div> - <div id="banner-root" role="banner" aria-label="Banner" class="b"> - <div id="banner-child"> - <div id="banner-grandchild"></div> - </div> - </div> -</div> -<script> - function go() { - document.body.className = 'flip'; - } -</script> -</body> -</html>
diff --git a/content/test/data/accessibility/event/css-visibility-descendants-expected-win.txt b/content/test/data/accessibility/event/css-visibility-descendants-expected-win.txt deleted file mode 100644 index 269850a..0000000 --- a/content/test/data/accessibility/event/css-visibility-descendants-expected-win.txt +++ /dev/null
@@ -1,5 +0,0 @@ -EVENT_OBJECT_HIDE on <div#heading-root.a> role=ROLE_SYSTEM_GROUPING name="Heading" INVISIBLE level=2 -EVENT_OBJECT_REORDER on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL -EVENT_OBJECT_SHOW on <div#banner-root.b> role=ROLE_SYSTEM_GROUPING name="Banner" -IA2_EVENT_TEXT_INSERTED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL new_text={'<obj>' start=0 end=1} -IA2_EVENT_TEXT_REMOVED on <div> role=ROLE_SYSTEM_TOOLBAR IA2_STATE_HORIZONTAL old_text={'<obj>' start=0 end=1}
diff --git a/content/test/data/accessibility/event/css-visibility-descendants.html b/content/test/data/accessibility/event/css-visibility-descendants.html deleted file mode 100644 index 002e2b9..0000000 --- a/content/test/data/accessibility/event/css-visibility-descendants.html +++ /dev/null
@@ -1,32 +0,0 @@ -<!DOCTYPE html> -<html> -<head> -<style> - .a { visibility: visible; } - .b { visibility: hidden; } - body.flip .a { visibility: hidden; } - body.flip .b { visibility: visible; } -</style> -</head> -<body> -<!-- Show/hide events only need to occur on the root of what's shown/hidden, - not for each descendant --> -<div role="toolbar"> - <div id="heading-root" role="heading" aria-label="Heading" class="a"> - <div id="heading-child"> - <div id="heading-grandchild"></div> - </div> - </div> - <div id="banner-root" role="banner" aria-label="Banner" class="b"> - <div id="banner-child"> - <div id="banner-grandchild"></div> - </div> - </div> -</div> -<script> - function go() { - document.body.className = 'flip'; - } -</script> -</body> -</html>
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 e598907..2331a3a 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
@@ -154,7 +154,8 @@ crbug.com/angleproject/4931 [ win nvidia vulkan passthrough ] conformance/textures/misc/texture-mips.html [ Failure ] # Win / Intel / Vulkan / Passthrough command decoder -crbug.com/angleproject/4922 [ win intel vulkan passthrough ] conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ RetryOnFailure ] +# Technically flaky, but flake rate is too high for RetryOnFailure. +crbug.com/angleproject/4922 [ win intel vulkan passthrough ] conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ Failure ] #################### # Fuchsia failures #
diff --git a/fuchsia/engine/BUILD.gn b/fuchsia/engine/BUILD.gn index c799a0c..9d36dc97 100644 --- a/fuchsia/engine/BUILD.gn +++ b/fuchsia/engine/BUILD.gn
@@ -28,7 +28,6 @@ mojom("mojom") { sources = [ "cast_streaming_session.mojom", - "on_load_script_injector.mojom", "url_request_rewrite.mojom", ] public_deps = [ @@ -92,6 +91,8 @@ "//components/cdm/renderer", "//components/media_control/browser", "//components/media_control/renderer", + "//components/on_load_script_injector/browser", + "//components/on_load_script_injector/renderer", "//components/version_info", "//content/public/app", "//content/public/browser", @@ -205,8 +206,6 @@ "renderer/cast_streaming_demuxer.h", "renderer/cast_streaming_receiver.cc", "renderer/cast_streaming_receiver.h", - "renderer/on_load_script_injector.cc", - "renderer/on_load_script_injector.h", "renderer/url_request_rules_receiver.cc", "renderer/url_request_rules_receiver.h", "renderer/web_engine_content_renderer_client.cc",
diff --git a/fuchsia/engine/DEPS b/fuchsia/engine/DEPS index 2f2e3b19..874ad25 100644 --- a/fuchsia/engine/DEPS +++ b/fuchsia/engine/DEPS
@@ -3,6 +3,7 @@ "+components/version_info", "+components/viz/common", "+components/media_control", + "+components/on_load_script_injector", "+content/public/app", "+gpu/command_buffer/service", "+gpu/config/gpu_finch_features.h",
diff --git a/fuchsia/engine/browser/DEPS b/fuchsia/engine/browser/DEPS index 6ffa902..cedf5e79 100644 --- a/fuchsia/engine/browser/DEPS +++ b/fuchsia/engine/browser/DEPS
@@ -1,5 +1,6 @@ include_rules = [ "+components/keyed_service/core", + "+components/on_load_script_injector/browser", "+content/public/common", "+content/public/browser", "+media/base",
diff --git a/fuchsia/engine/browser/frame_impl.cc b/fuchsia/engine/browser/frame_impl.cc index f846ae1..c409ac62 100644 --- a/fuchsia/engine/browser/frame_impl.cc +++ b/fuchsia/engine/browser/frame_impl.cc
@@ -71,6 +71,9 @@ // Simulated screen bounds to use when testing the SemanticsManager. constexpr gfx::Size kSemanticsTestingWindowSize = {720, 640}; +// A special value which matches all origins when specified in an origin list. +constexpr char kWildcardOrigin[] = "*"; + // Used for attaching popup-related metadata to a WebContents. constexpr char kPopupCreationInfo[] = "popup-creation-info"; class PopupFrameCreationInfoUserData : public base::SupportsUserData::Data { @@ -96,12 +99,11 @@ return true; } -bool IsOriginAllowed(const GURL& url, - const std::vector<std::string>& allowed_origins) { - constexpr const char kWildcard[] = "*"; - +// TODO(crbug.com/1113289): Use OnLoadScriptInjectorHost's origin matching code. +bool IsUrlMatchedByOriginList(const GURL& url, + const std::vector<std::string>& allowed_origins) { for (const std::string& origin : allowed_origins) { - if (origin == kWildcard) + if (origin == kWildcardOrigin) return true; GURL origin_url(origin); @@ -115,9 +117,6 @@ if (origin_url != url.GetOrigin()) continue; - // TODO(crbug.com/893236): Add handling for nonstandard origins - // (e.g. data: URIs). - return true; } return false; @@ -279,22 +278,6 @@ return zx::unowned_channel(binding_.channel()); } -FrameImpl::OriginScopedScript::OriginScopedScript() = default; - -FrameImpl::OriginScopedScript::OriginScopedScript( - std::vector<std::string> origins, - base::ReadOnlySharedMemoryRegion script) - : origins_(std::move(origins)), script_(std::move(script)) {} - -FrameImpl::OriginScopedScript& FrameImpl::OriginScopedScript::operator=( - FrameImpl::OriginScopedScript&& other) { - origins_ = std::move(other.origins_); - script_ = std::move(other.script_); - return *this; -} - -FrameImpl::OriginScopedScript::~OriginScopedScript() = default; - aura::Window* FrameImpl::root_window() const { return window_tree_host_->window(); } @@ -310,7 +293,10 @@ return; } - if (!IsOriginAllowed(web_contents_->GetLastCommittedURL(), origins)) { + // Prevents script injection into the wrong document if the renderer recently + // navigated to a different origin. + if (!IsUrlMatchedByOriginList(web_contents_->GetLastCommittedURL(), + origins)) { result.set_err(fuchsia::web::FrameError::INVALID_ORIGIN); callback(std::move(result)); return; @@ -528,30 +514,6 @@ return true; } -void FrameImpl::MaybeInjectBeforeLoadScripts( - content::NavigationHandle* navigation_handle) { - if (before_load_scripts_.empty()) - return; - - mojo::AssociatedRemote<mojom::OnLoadScriptInjector> - before_load_script_injector; - navigation_handle->GetRenderFrameHost() - ->GetRemoteAssociatedInterfaces() - ->GetInterface(&before_load_script_injector); - - // Provision the renderer's ScriptInjector with the scripts scoped to this - // page's origin. - before_load_script_injector->ClearOnLoadScripts(); - for (uint64_t script_id : before_load_scripts_order_) { - const OriginScopedScript& script = before_load_scripts_[script_id]; - if (IsOriginAllowed(navigation_handle->GetURL(), script.origins())) { - // TODO(crbug.com/1060846): Stop using handle<shared_buffer>. - before_load_script_injector->AddOnLoadScript( - mojo::WrapReadOnlySharedMemoryRegion(script.script().Duplicate())); - } - } -} - void FrameImpl::MaybeStartCastStreaming( content::NavigationHandle* navigation_handle) { if (!IsCastStreamingEnabled() || !cast_streaming_session_client_) @@ -651,6 +613,8 @@ std::vector<std::string> origins, fuchsia::mem::Buffer script, AddBeforeLoadJavaScriptCallback callback) { + constexpr char kWildcardOrigin[] = "*"; + fuchsia::web::Frame_AddBeforeLoadJavaScript_Result result; if (!context_->IsJavaScriptInjectionAllowed()) { result.set_err(fuchsia::web::FrameError::INTERNAL_ERROR); @@ -658,52 +622,41 @@ return; } - // Convert the script to UTF8 and store it as a shared memory buffer, so that - // it can be efficiently shared with multiple renderer processes. - base::string16 script_utf16; - if (!cr_fuchsia::ReadUTF8FromVMOAsUTF16(script, &script_utf16)) { - result.set_err(fuchsia::web::FrameError::BUFFER_NOT_UTF8); + std::string script_as_string; + if (!cr_fuchsia::StringFromMemBuffer(script, &script_as_string)) { + LOG(ERROR) << "Couldn't read script from buffer."; + result.set_err(fuchsia::web::FrameError::INTERNAL_ERROR); callback(std::move(result)); return; } - // Create a read-only VMO from |script|. - fuchsia::mem::Buffer script_buffer = - cr_fuchsia::MemBufferFromString16(script_utf16, "cr-before-load-js"); + // TODO(crbug.com/1108607): Only allow wildcards to be specified standalone. + if (std::any_of(origins.begin(), origins.end(), + [kWildcardOrigin](base::StringPiece origin) { + return origin == kWildcardOrigin; + })) { + script_injector_.AddScriptForAllOrigins(id, script_as_string); + } else { + std::vector<url::Origin> origins_converted; + for (const std::string& origin : origins) { + url::Origin origin_parsed = url::Origin::Create(GURL(origin)); + if (origin_parsed.opaque()) { + result.set_err(fuchsia::web::FrameError::INVALID_ORIGIN); + callback(std::move(result)); + return; + } + origins_converted.push_back(origin_parsed); + } - // Wrap the VMO into a read-only shared-memory container that Mojo can work - // with. - base::subtle::PlatformSharedMemoryRegion script_region = - base::subtle::PlatformSharedMemoryRegion::Take( - std::move(script_buffer.vmo), - base::subtle::PlatformSharedMemoryRegion::Mode::kWritable, - script_buffer.size, base::UnguessableToken::Create()); - script_region.ConvertToReadOnly(); - auto script_region_mojo = - base::ReadOnlySharedMemoryRegion::Deserialize(std::move(script_region)); - - // If there is no script with the identifier |id|, then create a place for it - // at the end of the injection sequence. - if (before_load_scripts_.find(id) == before_load_scripts_.end()) - before_load_scripts_order_.push_back(id); - - before_load_scripts_[id] = - OriginScopedScript(origins, std::move(script_region_mojo)); + script_injector_.AddScript(id, origins_converted, script_as_string); + } result.set_response(fuchsia::web::Frame_AddBeforeLoadJavaScript_Response()); callback(std::move(result)); } void FrameImpl::RemoveBeforeLoadJavaScript(uint64_t id) { - before_load_scripts_.erase(id); - - for (auto script_id_iter = before_load_scripts_order_.begin(); - script_id_iter != before_load_scripts_order_.end(); ++script_id_iter) { - if (*script_id_iter == id) { - before_load_scripts_order_.erase(script_id_iter); - return; - } - } + script_injector_.RemoveScript(id); } void FrameImpl::PostMessage(std::string origin, @@ -712,8 +665,6 @@ if (MaybeHandleCastStreamingMessage(&origin, &message, &callback)) return; - constexpr char kWildcardOrigin[] = "*"; - fuchsia::web::Frame_PostMessage_Result result; if (origin.empty()) { result.set_err(fuchsia::web::FrameError::INVALID_ORIGIN); @@ -1082,7 +1033,9 @@ return; } - MaybeInjectBeforeLoadScripts(navigation_handle); + script_injector_.InjectScriptsForURL(navigation_handle->GetURL(), + navigation_handle->GetRenderFrameHost()); + MaybeStartCastStreaming(navigation_handle); }
diff --git a/fuchsia/engine/browser/frame_impl.h b/fuchsia/engine/browser/frame_impl.h index 98574ac..68c6eb4 100644 --- a/fuchsia/engine/browser/frame_impl.h +++ b/fuchsia/engine/browser/frame_impl.h
@@ -20,6 +20,7 @@ #include "base/macros.h" #include "base/memory/read_only_shared_memory_region.h" #include "components/media_control/browser/media_blocker.h" +#include "components/on_load_script_injector/browser/on_load_script_injector_host.h" #include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_observer.h" #include "fuchsia/engine/browser/accessibility_bridge.h" @@ -27,7 +28,6 @@ #include "fuchsia/engine/browser/frame_permission_controller.h" #include "fuchsia/engine/browser/navigation_controller_impl.h" #include "fuchsia/engine/browser/url_request_rewrite_rules_manager.h" -#include "fuchsia/engine/on_load_script_injector.mojom.h" #include "ui/aura/window_tree_host.h" #include "ui/wm/core/focus_controller.h" #include "url/gurl.h" @@ -97,26 +97,6 @@ FRIEND_TEST_ALL_PREFIXES(FrameImplTest, ReloadFrame); FRIEND_TEST_ALL_PREFIXES(FrameImplTest, Stop); - class OriginScopedScript { - public: - OriginScopedScript(); - OriginScopedScript(std::vector<std::string> origins, - base::ReadOnlySharedMemoryRegion script); - OriginScopedScript& operator=(OriginScopedScript&& other); - ~OriginScopedScript(); - - const std::vector<std::string>& origins() const { return origins_; } - const base::ReadOnlySharedMemoryRegion& script() const { return script_; } - - private: - std::vector<std::string> origins_; - - // A shared memory buffer containing the script, encoded as UTF16. - base::ReadOnlySharedMemoryRegion script_; - - DISALLOW_COPY_AND_ASSIGN(OriginScopedScript); - }; - aura::Window* root_window() const; // Shared implementation for the ExecuteJavaScript[NoResult]() APIs. @@ -154,9 +134,6 @@ fuchsia::web::WebMessage* message, PostMessageCallback* callback); - void MaybeInjectBeforeLoadScripts( - content::NavigationHandle* navigation_handle); - void MaybeStartCastStreaming(content::NavigationHandle* navigation_handle); // fuchsia::web::Frame implementation. @@ -278,8 +255,6 @@ EventFilter event_filter_; NavigationControllerImpl navigation_controller_; logging::LogSeverity log_level_; - std::map<uint64_t, OriginScopedScript> before_load_scripts_; - std::vector<uint64_t> before_load_scripts_order_; base::RepeatingCallback<void(base::StringPiece)> console_log_message_hook_; UrlRequestRewriteRulesManager url_request_rewrite_rules_manager_; FramePermissionController permission_controller_; @@ -296,6 +271,7 @@ std::unique_ptr<MediaPlayerImpl> media_player_; std::unique_ptr<CastStreamingSessionClient> cast_streaming_session_client_; + on_load_script_injector::OnLoadScriptInjectorHost script_injector_; fidl::Binding<fuchsia::web::Frame> binding_; media_control::MediaBlocker media_blocker_;
diff --git a/fuchsia/engine/renderer/on_load_script_injector.h b/fuchsia/engine/renderer/on_load_script_injector.h deleted file mode 100644 index 3e5364e8..0000000 --- a/fuchsia/engine/renderer/on_load_script_injector.h +++ /dev/null
@@ -1,46 +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. - -#ifndef FUCHSIA_ENGINE_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ -#define FUCHSIA_ENGINE_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_ - -#include <lib/zx/vmo.h> -#include <vector> - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "content/public/renderer/render_frame_observer.h" -#include "fuchsia/engine/on_load_script_injector.mojom.h" -#include "mojo/public/cpp/bindings/associated_receiver_set.h" -#include "mojo/public/cpp/bindings/pending_associated_receiver.h" - -// Injects one or more scripts into a RenderFrame at the earliest possible time -// during the page load process. -class OnLoadScriptInjector : public content::RenderFrameObserver, - public mojom::OnLoadScriptInjector { - public: - explicit OnLoadScriptInjector(content::RenderFrame* frame); - - void BindToReceiver( - mojo::PendingAssociatedReceiver<mojom::OnLoadScriptInjector> receiver); - - void AddOnLoadScript(mojo::ScopedSharedBufferHandle script) override; - void ClearOnLoadScripts() override; - - // RenderFrameObserver override: - void OnDestruct() override; - void DidCommitProvisionalLoad(ui::PageTransition transition) override; - - private: - // Called by OnDestruct(), when the RenderFrame is destroyed. - ~OnLoadScriptInjector() override; - - std::vector<mojo::ScopedSharedBufferHandle> on_load_scripts_; - mojo::AssociatedReceiverSet<mojom::OnLoadScriptInjector> receivers_; - base::WeakPtrFactory<OnLoadScriptInjector> weak_ptr_factory_; - - DISALLOW_COPY_AND_ASSIGN(OnLoadScriptInjector); -}; - -#endif // FUCHSIA_ENGINE_RENDERER_ON_LOAD_SCRIPT_INJECTOR_H_
diff --git a/fuchsia/engine/renderer/web_engine_content_renderer_client.cc b/fuchsia/engine/renderer/web_engine_content_renderer_client.cc index 7a75505..8afd38d 100644 --- a/fuchsia/engine/renderer/web_engine_content_renderer_client.cc +++ b/fuchsia/engine/renderer/web_engine_content_renderer_client.cc
@@ -9,10 +9,10 @@ #include "base/macros.h" #include "components/cdm/renderer/widevine_key_system_properties.h" #include "components/media_control/renderer/media_playback_options.h" +#include "components/on_load_script_injector/renderer/on_load_script_injector.h" #include "content/public/renderer/render_frame.h" #include "fuchsia/engine/common/cast_streaming.h" #include "fuchsia/engine/renderer/cast_streaming_demuxer.h" -#include "fuchsia/engine/renderer/on_load_script_injector.h" #include "fuchsia/engine/renderer/web_engine_url_loader_throttle_provider.h" #include "fuchsia/engine/switches.h" #include "media/base/eme_constants.h" @@ -130,7 +130,7 @@ content::RenderFrame* render_frame) { // Add WebEngine services to the new RenderFrame. // The objects' lifetimes are bound to the RenderFrame's lifetime. - new OnLoadScriptInjector(render_frame); + new on_load_script_injector::OnLoadScriptInjector(render_frame); int render_frame_id = render_frame->GetRoutingID();
diff --git a/gpu/command_buffer/client/context_support.h b/gpu/command_buffer/client/context_support.h index daf0acef..80838db 100644 --- a/gpu/command_buffer/client/context_support.h +++ b/gpu/command_buffer/client/context_support.h
@@ -12,7 +12,7 @@ #include "ui/gfx/overlay_transform.h" #include "ui/gfx/presentation_feedback.h" -class GrContext; +class GrDirectContext; namespace gfx { class GpuFence; @@ -152,13 +152,13 @@ const cc::ImageHeaderMetadata* image_metadata) const = 0; // Returns true if the context provider automatically manages calls to - // GrContext::resetContext under the hood to prevent GL state synchronization - // problems between the GLES2 interface and skia. + // GrDirectContext::resetContext under the hood to prevent GL state + // synchronization problems between the GLES2 interface and skia. virtual bool HasGrContextSupport() const = 0; - // Sets the GrContext that is to receive resetContext signals when the GL - // state is modified via direct calls to the GLES2 interface. - virtual void SetGrContext(GrContext* gr) = 0; + // Sets the GrDirectContext that is to receive resetContext signals when the + // GL state is modified via direct calls to the GLES2 interface. + virtual void SetGrContext(GrDirectContext* gr) = 0; virtual void WillCallGLFromSkia() = 0;
diff --git a/gpu/command_buffer/client/implementation_base.cc b/gpu/command_buffer/client/implementation_base.cc index a2404fd6..3363612 100644 --- a/gpu/command_buffer/client/implementation_base.cc +++ b/gpu/command_buffer/client/implementation_base.cc
@@ -400,7 +400,7 @@ } } -void ImplementationBase::SetGrContext(GrContext* gr) {} +void ImplementationBase::SetGrContext(GrDirectContext* gr) {} bool ImplementationBase::HasGrContextSupport() const { return false;
diff --git a/gpu/command_buffer/client/implementation_base.h b/gpu/command_buffer/client/implementation_base.h index f5fbe96..cc0be55 100644 --- a/gpu/command_buffer/client/implementation_base.h +++ b/gpu/command_buffer/client/implementation_base.h
@@ -26,6 +26,8 @@ #include "gpu/command_buffer/common/capabilities.h" #include "gpu/command_buffer/common/context_result.h" +class GrDirectContext; + namespace gpu { namespace gles2 { @@ -80,7 +82,7 @@ void GetGpuFence(uint32_t gpu_fence_id, base::OnceCallback<void(std::unique_ptr<gfx::GpuFence>)> callback) override; - void SetGrContext(GrContext* gr) override; + void SetGrContext(GrDirectContext* gr) override; bool HasGrContextSupport() const override; void WillCallGLFromSkia() override; void DidCallGLFromSkia() override;
diff --git a/gpu/command_buffer/client/raster_implementation_gles_unittest.cc b/gpu/command_buffer/client/raster_implementation_gles_unittest.cc index c29c2502..e9f95f40 100644 --- a/gpu/command_buffer/client/raster_implementation_gles_unittest.cc +++ b/gpu/command_buffer/client/raster_implementation_gles_unittest.cc
@@ -237,7 +237,7 @@ return false; } bool HasGrContextSupport() const override { return false; } - void SetGrContext(GrContext* gr) override {} + void SetGrContext(GrDirectContext* gr) override {} void WillCallGLFromSkia() override {} void DidCallGLFromSkia() override {} void SetDisplayTransform(gfx::OverlayTransform transform) override {}
diff --git a/gpu/command_buffer/common/skia_utils.cc b/gpu/command_buffer/common/skia_utils.cc index 07070c76..4ff0762 100644 --- a/gpu/command_buffer/common/skia_utils.cc +++ b/gpu/command_buffer/common/skia_utils.cc
@@ -11,7 +11,7 @@ #include "base/trace_event/process_memory_dump.h" #include "build/build_config.h" #include "third_party/skia/include/core/SkTraceMemoryDump.h" -#include "third_party/skia/include/gpu/GrContext.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" #include "ui/gl/trace_util.h" namespace gpu { @@ -135,7 +135,7 @@ } // namespace -void DumpGrMemoryStatistics(const GrContext* context, +void DumpGrMemoryStatistics(const GrDirectContext* context, base::trace_event::ProcessMemoryDump* pmd, base::Optional<uint64_t> tracing_guid) { SkiaGpuTraceMemoryDump trace_memory_dump(pmd, tracing_guid); @@ -143,7 +143,7 @@ } void DumpBackgroundGrMemoryStatistics( - const GrContext* context, + const GrDirectContext* context, base::trace_event::ProcessMemoryDump* pmd) { using base::trace_event::MemoryAllocatorDump;
diff --git a/gpu/command_buffer/common/skia_utils.h b/gpu/command_buffer/common/skia_utils.h index f523af3..6508d79 100644 --- a/gpu/command_buffer/common/skia_utils.h +++ b/gpu/command_buffer/common/skia_utils.h
@@ -10,7 +10,7 @@ #include "base/optional.h" #include "gpu/raster_export.h" -class GrContext; +class GrDirectContext; namespace base { namespace trace_event { @@ -24,14 +24,14 @@ // Dumps memory usage from the |context| to |pmd|. A |tracing_guid| can be used // if these resources are referenced across processes for sharing across dumps. RASTER_EXPORT void DumpGrMemoryStatistics( - const GrContext* context, + const GrDirectContext* context, base::trace_event::ProcessMemoryDump* pmd, base::Optional<uint64_t> tracing_guid); // Dumps a single"skia/grpu_resources/context_0x{&context}" entry with total // cache usage. Designed for background dumps. RASTER_EXPORT void DumpBackgroundGrMemoryStatistics( - const GrContext* context, + const GrDirectContext* context, base::trace_event::ProcessMemoryDump* pmd); } // namespace raster
diff --git a/gpu/command_buffer/service/external_vk_image_backing.cc b/gpu/command_buffer/service/external_vk_image_backing.cc index d1e8218..515e302 100644 --- a/gpu/command_buffer/service/external_vk_image_backing.cc +++ b/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -146,7 +146,7 @@ return true; } -void WaitSemaphoresOnGrContext(GrContext* gr_context, +void WaitSemaphoresOnGrContext(GrDirectContext* gr_context, std::vector<ExternalSemaphore>* semaphores) { std::vector<GrBackendSemaphore> backend_senampres; backend_senampres.reserve(semaphores->size());
diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc index eb23424..5e44470 100644 --- a/gpu/command_buffer/service/shared_context_state.cc +++ b/gpu/command_buffer/service/shared_context_state.cc
@@ -78,15 +78,15 @@ } } -SharedContextState::MemoryTracker::MemoryTracker( +SharedContextState::MemoryTrackerObserver::MemoryTrackerObserver( base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor) : peak_memory_monitor_(peak_memory_monitor) {} -SharedContextState::MemoryTracker::~MemoryTracker() { +SharedContextState::MemoryTrackerObserver::~MemoryTrackerObserver() { DCHECK(!size_); } -void SharedContextState::MemoryTracker::OnMemoryAllocatedChange( +void SharedContextState::MemoryTrackerObserver::OnMemoryAllocatedChange( CommandBufferId id, uint64_t old_size, uint64_t new_size, @@ -100,6 +100,45 @@ } } +base::AtomicSequenceNumber g_next_command_buffer_id; + +SharedContextState::MemoryTracker::MemoryTracker(Observer* observer) + : command_buffer_id_(gpu::CommandBufferId::FromUnsafeValue( + g_next_command_buffer_id.GetNext() + 1)), + client_tracing_id_(base::trace_event::MemoryDumpManager::GetInstance() + ->GetTracingProcessId()), + observer_(observer) {} + +SharedContextState::MemoryTracker::~MemoryTracker() { + DCHECK(!size_); +} + +void SharedContextState::MemoryTracker::TrackMemoryAllocatedChange( + int64_t delta) { + DCHECK(delta >= 0 || size_ >= static_cast<uint64_t>(-delta)); + uint64_t old_size = size_; + size_ += delta; + DCHECK(observer_); + observer_->OnMemoryAllocatedChange(command_buffer_id_, old_size, size_, + gpu::GpuPeakMemoryAllocationSource::SKIA); +} + +uint64_t SharedContextState::MemoryTracker::GetSize() const { + return size_; +} + +uint64_t SharedContextState::MemoryTracker::ClientTracingId() const { + return client_tracing_id_; +} + +int SharedContextState::MemoryTracker::ClientId() const { + return gpu::ChannelIdFromCommandBufferId(command_buffer_id_); +} + +uint64_t SharedContextState::MemoryTracker::ContextGroupTracingId() const { + return command_buffer_id_.GetUnsafeValue(); +} + SharedContextState::SharedContextState( scoped_refptr<gl::GLShareGroup> share_group, scoped_refptr<gl::GLSurface> surface, @@ -114,7 +153,9 @@ : use_virtualized_gl_contexts_(use_virtualized_gl_contexts), context_lost_callback_(std::move(context_lost_callback)), gr_context_type_(gr_context_type), - memory_tracker_(peak_memory_monitor), + memory_tracker_observer_(peak_memory_monitor), + memory_tracker_(&memory_tracker_observer_), + memory_type_tracker_(&memory_tracker_), vk_context_provider_(vulkan_context_provider), metal_context_provider_(metal_context_provider), dawn_context_provider_(dawn_context_provider), @@ -172,7 +213,6 @@ // Initialize the scratch buffer to some small initial size. scratch_deserialization_buffer_.resize( kInitialScratchDeserializationBufferSize); - } SharedContextState::~SharedContextState() { @@ -195,8 +235,8 @@ DCHECK(!owned_gr_context_ || owned_gr_context_->unique()); // GPU memory allocations except skia_gr_cache_size_ tracked by this - // memory_tracker_ should have been released. - DCHECK_EQ(skia_gr_cache_size_, memory_tracker_.GetMemoryUsage()); + // memory_tracker_observer_ should have been released. + DCHECK_EQ(skia_gr_cache_size_, memory_tracker_observer_.GetMemoryUsage()); // gr_context_ and all resources owned by it will be released soon, so set it // to null, and UpdateSkiaOwnedMemorySize() will update skia memory usage to // 0, to ensure that PeakGpuMemoryMonitor sees 0 allocated memory. @@ -511,6 +551,9 @@ return context_->IsCurrent(surface); } +// TODO(https://crbug.com/1110357): Account for memory tracked by +// memory_tracker_ and memory_type_tracker_ (e.g. SharedImages allocated in +// SkiaOutputSurfaceImplOnGpu::CopyOutput). bool SharedContextState::OnMemoryDump( const base::trace_event::MemoryDumpArgs& args, base::trace_event::ProcessMemoryDump* pmd) { @@ -574,13 +617,13 @@ uint64_t SharedContextState::GetMemoryUsage() { UpdateSkiaOwnedMemorySize(); - return memory_tracker_.GetMemoryUsage(); + return memory_tracker_observer_.GetMemoryUsage(); } void SharedContextState::UpdateSkiaOwnedMemorySize() { if (!gr_context_) { - memory_tracker_.OnMemoryAllocatedChange(CommandBufferId(), - skia_gr_cache_size_, 0u); + memory_tracker_observer_.OnMemoryAllocatedChange(CommandBufferId(), + skia_gr_cache_size_, 0u); skia_gr_cache_size_ = 0u; return; } @@ -589,7 +632,7 @@ // Skia does not have a CommandBufferId. PeakMemoryMonitor currently does not // use CommandBufferId to identify source, so use zero here to separate // prevent confusion. - memory_tracker_.OnMemoryAllocatedChange( + memory_tracker_observer_.OnMemoryAllocatedChange( CommandBufferId(), skia_gr_cache_size_, static_cast<uint64_t>(new_size)); skia_gr_cache_size_ = static_cast<uint64_t>(new_size); }
diff --git a/gpu/command_buffer/service/shared_context_state.h b/gpu/command_buffer/service/shared_context_state.h index 21d8e16..415feeba 100644 --- a/gpu/command_buffer/service/shared_context_state.h +++ b/gpu/command_buffer/service/shared_context_state.h
@@ -24,6 +24,7 @@ #include "gpu/command_buffer/service/memory_tracking.h" #include "gpu/config/gpu_preferences.h" #include "gpu/gpu_gles2_export.h" +#include "gpu/ipc/common/command_buffer_id.h" #include "gpu/ipc/common/gpu_peak_memory.h" #include "gpu/vulkan/buildflags.h" #include "third_party/skia/include/core/SkSurface.h" @@ -153,7 +154,13 @@ bool support_vulkan_external_object() const { return support_vulkan_external_object_; } - gpu::MemoryTracker::Observer* memory_tracker() { return &memory_tracker_; } + gpu::MemoryTracker::Observer* memory_tracker_observer() { + return &memory_tracker_observer_; + } + gpu::MemoryTracker* memory_tracker() { return &memory_tracker_; } + gpu::MemoryTypeTracker* memory_type_tracker() { + return &memory_type_tracker_; + } ExternalSemaphorePool* external_semaphore_pool() { #if BUILDFLAG(ENABLE_VULKAN) return external_semaphore_pool_.get(); @@ -213,13 +220,14 @@ // Observer which is notified when SkiaOutputSurfaceImpl takes ownership of a // shared image, and forward information to both histograms and task manager. - class GPU_GLES2_EXPORT MemoryTracker : public gpu::MemoryTracker::Observer { + class GPU_GLES2_EXPORT MemoryTrackerObserver + : public gpu::MemoryTracker::Observer { public: - explicit MemoryTracker( + explicit MemoryTrackerObserver( base::WeakPtr<gpu::MemoryTracker::Observer> peak_memory_monitor); - MemoryTracker(MemoryTracker&) = delete; - MemoryTracker& operator=(MemoryTracker&) = delete; - ~MemoryTracker() override; + MemoryTrackerObserver(MemoryTrackerObserver&) = delete; + MemoryTrackerObserver& operator=(MemoryTrackerObserver&) = delete; + ~MemoryTrackerObserver() override; // gpu::MemoryTracker::Observer implementation: void OnMemoryAllocatedChange( @@ -237,6 +245,29 @@ base::WeakPtr<gpu::MemoryTracker::Observer> const peak_memory_monitor_; }; + // MemoryTracker implementation used to track SharedImages owned by + // SkiaOutputSurfaceImpl. + class MemoryTracker : public gpu::MemoryTracker { + public: + explicit MemoryTracker(gpu::MemoryTracker::Observer* observer); + MemoryTracker(const MemoryTracker&) = delete; + MemoryTracker& operator=(const MemoryTracker&) = delete; + ~MemoryTracker() override; + + // MemoryTracker implementation: + void TrackMemoryAllocatedChange(int64_t delta) override; + uint64_t GetSize() const override; + uint64_t ClientTracingId() const override; + int ClientId() const override; + uint64_t ContextGroupTracingId() const override; + + private: + gpu::CommandBufferId command_buffer_id_; + const uint64_t client_tracing_id_; + gpu::MemoryTracker::Observer* const observer_; + uint64_t size_ = 0; + }; + ~SharedContextState() override; // gpu::GLContextVirtualDelegate implementation. @@ -263,7 +294,9 @@ bool support_vulkan_external_object_ = false; ContextLostCallback context_lost_callback_; GrContextType gr_context_type_ = GrContextType::kGL; + MemoryTrackerObserver memory_tracker_observer_; MemoryTracker memory_tracker_; + gpu::MemoryTypeTracker memory_type_tracker_; viz::VulkanContextProvider* const vk_context_provider_; viz::MetalContextProvider* const metal_context_provider_; viz::DawnContextProvider* const dawn_context_provider_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc index e58b7def..ba1ea3ff 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_ahardwarebuffer_unittest.cc
@@ -26,6 +26,7 @@ #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrBackendSemaphore.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" #include "ui/gfx/color_space.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context.h" @@ -73,7 +74,7 @@ &shared_image_manager_, nullptr); } - GrContext* gr_context() { return context_state_->gr_context(); } + GrDirectContext* gr_context() { return context_state_->gr_context(); } protected: scoped_refptr<gl::GLSurface> surface_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc index 45461e9b..c5ed569 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_d3d_unittest.cc
@@ -403,7 +403,7 @@ } protected: - GrContext* gr_context() const { return context_state_->gr_context(); } + GrDirectContext* gr_context() const { return context_state_->gr_context(); } void CheckSkiaPixels(const Mailbox& mailbox, const gfx::Size& size,
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc index 6694c8ae..0fbb0f60 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_gl_texture_unittest.cc
@@ -34,6 +34,7 @@ #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrBackendSemaphore.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" #include "ui/gfx/buffer_format_util.h" #include "ui/gfx/color_space.h" #include "ui/gl/buffer_format_utils.h" @@ -119,7 +120,7 @@ viz::ResourceFormat get_format() { return std::get<1>(GetParam()); } - GrContext* gr_context() { return context_state_->gr_context(); } + GrDirectContext* gr_context() { return context_state_->gr_context(); } protected: scoped_refptr<gl::GLSurface> surface_;
diff --git a/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc b/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc index 3c705e2..5bf507c 100644 --- a/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc +++ b/gpu/command_buffer/service/shared_image_backing_factory_iosurface_unittest.cc
@@ -75,7 +75,7 @@ &shared_image_manager_, nullptr); } - GrContext* gr_context() { return context_state_->gr_context(); } + GrDirectContext* gr_context() { return context_state_->gr_context(); } protected: scoped_refptr<gl::GLSurface> surface_;
diff --git a/gpu/command_buffer/service/shared_image_representation.cc b/gpu/command_buffer/service/shared_image_representation.cc index 369a673..52206ad 100644 --- a/gpu/command_buffer/service/shared_image_representation.cc +++ b/gpu/command_buffer/service/shared_image_representation.cc
@@ -7,6 +7,7 @@ #include "components/viz/common/resources/resource_format_utils.h" #include "gpu/command_buffer/service/texture_manager.h" #include "third_party/skia/include/core/SkPromiseImageTexture.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" namespace gpu { @@ -155,7 +156,7 @@ } sk_sp<SkImage> SharedImageRepresentationSkia::ScopedReadAccess::CreateSkImage( - GrContext* context) const { + GrDirectContext* context) const { auto surface_origin = representation()->surface_origin(); auto color_type = viz::ResourceFormatToClosestSkColorType(true, representation()->format());
diff --git a/gpu/command_buffer/service/shared_image_representation.h b/gpu/command_buffer/service/shared_image_representation.h index c309b90..48157da 100644 --- a/gpu/command_buffer/service/shared_image_representation.h +++ b/gpu/command_buffer/service/shared_image_representation.h
@@ -258,7 +258,7 @@ SkPromiseImageTexture* promise_image_texture() const { return promise_image_texture_.get(); } - sk_sp<SkImage> CreateSkImage(GrContext* context) const; + sk_sp<SkImage> CreateSkImage(GrDirectContext* context) const; GrBackendSurfaceMutableState* end_state() const { return end_state_.get(); } private:
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc index 1954b772..6468ab50 100644 --- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc +++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.cc
@@ -8,7 +8,7 @@ #include "gpu/skia_bindings/grcontext_for_gles2_interface.h" #include "third_party/khronos/GLES2/gl2ext.h" -#include "third_party/skia/include/gpu/GrContext.h" +#include "third_party/skia/include/gpu/GrDirectContext.h" namespace skia_bindings { @@ -43,7 +43,8 @@ } } -void GLES2ImplementationWithGrContextSupport::SetGrContext(GrContext* gr) { +void GLES2ImplementationWithGrContextSupport::SetGrContext( + GrDirectContext* gr) { DCHECK(!gr || !gr_context_); // Cant have multiple linked GrContexts gr_context_ = gr; }
diff --git a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h index 2538ac3..0601d3f4 100644 --- a/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h +++ b/gpu/skia_bindings/gles2_implementation_with_grcontext_support.h
@@ -7,7 +7,7 @@ #ifndef GPU_SKIA_BINDINGS_GLES2_IMPLEMENTATION_WITH_GRCONTEXT_SUPPORT_H_ #define GPU_SKIA_BINDINGS_GLES2_IMPLEMENTATION_WITH_GRCONTEXT_SUPPORT_H_ -class GrContext; +class GrDirectContext; namespace skia_bindings { @@ -29,7 +29,7 @@ void WillCallGLFromSkia() override; void DidCallGLFromSkia() override; - void SetGrContext(GrContext* gr) override; + void SetGrContext(GrDirectContext* gr) override; bool HasGrContextSupport() const override; // Overrides for GLES2 calls that invalidate state that is tracked by skia @@ -179,7 +179,7 @@ void WillEnableOrDisable(GLenum cap); void ResetGrContextIfNeeded(uint32_t dirty_bits); - GrContext* gr_context_ = nullptr; + GrDirectContext* gr_context_ = nullptr; bool using_gl_from_skia_ = false; };
diff --git a/gpu/skia_bindings/grcontext_for_gles2_interface.h b/gpu/skia_bindings/grcontext_for_gles2_interface.h index 8f44513..2f5431141 100644 --- a/gpu/skia_bindings/grcontext_for_gles2_interface.h +++ b/gpu/skia_bindings/grcontext_for_gles2_interface.h
@@ -9,8 +9,6 @@ #include "third_party/skia/include/core/SkRefCnt.h" #include "third_party/skia/include/gpu/GrContextOptions.h" -class GrContext; - namespace gpu { struct Capabilities; class ContextSupport;
diff --git a/infra/config/generated/commit-queue.cfg b/infra/config/generated/commit-queue.cfg index 98c9961..2fe9878 100644 --- a/infra/config/generated/commit-queue.cfg +++ b/infra/config/generated/commit-queue.cfg
@@ -255,8 +255,7 @@ } builders { name: "chromium/try/android-pie-arm64-rel" - location_regexp: ".*" - location_regexp_exclude: "infra/config/.+" + includable_only: true } builders { name: "chromium/try/android-pie-x86-rel" @@ -964,7 +963,8 @@ } builders { name: "chromium/try/linux-lacros-compile-rel" - includable_only: true + location_regexp: ".*" + location_regexp_exclude: "infra/config/.+" } builders { name: "chromium/try/linux-lacros-fyi-rel" @@ -1562,8 +1562,7 @@ } builders { name: "chromium/try-m84/android-pie-arm64-rel" - location_regexp: ".*" - location_regexp_exclude: "infra/config/.+" + includable_only: true } builders { name: "chromium/try-m84/android_compile_dbg" @@ -2017,8 +2016,7 @@ } builders { name: "chromium/try-m85/android-pie-arm64-rel" - location_regexp: ".*" - location_regexp_exclude: "infra/config/.+" + includable_only: true } builders { name: "chromium/try-m85/android_compile_dbg"
diff --git a/infra/config/generated/cq-builders.md b/infra/config/generated/cq-builders.md index fb0c60ae..3d905922 100644 --- a/infra/config/generated/cq-builders.md +++ b/infra/config/generated/cq-builders.md
@@ -23,8 +23,6 @@ * [android-marshmallow-arm64-rel](https://ci.chromium.org/p/chromium/builders/try/android-marshmallow-arm64-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android-marshmallow-arm64-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android-marshmallow-arm64-rel)) -* [android-pie-arm64-rel](https://ci.chromium.org/p/chromium/builders/try/android-pie-arm64-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android-pie-arm64-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android-pie-arm64-rel)) - * [android_compile_dbg](https://ci.chromium.org/p/chromium/builders/try/android_compile_dbg) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android_compile_dbg)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android_compile_dbg)) * [android_cronet](https://ci.chromium.org/p/chromium/builders/try/android_cronet) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+android_cronet)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+android_cronet)) @@ -51,6 +49,8 @@ * [linux-chromeos-rel](https://ci.chromium.org/p/chromium/builders/try/linux-chromeos-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-chromeos-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-chromeos-rel)) +* [linux-lacros-compile-rel](https://ci.chromium.org/p/chromium/builders/try/linux-lacros-compile-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-lacros-compile-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-lacros-compile-rel)) + * [linux-libfuzzer-asan-rel](https://ci.chromium.org/p/chromium/builders/try/linux-libfuzzer-asan-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-libfuzzer-asan-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-libfuzzer-asan-rel)) * [linux-ozone-rel](https://ci.chromium.org/p/chromium/builders/try/linux-ozone-rel) ([definition](https://cs.chromium.org/search?q=package:%5Echromium$+file:/cq.star$+-file:/beta/+-file:/stable/+linux-ozone-rel)) ([matching builders](https://cs.chromium.org/search?q=+file:trybots.py+linux-ozone-rel))
diff --git a/infra/config/subprojects/chromium/master-only/try.star b/infra/config/subprojects/chromium/master-only/try.star index 08bfba4..780714d 100644 --- a/infra/config/subprojects/chromium/master-only/try.star +++ b/infra/config/subprojects/chromium/master-only/try.star
@@ -281,6 +281,7 @@ try_.chromium_chromiumos_builder( name = "linux-lacros-compile-rel", + tryjob = try_.job(), ) try_.chromium_chromiumos_builder(
diff --git a/infra/config/subprojects/chromium/try.star b/infra/config/subprojects/chromium/try.star index 8eca8c5d..523542d 100644 --- a/infra/config/subprojects/chromium/try.star +++ b/infra/config/subprojects/chromium/try.star
@@ -158,7 +158,9 @@ cores = 16, goma_jobs = goma.jobs.J300, ssd = True, - tryjob = try_.job(), + # TODO(crbug.com/1111436): Enable on CQ once the maintenance for + # Pixel 2 devices are finished. + #tryjob = try_.job(), ) try_.chromium_android_builder(
diff --git a/infra/config/subprojects/chromium/versioned/m84/buckets/try.star b/infra/config/subprojects/chromium/versioned/m84/buckets/try.star index 039fcd8d..c28987e 100644 --- a/infra/config/subprojects/chromium/versioned/m84/buckets/try.star +++ b/infra/config/subprojects/chromium/versioned/m84/buckets/try.star
@@ -122,7 +122,9 @@ cores = 16, goma_jobs = goma.jobs.J300, ssd = True, - tryjob = try_.job(), + # TODO(crbug.com/1111436): Enable on CQ once the maintenance for + # Pixel 2 devices are finished. + #tryjob = try_.job(), ) try_.chromium_android_builder(
diff --git a/infra/config/subprojects/chromium/versioned/m85/buckets/try.star b/infra/config/subprojects/chromium/versioned/m85/buckets/try.star index 83c435e..a065e2b9 100644 --- a/infra/config/subprojects/chromium/versioned/m85/buckets/try.star +++ b/infra/config/subprojects/chromium/versioned/m85/buckets/try.star
@@ -127,7 +127,9 @@ cores = 16, goma_jobs = goma.jobs.J300, ssd = True, - tryjob = try_.job(), + # TODO(crbug.com/1111436): Enable on CQ once the maintenance for + # Pixel 2 devices are finished. + #tryjob = try_.job(), ) try_.chromium_android_builder(
diff --git a/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm b/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm index f98793a..389f779 100644 --- a/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm +++ b/ios/chrome/browser/app_launcher/app_launcher_tab_helper_unittest.mm
@@ -444,8 +444,8 @@ web_state_.SetBrowserState(enterprise_policy_helper_->GetBrowserState()); policy::PolicyMap policy_map; - base::Value value(base::Value::Type::LIST); - value.Append("itms-apps://*"); + auto value = std::make_unique<base::Value>(base::Value::Type::LIST); + value->Append("itms-apps://*"); policy_map.Set(policy::key::kURLBlocklist, policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_CLOUD, std::move(value), nullptr);
diff --git a/ios/chrome/browser/policy/BUILD.gn b/ios/chrome/browser/policy/BUILD.gn index 05bc222..fad91653 100644 --- a/ios/chrome/browser/policy/BUILD.gn +++ b/ios/chrome/browser/policy/BUILD.gn
@@ -4,16 +4,24 @@ source_set("policy") { sources = [ + "browser_dm_token_storage_ios.h", + "browser_dm_token_storage_ios.mm", "browser_policy_connector_ios.h", "browser_policy_connector_ios.mm", "browser_state_policy_connector.h", "browser_state_policy_connector.mm", "browser_state_policy_connector_factory.h", "browser_state_policy_connector_factory.mm", + "chrome_browser_cloud_management_controller_ios.h", + "chrome_browser_cloud_management_controller_ios.mm", "configuration_policy_handler_list_factory.h", "configuration_policy_handler_list_factory.mm", + "device_management_service_configuration_ios.h", + "device_management_service_configuration_ios.mm", "policy_conversions_client_ios.h", "policy_conversions_client_ios.mm", + "reporting/reporting_delegate_factory_ios.h", + "reporting/reporting_delegate_factory_ios.mm", "schema_registry_factory.h", "schema_registry_factory.mm", ] @@ -33,6 +41,7 @@ "//components/translate/core/browser:translate_pref_names", "//components/variations", "//components/variations/service", + "//components/version_info:version_info", "//ios/chrome/browser", "//ios/chrome/browser:pref_names", "//ios/chrome/browser/browser_state",
diff --git a/ios/chrome/browser/policy/browser_dm_token_storage_ios.h b/ios/chrome/browser/policy/browser_dm_token_storage_ios.h new file mode 100644 index 0000000..a3db721 --- /dev/null +++ b/ios/chrome/browser/policy/browser_dm_token_storage_ios.h
@@ -0,0 +1,45 @@ +// 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 IOS_CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_IOS_H_ +#define IOS_CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_IOS_H_ + +#include "components/enterprise/browser/controller/browser_dm_token_storage.h" + +#include <string> + +#include "base/gtest_prod_util.h" +#include "base/macros.h" +#include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "base/single_thread_task_runner.h" + +namespace policy { + +// Implementation of BrowserDMTokenStorage delegate for iOS. +class BrowserDMTokenStorageIOS : public BrowserDMTokenStorage::Delegate { + public: + BrowserDMTokenStorageIOS(); + BrowserDMTokenStorageIOS(const BrowserDMTokenStorageIOS&) = delete; + BrowserDMTokenStorageIOS& operator=(const BrowserDMTokenStorageIOS&) = delete; + ~BrowserDMTokenStorageIOS() override; + + private: + // BrowserDMTokenStorage::Delegate implementation. + std::string InitClientId() override; + std::string InitEnrollmentToken() override; + std::string InitDMToken() override; + bool InitEnrollmentErrorOption() override; + BrowserDMTokenStorage::StoreTask SaveDMTokenTask( + const std::string& token, + const std::string& client_id) override; + scoped_refptr<base::TaskRunner> SaveDMTokenTaskRunner() override; + + scoped_refptr<base::TaskRunner> task_runner_; +}; + +} // namespace policy + +#endif // IOS_CHROME_BROWSER_POLICY_BROWSER_DM_TOKEN_STORAGE_IOS_H_
diff --git a/ios/chrome/browser/policy/browser_dm_token_storage_ios.mm b/ios/chrome/browser/policy/browser_dm_token_storage_ios.mm new file mode 100644 index 0000000..662d59e --- /dev/null +++ b/ios/chrome/browser/policy/browser_dm_token_storage_ios.mm
@@ -0,0 +1,100 @@ +// 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 "ios/chrome/browser/policy/browser_dm_token_storage_ios.h" + +#include "base/base64url.h" +#include "base/files/file_util.h" +#include "base/files/important_file_writer.h" +#include "base/hash/sha1.h" +#include "base/path_service.h" +#include "base/task/post_task.h" +#include "base/task/thread_pool.h" +#include "ios/chrome/browser/file_metadata_util.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace policy { + +namespace { + +const char kDmTokenBaseDir[] = + FILE_PATH_LITERAL("Google/Chrome Cloud Enrollment/"); + +bool GetDmTokenFilePath(base::FilePath* token_file_path, + const std::string& client_id, + bool create_dir) { + if (!base::PathService::Get(base::DIR_APP_DATA, token_file_path)) + return false; + + *token_file_path = token_file_path->Append(kDmTokenBaseDir); + + if (create_dir && !base::CreateDirectory(*token_file_path)) + return false; + + std::string filename; + base::Base64UrlEncode(base::SHA1HashString(client_id), + base::Base64UrlEncodePolicy::OMIT_PADDING, &filename); + *token_file_path = token_file_path->Append(filename.c_str()); + + return true; +} + +bool StoreDMTokenInDirAppDataDir(const std::string& token, + const std::string& client_id) { + base::FilePath token_file_path; + if (!GetDmTokenFilePath(&token_file_path, client_id, true)) { + NOTREACHED(); + return false; + } + + if (!base::ImportantFileWriter::WriteFileAtomically(token_file_path, token)) { + return false; + } + + SetSkipSystemBackupAttributeToItem(token_file_path, true); + return true; +} + +} // namespace + +BrowserDMTokenStorageIOS::BrowserDMTokenStorageIOS() + : task_runner_(base::ThreadPool::CreateTaskRunner({base::MayBlock()})) {} + +BrowserDMTokenStorageIOS::~BrowserDMTokenStorageIOS() {} + +std::string BrowserDMTokenStorageIOS::InitClientId() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return ""; +} + +std::string BrowserDMTokenStorageIOS::InitEnrollmentToken() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return ""; +} + +std::string BrowserDMTokenStorageIOS::InitDMToken() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return ""; +} + +bool BrowserDMTokenStorageIOS::InitEnrollmentErrorOption() { + // No error should be shown if enrollment fails on iOS. + return false; +} + +BrowserDMTokenStorage::StoreTask BrowserDMTokenStorageIOS::SaveDMTokenTask( + const std::string& token, + const std::string& client_id) { + return base::BindOnce(&StoreDMTokenInDirAppDataDir, token, client_id); +} + +scoped_refptr<base::TaskRunner> +BrowserDMTokenStorageIOS::SaveDMTokenTaskRunner() { + return task_runner_; +} + +} // namespace policy
diff --git a/ios/chrome/browser/policy/browser_policy_connector_ios.h b/ios/chrome/browser/policy/browser_policy_connector_ios.h index 7ebf67c7..7627d864 100644 --- a/ios/chrome/browser/policy/browser_policy_connector_ios.h +++ b/ios/chrome/browser/policy/browser_policy_connector_ios.h
@@ -10,6 +10,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" +#include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h" #include "components/policy/core/browser/browser_policy_connector.h" namespace network { @@ -18,11 +19,17 @@ namespace policy { class ConfigurationPolicyProvider; +class ChromeBrowserCloudManagementController; +class MachineLevelUserCloudPolicyManager; } // namespace policy // Extends BrowserPolicyConnector with the setup for iOS builds. class BrowserPolicyConnectorIOS : public policy::BrowserPolicyConnector { public: + // Service initialization delay time in millisecond on startup. (So that + // displaying Chrome's GUI does not get delayed.) + static const int64_t kServiceInitializationStartupDelay = 5000; + BrowserPolicyConnectorIOS( const policy::HandlerListFactory& handler_list_factory); @@ -33,12 +40,23 @@ // BrowserPolicyConnectorBase::SetPolicyProviderForTesting(). policy::ConfigurationPolicyProvider* GetPlatformProvider(); + policy::ChromeBrowserCloudManagementController* + chrome_browser_cloud_management_controller() { + return chrome_browser_cloud_management_controller_.get(); + } + + policy::MachineLevelUserCloudPolicyManager* + machine_level_user_cloud_policy_manager() { + return machine_level_user_cloud_policy_manager_; + } + // BrowserPolicyConnector. void Init(PrefService* local_state, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) override; bool IsEnterpriseManaged() const override; bool HasMachineLevelPolicies() override; + void Shutdown() override; protected: // BrowserPolicyConnectorBase. @@ -51,6 +69,11 @@ // Owned by base class. policy::ConfigurationPolicyProvider* platform_provider_ = nullptr; + std::unique_ptr<policy::ChromeBrowserCloudManagementController> + chrome_browser_cloud_management_controller_; + policy::MachineLevelUserCloudPolicyManager* + machine_level_user_cloud_policy_manager_ = nullptr; + DISALLOW_COPY_AND_ASSIGN(BrowserPolicyConnectorIOS); };
diff --git a/ios/chrome/browser/policy/browser_policy_connector_ios.mm b/ios/chrome/browser/policy/browser_policy_connector_ios.mm index ccf47a7..f096557 100644 --- a/ios/chrome/browser/policy/browser_policy_connector_ios.mm +++ b/ios/chrome/browser/policy/browser_policy_connector_ios.mm
@@ -15,10 +15,14 @@ #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/task/thread_pool.h" +#include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h" #include "components/policy/core/common/async_policy_provider.h" #include "components/policy/core/common/cloud/device_management_service.h" +#include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h" #include "components/policy/core/common/configuration_policy_provider.h" #include "components/policy/core/common/policy_loader_ios.h" +#include "ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h" +#include "ios/chrome/browser/policy/device_management_service_configuration_ios.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #if !defined(__has_feature) || !__has_feature(objc_arc) @@ -35,7 +39,11 @@ BrowserPolicyConnectorIOS::BrowserPolicyConnectorIOS( const HandlerListFactory& handler_list_factory) - : BrowserPolicyConnector(handler_list_factory) {} + : BrowserPolicyConnector(handler_list_factory) { + chrome_browser_cloud_management_controller_ = std::make_unique< + policy::ChromeBrowserCloudManagementController>( + std::make_unique<policy::ChromeBrowserCloudManagementControllerIOS>()); +} BrowserPolicyConnectorIOS::~BrowserPolicyConnectorIOS() {} @@ -48,7 +56,16 @@ void BrowserPolicyConnectorIOS::Init( PrefService* local_state, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { - InitInternal(local_state, /*device_management_service=*/nullptr); + std::unique_ptr<policy::DeviceManagementService::Configuration> configuration( + new policy::DeviceManagementServiceConfigurationIOS( + BrowserPolicyConnector::GetDeviceManagementUrl(), + BrowserPolicyConnector::GetRealtimeReportingUrl())); + std::unique_ptr<policy::DeviceManagementService> device_management_service( + new policy::DeviceManagementService(std::move(configuration))); + device_management_service->ScheduleInitialization( + kServiceInitializationStartupDelay); + + InitInternal(local_state, std::move(device_management_service)); } bool BrowserPolicyConnectorIOS::IsEnterpriseManaged() const { @@ -57,7 +74,16 @@ } bool BrowserPolicyConnectorIOS::HasMachineLevelPolicies() { - return ProviderHasPolicies(GetPlatformProvider()); + return ProviderHasPolicies(GetPlatformProvider()) || + ProviderHasPolicies(machine_level_user_cloud_policy_manager_); +} + +void BrowserPolicyConnectorIOS::Shutdown() { + // Reset the controller before calling base class so that + // shutdown occurs in correct sequence. + chrome_browser_cloud_management_controller_.reset(); + + BrowserPolicyConnector::Shutdown(); } std::vector<std::unique_ptr<policy::ConfigurationPolicyProvider>> @@ -71,6 +97,17 @@ // PlatformProvider should be before all other providers (highest priority). providers.insert(providers.begin(), std::move(platform_provider)); } + + std::unique_ptr<policy::MachineLevelUserCloudPolicyManager> + machine_level_user_cloud_policy_manager = + chrome_browser_cloud_management_controller_->CreatePolicyManager( + platform_provider_); + if (machine_level_user_cloud_policy_manager) { + machine_level_user_cloud_policy_manager_ = + machine_level_user_cloud_policy_manager.get(); + providers.push_back(std::move(machine_level_user_cloud_policy_manager)); + } + return providers; }
diff --git a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h new file mode 100644 index 0000000..7eb9b3c --- /dev/null +++ b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h
@@ -0,0 +1,59 @@ +// 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 IOS_CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_IOS_H_ +#define IOS_CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_IOS_H_ + +#include "components/enterprise/browser/controller/chrome_browser_cloud_management_controller.h" + +#include "ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.h" + +namespace policy { + +// iOS implementation of the platform-specific operations of CBCMController. +class ChromeBrowserCloudManagementControllerIOS + : public ChromeBrowserCloudManagementController::Delegate { + public: + ChromeBrowserCloudManagementControllerIOS(); + ChromeBrowserCloudManagementControllerIOS( + const ChromeBrowserCloudManagementControllerIOS&) = delete; + ChromeBrowserCloudManagementControllerIOS& operator=( + const ChromeBrowserCloudManagementControllerIOS&) = delete; + + ~ChromeBrowserCloudManagementControllerIOS() override; + + // ChromeBrowserCloudManagementController::Delegate implementation. + void SetDMTokenStorageDelegate() override; + bool IsEnabled() override; + int GetUserDataDirKey() override; + base::FilePath GetExternalPolicyPath() override; + NetworkConnectionTrackerGetter CreateNetworkConnectionTrackerGetter() + override; + void InitializeOAuthTokenFactory( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + PrefService* local_state) override; + void StartWatchingRegistration( + ChromeBrowserCloudManagementController* controller) override; + bool WaitUntilPolicyEnrollmentFinished() override; + bool IsEnterpriseStartupDialogShowing() override; + void OnServiceAccountSet(CloudPolicyClient* client, + const std::string& account_email) override; + void ShutDown() override; + MachineLevelUserCloudPolicyManager* GetMachineLevelUserCloudPolicyManager() + override; + DeviceManagementService* GetDeviceManagementService() override; + scoped_refptr<network::SharedURLLoaderFactory> GetSharedURLLoaderFactory() + override; + std::unique_ptr<enterprise_reporting::ReportScheduler> CreateReportScheduler( + CloudPolicyClient* client) override; + void SetGaiaURLLoaderFactory(scoped_refptr<network::SharedURLLoaderFactory> + url_loader_factory) override; + + private: + enterprise_reporting::ReportingDelegateFactoryIOS reporting_delegate_factory_; +}; + +} // namespace policy + +#endif // IOS_CHROME_BROWSER_POLICY_CHROME_BROWSER_CLOUD_MANAGEMENT_CONTROLLER_IOS_H_
diff --git a/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm new file mode 100644 index 0000000..dad73f4 --- /dev/null +++ b/ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.mm
@@ -0,0 +1,121 @@ +// 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 "ios/chrome/browser/policy/chrome_browser_cloud_management_controller_ios.h" + +#include "base/bind.h" +#include "components/policy/core/common/cloud/machine_level_user_cloud_policy_manager.h" +#include "components/policy/core/common/features.h" +#include "ios/chrome/browser/application_context.h" +#include "ios/chrome/browser/chrome_paths.h" +#include "ios/chrome/browser/policy/browser_dm_token_storage_ios.h" +#include "ios/chrome/browser/policy/browser_policy_connector_ios.h" +#include "ios/chrome/browser/policy/policy_features.h" +#include "services/network/public/cpp/shared_url_loader_factory.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace policy { + +ChromeBrowserCloudManagementControllerIOS:: + ChromeBrowserCloudManagementControllerIOS() = default; +ChromeBrowserCloudManagementControllerIOS:: + ~ChromeBrowserCloudManagementControllerIOS() = default; + +void ChromeBrowserCloudManagementControllerIOS::SetDMTokenStorageDelegate() { + BrowserDMTokenStorage::SetDelegate( + std::make_unique<BrowserDMTokenStorageIOS>()); +} + +bool ChromeBrowserCloudManagementControllerIOS::IsEnabled() { + return IsChromeBrowserCloudManagementEnabled(); +} + +int ChromeBrowserCloudManagementControllerIOS::GetUserDataDirKey() { + return ios::DIR_USER_DATA; +} + +base::FilePath +ChromeBrowserCloudManagementControllerIOS::GetExternalPolicyPath() { + // External policies are not supported on iOS. + return base::FilePath(); +} + +ChromeBrowserCloudManagementController::Delegate::NetworkConnectionTrackerGetter +ChromeBrowserCloudManagementControllerIOS:: + CreateNetworkConnectionTrackerGetter() { + return base::BindRepeating(&ApplicationContext::GetNetworkConnectionTracker, + base::Unretained(GetApplicationContext())); +} + +void ChromeBrowserCloudManagementControllerIOS::InitializeOAuthTokenFactory( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + PrefService* local_state) { + // Policy invalidations aren't currently supported on iOS. +} + +void ChromeBrowserCloudManagementControllerIOS::StartWatchingRegistration( + ChromeBrowserCloudManagementController* controller) { + // Enrollment isn't blocking or mandatory on iOS. +} + +bool ChromeBrowserCloudManagementControllerIOS:: + WaitUntilPolicyEnrollmentFinished() { + // Enrollment currently isn't blocking or mandatory on iOS, so this method + // isn't used. Always report success. + return true; +} + +bool ChromeBrowserCloudManagementControllerIOS:: + IsEnterpriseStartupDialogShowing() { + // There is no enterprise startup dialog on iOS. + return false; +} + +void ChromeBrowserCloudManagementControllerIOS::OnServiceAccountSet( + CloudPolicyClient* client, + const std::string& account_email) { + // Policy invalidations aren't currently supported on iOS. +} + +void ChromeBrowserCloudManagementControllerIOS::ShutDown() { + // No additional shutdown to perform on iOS. +} + +MachineLevelUserCloudPolicyManager* ChromeBrowserCloudManagementControllerIOS:: + GetMachineLevelUserCloudPolicyManager() { + return GetApplicationContext() + ->GetBrowserPolicyConnector() + ->machine_level_user_cloud_policy_manager(); +} + +DeviceManagementService* +ChromeBrowserCloudManagementControllerIOS::GetDeviceManagementService() { + return GetApplicationContext() + ->GetBrowserPolicyConnector() + ->device_management_service(); +} + +scoped_refptr<network::SharedURLLoaderFactory> +ChromeBrowserCloudManagementControllerIOS::GetSharedURLLoaderFactory() { + return GetApplicationContext()->GetSharedURLLoaderFactory(); +} + +std::unique_ptr<enterprise_reporting::ReportScheduler> +ChromeBrowserCloudManagementControllerIOS::CreateReportScheduler( + CloudPolicyClient* client) { + auto generator = std::make_unique<enterprise_reporting::ReportGenerator>( + &reporting_delegate_factory_); + return std::make_unique<enterprise_reporting::ReportScheduler>( + client, std::move(generator), &reporting_delegate_factory_); +} + +void ChromeBrowserCloudManagementControllerIOS::SetGaiaURLLoaderFactory( + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { + // Policy invalidations aren't currently supported on iOS. +} + +} // namespace policy \ No newline at end of file
diff --git a/ios/chrome/browser/policy/device_management_service_configuration_ios.h b/ios/chrome/browser/policy/device_management_service_configuration_ios.h new file mode 100644 index 0000000..ecf57472 --- /dev/null +++ b/ios/chrome/browser/policy/device_management_service_configuration_ios.h
@@ -0,0 +1,44 @@ +// 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 IOS_CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_CONFIGURATION_IOS_H_ +#define IOS_CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_CONFIGURATION_IOS_H_ + +#include <string> + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "components/policy/core/common/cloud/device_management_service.h" + +namespace policy { + +// The iOS implementation of the device management service configuration that is +// used to create device management service instances. +class DeviceManagementServiceConfigurationIOS + : public DeviceManagementService::Configuration { + public: + DeviceManagementServiceConfigurationIOS( + const std::string& server_url, + const std::string& reporting_server_url); + DeviceManagementServiceConfigurationIOS( + const DeviceManagementServiceConfigurationIOS&) = delete; + DeviceManagementServiceConfigurationIOS& operator=( + const DeviceManagementServiceConfigurationIOS&) = delete; + ~DeviceManagementServiceConfigurationIOS() override; + + // DeviceManagementService::Configuration implementation. + std::string GetDMServerUrl() override; + std::string GetAgentParameter() override; + std::string GetPlatformParameter() override; + std::string GetReportingServerUrl() override; + std::string GetReportingConnectorServerUrl() override; + + private: + const std::string server_url_; + const std::string reporting_server_url_; +}; + +} // namespace policy + +#endif // IOS_CHROME_BROWSER_POLICY_DEVICE_MANAGEMENT_SERVICE_CONFIGURATION_IOS_H_
diff --git a/ios/chrome/browser/policy/device_management_service_configuration_ios.mm b/ios/chrome/browser/policy/device_management_service_configuration_ios.mm new file mode 100644 index 0000000..3b9eb5c --- /dev/null +++ b/ios/chrome/browser/policy/device_management_service_configuration_ios.mm
@@ -0,0 +1,68 @@ +// 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 "ios/chrome/browser/policy/device_management_service_configuration_ios.h" + +#include <stdint.h> + +#include "base/logging.h" +#include "base/strings/stringprintf.h" +#include "base/system/sys_info.h" +#include "build/build_config.h" +#include "components/policy/core/browser/browser_policy_connector.h" +#include "components/version_info/version_info.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace policy { + +DeviceManagementServiceConfigurationIOS:: + DeviceManagementServiceConfigurationIOS( + const std::string& server_url, + const std::string& reporting_server_url) + : server_url_(server_url), reporting_server_url_(reporting_server_url) {} + +DeviceManagementServiceConfigurationIOS:: + ~DeviceManagementServiceConfigurationIOS() = default; + +std::string DeviceManagementServiceConfigurationIOS::GetDMServerUrl() { + return server_url_; +} + +std::string DeviceManagementServiceConfigurationIOS::GetAgentParameter() { + return base::StringPrintf("%s %s(%s)", version_info::GetProductName().c_str(), + version_info::GetVersionNumber().c_str(), + version_info::GetLastChange().c_str()); +} + +std::string DeviceManagementServiceConfigurationIOS::GetPlatformParameter() { + std::string os_name = base::SysInfo::OperatingSystemName(); + std::string os_hardware = base::SysInfo::OperatingSystemArchitecture(); + + std::string os_version("-"); + + int32_t os_major_version = 0; + int32_t os_minor_version = 0; + int32_t os_bugfix_version = 0; + base::SysInfo::OperatingSystemVersionNumbers( + &os_major_version, &os_minor_version, &os_bugfix_version); + os_version = base::StringPrintf("%d.%d.%d", os_major_version, + os_minor_version, os_bugfix_version); + + return base::StringPrintf("%s|%s|%s", os_name.c_str(), os_hardware.c_str(), + os_version.c_str()); +} + +std::string DeviceManagementServiceConfigurationIOS::GetReportingServerUrl() { + return reporting_server_url_; +} + +std::string +DeviceManagementServiceConfigurationIOS::GetReportingConnectorServerUrl() { + return std::string(); +} + +} // namespace policy
diff --git a/ios/chrome/browser/policy/policy_app_interface.mm b/ios/chrome/browser/policy/policy_app_interface.mm index f809a72..0c6b100d 100644 --- a/ios/chrome/browser/policy/policy_app_interface.mm +++ b/ios/chrome/browser/policy/policy_app_interface.mm
@@ -4,10 +4,7 @@ #import "ios/chrome/browser/policy/policy_app_interface.h" -#include <memory> - #include "base/json/json_string_value_serializer.h" -#include "base/optional.h" #include "base/strings/sys_string_conversions.h" #include "base/values.h" #include "components/policy/core/browser/browser_policy_connector.h" @@ -47,18 +44,15 @@ // Takes a JSON-encoded string representing a |base::Value|, and deserializes // into a |base::Value| pointer. If nullptr is given, returns a pointer to a // |base::Value| of type NONE. -base::Optional<base::Value> DeserializeValue(NSString* json_value) { +std::unique_ptr<base::Value> DeserializeValue(NSString* json_value) { if (!json_value) { - return base::Value(base::Value::Type::NONE); + return std::make_unique<base::Value>(base::Value::Type::NONE); } std::string json = base::SysNSStringToUTF8(json_value); JSONStringValueDeserializer deserializer(json); - std::unique_ptr<base::Value> value = - deserializer.Deserialize(/*error_code=*/nullptr, - /*error_message=*/nullptr); - return value ? base::make_optional<base::Value>(std::move(*value)) - : base::nullopt; + return deserializer.Deserialize(/*error_code=*/nullptr, + /*error_message=*/nullptr); } } @@ -86,7 +80,7 @@ } + (void)setPolicyValue:(NSString*)jsonValue forKey:(NSString*)policyKey { - base::Optional<base::Value> value = DeserializeValue(jsonValue); + std::unique_ptr<base::Value> value = DeserializeValue(jsonValue); policy::PolicyMap values; values.Set(base::SysNSStringToUTF8(policyKey), policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_MACHINE, policy::POLICY_SOURCE_PLATFORM,
diff --git a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm index 86742bc..17f53c4b 100644 --- a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm +++ b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
@@ -40,7 +40,8 @@ // |policy_data| must be in XML format. |policy_data| is passed to the // application regardless of whether |disable_policy| is true or false.. AppLaunchConfiguration GenerateAppLaunchConfiguration(std::string policy_data, - bool disable_policy) { + bool disable_policy, + bool enable_cbcm) { AppLaunchConfiguration config; if (disable_policy) { @@ -51,6 +52,11 @@ switches::kEnableEnterprisePolicy); } + if (enable_cbcm) { + config.additional_args.push_back( + std::string("--") + switches::kEnableChromeBrowserCloudManagement); + } + // Remove whitespace from the policy data, because the XML parser does not // tolerate newlines. base::RemoveChars(policy_data, base::kWhitespaceASCII, &policy_data); @@ -90,7 +96,8 @@ " <key>SearchSuggestEnabled</key>" " <false/>" "</dict>"; - return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/false); + return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/false, + /*enable_cbcm*/ false); } // Tests the values of policies that were explicitly set. @@ -148,7 +155,8 @@ " <key>DefaultSearchProviderName</key>" " <string>Test</string>" "</dict>"; - return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/true); + return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/true, + /*enable_cbcm*/ false); } // Tests that about:policy is not available when policy is disabled. Also serves @@ -169,3 +177,67 @@ } @end + +// Test case that enables CBCM. +@interface CBCMEnabledTestCase : ChromeTestCase +@end + +@implementation CBCMEnabledTestCase + +- (AppLaunchConfiguration)appConfigurationForTestCase { + std::string policyData = "<dict>" + " <key>SearchSuggestEnabled</key>" + " <false/>" + "</dict>"; + return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/false, + /*enable_cbcm=*/true); +} + +// Ensure that policies can still be correctly set, and that the browser is +// working normally by visiting the about:policy page. +- (void)testPoliciesWork { + std::unique_ptr<base::Value> suggestValue = + GetPlatformPolicy(policy::key::kSearchSuggestEnabled); + GREYAssertTrue(suggestValue && suggestValue->is_bool(), + @"suggestValue was not of type bool"); + GREYAssertFalse(suggestValue->GetBool(), + @"suggestValue had an unexpected value"); + + [ChromeEarlGrey loadURL:GURL("chrome://policy")]; + [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8( + IDS_POLICY_SHOW_UNSET)]; +} + +@end + +// Test case that disables CBCM. +@interface CBCMDisabledTestCase : ChromeTestCase +@end + +@implementation CBCMDisabledTestCase + +- (AppLaunchConfiguration)appConfigurationForTestCase { + std::string policyData = "<dict>" + " <key>SearchSuggestEnabled</key>" + " <false/>" + "</dict>"; + return GenerateAppLaunchConfiguration(policyData, /*disable_policy=*/false, + /*enable_cbcm=*/false); +} + +// Ensure that policies can still be correctly set, and that the browser is +// working normally by visiting the about:policy page. +- (void)testPoliciesWork { + std::unique_ptr<base::Value> suggestValue = + GetPlatformPolicy(policy::key::kSearchSuggestEnabled); + GREYAssertTrue(suggestValue && suggestValue->is_bool(), + @"suggestValue was not of type bool"); + GREYAssertFalse(suggestValue->GetBool(), + @"suggestValue had an unexpected value"); + + [ChromeEarlGrey loadURL:GURL("chrome://policy")]; + [ChromeEarlGrey waitForWebStateContainingText:l10n_util::GetStringUTF8( + IDS_POLICY_SHOW_UNSET)]; +} + +@end
diff --git a/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.h b/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.h new file mode 100644 index 0000000..bf1f478f --- /dev/null +++ b/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.h
@@ -0,0 +1,44 @@ +// 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 IOS_CHROME_BROWSER_POLICY_REPORTING_REPORTING_DELEGATE_FACTORY_IOS_H_ +#define IOS_CHROME_BROWSER_POLICY_REPORTING_REPORTING_DELEGATE_FACTORY_IOS_H_ + +#include "components/enterprise/browser/reporting/reporting_delegate_factory.h" + +#include <memory> + +#include "components/enterprise/browser/reporting/browser_report_generator.h" +#include "components/enterprise/browser/reporting/profile_report_generator.h" +#include "components/enterprise/browser/reporting/report_generator.h" +#include "components/enterprise/browser/reporting/report_scheduler.h" + +namespace enterprise_reporting { + +// iOS implementation of the reporting delegate factory. Creates iOS-specific +// delegates for the enterprise reporting classes. +class ReportingDelegateFactoryIOS : public ReportingDelegateFactory { + public: + ReportingDelegateFactoryIOS() = default; + ReportingDelegateFactoryIOS(const ReportingDelegateFactoryIOS&) = delete; + ReportingDelegateFactoryIOS& operator=(const ReportingDelegateFactoryIOS&) = + delete; + ~ReportingDelegateFactoryIOS() override = default; + + std::unique_ptr<BrowserReportGenerator::Delegate> + GetBrowserReportGeneratorDelegate() override; + + std::unique_ptr<ProfileReportGenerator::Delegate> + GetProfileReportGeneratorDelegate() override; + + std::unique_ptr<ReportGenerator::Delegate> GetReportGeneratorDelegate() + override; + + std::unique_ptr<ReportScheduler::Delegate> GetReportSchedulerDelegate() + override; +}; + +} // namespace enterprise_reporting + +#endif // IOS_CHROME_BROWSER_POLICY_REPORTING_REPORTING_DELEGATE_FACTORY_IOS_H_
diff --git a/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.mm b/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.mm new file mode 100644 index 0000000..00d8957 --- /dev/null +++ b/ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.mm
@@ -0,0 +1,37 @@ +// 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 "ios/chrome/browser/policy/reporting/reporting_delegate_factory_ios.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace enterprise_reporting { + +std::unique_ptr<BrowserReportGenerator::Delegate> +ReportingDelegateFactoryIOS::GetBrowserReportGeneratorDelegate() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return nullptr; +} + +std::unique_ptr<ProfileReportGenerator::Delegate> +ReportingDelegateFactoryIOS::GetProfileReportGeneratorDelegate() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return nullptr; +} + +std::unique_ptr<ReportGenerator::Delegate> +ReportingDelegateFactoryIOS::GetReportGeneratorDelegate() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return nullptr; +} + +std::unique_ptr<ReportScheduler::Delegate> +ReportingDelegateFactoryIOS::GetReportSchedulerDelegate() { + // TODO(crbug.com/1066495): Finish iOS CBCM implementation. + return nullptr; +} + +} // namespace enterprise_reporting
diff --git a/ios/chrome/browser/pref_names.cc b/ios/chrome/browser/pref_names.cc index af0cd7f7..dd443512 100644 --- a/ios/chrome/browser/pref_names.cc +++ b/ios/chrome/browser/pref_names.cc
@@ -148,4 +148,6 @@ // zoom level (i.e. 1 means no change, 100%). const char kIosUserZoomMultipliers[] = "ios.user_zoom_multipliers"; +const char kPrintingEnabled[] = "printing.enabled"; + } // namespace prefs
diff --git a/ios/chrome/browser/pref_names.h b/ios/chrome/browser/pref_names.h index b01868ef..e0e5e1e2 100644 --- a/ios/chrome/browser/pref_names.h +++ b/ios/chrome/browser/pref_names.h
@@ -29,6 +29,7 @@ extern const char kIosSettingsSigninPromoDisplayedCount[]; extern const char kLastSessionExitedCleanly[]; extern const char kMetricsReportingWifiOnly[]; +extern const char kPrintingEnabled[]; extern const char kSavingBrowserHistoryDisabled[]; extern const char kSearchSuggestEnabled[];
diff --git a/ios/chrome/browser/prefs/browser_prefs.mm b/ios/chrome/browser/prefs/browser_prefs.mm index 4343b71..f399ca0 100644 --- a/ios/chrome/browser/prefs/browser_prefs.mm +++ b/ios/chrome/browser/prefs/browser_prefs.mm
@@ -223,6 +223,8 @@ registry->RegisterListPref(kInvalidatorSavedInvalidations); registry->RegisterStringPref(kInvalidatorInvalidationState, std::string()); registry->RegisterStringPref(kInvalidatorClientId, std::string()); + + registry->RegisterBooleanPref(prefs::kPrintingEnabled, true); } // This method should be periodically pruned of year+ old migrations.
diff --git a/ios/chrome/browser/ui/activity_services/BUILD.gn b/ios/chrome/browser/ui/activity_services/BUILD.gn index 121729d2..b1d9d6a 100644 --- a/ios/chrome/browser/ui/activity_services/BUILD.gn +++ b/ios/chrome/browser/ui/activity_services/BUILD.gn
@@ -62,6 +62,7 @@ "//components/sync/driver:driver", "//components/ui_metrics", "//ios/chrome/app/strings", + "//ios/chrome/browser:pref_names", "//ios/chrome/browser/bookmarks", "//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/download",
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm b/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm index 83733820..f452108 100644 --- a/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm +++ b/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm
@@ -13,6 +13,7 @@ #include "base/strings/sys_string_conversions.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/prefs/pref_service.h" +#include "ios/chrome/browser/pref_names.h" #include "ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h" #import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/copy_activity.h" @@ -116,9 +117,13 @@ handler:self.handler]; [applicationActivities addObject:requestActivity]; } - PrintActivity* printActivity = - [[PrintActivity alloc] initWithData:data handler:self.handler]; - [applicationActivities addObject:printActivity]; + + if (self.prefService->GetBoolean(prefs::kPrintingEnabled)) { + PrintActivity* printActivity = + [[PrintActivity alloc] initWithData:data handler:self.handler]; + [applicationActivities addObject:printActivity]; + } + return applicationActivities; }
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm b/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm index 8b474457..71b4b7a 100644 --- a/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm +++ b/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm
@@ -6,8 +6,10 @@ #include "base/test/metrics/histogram_tester.h" #include "components/bookmarks/browser/bookmark_model.h" +#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/prefs/testing_pref_service.h" +#include "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/copy_activity.h" #import "ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.h" @@ -56,6 +58,9 @@ qrGenerationHandler:mocked_qr_generation_handler_ prefService:pref_service_.get() bookmarkModel:nil]; + + pref_service_->registry()->RegisterBooleanPref(prefs::kPrintingEnabled, + true); } void VerifyTypes(NSArray* activities, NSArray* expected_types) { @@ -266,3 +271,32 @@ int cancelAction = 1; histograms_tester_.ExpectBucketCount(histogramName, cancelAction, 1); } + +TEST_F(ActivityServiceMediatorTest, PrintPrefDisabled) { + pref_service_->SetUserPref(prefs::kPrintingEnabled, + std::make_unique<base::Value>(false)); + + ShareToData* data = + [[ShareToData alloc] initWithShareURL:GURL("http://example.com") + visibleURL:GURL("http://example.com") + title:@"baz" + isOriginalTitle:YES + isPagePrintable:YES + isPageSearchable:YES + canSendTabToSelf:YES + userAgent:web::UserAgentType::MOBILE + thumbnailGenerator:mocked_thumbnail_generator_]; + + NSArray* activities = [mediator_ applicationActivitiesForData:data]; + + // Verify activities' types. + VerifyTypes(activities, @[ + [CopyActivity class], [SendTabToSelfActivity class], + [ReadingListActivity class], [BookmarkActivity class], + [GenerateQrCodeActivity class], [FindInPageActivity class], + [RequestDesktopOrMobileSiteActivity class] + ]); + + // Verify activities' size. + EXPECT_EQ(7U, [activities count]); +}
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm index 6aed82d..ff6e9a5 100644 --- a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm +++ b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm
@@ -494,7 +494,7 @@ policy::PolicyMap map; map.Set("test-policy", policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER, policy::POLICY_SOURCE_PLATFORM, - base::Value("hello"), nullptr); + std::make_unique<base::Value>("hello"), nullptr); enterprise_policy_helper->GetPolicyProvider()->UpdateChromePolicy(map); CreateMediatorWithBrowserPolicyConnector(
diff --git a/ios/chrome/browser/web/print_tab_helper.mm b/ios/chrome/browser/web/print_tab_helper.mm index 6268502..4156be8 100644 --- a/ios/chrome/browser/web/print_tab_helper.mm +++ b/ios/chrome/browser/web/print_tab_helper.mm
@@ -8,7 +8,11 @@ #include "base/bind_helpers.h" #include "base/memory/ptr_util.h" #include "base/values.h" +#include "components/prefs/pref_service.h" +#include "ios/chrome/browser/browser_state/chrome_browser_state.h" +#include "ios/chrome/browser/pref_names.h" #import "ios/chrome/browser/web/web_state_printer.h" +#import "ios/web/public/browser_state.h" #include "ios/web/public/js_messaging/web_frame.h" #import "ios/web/public/web_state.h" @@ -52,6 +56,17 @@ } DCHECK(web_state); DCHECK(printer_); + + BOOL printingEnabled = + ChromeBrowserState::FromBrowserState(web_state->GetBrowserState()) + ->GetPrefs() + ->GetBoolean(prefs::kPrintingEnabled); + + if (!printingEnabled) { + // Ignore window.print() if the PrintingEnabled pref is set to NO. + return; + } + [printer_ printWebState:web_state]; }
diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc index 496ff17..c6f22fc5 100644 --- a/media/base/media_switches.cc +++ b/media/base/media_switches.cc
@@ -781,4 +781,11 @@ return false; } +// When enabled, causes the H264Decoder to treat each DecoderBuffer sent to it +// as a complete frame, rather than waiting for a following indicator for frame +// completeness. Temporary flag to allow verifying if this change breaks +// anything. +const base::Feature kH264DecoderBufferIsCompleteFrame{ + "H264DecoderBufferIsCompleteFrame", base::FEATURE_ENABLED_BY_DEFAULT}; + } // namespace media
diff --git a/media/base/media_switches.h b/media/base/media_switches.h index 633f26e..6462f78 100644 --- a/media/base/media_switches.h +++ b/media/base/media_switches.h
@@ -128,6 +128,7 @@ MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsOverlayControls; MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsPictureInPicture; MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsSeamlessTransfer; +MEDIA_EXPORT extern const base::Feature kH264DecoderBufferIsCompleteFrame; MEDIA_EXPORT extern const base::Feature kHardwareMediaKeyHandling; MEDIA_EXPORT extern const base::Feature kHardwareSecureDecryption; MEDIA_EXPORT extern const base::Feature kInternalMediaSession;
diff --git a/media/gpu/h264_decoder.cc b/media/gpu/h264_decoder.cc index 93abea8..c224a1da 100644 --- a/media/gpu/h264_decoder.cc +++ b/media/gpu/h264_decoder.cc
@@ -8,10 +8,12 @@ #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback_helpers.h" +#include "base/feature_list.h" #include "base/logging.h" #include "base/numerics/safe_conversions.h" #include "base/optional.h" #include "base/stl_util.h" +#include "media/base/media_switches.h" #include "media/gpu/h264_decoder.h" #include "media/video/h264_level_limits.h" @@ -40,6 +42,8 @@ profile_(profile), accelerator_(std::move(accelerator)) { DCHECK(accelerator_); + decoder_buffer_is_complete_frame_ = + base::FeatureList::IsEnabled(media::kH264DecoderBufferIsCompleteFrame); Reset(); } @@ -1305,10 +1309,14 @@ if (!curr_nalu_) { curr_nalu_.reset(new H264NALU()); par_res = parser_.AdvanceToNextNALU(curr_nalu_.get()); - if (par_res == H264Parser::kEOStream) + if (par_res == H264Parser::kEOStream) { + if (decoder_buffer_is_complete_frame_) + CHECK_ACCELERATOR_RESULT(FinishPrevFrameIfPresent()); + return kRanOutOfStreamData; - else if (par_res != H264Parser::kOk) + } else if (par_res != H264Parser::kOk) { SET_ERROR_AND_RETURN(); + } DVLOG(4) << "New NALU: " << static_cast<int>(curr_nalu_->nal_unit_type); }
diff --git a/media/gpu/h264_decoder.h b/media/gpu/h264_decoder.h index b74c349..b010f307 100644 --- a/media/gpu/h264_decoder.h +++ b/media/gpu/h264_decoder.h
@@ -289,6 +289,13 @@ // The colorspace for the h264 container. const VideoColorSpace container_color_space_; + // If |decoder_buffer_is_complete_frame_| is true, then it is assumed that + // each DecoderBuffer contains a complete frame of video. After processing a + // DecoderBuffer, if there is a pending frame, it will be sent to the + // |accelerator_| immediately rather than waiting for a bitstream indication + // for the next frame, EOS or an AUD. + bool decoder_buffer_is_complete_frame_ = false; + // Parser in use. H264Parser parser_;
diff --git a/media/gpu/h264_decoder_unittest.cc b/media/gpu/h264_decoder_unittest.cc index 9670328..3c969de 100644 --- a/media/gpu/h264_decoder_unittest.cc +++ b/media/gpu/h264_decoder_unittest.cc
@@ -305,7 +305,9 @@ ASSERT_TRUE(decoder_->Flush()); } -TEST_F(H264DecoderTest, OutputPictureFailureCausesFlushToFail) { +// TODO(jkardatzke): Remove this test if we keep the flag for DecoderBuffers +// are complete frames because this code path will never get called. +TEST_F(H264DecoderTest, DISABLED_OutputPictureFailureCausesFlushToFail) { // Provide one frame so that Decode() will not try to output a frame, so // Flush() will. SetInputFrameFiles({ @@ -517,14 +519,11 @@ InSequence sequence; EXPECT_CALL(*accelerator_, SubmitFrameMetadata(_, _, _, _, _, _, _)); EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); - } - ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); - - { - InSequence sequence; EXPECT_CALL(*accelerator_, SubmitDecode(WithPoc(0))); EXPECT_CALL(*accelerator_, OutputPicture(WithPoc(0))); } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); + ASSERT_TRUE(decoder_->Flush()); } @@ -553,14 +552,13 @@ ASSERT_EQ(AcceleratedVideoDecoder::kTryAgain, Decode()); // Assume key has been provided now, next call to Decode() should proceed. - EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); - ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); - { InSequence sequence; + EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); EXPECT_CALL(*accelerator_, SubmitDecode(WithPoc(0))); EXPECT_CALL(*accelerator_, OutputPicture(WithPoc(0))); } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); ASSERT_TRUE(decoder_->Flush()); } @@ -599,14 +597,10 @@ EXPECT_CALL(*accelerator_, CreateH264Picture()); EXPECT_CALL(*accelerator_, SubmitFrameMetadata(_, _, _, _, _, _, _)); EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); - } - ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); - - { - InSequence sequence; EXPECT_CALL(*accelerator_, SubmitDecode(WithPoc(2))); EXPECT_CALL(*accelerator_, OutputPicture(WithPoc(2))); } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); ASSERT_TRUE(decoder_->Flush()); } @@ -629,14 +623,10 @@ EXPECT_CALL(*accelerator_, CreateH264Picture()); EXPECT_CALL(*accelerator_, SubmitFrameMetadata(_, _, _, _, _, _, _)); EXPECT_CALL(*accelerator_, SubmitSlice(_, _, _, _, _, _, _, _)); - } - ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); - - { - InSequence sequence; EXPECT_CALL(*accelerator_, SubmitDecode(WithPoc(0))); EXPECT_CALL(*accelerator_, OutputPicture(WithPoc(0))); } + ASSERT_EQ(AcceleratedVideoDecoder::kRanOutOfStreamData, Decode()); ASSERT_TRUE(decoder_->Flush()); }
diff --git a/mojo/public/tools/bindings/chromium_bindings_configuration.gni b/mojo/public/tools/bindings/chromium_bindings_configuration.gni index d8a1387..9296a358 100644 --- a/mojo/public/tools/bindings/chromium_bindings_configuration.gni +++ b/mojo/public/tools/bindings/chromium_bindings_configuration.gni
@@ -21,12 +21,6 @@ "//components/typemaps.gni", "//content/browser/typemaps.gni", "//content/public/common/typemaps.gni", - "//sandbox/mac/mojom/typemaps.gni", - "//services/media_session/public/cpp/typemaps.gni", - "//services/proxy_resolver/public/cpp/typemaps.gni", - "//services/resource_coordinator/public/cpp/typemaps.gni", - "//services/service_manager/public/cpp/typemaps.gni", - "//services/tracing/public/mojom/typemaps.gni", ] _typemaps = []
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc index 8692511..f328bd97 100644 --- a/remoting/host/client_session.cc +++ b/remoting/host/client_session.cc
@@ -310,6 +310,10 @@ if (parameters.request_ice_restart()) { connection_->peer_connection_controls()->RequestIceRestart(); } + + if (parameters.request_sdp_restart()) { + connection_->peer_connection_controls()->RequestSdpRestart(); + } } void ClientSession::OnConnectionAuthenticating() {
diff --git a/remoting/host/it2me_desktop_environment.cc b/remoting/host/it2me_desktop_environment.cc index 54920dc..214c1306 100644 --- a/remoting/host/it2me_desktop_environment.cc +++ b/remoting/host/it2me_desktop_environment.cc
@@ -85,7 +85,7 @@ } std::string It2MeDesktopEnvironment::GetCapabilities() const { - return protocol::kWebrtcIceRestartAction; + return protocol::kWebrtcIceSdpRestartAction; } It2MeDesktopEnvironmentFactory::It2MeDesktopEnvironmentFactory(
diff --git a/remoting/host/me2me_desktop_environment.cc b/remoting/host/me2me_desktop_environment.cc index 18487e3..d4efbf2 100644 --- a/remoting/host/me2me_desktop_environment.cc +++ b/remoting/host/me2me_desktop_environment.cc
@@ -65,7 +65,7 @@ capabilities += protocol::kRateLimitResizeRequests; capabilities += " "; - capabilities += protocol::kWebrtcIceRestartAction; + capabilities += protocol::kWebrtcIceSdpRestartAction; if (InputInjector::SupportsTouchEvents()) { capabilities += " ";
diff --git a/remoting/proto/control.proto b/remoting/proto/control.proto index 326226f8..1843b32 100644 --- a/remoting/proto/control.proto +++ b/remoting/proto/control.proto
@@ -175,7 +175,7 @@ optional string protocol = 1; } -// Next ID: 4 +// Next ID: 5 message PeerConnectionParameters { // Sets preferred minimum and maximum bitrates. Unset fields means no // preference on the bitrate. Clients might need to keep track of existing @@ -185,7 +185,12 @@ // Requests an ICE restart. This causes the host to initiate a new SDP // offer/answer exchange, and restarts the ICE gathering/connection sequence. - // This can be used to re-establish a connection, or change SDP parameters, - // without needing to re-authenticate the user. + // This can be used to re-establish a connection, without needing to + // re-authenticate the user. optional bool request_ice_restart = 3; + + // Requests the host to initiate a new SDP offer/answer exchange, without + // restarting ICE. This can be used to change SDP configuration (for example, + // switching to a different codec), without needing a full reconnection. + optional bool request_sdp_restart = 4; }
diff --git a/remoting/protocol/capability_names.h b/remoting/protocol/capability_names.h index d92a3fd..c8251cb 100644 --- a/remoting/protocol/capability_names.h +++ b/remoting/protocol/capability_names.h
@@ -22,9 +22,9 @@ constexpr char kLockWorkstationAction[] = "lockWorkstationAction"; constexpr char kSendAttentionSequenceAction[] = "sendAttentionSequenceAction"; -// Host supports ICE restart request from control message. Only used for WebRTC -// clients. -constexpr char kWebrtcIceRestartAction[] = "webrtcIceRestartAction"; +// Host supports ICE or SDP restart request from control message. Only used for +// WebRTC clients. +constexpr char kWebrtcIceSdpRestartAction[] = "webrtcIceSdpRestartAction"; } // namespace protocol } // namespace remoting
diff --git a/remoting/protocol/peer_connection_controls.h b/remoting/protocol/peer_connection_controls.h index 4a9b04dd..d64e5e5b 100644 --- a/remoting/protocol/peer_connection_controls.h +++ b/remoting/protocol/peer_connection_controls.h
@@ -23,9 +23,14 @@ // Performs an ICE restart. This causes the host to initiate a new SDP // offer/answer exchange, and restarts the ICE gathering/connection sequence. - // This can be used to re-establish a connection, or change SDP parameters, - // without needing to re-authenticate the user. + // This can be used to re-establish a connection, without needing to + // re-authenticate the user. virtual void RequestIceRestart() = 0; + + // Requests a new SDP offer/answer exchange, without restarting ICE. This can + // be used to change SDP configuration (for example, switching to a different + // codec), without needing a full reconnection. + virtual void RequestSdpRestart() = 0; }; } // namespace protocol
diff --git a/remoting/protocol/webrtc_transport.cc b/remoting/protocol/webrtc_transport.cc index 85286bb..1e98c50c 100644 --- a/remoting/protocol/webrtc_transport.cc +++ b/remoting/protocol/webrtc_transport.cc
@@ -644,6 +644,22 @@ RequestNegotiation(); } +void WebrtcTransport::RequestSdpRestart() { + if (transport_context_->role() != TransportRole::SERVER) { + NOTIMPLEMENTED() + << "SDP restart only implemented for TransportRole::SERVER"; + return; + } + + if (!connected_) { + LOG(WARNING) << "Not connected, ignoring SDP restart request."; + return; + } + + VLOG(0) << "Restarting SDP due to client request."; + RequestNegotiation(); +} + // static void WebrtcTransport::SetDataChannelPollingIntervalForTests( base::TimeDelta new_polling_interval) {
diff --git a/remoting/protocol/webrtc_transport.h b/remoting/protocol/webrtc_transport.h index 4549ee4..1d46bb7 100644 --- a/remoting/protocol/webrtc_transport.h +++ b/remoting/protocol/webrtc_transport.h
@@ -100,6 +100,7 @@ void SetPreferredBitrates(base::Optional<int> min_bitrate_bps, base::Optional<int> max_bitrate_bps) override; void RequestIceRestart() override; + void RequestSdpRestart() override; void Close(ErrorCode error);
diff --git a/sandbox/mac/mojom/BUILD.gn b/sandbox/mac/mojom/BUILD.gn index 0ed698d..e260aadb 100644 --- a/sandbox/mac/mojom/BUILD.gn +++ b/sandbox/mac/mojom/BUILD.gn
@@ -6,6 +6,21 @@ mojom("mojom") { sources = [ "seatbelt_extension_token.mojom" ] + + cpp_typemaps = [ + { + types = [ + { + mojom = "sandbox.mac.mojom.SeatbeltExtensionToken" + cpp = "::sandbox::SeatbeltExtensionToken" + move_only = true + }, + ] + traits_headers = [ "seatbelt_extension_token_mojom_traits.h" ] + traits_sources = [ "seatbelt_extension_token_mojom_traits.cc" ] + traits_public_deps = [ "//sandbox/mac:seatbelt_extension" ] + }, + ] } mojom("test_interfaces") {
diff --git a/sandbox/mac/mojom/OWNERS b/sandbox/mac/mojom/OWNERS index 3e6cfccf..1feb514 100644 --- a/sandbox/mac/mojom/OWNERS +++ b/sandbox/mac/mojom/OWNERS
@@ -2,5 +2,3 @@ per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS \ No newline at end of file
diff --git a/sandbox/mac/mojom/seatbelt_extension_token.typemap b/sandbox/mac/mojom/seatbelt_extension_token.typemap deleted file mode 100644 index e22e69c..0000000 --- a/sandbox/mac/mojom/seatbelt_extension_token.typemap +++ /dev/null
@@ -1,15 +0,0 @@ -# Copyright 2017 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. - -mojom = "//sandbox/mac/mojom/seatbelt_extension_token.mojom" -public_headers = [ "//sandbox/mac/seatbelt_extension_token.h" ] -traits_headers = - [ "//sandbox/mac/mojom/seatbelt_extension_token_mojom_traits.h" ] -sources = [ - "//sandbox/mac/mojom/seatbelt_extension_token_mojom_traits.cc", -] -deps = [ - "//sandbox/mac:seatbelt_extension", -] -type_mappings = [ "sandbox.mac.mojom.SeatbeltExtensionToken=::sandbox::SeatbeltExtensionToken[move_only]" ]
diff --git a/sandbox/mac/mojom/typemaps.gni b/sandbox/mac/mojom/typemaps.gni deleted file mode 100644 index 2c1fb3c..0000000 --- a/sandbox/mac/mojom/typemaps.gni +++ /dev/null
@@ -1,5 +0,0 @@ -# Copyright 2017 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. - -typemaps = [ "//sandbox/mac/mojom/seatbelt_extension_token.typemap" ]
diff --git a/services/media_session/public/cpp/OWNERS b/services/media_session/public/cpp/OWNERS index 7aebc8abb..d5fefd8 100644 --- a/services/media_session/public/cpp/OWNERS +++ b/services/media_session/public/cpp/OWNERS
@@ -1,4 +1,2 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/services/media_session/public/cpp/media_session.typemap b/services/media_session/public/cpp/media_session.typemap deleted file mode 100644 index 2eebff2..0000000 --- a/services/media_session/public/cpp/media_session.typemap +++ /dev/null
@@ -1,30 +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. - -mojom = "//services/media_session/public/mojom/media_session.mojom" -public_headers = [ - "//services/media_session/public/cpp/media_image.h", - "//services/media_session/public/cpp/media_metadata.h", - "//services/media_session/public/cpp/media_position.h", - "//third_party/skia/include/core/SkBitmap.h", -] -traits_headers = - [ "//services/media_session/public/cpp/media_session_mojom_traits.h" ] -public_deps = [ - "//services/media_session/public/cpp:base_cpp", - "//skia", -] -deps = [ - "//ui/gfx/geometry/mojom:mojom_traits", -] -type_mappings = [ - "media_session.mojom.MediaImage=::media_session::MediaImage", - "media_session.mojom.MediaImageBitmap=::SkBitmap[nullable_is_same_type]", - "media_session.mojom.MediaMetadata=::media_session::MediaMetadata", - "media_session.mojom.MediaPosition=::media_session::MediaPosition", -] -sources = [ - "//services/media_session/public/cpp/media_session_mojom_traits.cc", - "//services/media_session/public/cpp/media_session_mojom_traits.h", -]
diff --git a/services/media_session/public/cpp/media_session_mojom_traits.cc b/services/media_session/public/cpp/media_session_mojom_traits.cc index f9beae31..c7f5830 100644 --- a/services/media_session/public/cpp/media_session_mojom_traits.cc +++ b/services/media_session/public/cpp/media_session_mojom_traits.cc
@@ -6,7 +6,6 @@ #include "mojo/public/cpp/base/string16_mojom_traits.h" #include "mojo/public/cpp/base/time_mojom_traits.h" -#include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/geometry/mojom/geometry_mojom_traits.h" #include "url/mojom/url_gurl_mojom_traits.h"
diff --git a/services/media_session/public/cpp/media_session_mojom_traits.h b/services/media_session/public/cpp/media_session_mojom_traits.h index 9051f6a4..a049254 100644 --- a/services/media_session/public/cpp/media_session_mojom_traits.h +++ b/services/media_session/public/cpp/media_session_mojom_traits.h
@@ -8,7 +8,13 @@ #include <vector> #include "base/containers/span.h" -#include "services/media_session/public/mojom/media_session.mojom.h" +#include "base/strings/string16.h" +#include "services/media_session/public/cpp/media_image.h" +#include "services/media_session/public/cpp/media_metadata.h" +#include "services/media_session/public/cpp/media_position.h" +#include "services/media_session/public/mojom/media_session.mojom-shared.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/geometry/size.h" namespace mojo {
diff --git a/services/media_session/public/cpp/mojom_traits_unittest.cc b/services/media_session/public/cpp/mojom_traits_unittest.cc index 7e8c609..0ad144e4 100644 --- a/services/media_session/public/cpp/mojom_traits_unittest.cc +++ b/services/media_session/public/cpp/mojom_traits_unittest.cc
@@ -4,6 +4,7 @@ #include "mojo/public/cpp/test_support/test_utils.h" #include "services/media_session/public/cpp/media_session_mojom_traits.h" +#include "services/media_session/public/mojom/media_session.mojom.h" #include "testing/gtest/include/gtest/gtest.h" using media_session::mojom::MediaImageBitmap;
diff --git a/services/media_session/public/cpp/typemaps.gni b/services/media_session/public/cpp/typemaps.gni deleted file mode 100644 index 280e7e0..0000000 --- a/services/media_session/public/cpp/typemaps.gni +++ /dev/null
@@ -1,5 +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. - -typemaps = [ "//services/media_session/public/cpp/media_session.typemap" ]
diff --git a/services/media_session/public/mojom/BUILD.gn b/services/media_session/public/mojom/BUILD.gn index 1f30a29..4ee7adc 100644 --- a/services/media_session/public/mojom/BUILD.gn +++ b/services/media_session/public/mojom/BUILD.gn
@@ -27,4 +27,42 @@ export_class_attribute_blink = "BLINK_PLATFORM_EXPORT" export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" + + cpp_typemaps = [ + { + types = [ + { + mojom = "media_session.mojom.MediaImage" + cpp = "::media_session::MediaImage" + }, + { + mojom = "media_session.mojom.MediaImageBitmap" + cpp = "::SkBitmap" + nullable_is_same_type = true + }, + { + mojom = "media_session.mojom.MediaMetadata" + cpp = "::media_session::MediaMetadata" + }, + { + mojom = "media_session.mojom.MediaPosition" + cpp = "::media_session::MediaPosition" + }, + ] + traits_headers = + [ "//services/media_session/public/cpp/media_session_mojom_traits.h" ] + traits_sources = [ + "//services/media_session/public/cpp/media_session_mojom_traits.cc", + ] + traits_public_deps = [ + "//base", + "//services/media_session/public/cpp:base_cpp", + "//skia", + ] + traits_deps = [ + "//mojo/public/mojom/base", + "//ui/gfx/geometry/mojom", + ] + }, + ] }
diff --git a/services/proxy_resolver/public/cpp/OWNERS b/services/proxy_resolver/public/cpp/OWNERS index 59d61d19..d5fefd8 100644 --- a/services/proxy_resolver/public/cpp/OWNERS +++ b/services/proxy_resolver/public/cpp/OWNERS
@@ -1,8 +1,2 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS -per-file manifest.cc=set noparent -per-file manifest.cc=file://ipc/SECURITY_OWNERS -per-file manifest.h=set noparent -per-file manifest.h=file://ipc/SECURITY_OWNERS
diff --git a/services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h b/services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h index 5dfd827b..8ca2bbf 100644 --- a/services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h +++ b/services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h
@@ -8,7 +8,7 @@ #include "base/strings/string_piece.h" #include "mojo/public/cpp/bindings/enum_traits.h" #include "net/proxy_resolution/proxy_resolve_dns_operation.h" -#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" +#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom-shared.h" namespace mojo {
diff --git a/services/proxy_resolver/public/cpp/proxy_resolver.typemap b/services/proxy_resolver/public/cpp/proxy_resolver.typemap deleted file mode 100644 index db1f4b0..0000000 --- a/services/proxy_resolver/public/cpp/proxy_resolver.typemap +++ /dev/null
@@ -1,27 +0,0 @@ -# Copyright 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -mojom = "//services/proxy_resolver/public/mojom/proxy_resolver.mojom" -public_headers = [ - "//net/base/proxy_server.h", - "//net/proxy_resolution/proxy_info.h", - "//net/proxy_resolution/proxy_resolve_dns_operation.h", -] -traits_headers = [ - "//services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h", - "//services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h", -] -sources = [ - "//services/proxy_resolver/public/cpp/mojo_host_mojom_traits.cc", - "//services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.cc", -] -type_mappings = [ - "proxy_resolver.mojom.HostResolveOperation=::net::ProxyResolveDnsOperation", - "proxy_resolver.mojom.ProxyInfo=::net::ProxyInfo", - "proxy_resolver.mojom.ProxyServer=::net::ProxyServer", - "proxy_resolver.mojom.ProxyServer::Scheme=::net::ProxyScheme", -] -public_deps = [ - "//net", -]
diff --git a/services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h b/services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h index 4c434c4..32ab0c7 100644 --- a/services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h +++ b/services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h
@@ -12,7 +12,7 @@ #include "net/base/proxy_server.h" #include "net/proxy_resolution/proxy_info.h" #include "net/proxy_resolution/proxy_list.h" -#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom.h" +#include "services/proxy_resolver/public/mojom/proxy_resolver.mojom-shared.h" namespace net { class ProxyInfo;
diff --git a/services/proxy_resolver/public/cpp/typemaps.gni b/services/proxy_resolver/public/cpp/typemaps.gni deleted file mode 100644 index babbad44..0000000 --- a/services/proxy_resolver/public/cpp/typemaps.gni +++ /dev/null
@@ -1,5 +0,0 @@ -# Copyright 2017 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. - -typemaps = [ "//services/proxy_resolver/public/cpp/proxy_resolver.typemap" ]
diff --git a/services/proxy_resolver/public/mojom/BUILD.gn b/services/proxy_resolver/public/mojom/BUILD.gn index d82c4009..77790f8 100644 --- a/services/proxy_resolver/public/mojom/BUILD.gn +++ b/services/proxy_resolver/public/mojom/BUILD.gn
@@ -18,4 +18,38 @@ export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1" export_header_blink = "third_party/blink/public/platform/web_common.h" } + + cpp_typemaps = [ + { + types = [ + { + mojom = "proxy_resolver.mojom.HostResolveOperation" + cpp = "::net::ProxyResolveDnsOperation" + }, + + { + mojom = "proxy_resolver.mojom.ProxyInfo" + cpp = "::net::ProxyInfo" + }, + + { + mojom = "proxy_resolver.mojom.ProxyServer" + cpp = "::net::ProxyServer" + }, + + { + mojom = "proxy_resolver.mojom.ProxyServer::Scheme" + cpp = "::net::ProxyScheme" + }, + ] + traits_headers = [ + "//services/proxy_resolver/public/cpp/mojo_host_mojom_traits.h", + "//services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.h", + ] + traits_sources = [ + "//services/proxy_resolver/public/cpp/mojo_host_mojom_traits.cc", + "//services/proxy_resolver/public/cpp/proxy_resolver_mojom_traits.cc", + ] + }, + ] }
diff --git a/services/resource_coordinator/public/cpp/OWNERS b/services/resource_coordinator/public/cpp/OWNERS index a605b825..4e0f5fd 100644 --- a/services/resource_coordinator/public/cpp/OWNERS +++ b/services/resource_coordinator/public/cpp/OWNERS
@@ -1,7 +1 @@ per-file BUILD.gn=file://services/resource_coordinator/memory_instrumentation/OWNERS - -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS - -per-file *_mojom_traits*.*=set noparent -per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/services/resource_coordinator/public/cpp/memory_instrumentation/OWNERS b/services/resource_coordinator/public/cpp/memory_instrumentation/OWNERS index a5521d03..887892c 100644 --- a/services/resource_coordinator/public/cpp/memory_instrumentation/OWNERS +++ b/services/resource_coordinator/public/cpp/memory_instrumentation/OWNERS
@@ -1,7 +1,4 @@ file://services/resource_coordinator/memory_instrumentation/OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS - per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.typemap b/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.typemap deleted file mode 100644 index 421b6ee..0000000 --- a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.typemap +++ /dev/null
@@ -1,30 +0,0 @@ -# Copyright 2017 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. - -mojom = "//services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom" - -public_headers = [ - "//base/trace_event/memory_dump_request_args.h", - "//base/trace_event/process_memory_dump.h", - "//base/trace_event/memory_allocator_dump.h", - "//base/trace_event/memory_dump_manager.h", -] -traits_headers = [ "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h" ] -sources = [ - "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc", - "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h", -] -deps = [ - "//base", -] -type_mappings = [ - "memory_instrumentation.mojom.DumpType=::base::trace_event::MemoryDumpType", - "memory_instrumentation.mojom.LevelOfDetail=::base::trace_event::MemoryDumpLevelOfDetail", - "memory_instrumentation.mojom.Determinism=::base::trace_event::MemoryDumpDeterminism", - "memory_instrumentation.mojom.RequestArgs=::base::trace_event::MemoryDumpRequestArgs", - "memory_instrumentation.mojom.RawAllocatorDumpEdge=::base::trace_event::ProcessMemoryDump::MemoryAllocatorDumpEdge", - "memory_instrumentation.mojom.RawAllocatorDumpEntry=::base::trace_event::MemoryAllocatorDump::Entry[move_only]", - "memory_instrumentation.mojom.RawAllocatorDump=::std::unique_ptr<::base::trace_event::MemoryAllocatorDump>[move_only]", - "memory_instrumentation.mojom.RawProcessMemoryDump=::std::unique_ptr<::base::trace_event::ProcessMemoryDump>[move_only,nullable_is_same_type]", -]
diff --git a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc b/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc index a7ab6f8..56040f9e 100644 --- a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc +++ b/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc
@@ -4,6 +4,8 @@ #include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h" +#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" + namespace mojo { // static
diff --git a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h b/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h index 6493fee..44829fe9 100644 --- a/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h +++ b/services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h
@@ -7,9 +7,11 @@ #include "base/component_export.h" #include "base/process/process_handle.h" +#include "base/trace_event/memory_allocator_dump.h" #include "base/trace_event/memory_dump_manager.h" #include "base/trace_event/memory_dump_request_args.h" -#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom.h" +#include "base/trace_event/process_memory_dump.h" +#include "services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom-shared.h" namespace mojo { @@ -100,19 +102,19 @@ struct COMPONENT_EXPORT(RESOURCE_COORDINATOR_PUBLIC_MOJOM) UnionTraits< memory_instrumentation::mojom::RawAllocatorDumpEntryValueDataView, base::trace_event::MemoryAllocatorDump::Entry> { - static memory_instrumentation::mojom::RawAllocatorDumpEntryValue::Tag GetTag( - const base::trace_event::MemoryAllocatorDump::Entry& args) { + static memory_instrumentation::mojom::RawAllocatorDumpEntryValueDataView::Tag + GetTag(const base::trace_event::MemoryAllocatorDump::Entry& args) { switch (args.entry_type) { case base::trace_event::MemoryAllocatorDump::Entry::EntryType::kUint64: - return memory_instrumentation::mojom::RawAllocatorDumpEntryValue::Tag:: - VALUE_UINT64; + return memory_instrumentation::mojom:: + RawAllocatorDumpEntryValueDataView::Tag::VALUE_UINT64; case base::trace_event::MemoryAllocatorDump::Entry::EntryType::kString: - return memory_instrumentation::mojom::RawAllocatorDumpEntryValue::Tag:: - VALUE_STRING; + return memory_instrumentation::mojom:: + RawAllocatorDumpEntryValueDataView::Tag::VALUE_STRING; } NOTREACHED(); - return memory_instrumentation::mojom::RawAllocatorDumpEntryValue::Tag:: - VALUE_UINT64; + return memory_instrumentation::mojom::RawAllocatorDumpEntryValueDataView:: + Tag::VALUE_UINT64; } static uint64_t value_uint64(
diff --git a/services/resource_coordinator/public/cpp/typemaps.gni b/services/resource_coordinator/public/cpp/typemaps.gni deleted file mode 100644 index e6ac78f..0000000 --- a/services/resource_coordinator/public/cpp/typemaps.gni +++ /dev/null
@@ -1,5 +0,0 @@ -# Copyright 2017 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. - -typemaps = [ "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.typemap" ]
diff --git a/services/resource_coordinator/public/mojom/BUILD.gn b/services/resource_coordinator/public/mojom/BUILD.gn index 32524956..ec433ce1 100644 --- a/services/resource_coordinator/public/mojom/BUILD.gn +++ b/services/resource_coordinator/public/mojom/BUILD.gn
@@ -23,4 +23,51 @@ if (is_linux || is_chromeos || is_android) { enabled_features += [ "private_swap_info" ] } + + cpp_typemaps = [ + { + types = [ + { + mojom = "memory_instrumentation.mojom.DumpType" + cpp = "::base::trace_event::MemoryDumpType" + }, + { + mojom = "memory_instrumentation.mojom.LevelOfDetail" + cpp = "::base::trace_event::MemoryDumpLevelOfDetail" + }, + { + mojom = "memory_instrumentation.mojom.Determinism" + cpp = "::base::trace_event::MemoryDumpDeterminism" + }, + { + mojom = "memory_instrumentation.mojom.RequestArgs" + cpp = "::base::trace_event::MemoryDumpRequestArgs" + }, + { + mojom = "memory_instrumentation.mojom.RawAllocatorDumpEdge" + cpp = + "::base::trace_event::ProcessMemoryDump::MemoryAllocatorDumpEdge" + }, + { + mojom = "memory_instrumentation.mojom.RawAllocatorDumpEntry" + cpp = "::base::trace_event::MemoryAllocatorDump::Entry" + move_only = true + }, + { + mojom = "memory_instrumentation.mojom.RawAllocatorDump" + cpp = "::std::unique_ptr<::base::trace_event::MemoryAllocatorDump>" + move_only = true + }, + { + mojom = "memory_instrumentation.mojom.RawProcessMemoryDump" + cpp = "::std::unique_ptr<::base::trace_event::ProcessMemoryDump>" + move_only = true + nullable_is_same_type = true + }, + ] + traits_headers = [ "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.h" ] + traits_sources = [ "//services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation_mojom_traits.cc" ] + traits_public_deps = [ "//base" ] + }, + ] }
diff --git a/services/service_manager/public/cpp/OWNERS b/services/service_manager/public/cpp/OWNERS index 7aebc8abb..d5fefd8 100644 --- a/services/service_manager/public/cpp/OWNERS +++ b/services/service_manager/public/cpp/OWNERS
@@ -1,4 +1,2 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/services/service_manager/public/cpp/bind_source_info.typemap b/services/service_manager/public/cpp/bind_source_info.typemap deleted file mode 100644 index 120f6d9..0000000 --- a/services/service_manager/public/cpp/bind_source_info.typemap +++ /dev/null
@@ -1,14 +0,0 @@ -# Copyright 2017 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. - -mojom = "//services/service_manager/public/mojom/service.mojom" -public_headers = [ "//services/service_manager/public/cpp/bind_source_info.h" ] -traits_headers = - [ "//services/service_manager/public/cpp/bind_source_info_mojom_traits.h" ] -public_deps = [ - "//services/service_manager/public/cpp:cpp_types", -] - -type_mappings = - [ "service_manager.mojom.BindSourceInfo=::service_manager::BindSourceInfo" ]
diff --git a/services/service_manager/public/cpp/bind_source_info_mojom_traits.h b/services/service_manager/public/cpp/bind_source_info_mojom_traits.h index 9f57eec..744fb68 100644 --- a/services/service_manager/public/cpp/bind_source_info_mojom_traits.h +++ b/services/service_manager/public/cpp/bind_source_info_mojom_traits.h
@@ -6,13 +6,15 @@ #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_BIND_SOURCE_INFO_MOJOM_TRAITS_H_ #include "services/service_manager/public/cpp/bind_source_info.h" -#include "services/service_manager/public/mojom/service.mojom.h" +#include "services/service_manager/public/cpp/identity_mojom_traits.h" +#include "services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h" +#include "services/service_manager/public/mojom/service.mojom-shared.h" namespace mojo { template <> struct COMPONENT_EXPORT(SERVICE_MANAGER_MOJOM) - StructTraits<service_manager::mojom::BindSourceInfo::DataView, + StructTraits<service_manager::mojom::BindSourceInfoDataView, service_manager::BindSourceInfo> { static const service_manager::Identity& identity( const service_manager::BindSourceInfo& source) {
diff --git a/services/service_manager/public/cpp/identity.typemap b/services/service_manager/public/cpp/identity.typemap deleted file mode 100644 index 6fb23dc..0000000 --- a/services/service_manager/public/cpp/identity.typemap +++ /dev/null
@@ -1,14 +0,0 @@ -# Copyright 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -mojom = "//services/service_manager/public/mojom/connector.mojom" -public_headers = [ "//services/service_manager/public/cpp/identity.h" ] -traits_headers = - [ "//services/service_manager/public/cpp/identity_mojom_traits.h" ] -public_deps = [ - "//services/service_manager/public/cpp:cpp_types", - "//services/service_manager/public/cpp:mojom_traits", -] - -type_mappings = [ "service_manager.mojom.Identity=::service_manager::Identity" ]
diff --git a/services/service_manager/public/cpp/interface_provider_spec.typemap b/services/service_manager/public/cpp/interface_provider_spec.typemap deleted file mode 100644 index 72f0278..0000000 --- a/services/service_manager/public/cpp/interface_provider_spec.typemap +++ /dev/null
@@ -1,17 +0,0 @@ -# Copyright 2016 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -mojom = "//services/service_manager/public/mojom/interface_provider_spec.mojom" -public_headers = - [ "//services/service_manager/public/cpp/interface_provider_spec.h" ] -traits_headers = [ "//services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h" ] -public_deps = [ - "//services/service_manager/public/cpp:cpp_types", -] - -type_mappings = [ - "service_manager.mojom.InterfaceProviderSpec=::service_manager::InterfaceProviderSpec", - "service_manager.mojom.InterfaceSet=::service_manager::InterfaceSet", - "service_manager.mojom.CapabilitySet=::service_manager::CapabilitySet", -]
diff --git a/services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h b/services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h index e7c8a8fe..b996bc7b 100644 --- a/services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h +++ b/services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h
@@ -6,13 +6,13 @@ #define SERVICES_SERVICE_MANAGER_PUBLIC_CPP_INTERFACE_PROVIDER_SPEC_MOJOM_TRAITS_H_ #include "services/service_manager/public/cpp/interface_provider_spec.h" -#include "services/service_manager/public/mojom/interface_provider_spec.mojom.h" +#include "services/service_manager/public/mojom/interface_provider_spec.mojom-shared.h" namespace mojo { template <> struct COMPONENT_EXPORT(SERVICE_MANAGER_MOJOM) - StructTraits<service_manager::mojom::InterfaceProviderSpec::DataView, + StructTraits<service_manager::mojom::InterfaceProviderSpecDataView, service_manager::InterfaceProviderSpec> { static const std::map<service_manager::Capability, service_manager::InterfaceSet>& @@ -32,7 +32,7 @@ template <> struct COMPONENT_EXPORT(SERVICE_MANAGER_MOJOM) - StructTraits<service_manager::mojom::InterfaceSet::DataView, + StructTraits<service_manager::mojom::InterfaceSetDataView, service_manager::InterfaceSet> { static std::vector<std::string> interfaces( const service_manager::InterfaceSet& spec) { @@ -57,7 +57,7 @@ template <> struct COMPONENT_EXPORT(SERVICE_MANAGER_MOJOM) - StructTraits<service_manager::mojom::CapabilitySet::DataView, + StructTraits<service_manager::mojom::CapabilitySetDataView, service_manager::CapabilitySet> { static std::vector<std::string> capabilities( const service_manager::CapabilitySet& spec) {
diff --git a/services/service_manager/public/cpp/service_filter.typemap b/services/service_manager/public/cpp/service_filter.typemap deleted file mode 100644 index 1b30da4..0000000 --- a/services/service_manager/public/cpp/service_filter.typemap +++ /dev/null
@@ -1,14 +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. - -mojom = "//services/service_manager/public/mojom/service_filter.mojom" -public_headers = [ "//services/service_manager/public/cpp/service_filter.h" ] -traits_headers = - [ "//services/service_manager/public/cpp/service_filter_mojom_traits.h" ] -public_deps = [ - "//services/service_manager/public/cpp:cpp_types", - "//services/service_manager/public/cpp:mojom_traits", -] -type_mappings = - [ "service_manager.mojom.ServiceFilter=::service_manager::ServiceFilter" ]
diff --git a/services/service_manager/public/cpp/typemaps.gni b/services/service_manager/public/cpp/typemaps.gni deleted file mode 100644 index b4f38a3bf..0000000 --- a/services/service_manager/public/cpp/typemaps.gni +++ /dev/null
@@ -1,6 +0,0 @@ -typemaps = [ - "//services/service_manager/public/cpp/bind_source_info.typemap", - "//services/service_manager/public/cpp/identity.typemap", - "//services/service_manager/public/cpp/interface_provider_spec.typemap", - "//services/service_manager/public/cpp/service_filter.typemap", -]
diff --git a/services/service_manager/public/mojom/BUILD.gn b/services/service_manager/public/mojom/BUILD.gn index a9e2eca0..b7f9ae5 100644 --- a/services/service_manager/public/mojom/BUILD.gn +++ b/services/service_manager/public/mojom/BUILD.gn
@@ -23,6 +23,72 @@ ":constants", "//mojo/public/mojom/base", ] + + cpp_typemaps = [ + { + types = [ + { + mojom = "service_manager.mojom.BindSourceInfo" + cpp = "::service_manager::BindSourceInfo" + }, + ] + traits_headers = [ + "//services/service_manager/public/cpp/bind_source_info_mojom_traits.h", + ] + traits_public_deps = [ + "//services/service_manager/public/cpp:cpp_types", + "//services/service_manager/public/cpp:mojom_traits", + ] + }, + { + types = [ + { + mojom = "service_manager.mojom.Identity" + cpp = "::service_manager::Identity" + }, + ] + traits_headers = + [ "//services/service_manager/public/cpp/identity_mojom_traits.h" ] + traits_public_deps = [ + "//services/service_manager/public/cpp:cpp_types", + "//services/service_manager/public/cpp:mojom_traits", + ] + }, + { + types = [ + { + mojom = "service_manager.mojom.InterfaceProviderSpec" + cpp = "::service_manager::InterfaceProviderSpec" + }, + { + mojom = "service_manager.mojom.InterfaceSet" + cpp = "::service_manager::InterfaceSet" + }, + { + mojom = "service_manager.mojom.CapabilitySet" + cpp = "::service_manager::CapabilitySet" + }, + ] + traits_headers = [ "//services/service_manager/public/cpp/interface_provider_spec_mojom_traits.h" ] + traits_public_deps = [ "//services/service_manager/public/cpp:cpp_types" ] + }, + { + types = [ + { + mojom = "service_manager.mojom.ServiceFilter" + cpp = "::service_manager::ServiceFilter" + }, + ] + + traits_headers = [ + "//services/service_manager/public/cpp/service_filter_mojom_traits.h", + ] + traits_public_deps = [ + "//services/service_manager/public/cpp:cpp_types", + "//services/service_manager/public/cpp:mojom_traits", + ] + }, + ] } mojom_component("constants") {
diff --git a/services/tracing/public/cpp/base_agent.h b/services/tracing/public/cpp/base_agent.h index ab3d6ecb..53894b7 100644 --- a/services/tracing/public/cpp/base_agent.h +++ b/services/tracing/public/cpp/base_agent.h
@@ -19,6 +19,7 @@ public: virtual ~BaseAgent(); + // May be called on any thread. virtual void GetCategories(std::set<std::string>* category_set); protected:
diff --git a/services/tracing/public/mojom/BUILD.gn b/services/tracing/public/mojom/BUILD.gn index 471b688..95051f8 100644 --- a/services/tracing/public/mojom/BUILD.gn +++ b/services/tracing/public/mojom/BUILD.gn
@@ -14,13 +14,86 @@ "tracing_service.mojom", ] + public_deps = [ "//mojo/public/mojom/base" ] + if (!is_nacl && !is_ios) { enabled_features = [ "is_perfetto_supported_os" ] sources += [ "constants.mojom", "perfetto_service.mojom", ] - } - public_deps = [ "//mojo/public/mojom/base" ] + cpp_typemaps = [ + { + types = [ + { + mojom = "tracing.mojom.BufferFillPolicy" + cpp = "::perfetto::TraceConfig::BufferConfig::FillPolicy" + }, + { + mojom = "tracing.mojom.CommitDataRequest" + cpp = "::perfetto::CommitDataRequest" + }, + { + mojom = "tracing.mojom.ChunksToMove" + cpp = "::perfetto::CommitDataRequest::ChunksToMove" + }, + { + mojom = "tracing.mojom.ChunkPatch" + cpp = "::perfetto::CommitDataRequest::ChunkToPatch::Patch" + }, + { + mojom = "tracing.mojom.ChunkToPatch" + cpp = "::perfetto::CommitDataRequest::ChunkToPatch" + }, + { + mojom = "tracing.mojom.DataSourceConfig" + cpp = "::perfetto::DataSourceConfig" + }, + { + mojom = "tracing.mojom.ChromeConfig" + cpp = "::perfetto::ChromeConfig" + }, + { + mojom = "tracing.mojom.DataSourceRegistration" + cpp = "::perfetto::DataSourceDescriptor" + }, + { + mojom = "tracing.mojom.PerfettoBuiltinDataSource" + cpp = "::perfetto::TraceConfig::BuiltinDataSource" + }, + { + mojom = "tracing.mojom.IncrementalStateConfig" + cpp = "::perfetto::TraceConfig::IncrementalStateConfig" + }, + { + mojom = "tracing.mojom.TraceConfig" + cpp = "::perfetto::TraceConfig" + }, + ] + traits_headers = [ + "//third_party/perfetto/include/perfetto/ext/tracing/core/commit_data_request.h", + "//third_party/perfetto/include/perfetto/tracing/core/data_source_config.h", + "//third_party/perfetto/include/perfetto/tracing/core/data_source_descriptor.h", + "//third_party/perfetto/include/perfetto/tracing/core/chrome_config.h", + "//third_party/perfetto/include/perfetto/tracing/core/trace_config.h", + ] + traits_private_headers = [ + "chrome_config_mojom_traits.h", + "commit_data_request_mojom_traits.h", + "data_source_config_mojom_traits.h", + "data_source_descriptor_mojom_traits.h", + "trace_config_mojom_traits.h", + ] + traits_sources = [ + "chrome_config_mojom_traits.cc", + "commit_data_request_mojom_traits.cc", + "data_source_config_mojom_traits.cc", + "data_source_descriptor_mojom_traits.cc", + "trace_config_mojom_traits.cc", + ] + traits_public_deps = [ "//third_party/perfetto:libperfetto" ] + }, + ] + } }
diff --git a/services/tracing/public/mojom/OWNERS b/services/tracing/public/mojom/OWNERS index ae29a36aa..1feb514 100644 --- a/services/tracing/public/mojom/OWNERS +++ b/services/tracing/public/mojom/OWNERS
@@ -2,5 +2,3 @@ per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/services/tracing/public/mojom/chrome_config_mojom_traits.h b/services/tracing/public/mojom/chrome_config_mojom_traits.h index 1deafb3..87729c34 100644 --- a/services/tracing/public/mojom/chrome_config_mojom_traits.h +++ b/services/tracing/public/mojom/chrome_config_mojom_traits.h
@@ -11,7 +11,7 @@ #include <string> #include "mojo/public/cpp/bindings/struct_traits.h" -#include "services/tracing/public/mojom/perfetto_service.mojom.h" +#include "services/tracing/public/mojom/perfetto_service.mojom-shared.h" #include "third_party/perfetto/include/perfetto/tracing/core/chrome_config.h" namespace mojo {
diff --git a/services/tracing/public/mojom/commit_data_request_mojom_traits.h b/services/tracing/public/mojom/commit_data_request_mojom_traits.h index e10f485..98b344f 100644 --- a/services/tracing/public/mojom/commit_data_request_mojom_traits.h +++ b/services/tracing/public/mojom/commit_data_request_mojom_traits.h
@@ -12,7 +12,7 @@ #include <vector> #include "mojo/public/cpp/bindings/struct_traits.h" -#include "services/tracing/public/mojom/perfetto_service.mojom.h" +#include "services/tracing/public/mojom/perfetto_service.mojom-shared.h" #include "third_party/perfetto/include/perfetto/ext/tracing/core/commit_data_request.h" namespace mojo {
diff --git a/services/tracing/public/mojom/data_source_config_mojom_traits.h b/services/tracing/public/mojom/data_source_config_mojom_traits.h index e749282..44e2307 100644 --- a/services/tracing/public/mojom/data_source_config_mojom_traits.h +++ b/services/tracing/public/mojom/data_source_config_mojom_traits.h
@@ -11,7 +11,7 @@ #include <string> #include "mojo/public/cpp/bindings/struct_traits.h" -#include "services/tracing/public/mojom/perfetto_service.mojom.h" +#include "services/tracing/public/mojom/perfetto_service.mojom-shared.h" #include "third_party/perfetto/include/perfetto/tracing/core/chrome_config.h" #include "third_party/perfetto/include/perfetto/tracing/core/data_source_config.h"
diff --git a/services/tracing/public/mojom/data_source_descriptor_mojom_traits.h b/services/tracing/public/mojom/data_source_descriptor_mojom_traits.h index b98db41..4d407486 100644 --- a/services/tracing/public/mojom/data_source_descriptor_mojom_traits.h +++ b/services/tracing/public/mojom/data_source_descriptor_mojom_traits.h
@@ -11,7 +11,7 @@ #include <string> #include "mojo/public/cpp/bindings/struct_traits.h" -#include "services/tracing/public/mojom/perfetto_service.mojom.h" +#include "services/tracing/public/mojom/perfetto_service.mojom-shared.h" #include "third_party/perfetto/include/perfetto/tracing/core/data_source_descriptor.h" namespace mojo {
diff --git a/services/tracing/public/mojom/perfetto_service.typemap b/services/tracing/public/mojom/perfetto_service.typemap deleted file mode 100644 index b55ed90..0000000 --- a/services/tracing/public/mojom/perfetto_service.typemap +++ /dev/null
@@ -1,43 +0,0 @@ -mojom = "//services/tracing/public/mojom/perfetto_service.mojom" -public_headers = [ - "//third_party/perfetto/include/perfetto/ext/tracing/core/commit_data_request.h", - "//third_party/perfetto/include/perfetto/tracing/core/data_source_config.h", - "//third_party/perfetto/include/perfetto/tracing/core/data_source_descriptor.h", - "//third_party/perfetto/include/perfetto/tracing/core/chrome_config.h", - "//third_party/perfetto/include/perfetto/tracing/core/trace_config.h", -] -traits_headers = [ - "//services/tracing/public/mojom/commit_data_request_mojom_traits.h", - "//services/tracing/public/mojom/data_source_config_mojom_traits.h", - "//services/tracing/public/mojom/data_source_descriptor_mojom_traits.h", - "//services/tracing/public/mojom/chrome_config_mojom_traits.h", - "//services/tracing/public/mojom/trace_config_mojom_traits.h", -] -sources = [ - "//services/tracing/public/mojom/chrome_config_mojom_traits.cc", - "//services/tracing/public/mojom/chrome_config_mojom_traits.h", - "//services/tracing/public/mojom/commit_data_request_mojom_traits.cc", - "//services/tracing/public/mojom/commit_data_request_mojom_traits.h", - "//services/tracing/public/mojom/data_source_config_mojom_traits.cc", - "//services/tracing/public/mojom/data_source_config_mojom_traits.h", - "//services/tracing/public/mojom/data_source_descriptor_mojom_traits.cc", - "//services/tracing/public/mojom/data_source_descriptor_mojom_traits.h", - "//services/tracing/public/mojom/trace_config_mojom_traits.cc", - "//services/tracing/public/mojom/trace_config_mojom_traits.h", -] -public_deps = [ - "//third_party/perfetto:libperfetto", -] -type_mappings = [ - "tracing.mojom.BufferFillPolicy=::perfetto::TraceConfig::BufferConfig::FillPolicy", - "tracing.mojom.CommitDataRequest=::perfetto::CommitDataRequest", - "tracing.mojom.ChunksToMove=::perfetto::CommitDataRequest::ChunksToMove", - "tracing.mojom.ChunkPatch=::perfetto::CommitDataRequest::ChunkToPatch::Patch", - "tracing.mojom.ChunkToPatch=::perfetto::CommitDataRequest::ChunkToPatch", - "tracing.mojom.DataSourceConfig=::perfetto::DataSourceConfig", - "tracing.mojom.ChromeConfig=::perfetto::ChromeConfig", - "tracing.mojom.DataSourceRegistration=::perfetto::DataSourceDescriptor", - "tracing.mojom.PerfettoBuiltinDataSource=::perfetto::TraceConfig::BuiltinDataSource", - "tracing.mojom.IncrementalStateConfig=::perfetto::TraceConfig::IncrementalStateConfig", - "tracing.mojom.TraceConfig=::perfetto::TraceConfig", -]
diff --git a/services/tracing/public/mojom/trace_config_mojom_traits.h b/services/tracing/public/mojom/trace_config_mojom_traits.h index 05b2aae..87d73c76 100644 --- a/services/tracing/public/mojom/trace_config_mojom_traits.h +++ b/services/tracing/public/mojom/trace_config_mojom_traits.h
@@ -13,7 +13,7 @@ #include "mojo/public/cpp/bindings/enum_traits.h" #include "mojo/public/cpp/bindings/struct_traits.h" -#include "services/tracing/public/mojom/perfetto_service.mojom.h" +#include "services/tracing/public/mojom/perfetto_service.mojom-shared.h" #include "third_party/perfetto/include/perfetto/tracing/core/trace_config.h" namespace mojo {
diff --git a/services/tracing/public/mojom/typemaps.gni b/services/tracing/public/mojom/typemaps.gni deleted file mode 100644 index 1544fb1..0000000 --- a/services/tracing/public/mojom/typemaps.gni +++ /dev/null
@@ -1 +0,0 @@ -typemaps = [ "//services/tracing/public/mojom/perfetto_service.typemap" ]
diff --git a/testing/buildbot/chrome.ci.json b/testing/buildbot/chrome.ci.json index b93019d7..8f0a503 100644 --- a/testing/buildbot/chrome.ci.json +++ b/testing/buildbot/chrome.ci.json
@@ -2206,7 +2206,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2382,7 +2382,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2600,7 +2600,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 0a34ccd..1fb82bb 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -1576,7 +1576,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1752,7 +1752,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1970,7 +1970,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index f70ac4c..0fc1abc 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -572,8 +572,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/bfcache.chrome_public_test_apk.filter", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -832,7 +831,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter", "-v" ], @@ -902,7 +900,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter", "-v" ],
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index c44d017f..56916f1 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -2793,8 +2793,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -2849,8 +2848,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -6368,8 +6366,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -9663,8 +9660,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -9718,8 +9714,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -13182,7 +13177,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--timeout-scale", "2.0" ], @@ -15635,8 +15629,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -15923,8 +15916,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 0, "merge": { @@ -16031,8 +16023,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -17452,8 +17443,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -17507,8 +17497,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -22145,8 +22134,7 @@ "--gtest_filter=TabTest.testTabContext", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -25886,8 +25874,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -33098,8 +33085,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -35976,8 +35962,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -41032,7 +41017,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--avd-config=../../tools/android/avd/proto/generic_playstore_android28.textpb", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter" ], @@ -41102,7 +41086,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--avd-config=../../tools/android/avd/proto/generic_playstore_android28.textpb", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter" ],
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 50b9542..0e7986f5 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -1371,7 +1371,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1529,7 +1529,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -1721,7 +1721,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2999,7 +2999,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3166,7 +3166,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3369,7 +3369,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -4566,7 +4566,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
diff --git a/testing/buildbot/chromium.ci.json b/testing/buildbot/chromium.ci.json index 29eefaa..e8ea9b2 100644 --- a/testing/buildbot/chromium.ci.json +++ b/testing/buildbot/chromium.ci.json
@@ -2196,8 +2196,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2220,8 +2220,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2245,8 +2245,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2269,8 +2269,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2295,8 +2295,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2320,8 +2320,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2346,8 +2346,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2377,8 +2377,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2411,8 +2411,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2438,8 +2438,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2470,8 +2470,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2504,8 +2504,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2537,8 +2537,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2570,8 +2570,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2603,8 +2603,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2635,8 +2635,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3475,7 +3475,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--exclude-annotation", "Feature=RenderTest" ], @@ -3532,7 +3531,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--exclude-annotation", "Feature=RenderTest" ], @@ -7240,8 +7238,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7283,8 +7280,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7778,8 +7774,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7821,8 +7816,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8061,8 +8055,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8297,8 +8290,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8339,8 +8331,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8891,8 +8882,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8934,8 +8924,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9508,8 +9497,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9551,8 +9539,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10077,8 +10064,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10120,8 +10106,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10269,8 +10254,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10422,8 +10406,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10519,8 +10502,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10878,8 +10860,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10920,8 +10901,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -16888,8 +16868,7 @@ "${buildername}", "--remote=127.0.0.1", "--remote-ssh-port=9222", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -16931,8 +16910,7 @@ "${buildername}", "--remote=127.0.0.1", "--remote-ssh-port=9222", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17297,8 +17275,7 @@ "--test-machine-name", "${buildername}", "--remote=variable_chromeos_device_hostname", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17343,8 +17320,7 @@ "--test-machine-name", "${buildername}", "--remote=variable_chromeos_device_hostname", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -23576,8 +23552,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23608,8 +23584,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23639,8 +23615,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23671,8 +23647,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23703,8 +23679,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23734,8 +23710,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23764,8 +23740,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23791,8 +23767,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23826,8 +23802,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -23859,8 +23835,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -24213,8 +24189,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24240,8 +24216,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24266,8 +24242,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24293,8 +24269,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24320,8 +24296,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24346,8 +24322,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24372,8 +24348,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24397,8 +24373,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24419,8 +24395,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24449,8 +24425,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24477,8 +24453,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24506,8 +24482,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24853,8 +24829,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24880,8 +24856,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24906,8 +24882,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24933,8 +24909,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24960,8 +24936,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24986,8 +24962,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25012,8 +24988,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25037,8 +25013,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25059,8 +25035,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25089,8 +25065,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25117,8 +25093,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25146,8 +25122,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25493,8 +25469,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25520,8 +25496,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25546,8 +25522,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25573,8 +25549,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25600,8 +25576,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25626,8 +25602,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25652,8 +25628,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25677,8 +25653,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25699,8 +25675,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25729,8 +25705,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25756,8 +25732,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -25784,8 +25760,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26129,8 +26105,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26156,8 +26132,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26182,8 +26158,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26209,8 +26185,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26236,8 +26212,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26262,8 +26238,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26288,8 +26264,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26313,8 +26289,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26335,8 +26311,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26365,8 +26341,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26392,8 +26368,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -26420,8 +26396,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -32879,7 +32855,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -33062,7 +33038,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -33265,7 +33241,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -34828,7 +34804,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -35021,7 +34997,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -35234,7 +35210,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -36498,8 +36474,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -36539,8 +36514,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -36580,8 +36554,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -36621,8 +36594,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -37157,8 +37129,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -37198,8 +37169,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -37239,8 +37209,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -37280,8 +37249,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38122,8 +38090,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38164,8 +38131,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38206,8 +38172,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38248,8 +38213,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38887,8 +38851,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38928,8 +38891,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -38969,8 +38931,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -39010,8 +38971,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -39690,8 +39650,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -39732,8 +39691,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -39774,8 +39732,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -39816,8 +39773,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -40518,8 +40474,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -40559,8 +40514,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -40600,8 +40554,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -40641,8 +40594,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -40965,8 +40917,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41233,8 +41184,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41347,8 +41297,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41432,8 +41381,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41667,8 +41615,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41781,8 +41728,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -41866,8 +41812,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -44971,8 +44916,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -45012,8 +44956,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -45053,8 +44996,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -45094,8 +45036,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -47396,7 +47337,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -47599,7 +47540,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -47820,7 +47761,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -49442,7 +49383,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -49634,7 +49575,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -49843,7 +49784,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -51873,8 +51814,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -51929,8 +51869,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -55448,8 +55387,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -59311,8 +59249,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -59351,8 +59288,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -59849,8 +59785,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -59889,8 +59824,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -60610,8 +60544,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -60656,8 +60589,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -60702,8 +60634,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -60748,8 +60679,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -61518,8 +61448,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -61558,8 +61487,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -61598,8 +61526,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -61638,8 +61565,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -62348,8 +62274,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -62390,8 +62315,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -62924,8 +62848,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -62966,8 +62889,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -63526,8 +63448,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -63568,8 +63489,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -63610,8 +63530,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -63652,8 +63571,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -64442,8 +64360,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -64484,8 +64401,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -64526,8 +64442,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -64568,8 +64483,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -65525,8 +65439,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -65567,8 +65480,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -65609,8 +65521,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -65651,8 +65562,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -66208,8 +66118,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -66248,8 +66157,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -66696,8 +66604,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -66737,8 +66644,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -67172,8 +67078,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -67214,8 +67119,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -67656,8 +67560,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -67698,8 +67601,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -68176,8 +68078,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -68219,8 +68120,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -82764,8 +82664,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -82819,8 +82718,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -86283,7 +86181,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--timeout-scale", "2.0" ], @@ -88685,23 +88582,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -88747,23 +88627,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -88780,22 +88643,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -88812,23 +88659,6 @@ "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" }, { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -88855,95 +88685,7 @@ ] }, "Mojo Linux": { - "gtest_tests": [ - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - } - ] + "gtest_tests": [] }, "Mojo Windows": { "gtest_tests": [ @@ -88983,23 +88725,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "merge": { @@ -89016,56 +88741,6 @@ "test_id_prefix": "ninja://content/test:content_browsertests/" }, { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -89236,8 +88911,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -90252,8 +89926,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -90292,8 +89965,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -90779,8 +90451,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -90821,8 +90492,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -91745,8 +91415,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91769,8 +91439,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91793,8 +91463,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91816,8 +91486,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91841,8 +91511,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91867,8 +91537,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91887,8 +91557,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91907,8 +91577,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91931,8 +91601,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91962,8 +91632,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -91996,8 +91666,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92028,8 +91698,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92058,8 +91728,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92091,8 +91761,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92124,8 +91794,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92157,8 +91827,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92190,8 +91860,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92222,8 +91892,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -92287,8 +91957,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 0, "merge": { @@ -92395,8 +92064,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -92812,8 +92480,7 @@ { "args": [ "--site-per-process", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [], @@ -93789,8 +93456,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -93844,8 +93510,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -97049,8 +96714,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -97104,8 +96768,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -99768,7 +99431,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -99960,7 +99623,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -100169,7 +99832,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -101420,7 +101083,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -101643,7 +101306,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -101866,7 +101529,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -103177,7 +102840,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -103369,7 +103032,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -103578,7 +103241,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -104736,7 +104399,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -104928,7 +104591,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -105137,7 +104800,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -106294,7 +105957,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -106469,7 +106132,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -106678,7 +106341,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -107855,7 +107518,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -108047,7 +107710,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -108256,7 +107919,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -109431,7 +109094,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -109623,7 +109286,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -109832,7 +109495,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -130112,7 +129775,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -130304,7 +129967,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -130513,7 +130176,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -134115,8 +133778,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134150,8 +133813,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134181,8 +133844,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134205,8 +133868,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134230,8 +133893,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134254,8 +133917,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134280,8 +133943,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134303,8 +133966,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134326,8 +133989,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134351,8 +134014,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134377,8 +134040,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134397,8 +134060,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134417,8 +134080,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134440,8 +134103,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134464,8 +134127,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134497,8 +134160,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134528,8 +134191,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134559,8 +134222,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134590,8 +134253,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134625,8 +134288,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134646,8 +134309,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -134666,8 +134328,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134687,8 +134349,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -134707,8 +134368,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134739,8 +134400,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134770,8 +134431,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134802,8 +134463,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134835,8 +134496,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134868,8 +134529,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -134900,8 +134561,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -135474,8 +135135,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -135516,8 +135176,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -136437,8 +136096,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -136511,8 +136169,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -137292,8 +136949,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -137334,8 +136990,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -138109,8 +137764,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -138150,8 +137804,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -139060,8 +138713,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -139102,8 +138754,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -139994,8 +139645,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -140036,8 +139686,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -140358,8 +140007,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140382,8 +140031,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140407,8 +140056,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140431,8 +140080,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140458,8 +140107,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140484,8 +140133,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140507,8 +140156,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140530,8 +140179,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140555,8 +140204,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140581,8 +140230,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140601,8 +140250,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140621,8 +140270,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140644,8 +140293,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140668,8 +140317,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140699,8 +140348,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140729,8 +140378,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140760,8 +140409,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140791,8 +140440,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140822,8 +140471,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140857,8 +140506,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140878,8 +140527,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -140898,8 +140546,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140930,8 +140578,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140950,8 +140598,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -140970,8 +140617,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -140997,8 +140644,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141028,8 +140675,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141059,8 +140706,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141092,8 +140739,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141126,8 +140773,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141159,8 +140806,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141192,8 +140839,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141225,8 +140872,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141257,8 +140904,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141291,8 +140938,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141314,8 +140961,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141334,8 +140981,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141357,8 +141004,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -141377,8 +141023,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141410,8 +141056,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141439,8 +141085,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141472,8 +141118,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141503,8 +141149,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141534,8 +141180,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141565,8 +141211,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141586,8 +141232,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -141606,8 +141251,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141627,8 +141272,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -141647,8 +141291,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141679,8 +141323,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141723,8 +141367,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141783,8 +141427,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141810,8 +141454,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141837,8 +141481,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141864,8 +141508,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141891,8 +141535,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141918,8 +141562,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141945,8 +141589,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141972,8 +141616,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -141999,8 +141643,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142026,8 +141670,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142053,8 +141697,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142080,8 +141724,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142107,8 +141751,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142133,8 +141777,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142160,8 +141804,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142192,8 +141836,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142216,8 +141860,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142241,8 +141885,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142265,8 +141909,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142292,8 +141936,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142318,8 +141962,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142341,8 +141985,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142364,8 +142008,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142389,8 +142033,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142415,8 +142059,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142435,8 +142079,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142455,8 +142099,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142478,8 +142122,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142502,8 +142146,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142533,8 +142177,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142563,8 +142207,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142594,8 +142238,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142625,8 +142269,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142656,8 +142300,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142691,8 +142335,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142712,8 +142356,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -142732,8 +142375,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142764,8 +142407,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142784,8 +142427,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -142804,8 +142446,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142830,8 +142472,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142861,8 +142503,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142892,8 +142534,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142925,8 +142567,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142959,8 +142601,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -142992,8 +142634,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -143025,8 +142667,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -143058,8 +142700,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -143090,8 +142732,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -143403,8 +143045,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/pixel_browser_tests.filter", "--browser-ui-tests-verify-pixels", "--enable-pixel-output-in-tests", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 100, "merge": { @@ -143669,7 +143310,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -143908,7 +143549,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -144184,7 +143825,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -144869,8 +144510,7 @@ }, { "args": [ - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [], @@ -151673,8 +151313,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151700,8 +151340,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151726,8 +151366,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151749,8 +151389,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151773,8 +151413,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151806,8 +151446,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151837,8 +151477,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151869,8 +151509,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151900,8 +151540,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151931,8 +151571,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151966,8 +151606,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -151987,8 +151627,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -152007,8 +151646,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152028,8 +151667,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -152048,8 +151686,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152080,8 +151718,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152111,8 +151749,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152143,8 +151781,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152174,8 +151812,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152202,8 +151840,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152229,8 +151867,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152253,8 +151891,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152278,8 +151916,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152312,8 +151950,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152344,8 +151982,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152377,8 +152015,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152409,8 +152047,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152441,8 +152079,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152477,8 +152115,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152498,8 +152136,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -152519,8 +152156,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152540,8 +152177,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -152561,8 +152197,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152589,8 +152225,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152621,8 +152257,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152653,8 +152289,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -152686,8 +152322,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -153462,8 +153098,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -153504,8 +153139,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -154151,8 +153785,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -154193,8 +153826,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -154908,8 +154540,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -154950,8 +154581,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -155759,8 +155389,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -155801,8 +155430,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -160376,8 +160004,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -160431,8 +160058,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -165884,8 +165510,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/bfcache.chrome_public_test_apk.filter", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -167038,8 +166663,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -167094,8 +166718,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -174199,8 +173822,7 @@ "--gtest_filter=TabTest.testTabContext", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -177940,8 +177562,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -180496,7 +180117,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter", "-v" ], @@ -180566,7 +180186,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter", "-v" ], @@ -184710,8 +184329,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -185801,8 +185419,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -188684,8 +188301,7 @@ "--additional-apk=//third_party/gvr-android-sdk/test-apks/vr_keyboard/vr_keyboard_current.apk", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -193740,7 +193356,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--avd-config=../../tools/android/avd/proto/generic_playstore_android28.textpb", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter" ], @@ -193810,7 +193425,6 @@ "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--avd-config=../../tools/android/avd/proto/generic_playstore_android28.textpb", "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_p.chrome_public_test_apk.filter" ], @@ -244890,7 +244504,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -245057,7 +244671,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -245260,7 +244874,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -246565,7 +246179,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -246723,7 +246337,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -246915,7 +246529,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -248193,7 +247807,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -248360,7 +247974,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -248563,7 +248177,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -249812,7 +249426,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -250004,7 +249618,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -250213,7 +249827,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -251794,7 +251408,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -251997,7 +251611,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -252218,7 +251832,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -253947,7 +253561,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -254100,7 +253714,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -254288,7 +253902,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -255362,7 +254976,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", @@ -257563,7 +257177,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -257755,7 +257369,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -257964,7 +257578,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -266145,8 +265759,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/pixel_browser_tests.filter", "--browser-ui-tests-verify-pixels", "--enable-pixel-output-in-tests", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 100, "merge": {
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 16864d22..6765693 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -5728,8 +5728,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -5783,8 +5782,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -8988,8 +8986,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -9043,8 +9040,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -11707,7 +11703,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -11899,7 +11895,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -12108,7 +12104,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -13359,7 +13355,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -13582,7 +13578,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -13805,7 +13801,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -15116,7 +15112,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -15308,7 +15304,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -15517,7 +15513,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -16675,7 +16671,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -16867,7 +16863,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -17076,7 +17072,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18233,7 +18229,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18408,7 +18404,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -18617,7 +18613,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19794,7 +19790,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -19986,7 +19982,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -20195,7 +20191,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21370,7 +21366,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21562,7 +21558,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -21771,7 +21767,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -42041,7 +42037,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -42233,7 +42229,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -42442,7 +42438,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.dawn.json b/testing/buildbot/chromium.dawn.json index 4be1d564..331fb89 100644 --- a/testing/buildbot/chromium.dawn.json +++ b/testing/buildbot/chromium.dawn.json
@@ -2593,8 +2593,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2625,8 +2625,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2656,8 +2656,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2688,8 +2688,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2720,8 +2720,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2751,8 +2751,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2781,8 +2781,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2808,8 +2808,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2843,8 +2843,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -2876,8 +2876,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" }, { @@ -3230,8 +3230,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3257,8 +3257,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3283,8 +3283,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3310,8 +3310,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3337,8 +3337,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3363,8 +3363,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3389,8 +3389,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3414,8 +3414,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3436,8 +3436,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3466,8 +3466,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3494,8 +3494,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3523,8 +3523,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3870,8 +3870,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3897,8 +3897,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3923,8 +3923,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3950,8 +3950,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3977,8 +3977,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4003,8 +4003,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4029,8 +4029,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4054,8 +4054,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4076,8 +4076,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4106,8 +4106,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4134,8 +4134,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4163,8 +4163,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4510,8 +4510,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4537,8 +4537,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4563,8 +4563,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4590,8 +4590,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4617,8 +4617,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4643,8 +4643,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4669,8 +4669,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4694,8 +4694,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4716,8 +4716,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4746,8 +4746,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4773,8 +4773,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4801,8 +4801,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5146,8 +5146,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5173,8 +5173,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5199,8 +5199,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5226,8 +5226,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5253,8 +5253,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5279,8 +5279,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5305,8 +5305,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5330,8 +5330,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5352,8 +5352,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5382,8 +5382,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5409,8 +5409,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5437,8 +5437,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ],
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index cc75a56b..f6308d5 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -203,23 +203,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -265,23 +248,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -298,22 +264,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ "--enable-features=NetworkService" ], "merge": { @@ -330,23 +280,6 @@ "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" }, { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -373,95 +306,7 @@ ] }, "Mojo Linux": { - "gtest_tests": [ - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "os": "Ubuntu-16.04" - } - ], - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - } - ] + "gtest_tests": [] }, "Mojo Windows": { "gtest_tests": [ @@ -501,23 +346,6 @@ }, { "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 15 - }, - "test": "browser_tests", - "test_id_prefix": "ninja://chrome/test:browser_tests/" - }, - { - "args": [ "--enable-features=NetworkService,NetworkServiceInProcess" ], "merge": { @@ -534,56 +362,6 @@ "test_id_prefix": "ninja://content/test:content_browsertests/" }, { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_content_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 2 - }, - "test": "content_browsertests", - "test_id_prefix": "ninja://content/test:content_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_extensions_browsertests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" - }, - "test": "extensions_browsertests", - "test_id_prefix": "ninja://extensions:extensions_browsertests/" - }, - { - "args": [ - "--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox" - ], - "merge": { - "args": [], - "script": "//testing/merge_scripts/standard_gtest_merge.py" - }, - "name": "storage_service_sandboxed_interactive_ui_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", - "shards": 3 - }, - "test": "interactive_ui_tests", - "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" - }, - { "merge": { "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -625,8 +403,7 @@ { "args": [ "--site-per-process", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [], @@ -7181,8 +6958,7 @@ "args": [ "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -7237,8 +7013,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_profile_data": true, "merge": { @@ -12421,8 +12196,7 @@ "--disable-features=NetworkServiceInProcess", "--gs-results-bucket=chromium-result-details", "--recover-devices", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [ @@ -54336,7 +54110,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -54503,7 +54277,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -54706,7 +54480,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -55955,7 +55729,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -56147,7 +55921,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -56356,7 +56130,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -57937,7 +57711,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -58140,7 +57914,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -58361,7 +58135,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -60085,7 +59859,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -60238,7 +60012,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -60426,7 +60200,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -61246,6 +61020,1169 @@ "mac-arm64": { "additional_compile_targets": [ "all" + ], + "gtest_tests": [ + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "absl_hardening_tests", + "test_id_prefix": "ninja://third_party/abseil-cpp:absl_hardening_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "accessibility_unittests", + "test_id_prefix": "ninja://ui/accessibility:accessibility_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "angle_unittests", + "test_id_prefix": "ninja://third_party/angle/src/tests:angle_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "app_shell_unittests", + "test_id_prefix": "ninja://extensions/shell:app_shell_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "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, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "base_util_unittests", + "test_id_prefix": "ninja://base/util:base_util_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_common_unittests", + "test_id_prefix": "ninja://third_party/blink/common:blink_common_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_fuzzer_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform:blink_fuzzer_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_heap_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/platform/heap:blink_heap_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "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" + }, + "name": "webkit_unit_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "blink_unittests", + "test_id_prefix": "ninja://third_party/blink/renderer/controller:blink_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "boringssl_crypto_tests", + "test_id_prefix": "ninja://third_party/boringssl:boringssl_crypto_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "boringssl_ssl_tests", + "test_id_prefix": "ninja://third_party/boringssl:boringssl_ssl_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 10 + }, + "test": "browser_tests", + "test_id_prefix": "ninja://chrome/test:browser_tests/" + }, + { + "args": [ + "--gtest_filter=-*UsingRealWebcam*" + ], + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "capture_unittests", + "test_id_prefix": "ninja://media/capture:capture_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cast_unittests", + "test_id_prefix": "ninja://media/cast:cast_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cc_unittests", + "test_id_prefix": "ninja://cc:cc_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "chrome_app_unittests", + "test_id_prefix": "ninja://chrome/test:chrome_app_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "chromedriver_unittests", + "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "components_browsertests", + "test_id_prefix": "ninja://components:components_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "components_unittests", + "test_id_prefix": "ninja://components:components_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 6 + }, + "test": "content_browsertests", + "test_id_prefix": "ninja://content/test:content_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "content_nocompile_tests", + "test_id_prefix": "ninja://content/test:content_nocompile_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "content_unittests", + "test_id_prefix": "ninja://content/test:content_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "crashpad_tests", + "test_id_prefix": "ninja://third_party/crashpad/crashpad:crashpad_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cronet_tests", + "test_id_prefix": "ninja://components/cronet:cronet_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "cronet_unittests", + "test_id_prefix": "ninja://components/cronet:cronet_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "crypto_unittests", + "test_id_prefix": "ninja://crypto:crypto_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "device_unittests", + "test_id_prefix": "ninja://device:device_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "display_unittests", + "test_id_prefix": "ninja://ui/display:display_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "events_unittests", + "test_id_prefix": "ninja://ui/events:events_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "extensions_browsertests", + "test_id_prefix": "ninja://extensions:extensions_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "extensions_unittests", + "test_id_prefix": "ninja://extensions:extensions_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "filesystem_service_unittests", + "test_id_prefix": "ninja://components/services/filesystem:filesystem_service_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gcm_unit_tests", + "test_id_prefix": "ninja://google_apis/gcm:gcm_unit_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gfx_unittests", + "test_id_prefix": "ninja://ui/gfx:gfx_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gin_unittests", + "test_id_prefix": "ninja://gin:gin_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "google_apis_unittests", + "test_id_prefix": "ninja://google_apis:google_apis_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gpu_unittests", + "test_id_prefix": "ninja://gpu:gpu_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "gwp_asan_unittests", + "test_id_prefix": "ninja://components/gwp_asan:gwp_asan_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "headless_browsertests", + "test_id_prefix": "ninja://headless:headless_browsertests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "headless_unittests", + "test_id_prefix": "ninja://headless:headless_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 3 + }, + "test": "interactive_ui_tests", + "test_id_prefix": "ninja://chrome/test:interactive_ui_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ipc_tests", + "test_id_prefix": "ninja://ipc:ipc_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "jingle_unittests", + "test_id_prefix": "ninja://jingle:jingle_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "latency_unittests", + "test_id_prefix": "ninja://ui/latency:latency_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "libjingle_xmpp_unittests", + "test_id_prefix": "ninja://third_party/libjingle_xmpp:libjingle_xmpp_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "media_blink_unittests", + "test_id_prefix": "ninja://media/blink:media_blink_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "media_unittests", + "test_id_prefix": "ninja://media:media_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "message_center_unittests", + "test_id_prefix": "ninja://ui/message_center:message_center_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "midi_unittests", + "test_id_prefix": "ninja://media/midi:midi_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "mojo_unittests", + "test_id_prefix": "ninja://mojo:mojo_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "native_theme_unittests", + "test_id_prefix": "ninja://ui/native_theme:native_theme_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "net_unittests", + "test_id_prefix": "ninja://net:net_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "pdf_unittests", + "test_id_prefix": "ninja://pdf:pdf_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "perfetto_unittests", + "test_id_prefix": "ninja://third_party/perfetto:perfetto_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ppapi_unittests", + "test_id_prefix": "ninja://ppapi:ppapi_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "printing_unittests", + "test_id_prefix": "ninja://printing:printing_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "remoting_unittests", + "test_id_prefix": "ninja://remoting:remoting_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "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, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "service_manager_unittests", + "test_id_prefix": "ninja://services/service_manager/tests:service_manager_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "services_unittests", + "test_id_prefix": "ninja://services:services_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "shell_dialogs_unittests", + "test_id_prefix": "ninja://ui/shell_dialogs:shell_dialogs_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "skia_unittests", + "test_id_prefix": "ninja://skia:skia_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "snapshot_unittests", + "test_id_prefix": "ninja://ui/snapshot:snapshot_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sql_unittests", + "test_id_prefix": "ninja://sql:sql_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "storage_unittests", + "test_id_prefix": "ninja://storage:storage_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "sync_integration_tests", + "test_id_prefix": "ninja://chrome/test:sync_integration_tests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_base_unittests", + "test_id_prefix": "ninja://ui/base:ui_base_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "ui_touch_selection_unittests", + "test_id_prefix": "ninja://ui/touch_selection:ui_touch_selection_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "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, + "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, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "url_unittests", + "test_id_prefix": "ninja://url:url_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "views_unittests", + "test_id_prefix": "ninja://ui/views:views_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "viz_unittests", + "test_id_prefix": "ninja://components/viz:viz_unittests/" + }, + { + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_gtest_merge.py" + }, + "swarming": { + "can_use_on_swarming_builders": true, + "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, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test": "xr_browser_tests", + "test_id_prefix": "ninja://chrome/test:xr_browser_tests/" + } + ], + "isolated_scripts": [ + { + "isolate_name": "blink_python_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "blink_python_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://:blink_python_tests/" + }, + { + "args": [ + "--num-retries=3" + ], + "isolate_name": "blink_web_tests", + "merge": { + "args": [ + "--verbose" + ], + "script": "//third_party/blink/tools/merge_web_test_results.py" + }, + "name": "blink_web_tests", + "results_handler": "layout tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 12 + }, + "test_id_prefix": "ninja://:blink_web_tests/" + }, + { + "args": [ + "--test-type=integration" + ], + "isolate_name": "chromedriver_py_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "chromedriver_py_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_py_tests/" + }, + { + "isolate_name": "chromedriver_replay_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "chromedriver_replay_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://chrome/test/chromedriver:chromedriver_replay_unittests/" + }, + { + "args": [ + "--gtest-benchmark-name=components_perftests" + ], + "isolate_name": "components_perftests", + "merge": { + "args": [ + "--smoke-test-mode" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "components_perftests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://components:components_perftests/" + }, + { + "isolate_name": "content_shell_crash_test", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "content_shell_crash_test", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://content/shell:content_shell_crash_test/" + }, + { + "isolate_name": "flatbuffers_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "flatbuffers_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://third_party/flatbuffers:flatbuffers_unittests/" + }, + { + "isolate_name": "grit_python_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "grit_python_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://tools/grit:grit_python_unittests/" + }, + { + "isolate_name": "mac_signing_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "mac_signing_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://chrome/installer/mac:mac_signing_tests/" + }, + { + "isolate_name": "metrics_python_tests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "metrics_python_tests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://tools/metrics:metrics_python_tests/" + }, + { + "isolate_name": "mojo_python_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "mojo_python_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://mojo/public/tools:mojo_python_unittests/" + }, + { + "isolate_name": "telemetry_gpu_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_gpu_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://chrome/test:telemetry_gpu_unittests/" + }, + { + "args": [ + "--extra-browser-args=--enable-crashpad" + ], + "isolate_name": "telemetry_perf_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_perf_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 12 + }, + "test_id_prefix": "ninja://chrome/test:telemetry_perf_unittests/" + }, + { + "args": [ + "--jobs=1", + "--extra-browser-args=--disable-gpu" + ], + "isolate_name": "telemetry_unittests", + "merge": { + "args": [], + "script": "//testing/merge_scripts/standard_isolated_script_merge.py" + }, + "name": "telemetry_unittests", + "swarming": { + "can_use_on_swarming_builders": true, + "idempotent": false, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com", + "shards": 4 + }, + "test_id_prefix": "ninja://chrome/test:telemetry_unittests/" + }, + { + "args": [ + "--gtest-benchmark-name=views_perftests" + ], + "isolate_name": "views_perftests", + "merge": { + "args": [ + "--smoke-test-mode" + ], + "script": "//tools/perf/process_perf_results.py" + }, + "name": "views_perftests", + "swarming": { + "can_use_on_swarming_builders": true, + "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" + }, + "test_id_prefix": "ninja://ui/views:views_perftests/" + } ] }, "mac-code-coverage": { @@ -64778,8 +65715,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/pixel_browser_tests.filter", "--browser-ui-tests-verify-pixels", "--enable-pixel-output-in-tests", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 100, "merge": {
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 0b2ff3cb..5e457ae 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2196,8 +2196,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2220,8 +2220,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2245,8 +2245,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2269,8 +2269,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2295,8 +2295,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2320,8 +2320,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2346,8 +2346,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2377,8 +2377,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2411,8 +2411,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2438,8 +2438,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2470,8 +2470,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2504,8 +2504,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2537,8 +2537,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2570,8 +2570,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2603,8 +2603,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2635,8 +2635,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4074,8 +4074,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4117,8 +4116,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4612,8 +4610,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4655,8 +4652,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4895,8 +4891,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -5131,8 +5126,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -5173,8 +5167,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -5725,8 +5718,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -5768,8 +5760,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -6342,8 +6333,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -6385,8 +6375,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -6911,8 +6900,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -6954,8 +6942,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7103,8 +7090,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7256,8 +7242,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7353,8 +7338,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7749,8 +7733,7 @@ "${buildername}", "--remote=127.0.0.1", "--remote-ssh-port=9222", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -7792,8 +7775,7 @@ "${buildername}", "--remote=127.0.0.1", "--remote-ssh-port=9222", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8158,8 +8140,7 @@ "--test-machine-name", "${buildername}", "--remote=variable_chromeos_device_hostname", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8204,8 +8185,7 @@ "--test-machine-name", "${buildername}", "--remote=variable_chromeos_device_hostname", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8748,8 +8728,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8789,8 +8768,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8830,8 +8808,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -8871,8 +8848,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9713,8 +9689,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9755,8 +9730,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9797,8 +9771,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -9839,8 +9812,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10478,8 +10450,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10519,8 +10490,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10560,8 +10530,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -10601,8 +10570,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -11281,8 +11249,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -11323,8 +11290,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -11365,8 +11331,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -11407,8 +11372,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12109,8 +12073,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12150,8 +12113,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12191,8 +12153,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12232,8 +12193,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12556,8 +12516,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12824,8 +12783,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -12938,8 +12896,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -13023,8 +12980,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -13258,8 +13214,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -13372,8 +13327,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -13457,8 +13411,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -14206,8 +14159,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -14246,8 +14198,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -14967,8 +14918,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15013,8 +14963,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15059,8 +15008,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15105,8 +15053,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15875,8 +15822,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15915,8 +15861,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15955,8 +15900,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -15995,8 +15939,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -16705,8 +16648,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -16747,8 +16689,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17281,8 +17222,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17323,8 +17263,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17883,8 +17822,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17925,8 +17863,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -17967,8 +17904,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -18009,8 +17945,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -18799,8 +18734,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -18841,8 +18775,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -18883,8 +18816,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -18925,8 +18857,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -19882,8 +19813,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -19924,8 +19854,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -19966,8 +19895,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -20008,8 +19936,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -21055,8 +20982,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -21095,8 +21021,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -21582,8 +21507,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -21624,8 +21548,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -22548,8 +22471,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22572,8 +22495,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22596,8 +22519,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22619,8 +22542,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22644,8 +22567,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22670,8 +22593,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22690,8 +22613,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22710,8 +22633,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22734,8 +22657,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22765,8 +22688,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22799,8 +22722,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22831,8 +22754,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22861,8 +22784,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22894,8 +22817,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22927,8 +22850,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22960,8 +22883,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -22993,8 +22916,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23025,8 +22948,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23061,8 +22984,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23096,8 +23019,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23127,8 +23050,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23151,8 +23074,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23176,8 +23099,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23200,8 +23123,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23226,8 +23149,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23249,8 +23172,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23272,8 +23195,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23297,8 +23220,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23323,8 +23246,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23343,8 +23266,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23363,8 +23286,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23386,8 +23309,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23410,8 +23333,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23443,8 +23366,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23474,8 +23397,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23505,8 +23428,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23536,8 +23459,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23571,8 +23494,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23592,8 +23515,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -23612,8 +23534,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23633,8 +23555,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -23653,8 +23574,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23685,8 +23606,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23716,8 +23637,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23748,8 +23669,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23781,8 +23702,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23814,8 +23735,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -23846,8 +23767,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -24420,8 +24341,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -24462,8 +24382,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -25383,8 +25302,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -25457,8 +25375,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -26238,8 +26155,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -26280,8 +26196,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -27055,8 +26970,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -27096,8 +27010,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -28006,8 +27919,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -28048,8 +27960,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -28940,8 +28851,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -28982,8 +28892,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -29304,8 +29213,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29328,8 +29237,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29353,8 +29262,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29377,8 +29286,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29404,8 +29313,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29430,8 +29339,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29453,8 +29362,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29476,8 +29385,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29501,8 +29410,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29527,8 +29436,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29547,8 +29456,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29567,8 +29476,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29590,8 +29499,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29614,8 +29523,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29645,8 +29554,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29675,8 +29584,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29706,8 +29615,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29737,8 +29646,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29768,8 +29677,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29803,8 +29712,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29824,8 +29733,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -29844,8 +29752,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29876,8 +29784,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29896,8 +29804,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -29916,8 +29823,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29943,8 +29850,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -29974,8 +29881,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30005,8 +29912,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30038,8 +29945,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30072,8 +29979,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30105,8 +30012,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30138,8 +30045,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30171,8 +30078,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30203,8 +30110,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30237,8 +30144,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30260,8 +30167,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30280,8 +30187,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30303,8 +30210,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -30323,8 +30229,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30356,8 +30262,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30385,8 +30291,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30418,8 +30324,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30449,8 +30355,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30480,8 +30386,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30511,8 +30417,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30532,8 +30438,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -30552,8 +30457,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30573,8 +30478,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -30593,8 +30497,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30625,8 +30529,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30669,8 +30573,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30729,8 +30633,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30756,8 +30660,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30783,8 +30687,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30810,8 +30714,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30837,8 +30741,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30864,8 +30768,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30891,8 +30795,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30918,8 +30822,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30945,8 +30849,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30972,8 +30876,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -30999,8 +30903,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31026,8 +30930,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31053,8 +30957,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31079,8 +30983,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31106,8 +31010,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31138,8 +31042,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31162,8 +31066,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31187,8 +31091,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31211,8 +31115,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31238,8 +31142,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31264,8 +31168,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31287,8 +31191,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31310,8 +31214,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31335,8 +31239,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31361,8 +31265,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31381,8 +31285,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31401,8 +31305,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31424,8 +31328,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31448,8 +31352,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31479,8 +31383,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31509,8 +31413,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31540,8 +31444,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31571,8 +31475,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31602,8 +31506,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31637,8 +31541,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31658,8 +31562,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -31678,8 +31581,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31710,8 +31613,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31730,8 +31633,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -31750,8 +31652,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31776,8 +31678,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31807,8 +31709,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31838,8 +31740,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31871,8 +31773,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31905,8 +31807,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31938,8 +31840,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -31971,8 +31873,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -32004,8 +31906,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -32036,8 +31938,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -32716,8 +32618,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -32758,8 +32659,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -33405,8 +33305,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -33447,8 +33346,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -34162,8 +34060,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -34204,8 +34101,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -35013,8 +34909,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -35055,8 +34950,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": {
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json index a3ed3a9..813d8f78 100644 --- a/testing/buildbot/chromium.gpu.json +++ b/testing/buildbot/chromium.gpu.json
@@ -178,8 +178,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -220,8 +219,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -725,8 +723,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -766,8 +763,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -807,8 +803,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -848,8 +843,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1348,8 +1342,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1389,8 +1382,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1430,8 +1422,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1471,8 +1462,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1895,8 +1885,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1935,8 +1924,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2349,8 +2337,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2389,8 +2376,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2837,8 +2823,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -2878,8 +2863,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -3313,8 +3297,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -3355,8 +3338,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -3797,8 +3779,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -3839,8 +3820,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4317,8 +4297,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -4360,8 +4339,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -4540,8 +4518,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4567,8 +4545,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4593,8 +4571,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4616,8 +4594,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4640,8 +4618,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4673,8 +4651,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4704,8 +4682,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4736,8 +4714,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4767,8 +4745,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4798,8 +4776,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4833,8 +4811,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4854,8 +4832,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4874,8 +4851,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4895,8 +4872,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -4915,8 +4891,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4947,8 +4923,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -4978,8 +4954,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5010,8 +4986,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5041,8 +5017,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5069,8 +5045,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5096,8 +5072,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5120,8 +5096,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5145,8 +5121,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5179,8 +5155,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5211,8 +5187,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5244,8 +5220,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5276,8 +5252,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5308,8 +5284,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5344,8 +5320,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5365,8 +5341,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -5386,8 +5361,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5407,8 +5382,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "isolate_profile_data": true, @@ -5428,8 +5402,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5456,8 +5430,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5488,8 +5462,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5520,8 +5494,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -5553,8 +5527,8 @@ "containment_type": "AUTO", "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ],
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 09fcaee4..87b03e6 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -5411,7 +5411,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -5614,7 +5614,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -5835,7 +5835,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7457,7 +7457,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7649,7 +7649,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7858,7 +7858,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9540,7 +9540,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9732,7 +9732,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9941,7 +9941,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index bc17d33..fbb1703 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -793,7 +793,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--exclude-annotation", "Feature=RenderTest" ], @@ -850,7 +849,6 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality", "--exclude-annotation", "Feature=RenderTest" ], @@ -6981,7 +6979,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7164,7 +7162,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -7367,7 +7365,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -8896,7 +8894,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9089,7 +9087,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -9302,7 +9300,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index b8af9c6..dae73a8 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -1775,8 +1775,7 @@ "--test-launcher-filter-file=../../testing/buildbot/filters/pixel_browser_tests.filter", "--browser-ui-tests-verify-pixels", "--enable-pixel-output-in-tests", - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "experiment_percentage": 100, "merge": { @@ -2041,7 +2040,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_content_browsertests", + "name": "storage_service_content_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2280,7 +2279,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_extensions_browsertests", + "name": "storage_service_extensions_browsertests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -2556,7 +2555,7 @@ "args": [], "script": "//testing/merge_scripts/standard_gtest_merge.py" }, - "name": "storage_service_unsandboxed_interactive_ui_tests", + "name": "storage_service_interactive_ui_tests", "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ @@ -3241,8 +3240,7 @@ }, { "args": [ - "--git-revision=${got_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_revision}" ], "merge": { "args": [],
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index fc877cb..628ce0c3 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -138,8 +138,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -179,8 +178,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -473,8 +471,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -513,8 +510,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -803,8 +799,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -843,8 +838,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1129,8 +1123,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1168,8 +1161,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1691,8 +1683,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1721,8 +1713,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1751,8 +1743,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1781,8 +1773,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1802,8 +1794,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1821,8 +1812,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1842,8 +1833,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1861,8 +1851,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1892,8 +1882,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1922,8 +1912,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1954,8 +1944,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -1986,8 +1976,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ],
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 2ebd79a..87fef6e9 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -718,7 +718,7 @@ # Uncommenting this argument will bypass all interactions with Skia # Gold in any tests that use it. This is meant as a temporary # emergency stop in case of a Gold outage that's affecting the bots. - '--bypass-skia-gold-functionality', + # '--bypass-skia-gold-functionality', ], 'precommit_args': [ '--gerrit-issue=${patch_issue}', @@ -846,8 +846,8 @@ 'win10_nvidia_quadro_p400_stable': { 'swarming': { 'dimensions': { - 'gpu': '10de:1cb3-26.21.14.3102', - 'os': 'Windows-10', + 'gpu': '10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148', + 'os': 'Windows-10|Windows-10-18363', 'pool': 'chromium.tests.gpu', }, }, @@ -859,8 +859,8 @@ 'swarming': { 'dimension_sets': [ { - 'gpu': '10de:1cb3-26.21.14.3102', - 'os': 'Windows-10', + 'gpu': '10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148', + 'os': 'Windows-10|Windows-10-18363', 'pool': 'chromium.tests.gpu', }, ],
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 246d88f..f2a6588 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -2297,7 +2297,7 @@ 'linux-lacros-tester-rel', # https://crbug.com/1111979 ], }, - 'storage_service_unsandboxed_content_browsertests': { + 'storage_service_content_browsertests': { 'remove_from': [ 'linux-lacros-tester-rel', # https://crbug.com/1111979 ], @@ -2314,12 +2314,12 @@ }, }, }, - 'storage_service_unsandboxed_extensions_browsertests': { + 'storage_service_extensions_browsertests': { 'remove_from': [ 'linux-lacros-tester-rel', # https://crbug.com/1111979 ], }, - 'storage_service_unsandboxed_interactive_ui_tests': { + 'storage_service_interactive_ui_tests': { 'modifications': { 'linux-chromeos-chrome': { # TODO(crbug.com/970649): Remove this filter.
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 7b90026..2a02bf8 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -3377,7 +3377,7 @@ 'experiment_percentage': 100, }, 'sql_unittests': {}, - 'storage_service_unsandboxed_content_browsertests': { + 'storage_service_content_browsertests': { 'args': [ '--enable-features=StorageServiceOutOfProcess', ], @@ -3387,14 +3387,14 @@ 'test': 'content_browsertests', 'experiment_percentage': 100, }, - 'storage_service_unsandboxed_extensions_browsertests': { + 'storage_service_extensions_browsertests': { 'args': [ '--enable-features=StorageServiceOutOfProcess', ], 'test': 'extensions_browsertests', 'experiment_percentage': 100, }, - 'storage_service_unsandboxed_interactive_ui_tests': { + 'storage_service_interactive_ui_tests': { 'args': [ '--enable-features=StorageServiceOutOfProcess' ], @@ -4127,7 +4127,7 @@ # TODO(https://crbug.com/1057802): Remove these tests once Out-of-Process # Storage is on by default. 'storage_service_gtests': { - 'storage_service_unsandboxed_content_browsertests': { + 'storage_service_content_browsertests': { 'args': [ '--enable-features=StorageServiceOutOfProcess', ], @@ -4136,13 +4136,13 @@ }, 'test': 'content_browsertests', }, - 'storage_service_unsandboxed_extensions_browsertests': { + 'storage_service_extensions_browsertests': { 'args': [ '--enable-features=StorageServiceOutOfProcess', ], 'test': 'extensions_browsertests', }, - 'storage_service_unsandboxed_interactive_ui_tests': { + 'storage_service_interactive_ui_tests': { 'args': [ '--enable-features=StorageServiceOutOfProcess' ], @@ -4153,44 +4153,6 @@ }, }, - # TODO(https://crbug.com/1057802): Remove these tests once Out-of-Process - # Storage sandboxing is on by default. - 'storage_service_sandbox_gtests': { - 'storage_service_sandboxed_browser_tests': { - 'args': [ - '--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox', - ], - 'swarming': { - 'shards': 15, - }, - 'test': 'browser_tests', - }, - 'storage_service_sandboxed_content_browsertests': { - 'args': [ - '--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox', - ], - 'swarming': { - 'shards': 2, - }, - 'test': 'content_browsertests', - }, - 'storage_service_sandboxed_extensions_browsertests': { - 'args': [ - '--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox', - ], - 'test': 'extensions_browsertests', - }, - 'storage_service_sandboxed_interactive_ui_tests': { - 'args': [ - '--enable-features=StorageServiceOutOfProcess,StorageServiceSandbox', - ], - 'swarming': { - 'shards': 3, - }, - 'test': 'interactive_ui_tests', - }, - }, - 'swangle_gtests': { 'angle_deqp_egl_tests': { 'args': [ @@ -5594,18 +5556,15 @@ 'aura_gtests', 'mojo_chromiumos_specific_gtests', 'network_service_gtests', - 'storage_service_sandbox_gtests', ], 'mojo_linux_gtests': [ - 'storage_service_sandbox_gtests', ], 'mojo_windows_gtests': [ 'mojo_windows_specific_gtests', 'network_service_fyi_gtests', 'network_service_in_process_gtests', - 'storage_service_sandbox_gtests', ], 'network_service_extra_gtests': [
diff --git a/testing/buildbot/v8.ci.json b/testing/buildbot/v8.ci.json index 8542b07..9c1c70f 100644 --- a/testing/buildbot/v8.ci.json +++ b/testing/buildbot/v8.ci.json
@@ -138,8 +138,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -179,8 +178,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1620,8 +1618,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1660,8 +1657,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1950,8 +1946,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -1990,8 +1985,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2276,8 +2270,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2315,8 +2308,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2838,8 +2830,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2868,8 +2860,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2898,8 +2890,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2928,8 +2920,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2949,8 +2941,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -2968,8 +2959,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -2989,8 +2980,7 @@ "--dont-restore-color-profile-after-test", "--test-machine-name", "${buildername}", - "--git-revision=${got_cr_revision}", - "--bypass-skia-gold-functionality" + "--git-revision=${got_cr_revision}" ], "isolate_name": "telemetry_gpu_integration_test", "merge": { @@ -3008,8 +2998,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3039,8 +3029,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3069,8 +3059,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3101,8 +3091,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ], @@ -3133,8 +3123,8 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-26.21.14.3102", - "os": "Windows-10", + "gpu": "10de:1cb3-26.21.14.3102|10de:1cb3-27.21.14.5148", + "os": "Windows-10|Windows-10-18363", "pool": "chromium.tests.gpu" } ],
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index b2de477..ba3e2960 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -2330,6 +2330,10 @@ 'additional_compile_targets': [ 'all', ], + 'test_suites': { + 'gtest_tests': 'chromium_mac_gtests_no_nacl', + 'isolated_scripts': 'chromium_mac_rel_isolated_scripts', + }, }, 'mac-code-coverage': { 'mixins': [
diff --git a/third_party/abseil-cpp/BUILD.gn b/third_party/abseil-cpp/BUILD.gn index 4241143..864493f 100644 --- a/third_party/abseil-cpp/BUILD.gn +++ b/third_party/abseil-cpp/BUILD.gn
@@ -184,7 +184,6 @@ testonly = true sources = [ "absl_hardening_test.cc" ] deps = [ - "//base/test:run_all_unittests", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/container:fixed_array", "//third_party/abseil-cpp/absl/container:inlined_vector", @@ -194,4 +193,7 @@ "//third_party/abseil-cpp/absl/types:variant", "//third_party/googletest:gtest", ] + if (build_with_chromium) { + deps += [ "//base/test:run_all_unittests" ] + } }
diff --git a/third_party/blink/common/BUILD.gn b/third_party/blink/common/BUILD.gn index e9f9cc7..99ee9a46 100644 --- a/third_party/blink/common/BUILD.gn +++ b/third_party/blink/common/BUILD.gn
@@ -147,6 +147,7 @@ "service_worker/service_worker_utils.cc", "switches.cc", "thread_safe_browser_interface_broker_proxy.cc", + "tokens/tokens_mojom_traits.cc", "user_agent/user_agent_metadata.cc", "web_package/signed_exchange_consts.cc", "web_package/web_package_request_matcher.cc", @@ -244,6 +245,7 @@ "origin_trials/trial_token_validator_unittest.cc", "test/run_all_unittests.cc", "tokens/multi_token_unittest.cc", + "tokens/tokens_mojom_traits_unittest.cc", "user_agent/user_agent_metadata_unittest.cc", "web_package/web_package_request_matcher_unittest.cc", ]
diff --git a/third_party/blink/common/tokens/OWNERS b/third_party/blink/common/tokens/OWNERS new file mode 100644 index 0000000..d5fefd8 --- /dev/null +++ b/third_party/blink/common/tokens/OWNERS
@@ -0,0 +1,2 @@ +per-file *_mojom_traits*.*=set noparent +per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/common/tokens/tokens_mojom_traits.cc b/third_party/blink/common/tokens/tokens_mojom_traits.cc new file mode 100644 index 0000000..67b4ff58 --- /dev/null +++ b/third_party/blink/common/tokens/tokens_mojom_traits.cc
@@ -0,0 +1,227 @@ +// 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/public/common/tokens/tokens_mojom_traits.h" + +#include "mojo/public/cpp/base/unguessable_token_mojom_traits.h" + +namespace mojo { + +//////////////////////////////////////////////////////////////////////////////// +// FRAME TOKENS + +///////////// +// FrameToken + +// static +bool UnionTraits<blink::mojom::FrameTokenDataView, blink::FrameToken>::Read( + blink::mojom::FrameTokenDataView input, + blink::FrameToken* output) { + using Tag = blink::mojom::FrameTokenDataView::Tag; + switch (input.tag()) { + case Tag::LOCAL_FRAME_TOKEN: { + blink::LocalFrameToken token; + bool ret = input.ReadLocalFrameToken(&token); + *output = token; + return ret; + } + case Tag::REMOTE_FRAME_TOKEN: { + blink::RemoteFrameToken token; + bool ret = input.ReadRemoteFrameToken(&token); + *output = token; + return ret; + } + } +} + +// static +blink::mojom::FrameTokenDataView::Tag +UnionTraits<blink::mojom::FrameTokenDataView, blink::FrameToken>::GetTag( + const blink::FrameToken& token) { + using Tag = blink::mojom::FrameTokenDataView::Tag; + if (token.Is<blink::LocalFrameToken>()) + return Tag::LOCAL_FRAME_TOKEN; + DCHECK(token.Is<blink::RemoteFrameToken>()); + return Tag::REMOTE_FRAME_TOKEN; +} + +// static +blink::LocalFrameToken UnionTraits< + blink::mojom::FrameTokenDataView, + blink::FrameToken>::local_frame_token(const blink::FrameToken& token) { + return token.GetAs<blink::LocalFrameToken>(); +} + +// static +blink::RemoteFrameToken UnionTraits< + blink::mojom::FrameTokenDataView, + blink::FrameToken>::remote_frame_token(const blink::FrameToken& token) { + return token.GetAs<blink::RemoteFrameToken>(); +} + +//////////////////////////////////////////////////////////////////////////////// +// WORKER TOKENS + +////////////// +// WorkerToken + +// static +bool UnionTraits<blink::mojom::WorkerTokenDataView, blink::WorkerToken>::Read( + blink::mojom::WorkerTokenDataView input, + blink::WorkerToken* output) { + using Tag = blink::mojom::WorkerTokenDataView::Tag; + switch (input.tag()) { + case Tag::DEDICATED_WORKER_TOKEN: { + blink::DedicatedWorkerToken token; + bool ret = input.ReadDedicatedWorkerToken(&token); + *output = token; + return ret; + } + case Tag::SERVICE_WORKER_TOKEN: { + blink::ServiceWorkerToken token; + bool ret = input.ReadServiceWorkerToken(&token); + *output = token; + return ret; + } + case Tag::SHARED_WORKER_TOKEN: { + blink::SharedWorkerToken token; + bool ret = input.ReadSharedWorkerToken(&token); + *output = token; + return ret; + } + } + return false; +} + +// static +blink::mojom::WorkerTokenDataView::Tag +UnionTraits<blink::mojom::WorkerTokenDataView, blink::WorkerToken>::GetTag( + const blink::WorkerToken& token) { + using Tag = blink::mojom::WorkerTokenDataView::Tag; + if (token.Is<blink::DedicatedWorkerToken>()) + return Tag::DEDICATED_WORKER_TOKEN; + if (token.Is<blink::ServiceWorkerToken>()) + return Tag::SERVICE_WORKER_TOKEN; + DCHECK(token.Is<blink::SharedWorkerToken>()); + return Tag::SHARED_WORKER_TOKEN; +} + +// static +blink::DedicatedWorkerToken +UnionTraits<blink::mojom::WorkerTokenDataView, blink::WorkerToken>:: + dedicated_worker_token(const blink::WorkerToken& token) { + return token.GetAs<blink::DedicatedWorkerToken>(); +} + +// static +blink::ServiceWorkerToken UnionTraits< + blink::mojom::WorkerTokenDataView, + blink::WorkerToken>::service_worker_token(const blink::WorkerToken& token) { + return token.GetAs<blink::ServiceWorkerToken>(); +} + +// static +blink::SharedWorkerToken UnionTraits< + blink::mojom::WorkerTokenDataView, + blink::WorkerToken>::shared_worker_token(const blink::WorkerToken& token) { + return token.GetAs<blink::SharedWorkerToken>(); +} + +//////////////////////////////////////////////////////////////////////////////// +// OTHER TOKENS +// +// Keep this section last. +// +// If you have multiple tokens that make a thematic group, please lift them to +// their own section, in alphabetical order. If adding a new token here, please +// keep the following list in alphabetic order. + +/////////////////////////////////// +// ExecutionContextAttributionToken + +// static +bool UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + Read(blink::mojom::ExecutionContextAttributionTokenDataView input, + blink::ExecutionContextAttributionToken* output) { + using Tag = blink::mojom::ExecutionContextAttributionTokenDataView::Tag; + switch (input.tag()) { + case Tag::LOCAL_FRAME_TOKEN: { + blink::LocalFrameToken token; + bool ret = input.ReadLocalFrameToken(&token); + *output = token; + return ret; + } + case Tag::DEDICATED_WORKER_TOKEN: { + blink::DedicatedWorkerToken token; + bool ret = input.ReadDedicatedWorkerToken(&token); + *output = token; + return ret; + } + case Tag::SERVICE_WORKER_TOKEN: { + blink::ServiceWorkerToken token; + bool ret = input.ReadServiceWorkerToken(&token); + *output = token; + return ret; + } + case Tag::SHARED_WORKER_TOKEN: { + blink::SharedWorkerToken token; + bool ret = input.ReadSharedWorkerToken(&token); + *output = token; + return ret; + } + } + return false; +} + +// static +blink::mojom::ExecutionContextAttributionTokenDataView::Tag +UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + GetTag(const blink::ExecutionContextAttributionToken& token) { + using Tag = blink::mojom::ExecutionContextAttributionTokenDataView::Tag; + if (token.Is<blink::LocalFrameToken>()) + return Tag::LOCAL_FRAME_TOKEN; + if (token.Is<blink::DedicatedWorkerToken>()) + return Tag::DEDICATED_WORKER_TOKEN; + if (token.Is<blink::ServiceWorkerToken>()) + return Tag::SERVICE_WORKER_TOKEN; + DCHECK(token.Is<blink::SharedWorkerToken>()); + return Tag::SHARED_WORKER_TOKEN; +} + +// static +blink::LocalFrameToken +UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + local_frame_token(const blink::ExecutionContextAttributionToken& token) { + return token.GetAs<blink::LocalFrameToken>(); +} + +// static +blink::DedicatedWorkerToken +UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + dedicated_worker_token( + const blink::ExecutionContextAttributionToken& token) { + return token.GetAs<blink::DedicatedWorkerToken>(); +} + +// static +blink::ServiceWorkerToken +UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + service_worker_token(const blink::ExecutionContextAttributionToken& token) { + return token.GetAs<blink::ServiceWorkerToken>(); +} + +// static +blink::SharedWorkerToken +UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken>:: + shared_worker_token(const blink::ExecutionContextAttributionToken& token) { + return token.GetAs<blink::SharedWorkerToken>(); +} + +} // namespace mojo
diff --git a/third_party/blink/common/tokens/tokens_mojom_traits_unittest.cc b/third_party/blink/common/tokens/tokens_mojom_traits_unittest.cc new file mode 100644 index 0000000..e241ad2 --- /dev/null +++ b/third_party/blink/common/tokens/tokens_mojom_traits_unittest.cc
@@ -0,0 +1,68 @@ +// 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/public/common/tokens/tokens_mojom_traits.h" + +#include "base/unguessable_token.h" +#include "mojo/public/cpp/test_support/test_utils.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/tokens/tokens.h" +#include "third_party/blink/public/mojom/tokens/tokens.mojom.h" + +namespace mojo { + +namespace { + +// Tests round-trip serialization for the given TokenType of a given +// MultiTokenType. +template <typename MultiTokenType, typename MojomType, typename TokenType> +void ExpectSerializationWorks() { + base::UnguessableToken raw_token = base::UnguessableToken::Create(); + TokenType typed_token(raw_token); + MultiTokenType multi_token(typed_token); + + MultiTokenType deserialized; + EXPECT_TRUE(::mojo::test::SerializeAndDeserialize<MojomType>(&multi_token, + &deserialized)); + EXPECT_TRUE(deserialized.template Is<TokenType>()); + EXPECT_EQ(multi_token, deserialized); + EXPECT_EQ(multi_token.template GetAs<TokenType>(), + deserialized.template GetAs<TokenType>()); + EXPECT_EQ(raw_token, deserialized.value()); +} + +} // namespace + +TEST(FrameTokenTest, MojomTraits) { + ExpectSerializationWorks<blink::FrameToken, blink::mojom::FrameToken, + blink::LocalFrameToken>(); + ExpectSerializationWorks<blink::FrameToken, blink::mojom::FrameToken, + blink::RemoteFrameToken>(); +} + +TEST(WorkerTokenTest, MojomTraits) { + ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, + blink::DedicatedWorkerToken>(); + ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, + blink::ServiceWorkerToken>(); + ExpectSerializationWorks<blink::WorkerToken, blink::mojom::WorkerToken, + blink::SharedWorkerToken>(); +} + +TEST(ExecutionContextAttributionTokenTest, MojomTraits) { + ExpectSerializationWorks<blink::ExecutionContextAttributionToken, + blink::mojom::ExecutionContextAttributionToken, + blink::LocalFrameToken>(); + ExpectSerializationWorks<blink::ExecutionContextAttributionToken, + blink::mojom::ExecutionContextAttributionToken, + blink::DedicatedWorkerToken>(); + ExpectSerializationWorks<blink::ExecutionContextAttributionToken, + blink::mojom::ExecutionContextAttributionToken, + blink::ServiceWorkerToken>(); + ExpectSerializationWorks<blink::ExecutionContextAttributionToken, + blink::mojom::ExecutionContextAttributionToken, + blink::SharedWorkerToken>(); +} + +} // namespace mojo
diff --git a/third_party/blink/perf_tests/accessibility/focus-links.html b/third_party/blink/perf_tests/accessibility/focus-links.html new file mode 100644 index 0000000..9d95939 --- /dev/null +++ b/third_party/blink/perf_tests/accessibility/focus-links.html
@@ -0,0 +1,79 @@ +<!DOCTYPE html> +<html> +<body> +<script src="../resources/runner.js"></script> + +<table id="testElement"> + <tr> + <th>Sender</th> + <td>Message</td> + </tr> +</table> + +<script> +var isDone = false; +var startTime; + +// Before the test starts, add 2000 rows to the table, something like a +// message board with lots of replies on a long thread. + +let table = document.getElementById('testElement'); +for (let i = 0; i < 2000; i++) { + let tr = document.createElement('tr'); + table.appendChild(tr); + let sender = document.createElement('td'); + sender.innerHTML = 'user' + Math.floor(10000*Math.random()); + tr.appendChild(sender); + let message = document.createElement('td'); + message.innerHTML = '<div>Message content ' + + Math.floor(10000*Math.random()) + '</div>'; + let link = document.createElement('a'); + link.href = '#'; + link.id = 'link' + i; + link.innerHTML = 'Reply'; + message.appendChild(link); + tr.appendChild(message); +} + +function runTest() { + if (startTime) { + PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime); + PerfTestRunner.addRunTestEndMarker(); + } + if (!isDone) { + PerfTestRunner.addRunTestStartMarker(); + startTime = PerfTestRunner.now(); + + // Iterate over some of the links and focus each one with a different + // delay. Just focusing a link shouldn't incur a large cost, + // even if the page has a lot of elements. + for (let i = 0; i < 100; i++) { + window.setTimeout(() => { + document.getElementById('link' + i).focus(); + }, 10 * i); + } + + // Wait to allow the asynchronous accessibility code that's + // covered by traceEventsToMeasure to have a chance to run. + setTimeout(runTest, 1500); + } +} + +PerfTestRunner.startMeasureValuesAsync({ + description: 'Test accessibility performance when appending to a textarea.', + unit: 'ms', + done: function () { + isDone = true; + }, + run: function() { + runTest(); + }, + iterationCount: 6, + tracingCategories: 'accessibility', + traceEventsToMeasure: [ + 'RenderAccessibilityImpl::SendPendingAccessibilityEvents', + ] +}); +</script> + +</html>
diff --git a/third_party/blink/public/common/tokens/OWNERS b/third_party/blink/public/common/tokens/OWNERS index 7aebc8abb..d5fefd8 100644 --- a/third_party/blink/public/common/tokens/OWNERS +++ b/third_party/blink/public/common/tokens/OWNERS
@@ -1,4 +1,2 @@ per-file *_mojom_traits*.*=set noparent per-file *_mojom_traits*.*=file://ipc/SECURITY_OWNERS -per-file *.typemap=set noparent -per-file *.typemap=file://ipc/SECURITY_OWNERS
diff --git a/third_party/blink/public/common/tokens/tokens.h b/third_party/blink/public/common/tokens/tokens.h index 988f326..27fa419 100644 --- a/third_party/blink/public/common/tokens/tokens.h +++ b/third_party/blink/public/common/tokens/tokens.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_TOKENS_H_ #include "base/util/type_safety/token_type.h" +#include "third_party/blink/public/common/tokens/multi_token.h" namespace blink { @@ -34,6 +35,9 @@ // will be distinct. using RemoteFrameToken = util::TokenType<class RemoteFrameTokenTypeMarker>; +// Can represent either type of FrameToken. +using FrameToken = MultiToken<LocalFrameToken, RemoteFrameToken>; + //////////////////////////////////////////////////////////////////////////////// // WORKER TOKENS @@ -42,13 +46,17 @@ using DedicatedWorkerToken = util::TokenType<class DedicatedWorkerTokenTypeMarker>; +// Identifies a blink::ServiceWorkerGlobalScope in the renderer and a +// content::ServiceWorkerVersion in the browser. +using ServiceWorkerToken = util::TokenType<class ServiceWorkerTokenTypeMarker>; + // Identifies a blink::SharedWorkerGlobalScope in the renderer and a // content::SharedWorkerHost in the browser. using SharedWorkerToken = util::TokenType<class SharedWorkerTokenTypeMarker>; -// Identifies a blink::ServiceWorkerGlobalScope in the renderer and a -// content::ServiceWorkerVersion in the browser. -using ServiceWorkerToken = util::TokenType<class ServiceWorkerTokenTypeMarker>; +// Can represent any type of WorkerToken. +using WorkerToken = + MultiToken<DedicatedWorkerToken, ServiceWorkerToken, SharedWorkerToken>; //////////////////////////////////////////////////////////////////////////////// // OTHER TOKENS @@ -59,6 +67,16 @@ // their own section, in alphabetical order. If adding a new token here, please // keep the following list in alphabetic order. +// Identifies an ExecutionContext hosted in a renderer for the purposes of +// memory and CPU attribution. Worklets are not tracked independently, but +// simply attributed to their parent context, hence only LocalFrames and workers +// can be named. As such, it is possible for multiple ExecutionContexts to have +// the same ExecutionContextAttributionToken. +using ExecutionContextAttributionToken = MultiToken<LocalFrameToken, + DedicatedWorkerToken, + ServiceWorkerToken, + SharedWorkerToken>; + // Identifies a blink::PortalContents / blink::HTMLPortalElement in the // renderer process, and a content::Portal in the browser process. using PortalToken = util::TokenType<class PortalTokenTypeMarker>;
diff --git a/third_party/blink/public/common/tokens/tokens_mojom_traits.h b/third_party/blink/public/common/tokens/tokens_mojom_traits.h index af23712..75a57c9 100644 --- a/third_party/blink/public/common/tokens/tokens_mojom_traits.h +++ b/third_party/blink/public/common/tokens/tokens_mojom_traits.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_TOKENS_MOJOM_TRAITS_H_ #define THIRD_PARTY_BLINK_PUBLIC_COMMON_TOKENS_TOKENS_MOJOM_TRAITS_H_ +#include "third_party/blink/public/common/common_export.h" #include "third_party/blink/public/common/tokens/token_mojom_traits_helper.h" #include "third_party/blink/public/common/tokens/tokens.h" #include "third_party/blink/public/mojom/tokens/tokens.mojom-shared.h" @@ -31,6 +32,19 @@ blink::mojom::RemoteFrameTokenDataView, blink::RemoteFrameToken> {}; +template <> +struct BLINK_COMMON_EXPORT + UnionTraits<blink::mojom::FrameTokenDataView, blink::FrameToken> { + static bool Read(blink::mojom::FrameTokenDataView input, + blink::FrameToken* output); + static blink::mojom::FrameTokenDataView::Tag GetTag( + const blink::FrameToken& token); + static blink::LocalFrameToken local_frame_token( + const blink::FrameToken& token); + static blink::RemoteFrameToken remote_frame_token( + const blink::FrameToken& token); +}; + //////////////////////////////////////////////////////////////////////////////// // WORKER TOKENS @@ -55,6 +69,21 @@ blink::mojom::SharedWorkerTokenDataView, blink::SharedWorkerToken> {}; +template <> +struct BLINK_COMMON_EXPORT + UnionTraits<blink::mojom::WorkerTokenDataView, blink::WorkerToken> { + static bool Read(blink::mojom::WorkerTokenDataView input, + blink::WorkerToken* output); + static blink::mojom::WorkerTokenDataView::Tag GetTag( + const blink::WorkerToken& token); + static blink::DedicatedWorkerToken dedicated_worker_token( + const blink::WorkerToken& token); + static blink::ServiceWorkerToken service_worker_token( + const blink::WorkerToken& token); + static blink::SharedWorkerToken shared_worker_token( + const blink::WorkerToken& token); +}; + //////////////////////////////////////////////////////////////////////////////// // OTHER TOKENS // @@ -65,6 +94,24 @@ // keep the following list in alphabetic order. template <> +struct BLINK_COMMON_EXPORT + UnionTraits<blink::mojom::ExecutionContextAttributionTokenDataView, + blink::ExecutionContextAttributionToken> { + static bool Read(blink::mojom::ExecutionContextAttributionTokenDataView input, + blink::ExecutionContextAttributionToken* output); + static blink::mojom::ExecutionContextAttributionTokenDataView::Tag GetTag( + const blink::ExecutionContextAttributionToken& token); + static blink::LocalFrameToken local_frame_token( + const blink::ExecutionContextAttributionToken& token); + static blink::DedicatedWorkerToken dedicated_worker_token( + const blink::ExecutionContextAttributionToken& token); + static blink::ServiceWorkerToken service_worker_token( + const blink::ExecutionContextAttributionToken& token); + static blink::SharedWorkerToken shared_worker_token( + const blink::ExecutionContextAttributionToken& token); +}; + +template <> struct StructTraits<blink::mojom::PortalTokenDataView, blink::PortalToken> : public blink::TokenMojomTraitsHelper<blink::mojom::PortalTokenDataView, blink::PortalToken> {};
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index b40bb59..f8a3363 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -2020,7 +2020,9 @@ Node root # Returns the root DOM node (and optionally the subtree) to the caller. - command getFlattenedDocument + # Deprecated, as it is not designed to work well with the rest of the DOM agent. + # Use DOMSnapshot.captureSnapshot instead. + deprecated command getFlattenedDocument parameters # The maximum depth at which children should be retrieved, defaults to 1. Use -1 for the # entire subtree or provide an integer larger than 0.
diff --git a/third_party/blink/public/mojom/tokens/BUILD.gn b/third_party/blink/public/mojom/tokens/BUILD.gn index d71335db..6bd2febf 100644 --- a/third_party/blink/public/mojom/tokens/BUILD.gn +++ b/third_party/blink/public/mojom/tokens/BUILD.gn
@@ -23,6 +23,10 @@ mojom = "blink.mojom.RemoteFrameToken" cpp = "::blink::RemoteFrameToken" }, + { + mojom = "blink.mojom.FrameToken" + cpp = "::blink::FrameToken" + }, # WORKER TOKENS { @@ -37,6 +41,10 @@ mojom = "blink.mojom.SharedWorkerToken" cpp = "::blink::SharedWorkerToken" }, + { + mojom = "blink.mojom.WorkerToken" + cpp = "::blink::WorkerToken" + }, # OTHER TOKENS # @@ -46,6 +54,10 @@ # them to their own section, in alphabetical order. If adding a new # token here, please keep the following list in alphabetic order. { + mojom = "blink.mojom.ExecutionContextAttributionToken" + cpp = "::blink::ExecutionContextAttributionToken" + }, + { mojom = "blink.mojom.PortalToken" cpp = "::blink::PortalToken" },
diff --git a/third_party/blink/public/mojom/tokens/tokens.mojom b/third_party/blink/public/mojom/tokens/tokens.mojom index 75a7d685..d8cc3f8 100644 --- a/third_party/blink/public/mojom/tokens/tokens.mojom +++ b/third_party/blink/public/mojom/tokens/tokens.mojom
@@ -27,6 +27,11 @@ mojo_base.mojom.UnguessableToken value; }; +union FrameToken { + LocalFrameToken local_frame_token; + RemoteFrameToken remote_frame_token; +}; + //////////////////////////////////////////////////////////////////////////////// // WORKER TOKENS @@ -34,12 +39,18 @@ mojo_base.mojom.UnguessableToken value; }; +struct ServiceWorkerToken { + mojo_base.mojom.UnguessableToken value; +}; + struct SharedWorkerToken { mojo_base.mojom.UnguessableToken value; }; -struct ServiceWorkerToken { - mojo_base.mojom.UnguessableToken value; +union WorkerToken { + DedicatedWorkerToken dedicated_worker_token; + ServiceWorkerToken service_worker_token; + SharedWorkerToken shared_worker_token; }; //////////////////////////////////////////////////////////////////////////////// @@ -51,6 +62,13 @@ // their own section, in alphabetical order. If adding a new token here, please // keep the following list in alphabetic order. +union ExecutionContextAttributionToken { + LocalFrameToken local_frame_token; + DedicatedWorkerToken dedicated_worker_token; + ServiceWorkerToken service_worker_token; + SharedWorkerToken shared_worker_token; +}; + struct PortalToken { mojo_base.mojom.UnguessableToken value; };
diff --git a/third_party/blink/public/web/web_ax_object.h b/third_party/blink/public/web/web_ax_object.h index 72e328c1..e857de89 100644 --- a/third_party/blink/public/web/web_ax_object.h +++ b/third_party/blink/public/web/web_ax_object.h
@@ -390,6 +390,12 @@ SkMatrix44& container_transform, bool* clips_children = nullptr) const; + // Retrieves a vector of all WebAXObjects in this document whose + // bounding boxes may have changed since the last query. Can be called + // on any object. + BLINK_EXPORT void GetAllObjectsWithChangedBounds( + WebVector<WebAXObject>& out_changed_bounds_objects) const; + // Blink-internal DOM Node ID. Currently used for PDF exporting. BLINK_EXPORT int GetDOMNodeId() const;
diff --git a/third_party/blink/renderer/core/accessibility/ax_object_cache.h b/third_party/blink/renderer/core/accessibility/ax_object_cache.h index 1c54b677..dd947f38 100644 --- a/third_party/blink/renderer/core/accessibility/ax_object_cache.h +++ b/third_party/blink/renderer/core/accessibility/ax_object_cache.h
@@ -145,6 +145,9 @@ // without producing any layout or other notifications. virtual void HandleFrameRectsChanged(Document&) = 0; + // Called when a layout object's bounding box may have changed. + virtual void InvalidateBoundingBox(const LayoutObject*) = 0; + virtual const AtomicString& ComputedRoleForNode(Node*) = 0; virtual String ComputedNameForNode(Node*) = 0;
diff --git a/third_party/blink/renderer/core/css/resolver/cascade_map.h b/third_party/blink/renderer/core/css/resolver/cascade_map.h index e929071..dc3255c 100644 --- a/third_party/blink/renderer/core/css/resolver/cascade_map.h +++ b/third_party/blink/renderer/core/css/resolver/cascade_map.h
@@ -74,6 +74,8 @@ using CustomMap = HashMap<CSSPropertyName, CascadePriority>; + const CustomMap& GetCustomMap() const { return custom_properties_; } + private: uint64_t high_priority_ = 0; bool has_important_ = false;
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.cc b/third_party/blink/renderer/core/css/resolver/style_cascade.cc index df50839..37ad268f 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.cc
@@ -127,6 +127,19 @@ To<CSSCustomPropertyDeclaration>(value).IsRevert()); } +bool IsInterpolation(CascadePriority priority) { + switch (priority.GetOrigin()) { + case CascadeOrigin::kAnimation: + case CascadeOrigin::kTransition: + return true; + case CascadeOrigin::kNone: + case CascadeOrigin::kUserAgent: + case CascadeOrigin::kUser: + case CascadeOrigin::kAuthor: + return false; + } +} + } // namespace MatchResult& StyleCascade::MutableMatchResult() { @@ -210,6 +223,38 @@ return resolved; } +HeapHashMap<CSSPropertyName, Member<const CSSValue>> +StyleCascade::GetCascadedValues() const { + DCHECK(!needs_match_result_analyze_); + DCHECK(!needs_interpolations_analyze_); + DCHECK_GE(generation_, 0); + + HeapHashMap<CSSPropertyName, Member<const CSSValue>> result; + + for (CSSPropertyID id : map_.NativeBitset()) { + CSSPropertyName name(id); + CascadePriority priority = map_.At(name); + DCHECK(priority.HasOrigin()); + if (IsInterpolation(priority)) + continue; + const CSSValue* cascaded = ValueAt(match_result_, priority.GetPosition()); + DCHECK(cascaded); + result.Set(name, cascaded); + } + + for (const auto& entry : map_.GetCustomMap()) { + CascadePriority priority = entry.value; + DCHECK(priority.HasOrigin()); + if (IsInterpolation(priority)) + continue; + const CSSValue* cascaded = ValueAt(match_result_, priority.GetPosition()); + DCHECK(cascaded); + result.Set(entry.key, cascaded); + } + + return result; +} + void StyleCascade::AnalyzeIfNeeded() { if (needs_match_result_analyze_) { AnalyzeMatchResult();
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade.h b/third_party/blink/renderer/core/css/resolver/style_cascade.h index a8e6d7b..be9389b 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade.h +++ b/third_party/blink/renderer/core/css/resolver/style_cascade.h
@@ -115,6 +115,21 @@ CascadeOrigin, CascadeResolver&); + // Returns the cascaded values [1]. + // + // This is intended for use by the Inspector Agent. + // + // Calling this requires a call to Apply to have taken place first. This is + // because some of the cascaded values depend on computed value of other + // properties (see ApplyCascadeAffecting). + // + // Note that this function currently returns cascaded values from + // CascadeOrigin::kUserAgent, kUser and kAuthor only. + // + // [1] https://drafts.csswg.org/css-cascade/#cascaded + HeapHashMap<CSSPropertyName, Member<const CSSValue>> GetCascadedValues() + const; + // The maximum number of tokens that may be produced by a var() // reference. //
diff --git a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc index 56cc8e7..db3d8dc 100644 --- a/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_cascade_test.cc
@@ -191,6 +191,11 @@ return cascade_.depends_on_cascade_affecting_property_; } + HeapHashMap<CSSPropertyName, Member<const CSSValue>> GetCascadedValues() + const { + return cascade_.GetCascadedValues(); + } + private: Document& GetDocument() const { return state_.GetDocument(); } Element* Body() const { return GetDocument().body(); } @@ -345,6 +350,13 @@ CSSPropertyName PropertyName(String name) { return *CSSPropertyName::From(GetDocument().GetExecutionContext(), name); } + + String CssTextAt( + const HeapHashMap<CSSPropertyName, Member<const CSSValue>>& map, + String name) { + const CSSValue* value = map.at(PropertyName(name)); + return value ? value->CssText() : g_null_atom; + } }; TEST_F(StyleCascadeTest, ApplySingle) { @@ -3414,4 +3426,108 @@ } } +TEST_F(StyleCascadeTest, GetCascadedValues) { + TestCascade cascade(GetDocument()); + cascade.Add("top:1px", CascadeOrigin::kUserAgent); + cascade.Add("right:2px", CascadeOrigin::kUserAgent); + cascade.Add("bottom:3px", CascadeOrigin::kUserAgent); + cascade.Add("left:4px !important", CascadeOrigin::kUserAgent); + cascade.Add("width:5px", CascadeOrigin::kUserAgent); + + cascade.Add("top:10px", CascadeOrigin::kUser); + cascade.Add("right:20px", CascadeOrigin::kUser); + cascade.Add("bottom:30px !important", CascadeOrigin::kUser); + cascade.Add("left:40px", CascadeOrigin::kUser); + cascade.Add("height:60px", CascadeOrigin::kUser); + cascade.Add("height:61px", CascadeOrigin::kUser); + cascade.Add("--x:70px", CascadeOrigin::kUser); + cascade.Add("--y:80px !important", CascadeOrigin::kUser); + + cascade.Add("top:100px", CascadeOrigin::kAuthor); + cascade.Add("right:201px !important", CascadeOrigin::kAuthor); + cascade.Add("right:200px", CascadeOrigin::kAuthor); + cascade.Add("bottom:300px", CascadeOrigin::kAuthor); + cascade.Add("left:400px", CascadeOrigin::kAuthor); + cascade.Add("--x:700px", CascadeOrigin::kAuthor); + cascade.Add("--y:800px", CascadeOrigin::kAuthor); + + cascade.Apply(); + + auto map = cascade.GetCascadedValues(); + EXPECT_EQ(8u, map.size()); + + EXPECT_EQ("100px", CssTextAt(map, "top")); + EXPECT_EQ("201px", CssTextAt(map, "right")); + EXPECT_EQ("30px", CssTextAt(map, "bottom")); + EXPECT_EQ("4px", CssTextAt(map, "left")); + EXPECT_EQ("5px", CssTextAt(map, "width")); + EXPECT_EQ("61px", CssTextAt(map, "height")); + EXPECT_EQ("700px", CssTextAt(map, "--x")); + EXPECT_EQ("80px ", CssTextAt(map, "--y")); +} + +TEST_F(StyleCascadeTest, GetCascadedValuesCssWide) { + TestCascade cascade(GetDocument()); + cascade.Add("top:initial"); + cascade.Add("right:inherit"); + cascade.Add("bottom:unset"); + cascade.Add("left:revert"); + cascade.Apply(); + + auto map = cascade.GetCascadedValues(); + EXPECT_EQ(4u, map.size()); + + EXPECT_EQ("initial", CssTextAt(map, "top")); + EXPECT_EQ("inherit", CssTextAt(map, "right")); + EXPECT_EQ("unset", CssTextAt(map, "bottom")); + EXPECT_EQ("revert", CssTextAt(map, "left")); +} + +TEST_F(StyleCascadeTest, GetCascadedValuesLogical) { + TestCascade cascade(GetDocument()); + cascade.Add("margin-inline-start:1px"); + cascade.Add("margin-inline-end:2px"); + cascade.Apply(); + + auto map = cascade.GetCascadedValues(); + EXPECT_EQ(2u, map.size()); + + EXPECT_EQ("1px", CssTextAt(map, "margin-left")); + EXPECT_EQ("2px", CssTextAt(map, "margin-right")); +} + +TEST_F(StyleCascadeTest, GetCascadedValuesInterpolated) { + AppendSheet(R"HTML( + @keyframes test { + from { --x: 100px; width: 100px; } + to { --x: 200px; width: 200px; } + } + )HTML"); + + TestCascade cascade(GetDocument()); + + cascade.Add("animation-name: test"); + cascade.Add("animation-timing-function: linear"); + cascade.Add("animation-duration: 10s"); + cascade.Add("animation-delay: -5s"); + cascade.Apply(); + + cascade.CalculateAnimationUpdate(); + cascade.Apply(); + + // Verify that effect values from the animation did apply: + EXPECT_EQ(" 200px", cascade.ComputedValue("--x")); + EXPECT_EQ("150px", cascade.ComputedValue("width")); + + // However, we don't currently support returning interpolated vales from + // GetCascadedValues: + auto map = cascade.GetCascadedValues(); + EXPECT_EQ(4u, map.size()); + + EXPECT_EQ("test", CssTextAt(map, "animation-name")); + EXPECT_EQ("linear", CssTextAt(map, "animation-timing-function")); + EXPECT_EQ("10s", CssTextAt(map, "animation-duration")); + EXPECT_EQ("-5s", CssTextAt(map, "animation-delay")); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.cc b/third_party/blink/renderer/core/css/resolver/style_resolver.cc index e7e7ede..839e1f2 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.cc
@@ -1237,6 +1237,22 @@ return collector.MatchedStyleRuleList(); } +HeapHashMap<CSSPropertyName, Member<const CSSValue>> +StyleResolver::CascadedValuesForElement(Element* element, PseudoId pseudo_id) { + StyleResolverState state(GetDocument(), *element); + state.SetStyle(ComputedStyle::Create()); + + STACK_UNINITIALIZED StyleCascade cascade(state); + ElementRuleCollector collector(state.ElementContext(), selector_filter_, + cascade.MutableMatchResult(), state.Style(), + EInsideLink::kNotInsideLink); + collector.SetPseudoElementStyleRequest(PseudoElementStyleRequest(pseudo_id)); + MatchAllRules(state, collector, false /* include_smil_properties */); + + cascade.Apply(); + return cascade.GetCascadedValues(); +} + RuleIndexList* StyleResolver::PseudoCSSRulesForElement( Element* element, PseudoId pseudo_id,
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver.h b/third_party/blink/renderer/core/css/resolver/style_resolver.h index 3723722e..747af410 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver.h +++ b/third_party/blink/renderer/core/css/resolver/style_resolver.h
@@ -122,6 +122,9 @@ PseudoId, unsigned rules_to_include = kAllButEmptyCSSRules); StyleRuleList* StyleRulesForElement(Element*, unsigned rules_to_include); + HeapHashMap<CSSPropertyName, Member<const CSSValue>> CascadedValuesForElement( + Element*, + PseudoId); void ComputeFont(Element&, ComputedStyle*, const CSSPropertyValueSet&);
diff --git a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc index da2f00b4..2629714 100644 --- a/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc +++ b/third_party/blink/renderer/core/css/resolver/style_resolver_test.cc
@@ -698,4 +698,79 @@ // Don't crash when calculating style for nested pseudo elements. } +TEST_F(StyleResolverTest, CascadedValuesForElement) { + GetDocument().body()->setInnerHTML(R"HTML( + <style> + #div { + top: 1em; + } + div { + top: 10em; + right: 20em; + bottom: 30em; + left: 40em; + + width: 50em; + width: 51em; + height: 60em !important; + height: 61em; + } + </style> + <div id=div style="bottom:300em;"></div> + )HTML"); + UpdateAllLifecyclePhasesForTest(); + + auto& resolver = GetDocument().GetStyleResolver(); + Element* div = GetDocument().getElementById("div"); + ASSERT_TRUE(div); + + auto map = resolver.CascadedValuesForElement(div, kPseudoIdNone); + + CSSPropertyName top(CSSPropertyID::kTop); + CSSPropertyName right(CSSPropertyID::kRight); + CSSPropertyName bottom(CSSPropertyID::kBottom); + CSSPropertyName left(CSSPropertyID::kLeft); + CSSPropertyName width(CSSPropertyID::kWidth); + CSSPropertyName height(CSSPropertyID::kHeight); + + ASSERT_TRUE(map.at(top)); + ASSERT_TRUE(map.at(right)); + ASSERT_TRUE(map.at(bottom)); + ASSERT_TRUE(map.at(left)); + ASSERT_TRUE(map.at(width)); + ASSERT_TRUE(map.at(height)); + + EXPECT_EQ("1em", map.at(top)->CssText()); + EXPECT_EQ("20em", map.at(right)->CssText()); + EXPECT_EQ("300em", map.at(bottom)->CssText()); + EXPECT_EQ("40em", map.at(left)->CssText()); + EXPECT_EQ("51em", map.at(width)->CssText()); + EXPECT_EQ("60em", map.at(height)->CssText()); +} + +TEST_F(StyleResolverTest, CascadedValuesForPseudoElement) { + GetDocument().body()->setInnerHTML(R"HTML( + <style> + #div::before { + top: 1em; + } + div::before { + top: 10em; + } + </style> + <div id=div></div> + )HTML"); + UpdateAllLifecyclePhasesForTest(); + + auto& resolver = GetDocument().GetStyleResolver(); + Element* div = GetDocument().getElementById("div"); + ASSERT_TRUE(div); + + auto map = resolver.CascadedValuesForElement(div, kPseudoIdBefore); + + CSSPropertyName top(CSSPropertyID::kTop); + ASSERT_TRUE(map.at(top)); + EXPECT_EQ("1em", map.at(top)->CssText()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/dom/events/event_target.cc b/third_party/blink/renderer/core/dom/events/event_target.cc index 642de5e..12bca815 100644 --- a/third_party/blink/renderer/core/dom/events/event_target.cc +++ b/third_party/blink/renderer/core/dom/events/event_target.cc
@@ -875,6 +875,11 @@ bool fired_listener = false; while (i < size) { + // If stopImmediatePropagation has been called, we just break out + // immediately, without handling any more events on this target. + if (event.ImmediatePropagationStopped()) + break; + RegisteredEventListener registered_listener = entry[i]; // Move the iterator past this event listener. This must match @@ -893,11 +898,6 @@ removeEventListener(event.type(), listener, registered_listener.Capture()); - // If stopImmediatePropagation has been called, we just break out - // immediately, without handling any more events on this target. - if (event.ImmediatePropagationStopped()) - break; - event.SetHandlingPassive(EventPassiveMode(registered_listener)); probe::UserCallback probe(context, nullptr, event.type(), false, this);
diff --git a/third_party/blink/renderer/core/dom/node.cc b/third_party/blink/renderer/core/dom/node.cc index 58a42668..8c8ec66 100644 --- a/third_party/blink/renderer/core/dom/node.cc +++ b/third_party/blink/renderer/core/dom/node.cc
@@ -172,7 +172,7 @@ } // namespace -using ReattachHook = LayoutShiftTracker::ReattachHook; +using ReattachHookScope = LayoutShiftTracker::ReattachHookScope; struct SameSizeAsNode : EventTarget { uint32_t node_flags_; @@ -1690,7 +1690,7 @@ void Node::ReattachLayoutTree(AttachContext& context) { context.performing_reattach = true; - ReattachHook::Scope reattach_scope(*this); + ReattachHookScope reattach_scope(*this); DetachLayoutTree(context.performing_reattach); AttachLayoutTree(context); @@ -1714,7 +1714,7 @@ cache->UpdateCacheAfterNodeIsAttached(this); if (context.performing_reattach) - ReattachHook::NotifyAttach(*this); + ReattachHookScope::NotifyAttach(*this); } void Node::DetachLayoutTree(bool performing_reattach) { @@ -1724,7 +1724,7 @@ DocumentLifecycle::DetachScope will_detach(GetDocument().Lifecycle()); if (performing_reattach) - ReattachHook::NotifyDetach(*this); + ReattachHookScope::NotifyDetach(*this); if (GetLayoutObject()) GetLayoutObject()->DestroyAndCleanupAnonymousWrappers();
diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser.cc b/third_party/blink/renderer/core/html/parser/html_document_parser.cc index a37adecbc..d870ce3 100644 --- a/third_party/blink/renderer/core/html/parser/html_document_parser.cc +++ b/third_party/blink/renderer/core/html/parser/html_document_parser.cc
@@ -450,9 +450,10 @@ // (e.g. fast/parser/iframe-onload-document-close-with-external-script.html). DCHECK(task_runner_state_->GetState() == HTMLDocumentParserState::DeferredParserState::kNotScheduled || - (!IsStopped() && !IsDetached())) - << "Document should be attached (" << !IsDetached() - << ") and not stopped (" << !IsStopped() << ")"; + !IsStopped()); + DCHECK(task_runner_state_->GetState() == + HTMLDocumentParserState::DeferredParserState::kNotScheduled || + !IsDetached()); TRACE_EVENT2("blink", "HTMLDocumentParser::DeferredPumpTokenizerIfPossible", "parser", (void*)this, "state", task_runner_state_->GetStateAsString());
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc index 31c84f3..55d23faf 100644 --- a/third_party/blink/renderer/core/layout/layout_box.cc +++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -246,7 +246,7 @@ has_override_containing_block_content_logical_width_(false), has_override_containing_block_content_logical_height_(false), has_override_percentage_resolution_block_size_(false), - has_previous_content_box_and_overflow_rects_(false), + has_previous_content_box_rect_(false), percent_height_container_(nullptr), snap_container_(nullptr), snap_areas_(nullptr) {} @@ -6126,19 +6126,17 @@ } void LayoutBox::ClearLayoutOverflow() { - if (!overflow_) - return; - overflow_->layout_overflow.reset(); - if (!overflow_->visual_overflow) - overflow_.reset(); + if (overflow_) + overflow_->layout_overflow.reset(); + // overflow_ will be reset by MutableForPainting::ClearPreviousOverflowData() + // if we don't need it to store previous overflow data. } void LayoutBox::ClearVisualOverflow() { - if (!overflow_) - return; - overflow_->visual_overflow.reset(); - if (!overflow_->layout_overflow) - overflow_.reset(); + if (overflow_) + overflow_->visual_overflow.reset(); + // overflow_ will be reset by MutableForPainting::ClearPreviousOverflowData() + // if we don't need it to store previous overflow data. } bool LayoutBox::PercentageLogicalHeightIsResolvable() const { @@ -6749,17 +6747,44 @@ return HasOverflowClip() || ShouldApplyPaintContainment() || HasControlClip(); } -void LayoutBox::MutableForPainting::SavePreviousContentBoxAndOverflowRects() { - auto& rare_data = GetLayoutBox().EnsureRareData(); - rare_data.has_previous_content_box_and_overflow_rects_ = true; - rare_data.previous_physical_content_box_rect_ = - GetLayoutBox().PhysicalContentBoxRect(); - rare_data.previous_physical_layout_overflow_rect_ = +void LayoutBox::MutableForPainting::SavePreviousOverflowData() { + if (!GetLayoutBox().overflow_) + GetLayoutBox().overflow_ = std::make_unique<BoxOverflowModel>(); + auto& previous_overflow = GetLayoutBox().overflow_->previous_overflow_data; + if (!previous_overflow) + previous_overflow.emplace(); + previous_overflow->previously_had_overflow_clip = + GetLayoutBox().HasOverflowClip(); + previous_overflow->previous_physical_layout_overflow_rect = GetLayoutBox().PhysicalLayoutOverflowRect(); - rare_data.previous_physical_self_visual_overflow_rect_ = + previous_overflow->previous_physical_self_visual_overflow_rect = GetLayoutBox().PhysicalSelfVisualOverflowRect(); } +void LayoutBox::MutableForPainting::SetPreviousGeometryForLayoutShiftTracking( + const PhysicalOffset& paint_offset, + const LayoutSize& size, + bool has_overflow_clip, + const PhysicalRect& layout_overflow_rect) { + FirstFragment().SetPaintOffset(paint_offset); + GetLayoutBox().previous_size_ = size; + if (has_overflow_clip) + return; + if (PhysicalRect(PhysicalOffset(), size).Contains(layout_overflow_rect)) + return; + + if (!GetLayoutBox().overflow_) + GetLayoutBox().overflow_ = std::make_unique<BoxOverflowModel>(); + auto& previous_overflow = GetLayoutBox().overflow_->previous_overflow_data; + if (!previous_overflow) + previous_overflow.emplace(); + previous_overflow->previous_physical_layout_overflow_rect = + layout_overflow_rect; + // previous_physical_self_visual_overflow_rect doesn't matter because it is + // used for paint invalidation and we always do full paint invalidation on + // reattachment. +} + RasterEffectOutset LayoutBox::VisualRectOutsetForRasterEffects() const { // If the box has subpixel visual effect outsets, as the visual effect may be // painted along the pixel-snapped border box, the pixels on the anti-aliased
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h index 7acd06c..181e1a6 100644 --- a/third_party/blink/renderer/core/layout/layout_box.h +++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -81,7 +81,7 @@ bool has_override_containing_block_content_logical_width_ : 1; bool has_override_containing_block_content_logical_height_ : 1; bool has_override_percentage_resolution_block_size_ : 1; - bool has_previous_content_box_and_overflow_rects_ : 1; + bool has_previous_content_box_rect_ : 1; LayoutUnit override_containing_block_content_logical_width_; LayoutUnit override_containing_block_content_logical_height_; @@ -105,12 +105,10 @@ return *snap_areas_; } - // Used by BoxPaintInvalidator. Stores the previous content box size and - // layout overflow rect after the last paint invalidation. They are valid if - // has_previous_content_box_rect_and_overflow_rects_ is true. + // Used by BoxPaintInvalidator. Stores the previous content rect after the + // last paint invalidation. It's valid if has_previous_content_box_rect_ is + // true. PhysicalRect previous_physical_content_box_rect_; - PhysicalRect previous_physical_layout_overflow_rect_; - PhysicalRect previous_physical_self_visual_overflow_rect_; PhysicalRect partial_invalidation_rect_; @@ -1611,13 +1609,31 @@ void SavePreviousSize() { GetLayoutBox().previous_size_ = GetLayoutBox().Size(); } - void SavePreviousContentBoxAndOverflowRects(); - void ClearPreviousContentBoxAndOverflowRects() { - if (!GetLayoutBox().rare_data_) - return; - GetLayoutBox().rare_data_->has_previous_content_box_and_overflow_rects_ = - false; + void SavePreviousOverflowData(); + void ClearPreviousOverflowData() { + DCHECK(!GetLayoutBox().HasVisualOverflow()); + DCHECK(!GetLayoutBox().HasLayoutOverflow()); + GetLayoutBox().overflow_.reset(); } + void SavePreviousContentBoxRect() { + auto& rare_data = GetLayoutBox().EnsureRareData(); + rare_data.has_previous_content_box_rect_ = true; + rare_data.previous_physical_content_box_rect_ = + GetLayoutBox().PhysicalContentBoxRect(); + } + void ClearPreviousContentBoxRect() { + if (auto* rare_data = GetLayoutBox().rare_data_.Get()) + rare_data->has_previous_content_box_rect_ = false; + } + + // Called from LayoutShiftTracker when we attach this LayoutBox to a node + // for which we saved these values when the node was detached from its + // original LayoutBox. + void SetPreviousGeometryForLayoutShiftTracking( + const PhysicalOffset& paint_offset, + const LayoutSize& size, + bool has_overflow_clip, + const PhysicalRect& layout_overflow_rect); protected: friend class LayoutBox; @@ -1634,21 +1650,24 @@ LayoutSize PreviousSize() const { return previous_size_; } PhysicalRect PreviousPhysicalContentBoxRect() const { - return rare_data_ && - rare_data_->has_previous_content_box_and_overflow_rects_ + return rare_data_ && rare_data_->has_previous_content_box_rect_ ? rare_data_->previous_physical_content_box_rect_ : PhysicalRect(PhysicalOffset(), PreviousSize()); } + bool PreviouslyHadOverflowClip() const { + return overflow_ && overflow_->previous_overflow_data && + overflow_->previous_overflow_data->previously_had_overflow_clip; + } PhysicalRect PreviousPhysicalLayoutOverflowRect() const { - return rare_data_ && - rare_data_->has_previous_content_box_and_overflow_rects_ - ? rare_data_->previous_physical_layout_overflow_rect_ + return overflow_ && overflow_->previous_overflow_data + ? overflow_->previous_overflow_data + ->previous_physical_layout_overflow_rect : PhysicalRect(PhysicalOffset(), PreviousSize()); } PhysicalRect PreviousPhysicalSelfVisualOverflowRect() const { - return rare_data_ && - rare_data_->has_previous_content_box_and_overflow_rects_ - ? rare_data_->previous_physical_self_visual_overflow_rect_ + return overflow_ && overflow_->previous_overflow_data + ? overflow_->previous_overflow_data + ->previous_physical_self_visual_overflow_rect : PhysicalRect(PhysicalOffset(), PreviousSize()); }
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index 92e72ca..5d834c71 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -177,7 +177,6 @@ Member<void*> members[1]; // The following fields are in FragmentData. PhysicalOffset paint_offset_; - PhysicalRect visual_rect_for_layout_shift_tracking; std::unique_ptr<int> rare_data_; }; @@ -3003,6 +3002,63 @@ return transform_state.LastPlanarPoint(); } +bool LayoutObject::LocalToAncestorRectFastPath( + const PhysicalRect& rect, + const LayoutBoxModelObject* ancestor, + MapCoordinatesFlags mode, + PhysicalRect& result) const { + if (!(mode & kUseGeometryMapperMode)) + return false; + // No other modes are supported. + if (mode & (~kUseGeometryMapperMode)) + return false; + + if (!ancestor) + ancestor = View(); + + if (ancestor == this) + return true; + + AncestorSkipInfo skip_info(ancestor); + PropertyTreeState container_properties = PropertyTreeState::Uninitialized(); + const LayoutObject* property_container = + GetPropertyContainer(&skip_info, &container_properties); + if (!property_container) + return false; + + FloatRect mapping_rect(rect); + + // This works because it's not possible to have any intervening clips, + // effects, transforms between |this| and |property_container|, and therefore + // FirstFragment().PaintOffset() is relative to the transform space defined by + // FirstFragment().LocalBorderBoxProperties() (if this == property_container) + // or property_container->FirstFragment().ContentsProperties(). + mapping_rect.Move(FloatSize(FirstFragment().PaintOffset())); + + if (property_container != ancestor) { + GeometryMapper::SourceToDestinationRect( + container_properties.Transform(), + ancestor->FirstFragment().LocalBorderBoxProperties().Transform(), + mapping_rect); + } + mapping_rect.Move(-FloatSize(ancestor->FirstFragment().PaintOffset())); + + result = PhysicalRect::EnclosingRect(mapping_rect); + return true; +} + +PhysicalRect LayoutObject::LocalToAncestorRect( + const PhysicalRect& rect, + const LayoutBoxModelObject* ancestor, + MapCoordinatesFlags mode) const { + PhysicalRect result; + if (LocalToAncestorRectFastPath(rect, ancestor, mode, result)) + return result; + + return PhysicalRect::EnclosingRect( + LocalToAncestorQuad(FloatRect(rect), ancestor, mode).BoundingBox()); +} + FloatQuad LayoutObject::LocalToAncestorQuad( const FloatQuad& local_quad, const LayoutBoxModelObject* ancestor,
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 1b5a5be..108ff94 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -243,6 +243,7 @@ ContainingBlockFixedLayoutObjectInBody); FRIEND_TEST_ALL_PREFIXES(LayoutObjectTest, ContainingBlockAbsoluteLayoutObjectInBody); + FRIEND_TEST_ALL_PREFIXES(LayoutObjectTest, LocalToAncestorRectFastPath); FRIEND_TEST_ALL_PREFIXES( LayoutObjectTest, ContainingBlockAbsoluteLayoutObjectShouldNotBeNonStaticallyPositionedInlineAncestor); @@ -1713,12 +1714,11 @@ // If TraverseDocumentBoundaries is specified, the result will be in the // space of the local root frame. // Otherwise, the result will be in the space of the containing frame. + // This method supports kUseGeometryMapper. PhysicalRect LocalToAncestorRect(const PhysicalRect& rect, const LayoutBoxModelObject* ancestor, - MapCoordinatesFlags mode = 0) const { - return PhysicalRect::EnclosingRect( - LocalToAncestorQuad(FloatRect(rect), ancestor, mode).BoundingBox()); - } + MapCoordinatesFlags mode = 0) const; + // This method supports kUseGeometryMapper. FloatQuad LocalRectToAncestorQuad(const PhysicalRect& rect, const LayoutBoxModelObject* ancestor, MapCoordinatesFlags mode = 0) const { @@ -1756,6 +1756,7 @@ // Shorthands of the above LocalToAncestor* and AncestorToLocal* functions, // with nullptr as the ancestor. See the above functions for the meaning of // "absolute" coordinates. + // This method supports kUseGeometryMapper. PhysicalRect LocalToAbsoluteRect(const PhysicalRect& rect, MapCoordinatesFlags mode = 0) const { return LocalToAncestorRect(rect, nullptr, mode); @@ -2794,6 +2795,11 @@ const ComputedStyle* FirstLineStyleWithoutFallback() const; private: + bool LocalToAncestorRectFastPath(const PhysicalRect& rect, + const LayoutBoxModelObject* ancestor, + MapCoordinatesFlags mode, + PhysicalRect& result) const; + FloatQuad LocalToAncestorQuadInternal(const FloatQuad&, const LayoutBoxModelObject* ancestor, MapCoordinatesFlags = 0) const;
diff --git a/third_party/blink/renderer/core/layout/layout_object_test.cc b/third_party/blink/renderer/core/layout/layout_object_test.cc index 5fcbeb9..4592c68 100644 --- a/third_party/blink/renderer/core/layout/layout_object_test.cc +++ b/third_party/blink/renderer/core/layout/layout_object_test.cc
@@ -1326,4 +1326,66 @@ EXPECT_EQ(-0.01, decomposed.perspective_z); } +TEST_F(LayoutObjectTest, LocalToAncestorRectFastPath) { + SetBodyInnerHTML(R"HTML( + <style>body { margin:0; }</style> + <div id=target + style="transform: translate(50px, 25px); width: 10px; height: 10px"> + </div> + <div id=ancestor2 style="position: relative"> + <div id=target2 + style="transform: translate(75px, 15px); width: 10px; height: 10px"> + </div> + </div> + )HTML"); + + LayoutObject* target = GetLayoutObjectByElementId("target"); + PhysicalRect rect(0, 0, 10, 10); + PhysicalRect result; + + EXPECT_TRUE(target->LocalToAncestorRectFastPath( + rect, nullptr, kUseGeometryMapperMode, result)); + EXPECT_EQ(PhysicalRect(50, 25, 10, 10), result); + // Compare with non-fast path. + EXPECT_EQ(PhysicalRect(50, 25, 10, 10), + target->LocalToAncestorRect(rect, nullptr)); + + // No other modes are supported. + EXPECT_FALSE(target->LocalToAncestorRectFastPath(rect, nullptr, 0, result)); + EXPECT_FALSE( + target->LocalToAncestorRectFastPath(rect, nullptr, kIsFixed, result)); + EXPECT_FALSE(target->LocalToAncestorRectFastPath(rect, nullptr, + kIgnoreTransforms, result)); + EXPECT_FALSE(target->LocalToAncestorRectFastPath( + rect, nullptr, kIgnoreStickyOffset, result)); + EXPECT_FALSE(target->LocalToAncestorRectFastPath( + rect, nullptr, kIgnoreScrollOffset, result)); + EXPECT_FALSE(target->LocalToAncestorRectFastPath( + rect, nullptr, kApplyRemoteMainFrameTransform, result)); + + EXPECT_EQ(PhysicalRect(50, 25, 10, 10), + target->LocalToAncestorRect(rect, nullptr, kUseGeometryMapperMode)); + + LayoutObject* target2 = GetLayoutObjectByElementId("target2"); + LayoutObject* ancestor2 = GetLayoutObjectByElementId("ancestor2"); + PhysicalRect result2; + + EXPECT_TRUE(target2->LocalToAncestorRectFastPath( + rect, ToLayoutBoxModelObject(ancestor2), kUseGeometryMapperMode, + result2)); + EXPECT_EQ(PhysicalRect(75, 15, 10, 10), result2); + + EXPECT_EQ( + PhysicalRect(75, 15, 10, 10), + target2->LocalToAncestorRect(rect, ToLayoutBoxModelObject(ancestor2))); + // Compare with non-fast path. + EXPECT_TRUE(target2->LocalToAncestorRectFastPath( + rect, nullptr, kUseGeometryMapperMode, result2)); + // 25 instead of 15, because #target is 10px high. + EXPECT_EQ(PhysicalRect(75, 25, 10, 10), result2); + + EXPECT_EQ(PhysicalRect(75, 25, 10, 10), + target2->LocalToAncestorRect(rect, nullptr)); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker.cc index c0a2f1d..6d0860c 100644 --- a/third_party/blink/renderer/core/layout/layout_shift_tracker.cc +++ b/third_party/blink/renderer/core/layout/layout_shift_tracker.cc
@@ -29,46 +29,67 @@ namespace blink { -using ReattachHook = LayoutShiftTracker::ReattachHook; +using ReattachHookScope = LayoutShiftTracker::ReattachHookScope; +ReattachHookScope* ReattachHookScope::top_ = nullptr; + +using ContainingBlockScope = LayoutShiftTracker::ContainingBlockScope; +ContainingBlockScope* ContainingBlockScope::top_ = nullptr; namespace { -ReattachHook& GetReattachHook() { - DEFINE_STATIC_LOCAL(Persistent<ReattachHook>, hook, - (MakeGarbageCollected<ReattachHook>())); - return *hook; -} - constexpr base::TimeDelta kTimerDelay = base::TimeDelta::FromMilliseconds(500); const float kMovementThreshold = 3.0; // CSS pixels. -FloatPoint LogicalStart(const FloatRect& rect, const LayoutObject& object) { - const ComputedStyle* style = object.Style(); - DCHECK(style); - auto logical = - PhysicalToLogical<float>(style->GetWritingMode(), style->Direction(), - rect.Y(), rect.MaxX(), rect.MaxY(), rect.X()); - return FloatPoint(logical.InlineStart(), logical.BlockStart()); +// Calculates the physical coordinates of the starting point in the current +// coordinate space. |paint_offset| is the physical offset of the top-left +// corner. The starting point can be any of the four corners of the box, +// depending on the writing mode and text direction. Note that the result is +// still in physical coordinates, just may be of a different corner. +// See https://wicg.github.io/layout-instability/#starting-point. +FloatPoint StartingPoint(const PhysicalOffset& paint_offset, + const LayoutBox& box, + const LayoutSize& size) { + PhysicalOffset starting_point = paint_offset; + auto writing_direction = box.StyleRef().GetWritingDirection(); + if (UNLIKELY(writing_direction.IsFlippedBlocks())) + starting_point.left += size.Width(); + if (UNLIKELY(writing_direction.IsRtl())) { + if (writing_direction.IsHorizontal()) + starting_point.left += size.Width(); + else + starting_point.top += size.Height(); + } + return FloatPoint(starting_point); } -float GetMoveDistance(const FloatRect& old_rect, - const FloatRect& new_rect, - const LayoutObject& object) { - FloatSize location_delta = - LogicalStart(new_rect, object) - LogicalStart(old_rect, object); +// Returns the part a rect logically below a starting point. +PhysicalRect RectBelowStartingPoint(const PhysicalRect& rect, + const PhysicalOffset& starting_point, + WritingDirectionMode writing_direction) { + PhysicalRect result = rect; + if (writing_direction.IsHorizontal()) + result.ShiftTopEdgeTo(starting_point.top); + else if (writing_direction.IsFlippedBlocks()) + result.ShiftRightEdgeTo(starting_point.left); + else + result.ShiftLeftEdgeTo(starting_point.left); + return result; +} + +float GetMoveDistance(const FloatPoint& old_starting_point, + const FloatPoint& new_starting_point) { + FloatSize location_delta = new_starting_point - old_starting_point; return std::max(fabs(location_delta.Width()), fabs(location_delta.Height())); } bool EqualWithinMovementThreshold(const FloatPoint& a, const FloatPoint& b, - const LayoutObject& object) { - float threshold_physical_px = - kMovementThreshold * object.StyleRef().EffectiveZoom(); + float threshold_physical_px) { return fabs(a.X() - b.X()) < threshold_physical_px && fabs(a.Y() - b.Y()) < threshold_physical_px; } -bool SmallerThanRegionGranularity(const FloatRect& rect) { +bool SmallerThanRegionGranularity(const PhysicalRect& rect) { // The region uses integer coordinates, so the rects are snapped to // pixel boundaries. Ignore rects smaller than half a pixel. return rect.Width() < 0.5 || rect.Height() < 0.5; @@ -110,6 +131,10 @@ LayoutShiftTracker::LayoutShiftTracker(LocalFrameView* frame_view) : frame_view_(frame_view), + // This eliminates noise from the private Page object created by + // SVGImage::DataChanged. + is_active_( + !frame_view_->GetFrame().GetChromeClient().IsSVGImageChromeClient()), score_(0.0), weighted_score_(0.0), timer_(frame_view->GetFrame().GetTaskRunner(TaskType::kInternalDefault), @@ -120,105 +145,138 @@ observed_input_or_scroll_(false), most_recent_input_timestamp_initialized_(false) {} -void LayoutShiftTracker::ObjectShifted( - const LayoutObject& source, - const PropertyTreeStateOrAlias& property_tree_state, - FloatRect old_rect, - FloatRect new_rect) { - if (old_rect.IsEmpty() || new_rect.IsEmpty()) - return; +bool LayoutShiftTracker::NeedsToTrack(const LayoutObject& object) const { + if (!is_active_) + return false; - if (EqualWithinMovementThreshold(LogicalStart(old_rect, source), - LogicalStart(new_rect, source), source)) + // SVG elements don't participate in the normal layout algorithms and are + // more likely to be used for animations. + if (object.IsSVGChild()) + return false; + + if (object.IsText()) + return ContainingBlockScope::top_; + + if (!object.IsBox()) + return false; + + // Don't report shift of anonymous objects. Will report the children because + // we want report real DOM nodes. + if (object.IsAnonymous()) + return true; + + // Ignore layout objects that move (in the coordinate space of the paint + // invalidation container) on scroll. + // TODO(skobes): Find a way to detect when these objects shift. + if (object.IsFixedPositioned() || object.IsStickyPositioned()) + return false; + + if (object.IsLayoutView()) + return false; + + if (Element* element = DynamicTo<Element>(object.GetNode())) { + if (element->IsSliderThumbElement()) + return false; + } + + return true; +} + +void LayoutShiftTracker::ObjectShifted( + const LayoutObject& object, + const PropertyTreeStateOrAlias& property_tree_state, + const PhysicalRect& old_rect, + const PhysicalRect& new_rect, + const FloatPoint& old_starting_point, + const FloatPoint& new_starting_point) { + // The caller should ensure these conditions. + DCHECK(!old_rect.IsEmpty()); + DCHECK(!new_rect.IsEmpty()); + + float threshold_physical_px = + kMovementThreshold * object.StyleRef().EffectiveZoom(); + + if (EqualWithinMovementThreshold(old_starting_point, new_starting_point, + threshold_physical_px)) return; if (SmallerThanRegionGranularity(old_rect) && SmallerThanRegionGranularity(new_rect)) return; - // Ignore layout objects that move (in the coordinate space of the paint - // invalidation container) on scroll. - // TODO(skobes): Find a way to detect when these objects shift. - if (source.IsFixedPositioned() || source.IsStickyPositioned()) - return; - - // SVG elements don't participate in the normal layout algorithms and are - // more likely to be used for animations. - if (source.IsSVG()) - return; - - if (Element* element = DynamicTo<Element>(source.GetNode())) { - if (element->IsSliderThumbElement()) - return; - } - const auto& root_state = - source.View()->FirstFragment().LocalBorderBoxProperties(); + object.View()->FirstFragment().LocalBorderBoxProperties(); FloatClipRect clip_rect = GeometryMapper::LocalToAncestorClipRect(property_tree_state, root_state); + clip_rect.Intersect(FloatClipRect(FloatRect( + FloatPoint(), + FloatSize( + frame_view_->GetScrollableArea()->VisibleContentRect().Size())))); // If the clip region is empty, then the resulting layout shift isn't visible // in the viewport so ignore it. - if (!clip_rect.IsInfinite() && clip_rect.Rect().IsEmpty()) + if (clip_rect.Rect().IsEmpty()) return; - GeometryMapper::SourceToDestinationRect(property_tree_state.Transform(), - root_state.Transform(), old_rect); - GeometryMapper::SourceToDestinationRect(property_tree_state.Transform(), - root_state.Transform(), new_rect); + auto transform = GeometryMapper::SourceToDestinationProjection( + property_tree_state.Transform(), root_state.Transform()); + FloatPoint old_starting_point_in_root = + transform.MapPoint(old_starting_point); + FloatPoint new_starting_point_in_root = + transform.MapPoint(new_starting_point); - if (EqualWithinMovementThreshold(old_rect.Location(), new_rect.Location(), - source)) { + if (EqualWithinMovementThreshold(old_starting_point_in_root, + new_starting_point_in_root, + threshold_physical_px)) return; - } - if (EqualWithinMovementThreshold(old_rect.Location() + frame_scroll_delta_, - new_rect.Location(), source)) { + if (EqualWithinMovementThreshold( + old_starting_point_in_root + frame_scroll_delta_, + new_starting_point_in_root, threshold_physical_px)) { // TODO(skobes): Checking frame_scroll_delta_ is an imperfect solution to // allowing counterscrolled layout shifts. Ideally, we would map old_rect // to viewport coordinates using the previous frame's scroll tree. return; } - FloatRect clipped_old_rect(old_rect), clipped_new_rect(new_rect); - if (!clip_rect.IsInfinite()) { - clipped_old_rect.Intersect(clip_rect.Rect()); - clipped_new_rect.Intersect(clip_rect.Rect()); - } + FloatRect old_rect_in_root(old_rect); + transform.MapRect(old_rect_in_root); + FloatRect new_rect_in_root(new_rect); + transform.MapRect(new_rect_in_root); - IntRect viewport = - IntRect(IntPoint(), - frame_view_->GetScrollableArea()->VisibleContentRect().Size()); - - IntRect visible_old_rect = RoundedIntRect(clipped_old_rect); - visible_old_rect.Intersect(viewport); - IntRect visible_new_rect = RoundedIntRect(clipped_new_rect); - visible_new_rect.Intersect(viewport); - + IntRect visible_old_rect = + RoundedIntRect(Intersection(old_rect_in_root, clip_rect.Rect())); + IntRect visible_new_rect = + RoundedIntRect(Intersection(new_rect_in_root, clip_rect.Rect())); if (visible_old_rect.IsEmpty() && visible_new_rect.IsEmpty()) return; // Compute move distance based on unclipped rects, to accurately determine how // much the element moved. - float move_distance = GetMoveDistance(old_rect, new_rect, source); + float move_distance = + GetMoveDistance(old_starting_point_in_root, new_starting_point_in_root); frame_max_distance_ = std::max(frame_max_distance_, move_distance); #if DCHECK_IS_ON() LocalFrame& frame = frame_view_->GetFrame(); if (ShouldLog(frame)) { DVLOG(2) << "in " << (frame.IsMainFrame() ? "" : "subframe ") - << frame.GetDocument()->Url().GetString() << ", " - << source.DebugName() << " moved from " << old_rect.ToString() - << " to " << new_rect.ToString() << " (visible from " - << visible_old_rect.ToString() << " to " - << visible_new_rect.ToString() << ")"; + << frame.GetDocument()->Url() << ", " << object << " moved from " + << old_rect_in_root << " to " << new_rect_in_root + << " (visible from " << visible_old_rect << " to " + << visible_new_rect << ")"; + if (old_starting_point_in_root != old_rect_in_root.Location() || + new_starting_point_in_root != new_rect_in_root.Location()) { + DVLOG(2) << " (starting point from " << old_starting_point_in_root + << " to " << new_starting_point_in_root << ")"; + } } #endif region_.AddRect(visible_old_rect); region_.AddRect(visible_new_rect); - if (Node* node = source.GetNode()) { + if (Node* node = object.GetNode()) { MaybeRecordAttribution( {DOMNodeIds::IdForNode(node), visible_old_rect, visible_new_rect}); } @@ -273,16 +331,60 @@ *smallest = attribution; } -void LayoutShiftTracker::NotifyObjectPrePaint( - const LayoutObject& object, +void LayoutShiftTracker::NotifyBoxPrePaint( + const LayoutBox& box, const PropertyTreeStateOrAlias& property_tree_state, - const PhysicalRect& old_visual_rect, - const PhysicalRect& new_visual_rect) { - if (!IsActive()) + const PhysicalRect& old_rect, + const PhysicalRect& new_rect, + const PhysicalOffset& old_paint_offset, + const PhysicalOffset& new_paint_offset) { + DCHECK(NeedsToTrack(box)); + ObjectShifted(box, property_tree_state, old_rect, new_rect, + StartingPoint(old_paint_offset, box, box.PreviousSize()), + StartingPoint(new_paint_offset, box, box.Size())); +} + +void LayoutShiftTracker::NotifyTextPrePaint( + const LayoutText& text, + const PropertyTreeStateOrAlias& property_tree_state, + const LogicalOffset& old_starting_point, + const LogicalOffset& new_starting_point, + const PhysicalOffset& old_paint_offset, + const PhysicalOffset& new_paint_offset) { + DCHECK(NeedsToTrack(text)); + auto* block = ContainingBlockScope::top_; + DCHECK(block); + LayoutUnit distance = std::max( + (new_starting_point.inline_offset - old_starting_point.inline_offset) + .Abs(), + (new_starting_point.block_offset - old_starting_point.block_offset) + .Abs()); + if (distance <= block->max_text_shift_distance_) return; - ObjectShifted(object, property_tree_state, FloatRect(old_visual_rect), - FloatRect(new_visual_rect)); + block->max_text_shift_distance_ = distance; + auto writing_direction = text.StyleRef().GetWritingDirection(); + PhysicalOffset old_physical_starting_point = + old_paint_offset + old_starting_point.ConvertToPhysical(writing_direction, + block->old_size_, + PhysicalSize()); + PhysicalOffset new_physical_starting_point = + new_paint_offset + new_starting_point.ConvertToPhysical(writing_direction, + block->new_size_, + PhysicalSize()); + + PhysicalRect old_rect = RectBelowStartingPoint( + block->old_rect_, old_physical_starting_point, writing_direction); + if (old_rect.IsEmpty()) + return; + PhysicalRect new_rect = RectBelowStartingPoint( + block->new_rect_, new_physical_starting_point, writing_direction); + if (new_rect.IsEmpty()) + return; + + ObjectShifted(text, property_tree_state, old_rect, new_rect, + FloatPoint(old_physical_starting_point), + FloatPoint(new_physical_starting_point)); } double LayoutShiftTracker::SubframeWeightingFactor() const { @@ -311,7 +413,7 @@ } void LayoutShiftTracker::NotifyPrePaintFinished() { - if (!IsActive()) + if (!is_active_) return; if (region_.IsEmpty()) return; @@ -339,7 +441,7 @@ LocalFrame& frame = frame_view_->GetFrame(); if (ShouldLog(frame)) { DVLOG(1) << "in " << (frame.IsMainFrame() ? "" : "subframe ") - << frame.GetDocument()->Url().GetString() << ", viewport was " + << frame.GetDocument()->Url() << ", viewport was " << (impact_fraction * 100) << "% impacted with distance fraction " << move_distance_factor; } @@ -492,14 +594,6 @@ UpdateInputTimestamp(base::TimeTicks::Now()); } -bool LayoutShiftTracker::IsActive() { - // This eliminates noise from the private Page object created by - // SVGImage::DataChanged. - if (frame_view_->GetFrame().GetChromeClient().IsSVGImageChromeClient()) - return false; - return true; -} - std::unique_ptr<TracedValue> LayoutShiftTracker::PerFrameTraceData( double score_delta, bool input_detected) const { @@ -564,60 +658,53 @@ visitor->Trace(frame_view_); } -ReattachHook::Scope::Scope(const Node& node) : active_(node.GetLayoutObject()) { - if (active_) { - auto& hook = GetReattachHook(); - outer_ = hook.scope_; - hook.scope_ = this; - } +ReattachHookScope::ReattachHookScope(const Node& node) : outer_(top_) { + if (node.GetLayoutObject()) + top_ = this; } -ReattachHook::Scope::~Scope() { - if (active_) { - auto& hook = GetReattachHook(); - hook.scope_ = outer_; - if (!outer_) - hook.visual_rects_.clear(); - } +ReattachHookScope::~ReattachHookScope() { + top_ = outer_; } -void ReattachHook::NotifyDetach(const Node& node) { - auto& hook = GetReattachHook(); - if (!hook.scope_) +void ReattachHookScope::NotifyDetach(const Node& node) { + if (!top_) return; auto* layout_object = node.GetLayoutObject(); - if (!layout_object) + if (!layout_object || !layout_object->IsBox()) return; - auto& map = hook.visual_rects_; + auto& map = top_->geometries_before_detach_; auto& fragment = layout_object->GetMutableForPainting().FirstFragment(); // Save the visual rect for restoration on future reattachment. - PhysicalRect visual_rect = fragment.VisualRectForLayoutShiftTracking(); - if (visual_rect.IsEmpty()) + const auto& box = ToLayoutBox(*layout_object); + PhysicalRect layout_overflow_rect = box.PreviousPhysicalLayoutOverflowRect(); + if (layout_overflow_rect.IsEmpty() && box.PreviousSize().IsEmpty()) return; - map.Set(&node, visual_rect); + map.Set(&node, + Geometry{fragment.PaintOffset(), box.PreviousSize(), + box.PreviouslyHadOverflowClip(), layout_overflow_rect}); } -void ReattachHook::NotifyAttach(const Node& node) { - auto& hook = GetReattachHook(); - if (!hook.scope_) +void ReattachHookScope::NotifyAttach(const Node& node) { + if (!top_) return; auto* layout_object = node.GetLayoutObject(); - if (!layout_object) + if (!layout_object || !layout_object->IsBox()) return; - auto& map = hook.visual_rects_; - auto& fragment = layout_object->GetMutableForPainting().FirstFragment(); + auto& map = top_->geometries_before_detach_; - // Restore the visual rect that was saved during detach. + // Restore geometries that was saved during detach. Note: this does not + // affect paint invalidation; we will fully invalidate the new layout object. auto iter = map.find(&node); if (iter == map.end()) return; - fragment.SetVisualRectForLayoutShiftTracking(iter->value); -} - -void ReattachHook::Trace(Visitor* visitor) const { - visitor->Trace(visual_rects_); + ToLayoutBox(layout_object) + ->GetMutableForPainting() + .SetPreviousGeometryForLayoutShiftTracking( + iter->value.paint_offset, iter->value.size, + iter->value.has_overflow_clip, iter->value.layout_overflow_rect); } } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker.h b/third_party/blink/renderer/core/layout/layout_shift_tracker.h index e855351..88cc79b4 100644 --- a/third_party/blink/renderer/core/layout/layout_shift_tracker.h +++ b/third_party/blink/renderer/core/layout/layout_shift_tracker.h
@@ -18,12 +18,13 @@ namespace blink { +class LayoutBox; class LayoutObject; +class LayoutText; class LocalFrameView; class PropertyTreeStateOrAlias; class TracedValue; class WebInputEvent; -struct PhysicalRect; // Tracks "layout shifts" from layout objects changing their visual location // between animation frames. See https://github.com/WICG/layout-instability. @@ -32,26 +33,38 @@ public: explicit LayoutShiftTracker(LocalFrameView*); ~LayoutShiftTracker() = default; - // |old_visual_rect| and |new_visual_rect| are in the local transform space: - // |property_tree_state.Transform()|. As we don't save the old property tree - // state, the caller should adjust |old_visual_rect| as if the difference - // between the old and new additional offsets to the layout shift root[1] - // caused the difference between the locations of |old_visual_rect| and - // |new_visual_rect|, in addition to that caused by the difference between - // the old and new paint offsets in the local transform space, so that we can - // calculate the total shift from the layout shift root by comparing locations - // of |old_visual_rect| and |new_visual_rect|. - // [1] See PaintPropertyTreeBuilderFragmentContext::ContainingBlockContext - // ::additional_offset_to_layout_shift_root_delta. - void NotifyObjectPrePaint(const LayoutObject& object, - const PropertyTreeStateOrAlias& property_tree_state, - const PhysicalRect& old_visual_rect, - const PhysicalRect& new_visual_rect); + + bool NeedsToTrack(const LayoutObject&) const; + + // |old_rect| and |new_rect| are border box rects, united with layout overflow + // rects if the box has layout overflow and doesn't clip overflow, in the + // local transform space (property_tree_state.Transform()). |old_paint_offset| + // and |new_paint_offset| are the offsets of the border box rect in the local + // transform space, which are the same as |old_rect.offset| and + // |new_rect.offset| respectively if the rects are border box rects. + // As we don't save the old property tree state, the caller should adjust + // |old_rect| and |old_paint_offset| so that we can calculate the correct old + // visual representation and old starting point in the initial containing + // block and the viewport with the new property tree state in most cases. + void NotifyBoxPrePaint(const LayoutBox& box, + const PropertyTreeStateOrAlias& property_tree_state, + const PhysicalRect& old_rect, + const PhysicalRect& new_rect, + const PhysicalOffset& old_paint_offset, + const PhysicalOffset& new_paint_offset); + + void NotifyTextPrePaint(const LayoutText& text, + const PropertyTreeStateOrAlias& property_tree_state, + const LogicalOffset& old_starting_point, + const LogicalOffset& new_starting_point, + const PhysicalOffset& old_paint_offset, + const PhysicalOffset& new_paint_offset); + void NotifyPrePaintFinished(); void NotifyInput(const WebInputEvent&); void NotifyScroll(mojom::blink::ScrollType, ScrollOffset delta); void NotifyViewportSizeChanged(); - bool IsActive(); + bool IsActive() const { return is_active_; } double Score() const { return score_; } double WeightedScore() const { return weighted_score_; } float OverallMaxDistance() const { return overall_max_distance_; } @@ -62,35 +75,69 @@ } void Trace(Visitor* visitor) const; - // Saves and restores visual rects on layout objects when a layout tree is - // rebuilt by Node::ReattachLayoutTree. - class ReattachHook : public GarbageCollected<ReattachHook> { + // Saves and restores geometry on layout boxes when a layout tree is rebuilt + // by Node::ReattachLayoutTree. + class ReattachHookScope { + STACK_ALLOCATED(); + public: - void Trace(Visitor*) const; - - class Scope { - public: - Scope(const Node&); - ~Scope(); - - private: - bool active_; - Scope* outer_; - }; + explicit ReattachHookScope(const Node&); + ~ReattachHookScope(); static void NotifyDetach(const Node&); static void NotifyAttach(const Node&); private: - Scope* scope_ = nullptr; - HeapHashMap<Member<const Node>, PhysicalRect> visual_rects_; + ReattachHookScope* outer_; + static ReattachHookScope* top_; + struct Geometry { + PhysicalOffset paint_offset; + LayoutSize size; + bool has_overflow_clip; + PhysicalRect layout_overflow_rect; + }; + HeapHashMap<Member<const Node>, Geometry> geometries_before_detach_; + }; + + class CORE_EXPORT ContainingBlockScope { + USING_FAST_MALLOC(ContainingBlockScope); + + public: + // |old_size| and |new_size| are the border box sizes. + // |old_rect| and |new_rect| have the same definition as in + // NotifyBoxPrePaint(). + ContainingBlockScope(const PhysicalSize& old_size, + const PhysicalSize& new_size, + const PhysicalRect& old_rect, + const PhysicalRect& new_rect) + : outer_(top_), + old_size_(old_size), + new_size_(new_size), + old_rect_(old_rect), + new_rect_(new_rect) { + top_ = this; + } + ~ContainingBlockScope() { top_ = outer_; } + + private: + friend class LayoutShiftTracker; + ContainingBlockScope* outer_; + static ContainingBlockScope* top_; + PhysicalSize old_size_; + PhysicalSize new_size_; + PhysicalRect old_rect_; + PhysicalRect new_rect_; + LayoutUnit max_text_shift_distance_; }; private: void ObjectShifted(const LayoutObject&, const PropertyTreeStateOrAlias&, - FloatRect old_rect, - FloatRect new_rect); + const PhysicalRect& old_rect, + const PhysicalRect& new_rect, + const FloatPoint& old_starting_point, + const FloatPoint& new_starting_point); + void ReportShift(double score_delta, double weighted_score_delta); void TimerFired(TimerBase*) {} std::unique_ptr<TracedValue> PerFrameTraceData(double score_delta, @@ -103,6 +150,7 @@ void SubmitPerformanceEntry(double score_delta, bool input_detected) const; Member<LocalFrameView> frame_view_; + bool is_active_; // The document cumulative layout shift (DCLS) score for this LocalFrame, // unweighted, with move distance applied.
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index 6d286c25..ded42b7 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -84,10 +84,11 @@ struct SameSizeAsLayoutText : public LayoutObject { uint32_t bitfields : 12; + DOMNodeId node_id; float widths[4]; String text; void* pointers[2]; - DOMNodeId node_id; + PhysicalOffset previous_starting_point; }; ASSERT_SIZE(LayoutText, SameSizeAsLayoutText); @@ -1690,6 +1691,25 @@ return PhysicalOffset(); } +LogicalOffset LayoutText::LogicalStartingPoint() const { + if (IsInLayoutNGInlineFormattingContext()) { + NGInlineCursor cursor; + cursor.MoveTo(*this); + if (!cursor) + return LogicalOffset(); + PhysicalOffset physical_offset = cursor.Current().OffsetInContainerBlock(); + if (StyleRef().GetWritingDirection().IsHorizontalLtr()) + return {physical_offset.left, physical_offset.top}; + return physical_offset.ConvertToLogical( + StyleRef().GetWritingDirection(), + PhysicalSizeToBeNoop(ContainingBlock()->Size()), + cursor.Current().Size()); + } + if (const auto* text_box = FirstTextBox()) + return {text_box->LogicalLeft(), text_box->LogicalTop()}; + return LogicalOffset(); +} + bool LayoutText::CanOptimizeSetText() const { // If we have only one line of text and "contain: layout size" we can avoid // doing a layout and only paint in the SetText() operation.
diff --git a/third_party/blink/renderer/core/layout/layout_text.h b/third_party/blink/renderer/core/layout/layout_text.h index 0ebfc63..989653f 100644 --- a/third_party/blink/renderer/core/layout/layout_text.h +++ b/third_party/blink/renderer/core/layout/layout_text.h
@@ -332,6 +332,24 @@ void DetachAbstractInlineTextBoxesIfNeeded(); + // Returns the logical location of the first line box. + LogicalOffset LogicalStartingPoint() const; + + // For LayoutShiftTracker. Saves the value of LogicalStartingPoint() value + // during the previous paint invalidation. + LogicalOffset PreviousLogicalStartingPoint() const { + return previous_logical_starting_point_; + } + // This is const because LayoutObjects are const for paint invalidation. + void SetPreviousLogicalStartingPoint(const LogicalOffset& point) const { + DCHECK_EQ(GetDocument().Lifecycle().GetState(), + DocumentLifecycle::kInPrePaint); + previous_logical_starting_point_ = point; + } + static LogicalOffset UninitializedLogicalStartingPoint() { + return {LayoutUnit::Max(), LayoutUnit::Max()}; + } + protected: void WillBeDestroyed() override; @@ -448,6 +466,9 @@ // Used for LayoutNG with accessibility. True if inline fragments are // associated to |NGAbstractInlineTextBox|. unsigned has_abstract_inline_text_box_ : 1; + + DOMNodeId node_id_ = kInvalidDOMNodeId; + float min_width_; float max_width_; float first_line_min_width_; @@ -455,6 +476,10 @@ String text_; + // This is mutable for paint invalidation. + mutable LogicalOffset previous_logical_starting_point_ = + UninitializedLogicalStartingPoint(); + union { // The line boxes associated with this object. // Read the LINE BOXES OWNERSHIP section in the class header comment. @@ -468,7 +493,6 @@ // Valid only when IsInLayoutNGInlineFormattingContext(). wtf_size_t first_fragment_item_index_; }; - DOMNodeId node_id_ = kInvalidDOMNodeId; }; inline InlineTextBoxList& LayoutText::MutableTextBoxes() {
diff --git a/third_party/blink/renderer/core/layout/map_coordinates_flags.h b/third_party/blink/renderer/core/layout/map_coordinates_flags.h index de3d691..aec3f6a 100644 --- a/third_party/blink/renderer/core/layout/map_coordinates_flags.h +++ b/third_party/blink/renderer/core/layout/map_coordinates_flags.h
@@ -26,6 +26,12 @@ // If the local root frame has a remote frame parent, apply the transformation // from the local root frame to the remote main frame. kApplyRemoteMainFrameTransform = 1 << 6, + + // Whether to use GeometryMapper to optimize for speed. This can only be + // used it the callsites are in a lifecycle state >= kPrePaintClean. + // This flag is not implemented in all methods that take a MapCoordinatesMode + // parameter; see particular methods for more details. + kUseGeometryMapperMode = 1 << 7, }; typedef unsigned MapCoordinatesFlags;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc index 28efed0..67013f0 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_box_fragment_builder.cc
@@ -31,7 +31,6 @@ break_appeal_ = kBreakAppealPerfect; has_floating_descendants_for_paint_ = false; - has_orthogonal_flow_roots_ = false; has_descendant_that_depends_on_percentage_block_size_ = false; has_block_fragmentation_ = false; }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc index 8433a3fe..373f768 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.cc
@@ -89,13 +89,6 @@ } } - // For the |has_orthogonal_flow_roots_| flag, we don't care about the type of - // child (OOF-positioned, etc), it is for *any* descendant. - if (child.HasOrthogonalFlowRoots() || - !IsParallelWritingMode(child.Style().GetWritingMode(), - Style().GetWritingMode())) - has_orthogonal_flow_roots_ = true; - // We only need to report if inflow or floating elements depend on the // percentage resolution block-size. OOF-positioned children resolve their // percentages against the "final" size of their parent.
diff --git a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h index 671fa8e..13b29aa 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h +++ b/third_party/blink/renderer/core/layout/ng/ng_container_fragment_builder.h
@@ -258,7 +258,6 @@ bool is_legacy_layout_root_ = false; bool has_floating_descendants_for_paint_ = false; - bool has_orthogonal_flow_roots_ = false; bool has_descendant_that_depends_on_percentage_block_size_ = false; bool has_block_fragmentation_ = false; bool is_fragmentation_context_root_ = false;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc index 6f29cf2..584e1d9 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -547,7 +547,6 @@ DCHECK_EQ(is_hidden_for_paint_, other.is_hidden_for_paint_); // |has_floating_descendants_for_paint_| can change during simplified layout. - DCHECK_EQ(has_orthogonal_flow_roots_, other.has_orthogonal_flow_roots_); DCHECK_EQ(may_have_descendant_above_block_start_, other.may_have_descendant_above_block_start_); DCHECK_EQ(depends_on_percentage_block_size_,
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.cc index 4785ab34..7fd6b9f9 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.cc
@@ -51,7 +51,6 @@ builder->has_floating_descendants_for_paint_; has_adjoining_object_descendants_ = builder->has_adjoining_object_descendants_; - has_orthogonal_flow_roots_ = builder->has_orthogonal_flow_roots_; depends_on_percentage_block_size_ = DependsOnPercentageBlockSize(*builder); PhysicalSize size = Size();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h index 0a50bd5..19f7d93 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_container_fragment.h
@@ -135,9 +135,6 @@ return has_adjoining_object_descendants_; } - // TODO(ikilpatrick): Remove this flag as its not used anymore. - bool HasOrthogonalFlowRoots() const { return has_orthogonal_flow_roots_; } - // Returns true if we aren't able to re-use this fragment if the // |NGConstraintSpace::PercentageResolutionBlockSize| changes. bool DependsOnPercentageBlockSize() const {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h index 6f7077e..bdf5066b 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -430,7 +430,6 @@ // (it's defined here to save memory, since that class has no bitfields). unsigned has_floating_descendants_for_paint_ : 1; unsigned has_adjoining_object_descendants_ : 1; - unsigned has_orthogonal_flow_roots_ : 1; unsigned depends_on_percentage_block_size_ : 1; // The following bitfields are only to be used by NGPhysicalLineBoxFragment
diff --git a/third_party/blink/renderer/core/layout/overflow_model.h b/third_party/blink/renderer/core/layout/overflow_model.h index b8ee53c..5b45bc7 100644 --- a/third_party/blink/renderer/core/layout/overflow_model.h +++ b/third_party/blink/renderer/core/layout/overflow_model.h
@@ -23,6 +23,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_OVERFLOW_MODEL_H_ #include "base/macros.h" +#include "third_party/blink/renderer/core/layout/geometry/physical_rect.h" #include "third_party/blink/renderer/platform/geometry/layout_rect.h" namespace blink { @@ -234,6 +235,15 @@ base::Optional<BoxLayoutOverflowModel> layout_overflow; base::Optional<BoxVisualOverflowModel> visual_overflow; + // Used by BoxPaintInvalidator. Stores the previous overflow data after the + // last paint invalidation. + struct PreviousOverflowData { + bool previously_had_overflow_clip = false; + PhysicalRect previous_physical_layout_overflow_rect; + PhysicalRect previous_physical_self_visual_overflow_rect; + }; + base::Optional<PreviousOverflowData> previous_overflow_data; + USING_FAST_MALLOC(BoxOverflowModel); };
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 cbd4c0b..b220347 100644 --- a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
@@ -374,23 +374,12 @@ SavePreviousBoxGeometriesIfNeeded(); } -bool BoxPaintInvalidator::NeedsToSavePreviousContentBoxRectOrOverflowRects() { - // The LayoutView depends on the document element's layout overflow rect (see: - // ComputeViewBackgroundInvalidation) and needs to invalidate before the - // document element invalidates. There are few document elements so the - // previous layout overflow rect is always saved, rather than duplicating the - // logic save-if-needed logic for this special case. - if (box_.IsDocumentElement()) - return true; - +bool BoxPaintInvalidator::NeedsToSavePreviousContentBoxRect() { // Replaced elements are clipped to the content box thus we need to check // for its size. if (box_.IsLayoutReplaced()) return true; - if (box_.HasSelfVisualOverflow()) - return true; - const ComputedStyle& style = box_.StyleRef(); // Background and mask layers can depend on other boxes than border box. See @@ -399,8 +388,22 @@ style.MaskLayers().AnyLayerUsesContentBox()) && box_.ContentSize() != box_.Size()) return true; + + return false; +} + +bool BoxPaintInvalidator::NeedsToSavePreviousOverflowData() { + if (box_.HasVisualOverflow() || box_.HasLayoutOverflow()) + return true; + + // If we don't have layout overflow, the layout overflow rect is the padding + // box rect, and we need to save it if the background depends on it. + // We also need to save the rect for the document element because the + // LayoutView may depend on the document element's layout overflow rect + // (see: ComputeViewBackgroundInvalidation). if ((BackgroundGeometryDependsOnLayoutOverflowRect() || - BackgroundPaintsOntoScrollingContentsLayer()) && + BackgroundPaintsOntoScrollingContentsLayer() || + box_.IsDocumentElement()) && box_.LayoutOverflowRect() != box_.BorderBoxRect()) return true; @@ -408,13 +411,18 @@ } void BoxPaintInvalidator::SavePreviousBoxGeometriesIfNeeded() { - box_.GetMutableForPainting().SavePreviousSize(); + auto mutable_box = box_.GetMutableForPainting(); + mutable_box.SavePreviousSize(); - if (NeedsToSavePreviousContentBoxRectOrOverflowRects()) { - box_.GetMutableForPainting().SavePreviousContentBoxAndOverflowRects(); - } else { - box_.GetMutableForPainting().ClearPreviousContentBoxAndOverflowRects(); - } + if (NeedsToSavePreviousOverflowData()) + mutable_box.SavePreviousOverflowData(); + else + mutable_box.ClearPreviousOverflowData(); + + if (NeedsToSavePreviousContentBoxRect()) + mutable_box.SavePreviousContentBoxRect(); + else + mutable_box.ClearPreviousContentBoxRect(); } } // namespace blink
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.h b/third_party/blink/renderer/core/paint/box_paint_invalidator.h index 7a33160..33acb11 100644 --- a/third_party/blink/renderer/core/paint/box_paint_invalidator.h +++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.h
@@ -46,7 +46,8 @@ PaintInvalidationReason ComputePaintInvalidationReason(); - bool NeedsToSavePreviousContentBoxRectOrOverflowRects(); + bool NeedsToSavePreviousContentBoxRect(); + bool NeedsToSavePreviousOverflowData(); void SavePreviousBoxGeometriesIfNeeded(); const LayoutBox& box_;
diff --git a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc index faf4b89..c983a14 100644 --- a/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc +++ b/third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.cc
@@ -27,6 +27,7 @@ #include "third_party/blink/renderer/core/paint/compositing/compositing_requirements_updater.h" #include "base/macros.h" +#include "third_party/blink/renderer/core/html/media/html_media_element.h" #include "third_party/blink/renderer/core/layout/layout_embedded_content.h" #include "third_party/blink/renderer/core/layout/layout_view.h" #include "third_party/blink/renderer/core/paint/compositing/paint_layer_compositor.h" @@ -183,6 +184,13 @@ subtree_reasons |= CompositingReason::kIsolateCompositedDescendants; } + if (layer->GetLayoutObject().IsVideo() && + To<HTMLMediaElement>(layer->GetLayoutObject().GetNode()) + ->IsFullscreen()) { + subtree_reasons |= + CompositingReason::kFullscreenVideoWithCompositedDescendants; + } + // A layer with preserve-3d or perspective only needs to be composited if // there are descendant layers that will be affected by the preserve-3d or // perspective.
diff --git a/third_party/blink/renderer/core/paint/fragment_data.h b/third_party/blink/renderer/core/paint/fragment_data.h index f4a3ab04..a4fa933 100644 --- a/third_party/blink/renderer/core/paint/fragment_data.h +++ b/third_party/blink/renderer/core/paint/fragment_data.h
@@ -35,14 +35,6 @@ paint_offset_ = paint_offset; } - // Visual rect in the space of the the local transform space. - const PhysicalRect& VisualRectForLayoutShiftTracking() const { - return visual_rect_for_layout_shift_tracking_; - } - void SetVisualRectForLayoutShiftTracking(const PhysicalRect& rect) { - visual_rect_for_layout_shift_tracking_ = rect; - } - // An id for this object that is unique for the lifetime of the WebView. UniqueObjectId UniqueId() const { DCHECK(rare_data_); @@ -250,8 +242,6 @@ RareData& EnsureRareData(); PhysicalOffset paint_offset_; - PhysicalRect visual_rect_for_layout_shift_tracking_; - std::unique_ptr<RareData> rare_data_; };
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.cc b/third_party/blink/renderer/core/paint/paint_invalidator.cc index e92d928..7dc0402 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.cc +++ b/third_party/blink/renderer/core/paint/paint_invalidator.cc
@@ -141,45 +141,130 @@ DCHECK(context.painting_layer == object.PaintingLayer()); } -void PaintInvalidator::UpdateForPaintOffsetChange( - const LayoutObject& object, - FragmentData& fragment_data, +void PaintInvalidator::UpdateFromTreeBuilderContext( + const PaintPropertyTreeBuilderFragmentContext& tree_builder_context, PaintInvalidatorContext& context) { - const auto* tree_context = context.tree_builder_context_; - DCHECK(tree_context); - DCHECK_EQ(tree_context->current.paint_offset, fragment_data.PaintOffset()); - - // LayoutShiftTracker doesn't track SVG children. Also the visual rect - // calculation below works for non-SVG-child objects only. - if (!object.IsSVGChild()) { - PhysicalRect new_visual_rect = object.LocalVisualRect(); - new_visual_rect.Move(fragment_data.PaintOffset()); - // If the layout shift root has changed, LayoutShiftTracker can't use the - // current paint property tree to map the old visual rect. - if (!tree_context->current.layout_shift_root_changed) { - // Adjust old_visual_rect so that LayoutShiftTracker can see the change of - // offset caused by change of transforms below the 2d translation root. - PhysicalRect old_visual_rect = - fragment_data.VisualRectForLayoutShiftTracking(); - old_visual_rect.Move( - -tree_context->current.additional_offset_to_layout_shift_root_delta); - object.GetFrameView()->GetLayoutShiftTracker().NotifyObjectPrePaint( - object, - PropertyTreeStateOrAlias(*tree_context->current.transform, - *tree_context->current.clip, - *tree_context->current_effect), - old_visual_rect, new_visual_rect); - } - fragment_data.SetVisualRectForLayoutShiftTracking(new_visual_rect); - } + DCHECK_EQ(tree_builder_context.current.paint_offset, + context.fragment_data->PaintOffset()); // For performance, we ignore subpixel movement of composited layers for paint // invalidation. This will result in imperfect pixel-snapped painting. // See crbug.com/833083 for details. - if (tree_context->current + if (tree_builder_context.current .directly_composited_container_paint_offset_subpixel_delta == - fragment_data.PaintOffset() - context.old_paint_offset) - context.old_paint_offset = fragment_data.PaintOffset(); + tree_builder_context.current.paint_offset - + tree_builder_context.old_paint_offset) { + context.old_paint_offset = tree_builder_context.current.paint_offset; + } else { + context.old_paint_offset = tree_builder_context.old_paint_offset; + } + + context.transform_ = tree_builder_context.current.transform; +} + +void PaintInvalidator::UpdateLayoutShiftTracking( + const LayoutObject& object, + const PaintPropertyTreeBuilderFragmentContext& tree_builder_context, + PaintInvalidatorContext& context) { + if (!object.ShouldCheckGeometryForPaintInvalidation()) + return; + + auto& layout_shift_tracker = object.GetFrameView()->GetLayoutShiftTracker(); + if (!layout_shift_tracker.NeedsToTrack(object)) + return; + + PropertyTreeStateOrAlias property_tree_state( + *tree_builder_context.current.transform, + *tree_builder_context.current.clip, *tree_builder_context.current_effect); + + if (object.IsText()) { + const auto& text = ToLayoutText(object); + LogicalOffset new_starting_point = text.LogicalStartingPoint(); + LogicalOffset old_starting_point = text.PreviousLogicalStartingPoint(); + if (new_starting_point == old_starting_point) + return; + text.SetPreviousLogicalStartingPoint(new_starting_point); + if (old_starting_point == LayoutText::UninitializedLogicalStartingPoint()) + return; + // If the layout shift root has changed, LayoutShiftTracker can't use the + // current paint property tree to map the old rect. + if (tree_builder_context.current.layout_shift_root_changed) + return; + + layout_shift_tracker.NotifyTextPrePaint( + text, property_tree_state, old_starting_point, new_starting_point, + // Similar to the adjustment of old_paint_offset for LayoutBox. + context.old_paint_offset - + tree_builder_context.current + .additional_offset_to_layout_shift_root_delta, + tree_builder_context.current.paint_offset); + return; + } + + DCHECK(object.IsBox()); + const auto& box = ToLayoutBox(object); + + PhysicalRect new_rect = box.PhysicalBorderBoxRect(); + if (!box.HasOverflowClip()) + new_rect.Unite(box.PhysicalLayoutOverflowRect()); + PhysicalRect old_rect = PhysicalRect(PhysicalOffset(), box.PreviousSize()); + if (!box.PreviouslyHadOverflowClip()) + old_rect.Unite(box.PreviousPhysicalLayoutOverflowRect()); + + bool should_report_layout_shift = [&]() -> bool { + // If the layout shift root has changed, LayoutShiftTracker can't use the + // current paint property tree to map the old rect. + if (tree_builder_context.current.layout_shift_root_changed) + return false; + if (new_rect.IsEmpty() || old_rect.IsEmpty()) + return false; + // The parent of out-of-flow-positioned object may not be its container. + if (object.IsOutOfFlowPositioned()) + return true; + // We don't report shift for anonymous objects but report for the children. + if (object.Parent()->IsAnonymous()) + return true; + // Report if the parent is in a different transform space. + const auto* parent_context = context.ParentContext(); + if (!parent_context || !parent_context->transform_ || + parent_context->transform_ != tree_builder_context.current.transform) + return true; + // Report if this object has local movement (i.e. delta of paint offset is + // different from that of the parent). + return parent_context->fragment_data->PaintOffset() - + parent_context->old_paint_offset != + tree_builder_context.current.paint_offset - context.old_paint_offset; + }(); + + bool should_create_containing_block_scope = + box.IsLayoutBlockFlow() && box.ChildrenInline() && box.SlowFirstChild(); + if (!should_report_layout_shift && !should_create_containing_block_scope) + return; + + new_rect.Move(tree_builder_context.current.paint_offset); + old_rect.Move(context.old_paint_offset); + // Adjust old_visual_rect so that LayoutShiftTracker can see the change of + // offset caused by change of transforms below the 2d translation root. + old_rect.Move(-tree_builder_context.current + .additional_offset_to_layout_shift_root_delta); + + if (should_create_containing_block_scope) { + // For layout shift tracking of contained LayoutTexts. + context.containing_block_scope_ = + std::make_unique<LayoutShiftTracker::ContainingBlockScope>( + PhysicalSizeToBeNoop(box.PreviousSize()), + PhysicalSizeToBeNoop(box.Size()), old_rect, new_rect); + if (!should_report_layout_shift) + return; + } + + // Adjust old_paint_offset similarly. + PhysicalOffset old_paint_offset = + context.old_paint_offset - + tree_builder_context.current.additional_offset_to_layout_shift_root_delta; + layout_shift_tracker.NotifyBoxPrePaint( + box, property_tree_state, old_rect, new_rect, old_paint_offset, + tree_builder_context.current.paint_offset); } bool PaintInvalidator::InvalidatePaint( @@ -222,12 +307,11 @@ if (tree_builder_context) { DCHECK_EQ(tree_builder_context->fragments.size(), 1u); - context.tree_builder_context_ = &tree_builder_context->fragments[0]; - context.old_paint_offset = - context.tree_builder_context_->old_paint_offset; - UpdateForPaintOffsetChange(object, fragment_data, context); + const auto& fragment_tree_builder_context = + tree_builder_context->fragments[0]; + UpdateFromTreeBuilderContext(fragment_tree_builder_context, context); + UpdateLayoutShiftTracking(object, fragment_tree_builder_context, context); } else { - context.tree_builder_context_ = nullptr; context.old_paint_offset = fragment_data.PaintOffset(); } @@ -244,13 +328,12 @@ tree_builder_index < tree_builder_context->fragments.size()); if (tree_builder_context) { - context.tree_builder_context_ = - &tree_builder_context->fragments[tree_builder_index]; - context.old_paint_offset = - context.tree_builder_context_->old_paint_offset; - UpdateForPaintOffsetChange(object, *fragment_data, context); + const auto& fragment_tree_builder_context = + tree_builder_context->fragments[tree_builder_index]; + UpdateFromTreeBuilderContext(fragment_tree_builder_context, context); + UpdateLayoutShiftTracking(object, fragment_tree_builder_context, + context); } else { - context.tree_builder_context_ = nullptr; context.old_paint_offset = fragment_data->PaintOffset(); } @@ -284,6 +367,9 @@ PaintInvalidatorContext::kSubtreeInvalidationChecking; } + if (AXObjectCache* cache = object.GetDocument().ExistingAXObjectCache()) + cache->InvalidateBoundingBox(&object); + return reason != PaintInvalidationReason::kNone; }
diff --git a/third_party/blink/renderer/core/paint/paint_invalidator.h b/third_party/blink/renderer/core/paint/paint_invalidator.h index 3417989c..093eb770 100644 --- a/third_party/blink/renderer/core/paint/paint_invalidator.h +++ b/third_party/blink/renderer/core/paint/paint_invalidator.h
@@ -6,6 +6,7 @@ #define THIRD_PARTY_BLINK_RENDERER_CORE_PAINT_PAINT_INVALIDATOR_H_ #include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/core/layout/layout_shift_tracker.h" #include "third_party/blink/renderer/core/paint/paint_property_tree_builder.h" #include "third_party/blink/renderer/platform/geometry/layout_rect.h" #include "third_party/blink/renderer/platform/graphics/paint_invalidation_reason.h" @@ -103,8 +104,11 @@ private: friend class PaintInvalidator; - const PaintPropertyTreeBuilderFragmentContext* tree_builder_context_ = - nullptr; + // Not using Optional because we need to keep the pointer stable when the + // vector containing this PaintInvalidatorContext reallocates. + std::unique_ptr<LayoutShiftTracker::ContainingBlockScope> + containing_block_scope_; + const TransformPaintPropertyNodeOrAlias* transform_ = nullptr; }; class PaintInvalidator { @@ -134,9 +138,13 @@ ALWAYS_INLINE void UpdateDirectlyCompositedContainer(const LayoutObject&, PaintInvalidatorContext&, bool is_ng_painting); - ALWAYS_INLINE void UpdateForPaintOffsetChange(const LayoutObject&, - FragmentData&, - PaintInvalidatorContext&); + ALWAYS_INLINE void UpdateFromTreeBuilderContext( + const PaintPropertyTreeBuilderFragmentContext&, + PaintInvalidatorContext&); + ALWAYS_INLINE void UpdateLayoutShiftTracking( + const LayoutObject&, + const PaintPropertyTreeBuilderFragmentContext&, + PaintInvalidatorContext&); Vector<const LayoutObject*> pending_delayed_paint_invalidations_; };
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 e4d4a23da..b15e4092 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_node_object.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_node_object.cc
@@ -198,8 +198,7 @@ if (IsDetached()) return; - AXObjectCache().PostNotification(GetNode(), - ax::mojom::blink::Event::kValueChanged); + AXObjectCache().HandleValueChanged(GetNode()); return; }
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc index 8ff24b4..659587e 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.cc
@@ -2004,6 +2004,18 @@ return active_aria_modal_dialog_; } +HeapVector<Member<AXObject>> +AXObjectCacheImpl::GetAllObjectsWithChangedBounds() { + VectorOf<AXObject> changed_bounds_objects; + changed_bounds_objects.ReserveCapacity(changed_bounds_ids_.size()); + for (AXID changed_bounds_id : changed_bounds_ids_) { + if (AXObject* obj = ObjectFromAXID(changed_bounds_id)) + changed_bounds_objects.push_back(obj); + } + changed_bounds_ids_.clear(); + return changed_bounds_objects; +} + void AXObjectCacheImpl::HandleInitialFocus() { PostNotification(document_, ax::mojom::Event::kFocus); } @@ -2051,6 +2063,15 @@ void AXObjectCacheImpl::HandleValueChanged(Node* node) { PostNotification(node, ax::mojom::Event::kValueChanged); + + // If it's a slider, invalidate the thumb's bounding box. + AXObject* ax_object = Get(node); + if (ax_object && ax_object->RoleValue() == ax::mojom::blink::Role::kSlider && + ax_object->HasChildren() && !ax_object->NeedsToUpdateChildren() && + ax_object->ChildCountIncludingIgnored() == 1) { + changed_bounds_ids_.insert( + ax_object->ChildAtIncludingIgnored(0)->AXObjectID()); + } } void AXObjectCacheImpl::HandleUpdateActiveMenuOption(LayoutObject* menu_list, @@ -2126,6 +2147,12 @@ MarkAXObjectDirty(Get(&document), false); } +void AXObjectCacheImpl::InvalidateBoundingBox( + const LayoutObject* layout_object) { + if (AXObject* obj = Get(const_cast<LayoutObject*>(layout_object))) + changed_bounds_ids_.insert(obj->AXObjectID()); +} + void AXObjectCacheImpl::HandleScrollPositionChanged( LocalFrameView* frame_view) { SCOPED_DISALLOW_LIFECYCLE_TRANSITION(*frame_view->GetFrame().GetDocument());
diff --git a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h index f32be2a..070c5ff 100644 --- a/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h +++ b/third_party/blink/renderer/modules/accessibility/ax_object_cache_impl.h
@@ -163,6 +163,10 @@ // without producing any layout or other notifications. void HandleFrameRectsChanged(Document&) override; + // Invalidates the bounding box, which can be later retrieved by + // GetAllObjectsWithChangedBounds. + void InvalidateBoundingBox(const LayoutObject*) override; + const AtomicString& ComputedRoleForNode(Node*) override; String ComputedNameForNode(Node*) override; @@ -284,6 +288,11 @@ bool UseAXMenuList() { return use_ax_menu_list_; } + // Retrieves a vector of all AXObjects whose bounding boxes may have changed + // since the last query. Clears the vector so that the next time it's + // called, it will only retrieve objects that have changed since now. + HeapVector<Member<AXObject>> GetAllObjectsWithChangedBounds(); + protected: void PostPlatformNotification( AXObject* obj, @@ -492,6 +501,10 @@ // Maps ids to their object's autofill state. HashMap<AXID, WebAXAutofillState> autofill_state_map_; + // The set of node IDs whose bounds has changed since the last time + // GetAllObjectsWithChangedBounds was called. + HashSet<AXID> changed_bounds_ids_; + // The source of the event that is currently being handled. ax::mojom::blink::EventFrom active_event_from_ = ax::mojom::blink::EventFrom::kNone;
diff --git a/third_party/blink/renderer/modules/exported/web_ax_object.cc b/third_party/blink/renderer/modules/exported/web_ax_object.cc index 0d2cc302..265e54c 100644 --- a/third_party/blink/renderer/modules/exported/web_ax_object.cc +++ b/third_party/blink/renderer/modules/exported/web_ax_object.cc
@@ -1502,6 +1502,20 @@ bounds_in_container = WebFloatRect(bounds); } +void WebAXObject::GetAllObjectsWithChangedBounds( + WebVector<WebAXObject>& out_changed_bounds_objects) const { + if (IsDetached()) + return; + + HeapVector<Member<AXObject>> changed_bounds_objects = + private_->AXObjectCache().GetAllObjectsWithChangedBounds(); + + out_changed_bounds_objects.reserve(changed_bounds_objects.size()); + out_changed_bounds_objects.resize(changed_bounds_objects.size()); + std::copy(changed_bounds_objects.begin(), changed_bounds_objects.end(), + out_changed_bounds_objects.begin()); +} + bool WebAXObject::ScrollToMakeVisible() const { if (IsDetached()) return false;
diff --git a/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc b/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc index 1936c03..dc0d288b 100644 --- a/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc +++ b/third_party/blink/renderer/platform/fonts/font_matching_metrics.cc
@@ -117,7 +117,8 @@ OnFontLookup(); GenericFontLookupKey key(generic_font_family_name, script, generic_family_type); - generic_font_lookups_.insert(key, resulting_font_name); + generic_font_lookups_.insert(key, + AtomicStringHash::GetHash(resulting_font_name)); } void FontMatchingMetrics::PublishIdentifiabilityMetrics() { @@ -126,8 +127,7 @@ const LocalFontLookupResult& result = entry.value; uint64_t input_digest = blink::IdentifiabilityDigestHelper( - AtomicStringHash::GetHash(key.name), key.fallback_character, - key.weight.RawValue(), key.width.RawValue(), key.slope.RawValue()); + key.name_hash, key.fallback_character, key.font_selection_request_hash); uint64_t output_digest = blink::IdentifiabilityDigestHelper( result.hash, result.check_type, result.is_loading_fallback); @@ -142,13 +142,11 @@ for (const auto& entry : generic_font_lookups_) { const GenericFontLookupKey& key = entry.key; - const AtomicString& result = entry.value; + const unsigned& result = entry.value; uint64_t input_digest = blink::IdentifiabilityDigestHelper( - AtomicStringHash::GetHash(key.generic_font_family_name), key.script, - key.generic_family_type); - uint64_t output_digest = - blink::IdentifiabilityDigestHelper(AtomicStringHash::GetHash(result)); + key.generic_font_family_name_hash, key.script, key.generic_family_type); + uint64_t output_digest = blink::IdentifiabilityDigestHelper(result); blink::IdentifiabilityMetricBuilder( base::UkmSourceId::FromInt64(source_id_))
diff --git a/third_party/blink/renderer/platform/fonts/font_matching_metrics.h b/third_party/blink/renderer/platform/fonts/font_matching_metrics.h index eab3ae0a..54e5348ee 100644 --- a/third_party/blink/renderer/platform/fonts/font_matching_metrics.h +++ b/third_party/blink/renderer/platform/fonts/font_matching_metrics.h
@@ -23,31 +23,24 @@ namespace blink { struct LocalFontLookupKey { - AtomicString name{g_empty_atom}; + unsigned name_hash{0}; UChar32 fallback_character{-1}; - FontSelectionValue weight; - FontSelectionValue width; - FontSelectionValue slope; + unsigned font_selection_request_hash{0}; bool is_deleted_value_{false}; LocalFontLookupKey() = default; - LocalFontLookupKey(AtomicString name, + LocalFontLookupKey(const AtomicString& name, FontSelectionRequest font_selection_request) - : weight(font_selection_request.weight), - width(font_selection_request.width), - slope(font_selection_request.slope) {} + : name_hash(AtomicStringHash::GetHash(name)), + font_selection_request_hash(font_selection_request.GetHash()) {} LocalFontLookupKey(UChar32 fallback_character, FontSelectionRequest font_selection_request) : fallback_character(fallback_character), - weight(font_selection_request.weight), - width(font_selection_request.width), - slope(font_selection_request.slope) {} + font_selection_request_hash(font_selection_request.GetHash()) {} explicit LocalFontLookupKey(FontSelectionRequest font_selection_request) - : weight(font_selection_request.weight), - width(font_selection_request.width), - slope(font_selection_request.slope) {} + : font_selection_request_hash(font_selection_request.GetHash()) {} explicit LocalFontLookupKey(WTF::HashTableDeletedValueType) : is_deleted_value_(true) {} @@ -55,21 +48,18 @@ bool IsHashTableDeletedValue() const { return is_deleted_value_; } bool operator==(const LocalFontLookupKey& other) const { - return name == other.name && + return name_hash == other.name_hash && fallback_character == other.fallback_character && - weight == other.weight && width == other.width && - slope == other.slope && is_deleted_value_ == other.is_deleted_value_; + font_selection_request_hash == other.font_selection_request_hash && + is_deleted_value_ == other.is_deleted_value_; } }; struct LocalFontLookupKeyHash { STATIC_ONLY(LocalFontLookupKeyHash); static unsigned GetHash(const LocalFontLookupKey& key) { - unsigned hash_codes[6] = {AtomicStringHash::GetHash(key.name), - key.fallback_character, - key.weight.RawValue(), - key.width.RawValue(), - key.slope.RawValue(), + unsigned hash_codes[4] = {key.name_hash, key.fallback_character, + key.font_selection_request_hash, key.is_deleted_value_}; return StringHasher::HashMemory<sizeof(hash_codes)>(hash_codes); } @@ -104,16 +94,17 @@ }; struct GenericFontLookupKey { - AtomicString generic_font_family_name; + unsigned generic_font_family_name_hash; UScriptCode script{UScriptCode::USCRIPT_INVALID_CODE}; FontDescription::GenericFamilyType generic_family_type; bool is_deleted_value_{false}; GenericFontLookupKey() = default; - GenericFontLookupKey(AtomicString generic_font_family_name, + GenericFontLookupKey(const AtomicString& generic_font_family_name, UScriptCode script, FontDescription::GenericFamilyType generic_family_type) - : generic_font_family_name(generic_font_family_name), + : generic_font_family_name_hash( + AtomicStringHash::GetHash(generic_font_family_name)), script(script), generic_family_type(generic_family_type) {} @@ -123,7 +114,8 @@ bool IsHashTableDeletedValue() const { return is_deleted_value_; } bool operator==(const GenericFontLookupKey& other) const { - return generic_font_family_name == other.generic_font_family_name && + return generic_font_family_name_hash == + other.generic_font_family_name_hash && script == other.script && generic_family_type == other.generic_family_type && is_deleted_value_ == other.is_deleted_value_; @@ -133,9 +125,8 @@ struct GenericFontLookupKeyHash { STATIC_ONLY(GenericFontLookupKeyHash); static unsigned GetHash(const GenericFontLookupKey& key) { - unsigned hash_codes[4] = { - AtomicStringHash::GetHash(key.generic_font_family_name), key.script, - key.generic_family_type, key.is_deleted_value_}; + unsigned hash_codes[4] = {key.generic_font_family_name_hash, key.script, + key.generic_family_type, key.is_deleted_value_}; return StringHasher::HashMemory<sizeof(hash_codes)>(hash_codes); } static bool Equal(const GenericFontLookupKey& a, @@ -273,7 +264,7 @@ LocalFontLookupKeyHashTraits> font_lookups_; HashMap<GenericFontLookupKey, - AtomicString, + unsigned, GenericFontLookupKeyHash, GenericFontLookupKeyHashTraits> generic_font_lookups_;
diff --git a/third_party/blink/renderer/platform/graphics/compositing_reasons.cc b/third_party/blink/renderer/platform/graphics/compositing_reasons.cc index d1dcd177..17a6cfe 100644 --- a/third_party/blink/renderer/platform/graphics/compositing_reasons.cc +++ b/third_party/blink/renderer/platform/graphics/compositing_reasons.cc
@@ -104,6 +104,9 @@ {CompositingReason::kIsolateCompositedDescendants, "isolateCompositedDescendants", "Should isolate descendants to apply a blend effect"}, + {CompositingReason::kFullscreenVideoWithCompositedDescendants, + "fullscreenVideoWithCompositedDescendants", + "Is a fullscreen video element with composited descendants"}, {CompositingReason::kRoot, "root", "Is the root layer"}, {CompositingReason::kLayerForHorizontalScrollbar, "layerForHorizontalScrollbar",
diff --git a/third_party/blink/renderer/platform/graphics/compositing_reasons.h b/third_party/blink/renderer/platform/graphics/compositing_reasons.h index e25a258..0528128 100644 --- a/third_party/blink/renderer/platform/graphics/compositing_reasons.h +++ b/third_party/blink/renderer/platform/graphics/compositing_reasons.h
@@ -64,6 +64,7 @@ V(PerspectiveWith3DDescendants) \ V(Preserve3DWith3DDescendants) \ V(IsolateCompositedDescendants) \ + V(FullscreenVideoWithCompositedDescendants) \ \ /* The root layer is a special case. It may be forced to be a layer, but it \ also needs to be a layer if anything else in the subtree is composited. */ \
diff --git a/third_party/blink/renderer/platform/heap/heap.cc b/third_party/blink/renderer/platform/heap/heap.cc index 43c0f24..aba11a5c 100644 --- a/third_party/blink/renderer/platform/heap/heap.cc +++ b/third_party/blink/renderer/platform/heap/heap.cc
@@ -390,15 +390,6 @@ { ThreadHeapStatsCollector::EnabledScope inner_scope( - stats_collector(), - ThreadHeapStatsCollector::kMarkFlushV8References); - finished = FlushV8References(deadline); - if (!finished) - break; - } - - { - ThreadHeapStatsCollector::EnabledScope inner_scope( stats_collector(), ThreadHeapStatsCollector::kMarkBailOutObjects); // Items in the bailout worklist are only collection backing stores. // These items could take a long time to process, so we should check @@ -419,6 +410,15 @@ { ThreadHeapStatsCollector::EnabledScope inner_scope( stats_collector(), + ThreadHeapStatsCollector::kMarkFlushV8References); + finished = FlushV8References(deadline); + if (!finished) + break; + } + + { + ThreadHeapStatsCollector::EnabledScope inner_scope( + stats_collector(), ThreadHeapStatsCollector::kMarkProcessNotFullyconstructeddWorklist); // Convert |previously_not_fully_constructed_worklist_| to // |marking_worklist_|. This merely re-adds items with the proper
diff --git a/third_party/blink/renderer/platform/heap/marking_scheduling_oracle.h b/third_party/blink/renderer/platform/heap/marking_scheduling_oracle.h index 1c5a72f..188c79e 100644 --- a/third_party/blink/renderer/platform/heap/marking_scheduling_oracle.h +++ b/third_party/blink/renderer/platform/heap/marking_scheduling_oracle.h
@@ -19,7 +19,7 @@ // Duration of one incremental marking step. Should be short enough that it // doesn't cause jank even though it is scheduled as a normal task. static constexpr base::TimeDelta kDefaultIncrementalMarkingStepDuration = - base::TimeDelta::FromMillisecondsD(0.1); + base::TimeDelta::FromMillisecondsD(0.5); // Minimum number of bytes that should be marked during an incremental // marking step.
diff --git a/third_party/blink/web_tests/FlagExpectations/composite-after-paint b/third_party/blink/web_tests/FlagExpectations/composite-after-paint index 04b58ad3..22105846 100644 --- a/third_party/blink/web_tests/FlagExpectations/composite-after-paint +++ b/third_party/blink/web_tests/FlagExpectations/composite-after-paint
@@ -65,3 +65,7 @@ # CompositeAfterPaint positions and scales root scrollbars incorrectly when # a page scale factor is applied. crbug.com/1106550 virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb-scaled.html [ Failure ] + +# Need to force the video to be composited in this case, or change pre-CAP +# to match CAP behavior. +crbug.com/1108972 fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 6147891..2fedd7e 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -1038,7 +1038,6 @@ crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-basic-004.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-basic-007.xht [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-basic-008.xht [ Failure ] -crbug.com/1112657 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-block-no-clip-001.xht [ Crash ] crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-clip-002.xht [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-columns-003.xht [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/multicol-columns-004.xht [ Failure ] @@ -1112,7 +1111,6 @@ crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/composited-with-overflow-in-next-column.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/doubly-nested-with-top-padding-crossing-row-boundaries.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/dynamic/change-second-row-height.html [ Failure ] -crbug.com/1112657 virtual/layout_ng_block_frag/fast/multicol/dynamic/insert-spanner-after-spanner-before-content.html [ Crash ] crbug.com/1105758 virtual/layout_ng_block_frag/fast/multicol/dynamic/insert-spanner-before-content.html [ Crash ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/dynamic/insert-spanner-into-stf-constrained-width.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/dynamic/insert-spanner-into-stf-unconstrained-width.html [ Failure ] @@ -1150,7 +1148,7 @@ crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/layers-in-multicol.html [ Failure ] crbug.com/1066626 virtual/layout_ng_block_frag/fast/multicol/layers-split-across-columns.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/line-too-tall-for-second-outer-row.html [ Failure ] -crbug.com/1112657 virtual/layout_ng_block_frag/fast/multicol/many-lines-overflow-in-single-row-inner.html [ Crash ] +crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/many-lines-overflow-in-single-row-inner.html [ Failure ] crbug.com/1066626 virtual/layout_ng_block_frag/fast/multicol/mixed-opacity-fixed-test.html [ Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/mixed-opacity-test.html [ Crash Failure ] crbug.com/591099 virtual/layout_ng_block_frag/fast/multicol/mixed-positioning-stacking-order.html [ Crash Failure ] @@ -2712,9 +2710,6 @@ crbug.com/626703 [ Linux ] external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] crbug.com/626703 [ Win ] external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] -crbug.com/626703 [ Linux ] virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] -crbug.com/626703 [ Mac ] virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] -crbug.com/626703 [ Win ] virtual/layout-ng-grid/external/wpt/css/css-grid/layout-algorithm/flex-and-intrinsic-sizes-002.html [ Failure ] crbug.com/626703 [ Linux ] external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html [ Timeout ] crbug.com/626703 [ Mac ] external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html [ Timeout ] crbug.com/626703 [ Win ] external/wpt/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigation_download_allow_downloads.sub.tentative.html [ Timeout ] @@ -6854,5 +6849,5 @@ # Sheriff 2020-08-05 crbug.com/1113050 fast/borders/border-radius-mask-video-ratio.html [ Pass Failure ] -crbug.com/1113127 fast/canvas/downsample-quality.html [ Pass Failure ] +crbug.com/1113127 fast/canvas/downsample-quality.html [ Pass Failure Crash ] crbug.com/1112111 [ Mac ] fast/forms/month/month-picker-appearance-step.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json index a77395a..220376a 100644 --- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json +++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_8.json
@@ -159087,12 +159087,8 @@ "6d1eedb1fcbfda2bf27f74af1b34763adc62d599", [] ], - "not-embeddable-frame.html": [ - "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", - [] - ], - "not-embeddable-frame.html.sub.headers": [ - "beecdb765cd02cc6f15700d773e66e8844b941da", + "not-embeddable-frame.py": [ + "50f9c83cf5c2343535f36348459ab8144dbe8cd7", [] ], "redirect-throw-function.sub.py": [ @@ -197657,7 +197653,7 @@ [] ], "index.md": [ - "90a67c21fce2d1546544c0540d3158fd5bf16a26", + "c1d2fe17a31508d65a9b46da5bb93b3329648ad9", [] ], "lint-tool.md": [ @@ -197727,7 +197723,7 @@ [] ], "testharness.md": [ - "1e9772a401796da1a9a15f1fea9958843c64dc7e", + "1037eaca03c702383c0b9caab07fa98cdec4b4c0", [] ], "tools.md": [ @@ -229364,7 +229360,7 @@ [] ], "github_checks_output.py": [ - "d799be911660f566701be5ebc3b90caf117075e2", + "16d399002984e0b9daf8a0239b49bedbea50914b", [] ], "sink_task.py": [ @@ -229683,7 +229679,7 @@ [] ], "commands.json": [ - "a5457b55a3308d47fac178aedd6282d93b36120f", + "ed1d72e60ec33c3b550308bc55eacbf96e0be4c4", [] ], "serve.py": [ @@ -229691,7 +229687,7 @@ [] ], "test_functional.py": [ - "894479d111c90dad925c683cb0e93ac13fc68619", + "5a918c2ee473e55886dfc70878d3df17b728e6f1", [] ], "test_serve.py": [ @@ -235319,7 +235315,7 @@ [] ], "commands.json": [ - "a47ab40d72847d5f536e0ac2e02eb3fe0fea233a", + "51f66d0decb09d7a17493ca72a5f13f829d04f3b", [] ], "create.py": [ @@ -235375,7 +235371,7 @@ [] ], "wpt.py": [ - "395db0394da67caa8bdc1ad9e689e583175192b0", + "efa985c7cc1740eb0fd6e5a80f9e89e24cf75d37", [] ] }, @@ -263900,8 +263896,15 @@ } ] ], + "report-frame-ancestors-with-x-frame-options.sub.html": [ + "0c58a5efd54ceda6ad5f906b02862976c40f65cd", + [ + null, + {} + ] + ], "report-frame-ancestors.sub.html": [ - "a5aa1661c1085a61bedfe88b41ee389f62f577d2", + "cd7bbcb9731009651c1646907e55e137e9d5fdb5", [ null, {} @@ -409689,6 +409692,13 @@ {} ] ], + "render_state_update.https.html": [ + "2f28d442ec9889ae9cf6d54b70e1c4c64b862a0f", + [ + null, + {} + ] + ], "render_state_vertical_fov_immersive.https.html": [ "485438cabf6a633df42a0f94c04922e7274013e1", [
diff --git a/third_party/blink/web_tests/external/wpt/docs/writing-tests/index.md b/third_party/blink/web_tests/external/wpt/docs/writing-tests/index.md index 90a67c21..c1d2fe1 100644 --- a/third_party/blink/web_tests/external/wpt/docs/writing-tests/index.md +++ b/third_party/blink/web_tests/external/wpt/docs/writing-tests/index.md
@@ -8,43 +8,14 @@ There's also a load of [general guidelines](general-guidelines) that apply to all tests. -```eval_rst -.. toctree:: - :maxdepth: 1 +## Test Types - general-guidelines - ahem - assumptions - crashtest - css-metadata - css-user-styles - file-names - h2tests - lint-tool - making-a-testing-plan - manual - reftest-tutorial - reftests - print-reftests - rendering - server-features - submission-process - testdriver - testdriver-extension-tutorial - testharness - testharness-tutorial - tools - visual - wdspec - test-templates - github-intro -``` +There are various different ways of writing tests: -## Test Type - -Tests in this project use a few different approaches to verify expected -behavior. The tests can be classified based on the way they express -expectations: +* [JavaScript tests (testharness.js)](testharness) are preferred for testing APIs and may be used + for other features too. They are built with the testharness.js unit testing framework, and consist + of assertions written in JavaScript. A high-level [testharness.js tutorial](testharness-tutorial) + is available. * Rendering tests should be used to verify that the browser graphically displays pages as expected. See the [rendering test guidelines](rendering) @@ -53,7 +24,8 @@ * [Reftests](reftests) should be used to test rendering and layout. They consist of two or more pages with assertions as to whether they render - identically or not. + identically or not. A high-level [reftest tutorial](reftest-tutorial) is available. A + [print reftests](print-reftests) variant is available too. * [Visual tests](visual) should be used for checking rendering where there is a large number of conforming renderings such that reftests are impractical. @@ -61,10 +33,6 @@ screenshot can be taken and compared to an expected rendering for that user agent on that platform. -* [testharness.js](testharness) tests should be used (where possible!) for - testing everything else. They are built with the testharness.js unit testing - framework, and consist of assertions written in JavaScript. - * [Crashtests](crashtest) tests are used to check that the browser is able to load a given document without crashing or experiencing other low-level issues (asserts, leaks, etc.). They pass if the load @@ -78,14 +46,6 @@ tested using any of the above. They consist of a page that needs manual interaction or verification of the final result. -In general, there is a strong preference towards reftests and testharness.js -tests types (as they can be easily run without human interaction), so they -should be used in preference to the others even if it results in a -somewhat cumbersome test; there is a far weaker preference between the -two test types, and it is at times advisable to use testharness.js tests -for things which would typically be tested using reftests but for -which it would be overly cumbersome. - See [file names](file-names) for test types and features determined by the file names, and [server features](server-features) for advanced testing features. @@ -94,3 +54,37 @@ Once you've written tests, please submit them using the [typical GitHub Pull Request workflow](submission-process); please make sure you run the [`lint` script](lint-tool) before opening a pull request! + +## Table of Contents + +```eval_rst +.. toctree:: + :maxdepth: 1 + + general-guidelines + making-a-testing-plan + testharness + testharness-tutorial + rendering + reftests + reftest-tutorial + print-reftests + visual + crashtest + wdspec + manual + file-names + server-features + submission-process + lint-tool + ahem + assumptions + css-metadata + css-user-styles + h2tests + testdriver + testdriver-extension-tutorial + tools + test-templates + github-intro +```
diff --git a/third_party/blink/web_tests/external/wpt/docs/writing-tests/testharness.md b/third_party/blink/web_tests/external/wpt/docs/writing-tests/testharness.md index 1e9772a..1037eaca 100644 --- a/third_party/blink/web_tests/external/wpt/docs/writing-tests/testharness.md +++ b/third_party/blink/web_tests/external/wpt/docs/writing-tests/testharness.md
@@ -1,4 +1,4 @@ -# testharness.js Tests +# JavaScript Tests (testharness.js) ```eval_rst .. toctree::
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/AddEventListenerOptions-once.html b/third_party/blink/web_tests/external/wpt/dom/events/AddEventListenerOptions-once.html index ae75070..361c838b 100644 --- a/third_party/blink/web_tests/external/wpt/dom/events/AddEventListenerOptions-once.html +++ b/third_party/blink/web_tests/external/wpt/dom/events/AddEventListenerOptions-once.html
@@ -78,4 +78,21 @@ assert_equals(invoked_count, 0, "The handler should have been removed"); }, "Once listener should be added / removed like normal listeners"); +test(function() { + var invoked_count = 0; + + for (let n = 4; n > 0; n--) { + document.addEventListener('test', (e) => { + invoked_count++; + e.stopImmediatePropagation(); + }, {once: true}); + } + + for (let n = 4; n > 0; n--) { + document.dispatchEvent(new Event('test')); + } + + assert_equals(invoked_count, 4, "The listeners should be invoked"); +}, "Multiple once listeners should be invoked even if the stopImmediatePropagation is set"); + </script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html b/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html new file mode 100644 index 0000000..d69e55a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent-overflow-hidden.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<title>Layout Instability: parent (with overflow:hidden) and child moved together</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<div id="parent" style="position: relative; width: 200px; height: 200px; + border: 50px solid blue; overflow: hidden"> + <div id="child" style="height: 400px"></div> +</div> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + const parent = document.querySelector("#parent"); + parent.style.top = '100px'; + + // Only the parent area should be reported. + const expectedScore = computeExpectedScore(300 * (300 + 100), 100); + + // Observer fires after the frame is painted. + assert_equals(watcher.score, 0); + await watcher.promise; + assert_equals(watcher.score, expectedScore); +}, 'Parent (with overflow:hidden) and child moved together.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent.html b/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent.html new file mode 100644 index 0000000..7271af6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/child-shift-with-parent.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<title>Layout Instability: parent/child moved together</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<div id="parent" style="position: relative; width: 100px; height: 100px; border: 100px solid blue"> + <div id="child" style="height: 300px"></div> +</div> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + const parent = document.querySelector("#parent"); + parent.style.top = '100px'; + + // If the implementation reports child and parent separately + // (overlapping are should be excluded): + const expectedScoreMin = computeExpectedScore(300 * (300 + 100) + 100 * 100, 100); + // If the implementation reports parent bounding box (including child): + const expectedScoreMax = computeExpectedScore(300 * (400 + 100), 100); + + // Observer fires after the frame is painted. + assert_equals(watcher.score, 0); + await watcher.promise; + assert_between_inclusive(watcher.score, expectedScoreMin, expectedScoreMax); +}, 'Parent/child movement.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift-vertical-rl.html b/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift-vertical-rl.html new file mode 100644 index 0000000..a89cad14 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift-vertical-rl.html
@@ -0,0 +1,44 @@ +<!DOCTYPE html> +<title>Layout Instability: vertical-rl inline/text movement is detected</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<body style="writing-mode: vertical-rl"> +<div style="height: 200px; font-size: 20px; line-height: 25px"> + 1AAAAAAA<br> + 2AAAAAAA<br> + 3AAAAAAA<br> + <div id="inline-block" style="display: inline-block; width: 50px">4AAAAAAA</div><br> + 5AAAAAAA<br> + 6AAAAAAA<br> + 7AAAAAAA<br> +</div> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + const inline_block = document.querySelector("#inline-block"); + inline_block.style.width = '100px'; + + // The lines below the inline-block are shifted down by 50px. + // The implementation may measure the real width of the shifted text + // or use the available width (i.e. width of the containing block). + // Also tolerate extra 10% error. + const text_width = inline_block.offsetWidth; + const expectedScoreMin = computeExpectedScore(text_width * (30 * 3 + 50), 50) * 0.9; + const expectedScoreMax = computeExpectedScore(200 * (30 * 3 + 50), 50) * 1.1; + + // Observer fires after the frame is painted. + assert_equals(watcher.score, 0); + await watcher.promise; + assert_between_exclusive(watcher.score, expectedScoreMin, expectedScoreMax); +}, 'Vertical-rl inline flow movement.'); + +</script> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift.html b/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift.html new file mode 100644 index 0000000..0385f29 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/inline-flow-shift.html
@@ -0,0 +1,42 @@ +<!DOCTYPE html> +<title>Layout Instability: inline/text movement is detected</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<div style="width: 200px; font-size: 20px; line-height: 25px"> + 1AAAAAAA<br> + 2AAAAAAA<br> + 3AAAAAAA<br> + <div id="inline-block" style="display: inline-block; height: 50px">4AAAAAAA</div><br> + 5AAAAAAA<br> + 6AAAAAAA<br> + 7AAAAAAA<br> +</div> +<script> + +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Modify the position of the div. + const inline_block = document.querySelector("#inline-block"); + inline_block.style.height = '100px'; + + // The lines below the inline-block are shifted down by 50px. + // The implementation may measure the real width of the shifted text + // or use the available width (i.e. width of the containing block). + // Also tolerate extra 10% error. + const text_width = inline_block.offsetWidth; + const expectedScoreMin = computeExpectedScore(text_width * (30 * 3 + 50), 50) * 0.9; + const expectedScoreMax = computeExpectedScore(200 * (30 * 3 + 50), 50) * 1.1; + + // Observer fires after the frame is painted. + assert_equals(watcher.score, 0); + await watcher.promise; + assert_between_exclusive(watcher.score, expectedScoreMin, expectedScoreMax); +}, 'Inline flow movement.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/outline.html b/third_party/blink/web_tests/external/wpt/layout-instability/outline.html new file mode 100644 index 0000000..1fed8e9 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/layout-instability/outline.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<title>Layout Instability: outline doesn't contribute to layout shift</title> +<link rel="help" href="https://wicg.github.io/layout-instability/" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/util.js"></script> +<div id="target" style="width: 300px; height: 300px"></div> +<script> +promise_test(async () => { + const watcher = new ScoreWatcher; + + // Wait for the initial render to complete. + await waitForAnimationFrames(2); + + // Add outline for target. This should not generate a shift. + target.style.outline = "10px solid blue"; + + await waitForAnimationFrames(3); + assert_equals(watcher.score, 0); +}, "Outline."); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/tools/ci/tc/github_checks_output.py b/third_party/blink/web_tests/external/wpt/tools/ci/tc/github_checks_output.py index d799be9..16d39900 100644 --- a/third_party/blink/web_tests/external/wpt/tools/ci/tc/github_checks_output.py +++ b/third_party/blink/web_tests/external/wpt/tools/ci/tc/github_checks_output.py
@@ -21,7 +21,7 @@ """Return the outputter for GitHub Checks output, if enabled. :param kwargs: The arguments passed to the program (to look for the - --github_checks_text_file flag) + github_checks_text_file field) """ global __outputter if kwargs['github_checks_text_file'] and __outputter is None:
diff --git a/third_party/blink/web_tests/external/wpt/tools/serve/commands.json b/third_party/blink/web_tests/external/wpt/tools/serve/commands.json index a5457b5..ed1d72e 100644 --- a/third_party/blink/web_tests/external/wpt/tools/serve/commands.json +++ b/third_party/blink/web_tests/external/wpt/tools/serve/commands.json
@@ -12,7 +12,6 @@ "parser": "get_parser", "help": "Run wptserve server for WAVE", "virtualenv": true, - "install": ["ua-parser"], "requirements": ["../wave/requirements.txt"] } }
diff --git a/third_party/blink/web_tests/external/wpt/tools/serve/test_functional.py b/third_party/blink/web_tests/external/wpt/tools/serve/test_functional.py index 894479d..5a918c2 100644 --- a/third_party/blink/web_tests/external/wpt/tools/serve/test_functional.py +++ b/third_party/blink/web_tests/external/wpt/tools/serve/test_functional.py
@@ -9,6 +9,7 @@ import Queue as queue # noqa: N813 except ImportError: import queue +import sys import tempfile import threading @@ -45,6 +46,8 @@ os.remove(name) +@pytest.mark.skipif(sys.version_info >= (3, 8) and sys.platform == 'darwin', + reason="multiprocessing test hangs in Python 3.8 on macOS (#24880)") def test_subprocess_exit(server_subprocesses, tempfile_name): timeout = 30
diff --git a/third_party/blink/web_tests/external/wpt/tools/wpt/commands.json b/third_party/blink/web_tests/external/wpt/tools/wpt/commands.json index a47ab40..51f66d0 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wpt/commands.json +++ b/third_party/blink/web_tests/external/wpt/tools/wpt/commands.json
@@ -6,7 +6,6 @@ "help": "Run tests in a browser", "virtualenv": true, "install": [ - "requests", "zstandard" ], "requirements": [ @@ -25,9 +24,6 @@ "parser": "create_parser_update", "help": "Update expectations files from raw logs.", "virtualenv": true, - "install": [ - "requests" - ], "requirements": [ "../wptrunner/requirements.txt" ] @@ -51,6 +47,7 @@ "script": "run", "parser": "get_parser", "help": "Install browser components", + "virtualenv": true, "install": [ "mozinstall" ]
diff --git a/third_party/blink/web_tests/external/wpt/tools/wpt/wpt.py b/third_party/blink/web_tests/external/wpt/tools/wpt/wpt.py index 395db039..efa985c 100644 --- a/third_party/blink/web_tests/external/wpt/tools/wpt/wpt.py +++ b/third_party/blink/web_tests/external/wpt/tools/wpt/wpt.py
@@ -38,6 +38,8 @@ "requirements": [os.path.join(base_dir, item) for item in props.get("requirements", [])] } + if rv[command]["install"] or rv[command]["requirements"]: + assert rv[command]["virtualenv"] return rv
diff --git a/third_party/blink/web_tests/external/wpt/webxr/render_state_update.https.html b/third_party/blink/web_tests/external/wpt/webxr/render_state_update.https.html new file mode 100644 index 0000000..2f28d44 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/webxr/render_state_update.https.html
@@ -0,0 +1,96 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="resources/webxr_util.js"></script> +<script src="resources/webxr_test_constants.js"></script> +<canvas /> + +<script> +let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; + +let testSessionEnded = function(session, fakeDeviceController, t) { + return new Promise((resolve, reject) => { + resolve(session.end().then(() => { + t.step(() => { + assert_throws_dom('InvalidStateError', () => session.updateRenderState({})); + }); + })); + }); +}; + + +let testBaseLayer = function(session, fakeDeviceController, t, sessionObjects) { + return new Promise((resolve, reject) => { + navigator.xr.test.simulateUserActivation(() => { + navigator.xr.requestSession('inline').then((tempSession) => { + t.step(() => { + assert_not_equals(session, tempSession); + assert_throws_dom('InvalidStateError', () => session.updateRenderState({ baseLayer : new XRWebGLLayer(tempSession, sessionObjects.gl), })); + }); + }); + resolve(); + }); + }); +}; + +let testFieldOfView = function(session, fakeDeviceController, t) { + return new Promise((resolve, reject) => { + t.step(() => { + assert_throws_dom('InvalidStateError', () => session.updateRenderState({ inlineVerticalFieldOfView : Math.PI, })); + }); + resolve(); + }); +}; + +let testNoParams = function(session, fakeDeviceController, t) { + return new Promise((resolve, reject) => { + try { + session.updateRenderState({}); + } catch (err) { + assert_unreached("updateRenderState should not fail (actually not do anything) with no params"); + } + resolve(); + }); +}; + +let testParams = function(session, fakeDeviceController, t, sessionObjects) { + return new Promise((resolve, reject) => { + let gl = sessionObjects.gl; + try { + gl.makeXRCompatible().then(() => { + t.step(() => { + let fov = Math.PI; + let near = 0.2; + let far = 0.8; + let layer = new XRWebGLLayer(session, gl); + session.updateRenderState({ inlineVerticalFieldOfView: fov, depthNear: near, depthFar: far, baseLayer: layer }); + // The update can only happen between frame boundaries, updateRenderState only queues changes. + assert_not_equals(session.renderState.inlineVerticalFieldOfView, fov); + assert_not_equals(session.renderState.depthNear, near); + assert_not_equals(session.renderState.depthFar, far); + assert_not_equals(session.renderState.baseLayer, layer); + }); + }); + } catch (err) { + assert_unreached("updateRenderState should not fail when all params are specified"); + } + resolve(); + }); +}; + +let testName = "updateRenderState handles appropriately ended sessions"; +xr_session_promise_test(testName, testSessionEnded, fakeDeviceInitParams, 'immersive-vr'); + +testName = "updateRenderState handles appropriately baseLayers created with different sessions"; +xr_session_promise_test(testName, testBaseLayer, fakeDeviceInitParams, 'immersive-vr'); + +testName = "updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView"; +xr_session_promise_test(testName, testFieldOfView, fakeDeviceInitParams, 'immersive-vr'); + +testName = "updateRenderState handles appropriately XRRenderStateInit with no params"; +xr_session_promise_test(testName, testNoParams, fakeDeviceInitParams, 'immersive-vr'); + +testName = "updateRenderState handles appropriately XRRenderStateInit params"; +xr_session_promise_test(testName, testParams, fakeDeviceInitParams, 'inline'); + +</script>
diff --git a/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls-expected.txt b/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls-expected.txt index 1e6e880..bb4a6c8b 100644 --- a/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls-expected.txt +++ b/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls-expected.txt
@@ -11,6 +11,8 @@ handler: layer(800x600) has hit test rect (0,0 800x600) handler: layer(800x600) has hit test rect (0,0 800x600) handler: layer(800x600) has hit test rect (0,0 800x600) +handler: layer(800x600) has hit test rect (0,0 800x600) +Found composited video layer, as expected END OF TEST
diff --git a/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html b/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html index a808564..d8a5b0a 100644 --- a/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html +++ b/third_party/blink/web_tests/fullscreen/compositor-touch-hit-rects-fullscreen-video-controls.html
@@ -29,6 +29,11 @@ else consoleWrite("Should keep rect on document"); logRects('handler'); + if (JSON.parse(internals.layerTreeAsText(document)).layers.find( + layer => layer.name.includes("LayoutVideo"))) + log('Found composited video layer, as expected') + else + log('ERROR: Failed to find composited video composited layer') endTest(); });
diff --git a/third_party/blink/web_tests/resources/scrollbar-util.js b/third_party/blink/web_tests/resources/scrollbar-util.js index 2533b70..933020a 100644 --- a/third_party/blink/web_tests/resources/scrollbar-util.js +++ b/third_party/blink/web_tests/resources/scrollbar-util.js
@@ -65,7 +65,7 @@ // All percent-based scroll clamping is made in physical pixels. pixel_delta = percentBasedDelta(scaleCssToPhysicalPixels(scroller_size)); - min_delta = MIN_SCROLL_DELTA_PCT_BASED; + // Note that, window.inner* matches the size of the innerViewport, and won't // match the VisualViewport's dimensions at the C++ code in the presence of // UI elements that resize it (e.g. chromeOS OSKs). @@ -74,15 +74,12 @@ max_delta = percentBasedDelta(scaleCssToBlinkPixels({ x: window.innerWidth, y: window.innerHeight})); - pixel_delta.x = clamp(pixel_delta.x, min_delta, max_delta.x); - pixel_delta.y = clamp(pixel_delta.y, min_delta, max_delta.y); + pixel_delta.x = Math.min(pixel_delta.x, max_delta.x); + pixel_delta.y = Math.min(pixel_delta.y, max_delta.y); return scalePhysicalToCssPixels(pixel_delta); } -// The minimum amount of pixels scrolled if percent-based scrolling is enabled -const MIN_SCROLL_DELTA_PCT_BASED = 16; - // The percentage scrollbar arrows will scroll, if percent-based scrolling // is enabled. const SCROLLBAR_SCROLL_PERCENTAGE = 0.125;
diff --git a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-page-zoom.html b/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-page-zoom.html deleted file mode 100644 index cdeaf898..0000000 --- a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-page-zoom.html +++ /dev/null
@@ -1,62 +0,0 @@ -<!doctype html> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/gesture-util.js"></script> -<script src="../../resources/scrollbar-util.js"></script> -<script src="../../resources/blink-coordinates-util.js"></script> -<script src="resources/scroller-util.js"></script> -<script src="resources/percent-based-util.js"></script> - -<style> - .scroller { - width: 40px; - height: 40px; - overflow: scroll; - } - .scroller>.child { - width: 4000px; - height: 4000px; - } -</style> - - -<div id="scroller" class="scroller"> - <div class="child"></div> -</div> -<script> - const onMacPlatform = navigator.userAgent.includes("Mac OS X"); - - const ZOOM_RATIO = 2; - testRunner.setPageZoomFactor(ZOOM_RATIO); - - // As there is page zoom, devicePixelRatio = deviceScaleFactor * pageZoomFactor - // TODO(joalmei): When https://crbug.com/716231 is fixed, remove condition - // for mac. - const MIN_DELTA = onMacPlatform - ? MIN_SCROLL_DELTA_PCT_BASED / ZOOM_RATIO - : MIN_SCROLL_DELTA_PCT_BASED / window.devicePixelRatio; - - // 1 - Test scrollbar arrows - promise_test(async function () { - // Mac doesn't have scrollbar arrows. - if (onMacPlatform) - return; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - await runScrollbarArrowsTest(scroller, expected_x, expected_y); - }, "Percent scrolling using scrollbar arrows clamped by 16px / Zoom " + - "Scale Factor"); - - - // 2 - Test mousewheel - promise_test(async function () { - const WHEEL_PERCENTAGE = 0.1; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - await runMousewheelTest(scroller, expected_x, expected_y, WHEEL_PERCENTAGE); - }, "Percent scrolling using mousewheel clamped by 16px / Zoom Scale Factor"); -</script>
diff --git a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-pinch-zoom.html b/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-pinch-zoom.html deleted file mode 100644 index 96dd48d..0000000 --- a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta-pinch-zoom.html +++ /dev/null
@@ -1,69 +0,0 @@ -<!doctype html> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/gesture-util.js"></script> -<script src="../../resources/scrollbar-util.js"></script> -<script src="../../resources/blink-coordinates-util.js"></script> -<script src="resources/scroller-util.js"></script> -<script src="resources/percent-based-util.js"></script> - -<style> - .scroller { - width: 40px; - height: 40px; - overflow: scroll; - } - - .scroller>.child { - width: 4000px; - height: 4000px; - } -</style> - - -<div id="scroller" class="scroller"> - <div class="child"></div> -</div> -<script> -window.onload = async function () { - const onMacPlatform = navigator.userAgent.includes("Mac OS X"); - const ZOOM_RATIO = 1.5; - // Pinch-zoom to start testing - internals.setPageScaleFactor(ZOOM_RATIO); - - // As clamping is done in physical pixels, 16 physical pixels are downscaled - // by the ZOOM_FACTOR when pinch-zoomed... - // As there is no page zoom, devicePixelRatio = deviceScaleFactor - // TODO(joalmei): When https://crbug.com/716231 is fixed, remove condition - // for mac. - const MIN_DELTA = Math.round(onMacPlatform - ? MIN_SCROLL_DELTA_PCT_BASED / ZOOM_RATIO - : MIN_SCROLL_DELTA_PCT_BASED / (window.devicePixelRatio * ZOOM_RATIO)); - - // 1 - Test arrows - promise_test(async function () { - // Mac doesn't have scrollbar arrows. - if (onMacPlatform) - return; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - await runScrollbarArrowsTest(scroller, expected_x, expected_y); - - }, "Percent scrolling using scrollbar arrows are clamped by " + - "16px after a pinch zoom"); - - - // 2 - Test mousewheel - promise_test(async function () { - const SCROLL_PERCENTAGE = 0.1; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - await runMousewheelTest(scroller, expected_x, expected_y, SCROLL_PERCENTAGE); - }, "Percent scrolling using mousewheel are clamped by " + - "16px after a pinch zoom"); -}; -</script>
diff --git a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta.html b/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta.html deleted file mode 100644 index 71e6e73..0000000 --- a/third_party/blink/web_tests/virtual/percent-based-scrolling/min-percent-delta.html +++ /dev/null
@@ -1,61 +0,0 @@ -<!doctype html> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> -<script src="../../resources/gesture-util.js"></script> -<script src="../../resources/scrollbar-util.js"></script> -<script src="resources/percent-based-util.js"></script> -<script src="../../resources/blink-coordinates-util.js"></script> -<script src="resources/scroller-util.js"></script> -<script src="resources/percent-based-util.js"></script> - -<style> - .scroller { - width: 50px; - height: 50px; - overflow: scroll; - } - - .scroller>.child { - width: 4000px; - height: 4000px; - } -</style> - - -<div id="scroller" class="scroller"> - <div class="child"></div> -</div> -<script> - const onMacPlatform = navigator.userAgent.includes("Mac OS X"); - - // As there is no page zoom, devicePixelRatio = deviceScaleFactor - // TODO(joalmei): When https://crbug.com/716231 is fixed, remove condition - // for mac. - const MIN_DELTA = onMacPlatform - ? MIN_SCROLL_DELTA_PCT_BASED - : MIN_SCROLL_DELTA_PCT_BASED / window.devicePixelRatio; - - // 1 - Test arrows - promise_test(async function () { - // Mac doesn't have scrollbar arrows. - if (onMacPlatform) - return; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - await runScrollbarArrowsTest(scroller, expected_x, expected_y) - }, "Percent scrolling using scrollbar arrows in scroller clamped by 16px"); - - // 2 - Test mousewheel - promise_test(async function () { - const SCROLL_PERCENTAGE = 0.1; - - const expected_x = MIN_DELTA; - const expected_y = MIN_DELTA; - - // Check if mousewheel scrolls are clamping by its minimum value. - await runMousewheelTest(scroller, expected_x, expected_y, SCROLL_PERCENTAGE); - }, "Percent scrolling using mousewheel in scroller clamped by 16px"); - -</script>
diff --git a/third_party/protobuf/proto_library.gni b/third_party/protobuf/proto_library.gni index 71b264c1..e41ae5f 100644 --- a/third_party/protobuf/proto_library.gni +++ b/third_party/protobuf/proto_library.gni
@@ -160,6 +160,12 @@ generate_javascript = false } + if (defined(invoker.generate_descriptor)) { + generate_descriptor = invoker.generate_descriptor + } else { + generate_descriptor = "" + } + if (defined(invoker.generator_plugin_label)) { # Straightforward way to get the name of executable doesn't work because # |root_out_dir| and |root_build_dir| may differ in cross-compilation and @@ -235,35 +241,53 @@ js_out_dir = "$root_out_dir/jsproto/" + proto_out_dir rel_js_out_dir = rebase_path(js_out_dir, root_build_dir) } + if (generate_descriptor != "") { + descriptor_out = + "$root_gen_dir/" + proto_out_dir + "/" + generate_descriptor + rel_descriptor_out = rebase_path(descriptor_out, root_build_dir) + } protos = rebase_path(invoker.sources, proto_in_dir) protogens = [] protogens_cc = [] protogens_js = [] - # List output files. - foreach(proto, protos) { - proto_dir = get_path_info(proto, "dir") - proto_name = get_path_info(proto, "name") - proto_path = proto_dir + "/" + proto_name + # Whether library should be generated. + # Library is not needed when proto_library is used to generate binary descriptor, in which case + # corresponding library target should be omitted entirely. + generate_library = generate_cc || generate_python || generate_with_plugin || + generate_javascript - if (generate_cc) { - protogens_cc += [ - "$cc_out_dir/$proto_path.pb.h", - "$cc_out_dir/$proto_path.pb.cc", - ] - } - if (generate_python) { - protogens += [ "$py_out_dir/${proto_path}_pb2.py" ] - } - if (generate_with_plugin) { - foreach(suffix, generator_plugin_suffixes) { - protogens_cc += [ "$cc_out_dir/${proto_path}${suffix}" ] + # List output files. + if (generate_library) { + foreach(proto, protos) { + proto_dir = get_path_info(proto, "dir") + proto_name = get_path_info(proto, "name") + proto_path = proto_dir + "/" + proto_name + + if (generate_cc) { + protogens_cc += [ + "$cc_out_dir/$proto_path.pb.h", + "$cc_out_dir/$proto_path.pb.cc", + ] + } + if (generate_python) { + protogens += [ "$py_out_dir/${proto_path}_pb2.py" ] + } + if (generate_with_plugin) { + foreach(suffix, generator_plugin_suffixes) { + protogens_cc += [ "$cc_out_dir/${proto_path}${suffix}" ] + } + } + if (generate_javascript) { + protogens_js += [ "$js_out_dir/${proto_path}.js" ] } } - if (generate_javascript) { - protogens_js += [ "$js_out_dir/${proto_path}.js" ] - } + } + + # If descriptor needs to be generated, it should be added to list of outputs once. + if (generate_descriptor != "") { + protogens += [ descriptor_out ] } action_name = "${target_name}_gen" @@ -346,6 +370,13 @@ } } + if (generate_descriptor != "") { + args += [ + "--descriptor-set-out", + rel_descriptor_out, + ] + } + if (defined(invoker.import_dirs)) { foreach(path, invoker.import_dirs) { args += [ "--import-dir=" + rebase_path(path, root_build_dir) ] @@ -377,9 +408,12 @@ } } - # Option to disable building a library in component build. - if (defined(invoker.component_build_force_source_set) && - invoker.component_build_force_source_set && is_component_build) { + if (!generate_library) { + # If only descriptor is required, just generate a group wrapper for action output. + link_target_type = "group" + } else if (defined(invoker.component_build_force_source_set) && + invoker.component_build_force_source_set && is_component_build) { + # Option to disable building a library in component build. link_target_type = "source_set" } else { link_target_type = "static_library" @@ -392,7 +426,7 @@ config_name = "${target_name}_config" config(config_name) { include_dirs = [] - if (has_nested_dirs) { + if (has_nested_dirs && generate_cc) { include_dirs += [ cc_out_dir ] } if (defined(invoker.import_dirs)) { @@ -428,22 +462,24 @@ "visibility", ]) - sources = get_path_info(protogens_cc, "abspath") + if (generate_library) { + sources = get_path_info(protogens_cc, "abspath") - if (defined(invoker.remove_configs)) { - configs -= invoker.remove_configs + if (defined(invoker.remove_configs)) { + configs -= invoker.remove_configs + } + + if (defined(invoker.extra_configs)) { + configs += invoker.extra_configs + } + + # Remove Sanitizer and coverage instrumentation for a performance boost when + # fuzzing, since the only fuzzers that use protobuf are libprotobuf-mutator + # based fuzzers, and they don't actually target protobuf code. + configs -= not_fuzzed_remove_configs + configs += [ "//build/config/sanitizers:not_fuzzed" ] } - if (defined(invoker.extra_configs)) { - configs += invoker.extra_configs - } - - # Remove Sanitizer and coverage instrumentation for a performance boost when - # fuzzing, since the only fuzzers that use protobuf are libprotobuf-mutator - # based fuzzers, and they don't actually target protobuf code. - configs -= not_fuzzed_remove_configs - configs += [ "//build/config/sanitizers:not_fuzzed" ] - public_configs = [ "//third_party/protobuf:using_proto" ] public_deps = []
diff --git a/tools/android/build_speed/benchmark.py b/tools/android/build_speed/benchmark.py index 39c7193..9b769d7 100755 --- a/tools/android/build_speed/benchmark.py +++ b/tools/android/build_speed/benchmark.py
@@ -36,6 +36,8 @@ _SRC_ROOT = os.path.normpath( os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir)) +sys.path.append(os.path.join(_SRC_ROOT, 'build', 'android')) +from pylib import constants # pylint: disable=line-too-long _URL_BAR = 'chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java' @@ -253,10 +255,10 @@ type=int, default=1, help='Number of times to repeat the benchmark.') - parser.add_argument('-C', - '--out-dir', - default=os.path.join('out', 'Debug'), - help='Output directory to use relative to src.') + parser.add_argument( + '-C', + '--output-directory', + help='If outdir is not provided, will attempt to guess.') parser.add_argument('-v', '--verbose', action='count', @@ -264,6 +266,11 @@ help='1 to print logging, 2 to print ninja output.') args = parser.parse_args() + if args.output_directory: + constants.SetOutputDirectory(args.output_directory) + constants.CheckOutputDirectory() + out_dir = constants.GetOutDirectory() + if args.verbose >= 2: level = logging.DEBUG elif args.verbose == 1: @@ -274,8 +281,7 @@ level=level, format='%(levelname).1s %(relativeCreated)6d %(message)s') gn_args = _GN_ARG_PRESETS[args.args] - results = run_benchmarks(args.benchmark, gn_args, args.out_dir, - args.repeat) + results = run_benchmarks(args.benchmark, gn_args, out_dir, args.repeat) print('Summary') print(f'gn args: {" ".join(gn_args)}')
diff --git a/tools/android/dependency_analysis/js/src/display_settings_data.js b/tools/android/dependency_analysis/js/src/display_settings_data.js index e167bfb..b3604de 100644 --- a/tools/android/dependency_analysis/js/src/display_settings_data.js +++ b/tools/android/dependency_analysis/js/src/display_settings_data.js
@@ -16,48 +16,88 @@ }; /** - * A container representing the visualization's node filter. Nodes included in - * the filter are allowed to be displayed on the graph. + * Underlying data for node filtering. The UI shows a "filter list" that + * displays nodes of interest, and each can be toggled on/off using a checkbox. + * Each node is classified as: + * 1. Ignored: Not in filter list; hidden in visualizer. + * 2. Unchecked: In filter list; hidden in visualizer. + * 3. Checked (Selected): In filter list; shown in visualizer. */ class NodeFilterData { - /** - * Vue does not currently support reactivity on ES6 Sets. (Planned addition - * for 3.0 https://github.com/vuejs/vue/issues/2410#issuecomment-434990853). - * For performance, we maintain a Set for lookups when filtering nodes/edges - * and expose an Array to the UI for reactivity. We sync the data in these - * two structures manually. - */ constructor() { - /** @public {!Set<string>} */ - this.nodeSet = new Set(); - /** @public {!Array<string>} */ - this.nodeList = []; - } + /** + * @typedef {Object} NodeFilterEntry An entry in the filter list. + * @property {string} name The name of the node to be filtered. + * @property {boolean} checked Whether the node is checked (selected). If + * true, then the node is shown in the visualizer. + */ - /** - * Adds a node to the node set + array. - * @param {string} nodeName The name of the node to add. + /** + * List of filter list entries, i.e., nodes in unchecked or checked state. + * @public {!Array<!NodeFilterEntry>) */ - addNode(nodeName) { - if (!this.nodeSet.has(nodeName)) { - this.nodeSet.add(nodeName); - this.nodeList.push(nodeName); - } + this.filterList = []; } /** - * Removes a node from the node set + array. + * Finds a node in the filter list, creating and adding one if necessary. + * @param {string} nodeName The name of the node to find. + * @return {!NodeFilterEntry} The node's entry in the filter list. + */ + addOrFindNode(nodeName) { + const foundIndex = this.filterList.findIndex( + filterEntry => filterEntry.name === nodeName); + if (foundIndex >= 0) { + return this.filterList[foundIndex]; + } + const entryToAdd = { + name: nodeName, + checked: true, + }; + this.filterList.push(entryToAdd); + return entryToAdd; + } + + /** + * Removes a node from the filter list (i.e., set state to ignored) if it + * exists. * @param {string} nodeName The name of the node to remove. */ removeNode(nodeName) { - const deleted = this.nodeSet.delete(nodeName); - if (deleted) { - const deleteIndex = this.nodeList.indexOf(nodeName); + const deleteIndex = this.filterList.findIndex( + filterEntry => filterEntry.name === nodeName); + if (deleteIndex >= 0) { // TODO(yjlong): If order turns out to be unimportant, just swap the // last element and the deleted element, then pop. - this.nodeList.splice(deleteIndex, 1); + this.filterList.splice(deleteIndex, 1); } } + + /** + * Sets all nodes in the filter list to checked. + */ + checkAll() { + for (const filterEntry of this.filterList) { + filterEntry.checked = true; + } + } + + /** + * Sets all nodes in the filter list to unchecked. + */ + uncheckAll() { + for (const filterEntry of this.filterList) { + filterEntry.checked = false; + } + } + + /** + * @return {!Set<string>} A set of nodes that are checked in the filter. + */ + getSelectedNodeSet() { + return new Set(this.filterList.filter(filterEntry => filterEntry.checked) + .map(filterEntry => filterEntry.name)); + } } /** Data store containing graph display-related settings. */ @@ -89,9 +129,12 @@ urlProcessor.append( URL_PARAM_KEYS.COLOR_ONLY_ON_HOVER, this.colorOnlyOnHover); urlProcessor.append(URL_PARAM_KEYS.EDGE_COLOR, this.graphEdgeColor); - if (this.nodeFilterData.nodeList.length > 0) { - urlProcessor.appendArray( - URL_PARAM_KEYS.FILTER, this.nodeFilterData.nodeList); + if (this.nodeFilterData.filterList.length > 0) { + urlProcessor.appendArray(URL_PARAM_KEYS.FILTER_NAMES, + this.nodeFilterData.filterList.map(filterEntry => filterEntry.name)); + urlProcessor.appendArray(URL_PARAM_KEYS.FILTER_CHECKED, + this.nodeFilterData.filterList.map( + filterEntry => filterEntry.checked)); } } @@ -110,8 +153,20 @@ URL_PARAM_KEYS.COLOR_ONLY_ON_HOVER, this.colorOnlyOnHover); this.graphEdgeColor = urlProcessor.getString( URL_PARAM_KEYS.EDGE_COLOR, this.graphEdgeColor); - for (const filterItem of urlProcessor.getArray(URL_PARAM_KEYS.FILTER, [])) { - this.nodeFilterData.addNode(filterItem); + + const filterNames = urlProcessor.getArray(URL_PARAM_KEYS.FILTER_NAMES, []); + const filterChecked = urlProcessor.getArray( + URL_PARAM_KEYS.FILTER_CHECKED, []); + for (const [filterIdx, filterName] of filterNames.entries()) { + const filterEntry = this.nodeFilterData.addOrFindNode(filterName); + // If there is no corresponding entry in `filterChecked` (e.g., if the + // checked param is empty), use true as a default value. + if (filterIdx < filterChecked.length) { + const filterElemChecked = (filterChecked[filterIdx] === 'true'); + filterEntry.checked = filterElemChecked; + } else { + filterEntry.checked = true; + } } } }
diff --git a/tools/android/dependency_analysis/js/src/graph_view.js b/tools/android/dependency_analysis/js/src/graph_view.js index 6d0c4ba..716f76b 100644 --- a/tools/android/dependency_analysis/js/src/graph_view.js +++ b/tools/android/dependency_analysis/js/src/graph_view.js
@@ -269,6 +269,13 @@ */ /** + * A callback to be triggered whenever a node is double-clicked in the + * visualization. + * @callback OnNodeDoubleClickedCallback + * @param {!GraphNode} node The node that was double-clicked. + */ + +/** * Returns the group a node is in, or `null` if the node shouldn't be grouped. * @callback GetNodeGroupCallback * @param {!GraphNode} node The node to find the group for. @@ -299,6 +306,8 @@ this.getNodeGroup_ = null; /** @private @type {?OnNodeClickedCallback} */ this.onNodeClicked_ = null; + /** @private @type {?OnNodeDoubleClickedCallback} */ + this.onNodeDoubleClicked_ = null; const svg = d3.select('#graph-svg'); const graphGroup = svg.append('g'); // Contains entire graph (for zoom/pan). @@ -314,7 +323,8 @@ .scaleExtent([0.25, 10]) .on('zoom', () => graphGroup.attr('transform', d3.event.transform), - )); + )) + .on('dblclick.zoom', null); // The order of these groups decide the SVG paint order (since we append // sequentially), we want hulls below edges below nodes below labels. @@ -391,6 +401,16 @@ } /** + * Binds the event when a node is double-clicked in the graph to a given + * callback. + * @param {!OnNodeDoubleClickedCallback} onNodeDoubleClicked The callback to + * bind to. + */ + registerOnNodeDoubleClicked(onNodeDoubleClicked) { + this.onNodeDoubleClicked_ = onNodeDoubleClicked; + } + + /** * Assigns the node group accessor to a given function. * @param {!GetNodeGroupCallback} getNodeGroup The function to assign to. */ @@ -690,6 +710,7 @@ return enter.append('circle') .attr('r', 5) .attr('stroke', node => getNodeColor(node)) + .on('dblclick', node => this.onNodeDoubleClicked_(node)) .on('mousedown', node => this.onNodeClicked_(node)) .on('mouseenter', node => { this.hoveredNodeManager_.setHoveredNode(node);
diff --git a/tools/android/dependency_analysis/js/src/url_processor.js b/tools/android/dependency_analysis/js/src/url_processor.js index 0a2e3925..23d6c28 100644 --- a/tools/android/dependency_analysis/js/src/url_processor.js +++ b/tools/android/dependency_analysis/js/src/url_processor.js
@@ -14,7 +14,8 @@ // Keys for identifying URL params. const URL_PARAM_KEYS = { // Common keys: - FILTER: 'f', + FILTER_NAMES: 'fn', + FILTER_CHECKED: 'fc', INBOUND_DEPTH: 'ibd', OUTBOUND_DEPTH: 'obd', CURVE_EDGES: 'ce',
diff --git a/tools/android/dependency_analysis/js/src/vue_components/class_graph_page.vue b/tools/android/dependency_analysis/js/src/vue_components/class_graph_page.vue index 76e9005..2640ba7 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/class_graph_page.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/class_graph_page.vue
@@ -7,10 +7,12 @@ <div id="page-controls"> <GraphFilterInput :node-ids="pageModel.getNodeIds()" - @[CUSTOM_EVENTS.FILTER_SUBMITTED]="addNodeToFilter"/> + @[CUSTOM_EVENTS.FILTER_SUBMITTED]="filterAddOrCheckNode"/> <GraphFilterItems :node-filter-data="displaySettingsData.nodeFilterData" - @[CUSTOM_EVENTS.FILTER_ELEMENT_CLICKED]="removeNodeFromFilter"/> + @[CUSTOM_EVENTS.FILTER_REMOVE]="filterRemoveNode" + @[CUSTOM_EVENTS.FILTER_CHECK_ALL]="filterCheckAll" + @[CUSTOM_EVENTS.FILTER_UNCHECK_ALL]="filterUncheckAll"/> <NumericInput description="Change inbound (blue) depth:" input-id="inbound-input" @@ -29,7 +31,8 @@ :page-model="pageModel" :display-settings-data="displaySettingsData" :get-node-group="getNodeGroup" - @[CUSTOM_EVENTS.NODE_CLICKED]="graphNodeClicked"/> + @[CUSTOM_EVENTS.NODE_CLICKED]="graphNodeClicked" + @[CUSTOM_EVENTS.NODE_DOUBLE_CLICKED]="graphNodeDoubleClicked"/> <div id="node-details-container"> <GraphDisplaySettings :display-settings-data="displaySettingsData"/> @@ -37,8 +40,8 @@ :selected-hull-display.sync="displaySettingsData.hullDisplay"/> <GraphSelectedNodeDetails :selected-node-details-data="pageModel.selectedNodeDetailsData" - @[CUSTOM_EVENTS.ADD_TO_FILTER_CLICKED]="addNodeToFilter" - @[CUSTOM_EVENTS.REMOVE_FROM_FILTER_CLICKED]="removeNodeFromFilter"/> + @[CUSTOM_EVENTS.DETAILS_CHECK_NODE]="filterAddOrCheckNode" + @[CUSTOM_EVENTS.DETAILS_UNCHECK_NODE]="filterUncheckNode"/> <ClassDetailsPanel :selected-class="pageModel.selectedNodeDetailsData.selectedNode"/> </div> @@ -143,13 +146,13 @@ const pageUrlProcessor = new UrlProcessor(pageUrl.searchParams); this.displaySettingsData.readUrlProcessor(pageUrlProcessor); - if (this.displaySettingsData.nodeFilterData.nodeList.length === 0) { + if (this.displaySettingsData.nodeFilterData.filterList.length === 0) { // TODO(yjlong): This is test data. Remove this when no longer needed. - this.addNodesToFilter([ + [ 'org.chromium.chrome.browser.tabmodel.AsyncTabParams', 'org.chromium.chrome.browser.ActivityTabProvider', 'org.chromium.chrome.browser.tabmodel.TabModelSelectorTabModelObserver', - ]); + ].forEach(nodeName => this.filterAddOrCheckNode(nodeName)); } }, methods: { @@ -160,26 +163,23 @@ const pageUrl = urlProcessor.getUrl(document.URL, PagePathName.CLASS); history.replaceState(null, '', pageUrl); }, - /** - * @param {string} nodeName The node to add. - */ - addNodeToFilter: function(nodeName) { - this.displaySettingsData.nodeFilterData.addNode(nodeName); - }, - /** - * @param {!Array<string>} nodeNames The nodes to add. - */ - addNodesToFilter: function(nodeNames) { - for (const nodeName of nodeNames) { - this.displaySettingsData.nodeFilterData.addNode(nodeName); - } - }, - /** - * @param {string} nodeName The node to remove. - */ - removeNodeFromFilter: function(nodeName) { + filterRemoveNode: function(nodeName) { this.displaySettingsData.nodeFilterData.removeNode(nodeName); }, + filterAddOrCheckNode: function(nodeName) { + this.displaySettingsData.nodeFilterData.addOrFindNode( + nodeName).checked = true; + }, + filterUncheckNode: function(nodeName) { + this.displaySettingsData.nodeFilterData.addOrFindNode( + nodeName).checked = false; + }, + filterCheckAll: function() { + this.displaySettingsData.nodeFilterData.checkAll(); + }, + filterUncheckAll: function() { + this.displaySettingsData.nodeFilterData.uncheckAll(); + }, /** * @param {number} depth The new inbound depth. */ @@ -199,6 +199,16 @@ graphNodeClicked: function(node) { this.pageModel.selectedNodeDetailsData.selectedNode = node; }, + /** + * @param {!GraphNode} node The double-clicked node. + */ + graphNodeDoubleClicked: function(node) { + if (node.visualizationState.selectedByFilter) { + this.filterUncheckNode(node.id); + } else { + this.filterAddOrCheckNode(node.id); + } + }, }, };
diff --git a/tools/android/dependency_analysis/js/src/vue_components/graph_filter_items.vue b/tools/android/dependency_analysis/js/src/vue_components/graph_filter_items.vue index 464a7a4..87dec0f 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/graph_filter_items.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/graph_filter_items.vue
@@ -3,14 +3,31 @@ found in the LICENSE file. --> <template> - <ul class="filter-items"> - <li - v-for="node in nodeList" - :key="node.id" - @click="removeFilter"> - {{ node }} - </li> - </ul> + <div id="filter-items-container"> + <div id="controls"> + <button @click="checkAll"> + Check All + </button> + <button @click="uncheckAll"> + Uncheck All + </button> + </div> + <ul id="filter-list"> + <li + v-for="node in filterList" + :key="node.name"> + <div class="filter-list-item"> + <div @click="removeFromFilter(node.name)"> + x + </div> + <input + v-model="node.checked" + type="checkbox"> + <div>{{ node.name }}</div> + </div> + </li> + </ul> + </div> </template> <script> @@ -25,9 +42,14 @@ return this.nodeFilterData; }, methods: { - removeFilter: function(e) { - const filterText = e.target.textContent; - this.$emit(CUSTOM_EVENTS.FILTER_ELEMENT_CLICKED, filterText.trim()); + removeFromFilter: function(nodeName) { + this.$emit(CUSTOM_EVENTS.FILTER_REMOVE, nodeName); + }, + checkAll: function() { + this.$emit(CUSTOM_EVENTS.FILTER_CHECK_ALL); + }, + uncheckAll: function() { + this.$emit(CUSTOM_EVENTS.FILTER_UNCHECK_ALL); }, }, }; @@ -36,10 +58,31 @@ </script> <style scoped> -.filter-items { - overflow: hidden; - overflow-y: scroll; - min-width: 100px; +ul { + list-style-type: none; +} + +#filter-items-container { + display: flex; + flex-direction: column; margin-right: 20px; + min-width: 100px; +} + +#filter-list { + margin: 0; + overflow-x: hidden; + overflow-y: scroll; + padding: 0; +} + +#controls { + display: flex; + flex-direction: row; +} + +.filter-list-item { + display: flex; + flex-direction: row; } </style>
diff --git a/tools/android/dependency_analysis/js/src/vue_components/graph_selected_node_details.vue b/tools/android/dependency_analysis/js/src/vue_components/graph_selected_node_details.vue index d77c614..9841914 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/graph_selected_node_details.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/graph_selected_node_details.vue
@@ -16,13 +16,13 @@ </ul> <button v-if="selectedNode.visualizationState.selectedByFilter" - @click="removeSelectedFromFilter"> - Remove from filter + @click="uncheckNodeInFilter"> + Uncheck in filter </button> <button v-else - @click="addSelectedToFilter"> - Add to filter + @click="checkNodeInFilter"> + Add/check in filter </button> </template> <div v-else> @@ -43,12 +43,11 @@ return this.selectedNodeDetailsData; }, methods: { - addSelectedToFilter: function() { - this.$emit(CUSTOM_EVENTS.ADD_TO_FILTER_CLICKED, this.selectedNode.id); + checkNodeInFilter: function(check) { + this.$emit(CUSTOM_EVENTS.DETAILS_CHECK_NODE, this.selectedNode.id); }, - removeSelectedFromFilter: function() { - this.$emit( - CUSTOM_EVENTS.REMOVE_FROM_FILTER_CLICKED, this.selectedNode.id); + uncheckNodeInFilter: function(check) { + this.$emit(CUSTOM_EVENTS.DETAILS_UNCHECK_NODE, this.selectedNode.id); }, }, };
diff --git a/tools/android/dependency_analysis/js/src/vue_components/graph_visualization.vue b/tools/android/dependency_analysis/js/src/vue_components/graph_visualization.vue index b4a6b1b..84e7959 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/graph_visualization.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/graph_visualization.vue
@@ -42,7 +42,7 @@ graphUpdateTriggers: { handler: function() { const d3Data = this.pageModel.graphModel.getDataForD3( - this.displaySettingsData.nodeFilterData.nodeSet, + this.displaySettingsData.nodeFilterData.getSelectedNodeSet(), this.displaySettingsData.inboundDepth, this.displaySettingsData.outboundDepth, ); @@ -62,6 +62,8 @@ this.graphView = new GraphView(); this.graphView.registerOnNodeClicked( node => this.$emit(CUSTOM_EVENTS.NODE_CLICKED, node)); + this.graphView.registerOnNodeDoubleClicked( + node => this.$emit(CUSTOM_EVENTS.NODE_DOUBLE_CLICKED, node)); this.graphView.registerGetNodeGroup(this.getNodeGroup); }, };
diff --git a/tools/android/dependency_analysis/js/src/vue_components/link_to_graph.vue b/tools/android/dependency_analysis/js/src/vue_components/link_to_graph.vue index a6410582..8da30f0d 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/link_to_graph.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/link_to_graph.vue
@@ -19,7 +19,7 @@ computed: { url: function() { const urlProcessor = UrlProcessor.createForOutput(); - urlProcessor.appendArray(URL_PARAM_KEYS.FILTER, this.filter); + urlProcessor.appendArray(URL_PARAM_KEYS.FILTER_NAMES, this.filter); return urlProcessor.getUrl(document.URL, this.graphType); }, },
diff --git a/tools/android/dependency_analysis/js/src/vue_components/package_graph_page.vue b/tools/android/dependency_analysis/js/src/vue_components/package_graph_page.vue index 581628a..ebf37c1 100644 --- a/tools/android/dependency_analysis/js/src/vue_components/package_graph_page.vue +++ b/tools/android/dependency_analysis/js/src/vue_components/package_graph_page.vue
@@ -7,10 +7,12 @@ <div id="page-controls"> <GraphFilterInput :node-ids="pageModel.getNodeIds()" - @[CUSTOM_EVENTS.FILTER_SUBMITTED]="addNodeToFilter"/> + @[CUSTOM_EVENTS.FILTER_SUBMITTED]="filterAddOrCheckNode"/> <GraphFilterItems :node-filter-data="displaySettingsData.nodeFilterData" - @[CUSTOM_EVENTS.FILTER_ELEMENT_CLICKED]="removeNodeFromFilter"/> + @[CUSTOM_EVENTS.FILTER_REMOVE]="filterRemoveNode" + @[CUSTOM_EVENTS.FILTER_CHECK_ALL]="filterCheckAll" + @[CUSTOM_EVENTS.FILTER_UNCHECK_ALL]="filterUncheckAll"/> <NumericInput description="Change inbound (blue) depth:" input-id="inbound-input" @@ -24,22 +26,21 @@ <GraphVisualization :graph-update-triggers="[ displaySettingsData, - displaySettingsData.nodeFilterData.nodeList, + displaySettingsData.nodeFilterData.filterList, ]" :page-model="pageModel" :display-settings-data="displaySettingsData" - @[CUSTOM_EVENTS.NODE_CLICKED]="graphNodeClicked"/> + @[CUSTOM_EVENTS.NODE_CLICKED]="graphNodeClicked" + @[CUSTOM_EVENTS.NODE_DOUBLE_CLICKED]="graphNodeDoubleClicked"/> <div id="node-details-container"> <GraphDisplaySettings :display-settings-data="displaySettingsData"/> <GraphSelectedNodeDetails - :selected-node-details-data=" - pageModel.selectedNodeDetailsData" - @[CUSTOM_EVENTS.ADD_TO_FILTER_CLICKED]="addNodeToFilter" - @[CUSTOM_EVENTS.REMOVE_FROM_FILTER_CLICKED]="removeNodeFromFilter"/> + :selected-node-details-data="pageModel.selectedNodeDetailsData" + @[CUSTOM_EVENTS.DETAILS_CHECK_NODE]="filterAddOrCheckNode" + @[CUSTOM_EVENTS.DETAILS_UNCHECK_NODE]="filterUncheckNode"/> <PackageDetailsPanel - :selected-package=" - pageModel.selectedNodeDetailsData.selectedNode"/> + :selected-package="pageModel.selectedNodeDetailsData.selectedNode"/> </div> </div> </div> @@ -119,15 +120,15 @@ const pageUrlProcessor = new UrlProcessor(pageUrl.searchParams); this.displaySettingsData.readUrlProcessor(pageUrlProcessor); - if (this.displaySettingsData.nodeFilterData.nodeList.length === 0) { + if (this.displaySettingsData.nodeFilterData.filterList.length === 0) { // TODO(yjlong): This is test data. Remove this when no longer needed. - this.addNodesToFilter([ + [ 'org.chromium.base', 'org.chromium.chrome.browser.gsa', 'org.chromium.chrome.browser.omaha', 'org.chromium.chrome.browser.media', 'org.chromium.ui.base', - ]); + ].forEach(nodeName => this.filterAddOrCheckNode(nodeName)); } }, methods: { @@ -138,26 +139,23 @@ const pageUrl = urlProcessor.getUrl(document.URL, PagePathName.PACKAGE); history.replaceState(null, '', pageUrl); }, - /** - * @param {string} nodeName The node to add. - */ - addNodeToFilter: function(nodeName) { - this.displaySettingsData.nodeFilterData.addNode(nodeName); - }, - /** - * @param {!Array<string>} nodeNames The nodes to add. - */ - addNodesToFilter: function(nodeNames) { - for (const nodeName of nodeNames) { - this.displaySettingsData.nodeFilterData.addNode(nodeName); - } - }, - /** - * @param {string} nodeName The node to remove. - */ - removeNodeFromFilter: function(nodeName) { + filterRemoveNode: function(nodeName) { this.displaySettingsData.nodeFilterData.removeNode(nodeName); }, + filterAddOrCheckNode: function(nodeName) { + this.displaySettingsData.nodeFilterData.addOrFindNode( + nodeName).checked = true; + }, + filterUncheckNode: function(nodeName) { + this.displaySettingsData.nodeFilterData.addOrFindNode( + nodeName).checked = false; + }, + filterCheckAll: function() { + this.displaySettingsData.nodeFilterData.checkAll(); + }, + filterUncheckAll: function() { + this.displaySettingsData.nodeFilterData.uncheckAll(); + }, /** * @param {number} depth The new inbound depth. */ @@ -177,6 +175,16 @@ graphNodeClicked: function(node) { this.pageModel.selectedNodeDetailsData.selectedNode = node; }, + /** + * @param {!GraphNode} node The double-clicked node. + */ + graphNodeDoubleClicked: function(node) { + if (node.visualizationState.selectedByFilter) { + this.filterUncheckNode(node.id); + } else { + this.filterAddOrCheckNode(node.id); + } + }, }, };
diff --git a/tools/android/dependency_analysis/js/src/vue_custom_events.js b/tools/android/dependency_analysis/js/src/vue_custom_events.js index a936ef87..05fe9de0 100644 --- a/tools/android/dependency_analysis/js/src/vue_custom_events.js +++ b/tools/android/dependency_analysis/js/src/vue_custom_events.js
@@ -5,11 +5,14 @@ // A collection of names for the custom events to be emitted by the page's // components (in vue_components/). const CUSTOM_EVENTS = { - ADD_TO_FILTER_CLICKED: 'add-to-filter-clicked', - FILTER_ELEMENT_CLICKED: 'filter-element-clicked', + DETAILS_CHECK_NODE: 'details-check-node', + DETAILS_UNCHECK_NODE: 'details-uncheck-node', + FILTER_REMOVE: 'filter-remove', + FILTER_CHECK_ALL: 'filter-check-all', + FILTER_UNCHECK_ALL: 'filter-uncheck-all', FILTER_SUBMITTED: 'filter-submitted', NODE_CLICKED: 'node-clicked', - REMOVE_FROM_FILTER_CLICKED: 'remove-from-filter-clicked', + NODE_DOUBLE_CLICKED: 'node-double-clicked', }; export {
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index b4c4442..727ae1f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -7751,6 +7751,11 @@ <int value="1" label="Using native notifications"/> </enum> +<enum name="BooleanNavigated"> + <int value="0" label="Navigation did not occur"/> + <int value="1" label="Navigation occurred"/> +</enum> + <enum name="BooleanNavPreloadFinishedFirst"> <int value="0" label="Worker preparation finished first"/> <int value="1" label="Navigation preload response arrived first"/> @@ -40418,6 +40423,7 @@ <int value="-1532014193" label="disable-encryption-migration"/> <int value="-1530711962" label="PrivacyElevatedAndroid:disabled"/> <int value="-1529907580" label="ImeServiceConnectable:disabled"/> + <int value="-1529899201" label="H264DecoderBufferIsCompleteFrame:disabled"/> <int value="-1529140321" label="ReadLater:enabled"/> <int value="-1528455406" label="OmniboxPedalSuggestions:enabled"/> <int value="-1525129540" @@ -43428,6 +43434,7 @@ <int value="1701972870" label="NTPSnippetsIncreasedVisibility:enabled"/> <int value="1702090999" label="ClearOldBrowsingData:disabled"/> <int value="1703927420" label="PiexWasm:enabled"/> + <int value="1705332854" label="H264DecoderBufferIsCompleteFrame:enabled"/> <int value="1705724232" label="use-android-midi-api"/> <int value="1706682238" label="ContextualSearchTranslations:disabled"/> <int value="1707283026" label="SyncPseudoUSSExtensions:disabled"/> @@ -53370,6 +53377,7 @@ <int value="6" label="Magnifying glass mode"/> <int value="7" label="Laser pointer mode"/> <int value="8" label="Assistant mode"/> + <int value="9" label="Enter capture mode"/> </enum> <enum name="PanningModelType">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index 66acb7f..0e99ce5 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -68782,6 +68782,9 @@ <histogram name="History.InMemoryURLCacheSize" units="bytes" expires_after="M86"> + <obsolete> + Removed August 2020. + </obsolete> <owner>mpearson@chromium.org</owner> <summary> Size of on-disk cache for in-memory url index. Recorded on profile open when @@ -68790,6 +68793,9 @@ </histogram> <histogram name="History.InMemoryURLChars" units="units" expires_after="M86"> + <obsolete> + Removed August 2020. + </obsolete> <owner>mpearson@chromium.org</owner> <summary> Number of items in the in-memory url index char_word_map_. Recorded on @@ -68799,8 +68805,9 @@ </histogram> <histogram name="History.InMemoryURLHistoryItems" units="units" - expires_after="M86"> + expires_after="2021-08-03"> <owner>mpearson@chromium.org</owner> + <owner>chrome-omnibox-team@google.com</owner> <summary> Number of history items in the in-memory url index. Recorded on profile open when restoring from a cache file and again shortly after profile open when @@ -68846,6 +68853,9 @@ </histogram> <histogram name="History.InMemoryURLWords" units="units" expires_after="M86"> + <obsolete> + Removed August 2020. + </obsolete> <owner>mpearson@chromium.org</owner> <summary> Number of items in in-memory url index word_map_. Recorded on profile open @@ -84464,7 +84474,7 @@ <histogram base="true" name="Memory.BackgroundTask.Browser.PrivateSwapFootprint" units="MiB" - expires_after="2020-09-15"> + expires_after="2021-09-15"> <!-- Name completed by histogram_suffixes name="BrowserRunningMode" --> <owner>hanxi@chromium.org</owner> @@ -84492,7 +84502,7 @@ <histogram base="true" name="Memory.BackgroundTask.Browser.SharedMemoryFootprint" units="MiB" - expires_after="2020-09-15"> + expires_after="2021-09-15"> <!-- Name completed by histogram_suffixes name="BrowserRunningMode" --> <owner>hanxi@chromium.org</owner> @@ -84523,7 +84533,7 @@ <histogram base="true" name="Memory.BackgroundTask.OfflinePrefetch.Browser.PrivateSwapFootprint" - units="MiB" expires_after="2020-09-15"> + units="MiB" expires_after="2021-09-15"> <!-- Name completed by histogram_suffixes name="BrowserRunningMode" --> <owner>hanxi@chromium.org</owner> @@ -84540,7 +84550,7 @@ <histogram base="true" name="Memory.BackgroundTask.OfflinePrefetch.Browser.ResidentSet" - units="MiB" expires_after="2020-09-15"> + units="MiB" expires_after="2021-09-15"> <!-- Name completed by histogram_suffixes name="BrowserRunningMode" --> <owner>hanxi@chromium.org</owner> @@ -84556,7 +84566,7 @@ <histogram base="true" name="Memory.BackgroundTask.OfflinePrefetch.Browser.SharedMemoryFootprint" - units="MiB" expires_after="2020-09-15"> + units="MiB" expires_after="2021-09-15"> <!-- Name completed by histogram_suffixes name="BrowserRunningMode" --> <owner>hanxi@chromium.org</owner> @@ -116605,6 +116615,28 @@ </summary> </histogram> +<histogram name="Omnibox.FocusResultedInNavigation" enum="BooleanNavigated" + expires_after="2021-06-30"> + <owner>ender@chromium.org</owner> + <owner>jdonnelly@chromium.org</owner> + <owner>mpearson@chromium.org</owner> + <owner>tommycli@chromium.org</owner> + <summary> + This records whether user initiated navigation after focusing the Omnibox + versus switches focus elsewhere without navigating. This metric includes + accidental focus-then-losing-focus events, including brief ones. It also + includes ones in which the user did not type any text or otherwise engage + with the Omnibox. E.g., the user tabbing through all top Chrome UI controls + will cause this metric to be recorded. If the user switches focus from the + Chrome window to another window while the Omnibox is focussed, that also + counts as a loss of focus. + + This metric is not recorded for the Realbox interactions. + + Recorded every time the Omnibox focus is cleared. + </summary> +</histogram> + <histogram name="Omnibox.FocusToEditTime" units="ms" expires_after="2021-06-30"> <owner>jdonnelly@chromium.org</owner> <owner>mpearson@chromium.org</owner>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index d8d6f76..d8618d3 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -2,7 +2,7 @@ "trace_processor_shell": { "win": { "hash": "6d781992e6c8844d3253126d7b2d447e6f2790bc", - "remote_path": "perfetto_binaries/trace_processor_shell/win/f68444a445f793554cc07f71aecaa8d4ed40b5a9/trace_processor_shell.exe" + "remote_path": "perfetto_binaries/trace_processor_shell/win/9a43f48ed4cd22ec0f6e1436cd88b829a3b99550/trace_processor_shell.exe" }, "mac": { "hash": "de0e599133740bd0c0c579d2a38e745c7085e112",
diff --git a/tools/protoc_wrapper/protoc_wrapper.py b/tools/protoc_wrapper/protoc_wrapper.py index e750880c..d096f603 100755 --- a/tools/protoc_wrapper/protoc_wrapper.py +++ b/tools/protoc_wrapper/protoc_wrapper.py
@@ -97,6 +97,8 @@ parser.add_argument("--import-dir", action="append", default=[], help="Extra import directory for protos, can be repeated." ) + parser.add_argument("--descriptor-set-out", + help="Path to write a descriptor.") parser.add_argument("protos", nargs="+", help="Input protobuf definition file(s).") @@ -151,6 +153,9 @@ protoc_cmd += [os.path.join(proto_dir, name) for name in protos] + if options.descriptor_set_out: + protoc_cmd += ["--descriptor_set_out", options.descriptor_set_out] + ret = subprocess.call(protoc_cmd) if ret != 0: if ret <= -100:
diff --git a/tools/variations/fieldtrial_to_struct.py b/tools/variations/fieldtrial_to_struct.py index 35bdad1..a5fb64d 100755 --- a/tools/variations/fieldtrial_to_struct.py +++ b/tools/variations/fieldtrial_to_struct.py
@@ -64,11 +64,13 @@ result = json.loads(json_comment_eater.Nom(handle.read())) return result -def _LoadFieldTrialConfig(filename, platforms): + +def _LoadFieldTrialConfig(filename, platforms, invert): """Loads a field trial config JSON and converts it into a format that can be used by json_to_struct. """ - return _FieldTrialConfigToDescription(_Load(filename), platforms) + return _FieldTrialConfigToDescription(_Load(filename), platforms, invert) + def _ConvertOverrideUIStrings(override_ui_strings): """Converts override_ui_strings to formatted dicts.""" @@ -83,7 +85,8 @@ def _CreateExperiment(experiment_data, platforms, form_factors, - is_low_end_device): + is_low_end_device, + invert=False): """Creates an experiment dictionary with all necessary information. Args: @@ -94,6 +97,8 @@ a subset of |_form_factors|. is_low_end_device: An optional parameter. This can either be True or False. None if not specified. + invert: An optional parameter. If set, inverts the enabled and disabled + set of experiments. Controlled by a GN flag. Returns: An experiment dict. @@ -116,18 +121,21 @@ experiment['params'] = [{'key': param, 'value': params_data[param]} for param in sorted(params_data.keys())]; enable_features_data = experiment_data.get('enable_features') - if enable_features_data: - experiment['enable_features'] = enable_features_data disable_features_data = experiment_data.get('disable_features') - if disable_features_data: - experiment['disable_features'] = disable_features_data + if enable_features_data or (invert and disable_features_data): + experiment['enable_features'] = (disable_features_data + if invert else enable_features_data) + if disable_features_data or (invert and enable_features_data): + experiment['disable_features'] = (enable_features_data + if invert else disable_features_data) override_ui_strings = experiment_data.get('override_ui_strings') if override_ui_strings: experiment['override_ui_string'] = _ConvertOverrideUIStrings( override_ui_strings) return experiment -def _CreateTrial(study_name, experiment_configs, platforms): + +def _CreateTrial(study_name, experiment_configs, platforms, invert): """Returns the applicable experiments for |study_name| and |platforms|. This iterates through all of the experiment_configs for |study_name| @@ -139,37 +147,41 @@ platform_intersection = [p for p in platforms if p in config['platforms']] if platform_intersection: - experiments += [_CreateExperiment( - e, - platform_intersection, - config.get('form_factors', []), - config.get('is_low_end_device')) - for e in config['experiments']] + experiments += [ + _CreateExperiment(e, + platform_intersection, + config.get('form_factors', []), + config.get('is_low_end_device'), + invert=invert) for e in config['experiments'] + ] return { 'name': study_name, 'experiments': experiments, } -def _GenerateTrials(config, platforms): + +def _GenerateTrials(config, platforms, invert): for study_name in sorted(config.keys()): - study = _CreateTrial(study_name, config[study_name], platforms) + study = _CreateTrial(study_name, config[study_name], platforms, invert) # To avoid converting studies with empty experiments (e.g. the study doesn't # apply to the target platforms), this generator only yields studies that # have non-empty experiments. if study['experiments']: yield study -def ConfigToStudies(config, platforms): - """Returns the applicable studies from config for the platforms.""" - return [study for study in _GenerateTrials(config, platforms)] -def _FieldTrialConfigToDescription(config, platforms): +def ConfigToStudies(config, platforms, invert): + """Returns the applicable studies from config for the platforms.""" + return [study for study in _GenerateTrials(config, platforms, invert)] + + +def _FieldTrialConfigToDescription(config, platforms, invert): return { - 'elements': { - 'kFieldTrialConfig': { - 'studies': ConfigToStudies(config, platforms) + 'elements': { + 'kFieldTrialConfig': { + 'studies': ConfigToStudies(config, platforms, invert) + } } - } } def main(arguments): @@ -190,6 +202,12 @@ 'mandatory.') parser.add_option('-y', '--year', help='year to put in the copy-right.') + parser.add_option( + '--invert_fieldtrials', + action='store_true', + help= + "Inverts the enabled and disabled experiments for existing field trials.") + (opts, args) = parser.parse_args(args=arguments) if not opts.schema: @@ -211,7 +229,8 @@ basepath = '' schema = _Load(opts.schema) - description = _LoadFieldTrialConfig(description_filename, opts.platform) + description = _LoadFieldTrialConfig(description_filename, opts.platform, + opts.invert_fieldtrials) json_to_struct.GenerateStruct( basepath, output_root, opts.namespace, schema, description, os.path.split(description_filename)[1], os.path.split(opts.schema)[1],
diff --git a/tools/variations/fieldtrial_to_struct_unittest.py b/tools/variations/fieldtrial_to_struct_unittest.py index a758682..2510428 100644 --- a/tools/variations/fieldtrial_to_struct_unittest.py +++ b/tools/variations/fieldtrial_to_struct_unittest.py
@@ -62,8 +62,8 @@ } ] } - result = fieldtrial_to_struct._FieldTrialConfigToDescription(config, - ['windows']) + result = fieldtrial_to_struct._FieldTrialConfigToDescription( + config, ['windows'], False) expected = { 'elements': { 'kFieldTrialConfig': { @@ -123,6 +123,113 @@ self.maxDiff = None self.assertEqual(expected, result) + def test_FieldTrialToDescriptionInvert(self): + config = { + 'Trial1': [{ + 'platforms': ['windows'], + 'experiments': [ + { + 'name': 'Group1', + 'params': { + 'x': '1', + 'y': '2' + }, + 'enable_features': ['A', 'B'], + 'disable_features': ['C'] + }, + { + 'name': 'Group2', + 'params': { + 'x': '3', + 'y': '4' + }, + 'enable_features': ['D', 'E'], + 'disable_features': ['F'] + }, + ] + }], + 'Trial2': [{ + 'platforms': ['windows'], + 'experiments': [{ + 'name': 'OtherGroup' + }] + }], + 'TrialWithForcingFlag': [{ + 'platforms': ['windows'], + 'experiments': [{ + 'name': 'ForcedGroup', + 'forcing_flag': "my-forcing-flag" + }] + }] + } + result = fieldtrial_to_struct._FieldTrialConfigToDescription( + config, ['windows'], True) + expected = { + 'elements': { + 'kFieldTrialConfig': { + 'studies': [ + { + 'name': + 'Trial1', + 'experiments': [ + { + 'name': + 'Group1', + 'platforms': ['Study::PLATFORM_WINDOWS'], + 'params': [{ + 'key': 'x', + 'value': '1' + }, { + 'key': 'y', + 'value': '2' + }], + 'enable_features': ['C'], + 'disable_features': ['A', 'B'], + 'form_factors': [], + }, + { + 'name': + 'Group2', + 'platforms': ['Study::PLATFORM_WINDOWS'], + 'params': [{ + 'key': 'x', + 'value': '3' + }, { + 'key': 'y', + 'value': '4' + }], + 'enable_features': ['F'], + 'disable_features': ['D', 'E'], + 'form_factors': [], + }, + ], + }, + { + 'name': + 'Trial2', + 'experiments': [{ + 'name': 'OtherGroup', + 'platforms': ['Study::PLATFORM_WINDOWS'], + 'form_factors': [], + }] + }, + { + 'name': + 'TrialWithForcingFlag', + 'experiments': [{ + 'name': 'ForcedGroup', + 'platforms': ['Study::PLATFORM_WINDOWS'], + 'forcing_flag': "my-forcing-flag", + 'form_factors': [], + }] + }, + ] + } + } + } + self.maxDiff = None + self.assertEqual(expected, result) + _MULTIPLE_PLATFORM_CONFIG = { 'Trial1': [ { @@ -168,7 +275,7 @@ def test_FieldTrialToDescriptionMultipleSinglePlatformMultipleTrial(self): result = fieldtrial_to_struct._FieldTrialConfigToDescription( - self._MULTIPLE_PLATFORM_CONFIG, ['ios']) + self._MULTIPLE_PLATFORM_CONFIG, ['ios'], False) expected = { 'elements': { 'kFieldTrialConfig': { @@ -216,7 +323,7 @@ def test_FieldTrialToDescriptionMultipleSinglePlatformSingleTrial(self): result = fieldtrial_to_struct._FieldTrialConfigToDescription( - self._MULTIPLE_PLATFORM_CONFIG, ['mac']) + self._MULTIPLE_PLATFORM_CONFIG, ['mac'], False) expected = { 'elements': { 'kFieldTrialConfig': { @@ -257,7 +364,7 @@ def test_FieldTrialToDescriptionMultipleFormFactorsTrial(self): result = fieldtrial_to_struct._FieldTrialConfigToDescription( - self._MULTIPLE_FORM_FACTORS_CONFIG, ['windows']) + self._MULTIPLE_FORM_FACTORS_CONFIG, ['windows'], False) expected = { 'elements': { 'kFieldTrialConfig': { @@ -321,7 +428,7 @@ def test_FieldTrialToDescriptionMultipleOverrideUIStringTrial(self): result = fieldtrial_to_struct._FieldTrialConfigToDescription( - self._MULTIPLE_OVERRIDE_UI_STRING_CONFIG, ['windows']) + self._MULTIPLE_OVERRIDE_UI_STRING_CONFIG, ['windows'], False) expected = { 'elements': { 'kFieldTrialConfig': {
diff --git a/tools/variations/fieldtrial_util.py b/tools/variations/fieldtrial_util.py index d03307cd..ac0b9f5 100644 --- a/tools/variations/fieldtrial_util.py +++ b/tools/variations/fieldtrial_util.py
@@ -137,7 +137,11 @@ except (IOError, ValueError): return [] - platform_studies = fieldtrial_to_struct.ConfigToStudies(config, [platform]) + platform_studies = fieldtrial_to_struct.ConfigToStudies( + # For now, assume we never invert. Can add this as an argument if needed. + config, + [platform], + False) if override_args is None: override_args = []
diff --git a/ui/accessibility/ax_event_generator.cc b/ui/accessibility/ax_event_generator.cc index f57aa0b0..da9314d4 100644 --- a/ui/accessibility/ax_event_generator.cc +++ b/ui/accessibility/ax_event_generator.cc
@@ -47,19 +47,6 @@ } } -// If a node toggled its ignored state, don't also fire children-changed because -// platforms likely will do that in response to ignored-changed. -// Suppress name- and description-changed because those can be emitted as a side -// effect of calculating alternative text values for a newly-displayed object. -// Ditto for text attributes such as foreground and background colors. -void RemoveEventsDueToIgnoredChanged( - std::set<AXEventGenerator::EventParams>* node_events) { - RemoveEvent(node_events, AXEventGenerator::Event::CHILDREN_CHANGED); - RemoveEvent(node_events, AXEventGenerator::Event::DESCRIPTION_CHANGED); - RemoveEvent(node_events, AXEventGenerator::Event::NAME_CHANGED); - RemoveEvent(node_events, AXEventGenerator::Event::TEXT_ATTRIBUTE_CHANGED); -} - } // namespace AXEventGenerator::EventParams::EventParams( @@ -678,51 +665,7 @@ data.relative_bounds.bounds.height(); } -void AXEventGenerator::TrimEventsDueToAncestorIgnoredChanged( - AXNode* node, - std::map<AXNode*, bool>& ancestor_ignored_changed_map) { - DCHECK(node); - - // Recursively compute and cache ancestor ignored changed results in - // |ancestor_ignored_changed_map|, if |node|'s ancestors have become ignored - // and the ancestor's ignored changed results have not been cached. - if (node->parent() && - !base::Contains(ancestor_ignored_changed_map, node->parent())) { - TrimEventsDueToAncestorIgnoredChanged(node->parent(), - ancestor_ignored_changed_map); - } - - // If an ancestor of |node| changed to ignored state, update the corresponding - // entry in the map for |node| based on the ancestor result (i.e. if an - // ancestor changed to ignored state, set the entry in the map to true for the - // current node). If |node|'s state changed to ignored as well, we want to - // remove its IGNORED_CHANGED event. - const auto& map_iter = ancestor_ignored_changed_map.find(node->parent()); - const auto& events_iter = tree_events_.find(node); - if (map_iter != ancestor_ignored_changed_map.end() && map_iter->second) { - ancestor_ignored_changed_map.insert(std::make_pair(node, true)); - if (node->IsIgnored() && events_iter != tree_events_.end()) { - RemoveEvent(&(events_iter->second), Event::IGNORED_CHANGED); - RemoveEventsDueToIgnoredChanged(&(events_iter->second)); - } - return; - } - - // If ignored changed results are not cached, calculate the corresponding - // entry for |node| in the map using the ignored states and events of |node|. - if (events_iter != tree_events_.end() && - HasEvent(events_iter->second, Event::IGNORED_CHANGED) && - node->IsIgnored()) { - ancestor_ignored_changed_map.insert(std::make_pair(node, true)); - return; - } - - ancestor_ignored_changed_map.insert(std::make_pair(node, false)); -} - void AXEventGenerator::PostprocessEvents() { - std::map<AXNode*, bool> ancestor_ignored_changed_map; - auto iter = tree_events_.begin(); while (iter != tree_events_.end()) { AXNode* node = iter->first; @@ -735,13 +678,17 @@ RemoveEvent(&node_events, Event::LIVE_REGION_CHANGED); } + // If a node toggled its ignored state, don't also fire children-changed + // because platforms likely will do that in response to ignored-changed. + // Suppress name- and description-changed because those can be emitted + // as a side effect of calculating alternative text values for a newly- + // displayed object. Ditto for text attributes such as foreground and + // background colors. if (HasEvent(node_events, Event::IGNORED_CHANGED)) { - // If a node toggled its ignored state from show to hide, we only want to - // fire IGNORED_CHANGED event on the top most ancestor where this ignored - // state change takes place and suppress all the descendants's - // IGNORED_CHANGED events. - TrimEventsDueToAncestorIgnoredChanged(node, ancestor_ignored_changed_map); - RemoveEventsDueToIgnoredChanged(&node_events); + RemoveEvent(&node_events, Event::CHILDREN_CHANGED); + RemoveEvent(&node_events, Event::DESCRIPTION_CHANGED); + RemoveEvent(&node_events, Event::NAME_CHANGED); + RemoveEvent(&node_events, Event::TEXT_ATTRIBUTE_CHANGED); } // When the selected option in an expanded select element changes, the
diff --git a/ui/accessibility/ax_event_generator.h b/ui/accessibility/ax_event_generator.h index b068624..2755932f 100644 --- a/ui/accessibility/ax_event_generator.h +++ b/ui/accessibility/ax_event_generator.h
@@ -235,18 +235,6 @@ void FireActiveDescendantEvents(); void FireRelationSourceEvents(AXTree* tree, AXNode* target_node); bool ShouldFireLoadEvents(AXNode* node); - // Remove excessive events for a tree update containing node. - // We remove certain events on a node when it changes to IGNORED state and one - // of the node's ancestor has also changed to IGNORED in the same tree update. - // |ancestor_has_ignored_map| contains if a node's ancestor has changed to - // IGNORED state. - // Map's key is: an ax node. - // Map's value is: - // - True if an ancestor of node changed to IGNORED state. - // - False if no ancestor of node changed to IGNORED state. - void TrimEventsDueToAncestorIgnoredChanged( - AXNode* node, - std::map<AXNode*, bool>& ancestor_has_ignored_map); void PostprocessEvents(); static void GetRestrictionStates(ax::mojom::Restriction restriction, bool* is_enabled,
diff --git a/ui/accessibility/ax_event_generator_unittest.cc b/ui/accessibility/ax_event_generator_unittest.cc index 611ce33..3f9eb022f 100644 --- a/ui/accessibility/ax_event_generator_unittest.cc +++ b/ui/accessibility/ax_event_generator_unittest.cc
@@ -1152,459 +1152,6 @@ HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 2))); } -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly1) { - // BEFORE - // 1 (IGN) - // / \ - // 2 3 (IGN) - // AFTER - // 1 (IGN) - // / \ - // 2 (IGN) 3 - // IGNORED_CHANGED expected on #2, #3 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(3); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].AddState(ax::mojom::State::kIgnored); - initial_state.nodes[0].child_ids = {2, 3}; - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kStaticText; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kStaticText; - initial_state.nodes[2].AddState(ax::mojom::State::kIgnored); - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[1].AddState(ax::mojom::State::kIgnored); - update.nodes[2].RemoveState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 2), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 3), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 3))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly2) { - // BEFORE - // 1 - // | - // 2 - // / \ - // 3 4 (IGN) - // AFTER - // 1 - // | - // 2 ___ - // / \ - // 3 (IGN) 4 - // IGNORED_CHANGED expected on #3, #4 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(4); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3, 4}; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kStaticText; - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kStaticText; - initial_state.nodes[3].AddState(ax::mojom::State::kIgnored); - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[2].AddState(ax::mojom::State::kIgnored); - update.nodes[3].RemoveState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::CHILDREN_CHANGED, 2), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 3), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 4), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 4))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly3) { - // BEFORE - // 1 - // | - // 2 ___ - // / \ - // 3 (IGN) 4 - // AFTER - // 1 (IGN) - // | - // 2 - // / \ - // 3 4 (IGN) - // IGNORED_CHANGED expected on #1, #3 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(4); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3, 4}; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kStaticText; - initial_state.nodes[2].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kStaticText; - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[0].AddState(ax::mojom::State::kIgnored); - update.nodes[2].RemoveState(ax::mojom::State::kIgnored); - update.nodes[3].AddState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::CHILDREN_CHANGED, 2), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 1), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 3), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 3))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly4) { - // BEFORE - // 1 (IGN) - // | - // 2 - // | - // 3 (IGN) - // | - // 4 (IGN) - // | - // ____ 5 _____ - // / | \ - // 6 (IGN) 7 (IGN) 8 - // AFTER - // 1 (IGN) - // | - // 2 - // | - // 3 (IGN) - // | - // 4 (IGN) - // | - // ____ 5 _____ - // / | \ - // 6 7 8 (IGN) - - // IGNORED_CHANGED expected on #6, #7, #8 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(8); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3}; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kGroup; - initial_state.nodes[2].child_ids = {4}; - initial_state.nodes[2].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kGroup; - initial_state.nodes[3].child_ids = {5}; - initial_state.nodes[3].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[4].id = 5; - initial_state.nodes[4].role = ax::mojom::Role::kGroup; - initial_state.nodes[4].child_ids = {6, 7, 8}; - - initial_state.nodes[5].id = 6; - initial_state.nodes[5].role = ax::mojom::Role::kStaticText; - initial_state.nodes[5].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[6].id = 7; - initial_state.nodes[6].role = ax::mojom::Role::kStaticText; - initial_state.nodes[6].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[7].id = 8; - initial_state.nodes[7].role = ax::mojom::Role::kStaticText; - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[5].RemoveState(ax::mojom::State::kIgnored); - update.nodes[6].RemoveState(ax::mojom::State::kIgnored); - update.nodes[7].AddState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::CHILDREN_CHANGED, 5), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 6), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 7), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 6), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 7), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 8))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly5) { - // BEFORE - // 1 - // | - // 2 - // | - // 3 (IGN) - // | - // 4 (IGN) - // | - // ____ 5 _____ - // / | \ - // 6 (IGN) 7 8 - // AFTER - // 1 (IGN) - // | - // 2 - // | - // 3 (IGN) - // | - // 4 (IGN) - // | - // ____ 5 _____ - // / | \ - // 6 7 (IGN) 8 (IGN) - - // IGNORED_CHANGED expected on #1, #6 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(8); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3}; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kGroup; - initial_state.nodes[2].child_ids = {4}; - initial_state.nodes[2].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kGroup; - initial_state.nodes[3].child_ids = {5}; - initial_state.nodes[3].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[4].id = 5; - initial_state.nodes[4].role = ax::mojom::Role::kGroup; - initial_state.nodes[4].child_ids = {6, 7, 8}; - - initial_state.nodes[5].id = 6; - initial_state.nodes[5].role = ax::mojom::Role::kStaticText; - initial_state.nodes[5].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[6].id = 7; - initial_state.nodes[6].role = ax::mojom::Role::kStaticText; - - initial_state.nodes[7].id = 8; - initial_state.nodes[7].role = ax::mojom::Role::kStaticText; - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[0].AddState(ax::mojom::State::kIgnored); - update.nodes[5].RemoveState(ax::mojom::State::kIgnored); - update.nodes[6].AddState(ax::mojom::State::kIgnored); - update.nodes[7].AddState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::CHILDREN_CHANGED, 5), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 6), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 1), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 6))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly6) { - // BEFORE - // 1 (IGN) - // | - // 2 - // | - // 3 - // | - // 4 - // | - // ____ 5 _____ - // / | \ - // 6 (IGN) 7 (IGN) 8 - // AFTER - // 1 - // | - // 2 - // | - // 3 - // | - // 4 - // | - // ____ 5 _____ - // / | \ - // 6 7 8 (IGN) - - // IGNORED_CHANGED expected on #1, #6, #7, #8 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(8); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - initial_state.nodes[0].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3}; - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kGroup; - initial_state.nodes[2].child_ids = {4}; - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kGroup; - initial_state.nodes[3].child_ids = {5}; - - initial_state.nodes[4].id = 5; - initial_state.nodes[4].role = ax::mojom::Role::kGroup; - initial_state.nodes[4].child_ids = {6, 7, 8}; - - initial_state.nodes[5].id = 6; - initial_state.nodes[5].role = ax::mojom::Role::kStaticText; - initial_state.nodes[5].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[6].id = 7; - initial_state.nodes[6].role = ax::mojom::Role::kStaticText; - initial_state.nodes[6].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[7].id = 8; - initial_state.nodes[7].role = ax::mojom::Role::kStaticText; - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[0].RemoveState(ax::mojom::State::kIgnored); - update.nodes[5].RemoveState(ax::mojom::State::kIgnored); - update.nodes[6].RemoveState(ax::mojom::State::kIgnored); - update.nodes[7].AddState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::CHILDREN_CHANGED, 5), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 1), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 6), - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 7), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 1), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 6), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 7), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 8))); -} - -TEST(AXEventGeneratorTest, IgnoredChangedFiredOnAncestorOnly7) { - // BEFORE - // 1 (IGN) - // | - // 2 (IGN) - // | - // 3 - // | - // __ 4 ___ - // / \ - // 5 (IGN) 6 (IGN) - // AFTER - // 1 - // | - // 2 - // | - // 3 (IGN) - // | - // __ 4 (IGN) - // / \ - // 5 (IGN) 6 (IGN) - - // IGNORED_CHANGED expected on #1, #2, #3 - - AXTreeUpdate initial_state; - initial_state.root_id = 1; - initial_state.nodes.resize(6); - initial_state.nodes[0].id = 1; - initial_state.nodes[0].role = ax::mojom::Role::kRootWebArea; - initial_state.nodes[0].child_ids = {2}; - initial_state.nodes[0].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[1].id = 2; - initial_state.nodes[1].role = ax::mojom::Role::kGroup; - initial_state.nodes[1].child_ids = {3}; - initial_state.nodes[1].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[2].id = 3; - initial_state.nodes[2].role = ax::mojom::Role::kGroup; - initial_state.nodes[2].child_ids = {4}; - - initial_state.nodes[3].id = 4; - initial_state.nodes[3].role = ax::mojom::Role::kGroup; - initial_state.nodes[3].child_ids = {5, 6}; - - initial_state.nodes[4].id = 5; - initial_state.nodes[4].role = ax::mojom::Role::kStaticText; - initial_state.nodes[4].AddState(ax::mojom::State::kIgnored); - - initial_state.nodes[5].id = 6; - initial_state.nodes[5].role = ax::mojom::Role::kStaticText; - initial_state.nodes[5].AddState(ax::mojom::State::kIgnored); - - AXTree tree(initial_state); - - AXEventGenerator event_generator(&tree); - AXTreeUpdate update = initial_state; - update.nodes[0].RemoveState(ax::mojom::State::kIgnored); - update.nodes[1].RemoveState(ax::mojom::State::kIgnored); - update.nodes[2].AddState(ax::mojom::State::kIgnored); - update.nodes[3].AddState(ax::mojom::State::kIgnored); - ASSERT_TRUE(tree.Unserialize(update)); - EXPECT_THAT(event_generator, - UnorderedElementsAre( - HasEventAtNode(AXEventGenerator::Event::SUBTREE_CREATED, 1), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 1), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 2), - HasEventAtNode(AXEventGenerator::Event::IGNORED_CHANGED, 3))); -} - TEST(AXEventGeneratorTest, ActiveDescendantChangeOnDescendant) { AXTreeUpdate initial_state; initial_state.root_id = 1;
diff --git a/ui/base/idle/screensaver_window_finder_x11.cc b/ui/base/idle/screensaver_window_finder_x11.cc index 45342ff5..1813d9a 100644 --- a/ui/base/idle/screensaver_window_finder_x11.cc +++ b/ui/base/idle/screensaver_window_finder_x11.cc
@@ -4,7 +4,9 @@ #include "ui/base/idle/screensaver_window_finder_x11.h" +#include "base/command_line.h" #include "ui/base/x/x11_util.h" +#include "ui/gfx/switches.h" #include "ui/gfx/x/connection.h" #include "ui/gfx/x/screensaver.h" #include "ui/gfx/x/x11.h" @@ -16,6 +18,10 @@ ScreensaverWindowFinder::ScreensaverWindowFinder() : exists_(false) {} bool ScreensaverWindowFinder::ScreensaverWindowExists() { + // Avoid calling into potentially missing X11 APIs in headless mode. + if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kHeadless)) + return false; + auto* connection = x11::Connection::Get(); // Let the server know the client version before making any requests.
diff --git a/ui/gfx/animation/multi_animation.cc b/ui/gfx/animation/multi_animation.cc index ec00449..faed0ff 100644 --- a/ui/gfx/animation/multi_animation.cc +++ b/ui/gfx/animation/multi_animation.cc
@@ -46,23 +46,27 @@ size_t last_index = current_part_index_; base::TimeDelta delta = time_now - start_time(); - if (delta >= cycle_time_ && !continuous_) { + bool should_stop = delta >= cycle_time_ && !continuous_; + if (should_stop) { current_part_index_ = parts_.size() - 1; current_value_ = Tween::CalculateValue(parts_[current_part_index_].type, 1); - Stop(); - return; + } else { + delta %= cycle_time_; + const Part& part = GetPart(&delta, ¤t_part_index_); + double percent = (delta + part.part_start).InMillisecondsF() / + part.total_length.InMillisecondsF(); + DCHECK_LE(percent, 1); + current_value_ = Tween::CalculateValue(part.type, percent); } - delta %= cycle_time_; - const Part& part = GetPart(&delta, ¤t_part_index_); - double percent = (delta + part.part_start).InMillisecondsF() / - part.total_length.InMillisecondsF(); - DCHECK_LE(percent, 1); - current_value_ = Tween::CalculateValue(part.type, percent); if ((current_value_ != last_value || current_part_index_ != last_index) && delegate()) { + // Run AnimationProgressed() even if the animation will be stopped, so that + // the animation runs its final frame. delegate()->AnimationProgressed(this); } + if (should_stop) + Stop(); } void MultiAnimation::SetStartTime(base::TimeTicks start_time) {
diff --git a/ui/gfx/animation/multi_animation_unittest.cc b/ui/gfx/animation/multi_animation_unittest.cc index 3d4e40d5..ca83305 100644 --- a/ui/gfx/animation/multi_animation_unittest.cc +++ b/ui/gfx/animation/multi_animation_unittest.cc
@@ -6,6 +6,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/gfx/animation/animation_container_element.h" +#include "ui/gfx/animation/animation_delegate.h" namespace gfx { @@ -79,6 +80,40 @@ EXPECT_FALSE(animation.is_animating()); } +class CurrentValueDelegate : public AnimationDelegate { + public: + CurrentValueDelegate() = default; + + double latest_current_value() { return latest_current_value_; } + + // AnimationDelegate overrides: + void AnimationProgressed(const Animation* animation) override { + latest_current_value_ = animation->GetCurrentValue(); + } + + private: + double latest_current_value_ = 0.0; +}; + +// Makes sure multi-animation runs the final frame when exceeding the cycle time +// and not running continuously. +TEST(MultiAnimationTest, ExceedCycleNonContinuous) { + MultiAnimation::Parts parts; + parts.push_back(MultiAnimation::Part(base::TimeDelta::FromMilliseconds(200), + Tween::LINEAR)); + MultiAnimation animation(parts, MultiAnimation::kDefaultTimerInterval); + CurrentValueDelegate delegate; + animation.set_delegate(&delegate); + animation.set_continuous(false); + AnimationContainerElement* as_element = + static_cast<AnimationContainerElement*>(&animation); + as_element->SetStartTime(base::TimeTicks()); + + // Step to 300, which is greater than the cycle time. + as_element->Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(300)); + EXPECT_EQ(1.0, delegate.latest_current_value()); +} + // Makes sure multi-animation cycles correctly. TEST(MultiAnimationTest, Cycle) { MultiAnimation::Parts parts;
diff --git a/ui/gfx/platform_font_mac.mm b/ui/gfx/platform_font_mac.mm index 7ade2d4..6061fb57 100644 --- a/ui/gfx/platform_font_mac.mm +++ b/ui/gfx/platform_font_mac.mm
@@ -93,7 +93,9 @@ // Map CoreText weights in a manner similar to ct_weight_to_fontstyle() from // SkFontHost_mac.cpp, but adjusted for the weights actually used by the // system fonts. See PlatformFontMacTest.FontWeightAPIConsistency for details. - // Use ranges for paranoia. + // The Mac uses specific float values, but to avoid float comparison + // inaccuracies as well as for paranoia in case float values other than these + // appear, use ranges. constexpr struct { // A range of CoreText weights. CGFloat weight_lower; @@ -127,7 +129,7 @@ // .AppleSystemUIFontEmphasized: 0.40 (10.12-) // .AppleSystemUIFontHeavy: 0.56 (10.11-) // .AppleSystemUIFontBlack: 0.62 (10.11-) - {-1000, -0.70, Font::Weight::THIN}, // NSFontWeightUltraLight + {-1.0, -0.70, Font::Weight::THIN}, // NSFontWeightUltraLight {-0.70, -0.45, Font::Weight::EXTRA_LIGHT}, // NSFontWeightThin {-0.45, -0.10, Font::Weight::LIGHT}, // NSFontWeightLight {-0.10, 0.10, Font::Weight::NORMAL}, // NSFontWeightRegular @@ -135,7 +137,7 @@ {0.27, 0.35, Font::Weight::SEMIBOLD}, // NSFontWeightSemibold {0.35, 0.50, Font::Weight::BOLD}, // NSFontWeightBold {0.50, 0.60, Font::Weight::EXTRA_BOLD}, // NSFontWeightHeavy - {0.60, 1000, Font::Weight::BLACK}, // NSFontWeightBlack + {0.60, 1.0, Font::Weight::BLACK}, // NSFontWeightBlack }; base::ScopedCFTypeRef<CFDictionaryRef> traits(
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc index db3250b..3dc9e4d 100644 --- a/ui/gfx/render_text.cc +++ b/ui/gfx/render_text.cc
@@ -1402,6 +1402,7 @@ SelectionModel RenderText::LineSelectionModel(size_t line_index, VisualCursorDirection direction) { DCHECK(direction == CURSOR_LEFT || direction == CURSOR_RIGHT); + DCHECK_LT(line_index, GetShapedText()->lines().size()); const internal::Line& line = GetShapedText()->lines()[line_index]; if (line.segments.empty()) { // Only the last line can be empty.
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc index 5cad380..16b6f859 100644 --- a/ui/gfx/render_text_harfbuzz.cc +++ b/ui/gfx/render_text_harfbuzz.cc
@@ -1514,6 +1514,11 @@ if (caret.caret_pos() == 0) return 0; + if (!multiline()) { + DCHECK_EQ(1u, GetShapedText()->lines().size()); + return 0; + } + size_t layout_position = TextIndexToDisplayIndex(caret.caret_pos()); LogicalCursorDirection affinity = caret.caret_affinity(); const internal::ShapedText* shaped_text = GetShapedText();
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc index c405f94..1db2c6c 100644 --- a/ui/gfx/render_text_unittest.cc +++ b/ui/gfx/render_text_unittest.cc
@@ -2898,6 +2898,22 @@ &expected_range); } +TEST_F(RenderTextTest, MoveCursorWithNewline) { + RenderText* render_text = GetRenderText(); + render_text->SetText(ASCIIToUTF16("a\r\nb")); + render_text->SetMultiline(false); + EXPECT_EQ(1U, render_text->GetNumLines()); + + EXPECT_EQ(SelectionModel(0, CURSOR_BACKWARD), render_text->selection_model()); + render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, SELECTION_NONE); + EXPECT_EQ(SelectionModel(1, CURSOR_BACKWARD), render_text->selection_model()); + render_text->MoveCursor(CHARACTER_BREAK, CURSOR_RIGHT, SELECTION_NONE); + EXPECT_EQ(SelectionModel(3, CURSOR_BACKWARD), render_text->selection_model()); + + render_text->MoveCursor(LINE_BREAK, CURSOR_RIGHT, SELECTION_NONE); + EXPECT_EQ(SelectionModel(4, CURSOR_FORWARD), render_text->selection_model()); +} + TEST_F(RenderTextTest, GetTextDirectionInvalidation) { RenderText* render_text = GetRenderText(); ASSERT_EQ(render_text->directionality_mode(), DIRECTIONALITY_FROM_TEXT); @@ -4539,6 +4555,49 @@ render_text->GetLineSizeF(SelectionModel(10, CURSOR_FORWARD)).width()); } +TEST_F(RenderTextTest, TextPosition) { + // Set a fractional glyph size to trigger floating rounding logic. + // This test sets a fixed fractional width and height for glyphs to ensure + // that computations are fixed (i.e. not font or system dependent). + const float kGlyphWidth = 5.4; + const float kGlyphHeight = 9.2; + SetGlyphWidth(kGlyphWidth); + SetGlyphHeight(kGlyphHeight); + + const int kGlyphCount = 3; + + RenderText* render_text = GetRenderText(); + render_text->SetText(ASCIIToUTF16(std::string(kGlyphCount, 'x'))); + render_text->SetDisplayRect(Rect(1, 1, 25, 12)); + render_text->SetCursorEnabled(false); + render_text->SetVerticalAlignment(ALIGN_TOP); + + // Content width is 16.2px. Extra space inside display rect is 8.8px + // (i.e. 25px - 16.2px) which is used for alignment. + const float expected_content_width = kGlyphCount * kGlyphWidth; + EXPECT_FLOAT_EQ(expected_content_width, render_text->GetContentWidthF()); + EXPECT_FLOAT_EQ(expected_content_width, render_text->TotalLineWidth()); + + render_text->SetHorizontalAlignment(ALIGN_LEFT); + EXPECT_EQ(1, render_text->GetLineOffset(0).x()); + + EXPECT_EQ(Rect(1, 1, 6, 10), GetSubstringBoundsUnion(Range(0, 1))); + EXPECT_EQ(Rect(6, 1, 6, 10), GetSubstringBoundsUnion(Range(1, 2))); + EXPECT_EQ(Rect(11, 1, 7, 10), GetSubstringBoundsUnion(Range(2, 3))); + + render_text->SetHorizontalAlignment(ALIGN_CENTER); + EXPECT_EQ(5, render_text->GetLineOffset(0).x()); + EXPECT_EQ(Rect(5, 1, 6, 10), GetSubstringBoundsUnion(Range(0, 1))); + EXPECT_EQ(Rect(10, 1, 6, 10), GetSubstringBoundsUnion(Range(1, 2))); + EXPECT_EQ(Rect(15, 1, 7, 10), GetSubstringBoundsUnion(Range(2, 3))); + + render_text->SetHorizontalAlignment(ALIGN_RIGHT); + EXPECT_EQ(9, render_text->GetLineOffset(0).x()); + EXPECT_EQ(Rect(9, 1, 6, 10), GetSubstringBoundsUnion(Range(0, 1))); + EXPECT_EQ(Rect(14, 1, 6, 10), GetSubstringBoundsUnion(Range(1, 2))); + EXPECT_EQ(Rect(19, 1, 7, 10), GetSubstringBoundsUnion(Range(2, 3))); +} + TEST_F(RenderTextTest, SetFontList) { RenderText* render_text = GetRenderText(); render_text->SetFontList(
diff --git a/ui/gl/angle_platform_impl.cc b/ui/gl/angle_platform_impl.cc index eea151e4..980a7ba9 100644 --- a/ui/gl/angle_platform_impl.cc +++ b/ui/gl/angle_platform_impl.cc
@@ -124,17 +124,17 @@ } NO_SANITIZE("cfi-icall") +void AnglePlatformImpl_runWorkerTask(PostWorkerTaskCallback callback, void* user_data) { + TRACE_EVENT0("toplevel", "ANGLEPlatformImpl::RunWorkerTask"); + callback(user_data); +} + void ANGLEPlatformImpl_postWorkerTask(PlatformMethods* platform, PostWorkerTaskCallback callback, void* user_data) { base::ThreadPool::PostTask( FROM_HERE, {base::TaskPriority::USER_VISIBLE}, - base::BindOnce( - [](PostWorkerTaskCallback callback, void* user_data) { - TRACE_EVENT0("toplevel", "ANGLEPlatformImpl::RunWorkerTask"); - callback(user_data); - }, - callback, user_data)); + base::BindOnce(&AnglePlatformImpl_runWorkerTask, callback, user_data)); } } // anonymous namespace
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h index b46f193..45692ab8 100644 --- a/ui/views/controls/button/label_button.h +++ b/ui/views/controls/button/label_button.h
@@ -36,9 +36,9 @@ // Creates a LabelButton with ButtonPressed() events sent to |listener| and // label |text|. |button_context| is a value from views::style::TextContext // and determines the appearance of |text|. - LabelButton(ButtonListener* listener, - const base::string16& text, - int button_context = style::CONTEXT_BUTTON); + explicit LabelButton(ButtonListener* listener = nullptr, + const base::string16& text = base::string16(), + int button_context = style::CONTEXT_BUTTON); ~LabelButton() override; // Gets or sets the image shown for the specified button state.
diff --git a/ui/views/controls/button/label_button_unittest.cc b/ui/views/controls/button/label_button_unittest.cc index 2e55d0a..5570113 100644 --- a/ui/views/controls/button/label_button_unittest.cc +++ b/ui/views/controls/button/label_button_unittest.cc
@@ -100,8 +100,8 @@ // The test code below is not prepared to handle dark mode. test_widget_->GetNativeTheme()->set_use_dark_colors(false); - button_ = new TestLabelButton; - test_widget_->GetContentsView()->AddChildView(button_); + button_ = test_widget_->GetContentsView()->AddChildView( + std::make_unique<TestLabelButton>()); // Establish the expected text colors for testing changes due to state. themed_normal_text_color_ = button_->GetNativeTheme()->GetSystemColor(
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc index e44796e..fae047b2 100644 --- a/ui/views/controls/menu/menu_controller_unittest.cc +++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -2479,14 +2479,14 @@ container_view->AddChildView(new Label()); // Add two focusable buttons (buttons in menus are always focusable). - Button* const button1 = new LabelButton(nullptr, base::string16()); + Button* const button1 = + container_view->AddChildView(std::make_unique<LabelButton>()); button1->SetFocusBehavior(View::FocusBehavior::ALWAYS); button1->GetViewAccessibility().OverrideRole(ax::mojom::Role::kMenuItem); - container_view->AddChildView(button1); - Button* const button2 = new LabelButton(nullptr, base::string16()); + Button* const button2 = + container_view->AddChildView(std::make_unique<LabelButton>()); button2->GetViewAccessibility().OverrideRole(ax::mojom::Role::kMenuItem); button2->SetFocusBehavior(View::FocusBehavior::ALWAYS); - container_view->AddChildView(button2); OpenMenu(menu_item());
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc index 23b869e..c3f1d6b 100644 --- a/ui/views/controls/menu/menu_item_view.cc +++ b/ui/views/controls/menu/menu_item_view.cc
@@ -68,12 +68,23 @@ static_assert(kNewBadgeCornerRadius <= kNewBadgeInternalPadding.left(), "New badge corner radius should not exceed padding."); +// Returns the appropriate font to use for the "new" badge based on the font +// currently being used to render the title of the menu item. +gfx::FontList DeriveNewBadgeFont(const gfx::FontList& primary_font) { + // Preferred font is slightly smaller and slightly more bold than the title + // font. The size change is required to make it look correct in the badge; we + // add a small degree of bold to prevent color smearing/blurring due to font + // smoothing. This ensures readability on all platforms and in both light and + // dark modes. + return primary_font.DeriveWithSizeDelta(kNewBadgeFontSizeAdjustment) + .DeriveWithWeight(gfx::Font::Weight::MEDIUM); +} + // Returns the horizontal space required for the "new" badge. int GetNewBadgeRequiredWidth(const gfx::FontList& primary_font) { const base::string16 new_text = l10n_util::GetStringUTF16(IDS_MENU_ITEM_NEW_BADGE); - gfx::FontList badge_font = - primary_font.DeriveWithSizeDelta(kNewBadgeFontSizeAdjustment); + gfx::FontList badge_font = DeriveNewBadgeFont(primary_font); return gfx::GetStringWidth(new_text, badge_font) + kNewBadgeInternalPadding.width() + 2 * kNewBadgeHorizontalMargin; } @@ -1337,8 +1348,7 @@ const gfx::Point& unmirrored_badge_start, const gfx::FontList& primary_font, int text_render_flags) { - gfx::FontList badge_font = - primary_font.DeriveWithSizeDelta(kNewBadgeFontSizeAdjustment); + gfx::FontList badge_font = DeriveNewBadgeFont(primary_font); const base::string16 new_text = l10n_util::GetStringUTF16(IDS_MENU_ITEM_NEW_BADGE);
diff --git a/ui/views/controls/menu/menu_runner_unittest.cc b/ui/views/controls/menu/menu_runner_unittest.cc index fac1041..9c8e634 100644 --- a/ui/views/controls/menu/menu_runner_unittest.cc +++ b/ui/views/controls/menu/menu_runner_unittest.cc
@@ -595,11 +595,12 @@ new internal::MenuRunnerImpl(menu_item_view()); // Create test button that has focus. + auto button_managed = std::make_unique<LabelButton>(); + button_managed->SetID(1); + button_managed->SetSize(gfx::Size(20, 20)); LabelButton* button = - new LabelButton(nullptr, base::string16(), style::CONTEXT_BUTTON); - button->SetID(1); - button->SetSize(gfx::Size(20, 20)); - owner()->GetRootView()->AddChildView(button); + owner()->GetRootView()->AddChildView(std::move(button_managed)); + button->SetFocusBehavior(View::FocusBehavior::ALWAYS); button->GetWidget()->widget_delegate()->SetCanActivate(true); button->GetWidget()->Activate();
diff --git a/ui/views/widget/ax_native_widget_mac_unittest.mm b/ui/views/widget/ax_native_widget_mac_unittest.mm index ca75750..865341f7 100644 --- a/ui/views/widget/ax_native_widget_mac_unittest.mm +++ b/ui/views/widget/ax_native_widget_mac_unittest.mm
@@ -81,7 +81,7 @@ class TestLabelButton : public LabelButton { public: - TestLabelButton() : LabelButton(nullptr, base::string16()) { + TestLabelButton() { // Make sure the label doesn't cover the hit test co-ordinates. label()->SetSize(gfx::Size(1, 1)); }
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm index 9a6b9ac6..948034f 100644 --- a/ui/views/widget/native_widget_mac_unittest.mm +++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -948,9 +948,9 @@ const base::string16 long_tooltip(2000, 'W'); // Create a nested layout to test corner cases. - LabelButton* back = new LabelButton(nullptr, base::string16()); + LabelButton* back = + widget->GetContentsView()->AddChildView(std::make_unique<LabelButton>()); back->SetBounds(10, 10, 80, 80); - widget->GetContentsView()->AddChildView(back); widget->Show(); ui::test::EventGenerator event_generator(GetContext(), @@ -962,9 +962,9 @@ // Create a new button for the "front", and set the tooltip, but don't add it // to the view hierarchy yet. - LabelButton* front = new LabelButton(nullptr, base::string16()); - front->SetBounds(20, 20, 40, 40); - front->SetTooltipText(tooltip_front); + auto front_managed = std::make_unique<LabelButton>(); + front_managed->SetBounds(20, 20, 40, 40); + front_managed->SetTooltipText(tooltip_front); // Changing the tooltip text shouldn't require an additional mousemove to take // effect. @@ -973,7 +973,7 @@ EXPECT_EQ(tooltip_back, TooltipTextForWidget(widget)); // Adding a new view under the mouse should also take immediate effect. - back->AddChildView(front); + LabelButton* front = back->AddChildView(std::move(front_managed)); EXPECT_EQ(tooltip_front, TooltipTextForWidget(widget)); // A long tooltip will be wrapped by Cocoa, but the full string should appear.
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn index fc6feb6..f2a7cb0 100644 --- a/weblayer/BUILD.gn +++ b/weblayer/BUILD.gn
@@ -171,6 +171,17 @@ "browser/download_impl.h", "browser/download_manager_delegate_impl.cc", "browser/download_manager_delegate_impl.h", + "browser/favicon/favicon_backend_wrapper.cc", + "browser/favicon/favicon_backend_wrapper.h", + "browser/favicon/favicon_fetcher_impl.cc", + "browser/favicon/favicon_fetcher_impl.h", + "browser/favicon/favicon_service_impl.cc", + "browser/favicon/favicon_service_impl.h", + "browser/favicon/favicon_service_impl_factory.cc", + "browser/favicon/favicon_service_impl_factory.h", + "browser/favicon/favicon_service_impl_observer.h", + "browser/favicon/favicon_tab_helper.cc", + "browser/favicon/favicon_tab_helper.h", "browser/feature_list_creator.cc", "browser/feature_list_creator.h", "browser/file_select_helper.cc", @@ -280,6 +291,8 @@ "public/download_delegate.h", "public/error_page.h", "public/error_page_delegate.h", + "public/favicon_fetcher.h", + "public/favicon_fetcher_delegate.h", "public/fullscreen_delegate.h", "public/google_accounts_delegate.h", "public/js_communication/web_message.cc", @@ -344,6 +357,10 @@ "//components/embedder_support/origin_trials", "//components/error_page/common", "//components/error_page/content/browser", + "//components/favicon/content", + "//components/favicon/core", + "//components/favicon/core:database", + "//components/favicon_base", "//components/find_in_page", "//components/infobars/core", "//components/js_injection/browser",
diff --git a/weblayer/browser/DEPS b/weblayer/browser/DEPS index 5e658b8..3c43f80 100644 --- a/weblayer/browser/DEPS +++ b/weblayer/browser/DEPS
@@ -19,6 +19,8 @@ "+components/download/public/common", "+components/embedder_support", "+components/error_page/content/browser", + "+components/favicon_base", + "+components/favicon", "+components/find_in_page", "+components/infobars/android", "+components/infobars/content", @@ -75,6 +77,7 @@ "+storage/browser/quota", "+third_party/blink/public/common", "+third_party/blink/public/mojom", + "+third_party/skia", "+ui/aura", "+ui/android", "+ui/base",
diff --git a/weblayer/browser/favicon/favicon_backend_wrapper.cc b/weblayer/browser/favicon/favicon_backend_wrapper.cc new file mode 100644 index 0000000..3eebc8b --- /dev/null +++ b/weblayer/browser/favicon/favicon_backend_wrapper.cc
@@ -0,0 +1,141 @@ +// 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 "weblayer/browser/favicon/favicon_backend_wrapper.h" + +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/logging.h" +#include "base/sequenced_task_runner.h" +#include "components/favicon/core/favicon_backend.h" +#include "components/favicon/core/favicon_database.h" + +namespace weblayer { + +FaviconBackendWrapper::FaviconBackendWrapper( + scoped_refptr<base::SequencedTaskRunner> task_runner) + : base::RefCountedDeleteOnSequence<FaviconBackendWrapper>(task_runner), + task_runner_(task_runner) {} + +void FaviconBackendWrapper::Init(const base::FilePath& db_path) { + favicon_backend_ = favicon::FaviconBackend::Create(db_path, this); + if (!favicon_backend_) { + LOG(WARNING) << "Could not initialize the favicon database."; + + // The favicon db is not critical. On failure initializing try deleting + // the file and repeating. Note that FaviconDatabase already tries to + // initialize twice. + base::DeleteFile(db_path); + + favicon_backend_ = favicon::FaviconBackend::Create(db_path, this); + if (!favicon_backend_) { + LOG(WARNING) << "Could not initialize db second time, giving up."; + return; + } + } +} + +void FaviconBackendWrapper::Shutdown() { + // Ensures there isn't a reference to this in the task runner (by way of the + // task the timer posts). + commit_timer_.Stop(); +} + +std::vector<favicon_base::FaviconRawBitmapResult> +FaviconBackendWrapper::GetFaviconsForUrl( + const GURL& page_url, + const favicon_base::IconTypeSet& icon_types, + const std::vector<int>& desired_sizes) { + if (!favicon_backend_) + return {}; + return favicon_backend_->GetFaviconsForUrl(page_url, icon_types, + desired_sizes, + /* fallback_to_host */ false); +} + +void FaviconBackendWrapper::SetFaviconsOutOfDateForPage(const GURL& page_url) { + if (favicon_backend_) + favicon_backend_->SetFaviconsOutOfDateForPage(page_url); +} + +void FaviconBackendWrapper::SetFavicons(const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type, + const GURL& icon_url, + const std::vector<SkBitmap>& bitmaps) { + if (favicon_backend_) { + favicon_backend_->SetFavicons(page_urls, icon_type, icon_url, bitmaps, + favicon::FaviconBitmapType::ON_VISIT); + } +} + +void FaviconBackendWrapper::CloneFaviconMappingsForPages( + const GURL& page_url_to_read, + const favicon_base::IconTypeSet& icon_types, + const base::flat_set<GURL>& page_urls_to_write) { + if (!favicon_backend_) + return; + + std::set<GURL> changed_urls = favicon_backend_->CloneFaviconMappingsForPages( + {page_url_to_read}, icon_types, page_urls_to_write); + if (!changed_urls.empty()) + ScheduleCommitForFavicons(); +} + +std::vector<favicon_base::FaviconRawBitmapResult> +FaviconBackendWrapper::GetFavicon(const GURL& icon_url, + favicon_base::IconType icon_type, + const std::vector<int>& desired_sizes) { + return UpdateFaviconMappingsAndFetch({}, icon_url, icon_type, desired_sizes); +} + +std::vector<favicon_base::FaviconRawBitmapResult> +FaviconBackendWrapper::UpdateFaviconMappingsAndFetch( + const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + const std::vector<int>& desired_sizes) { + if (!favicon_backend_) + return {}; + return favicon_backend_->UpdateFaviconMappingsAndFetch( + page_urls, icon_url, icon_type, desired_sizes); +} + +void FaviconBackendWrapper::DeleteFaviconMappings( + const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type) { + if (!favicon_backend_) + favicon_backend_->DeleteFaviconMappings(page_urls, icon_type); +} + +void FaviconBackendWrapper::ScheduleCommitForFavicons() { + if (!commit_timer_.IsRunning()) { + // 10 seconds matches that of HistoryBackend. + commit_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(10), this, + &FaviconBackendWrapper::Commit); + } +} + +std::vector<GURL> FaviconBackendWrapper::GetCachedRecentRedirectsForPage( + const GURL& page_url) { + // By only returning |page_url| this code won't set the favicon on redirects. + // If that becomes necessary, we would need this class to know about + // redirects. Chrome does this by way of HistoryService remembering redirects + // for recent pages. See |HistoryBackend::recent_redirects_|. + return {page_url}; +} + +void FaviconBackendWrapper::OnFaviconChangedForPageAndRedirects( + const GURL& page_url) { + // Nothing to do here as WebLayer doesn't notify of favicon changes through + // this code path. +} + +FaviconBackendWrapper::~FaviconBackendWrapper() = default; + +void FaviconBackendWrapper::Commit() { + if (favicon_backend_) + favicon_backend_->Commit(); +} + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_backend_wrapper.h b/weblayer/browser/favicon/favicon_backend_wrapper.h new file mode 100644 index 0000000..44e50e9 --- /dev/null +++ b/weblayer/browser/favicon/favicon_backend_wrapper.h
@@ -0,0 +1,99 @@ +// 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 WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_ + +#include <memory> +#include <vector> + +#include "base/memory/ref_counted.h" +#include "base/memory/ref_counted_delete_on_sequence.h" +#include "base/timer/timer.h" +#include "components/favicon/core/favicon_backend_delegate.h" +#include "components/favicon_base/favicon_types.h" + +class GURL; + +namespace base { +class FilePath; +class SequencedTaskRunner; +} // namespace base + +namespace favicon { +class FaviconBackend; +} + +namespace weblayer { + +// FaviconBackendWrapper runs on a background task-runner and owns the database +// side of favicons. This class largely delegates to favicon::FaviconBackend +// and has very little logic. +class FaviconBackendWrapper + : public base::RefCountedDeleteOnSequence<FaviconBackendWrapper>, + public favicon::FaviconBackendDelegate { + public: + explicit FaviconBackendWrapper( + scoped_refptr<base::SequencedTaskRunner> task_runner); + FaviconBackendWrapper(const FaviconBackendWrapper&) = delete; + FaviconBackendWrapper& operator=(const FaviconBackendWrapper&) = delete; + + void Init(const base::FilePath& db_path); + + void Shutdown(); + + // All of these functions are called by the FaviconServiceImpl. They call + // through to |favicon_backend_|. + std::vector<favicon_base::FaviconRawBitmapResult> GetFaviconsForUrl( + const GURL& page_url, + const favicon_base::IconTypeSet& icon_types, + const std::vector<int>& desired_sizes); + void SetFaviconsOutOfDateForPage(const GURL& page_url); + void SetFavicons(const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type, + const GURL& icon_url, + const std::vector<SkBitmap>& bitmaps); + void CloneFaviconMappingsForPages( + const GURL& page_url_to_read, + const favicon_base::IconTypeSet& icon_types, + const base::flat_set<GURL>& page_urls_to_write); + std::vector<favicon_base::FaviconRawBitmapResult> GetFavicon( + const GURL& icon_url, + favicon_base::IconType icon_type, + const std::vector<int>& desired_sizes); + std::vector<favicon_base::FaviconRawBitmapResult> + UpdateFaviconMappingsAndFetch(const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + const std::vector<int>& desired_sizes); + void DeleteFaviconMappings(const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type); + + // favicon::FaviconBackendDelegate: + void ScheduleCommitForFavicons() override; + std::vector<GURL> GetCachedRecentRedirectsForPage( + const GURL& page_url) override; + void OnFaviconChangedForPageAndRedirects(const GURL& page_url) override; + + private: + friend class base::RefCountedDeleteOnSequence<FaviconBackendWrapper>; + friend class base::DeleteHelper<FaviconBackendWrapper>; + ~FaviconBackendWrapper() override; + + void Commit(); + + scoped_refptr<base::SequencedTaskRunner> task_runner_; + + // Timer used to delay commits for a short amount of time. This done to + // batch commits. + base::OneShotTimer commit_timer_; + + // The real implementation of the backend. Is there is a problem initializing + // the database this will be null. + std::unique_ptr<favicon::FaviconBackend> favicon_backend_; +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_BACKEND_WRAPPER_H_
diff --git a/weblayer/browser/favicon/favicon_fetcher_browsertest.cc b/weblayer/browser/favicon/favicon_fetcher_browsertest.cc new file mode 100644 index 0000000..ee7a0aa --- /dev/null +++ b/weblayer/browser/favicon/favicon_fetcher_browsertest.cc
@@ -0,0 +1,169 @@ +// 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 "weblayer/browser/favicon/favicon_fetcher_impl.h" + +#include "base/run_loop.h" +#include "components/favicon/content/content_favicon_driver.h" +#include "ui/gfx/image/image.h" +#include "weblayer/browser/favicon/favicon_fetcher_impl.h" +#include "weblayer/browser/favicon/favicon_service_impl.h" +#include "weblayer/browser/favicon/favicon_service_impl_factory.h" +#include "weblayer/browser/favicon/favicon_service_impl_observer.h" +#include "weblayer/browser/tab_impl.h" +#include "weblayer/public/favicon_fetcher_delegate.h" +#include "weblayer/public/navigation_controller.h" +#include "weblayer/shell/browser/shell.h" +#include "weblayer/test/test_navigation_observer.h" +#include "weblayer/test/weblayer_browser_test.h" +#include "weblayer/test/weblayer_browser_test_utils.h" + +namespace weblayer { +namespace { + +// Records calls to OnFaviconChanged(). +class FaviconFetcherDelegateImpl : public FaviconFetcherDelegate { + public: + void WaitForFavicon() { + ASSERT_EQ(nullptr, run_loop_.get()); + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + run_loop_.reset(); + } + + void ClearLastImage() { + last_image_ = gfx::Image(); + on_favicon_changed_call_count_ = 0; + } + + const gfx::Image& last_image() const { return last_image_; } + int on_favicon_changed_call_count() const { + return on_favicon_changed_call_count_; + } + + // FaviconFetcherDelegate: + void OnFaviconChanged(const gfx::Image& image) override { + last_image_ = image; + ++on_favicon_changed_call_count_; + if (run_loop_) + run_loop_->Quit(); + } + + private: + std::unique_ptr<base::RunLoop> run_loop_; + gfx::Image last_image_; + int on_favicon_changed_call_count_ = 0; +}; + +// FaviconServiceImplObserver used to wait for download to fail. +class TestFaviconServiceImplObserver : public FaviconServiceImplObserver { + public: + void Wait() { + ASSERT_EQ(nullptr, run_loop_.get()); + run_loop_ = std::make_unique<base::RunLoop>(); + run_loop_->Run(); + run_loop_.reset(); + } + + // FaviconServiceImplObserver: + void OnUnableToDownloadFavicon() override { + if (run_loop_) + run_loop_->Quit(); + } + + private: + std::unique_ptr<base::RunLoop> run_loop_; +}; + +} // namespace + +using FaviconFetcherBrowserTest = WebLayerBrowserTest; + +IN_PROC_BROWSER_TEST_F(FaviconFetcherBrowserTest, Basic) { + ASSERT_TRUE(embedded_test_server()->Start()); + FaviconFetcherDelegateImpl fetcher_delegate; + auto fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); + NavigateAndWaitForCompletion( + embedded_test_server()->GetURL("/simple_page_with_favicon.html"), + shell()); + fetcher_delegate.WaitForFavicon(); + EXPECT_FALSE(fetcher_delegate.last_image().IsEmpty()); + EXPECT_EQ(fetcher_delegate.last_image(), fetcher->GetFavicon()); + EXPECT_EQ(1, fetcher_delegate.on_favicon_changed_call_count()); + fetcher_delegate.ClearLastImage(); + + const GURL url2 = + embedded_test_server()->GetURL("/simple_page_with_favicon2.html"); + shell()->tab()->GetNavigationController()->Navigate(url2); + // Favicon doesn't change immediately on navigation. + EXPECT_FALSE(fetcher->GetFavicon().IsEmpty()); + // Favicon does change once start is received. + TestNavigationObserver test_observer( + url2, TestNavigationObserver::NavigationEvent::kStart, shell()); + test_observer.Wait(); + EXPECT_TRUE(fetcher_delegate.last_image().IsEmpty()); + + // Wait for new favicon. + fetcher_delegate.WaitForFavicon(); + EXPECT_FALSE(fetcher_delegate.last_image().IsEmpty()); + EXPECT_EQ(fetcher_delegate.last_image(), fetcher->GetFavicon()); + EXPECT_EQ(1, fetcher_delegate.on_favicon_changed_call_count()); +} + +IN_PROC_BROWSER_TEST_F(FaviconFetcherBrowserTest, NavigateToPageWithNoFavicon) { + ASSERT_TRUE(embedded_test_server()->Start()); + FaviconFetcherDelegateImpl fetcher_delegate; + auto fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); + NavigateAndWaitForCompletion( + embedded_test_server()->GetURL("/simple_page_with_favicon.html"), + shell()); + fetcher_delegate.WaitForFavicon(); + fetcher_delegate.ClearLastImage(); + + TestFaviconServiceImplObserver test_observer; + FaviconServiceImplFactory::GetForProfile( + static_cast<TabImpl*>(shell()->tab())->profile()) + ->set_observer(&test_observer); + + const GURL url2 = embedded_test_server()->GetURL("/simple_page.html"); + shell()->tab()->GetNavigationController()->Navigate(url2); + EXPECT_TRUE(fetcher_delegate.last_image().IsEmpty()); + // Wait for the image load to fail. + test_observer.Wait(); + EXPECT_TRUE(fetcher_delegate.last_image().IsEmpty()); + EXPECT_EQ(0, fetcher_delegate.on_favicon_changed_call_count()); +} + +IN_PROC_BROWSER_TEST_F(FaviconFetcherBrowserTest, + ContentFaviconDriverLifetime) { + ASSERT_TRUE(embedded_test_server()->Start()); + content::WebContents* web_contents = + static_cast<TabImpl*>(shell()->tab())->web_contents(); + + // Initially there should be no driver (because favicons haven't been + // requested). + EXPECT_EQ(nullptr, + favicon::ContentFaviconDriver::FromWebContents(web_contents)); + + // Request a fetcher, which should trigger creating ContentFaviconDriver. + FaviconFetcherDelegateImpl fetcher_delegate; + auto fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); + EXPECT_NE(nullptr, + favicon::ContentFaviconDriver::FromWebContents(web_contents)); + + // Destroy the fetcher, which should destroy ContentFaviconDriver. + fetcher.reset(); + EXPECT_EQ(nullptr, + favicon::ContentFaviconDriver::FromWebContents(web_contents)); + + // One more time, and this time navigate. + fetcher = shell()->tab()->CreateFaviconFetcher(&fetcher_delegate); + NavigateAndWaitForCompletion( + embedded_test_server()->GetURL("/simple_page_with_favicon.html"), + shell()); + fetcher_delegate.WaitForFavicon(); + EXPECT_FALSE(fetcher_delegate.last_image().IsEmpty()); +} + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_fetcher_impl.cc b/weblayer/browser/favicon/favicon_fetcher_impl.cc new file mode 100644 index 0000000..d333ff2 --- /dev/null +++ b/weblayer/browser/favicon/favicon_fetcher_impl.cc
@@ -0,0 +1,27 @@ +// 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 "weblayer/browser/favicon/favicon_fetcher_impl.h" + +#include "ui/gfx/image/image.h" +#include "weblayer/browser/favicon/favicon_tab_helper.h" +#include "weblayer/public/favicon_fetcher_delegate.h" + +#include "base/logging.h" + +namespace weblayer { + +FaviconFetcherImpl::FaviconFetcherImpl(content::WebContents* web_contents, + FaviconFetcherDelegate* delegate) + : web_contents_(web_contents), + observer_subscription_(FaviconTabHelper::FromWebContents(web_contents) + ->RegisterFaviconFetcherDelegate(delegate)) {} + +FaviconFetcherImpl::~FaviconFetcherImpl() = default; + +gfx::Image FaviconFetcherImpl::GetFavicon() { + return FaviconTabHelper::FromWebContents(web_contents_)->favicon(); +} + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_fetcher_impl.h b/weblayer/browser/favicon/favicon_fetcher_impl.h new file mode 100644 index 0000000..3a68e377 --- /dev/null +++ b/weblayer/browser/favicon/favicon_fetcher_impl.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 WEBLAYER_BROWSER_FAVICON_FAVICON_FETCHER_IMPL_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_FETCHER_IMPL_H_ + +#include <memory> + +#include "weblayer/browser/favicon/favicon_tab_helper.h" +#include "weblayer/public/favicon_fetcher.h" + +namespace content { +class WebContents; +} + +namespace weblayer { + +class FaviconFetcherDelegate; + +// FaviconFetcher implementation that largely delegates to FaviconTabHelper +// for the real implementation. +class FaviconFetcherImpl : public FaviconFetcher { + public: + FaviconFetcherImpl(content::WebContents* web_contents, + FaviconFetcherDelegate* delegate); + FaviconFetcherImpl(const FaviconFetcherImpl&) = delete; + FaviconFetcherImpl& operator=(const FaviconFetcherImpl&) = delete; + ~FaviconFetcherImpl() override; + + // FaviconFetcher: + gfx::Image GetFavicon() override; + + private: + content::WebContents* web_contents_; + std::unique_ptr<FaviconTabHelper::ObserverSubscription> + observer_subscription_; +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_FETCHER_IMPL_H_
diff --git a/weblayer/browser/favicon/favicon_service_impl.cc b/weblayer/browser/favicon/favicon_service_impl.cc new file mode 100644 index 0000000..c0dc9aa --- /dev/null +++ b/weblayer/browser/favicon/favicon_service_impl.cc
@@ -0,0 +1,185 @@ +// 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 "weblayer/browser/favicon/favicon_service_impl.h" + +#include <stddef.h> + +#include <vector> + +#include "base/bind.h" +#include "base/files/file_path.h" +#include "base/hash/hash.h" +#include "base/task/task_traits.h" +#include "base/task/thread_pool.h" +#include "components/favicon_base/favicon_util.h" +#include "components/favicon_base/select_favicon_frames.h" +#include "content/public/common/url_constants.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "url/gurl.h" +#include "weblayer/browser/favicon/favicon_backend_wrapper.h" +#include "weblayer/browser/favicon/favicon_service_impl_observer.h" + +namespace weblayer { +namespace { + +bool CanAddUrl(const GURL& url) { + if (!url.is_valid()) + return false; + + if (url.SchemeIs(url::kJavaScriptScheme) || url.SchemeIs(url::kAboutScheme) || + url.SchemeIs(url::kContentScheme) || + url.SchemeIs(content::kChromeDevToolsScheme) || + url.SchemeIs(content::kChromeUIScheme) || + url.SchemeIs(content::kViewSourceScheme)) { + return false; + } + + return true; +} + +} // namespace + +FaviconServiceImpl::FaviconServiceImpl() = default; + +FaviconServiceImpl::~FaviconServiceImpl() { + backend_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::Shutdown, std::move(backend_))); +} + +void FaviconServiceImpl::Init(const base::FilePath& db_path) { + if (!backend_task_runner_) { + // BLOCK_SHUTDOWN matches that of HistoryService. It's done in hopes of + // preventing database corruption. + backend_task_runner_ = base::ThreadPool::CreateSequencedTaskRunner( + {base::MayBlock(), base::WithBaseSyncPrimitives(), + base::TaskPriority::USER_BLOCKING, + base::TaskShutdownBehavior::BLOCK_SHUTDOWN}); + } + + backend_ = base::MakeRefCounted<FaviconBackendWrapper>(backend_task_runner_); + + backend_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::Init, backend_, db_path)); +} + +base::CancelableTaskTracker::TaskId FaviconServiceImpl::GetFaviconForPageURL( + const GURL& page_url, + const favicon_base::IconTypeSet& icon_types, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return tracker->PostTaskAndReplyWithResult( + backend_task_runner_.get(), FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::GetFaviconsForUrl, backend_, + page_url, icon_types, + GetPixelSizesForFaviconScales(desired_size_in_dip)), + std::move(callback)); +} + +void FaviconServiceImpl::SetFaviconOutOfDateForPage(const GURL& page_url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + backend_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::SetFaviconsOutOfDateForPage, + backend_, page_url)); +} + +void FaviconServiceImpl::SetFavicons(const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + const gfx::Image& image) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + base::flat_set<GURL> page_urls_to_save; + page_urls_to_save.reserve(page_urls.capacity()); + for (const GURL& page_url : page_urls) { + if (CanAddUrl(page_url)) + page_urls_to_save.insert(page_url); + } + + if (page_urls_to_save.empty()) + return; + + backend_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&FaviconBackendWrapper::SetFavicons, backend_, + page_urls_to_save, icon_type, icon_url, + ExtractSkBitmapsToStore(image))); +} + +void FaviconServiceImpl::CloneFaviconMappingsForPages( + const GURL& page_url_to_read, + const favicon_base::IconTypeSet& icon_types, + const base::flat_set<GURL>& page_urls_to_write) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + backend_task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::CloneFaviconMappingsForPages, + backend_, page_url_to_read, icon_types, + page_urls_to_write)); +} + +base::CancelableTaskTracker::TaskId FaviconServiceImpl::GetFavicon( + const GURL& icon_url, + favicon_base::IconType icon_type, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return tracker->PostTaskAndReplyWithResult( + backend_task_runner_.get(), FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::GetFavicon, backend_, icon_url, + icon_type, + GetPixelSizesForFaviconScales(desired_size_in_dip)), + std::move(callback)); +} + +base::CancelableTaskTracker::TaskId +FaviconServiceImpl::UpdateFaviconMappingsAndFetch( + const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + return tracker->PostTaskAndReplyWithResult( + backend_task_runner_.get(), FROM_HERE, + base::BindOnce(&FaviconBackendWrapper::UpdateFaviconMappingsAndFetch, + backend_, page_urls, icon_url, icon_type, + GetPixelSizesForFaviconScales(desired_size_in_dip)), + std::move(callback)); +} + +void FaviconServiceImpl::DeleteFaviconMappings( + const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + backend_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&FaviconBackendWrapper::DeleteFaviconMappings, + backend_, page_urls, icon_type)); +} + +void FaviconServiceImpl::UnableToDownloadFavicon(const GURL& icon_url) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + missing_favicon_urls_.insert(base::FastHash(icon_url.spec())); + if (observer_) + observer_->OnUnableToDownloadFavicon(); +} + +void FaviconServiceImpl::ClearUnableToDownloadFavicons() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + missing_favicon_urls_.clear(); +} + +bool FaviconServiceImpl::WasUnableToDownloadFavicon( + const GURL& icon_url) const { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + MissingFaviconUrlHash url_hash = base::FastHash(icon_url.spec()); + return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end(); +} + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_service_impl.h b/weblayer/browser/favicon/favicon_service_impl.h new file mode 100644 index 0000000..af82cc8 --- /dev/null +++ b/weblayer/browser/favicon/favicon_service_impl.h
@@ -0,0 +1,92 @@ +// 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 WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_H_ + +#include <unordered_set> + +#include "base/memory/ref_counted.h" +#include "base/sequence_checker.h" +#include "components/favicon/core/core_favicon_service.h" + +namespace base { +class FilePath; +} + +namespace weblayer { + +class FaviconBackendWrapper; +class FaviconServiceImplObserver; + +// FaviconServiceImpl provides the front end (ui side) access to the favicon +// database. Most functions are processed async on the backend task-runner. +class FaviconServiceImpl : public favicon::CoreFaviconService { + public: + FaviconServiceImpl(); + FaviconServiceImpl(const FaviconServiceImpl&) = delete; + FaviconServiceImpl& operator=(const FaviconServiceImpl&) = delete; + ~FaviconServiceImpl() override; + + void Init(const base::FilePath& db_path); + + void set_observer(FaviconServiceImplObserver* observer) { + observer_ = observer; + } + + // favicon::CoreFaviconService: + base::CancelableTaskTracker::TaskId GetFaviconForPageURL( + const GURL& page_url, + const favicon_base::IconTypeSet& icon_types, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) override; + void SetFaviconOutOfDateForPage(const GURL& page_url) override; + void SetFavicons(const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + const gfx::Image& image) override; + void CloneFaviconMappingsForPages( + const GURL& page_url_to_read, + const favicon_base::IconTypeSet& icon_types, + const base::flat_set<GURL>& page_urls_to_write) override; + base::CancelableTaskTracker::TaskId GetFavicon( + const GURL& icon_url, + favicon_base::IconType icon_type, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) override; + base::CancelableTaskTracker::TaskId UpdateFaviconMappingsAndFetch( + const base::flat_set<GURL>& page_urls, + const GURL& icon_url, + favicon_base::IconType icon_type, + int desired_size_in_dip, + favicon_base::FaviconResultsCallback callback, + base::CancelableTaskTracker* tracker) override; + void DeleteFaviconMappings(const base::flat_set<GURL>& page_urls, + favicon_base::IconType icon_type) override; + void UnableToDownloadFavicon(const GURL& icon_url) override; + void ClearUnableToDownloadFavicons() override; + bool WasUnableToDownloadFavicon(const GURL& icon_url) const override; + + private: + using MissingFaviconUrlHash = size_t; + SEQUENCE_CHECKER(sequence_checker_); + + // The TaskRunner to which FaviconServiceBackend tasks are posted. Nullptr + // once Cleanup() is called. + scoped_refptr<base::SequencedTaskRunner> backend_task_runner_; + + scoped_refptr<FaviconBackendWrapper> backend_; + + // Hashes of the favicon urls that were unable to be downloaded. + std::unordered_set<MissingFaviconUrlHash> missing_favicon_urls_; + + // This is only used in tests, where only a single observer is necessary. + FaviconServiceImplObserver* observer_ = nullptr; +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_H_
diff --git a/weblayer/browser/favicon/favicon_service_impl_factory.cc b/weblayer/browser/favicon/favicon_service_impl_factory.cc new file mode 100644 index 0000000..eb7fb5e --- /dev/null +++ b/weblayer/browser/favicon/favicon_service_impl_factory.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 "weblayer/browser/favicon/favicon_service_impl_factory.h" + +#include "components/keyed_service/content/browser_context_dependency_manager.h" +#include "weblayer/browser/browser_context_impl.h" +#include "weblayer/browser/favicon/favicon_service_impl.h" +#include "weblayer/browser/profile_impl.h" + +namespace weblayer { + +// static +FaviconServiceImpl* FaviconServiceImplFactory::GetForProfile( + ProfileImpl* profile) { + if (!profile->GetBrowserContext()->IsOffTheRecord()) { + return static_cast<FaviconServiceImpl*>( + GetInstance()->GetServiceForBrowserContext(profile->GetBrowserContext(), + true)); + } + return nullptr; +} + +// static +FaviconServiceImplFactory* FaviconServiceImplFactory::GetInstance() { + static base::NoDestructor<FaviconServiceImplFactory> factory; + return factory.get(); +} + +FaviconServiceImplFactory::FaviconServiceImplFactory() + : BrowserContextKeyedServiceFactory( + "FaviconServiceImpl", + BrowserContextDependencyManager::GetInstance()) {} + +FaviconServiceImplFactory::~FaviconServiceImplFactory() = default; + +KeyedService* FaviconServiceImplFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + // TODO(sky): figure out best way to support incognito. + DCHECK(!context->IsOffTheRecord()); + std::unique_ptr<FaviconServiceImpl> service = + std::make_unique<FaviconServiceImpl>(); + service->Init(static_cast<BrowserContextImpl*>(context) + ->profile_impl() + ->data_path() + .AppendASCII("Favicons")); + return service.release(); +} + +bool FaviconServiceImplFactory::ServiceIsNULLWhileTesting() const { + return true; +} + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_service_impl_factory.h b/weblayer/browser/favicon/favicon_service_impl_factory.h new file mode 100644 index 0000000..48c42a9 --- /dev/null +++ b/weblayer/browser/favicon/favicon_service_impl_factory.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 WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_FACTORY_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_FACTORY_H_ + +#include "base/no_destructor.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +namespace weblayer { + +class FaviconServiceImpl; +class ProfileImpl; + +// BrowserContextKeyedServiceFactory for getting the FaviconServiceImpl. +class FaviconServiceImplFactory : public BrowserContextKeyedServiceFactory { + public: + FaviconServiceImplFactory(const FaviconServiceImplFactory&) = delete; + FaviconServiceImplFactory& operator=(const FaviconServiceImplFactory&) = + delete; + + static FaviconServiceImpl* GetForProfile(ProfileImpl* profile); + + // Returns the FaviconServiceFactory singleton. + static FaviconServiceImplFactory* GetInstance(); + + private: + friend class base::NoDestructor<FaviconServiceImplFactory>; + + FaviconServiceImplFactory(); + ~FaviconServiceImplFactory() override; + + // BrowserContextKeyedServiceFactory: + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; + bool ServiceIsNULLWhileTesting() const override; +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_FACTORY_H_
diff --git a/weblayer/browser/favicon/favicon_service_impl_observer.h b/weblayer/browser/favicon/favicon_service_impl_observer.h new file mode 100644 index 0000000..ea64704 --- /dev/null +++ b/weblayer/browser/favicon/favicon_service_impl_observer.h
@@ -0,0 +1,21 @@ +// 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 WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_OBSERVER_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_OBSERVER_H_ + +namespace weblayer { + +class FaviconServiceImplObserver { + public: + // Called from FaviconServiceImpl::UnableToDownloadFavicon. + virtual void OnUnableToDownloadFavicon() {} + + protected: + virtual ~FaviconServiceImplObserver() = default; +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_SERVICE_IMPL_OBSERVER_H_
diff --git a/weblayer/browser/favicon/favicon_tab_helper.cc b/weblayer/browser/favicon/favicon_tab_helper.cc new file mode 100644 index 0000000..7c03909f --- /dev/null +++ b/weblayer/browser/favicon/favicon_tab_helper.cc
@@ -0,0 +1,100 @@ +// 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 "weblayer/browser/favicon/favicon_tab_helper.h" + +#include "components/favicon/content/content_favicon_driver.h" +#include "content/public/browser/navigation_handle.h" +#include "content/public/browser/web_contents.h" +#include "weblayer/browser/favicon/favicon_service_impl.h" +#include "weblayer/browser/favicon/favicon_service_impl_factory.h" +#include "weblayer/browser/profile_impl.h" +#include "weblayer/public/favicon_fetcher_delegate.h" + +namespace weblayer { + +FaviconTabHelper::ObserverSubscription::ObserverSubscription( + FaviconTabHelper* helper, + FaviconFetcherDelegate* delegate) + : helper_(helper), delegate_(delegate) { + helper_->AddDelegate(delegate_); +} + +FaviconTabHelper::ObserverSubscription::~ObserverSubscription() { + helper_->RemoveDelegate(delegate_); +} + +FaviconTabHelper::~FaviconTabHelper() { + // All of the ObserverSubscriptions should have been destroyed before this. + DCHECK_EQ(0, observer_count_); +} + +std::unique_ptr<FaviconTabHelper::ObserverSubscription> +FaviconTabHelper::RegisterFaviconFetcherDelegate( + FaviconFetcherDelegate* delegate) { + // WrapUnique as constructor is private. + return base::WrapUnique(new ObserverSubscription(this, delegate)); +} + +FaviconTabHelper::FaviconTabHelper(content::WebContents* contents) + : WebContentsObserver(contents) { + // This code relies on the ability to get a Profile for the BrowserContext. + DCHECK(ProfileImpl::FromBrowserContext(web_contents()->GetBrowserContext())); +} + +void FaviconTabHelper::AddDelegate(FaviconFetcherDelegate* delegate) { + delegates_.AddObserver(delegate); + if (++observer_count_ == 1) { + ProfileImpl* profile = + ProfileImpl::FromBrowserContext(web_contents()->GetBrowserContext()); + FaviconServiceImpl* favicon_service = + FaviconServiceImplFactory::GetForProfile(profile); + favicon::ContentFaviconDriver::CreateForWebContents(web_contents(), + favicon_service); + favicon::ContentFaviconDriver::FromWebContents(web_contents()) + ->AddObserver(this); + } +} + +void FaviconTabHelper::RemoveDelegate(FaviconFetcherDelegate* delegate) { + delegates_.RemoveObserver(delegate); + --observer_count_; + DCHECK_GE(observer_count_, 0); + if (observer_count_ == 0) { + favicon::ContentFaviconDriver::FromWebContents(web_contents()) + ->RemoveObserver(this); + // ContentFaviconDriver downloads images, if there are no observers there + // is no need to keep it around. This triggers deleting it. + web_contents()->SetUserData(favicon::ContentFaviconDriver::UserDataKey(), + nullptr); + favicon_ = gfx::Image(); + } +} + +void FaviconTabHelper::OnFaviconUpdated( + favicon::FaviconDriver* favicon_driver, + NotificationIconType notification_icon_type, + const GURL& icon_url, + bool icon_url_changed, + const gfx::Image& image) { + favicon_ = image; + for (FaviconFetcherDelegate& delegate : delegates_) + delegate.OnFaviconChanged(favicon_); +} + +void FaviconTabHelper::DidFinishNavigation( + content::NavigationHandle* navigation_handle) { + if (!navigation_handle->IsInMainFrame() || + !navigation_handle->HasCommitted() || navigation_handle->IsErrorPage() || + navigation_handle->IsSameDocument()) { + return; + } + favicon_ = gfx::Image(); + // Don't send notification in this case as it's assumed a new navigation + // triggers resetting the favicon. +} + +WEB_CONTENTS_USER_DATA_KEY_IMPL(FaviconTabHelper) + +} // namespace weblayer
diff --git a/weblayer/browser/favicon/favicon_tab_helper.h b/weblayer/browser/favicon/favicon_tab_helper.h new file mode 100644 index 0000000..5558ab1 --- /dev/null +++ b/weblayer/browser/favicon/favicon_tab_helper.h
@@ -0,0 +1,87 @@ +// 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 WEBLAYER_BROWSER_FAVICON_FAVICON_TAB_HELPER_H_ +#define WEBLAYER_BROWSER_FAVICON_FAVICON_TAB_HELPER_H_ + +#include <memory> + +#include "base/observer_list.h" +#include "components/favicon/core/favicon_driver_observer.h" +#include "content/public/browser/web_contents_observer.h" +#include "content/public/browser/web_contents_user_data.h" +#include "ui/gfx/image/image.h" + +namespace weblayer { + +class FaviconFetcherDelegate; + +// FaviconTabHelper is responsible for creating favicon::ContentFaviconDriver +// when necessary. FaviconTabHelper is used by FaviconFetcherImpl and notifies +// FaviconFetcherDelegate when the favicon changes. +class FaviconTabHelper : public content::WebContentsUserData<FaviconTabHelper>, + public content::WebContentsObserver, + public favicon::FaviconDriverObserver { + public: + // Used to track calls to RegisterFaviconFetcherDelegate(). When destroyed + // the FaviconFetcherDelegate is removed. + class ObserverSubscription { + public: + ObserverSubscription(const ObserverSubscription&) = delete; + ObserverSubscription& operator=(const ObserverSubscription&) = delete; + ~ObserverSubscription(); + + private: + friend class FaviconTabHelper; + + ObserverSubscription(FaviconTabHelper* helper, + FaviconFetcherDelegate* delegate); + + FaviconTabHelper* helper_; + FaviconFetcherDelegate* delegate_; + }; + + FaviconTabHelper(const FaviconTabHelper&) = delete; + FaviconTabHelper& operator=(const FaviconTabHelper&) = delete; + ~FaviconTabHelper() override; + + // Called when FaviconFetcherImpl is created. This ensures the necessary + // wiring is in place and notifies |delegate| when the favicon changes. + std::unique_ptr<ObserverSubscription> RegisterFaviconFetcherDelegate( + FaviconFetcherDelegate* delegate); + + // Returns the favicon for the current navigation. + const gfx::Image& favicon() const { return favicon_; } + + private: + friend class content::WebContentsUserData<FaviconTabHelper>; + + explicit FaviconTabHelper(content::WebContents* contents); + + void AddDelegate(FaviconFetcherDelegate* delegate); + void RemoveDelegate(FaviconFetcherDelegate* delegate); + + // favicon::FaviconDriverObserver: + void OnFaviconUpdated(favicon::FaviconDriver* favicon_driver, + NotificationIconType notification_icon_type, + const GURL& icon_url, + bool icon_url_changed, + const gfx::Image& image) override; + + // content::WebContentsObserver: + void DidFinishNavigation( + content::NavigationHandle* navigation_handle) override; + + content::WebContents* web_contents_; + // Number of observers attached. + int observer_count_ = 0; + base::ObserverList<FaviconFetcherDelegate> delegates_; + gfx::Image favicon_; + + WEB_CONTENTS_USER_DATA_KEY_DECL(); +}; + +} // namespace weblayer + +#endif // WEBLAYER_BROWSER_FAVICON_FAVICON_TAB_HELPER_H_
diff --git a/weblayer/browser/tab_impl.cc b/weblayer/browser/tab_impl.cc index f05819a9..a7af81e 100644 --- a/weblayer/browser/tab_impl.cc +++ b/weblayer/browser/tab_impl.cc
@@ -54,6 +54,8 @@ #include "weblayer/browser/browser_impl.h" #include "weblayer/browser/browser_process.h" #include "weblayer/browser/content_browser_client_impl.h" +#include "weblayer/browser/favicon/favicon_fetcher_impl.h" +#include "weblayer/browser/favicon/favicon_tab_helper.h" #include "weblayer/browser/file_select_helper.h" #include "weblayer/browser/host_content_settings_map_factory.h" #include "weblayer/browser/i18n_util.h" @@ -261,6 +263,11 @@ // only be possible from the same profile. DCHECK_EQ(profile_->GetBrowserContext(), web_contents_->GetBrowserContext()); + // FaviconTabHelper adds a WebContentsObserver. Create FaviconTabHelper + // before |this| observes the WebContents to ensure favicons are reset before + // notifying weblayer observers of changes. + FaviconTabHelper::CreateForWebContents(web_contents_.get()); + // By default renderer initiated navigations inherit the user-agent override // of the current NavigationEntry. For WebLayer, the user-agent override is // set on a per NavigationEntry entry basis. @@ -471,6 +478,11 @@ script); } +std::unique_ptr<FaviconFetcher> TabImpl::CreateFaviconFetcher( + FaviconFetcherDelegate* delegate) { + return std::make_unique<FaviconFetcherImpl>(web_contents_.get(), delegate); +} + #if !defined(OS_ANDROID) void TabImpl::AttachToView(views::WebView* web_view) { web_view->SetWebContents(web_contents_.get());
diff --git a/weblayer/browser/tab_impl.h b/weblayer/browser/tab_impl.h index 1bfbedf..244e855 100644 --- a/weblayer/browser/tab_impl.h +++ b/weblayer/browser/tab_impl.h
@@ -224,6 +224,8 @@ const std::vector<std::string>& js_origins) override; void RemoveWebMessageHostFactory( const base::string16& js_object_name) override; + std::unique_ptr<FaviconFetcher> CreateFaviconFetcher( + FaviconFetcherDelegate* delegate) override; #if !defined(OS_ANDROID) void AttachToView(views::WebView* web_view) override; #endif
diff --git a/weblayer/public/favicon_fetcher.h b/weblayer/public/favicon_fetcher.h new file mode 100644 index 0000000..bf26dd80 --- /dev/null +++ b/weblayer/public/favicon_fetcher.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 WEBLAYER_PUBLIC_FAVICON_FETCHER_H_ +#define WEBLAYER_PUBLIC_FAVICON_FETCHER_H_ + +namespace gfx { +class Image; +} + +namespace weblayer { + +// FaviconFetcher is responsible for downloading a favicon for the current +// navigation. FaviconFetcher caches favicons, updating the cache every so +// often to ensure the cache is up to date. +class FaviconFetcher { + public: + virtual ~FaviconFetcher() = default; + + // Returns the favicon for the current navigation, which may be empty. + virtual gfx::Image GetFavicon() = 0; + + protected: + FaviconFetcher() = default; +}; + +} // namespace weblayer + +#endif // WEBLAYER_PUBLIC_FAVICON_FETCHER_H_
diff --git a/weblayer/public/favicon_fetcher_delegate.h b/weblayer/public/favicon_fetcher_delegate.h new file mode 100644 index 0000000..1873f2d --- /dev/null +++ b/weblayer/public/favicon_fetcher_delegate.h
@@ -0,0 +1,31 @@ +// 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 WEBLAYER_PUBLIC_FAVICON_FETCHER_DELEGATE_H_ +#define WEBLAYER_PUBLIC_FAVICON_FETCHER_DELEGATE_H_ + +#include "base/observer_list.h" + +namespace gfx { +class Image; +} + +namespace weblayer { + +// Notified of interesting events related to FaviconFetcher. +class FaviconFetcherDelegate : public base::CheckedObserver { + public: + // Called when the favicon of the current navigation has changed. This may be + // called multiple times for the same navigation. This is *not* immediately + // called with an empty image when a navigation starts. It is assumed + // consuming code asks for the favicon when the navigation changes. + virtual void OnFaviconChanged(const gfx::Image& image) = 0; + + protected: + ~FaviconFetcherDelegate() override = default; +}; + +} // namespace weblayer + +#endif // WEBLAYER_PUBLIC_FAVICON_FETCHER_DELEGATE_H_
diff --git a/weblayer/public/tab.h b/weblayer/public/tab.h index 5d8bb99..6d26eb6 100644 --- a/weblayer/public/tab.h +++ b/weblayer/public/tab.h
@@ -26,6 +26,8 @@ namespace weblayer { class ErrorPageDelegate; +class FaviconFetcher; +class FaviconFetcherDelegate; class FullscreenDelegate; class GoogleAccountsDelegate; class NavigationController; @@ -108,6 +110,17 @@ virtual void RemoveWebMessageHostFactory( const base::string16& js_object_name) = 0; + // Creates a FaviconFetcher that notifies a FaviconFetcherDelegate when + // the favicon changes. + // A page may provide any number of favicons. The preferred image size + // used depends upon the platform. If a previously cached icon is available, + // it is used, otherwise the icon is downloaded. + // |delegate| may be called multiple times for the same navigation. This + // happens when the page dynamically updates the favicon, but may also happen + // if a cached icon is determined to be out of date. + virtual std::unique_ptr<FaviconFetcher> CreateFaviconFetcher( + FaviconFetcherDelegate* delegate) = 0; + #if !defined(OS_ANDROID) // TODO: this isn't a stable API, so use it now for expediency in the C++ API, // but if we ever want to have backward or forward compatibility in C++ this
diff --git a/weblayer/test/BUILD.gn b/weblayer/test/BUILD.gn index 3aa575c63..fb912dae 100644 --- a/weblayer/test/BUILD.gn +++ b/weblayer/test/BUILD.gn
@@ -98,6 +98,7 @@ "//components/blocked_content", "//components/content_settings/core/browser", "//components/error_page/content/browser", + "//components/favicon/content", "//components/network_session_configurator/common", "//components/network_time", "//components/page_load_metrics/browser:browser", @@ -129,6 +130,7 @@ "../browser/cookie_manager_browsertest.cc", "../browser/download_browsertest.cc", "../browser/errorpage_browsertest.cc", + "../browser/favicon/favicon_fetcher_browsertest.cc", "../browser/google_accounts_browsertest.cc", "../browser/js_communication/web_message_browsertest.cc", "../browser/navigation_browsertest.cc",
diff --git a/weblayer/test/data/favicon.png b/weblayer/test/data/favicon.png new file mode 100644 index 0000000..85f38b2 --- /dev/null +++ b/weblayer/test/data/favicon.png Binary files differ
diff --git a/weblayer/test/data/simple_page_with_favicon.html b/weblayer/test/data/simple_page_with_favicon.html new file mode 100644 index 0000000..02e72fd --- /dev/null +++ b/weblayer/test/data/simple_page_with_favicon.html
@@ -0,0 +1,9 @@ +<html> + <head> + <title>OK</title> + <link rel="icon" type="image/png" href="favicon.png"/> + </head> +<body> +Basic html test. +</body> +</html>
diff --git a/weblayer/test/data/simple_page_with_favicon2.html b/weblayer/test/data/simple_page_with_favicon2.html new file mode 100644 index 0000000..02e72fd --- /dev/null +++ b/weblayer/test/data/simple_page_with_favicon2.html
@@ -0,0 +1,9 @@ +<html> + <head> + <title>OK</title> + <link rel="icon" type="image/png" href="favicon.png"/> + </head> +<body> +Basic html test. +</body> +</html>