diff --git a/DEPS b/DEPS index db5d3cb..44c4a51 100644 --- a/DEPS +++ b/DEPS
@@ -222,7 +222,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': '59a00f062a96dd909377e33a04ed07e104a7a560', + 'skia_revision': 'b5cd95b58fba65d22518edbfd2982c82da358fe4', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -238,7 +238,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '557d0158079f292ea7c37f8475cb1b1f669bce66', + 'swiftshader_revision': '7a7993b54e62b85ddabe8dfcf7788174bf36b80f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -301,7 +301,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': '4a7d834643c49b8dea45ae374383c5389ddcb5d0', + 'devtools_frontend_revision': '853239d9237c4febd78a1103dcce4a313ead9553', # 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. @@ -341,7 +341,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': '1fdcabf4a96580e6309f3e4e659edd1a2339ff08', + 'dawn_revision': 'cfd5ebb2f2ad1a9d57fe83437ea11aa477e351ea', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -738,7 +738,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'Nvti3EVxTPLVgkynuADZvQydGWRCTGbp5aQHA3qLMP4C', + 'version': '3LEkAxvMyv3fgl0tjQXjlDeT_bwP9wCnOly8fNQlZQkC', }, ], 'condition': 'checkout_android', @@ -1449,7 +1449,7 @@ 'packages': [ { 'package': 'fuchsia/third_party/aemu/linux-amd64', - 'version': 'XSfC0vpqwj2Qzz0hAfMHYCCe5KDFiXqzb4M3U-cT6i4C' + 'version': 'MokqYq5DyNXxFI3FakMgGOll9hAFBPgQxSW5GUZ-RjQC' }, ], 'condition': 'host_os == "linux" and checkout_fuchsia', @@ -1589,10 +1589,10 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '827cad9e402b63bbe38787456115bcb681a8a152', 'src/third_party/webgpu-cts/src': - Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '2d3ccc003b71cfa7943e2c3b33ee85aa3d801539', + Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + 'f19dd8595c4cc6058ec47db576b292d072353e5e', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '99a71f49c03a3148e29ba5e815ffd5a64afa6e90', + Var('webrtc_git') + '/src.git' + '@' + '9e09831767995531ae1c2804e1c15fa2be4053f2', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1653,7 +1653,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c94fd68fcb3f14f0f5d0bcb4b5b861422a6acf83', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@c13f153ff608dde3400ae192a1dfecff244431e3', 'condition': 'checkout_src_internal', },
diff --git a/ash/quick_answers/ui/quick_answers_view.cc b/ash/quick_answers/ui/quick_answers_view.cc index cad05622..af2f0cf 100644 --- a/ash/quick_answers/ui/quick_answers_view.cc +++ b/ash/quick_answers/ui/quick_answers_view.cc
@@ -20,11 +20,13 @@ #include "ui/base/metadata/metadata_impl_macros.h" #include "ui/gfx/paint_vector_icon.h" #include "ui/views/accessibility/view_accessibility.h" +#include "ui/views/animation/ink_drop_impl.h" #include "ui/views/background.h" #include "ui/views/border.h" #include "ui/views/controls/button/button_controller.h" #include "ui/views/controls/button/image_button.h" #include "ui/views/controls/button/label_button.h" +#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/image_view.h" #include "ui/views/controls/label.h" #include "ui/views/controls/menu/menu_config.h" @@ -83,6 +85,7 @@ constexpr int kSettingsButtonMarginDip = 8; constexpr int kSettingsButtonSizeDip = 14; constexpr SkColor kSettingsButtonColor = gfx::kGoogleGrey500; +constexpr SkColor kSettingsButtonInkDropColor = gfx::kGoogleGrey500; // ReportQueryView. constexpr char kGoogleSansFont[] = "Google Sans"; @@ -446,7 +449,12 @@ kSettingsButtonColor)); settings_button_->SetTooltipText(l10n_util::GetStringUTF16( IDS_ASH_QUICK_ANSWERS_SETTINGS_BUTTON_TOOLTIP_TEXT)); - SetButtonNotifyActionToOnPress(settings_button_); + + views::InkDropHost* const ink_drop = views::InkDrop::Get(settings_button_); + ink_drop->SetBaseColor(kSettingsButtonInkDropColor); + ink_drop->SetMode(views::InkDropHost::InkDropMode::ON); + settings_button_->SetHasInkDropActionOnClick(true); + views::InstallCircleHighlightPathGenerator(settings_button_); } void QuickAnswersView::AddAssistantIcon() {
diff --git a/chrome/VERSION b/chrome/VERSION index ebef090..e99441e 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=94 MINOR=0 -BUILD=4581 +BUILD=4582 PATCH=0
diff --git a/chrome/android/features/autofill_assistant/BUILD.gn b/chrome/android/features/autofill_assistant/BUILD.gn index 0a16e07..17bb175 100644 --- a/chrome/android/features/autofill_assistant/BUILD.gn +++ b/chrome/android/features/autofill_assistant/BUILD.gn
@@ -290,9 +290,11 @@ "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantBackButtonIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantBottomsheetTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java", + "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabTestRule.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataUiTest.java", + "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCustomTabTestRule.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDetailsUiTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantDirectActionHandlerTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantFacadeTest.java", @@ -311,9 +313,9 @@ "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantProgressBarIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPromptNavigationIntegrationTest.java", - "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantScreenOrientationHelper.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTabHelperCustomTabTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTabHelperRegularTabTest.java", + "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTestRule.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTextUtilsTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTriggerScriptIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantUiTest.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java index 5ce6fdb..6053d281 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabIntegrationTest.java
@@ -34,10 +34,11 @@ import androidx.test.espresso.matcher.ViewMatchers.Visibility; import androidx.test.filters.MediumTest; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; @@ -64,7 +65,6 @@ import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator; import org.chromium.content_public.browser.test.util.KeyUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils; -import org.chromium.net.test.EmbeddedTestServer; import org.chromium.ui.test.util.UiRestriction; import java.util.ArrayList; @@ -76,19 +76,20 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @RunWith(ChromeJUnit4ClassRunner.class) public class AutofillAssistantChromeTabIntegrationTest { - @Rule - public ChromeTabbedActivityTestRule mTestRule = new ChromeTabbedActivityTestRule(); - - private static final String HTML_DIRECTORY = "/components/test/data/autofill_assistant/html/"; private static final String TEST_PAGE_A = "autofill_assistant_target_website.html"; private static final String TEST_PAGE_B = "form_target_website.html"; - private EmbeddedTestServer mTestServer; + private final ChromeTabbedActivityTestRule mTestRule = new ChromeTabbedActivityTestRule(); + private final AutofillAssistantChromeTabTestRule mTabTestRule = + new AutofillAssistantChromeTabTestRule(mTestRule, TEST_PAGE_A); + + @Rule + public final TestRule mRulesChain = RuleChain.outerRule(mTestRule).around(mTabTestRule); private ScrimCoordinator mScrimCoordinator; private String getURL(String page) { - return mTestServer.getURL(HTML_DIRECTORY + page); + return mTabTestRule.getURL(page); } private void startAutofillAssistantOnTab( @@ -100,18 +101,10 @@ @Before public void setUp() throws Exception { - AutofillAssistantPreferencesUtil.setInitialPreferences(true); - mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); - mTestRule.startMainActivityWithURL(getURL(TEST_PAGE_A)); mScrimCoordinator = mTestRule.getActivity().getRootUiCoordinatorForTesting().getScrimCoordinator(); } - @After - public void tearDown() throws Exception { - mTestServer.stopAndDestroyServer(); - } - @Test @MediumTest // Restricted to phones due to https://crbug.com/429671
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabTestRule.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabTestRule.java new file mode 100644 index 0000000..4600abc0 --- /dev/null +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantChromeTabTestRule.java
@@ -0,0 +1,38 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.support.test.InstrumentationRegistry; + +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.net.test.EmbeddedTestServer; + +class AutofillAssistantChromeTabTestRule + extends AutofillAssistantTestRule<ChromeTabbedActivityTestRule> { + private static final String HTML_DIRECTORY = "/components/test/data/autofill_assistant/html/"; + + private final String mTestPage; + private final EmbeddedTestServer mTestServer; + + AutofillAssistantChromeTabTestRule(ChromeTabbedActivityTestRule testRule, String testPage) { + super(testRule); + mTestPage = testPage; + mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); + } + + String getURL(String page) { + return mTestServer.getURL(HTML_DIRECTORY + page); + } + + @Override + public void start() { + getTestRule().startMainActivityWithURL(getURL(mTestPage)); + } + + @Override + public void stop() { + mTestServer.stopAndDestroyServer(); + } +}
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCustomTabTestRule.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCustomTabTestRule.java new file mode 100644 index 0000000..90c6f5ff --- /dev/null +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCustomTabTestRule.java
@@ -0,0 +1,33 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.support.test.InstrumentationRegistry; + +import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; +import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; + +class AutofillAssistantCustomTabTestRule + extends AutofillAssistantTestRule<CustomTabActivityTestRule> { + private static final String HTML_DIRECTORY = "/components/test/data/autofill_assistant/html/"; + + private final String mTestPage; + + AutofillAssistantCustomTabTestRule(CustomTabActivityTestRule testRule, String testPage) { + super(testRule); + mTestPage = testPage; + } + + @Override + public void start() { + getTestRule().startCustomTabActivityWithIntent( + CustomTabsTestUtils.createMinimalCustomTabIntent( + InstrumentationRegistry.getTargetContext(), + getTestRule().getTestServer().getURL(HTML_DIRECTORY + mTestPage))); + } + + @Override + public void stop() {} +}
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java index 032158a9..e36ec970 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantPersonalDataManagerTest.java
@@ -47,17 +47,17 @@ import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantUiTestUtil.withTextId; import static org.chromium.chrome.browser.autofill_assistant.ProtoTestUtil.toCssSelector; -import android.support.test.InstrumentationRegistry; import android.widget.RadioButton; import androidx.test.espresso.Espresso; import androidx.test.espresso.matcher.ViewMatchers.Visibility; import androidx.test.filters.MediumTest; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; +import org.junit.rules.TestRule; import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; @@ -79,7 +79,6 @@ import org.chromium.chrome.browser.autofill_assistant.proto.ValueExpression; import org.chromium.chrome.browser.autofill_assistant.proto.ValueExpression.Chunk; import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; -import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.content_public.browser.WebContents; @@ -95,14 +94,11 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @RunWith(ChromeJUnit4ClassRunner.class) public class AutofillAssistantPersonalDataManagerTest { + private final CustomTabActivityTestRule mTestRule = new CustomTabActivityTestRule(); + @Rule - public CustomTabActivityTestRule mTestRule = new CustomTabActivityTestRule(); - - private final AutofillAssistantScreenOrientationHelper<CustomTabActivityTestRule> - mScreenOrientationHelper = new AutofillAssistantScreenOrientationHelper<>(mTestRule); - - private static final String TEST_PAGE = "/components/test/data/autofill_assistant/html/" - + "form_target_website.html"; + public final TestRule mRulesChain = RuleChain.outerRule(mTestRule).around( + new AutofillAssistantCustomTabTestRule(mTestRule, "form_target_website.html")); private AutofillAssistantCollectUserDataTestHelper mHelper; private AutofillTestHelper mAutofillHelper; @@ -113,20 +109,10 @@ @Before public void setUp() throws Exception { - AutofillAssistantPreferencesUtil.setInitialPreferences(true); - mTestRule.startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent( - InstrumentationRegistry.getTargetContext(), - mTestRule.getTestServer().getURL(TEST_PAGE))); - mScreenOrientationHelper.setPortraitOrientation(); mHelper = new AutofillAssistantCollectUserDataTestHelper(); mAutofillHelper = new AutofillTestHelper(); } - @After - public void tearDown() { - mScreenOrientationHelper.restoreOrientation(); - } - /** * Add a contact with Autofill Assistant UI and fill it into the form. */
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantScreenOrientationHelper.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantScreenOrientationHelper.java deleted file mode 100644 index 0e5d64f..0000000 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantScreenOrientationHelper.java +++ /dev/null
@@ -1,31 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.autofill_assistant; - -import android.annotation.SuppressLint; -import android.content.pm.ActivityInfo; - -import org.chromium.chrome.test.ChromeActivityTestRule; - -class AutofillAssistantScreenOrientationHelper<T extends ChromeActivityTestRule> { - private int mOriginalRequestedScreenOrientation; - private final T mTestRule; - - AutofillAssistantScreenOrientationHelper(T testRule) { - mTestRule = testRule; - } - - @SuppressLint("SourceLockedOrientationActivity") - public void setPortraitOrientation() { - assert mTestRule.getActivity() != null; - mOriginalRequestedScreenOrientation = mTestRule.getActivity().getRequestedOrientation(); - mTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - - public void restoreOrientation() { - assert mTestRule.getActivity() != null; - mTestRule.getActivity().setRequestedOrientation(mOriginalRequestedScreenOrientation); - } -}
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTestRule.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTestRule.java new file mode 100644 index 0000000..28712c7 --- /dev/null +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantTestRule.java
@@ -0,0 +1,61 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.autofill_assistant; + +import android.annotation.SuppressLint; +import android.content.pm.ActivityInfo; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import org.chromium.chrome.test.ChromeActivityTestRule; + +abstract class AutofillAssistantTestRule<T extends ChromeActivityTestRule> implements TestRule { + private final T mTestRule; + + private int mOriginalRequestedScreenOrientation; + + AutofillAssistantTestRule(T testRule) { + mTestRule = testRule; + } + + T getTestRule() { + return mTestRule; + } + + abstract void start(); + abstract void stop(); + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + AutofillAssistantPreferencesUtil.setInitialPreferences(true); + start(); + setPortraitOrientation(); + try { + base.evaluate(); + } finally { + restoreOrientation(); + } + stop(); + } + }; + } + + @SuppressLint("SourceLockedOrientationActivity") + private void setPortraitOrientation() { + assert mTestRule.getActivity() != null; + mOriginalRequestedScreenOrientation = mTestRule.getActivity().getRequestedOrientation(); + mTestRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + private void restoreOrientation() { + assert mTestRule.getActivity() != null; + mTestRule.getActivity().setRequestedOrientation(mOriginalRequestedScreenOrientation); + } +}
diff --git a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java index 605e486..3d6e2c84 100644 --- a/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java +++ b/chrome/android/features/start_surface/internal/javatests/src/org/chromium/chrome/features/start_surface/InstantStartTest.java
@@ -296,6 +296,7 @@ @CommandLineFlags.Add({ChromeSwitches.DISABLE_NATIVE_INITIALIZATION, "force-fieldtrials=Study/Group", IMMEDIATE_RETURN_PARAMS + "/start_surface_variation/single"}) + @DisabledTest(message = "crbug.com/1230762") public void startSurfaceToolbarInflatedPreAndWithNativeTest() { // clang-format on StartSurfaceTestUtils.startMainActivityFromLauncher(mActivityTestRule); @@ -1088,6 +1089,7 @@ ChromeFeatureList.START_SURFACE_ANDROID + "<Study"}) @CommandLineFlags.Add({"force-fieldtrials=Study/Group", IMMEDIATE_RETURN_PARAMS + "/start_surface_variation/single/omnibox_focused_on_new_tab/true"}) + @DisabledTest(message = "https://crbug.com/1192559") public void testNewTabFromLauncher() throws IOException { // clang-format on testNewTabFromLauncherImpl();
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedIPHDelegate.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedIPHDelegate.java new file mode 100644 index 0000000..3812fdd4 --- /dev/null +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedIPHDelegate.java
@@ -0,0 +1,48 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.feed; + +import org.chromium.components.feature_engagement.Tracker; + +/** + * Delegate to provide necessary checks for IPH triggering in feeds. + */ +public interface FeedIPHDelegate { + /** + * Gets the feature engagement tracker. + */ + Tracker getFeatureEngagementTracker(); + + /** + * Determines whether the feed is expanded (turned on). + */ + boolean isFeedExpanded(); + + /** + * Determines whether the user is signed in. + */ + boolean isSignedIn(); + + /** + * Determines whether the position of the feed header in the NTP container is suitable for + * showing the IPH. + */ + boolean isFeedHeaderPositionInContainerSuitableForIPH(float headerMaxPosFraction); + + /** + * Returns the current time in milliseconds. + */ + long getCurrentTimeMs(); + + /** + * Returns the time of last feed content fetch in milliseconds. + */ + long getLastFetchTimeMs(); + + /** + * Returns true if the user can scroll up the page. + */ + boolean canScrollUp(); +}
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java index 15f50db..ec457317 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java
@@ -12,6 +12,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.Looper; import android.os.SystemClock; import android.view.ContextThemeWrapper; import android.view.LayoutInflater; @@ -83,7 +84,7 @@ /** * Provides a surface that displays an interest feed rendered list of content suggestions. */ -public class FeedSurfaceCoordinator implements FeedSurfaceProvider { +public class FeedSurfaceCoordinator implements FeedSurfaceProvider, FeedIPHDelegate { @VisibleForTesting public static final String FEED_STREAM_CREATED_TIME_MS_UMA = "FeedStreamCreatedTime"; @@ -100,6 +101,7 @@ private final BottomSheetController mBottomSheetController; private final WindowAndroid mWindowAndroid; private final Supplier<ShareDelegate> mShareSupplier; + private final Handler mHandler; private UiConfig mUiConfig; private FrameLayout mRootView; @@ -142,6 +144,7 @@ private @Nullable ScrollableContainerDelegate mScrollableContainerDelegate; private @Nullable HeaderIphScrollListener mHeaderIphScrollListener; + private @Nullable RefreshIphScrollListener mRefreshIphScrollListener; private final FeedLaunchReliabilityLoggingState mLaunchReliabilityLoggingState; private FeedLaunchReliabilityLogger mLaunchReliabilityLogger; @@ -284,6 +287,8 @@ mRootView.setPadding(0, resources.getDimensionPixelOffset(R.dimen.tab_strip_height), 0, 0); mUiConfig = new UiConfig(mRootView); + mHandler = new Handler(Looper.getMainLooper()); + if (isEnhancedProtectionPromoEnabled()) { mEnhancedProtectionPromoController = new EnhancedProtectionPromoController(mActivity, mProfile); @@ -771,40 +776,30 @@ mScrollableContainerDelegate = new ScrollableContainerDelegateImpl(); } - FeedSurfaceCoordinator coordinator = this; - HeaderIphScrollListener.Delegate delegate = new HeaderIphScrollListener.Delegate() { - @Override - public Tracker getFeatureEngagementTracker() { - return TrackerFactory.getTrackerForProfile(mProfile); - } - @Override - public void showMenuIph() { - UserEducationHelper helper = new UserEducationHelper(mActivity, new Handler()); - mSectionHeaderView.showMenuIph(helper); - } - @Override - public boolean isFeedExpanded() { - return mSectionHeaderModel.get(SectionHeaderListProperties.IS_SECTION_ENABLED_KEY); - } - @Override - public boolean isSignedIn() { - return IdentityServicesProvider.get() - .getSigninManager(Profile.getLastUsedRegularProfile()) - .getIdentityManager() - .hasPrimaryAccount(); - } - @Override - public boolean isFeedHeaderPositionInContainerSuitableForIPH( - float headerMaxPosFraction) { - return coordinator.isFeedHeaderPositionInContainerSuitableForIPH( - headerMaxPosFraction); - } - }; + createHeaderIphScrollListener(); + if (ChromeFeatureList.isEnabled(ChromeFeatureList.FEED_INTERACTIVE_REFRESH)) { + createRefreshIphScrollListener(); + } + } + + private void createHeaderIphScrollListener() { mHeaderIphScrollListener = - new HeaderIphScrollListener(delegate, mScrollableContainerDelegate); + new HeaderIphScrollListener(this, mScrollableContainerDelegate, () -> { + UserEducationHelper helper = new UserEducationHelper(mActivity, mHandler); + mSectionHeaderView.showMenuIph(helper); + }); mScrollableContainerDelegate.addScrollListener(mHeaderIphScrollListener); } + private void createRefreshIphScrollListener() { + mRefreshIphScrollListener = + new RefreshIphScrollListener(this, mScrollableContainerDelegate, () -> { + UserEducationHelper helper = new UserEducationHelper(mActivity, mHandler); + mSwipeRefreshLayout.showIPH(helper); + }); + mScrollableContainerDelegate.addScrollListener(mRefreshIphScrollListener); + } + /** * Stops and deletes things related to the IPH. Must be called before tearing down feed * components, e.g., on #destroy. This also applies for the case where the feed stream is @@ -813,13 +808,38 @@ void stopIph() { if (mStream != null && mScrollableContainerDelegate != null && mHeaderIphScrollListener != null) { - mScrollableContainerDelegate.removeScrollListener(mHeaderIphScrollListener); + if (mHeaderIphScrollListener != null) { + mScrollableContainerDelegate.removeScrollListener(mHeaderIphScrollListener); + mHeaderIphScrollListener = null; + } + if (mRefreshIphScrollListener != null) { + mScrollableContainerDelegate.removeScrollListener(mRefreshIphScrollListener); + mRefreshIphScrollListener = null; + } } - mHeaderIphScrollListener = null; mScrollableContainerDelegate = null; } - private boolean isFeedHeaderPositionInContainerSuitableForIPH(float headerMaxPosFraction) { + @Override + public Tracker getFeatureEngagementTracker() { + return TrackerFactory.getTrackerForProfile(mProfile); + } + + @Override + public boolean isFeedExpanded() { + return mSectionHeaderModel.get(SectionHeaderListProperties.IS_SECTION_ENABLED_KEY); + } + + @Override + public boolean isSignedIn() { + return IdentityServicesProvider.get() + .getSigninManager(Profile.getLastUsedRegularProfile()) + .getIdentityManager() + .hasPrimaryAccount(); + } + + @Override + public boolean isFeedHeaderPositionInContainerSuitableForIPH(float headerMaxPosFraction) { assert headerMaxPosFraction >= 0.0f && headerMaxPosFraction <= 1.0f : "Max position fraction should be ranging between 0.0 and 1.0"; @@ -835,6 +855,21 @@ return true; } + @Override + public long getCurrentTimeMs() { + return System.currentTimeMillis(); + } + + @Override + public long getLastFetchTimeMs() { + return (mStream == null) ? 0 : mStream.getLastFetchTimeMs(); + } + + @Override + public boolean canScrollUp() { + return mRecyclerView.canScrollVertically(-1); + } + private boolean isReliabilityLoggingEnabled() { return ChromeFeatureList.isEnabled(ChromeFeatureList.FEED_RELIABILITY_LOGGING) && (mPrivacyPreferencesManager.isMetricsReportingEnabled()
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSwipeRefreshLayout.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSwipeRefreshLayout.java index ad891517c..3e39e616 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSwipeRefreshLayout.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSwipeRefreshLayout.java
@@ -5,12 +5,19 @@ package org.chromium.chrome.browser.feed; import android.annotation.SuppressLint; -import android.content.Context; +import android.app.Activity; import android.view.MotionEvent; import android.view.View; import android.view.View.MeasureSpec; import android.view.ViewConfiguration; +import android.view.ViewGroup; +import org.chromium.chrome.browser.toolbar.R; +import org.chromium.chrome.browser.user_education.IPHCommandBuilder; +import org.chromium.chrome.browser.user_education.UserEducationHelper; +import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter.HighlightParams; +import org.chromium.components.browser_ui.widget.highlight.ViewHighlighter.HighlightShape; +import org.chromium.components.feature_engagement.FeatureConstants; import org.chromium.third_party.android.swiperefresh.CircleImageView; import org.chromium.third_party.android.swiperefresh.SwipeRefreshLayout; @@ -19,14 +26,35 @@ * of direct child. */ public class FeedSwipeRefreshLayout extends SwipeRefreshLayout { + public static final int IPH_WAIT_TIME_MS = 5 * 1000; + + private final Activity mActivity; private View mTarget; // the target of the gesture. - private int mTouchSlop; + private final int mTouchSlop; private float mLastMotionY; private boolean mIsBeingDragged; - FeedSwipeRefreshLayout(Context context) { - super(context); - mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + FeedSwipeRefreshLayout(Activity activity) { + super(activity); + mActivity = activity; + mTouchSlop = ViewConfiguration.get(activity).getScaledTouchSlop(); + } + + /** Shows an IPH. */ + public void showIPH(UserEducationHelper helper) { + ViewGroup contentContainer = mActivity.findViewById(android.R.id.content); + if (contentContainer == null) return; + View toolbarView = contentContainer.findViewById(org.chromium.chrome.R.id.toolbar); + if (toolbarView == null) return; + helper.requestShowIPH(new IPHCommandBuilder(getContext().getResources(), + FeatureConstants.FEED_SWIPE_REFRESH_FEATURE, R.string.feed_swipe_refresh_iph, + R.string.accessibility_feed_swipe_refresh_iph) + .setAnchorView(toolbarView) + .setHighlightParams( + new HighlightParams(HighlightShape.CIRCLE)) + .setDismissOnTouch(true) + .setAutoDismissTimeout(IPH_WAIT_TIME_MS) + .build()); } private void ensureTarget() {
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/HeaderIphScrollListener.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/HeaderIphScrollListener.java index 135c2e8..978afe03 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/HeaderIphScrollListener.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/HeaderIphScrollListener.java
@@ -30,47 +30,18 @@ private static final float MIN_SCROLL_FRACTION = 0.1f; private static final float MAX_HEADER_POS_FRACTION = 0.35f; - /** - * Delegate to handle actions that are out of the scope of the listener. - */ - public interface Delegate { - /** - * Gets the feature engagement tracker. - */ - Tracker getFeatureEngagementTracker(); - - /** - * Shows the menu IPH. - */ - void showMenuIph(); - - /** - * Determines whether the feed is expanded (turned on). - */ - boolean isFeedExpanded(); - - /** - * Determines whether the user is signed in. - */ - boolean isSignedIn(); - - /** - * Determines whether the position of the feed header in the NTP container is suitable for - * showing the IPH. - */ - boolean isFeedHeaderPositionInContainerSuitableForIPH(float headerMaxPosFraction); - } - - private Delegate mDelegate; - private ScrollableContainerDelegate mScrollableContainerDelegate; + private final FeedIPHDelegate mDelegate; + private final ScrollableContainerDelegate mScrollableContainerDelegate; + private final Runnable mShowIPHRunnable; private float mMinScrollFraction; private float mHeaderMaxPosFraction; - HeaderIphScrollListener( - Delegate delegate, ScrollableContainerDelegate scrollableContainerDelegate) { + HeaderIphScrollListener(FeedIPHDelegate delegate, + ScrollableContainerDelegate scrollableContainerDelegate, Runnable showIPHRunnable) { mDelegate = delegate; mScrollableContainerDelegate = scrollableContainerDelegate; + mShowIPHRunnable = showIPHRunnable; mMinScrollFraction = MIN_SCROLL_FRACTION; mHeaderMaxPosFraction = MAX_HEADER_POS_FRACTION; @@ -105,11 +76,6 @@ return; } - // Don't do any calculation if the IPH cannot be triggered to avoid wasting efforts. - if (!tracker.wouldTriggerHelpUI(featureForIph)) { - return; - } - // Check whether the feed is expanded. if (!mDelegate.isFeedExpanded()) return; @@ -127,6 +93,6 @@ return; } - mDelegate.showMenuIph(); + mShowIPHRunnable.run(); } }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/RefreshIphScrollListener.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/RefreshIphScrollListener.java new file mode 100644 index 0000000..7d99577 --- /dev/null +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/RefreshIphScrollListener.java
@@ -0,0 +1,76 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.feed; + +import androidx.annotation.VisibleForTesting; + +import org.chromium.chrome.browser.ntp.ScrollListener; +import org.chromium.chrome.browser.ntp.ScrollListener.ScrollState; +import org.chromium.chrome.browser.ntp.ScrollableContainerDelegate; +import org.chromium.components.feature_engagement.FeatureConstants; +import org.chromium.components.feature_engagement.Tracker; +import org.chromium.components.feature_engagement.TriggerState; + +/** + * Creates a ScrollListener that triggers the IPH for swipe refresh. The listener removes itself + * from the list of observers when the IPH is determined to be already triggered. + * + * Triggering the IPH is based on: + * 1) The Discover section is expanded. + * 2) The last feed content fetch is 5 minutes old. + * 3) The user has scrolled up to the top. + */ +public class RefreshIphScrollListener implements ScrollListener { + @VisibleForTesting + static final long FETCH_TIME_AGE_THREASHOLD_MS = 5 * 60 * 1000; // 5 minutes. + + private final FeedIPHDelegate mDelegate; + private final ScrollableContainerDelegate mScrollableContainerDelegate; + private final Runnable mShowIPHRunnable; + private int mMaxLastVisibleFeedItemPosition; + + /** + * Constructor for IPH triggering. + */ + RefreshIphScrollListener(FeedIPHDelegate delegate, + ScrollableContainerDelegate scrollableContainerDelegate, Runnable showIPHRunnable) { + mDelegate = delegate; + mScrollableContainerDelegate = scrollableContainerDelegate; + mShowIPHRunnable = showIPHRunnable; + } + + @Override + public void onScrollStateChanged(@ScrollState int state) {} + + @Override + public void onScrolled(int dx, int dy) { + if (dy == 0) return; + maybeTriggerIPH(); + } + + @Override + public void onHeaderOffsetChanged(int verticalOffset) {} + + private void maybeTriggerIPH() { + final String featureForIph = FeatureConstants.FEED_SWIPE_REFRESH_FEATURE; + final Tracker tracker = mDelegate.getFeatureEngagementTracker(); + + if (tracker.getTriggerState(featureForIph) == TriggerState.HAS_BEEN_DISPLAYED) { + mScrollableContainerDelegate.removeScrollListener(this); + return; + } + + if (mDelegate.canScrollUp()) return; + + if (!mDelegate.isFeedExpanded()) return; + + long lastFetchTimeMs = mDelegate.getLastFetchTimeMs(); + // If last fetch time is not available, bail out. + if (lastFetchTimeMs == 0) return; + if (mDelegate.getCurrentTimeMs() - lastFetchTimeMs < FETCH_TIME_AGE_THREASHOLD_MS) return; + + mShowIPHRunnable.run(); + } +}
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/stream/Stream.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/stream/Stream.java index 55710bb..117c937 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/stream/Stream.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/stream/Stream.java
@@ -101,6 +101,11 @@ return result; } + /** Returns the last content fetch time. */ + default long getLastFetchTimeMs() { + return 0; + } + /** * Binds the feed to a particular view, manager, and scope. * When bound, the feed actively updates views and content. Assumes that whatever
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java index 3af8f664..98e8407 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStream.java
@@ -691,6 +691,11 @@ : Stream.super.hasUnreadContent(); } + @Override + public long getLastFetchTimeMs() { + return FeedStreamJni.get().getLastFetchTimeMs(mNativeFeedStream, FeedStream.this); + } + /** * Attempts to load more content if it can be triggered. * @return true if loading more content can be triggered. @@ -1048,5 +1053,6 @@ void surfaceOpened(long nativeFeedStream, FeedStream caller); void surfaceClosed(long nativeFeedStream, FeedStream caller); int getSurfaceId(long nativeFeedStream, FeedStream caller); + long getLastFetchTimeMs(long nativeFeedStream, FeedStream caller); } }
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/HeaderIphScrollListenerTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/HeaderIphScrollListenerTest.java index 4c7a2a8..63d4f882 100644 --- a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/HeaderIphScrollListenerTest.java +++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/HeaderIphScrollListenerTest.java
@@ -45,25 +45,22 @@ List<ParameterSet> parameters = new ArrayList<>(); // Trigger IPH. parameters.add(new ParameterSet().value(true, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 10, true, true, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 10, true, true, true)); // Don't trigger the IPH because the state is not set to has been displayed. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_BEEN_DISPLAYED, true, 10, true, true, true)); - // Don't trigger the IPH because because the tracker would not trigger. - parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, false, 10, true, true, true)); + TriggerState.HAS_BEEN_DISPLAYED, 10, true, true, true)); // Don't trigger the IPH because there was not enough scroll done. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 1, true, true, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 1, true, true, true)); // Don't trigger the IPH because the position in the stream is not suitable for the IPH. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 10, false, true, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 10, false, true, true)); // Don't trigger the IPH because the feed is not expanded. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 10, false, false, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 10, false, false, true)); // Don't trigger the IPH because the user is not signed in. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 10, false, true, false)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 10, false, true, false)); return parameters; } } @@ -78,7 +75,7 @@ } // Don't trigger the IPH because the scroll state is not IDLE. parameters.add(new ParameterSet().value(false, ScrollState.DRAGGING, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 10, true, true, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 10, true, true, true)); return parameters; } } @@ -93,7 +90,7 @@ } // Don't trigger the IPH because the vertical offset is 0. parameters.add(new ParameterSet().value(false, ScrollState.IDLE, - TriggerState.HAS_NOT_BEEN_DISPLAYED, true, 0, true, true, true)); + TriggerState.HAS_NOT_BEEN_DISPLAYED, 0, true, true, true)); return parameters; } } @@ -119,25 +116,19 @@ @Feature({"Feed"}) @ParameterAnnotations.UseMethodParameter(TestParamsForOnScroll.class) public void onScrollStateChanged_triggerIph(boolean expectEnabled, int scrollState, - int triggerState, boolean wouldTriggerHelpUI, int verticalScrollOffset, + int triggerState, int verticalScrollOffset, boolean isFeedHeaderPositionInRecyclerViewSuitableForIPH, boolean isFeedExpanded, boolean isSignedIn) { // Set Tracker mock. when(mTracker.getTriggerState(FeatureConstants.FEED_HEADER_MENU_FEATURE)) .thenReturn(triggerState); - when(mTracker.wouldTriggerHelpUI(FeatureConstants.FEED_HEADER_MENU_FEATURE)) - .thenReturn(wouldTriggerHelpUI); - HeaderIphScrollListener.Delegate iphDelegate = new HeaderIphScrollListener.Delegate() { + FeedIPHDelegate iphDelegate = new FeedIPHDelegate() { @Override public Tracker getFeatureEngagementTracker() { return mTracker; } @Override - public void showMenuIph() { - mHasShownMenuIph = true; - } - @Override public boolean isFeedExpanded() { return isFeedExpanded; } @@ -150,6 +141,18 @@ float headerMaxPosFraction) { return isFeedHeaderPositionInRecyclerViewSuitableForIPH; } + @Override + public long getCurrentTimeMs() { + return 0; + } + @Override + public long getLastFetchTimeMs() { + return 0; + } + @Override + public boolean canScrollUp() { + return false; + } }; ScrollableContainerDelegate scrollableContainerDelegate = @@ -173,8 +176,8 @@ }; // Trigger IPH through the scroll listener. - HeaderIphScrollListener listener = - new HeaderIphScrollListener(iphDelegate, scrollableContainerDelegate); + HeaderIphScrollListener listener = new HeaderIphScrollListener( + iphDelegate, scrollableContainerDelegate, () -> { mHasShownMenuIph = true; }); listener.onScrollStateChanged(scrollState); if (expectEnabled) { @@ -189,25 +192,19 @@ @Feature({"Feed"}) @ParameterAnnotations.UseMethodParameter(TestParamsForOnOffsetChanged.class) public void onScrollStateChanged_onHeaderOffsetChanged(boolean expectEnabled, int scrollState, - int triggerState, boolean wouldTriggerHelpUI, int verticalScrollOffset, + int triggerState, int verticalScrollOffset, boolean isFeedHeaderPositionInRecyclerViewSuitableForIPH, boolean isFeedExpanded, boolean isSignedIn) { // Set Tracker mock. when(mTracker.getTriggerState(FeatureConstants.FEED_HEADER_MENU_FEATURE)) .thenReturn(triggerState); - when(mTracker.wouldTriggerHelpUI(FeatureConstants.FEED_HEADER_MENU_FEATURE)) - .thenReturn(wouldTriggerHelpUI); - HeaderIphScrollListener.Delegate iphDelegate = new HeaderIphScrollListener.Delegate() { + FeedIPHDelegate iphDelegate = new FeedIPHDelegate() { @Override public Tracker getFeatureEngagementTracker() { return mTracker; } @Override - public void showMenuIph() { - mHasShownMenuIph = true; - } - @Override public boolean isFeedExpanded() { return isFeedExpanded; } @@ -220,6 +217,18 @@ float headerMaxPosFraction) { return isFeedHeaderPositionInRecyclerViewSuitableForIPH; } + @Override + public long getCurrentTimeMs() { + return 0; + } + @Override + public long getLastFetchTimeMs() { + return 0; + } + @Override + public boolean canScrollUp() { + return false; + } }; ScrollableContainerDelegate scrollableContainerDelegate = @@ -243,8 +252,8 @@ }; // Trigger IPH through the scroll listener. - HeaderIphScrollListener listener = - new HeaderIphScrollListener(iphDelegate, scrollableContainerDelegate); + HeaderIphScrollListener listener = new HeaderIphScrollListener( + iphDelegate, scrollableContainerDelegate, () -> { mHasShownMenuIph = true; }); listener.onHeaderOffsetChanged(-verticalScrollOffset); if (expectEnabled) {
diff --git a/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/RefreshIphScrollListenerTest.java b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/RefreshIphScrollListenerTest.java new file mode 100644 index 0000000..d44ddd2 --- /dev/null +++ b/chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/RefreshIphScrollListenerTest.java
@@ -0,0 +1,169 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.feed; + +import static org.mockito.Mockito.when; + +import android.support.test.InstrumentationRegistry; +import android.view.View; + +import androidx.test.filters.MediumTest; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import org.chromium.base.test.params.ParameterAnnotations; +import org.chromium.base.test.params.ParameterProvider; +import org.chromium.base.test.params.ParameterSet; +import org.chromium.base.test.params.ParameterizedRunner; +import org.chromium.base.test.util.Feature; +import org.chromium.chrome.browser.ntp.ScrollListener; +import org.chromium.chrome.browser.ntp.ScrollableContainerDelegate; +import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate; +import org.chromium.components.feature_engagement.FeatureConstants; +import org.chromium.components.feature_engagement.Tracker; +import org.chromium.components.feature_engagement.TriggerState; + +import java.util.ArrayList; +import java.util.List; + +/** Tests for {@link RefreshIphScrollListener}. */ +@RunWith(ParameterizedRunner.class) +@ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class) +public final class RefreshIphScrollListenerTest { + /** Parameter provider for testing the trigger of the IPH. */ + public static class TestParams implements ParameterProvider { + @Override + public Iterable<ParameterSet> getParameters() { + List<ParameterSet> parameters = new ArrayList<>(); + // Trigger the IPH when the user is signed in. + parameters.add(new ParameterSet().value(true, 10, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, true, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Trigger the IPH when the user is not signed in. + parameters.add(new ParameterSet().value(true, 10, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, false, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Don't trigger the IPH because the state is not set to has been displayed. + parameters.add(new ParameterSet().value(false, 10, TriggerState.HAS_BEEN_DISPLAYED, + true, true, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Don't trigger the IPH because the feed is not expanded. + parameters.add(new ParameterSet().value(false, 10, TriggerState.HAS_NOT_BEEN_DISPLAYED, + false, true, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Don't trigger the IPH because the scrollY is 0. + parameters.add(new ParameterSet().value(false, 0, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, true, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Don't trigger the IPH because the last fetch time is not available. + parameters.add(new ParameterSet().value(false, 10, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, true, 0, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS + 1, + false)); + // Don't trigger the IPH because the last fetch time is still within the threshold. + parameters.add(new ParameterSet().value(false, 10, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, true, 100, 99 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + false)); + // Don't trigger the IPH because the page can still scroll up. + parameters.add(new ParameterSet().value(false, 0, TriggerState.HAS_NOT_BEEN_DISPLAYED, + true, true, 100, 100 + RefreshIphScrollListener.FETCH_TIME_AGE_THREASHOLD_MS, + true)); + return parameters; + } + } + + @Mock + private Tracker mTracker; + private View mFeedRootView; + + private boolean mHasShownIPH; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + mFeedRootView = new View(InstrumentationRegistry.getContext()); + mFeedRootView.layout(0, 0, 0, 100); + } + + @Test + @MediumTest + @Feature({"Feed"}) + @ParameterAnnotations.UseMethodParameter(TestParams.class) + public void triggerIph(boolean expectEnabled, int scrollY, int triggerState, + boolean isFeedExpanded, boolean isSignedIn, long lastFetchTimeMs, long currentTimeMs, + boolean canScrollUp) { + // Set Tracker mock. + when(mTracker.getTriggerState(FeatureConstants.FEED_SWIPE_REFRESH_FEATURE)) + .thenReturn(triggerState); + + FeedIPHDelegate iphDelegate = new FeedIPHDelegate() { + @Override + public Tracker getFeatureEngagementTracker() { + return mTracker; + } + @Override + public boolean isFeedExpanded() { + return isFeedExpanded; + } + @Override + public boolean isSignedIn() { + return isSignedIn; + } + @Override + public boolean isFeedHeaderPositionInContainerSuitableForIPH( + float headerMaxPosFraction) { + return false; + } + @Override + public long getCurrentTimeMs() { + return currentTimeMs; + } + @Override + public long getLastFetchTimeMs() { + return lastFetchTimeMs; + } + @Override + public boolean canScrollUp() { + return canScrollUp; + } + }; + + ScrollableContainerDelegate scrollableContainerDelegate = + new ScrollableContainerDelegate() { + @Override + public void addScrollListener(ScrollListener listener) {} + @Override + public void removeScrollListener(ScrollListener listener) {} + @Override + public int getVerticalScrollOffset() { + return 10; + } + @Override + public int getRootViewHeight() { + return 100; + } + @Override + public int getTopPositionRelativeToContainerView(View childView) { + return 0; + } + }; + + // Trigger IPH through the scroll listener. + RefreshIphScrollListener listener = new RefreshIphScrollListener( + iphDelegate, scrollableContainerDelegate, () -> { mHasShownIPH = true; }); + listener.onScrolled(0, scrollY); + + if (expectEnabled) { + Assert.assertTrue(mHasShownIPH); + } else { + Assert.assertFalse(mHasShownIPH); + } + } +}
diff --git a/chrome/android/feed/feed_java_sources.gni b/chrome/android/feed/feed_java_sources.gni index f23f25b..5e1af6a 100644 --- a/chrome/android/feed/feed_java_sources.gni +++ b/chrome/android/feed/feed_java_sources.gni
@@ -20,6 +20,7 @@ ] feed_java_sources = [ + "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedIPHDelegate.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedLaunchReliabilityLoggingState.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedStreamViewResizer.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedSurfaceCoordinator.java", @@ -31,6 +32,7 @@ "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/HeaderIphScrollListener.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpFeedSurfaceLifecycleManager.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/NtpListContentManager.java", + "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/RefreshIphScrollListener.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/FeedFeatures.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/FeedSurfaceDelegate.java", "//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/shared/FeedSurfaceProvider.java", @@ -64,6 +66,7 @@ feed_test_java_sources = [ "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/FeedV2NewTabPageTest.java", "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/HeaderIphScrollListenerTest.java", + "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/RefreshIphScrollListenerTest.java", "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/v2/FeedProcessScopeDependencyProviderNativeTest.java", "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/v2/FeedV2TestHelper.java", "//chrome/android/feed/core/javatests/src/org/chromium/chrome/browser/feed/v2/TestFeedServer.java",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java index 7fc7211..38d5c725 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java
@@ -74,8 +74,8 @@ initializeNightModeStateProvider(); mNightModeStateProvider.addObserver(this); - applyThemeOverlays(); super.onCreate(savedInstanceState); + applyThemeOverlays(); // Activity level locale overrides must be done in onCreate. GlobalAppLocaleController.getInstance().maybeOverrideContextConfig(this);
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn index 3b9bf45..a23cc79 100644 --- a/chrome/app/BUILD.gn +++ b/chrome/app/BUILD.gn
@@ -6,6 +6,7 @@ import("//build/config/locales.gni") import("//build/config/ui.gni") import("//chrome/common/features.gni") +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") import("//components/gwp_asan/buildflags/buildflags.gni") import("//components/nacl/features.gni") import("//ppapi/buildflags/buildflags.gni") @@ -64,6 +65,9 @@ grit("generated_resources") { source = "generated_resources.grd" defines = chrome_grit_defines + if (is_cfm) { + defines += [ "is_cfm" ] + } output_dir = "$root_gen_dir/chrome" outputs = [ "grit/generated_resources.h" ] +
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index c98d6ab..475164b 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd
@@ -11654,6 +11654,15 @@ <message name="IDS_TAB_SEARCH_EXPERIMENT_DESCRIPTION" desc="Description for Tab Search experiment"> Enable a popup bubble in Top Chrome UI to search over currently open tabs. </message> + + <if expr="is_cfm"> + <message name="IDS_CFM_NETWORK_SETTINGS_TITLE" desc="Title for CFM Network Settings dialog"> + Network Settings + </message> + <message name="IDS_CFM_NETWORK_SETTINGS_AVAILABLE_NETWORKS" desc="Subheader displayed above list of discovered and available WiFi networks"> + Available WiFi networks + </message> + </if> </messages> </release> </grit>
diff --git a/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_AVAILABLE_NETWORKS.png.sha1 b/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_AVAILABLE_NETWORKS.png.sha1 new file mode 100644 index 0000000..0f91a42d --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_AVAILABLE_NETWORKS.png.sha1
@@ -0,0 +1 @@ +1935cdcfdd3552eb2e62427d2684407dd2cc75b6 \ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_TITLE.png.sha1 b/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_TITLE.png.sha1 new file mode 100644 index 0000000..0f91a42d --- /dev/null +++ b/chrome/app/generated_resources_grd/IDS_CFM_NETWORK_SETTINGS_TITLE.png.sha1
@@ -0,0 +1 @@ +1935cdcfdd3552eb2e62427d2684407dd2cc75b6 \ No newline at end of file
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 47ac6526..c4401342 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -4370,6 +4370,13 @@ kOmniboxOnFocusSuggestionsContextualWebVariations, "OmniboxGoogleOnContent")}, + {"omnibox-on-focus-suggestions-contextual-web-allow-srp", + flag_descriptions::kOmniboxOnFocusSuggestionsContextualWebAllowSRPName, + flag_descriptions:: + kOmniboxOnFocusSuggestionsContextualWebAllowSRPDescription, + kOsAll, + FEATURE_VALUE_TYPE(omnibox::kOnFocusSuggestionsContextualWebAllowSRP)}, + {"omnibox-experimental-suggest-scoring", flag_descriptions::kOmniboxExperimentalSuggestScoringName, flag_descriptions::kOmniboxExperimentalSuggestScoringDescription, kOsAll,
diff --git a/chrome/browser/android/feed/v2/feed_stream.cc b/chrome/browser/android/feed/v2/feed_stream.cc index 85bcfcd..dd64752 100644 --- a/chrome/browser/android/feed/v2/feed_stream.cc +++ b/chrome/browser/android/feed/v2/feed_stream.cc
@@ -254,5 +254,11 @@ return FeedStreamSurface::GetSurfaceId().GetUnsafeValue(); } +jlong FeedStream::GetLastFetchTimeMs( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) { + return feed_stream_api_->GetLastFetchTime(GetStreamType()).ToDoubleT() * 1000; +} + } // namespace android } // namespace feed
diff --git a/chrome/browser/android/feed/v2/feed_stream.h b/chrome/browser/android/feed/v2/feed_stream.h index 613ca0f..bde989db 100644 --- a/chrome/browser/android/feed/v2/feed_stream.h +++ b/chrome/browser/android/feed/v2/feed_stream.h
@@ -113,6 +113,9 @@ int GetSurfaceId(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); + jlong GetLastFetchTimeMs(JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj); + private: base::android::ScopedJavaGlobalRef<jobject> java_ref_; FeedApi* feed_stream_api_;
diff --git a/chrome/browser/apps/app_service/app_service_proxy_desktop.cc b/chrome/browser/apps/app_service/app_service_proxy_desktop.cc index 804786d..67ccc4b 100644 --- a/chrome/browser/apps/app_service/app_service_proxy_desktop.cc +++ b/chrome/browser/apps/app_service/app_service_proxy_desktop.cc
@@ -6,6 +6,7 @@ #include "chrome/browser/apps/app_service/publishers/extension_apps.h" #include "chrome/browser/web_applications/app_service/web_apps.h" +#include "chrome/browser/web_applications/web_app_provider.h" #include "components/services/app_service/app_service_impl.h" #if BUILDFLAG(IS_CHROMEOS_LACROS) @@ -69,8 +70,9 @@ // On non-ChromeOS, publishers run the remove dialog. apps::mojom::AppType app_type = app_registry_cache_.GetAppType(app_id); if (app_type == apps::mojom::AppType::kWeb) { - web_app::WebApps::UninstallImpl(profile_, app_id, uninstall_source, - parent_window); + web_app::WebApps::UninstallImpl( + web_app::WebAppProvider::GetForWebApps(profile_), app_id, + uninstall_source, parent_window); } }
diff --git a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc index 3c102ae6..9611488 100644 --- a/chrome/browser/apps/intent_helper/intent_picker_helpers.cc +++ b/chrome/browser/apps/intent_helper/intent_picker_helpers.cc
@@ -31,7 +31,9 @@ const GURL& url, std::vector<IntentPickerAppInfo> apps) { #if defined(OS_MAC) - apps = FindMacAppsForUrl(web_contents, url, std::move(apps)); + // On the Mac, if there is a Universal Link, it goes first. + if (absl::optional<IntentPickerAppInfo> mac_app = FindMacAppForUrl(url)) + apps.push_back(std::move(mac_app.value())); #endif return FindPwaForUrl(web_contents, url, std::move(apps)); }
diff --git a/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.h b/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.h index a73a9289..4baec4a2 100644 --- a/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.h +++ b/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.h
@@ -6,23 +6,19 @@ #define CHROME_BROWSER_APPS_INTENT_HELPER_MAC_INTENT_PICKER_HELPERS_H_ #include <string> -#include <vector> #include "chrome/browser/apps/intent_helper/apps_navigation_types.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" -namespace content { -class WebContents; -} // namespace content - namespace apps { -void LaunchMacApp(const GURL& url, const std::string& launch_name); +// Returns a native Mac app, if any, registered to own the given `url`. +absl::optional<IntentPickerAppInfo> FindMacAppForUrl(const GURL& url); -std::vector<IntentPickerAppInfo> FindMacAppsForUrl( - content::WebContents* web_contents, - const GURL& url, - std::vector<IntentPickerAppInfo> apps); +// Launches a native Mac app, specified by the `launch_name` (the path) returned +// by `FindMacAppForUrl` above, for the given `url`. +void LaunchMacApp(const GURL& url, const std::string& launch_name); } // namespace apps
diff --git a/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.mm b/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.mm index 9973ee0..3ff86618 100644 --- a/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.mm +++ b/chrome/browser/apps/intent_helper/mac_intent_picker_helpers.mm
@@ -9,7 +9,6 @@ #include "base/strings/sys_string_conversions.h" #include "net/base/mac/url_conversions.h" -#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/base/models/image_model.h" namespace apps { @@ -39,7 +38,9 @@ base::SysNSStringToUTF8(app_name)); } -absl::optional<IntentPickerAppInfo> AppInfoForUrl(const GURL& url) { +} // namespace + +absl::optional<IntentPickerAppInfo> FindMacAppForUrl(const GURL& url) { if (@available(macOS 10.15, *)) { NSURL* nsurl = net::NSURLWithGURL(url); if (!nsurl) @@ -54,8 +55,6 @@ return absl::nullopt; } -} // namespace - void LaunchMacApp(const GURL& url, const std::string& launch_name) { [[NSWorkspace sharedWorkspace] openURLs:@[ net::NSURLWithGURL(url) ] @@ -66,15 +65,4 @@ error:nil]; } -std::vector<IntentPickerAppInfo> FindMacAppsForUrl( - content::WebContents* web_contents, - const GURL& url, - std::vector<IntentPickerAppInfo> apps) { - // First, the Universal Link, if there is one. - if (auto app_info = AppInfoForUrl(url)) - apps.push_back(std::move(app_info.value())); - - return apps; -} - } // namespace apps
diff --git a/chrome/browser/ash/crosapi/keystore_service_ash.cc b/chrome/browser/ash/crosapi/keystore_service_ash.cc index 2267e4f5..549cdb7 100644 --- a/chrome/browser/ash/crosapi/keystore_service_ash.cc +++ b/chrome/browser/ash/crosapi/keystore_service_ash.cc
@@ -512,15 +512,15 @@ //------------------------------------------------------------------------------ -void KeystoreServiceAsh::ExtensionGenerateKey( +void KeystoreServiceAsh::DEPRECATED_ExtensionGenerateKey( mojom::KeystoreType keystore, mojom::KeystoreSigningAlgorithmPtr algorithm, const absl::optional<std::string>& extension_id, - ExtensionGenerateKeyCallback callback) { + DEPRECATED_ExtensionGenerateKeyCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (!extension_id) { std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( kUnsupportedLacrosVersion)); return; } @@ -530,23 +530,25 @@ absl::optional<TokenId> token_id = KeystoreToToken(keystore); if (!token_id) { std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( kUnsupportedKeystoreType)); return; } switch (algorithm->which()) { case mojom::KeystoreSigningAlgorithm::Tag::PKCS115: { - auto c = base::BindOnce(&KeystoreServiceAsh::DidExtensionGenerateKey, - std::move(callback)); + auto c = base::BindOnce( + &KeystoreServiceAsh::DEPRECATED_DidExtensionGenerateKey, + std::move(callback)); ext_platform_keys_service->GenerateRSAKey( token_id.value(), algorithm->get_pkcs115()->modulus_length, *extension_id, std::move(c)); break; } case mojom::KeystoreSigningAlgorithm::Tag::ECDSA: { - auto c = base::BindOnce(&KeystoreServiceAsh::DidExtensionGenerateKey, - std::move(callback)); + auto c = base::BindOnce( + &KeystoreServiceAsh::DEPRECATED_DidExtensionGenerateKey, + std::move(callback)); ext_platform_keys_service->GenerateECKey( token_id.value(), algorithm->get_ecdsa()->named_curve, *extension_id, std::move(c)); @@ -554,7 +556,7 @@ } default: { std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( chromeos::platform_keys::StatusToString( chromeos::platform_keys::Status:: kErrorAlgorithmNotSupported))); @@ -564,13 +566,13 @@ } // static -void KeystoreServiceAsh::DidExtensionGenerateKey( - ExtensionGenerateKeyCallback callback, +void KeystoreServiceAsh::DEPRECATED_DidExtensionGenerateKey( + DEPRECATED_ExtensionGenerateKeyCallback callback, const std::string& public_key, absl::optional<crosapi::mojom::KeystoreError> error) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - crosapi::mojom::ExtensionKeystoreBinaryResultPtr result_ptr = - mojom::ExtensionKeystoreBinaryResult::New(); + crosapi::mojom::DEPRECATED_ExtensionKeystoreBinaryResultPtr result_ptr = + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::New(); if (!error) { result_ptr->set_blob( std::vector<uint8_t>(public_key.begin(), public_key.end())); @@ -583,17 +585,18 @@ //------------------------------------------------------------------------------ -void KeystoreServiceAsh::ExtensionSign(KeystoreType keystore, - const std::vector<uint8_t>& public_key, - SigningScheme scheme, - const std::vector<uint8_t>& data, - const std::string& extension_id, - ExtensionSignCallback callback) { +void KeystoreServiceAsh::DEPRECATED_ExtensionSign( + KeystoreType keystore, + const std::vector<uint8_t>& public_key, + SigningScheme scheme, + const std::vector<uint8_t>& data, + const std::string& extension_id, + DEPRECATED_ExtensionSignCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); absl::optional<TokenId> token_id = KeystoreToToken(keystore); if (!token_id) { std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( kUnsupportedKeystoreType)); return; } @@ -604,14 +607,14 @@ switch (scheme) { case SigningScheme::kUnknown: std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( kUnsupportedAlgorithmType)); return; case SigningScheme::kRsassaPkcs1V15None: service->SignRSAPKCS1Raw( token_id, std::string(data.begin(), data.end()), std::string(public_key.begin(), public_key.end()), extension_id, - base::BindOnce(&KeystoreServiceAsh::DidExtensionSign, + base::BindOnce(&KeystoreServiceAsh::DEPRECATED_DidExtensionSign, std::move(callback))); return; case SigningScheme::kRsassaPkcs1V15Sha1: @@ -648,26 +651,28 @@ break; } - service->SignDigest(token_id, std::string(data.begin(), data.end()), - std::string(public_key.begin(), public_key.end()), - key_type, hash_algorithm, extension_id, - base::BindOnce(&KeystoreServiceAsh::DidExtensionSign, - std::move(callback))); + service->SignDigest( + token_id, std::string(data.begin(), data.end()), + std::string(public_key.begin(), public_key.end()), key_type, + hash_algorithm, extension_id, + base::BindOnce(&KeystoreServiceAsh::DEPRECATED_DidExtensionSign, + std::move(callback))); } // static -void KeystoreServiceAsh::DidExtensionSign( - ExtensionSignCallback callback, +void KeystoreServiceAsh::DEPRECATED_DidExtensionSign( + DEPRECATED_ExtensionSignCallback callback, const std::string& signature, absl::optional<mojom::KeystoreError> error) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); if (!error) { - std::move(callback).Run(mojom::ExtensionKeystoreBinaryResult::NewBlob( - std::vector<uint8_t>(signature.begin(), signature.end()))); + std::move(callback).Run( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewBlob( + std::vector<uint8_t>(signature.begin(), signature.end()))); } else { std::move(callback).Run( - mojom::ExtensionKeystoreBinaryResult::NewErrorMessage( + mojom::DEPRECATED_ExtensionKeystoreBinaryResult::NewErrorMessage( chromeos::platform_keys::KeystoreErrorToString(error.value()))); } }
diff --git a/chrome/browser/ash/crosapi/keystore_service_ash.h b/chrome/browser/ash/crosapi/keystore_service_ash.h index e1beeb5..7aad390 100644 --- a/chrome/browser/ash/crosapi/keystore_service_ash.h +++ b/chrome/browser/ash/crosapi/keystore_service_ash.h
@@ -79,16 +79,6 @@ const std::vector<uint8_t>& certificate, mojom::KeystoreSigningAlgorithmName algorithm_name, DEPRECATED_GetPublicKeyCallback callback) override; - void ExtensionGenerateKey(mojom::KeystoreType keystore, - mojom::KeystoreSigningAlgorithmPtr algorithm, - const absl::optional<std::string>& extension_id, - ExtensionGenerateKeyCallback callback) override; - void ExtensionSign(KeystoreType keystore, - const std::vector<uint8_t>& public_key, - SigningScheme scheme, - const std::vector<uint8_t>& data, - const std::string& extension_id, - ExtensionSignCallback callback) override; void GenerateKey(mojom::KeystoreType keystore, mojom::KeystoreSigningAlgorithmPtr algorithm, GenerateKeyCallback callback) override; @@ -110,6 +100,21 @@ const std::vector<uint8_t>& public_key, CanUserGrantPermissionForKeyCallback callback) override; + // DEPRECATED, use `GenerateKey` instead. + void DEPRECATED_ExtensionGenerateKey( + mojom::KeystoreType keystore, + mojom::KeystoreSigningAlgorithmPtr algorithm, + const absl::optional<std::string>& extension_id, + DEPRECATED_ExtensionGenerateKeyCallback callback) override; + // DEPRECATED, use `Sign` instead. + void DEPRECATED_ExtensionSign( + KeystoreType keystore, + const std::vector<uint8_t>& public_key, + SigningScheme scheme, + const std::vector<uint8_t>& data, + const std::string& extension_id, + DEPRECATED_ExtensionSignCallback callback) override; + private: // Returns a correct instance of PlatformKeysService to use. If a specific // browser context was passed into constructor, the corresponding @@ -145,13 +150,6 @@ chromeos::platform_keys::Status status); static void DidRemoveCertificate(RemoveCertificateCallback callback, chromeos::platform_keys::Status status); - static void DidExtensionGenerateKey( - ExtensionGenerateKeyCallback callback, - const std::string& public_key, - absl::optional<crosapi::mojom::KeystoreError> error); - static void DidExtensionSign(ExtensionSignCallback callback, - const std::string& signature, - absl::optional<mojom::KeystoreError> error); static void DidGenerateKey(GenerateKeyCallback callback, const std::string& public_key, chromeos::platform_keys::Status status); @@ -166,6 +164,16 @@ static void DidAddKeyTags(AddKeyTagsCallback callback, chromeos::platform_keys::Status status); + // Parts of deprecated methods. + static void DEPRECATED_DidExtensionGenerateKey( + DEPRECATED_ExtensionGenerateKeyCallback callback, + const std::string& public_key, + absl::optional<crosapi::mojom::KeystoreError> error); + static void DEPRECATED_DidExtensionSign( + DEPRECATED_ExtensionSignCallback callback, + const std::string& signature, + absl::optional<mojom::KeystoreError> error); + // Can be nullptr, should not be used directly, use GetPlatformKeys() instead. // Stores a pointer to a specific PlatformKeysService if it was specified in // constructor.
diff --git a/chrome/browser/ash/file_manager/file_manager_string_util.cc b/chrome/browser/ash/file_manager/file_manager_string_util.cc index 976c769..4a618d43 100644 --- a/chrome/browser/ash/file_manager/file_manager_string_util.cc +++ b/chrome/browser/ash/file_manager/file_manager_string_util.cc
@@ -1018,6 +1018,9 @@ dict->SetBoolKey("FILES_SINGLE_PARTITION_FORMAT_ENABLED", base::FeatureList::IsEnabled( chromeos::features::kFilesSinglePartitionFormat)); + dict->SetBoolKey( + "FILES_BANNER_FRAMEWORK", + base::FeatureList::IsEnabled(chromeos::features::kFilesBannerFramework)); dict->SetStringKey("UI_LOCALE", locale); }
diff --git a/chrome/browser/ash/login/existing_user_controller.h b/chrome/browser/ash/login/existing_user_controller.h index d85dcfe..f3e1fcf6 100644 --- a/chrome/browser/ash/login/existing_user_controller.h +++ b/chrome/browser/ash/login/existing_user_controller.h
@@ -26,6 +26,8 @@ #include "chrome/browser/ash/login/saml/password_sync_token_checkers_collection.h" #include "chrome/browser/ash/login/screens/encryption_migration_mode.h" #include "chrome/browser/ash/login/session/user_session_manager.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chrome/browser/ash/login/signin/oauth2_token_initializer.h" #include "chrome/browser/ash/login/ui/login_display.h" // TODO(https://crbug.com/1164001): move CrosSettings to forward declaration // when moved to chrome/browser/ash/. @@ -51,7 +53,6 @@ namespace chromeos { class LoginDisplay; -class OAuth2TokenInitializer; namespace login { class NetworkStateHelper;
diff --git a/chrome/browser/ash/login/login_constants.h b/chrome/browser/ash/login/login_constants.h index d18e99bb..4bdcd66 100644 --- a/chrome/browser/ash/login/login_constants.h +++ b/chrome/browser/ash/login/login_constants.h
@@ -46,4 +46,20 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +namespace constants { +using ::chromeos::constants::kDefaultGaiaLockScreenOfflineSigninTimeLimitDays; +using ::chromeos::constants::kDefaultGaiaOfflineSigninTimeLimitDays; +using ::chromeos::constants::kDefaultLockScreenReauthenticationEnabled; +using ::chromeos::constants::kDefaultSAMLOfflineSigninTimeLimit; +using ::chromeos::constants::kDefaultSamlPasswordExpirationAdvanceWarningDays; +using ::chromeos::constants::kDefaultSamlInSessionPasswordChangeEnabled; +using ::chromeos::constants::kDefaultSamlLockScreenOfflineSigninTimeLimitDays; +using ::chromeos::constants::kLockScreenOfflineSigninTimeLimitDaysMatchLogin; +using ::chromeos::constants::kOfflineSigninTimeLimitNotSet; +} // namespace constants +} // namespace ash + #endif // CHROME_BROWSER_ASH_LOGIN_LOGIN_CONSTANTS_H_
diff --git a/chrome/browser/ash/login/login_pref_names.h b/chrome/browser/ash/login/login_pref_names.h index 7fc3519..d0423d3 100644 --- a/chrome/browser/ash/login/login_pref_names.h +++ b/chrome/browser/ash/login/login_pref_names.h
@@ -35,10 +35,20 @@ // source migration is finished. namespace ash { namespace prefs { +using ::chromeos::prefs::kGaiaLastOnlineSignInTime; +using ::chromeos::prefs::kGaiaLockScreenOfflineSigninTimeLimitDays; +using ::chromeos::prefs::kGaiaOfflineSigninTimeLimitDays; +using ::chromeos::prefs::kLockScreenReauthenticationEnabled; using ::chromeos::prefs::kOobeMarketingOptInChoice; using ::chromeos::prefs::kOobeMarketingOptInScreenFinished; using ::chromeos::prefs::kOobeOnboardingTime; using ::chromeos::prefs::kOobeScreenPending; +using ::chromeos::prefs::kSAMLLastGAIASignInTime; +using ::chromeos::prefs::kSAMLOfflineSigninTimeLimit; +using ::chromeos::prefs::kSamlInSessionPasswordChangeEnabled; +using ::chromeos::prefs::kSamlLockScreenOfflineSigninTimeLimitDays; +using ::chromeos::prefs::kSamlPasswordExpirationAdvanceWarningDays; +using ::chromeos::prefs::kSamlPasswordSyncToken; } } // namespace ash
diff --git a/chrome/browser/ash/login/password_change_browsertest.cc b/chrome/browser/ash/login/password_change_browsertest.cc index c605283..d420e07 100644 --- a/chrome/browser/ash/login/password_change_browsertest.cc +++ b/chrome/browser/ash/login/password_change_browsertest.cc
@@ -18,7 +18,7 @@ #include "chrome/browser/ash/login/reauth_stats.h" #include "chrome/browser/ash/login/session/user_session_manager.h" #include "chrome/browser/ash/login/session/user_session_manager_test_api.h" -#include "chrome/browser/ash/login/signin/signin_error_notifier_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier.h" #include "chrome/browser/ash/login/signin_specifics.h" #include "chrome/browser/ash/login/test/js_checker.h" #include "chrome/browser/ash/login/test/login_manager_mixin.h"
diff --git a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc index 259efda3..9614dc95 100644 --- a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc +++ b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.cc
@@ -18,14 +18,13 @@ #include "net/base/url_util.h" #include "testing/gtest/include/gtest/gtest.h" -using net::test_server::BasicHttpResponse; -using net::test_server::HttpRequest; -using net::test_server::HttpResponse; - -namespace chromeos { - +namespace ash { namespace { +using ::net::test_server::BasicHttpResponse; +using ::net::test_server::HttpRequest; +using ::net::test_server::HttpResponse; + // The header that the server returns in a HTTP response to ask the client to // authenticate. constexpr char kAuthenticateResponseHeader[] = "WWW-Authenticate"; @@ -346,4 +345,4 @@ challenge_response_.reset(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.h b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.h index 2b7c59939..3466001 100644 --- a/chrome/browser/ash/login/saml/fake_saml_idp_mixin.h +++ b/chrome/browser/ash/login/saml/fake_saml_idp_mixin.h
@@ -9,18 +9,17 @@ #include <string> #include "base/files/file_path.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chrome/browser/ash/login/test/fake_gaia_mixin.h" +#include "chrome/test/base/mixin_based_in_process_browser_test.h" #include "chromeos/dbus/dbus_method_call_status.h" #include "net/test/embedded_test_server/embedded_test_server.h" -#include "third_party/abseil-cpp/absl/types/optional.h" - -#include "chrome/test/base/mixin_based_in_process_browser_test.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" +#include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" -namespace chromeos { - -class FakeGaiaMixin; +namespace ash { class FakeSamlIdpMixin final : public InProcessBrowserTestMixin { public: @@ -111,6 +110,6 @@ absl::optional<std::string> challenge_response_; }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_FAKE_SAML_IDP_MIXIN_H_
diff --git a/chrome/browser/ash/login/saml/in_session_password_change_manager.cc b/chrome/browser/ash/login/saml/in_session_password_change_manager.cc index d9d6ad6..a182583 100644 --- a/chrome/browser/ash/login/saml/in_session_password_change_manager.cc +++ b/chrome/browser/ash/login/saml/in_session_password_change_manager.cc
@@ -29,8 +29,7 @@ #include "content/public/browser/browser_thread.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -namespace chromeos { - +namespace ash { namespace { using PasswordSource = InSessionPasswordChangeManager::PasswordSource; @@ -197,7 +196,7 @@ DCHECK(primary_user_); // Add `this` as a SessionActivationObserver to see when the screen is locked. - auto* session_controller = ash::SessionController::Get(); + auto* session_controller = SessionController::Get(); if (session_controller) { session_controller->AddSessionActivationObserverForAccountId( primary_user_->GetAccountId(), this); @@ -206,7 +205,7 @@ InSessionPasswordChangeManager::~InSessionPasswordChangeManager() { // Remove `this` as a SessionActivationObserver. - auto* session_controller = ash::SessionController::Get(); + auto* session_controller = SessionController::Get(); if (session_controller) { session_controller->RemoveSessionActivationObserverForAccountId( primary_user_->GetAccountId(), this); @@ -413,7 +412,7 @@ DismissExpiryNotification(); PasswordChangeDialog::Dismiss(); ConfirmPasswordChangeDialog::Dismiss(); - if (ash::features::IsSamlNotificationOnPasswordChangeSuccessEnabled()) { + if (features::IsSamlNotificationOnPasswordChangeSuccessEnabled()) { PasswordChangeSuccessNotification::Show(primary_profile_); } // We request a new sync token. It will be updated locally and signal the fact @@ -478,4 +477,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/in_session_password_change_manager.h b/chrome/browser/ash/login/saml/in_session_password_change_manager.h index 3362766fd..bc1585b 100644 --- a/chrome/browser/ash/login/saml/in_session_password_change_manager.h +++ b/chrome/browser/ash/login/saml/in_session_password_change_manager.h
@@ -14,6 +14,10 @@ #include "base/time/time.h" #include "chrome/browser/ash/login/saml/password_sync_token_fetcher.h" #include "chromeos/login/auth/auth_status_consumer.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chromeos/login/auth/cryptohome_authenticator.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chromeos/login/auth/user_context.h" class Profile; @@ -21,9 +25,7 @@ class User; } -namespace chromeos { -class CryptohomeAuthenticator; -class UserContext; +namespace ash { // There is at most one instance of this task, which is part of the // InSessionPasswordChangeManager singleton. Having a separate class means that @@ -61,7 +63,7 @@ // feature is enabled). class InSessionPasswordChangeManager : public AuthStatusConsumer, - public ash::SessionActivationObserver, + public SessionActivationObserver, public PasswordSyncTokenFetcher::Consumer { public: // Events in the in-session SAML password change flow. @@ -162,7 +164,7 @@ void OnPasswordChangeDetected(const UserContext& user_context) override; void OnAuthSuccess(const UserContext& user_context) override; - // ash::SessionActivationObserver + // SessionActivationObserver void OnSessionActivated(bool activated) override; void OnLockStateChanged(bool locked) override; @@ -193,6 +195,12 @@ DISALLOW_COPY_AND_ASSIGN(InSessionPasswordChangeManager); }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::InSessionPasswordChangeManager; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_IN_SESSION_PASSWORD_CHANGE_MANAGER_H_
diff --git a/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc b/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc index 265fd5d..00158aed 100644 --- a/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc +++ b/chrome/browser/ash/login/saml/in_session_password_change_manager_unittest.cc
@@ -24,12 +24,11 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using message_center::Notification; - -namespace chromeos { - +namespace ash { namespace { +using ::message_center::Notification; + constexpr base::TimeDelta kOneHour = base::TimeDelta::FromHours(1); constexpr base::TimeDelta kOneDay = base::TimeDelta::FromDays(1); constexpr base::TimeDelta kAdvanceWarningTime = base::TimeDelta::FromDays(14); @@ -304,4 +303,4 @@ EXPECT_TRUE(Notification().has_value()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager.cc b/chrome/browser/ash/login/saml/in_session_password_sync_manager.cc index 1de1747..80174ec 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager.cc +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager.cc
@@ -26,7 +26,7 @@ #include "components/user_manager/user_manager_base.h" #include "content/public/browser/storage_partition.h" -namespace chromeos { +namespace ash { InSessionPasswordSyncManager::InSessionPasswordSyncManager( Profile* primary_profile) @@ -285,4 +285,4 @@ return lock_screen_start_reauth_dialog_->GetDialogWidth(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager.h b/chrome/browser/ash/login/saml/in_session_password_sync_manager.h index b93b66a..e47d714b 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager.h +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager.h
@@ -14,6 +14,10 @@ #include "chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h" #include "chromeos/components/proximity_auth/screenlock_bridge.h" #include "chromeos/login/auth/auth_status_consumer.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chromeos/login/auth/cryptohome_authenticator.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chromeos/login/auth/extended_authenticator.h" #include "chromeos/login/auth/user_context.h" #include "components/account_id/account_id.h" #include "components/keyed_service/core/keyed_service.h" @@ -24,11 +28,9 @@ class User; } -namespace chromeos { -class CryptohomeAuthenticator; -class ExtendedAuthenticator; +namespace ash { -using PasswordChangedCallback = base::RepeatingClosure; +using PasswordChangedCallback = ::base::RepeatingClosure; // Manages SAML password sync for multiple customer devices. Handles online // re-auth requests triggered by online signin policy or by checking validity @@ -150,6 +152,12 @@ base::WeakPtrFactory<InSessionPasswordSyncManager> weak_factory_{this}; }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::InSessionPasswordSyncManager; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_IN_SESSION_PASSWORD_SYNC_MANAGER_H_
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc index 59e5d93..884d8386 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.cc
@@ -14,7 +14,7 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/browser_context.h" -namespace chromeos { +namespace ash { // static InSessionPasswordSyncManagerFactory* @@ -25,7 +25,7 @@ // static InSessionPasswordSyncManager* InSessionPasswordSyncManagerFactory::GetForProfile(Profile* profile) { - if (!ash::features::IsSamlReauthenticationOnLockscreenEnabled()) + if (!features::IsSamlReauthenticationOnLockscreenEnabled()) return nullptr; return static_cast<InSessionPasswordSyncManager*>( @@ -51,4 +51,4 @@ return new InSessionPasswordSyncManager(profile); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h index 5ad8a7a..034b67a 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_factory.h
@@ -12,8 +12,7 @@ class Profile; -namespace chromeos { - +namespace ash { class InSessionPasswordSyncManager; // Singleton that owns all InSessionPasswordSyncManagers and associates them @@ -37,6 +36,12 @@ content::BrowserContext* context) const override; }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::InSessionPasswordSyncManagerFactory; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_IN_SESSION_PASSWORD_SYNC_MANAGER_FACTORY_H_
diff --git a/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc b/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc index b2731e8..cb58d7d 100644 --- a/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc +++ b/chrome/browser/ash/login/saml/in_session_password_sync_manager_unittest.cc
@@ -21,8 +21,7 @@ #include "components/user_manager/user_names.h" #include "content/public/test/browser_task_environment.h" -namespace chromeos { - +namespace ash { namespace { const char kSAMLUserId1[] = "12345"; @@ -311,4 +310,4 @@ EXPECT_FALSE(manager_->IsLockReauthEnabled()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/mock_lock_handler.cc b/chrome/browser/ash/login/saml/mock_lock_handler.cc index 792190f8..89d8afe3 100644 --- a/chrome/browser/ash/login/saml/mock_lock_handler.cc +++ b/chrome/browser/ash/login/saml/mock_lock_handler.cc
@@ -4,10 +4,10 @@ #include "chrome/browser/ash/login/saml/mock_lock_handler.h" -namespace chromeos { +namespace ash { MockLockHandler::MockLockHandler() = default; MockLockHandler::~MockLockHandler() = default; -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/mock_lock_handler.h b/chrome/browser/ash/login/saml/mock_lock_handler.h index d13030a..d576fbf 100644 --- a/chrome/browser/ash/login/saml/mock_lock_handler.h +++ b/chrome/browser/ash/login/saml/mock_lock_handler.h
@@ -11,7 +11,7 @@ #include "chromeos/components/proximity_auth/screenlock_bridge.h" #include "testing/gmock/include/gmock/gmock.h" -namespace chromeos { +namespace ash { // Mock implementation of proximity_auth::ScreenlockBridge::LockHandler. class MockLockHandler : public proximity_auth::ScreenlockBridge::LockHandler { @@ -48,6 +48,6 @@ const std::string& key_label)); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_MOCK_LOCK_HANDLER_H_
diff --git a/chrome/browser/ash/login/saml/password_change_extension_browsertest.cc b/chrome/browser/ash/login/saml/password_change_extension_browsertest.cc index 554eb10..d2ec404 100644 --- a/chrome/browser/ash/login/saml/password_change_extension_browsertest.cc +++ b/chrome/browser/ash/login/saml/password_change_extension_browsertest.cc
@@ -17,12 +17,12 @@ #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" -using net::test_server::BasicHttpResponse; -using net::test_server::HttpMethod; -using net::test_server::HttpRequest; -using net::test_server::HttpResponse; +namespace ash { -namespace chromeos { +using ::net::test_server::BasicHttpResponse; +using ::net::test_server::HttpMethod; +using ::net::test_server::HttpRequest; +using ::net::test_server::HttpResponse; constexpr char kPasswordChangePageTemplate[] = R"(<html><body onload='document.forms[0].submit();'> @@ -221,4 +221,4 @@ WaitForPasswordChangeDetected(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_change_success_detection_browsertest.cc b/chrome/browser/ash/login/saml/password_change_success_detection_browsertest.cc index 1b5a139..c9ea8c60 100644 --- a/chrome/browser/ash/login/saml/password_change_success_detection_browsertest.cc +++ b/chrome/browser/ash/login/saml/password_change_success_detection_browsertest.cc
@@ -17,12 +17,12 @@ #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" -using net::test_server::BasicHttpResponse; -using net::test_server::HttpMethod; -using net::test_server::HttpRequest; -using net::test_server::HttpResponse; +namespace ash { -namespace chromeos { +using ::net::test_server::BasicHttpResponse; +using ::net::test_server::HttpMethod; +using ::net::test_server::HttpRequest; +using ::net::test_server::HttpResponse; constexpr char kPasswordChangePageTemplate[] = "<html><body onload='document.forms[0].submit();'>" @@ -207,4 +207,4 @@ WaitForPasswordChangeDetected(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_change_success_notification.cc b/chrome/browser/ash/login/saml/password_change_success_notification.cc index b09ff84..29e20ea 100644 --- a/chrome/browser/ash/login/saml/password_change_success_notification.cc +++ b/chrome/browser/ash/login/saml/password_change_success_notification.cc
@@ -19,18 +19,17 @@ #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_delegate.h" -using message_center::Notification; -using message_center::NotificationDelegate; -using message_center::NotificationType; -using message_center::NotifierId; -using message_center::NotifierType; -using message_center::RichNotificationData; -using message_center::SystemNotificationWarningLevel; - -namespace chromeos { - +namespace ash { namespace { +using ::message_center::Notification; +using ::message_center::NotificationDelegate; +using ::message_center::NotificationType; +using ::message_center::NotifierId; +using ::message_center::NotifierType; +using ::message_center::RichNotificationData; +using ::message_center::SystemNotificationWarningLevel; + // Unique ID for this notification. const char kNotificationId[] = "saml.password-change-success-notification"; @@ -57,7 +56,7 @@ // NotifierId for histogram reporting. static const base::NoDestructor<NotifierId> kNotifierId( - message_center::NotifierType::SYSTEM_COMPONENT, kNotificationId); + NotifierType::SYSTEM_COMPONENT, kNotificationId); // Leaving this empty means the notification is attributed to the system - // ie "Chromium OS" or similar. @@ -74,10 +73,10 @@ RichNotificationData rich_notification_data; - const scoped_refptr<message_center::NotificationDelegate> delegate = - base::MakeRefCounted<message_center::NotificationDelegate>(); + const scoped_refptr<NotificationDelegate> delegate = + base::MakeRefCounted<NotificationDelegate>(); - std::unique_ptr<Notification> notification = ash::CreateSystemNotification( + std::unique_ptr<Notification> notification = CreateSystemNotification( kNotificationType, kNotificationId, title, body, *kEmptyDisplaySource, *kEmptyOriginUrl, *kNotifierId, rich_notification_data, delegate, kIcon, kWarningLevel); @@ -90,4 +89,4 @@ nds->Display(kNotificationHandlerType, *notification, /*metadata=*/nullptr); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_change_success_notification.h b/chrome/browser/ash/login/saml/password_change_success_notification.h index 52c3882..27fce742 100644 --- a/chrome/browser/ash/login/saml/password_change_success_notification.h +++ b/chrome/browser/ash/login/saml/password_change_success_notification.h
@@ -11,7 +11,7 @@ class Profile; -namespace chromeos { +namespace ash { // Utility functions to show a password change success notification. class PasswordChangeSuccessNotification { @@ -20,6 +20,6 @@ static void Show(Profile* profile); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_CHANGE_SUCCESS_NOTIFICATION_H_
diff --git a/chrome/browser/ash/login/saml/password_change_success_notification_unittest.cc b/chrome/browser/ash/login/saml/password_change_success_notification_unittest.cc index d309664..4d373b8 100644 --- a/chrome/browser/ash/login/saml/password_change_success_notification_unittest.cc +++ b/chrome/browser/ash/login/saml/password_change_success_notification_unittest.cc
@@ -14,12 +14,11 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using message_center::Notification; - -namespace chromeos { - +namespace ash { namespace { +using ::message_center::Notification; + inline std::u16string utf16(const char* ascii) { return base::ASCIIToUTF16(ascii); } @@ -48,4 +47,4 @@ Notification()->message()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_expiry_notification.cc b/chrome/browser/ash/login/saml/password_expiry_notification.cc index 9e601b7..fb13723 100644 --- a/chrome/browser/ash/login/saml/password_expiry_notification.cc +++ b/chrome/browser/ash/login/saml/password_expiry_notification.cc
@@ -36,22 +36,18 @@ #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_delegate.h" -using message_center::ButtonInfo; -using message_center::HandleNotificationClickDelegate; -using message_center::Notification; -using message_center::NotificationDelegate; -using message_center::NotificationObserver; -using message_center::NotificationType; -using message_center::NotifierId; -using message_center::NotifierType; -using message_center::RichNotificationData; -using message_center::SystemNotificationWarningLevel; -using message_center::ThunkNotificationDelegate; - -namespace chromeos { - +namespace ash { namespace { +using ::message_center::ButtonInfo; +using ::message_center::Notification; +using ::message_center::NotificationDelegate; +using ::message_center::NotificationType; +using ::message_center::NotifierId; +using ::message_center::NotifierType; +using ::message_center::RichNotificationData; +using ::message_center::SystemNotificationWarningLevel; + // Unique ID for this notification. const char kNotificationId[] = "saml.password-expiry-notification"; @@ -92,7 +88,7 @@ protected: ~PasswordExpiryNotificationDelegate() override; - // message_center::NotificationDelegate: + // NotificationDelegate: void Close(bool by_user) override; void Click(const absl::optional<int>& button_index, const absl::optional<std::u16string>& reply) override; @@ -128,7 +124,7 @@ // NotifierId for histogram reporting. static const base::NoDestructor<NotifierId> kNotifierId( - message_center::NotifierType::SYSTEM_COMPONENT, kNotificationId); + NotifierType::SYSTEM_COMPONENT, kNotificationId); // Leaving this empty means the notification is attributed to the system - // ie "Chromium OS" or similar. @@ -143,7 +139,7 @@ const scoped_refptr<PasswordExpiryNotificationDelegate> delegate = base::MakeRefCounted<PasswordExpiryNotificationDelegate>(); - std::unique_ptr<Notification> notification = ash::CreateSystemNotification( + std::unique_ptr<Notification> notification = CreateSystemNotification( kNotificationType, kNotificationId, title, body, *kEmptyDisplaySource, *kEmptyOriginUrl, *kNotifierId, rich_notification_data, delegate, kIcon, kWarningLevel); @@ -176,4 +172,4 @@ kNotificationHandlerType, kNotificationId); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_expiry_notification.h b/chrome/browser/ash/login/saml/password_expiry_notification.h index eae791d..29e190e 100644 --- a/chrome/browser/ash/login/saml/password_expiry_notification.h +++ b/chrome/browser/ash/login/saml/password_expiry_notification.h
@@ -11,7 +11,7 @@ class Profile; -namespace chromeos { +namespace ash { // Utility functions to show or hide a password expiry notification. class PasswordExpiryNotification { @@ -28,6 +28,12 @@ static void Dismiss(Profile* profile); }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::PasswordExpiryNotification; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_EXPIRY_NOTIFICATION_H_
diff --git a/chrome/browser/ash/login/saml/password_expiry_notification_unittest.cc b/chrome/browser/ash/login/saml/password_expiry_notification_unittest.cc index a5c39e3c..876259f5 100644 --- a/chrome/browser/ash/login/saml/password_expiry_notification_unittest.cc +++ b/chrome/browser/ash/login/saml/password_expiry_notification_unittest.cc
@@ -24,12 +24,11 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using message_center::Notification; - -namespace chromeos { - +namespace ash { namespace { +using ::message_center::Notification; + inline std::u16string utf16(const char* ascii) { return base::ASCIIToUTF16(ascii); } @@ -99,4 +98,4 @@ EXPECT_FALSE(Notification().has_value()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.cc b/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.cc index f5634d75..a9699aee 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.cc
@@ -8,7 +8,7 @@ #include "components/user_manager/known_user.h" #include "components/user_manager/user_manager.h" -namespace chromeos { +namespace ash { const net::BackoffEntry::Policy PasswordSyncTokenCheckersCollection::kFetchTokenRetryBackoffPolicy = { @@ -61,4 +61,4 @@ sync_token_checkers_.erase(sync_token); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.h b/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.h index 605ea40..f550033 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.h +++ b/chrome/browser/ash/login/saml/password_sync_token_checkers_collection.h
@@ -15,6 +15,10 @@ #include "net/base/backoff_entry.h" namespace chromeos { +class ExistingUserControllerForcedOnlineAuthTest; +} + +namespace ash { // Helper class to handle PasswordSyncTokenLoginChecker objects for all users // on the login screen. @@ -41,8 +45,8 @@ void OnInvalidSyncToken(const AccountId& account_id) override; private: + friend class chromeos::ExistingUserControllerForcedOnlineAuthTest; friend class PasswordSyncTokenLoginCheckerTest; - friend class ExistingUserControllerForcedOnlineAuthTest; std::unordered_map<std::string, std::unique_ptr<PasswordSyncTokenLoginChecker>> @@ -50,12 +54,12 @@ net::BackoffEntry sync_token_retry_backoff_; }; -} // namespace chromeos +} // namespace ash // TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos // source migration is finished. -namespace ash { -using ::chromeos::PasswordSyncTokenCheckersCollection; +namespace chromeos { +using ::ash::PasswordSyncTokenCheckersCollection; } #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_CHECKERS_COLLECTION_H_
diff --git a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc index a291553..daec739 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc
@@ -36,9 +36,9 @@ #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/mojom/url_response_head.mojom.h" -namespace chromeos { - +namespace ash { namespace { + // These values should not be renumbered and numeric values should never // be reused. This must be kept in sync with SamlInSessionPasswordSyncEvent // in tools/metrics/histogram/enums.xml @@ -386,4 +386,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_fetcher.h b/chrome/browser/ash/login/saml/password_sync_token_fetcher.h index a47079d..f3e74f2 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_fetcher.h +++ b/chrome/browser/ash/login/saml/password_sync_token_fetcher.h
@@ -26,7 +26,7 @@ class PrimaryAccountAccessTokenFetcher; } // namespace signin -namespace chromeos { +namespace ash { // Records start of polling event in UMA histogram. void RecordStartOfSyncTokenPollingUMA(bool in_session); @@ -99,6 +99,12 @@ base::WeakPtrFactory<PasswordSyncTokenFetcher> weak_ptr_factory_{this}; }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::PasswordSyncTokenFetcher; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_FETCHER_H_
diff --git a/chrome/browser/ash/login/saml/password_sync_token_login_checker.cc b/chrome/browser/ash/login/saml/password_sync_token_login_checker.cc index 8988a67..66d129c 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_login_checker.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_login_checker.cc
@@ -12,10 +12,11 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/storage_partition.h" -namespace chromeos { - +namespace ash { namespace { + const base::TimeDelta kPollingInterval = base::TimeDelta::FromMinutes(5); + } PasswordSyncTokenLoginChecker::PasswordSyncTokenLoginChecker( @@ -117,4 +118,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_login_checker.h b/chrome/browser/ash/login/saml/password_sync_token_login_checker.h index 8eed68f..342fd4b 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_login_checker.h +++ b/chrome/browser/ash/login/saml/password_sync_token_login_checker.h
@@ -16,7 +16,7 @@ #include "components/account_id/account_id.h" #include "net/base/backoff_entry.h" -namespace chromeos { +namespace ash { // Verifies local copy of the password sync token by executing API call. If // token is invalid calls InSessionPasswordSyncManager to request online re-auth @@ -78,12 +78,12 @@ base::WeakPtrFactory<PasswordSyncTokenLoginChecker> weak_ptr_factory_{this}; }; -} // namespace chromeos +} // namespace ash // TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos // source migration is finished. -namespace ash { -using ::chromeos::PasswordSyncTokenLoginChecker; +namespace chromeos { +using ::ash::PasswordSyncTokenLoginChecker; } #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_LOGIN_CHECKER_H_
diff --git a/chrome/browser/ash/login/saml/password_sync_token_login_checker_unittest.cc b/chrome/browser/ash/login/saml/password_sync_token_login_checker_unittest.cc index 532639da..8064fa58 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_login_checker_unittest.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_login_checker_unittest.cc
@@ -14,8 +14,7 @@ #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" -namespace chromeos { - +namespace ash { namespace { const char kSAMLUserId[] = "12345"; @@ -120,4 +119,4 @@ "ChromeOS.SAML.InSessionPasswordSyncEvent", 1, 1); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier.cc b/chrome/browser/ash/login/saml/password_sync_token_verifier.cc index f6ad824..92ab4e03 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier.cc
@@ -13,10 +13,11 @@ #include "components/user_manager/known_user.h" #include "content/public/browser/storage_partition.h" -namespace chromeos { - +namespace ash { namespace { + const char dummy_token[] = "dummy-token"; + } const net::BackoffEntry::Policy @@ -183,4 +184,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier.h b/chrome/browser/ash/login/saml/password_sync_token_verifier.h index f08b733..1ea2ea5a 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier.h +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier.h
@@ -22,7 +22,7 @@ class User; } -namespace chromeos { +namespace ash { // Verifies local copy of the password sync token by executing API call. If // token is invalid calls InSessionPasswordSyncManager to request online re-auth @@ -75,12 +75,6 @@ friend class PasswordSyncTokenVerifierTest; }; -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos -// source migration is finished. -namespace ash { -using ::chromeos::PasswordSyncTokenVerifier; -} +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_VERIFIER_H_
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc index dc1c7d5..8fae953 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.cc
@@ -14,7 +14,7 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/browser_context.h" -namespace chromeos { +namespace ash { // static PasswordSyncTokenVerifierFactory* @@ -51,4 +51,4 @@ return new PasswordSyncTokenVerifier(profile); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h index d550c8a..2ef228e 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_factory.h
@@ -10,8 +10,7 @@ class Profile; -namespace chromeos { - +namespace ash { class PasswordSyncTokenVerifier; // Singleton that owns all PasswordSyncTokenVerifiers and associates them @@ -34,12 +33,6 @@ content::BrowserContext* context) const override; }; -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos -// source migration is finished. -namespace ash { -using ::chromeos::PasswordSyncTokenVerifierFactory; -} +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PASSWORD_SYNC_TOKEN_VERIFIER_FACTORY_H_
diff --git a/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc b/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc index 4874cc4..fa34ea8 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_verifier_unittest.cc
@@ -19,8 +19,7 @@ #include "components/user_manager/user_names.h" #include "content/public/test/browser_task_environment.h" -namespace chromeos { - +namespace ash { namespace { const char kSAMLUserId1[] = "12345"; @@ -244,4 +243,4 @@ "ChromeOS.SAML.InSessionPasswordSyncEvent", 0, 1); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/public_saml_url_fetcher.cc b/chrome/browser/ash/login/saml/public_saml_url_fetcher.cc index 1a92b78..976a15c 100644 --- a/chrome/browser/ash/login/saml/public_saml_url_fetcher.cc +++ b/chrome/browser/ash/login/saml/public_saml_url_fetcher.cc
@@ -25,8 +25,11 @@ #include "services/network/public/cpp/shared_url_loader_factory.h" #include "url/gurl.h" -namespace em = enterprise_management; +namespace ash { namespace { + +namespace em = ::enterprise_management; + std::string GetDeviceId() { policy::BrowserPolicyConnectorChromeOS* connector = g_browser_process->platform_part()->browser_policy_connector_chromeos(); @@ -35,7 +38,7 @@ std::string GetAccountId(std::string user_id) { std::vector<policy::DeviceLocalAccount> device_local_accounts = - policy::GetDeviceLocalAccounts(chromeos::CrosSettings::Get()); + policy::GetDeviceLocalAccounts(CrosSettings::Get()); for (auto account : device_local_accounts) { if (account.user_id == user_id) { return account.account_id; @@ -43,9 +46,9 @@ } return std::string(); } + } // namespace -namespace chromeos { PublicSamlUrlFetcher::PublicSamlUrlFetcher(AccountId account_id) : account_id_(GetAccountId(account_id.GetUserEmail())) {} @@ -71,9 +74,8 @@ service, policy::DeviceManagementService::JobConfiguration::TYPE_REQUEST_SAML_URL, GetDeviceId(), /*critical=*/false, - policy::DMAuth::FromDMToken(chromeos::DeviceSettingsService::Get() - ->policy_data() - ->request_token()), + policy::DMAuth::FromDMToken( + DeviceSettingsService::Get()->policy_data()->request_token()), /*oauth_token=*/absl::nullopt, g_browser_process->system_network_context_manager() ->GetSharedURLLoaderFactory(), @@ -123,4 +125,4 @@ std::move(callback_).Run(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/public_saml_url_fetcher.h b/chrome/browser/ash/login/saml/public_saml_url_fetcher.h index 385cbe7..d838bbae67 100644 --- a/chrome/browser/ash/login/saml/public_saml_url_fetcher.h +++ b/chrome/browser/ash/login/saml/public_saml_url_fetcher.h
@@ -19,7 +19,7 @@ class DeviceManagementResponse; } // namespace enterprise_management -namespace chromeos { +namespace ash { // This class handles sending request for public SAML session URL to DM // server, waits for the response and retrieves the redirect URL from it. @@ -62,6 +62,12 @@ DISALLOW_COPY_AND_ASSIGN(PublicSamlUrlFetcher); }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::PublicSamlUrlFetcher; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_PUBLIC_SAML_URL_FETCHER_H_
diff --git a/chrome/browser/ash/login/saml/saml_browsertest.cc b/chrome/browser/ash/login/saml/saml_browsertest.cc index efca85b..8d115e9 100644 --- a/chrome/browser/ash/login/saml/saml_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_browsertest.cc
@@ -10,7 +10,6 @@ #include "ash/constants/ash_features.h" #include "ash/constants/ash_switches.h" #include "ash/public/cpp/login_screen_test_api.h" - #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" @@ -118,20 +117,18 @@ #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h" -namespace em = enterprise_management; - -using base::test::RunOnceCallback; - -using testing::_; -using testing::Invoke; -using testing::NiceMock; -using testing::Return; -using testing::WithArgs; - -namespace chromeos { - +namespace ash { namespace { +namespace em = ::enterprise_management; + +using ::base::test::RunOnceCallback; +using ::testing::_; +using ::testing::Invoke; +using ::testing::NiceMock; +using ::testing::Return; +using ::testing::WithArgs; + const test::UIPath kPasswordInput = {"saml-confirm-password", "passwordInput"}; const test::UIPath kPasswordConfirmInput = {"saml-confirm-password", "confirmPasswordInput"}; @@ -214,8 +211,7 @@ OobeBaseTest::SetUpCommandLine(command_line); command_line->AppendSwitch(switches::kOobeSkipPostLogin); - command_line->AppendSwitch( - chromeos::switches::kAllowFailedPolicyFetchForTest); + command_line->AppendSwitch(switches::kAllowFailedPolicyFetchForTest); // TODO(crbug.com/1177416) - Fix this with a proper SSL solution. command_line->AppendSwitch(::switches::kIgnoreCertificateErrors); @@ -312,9 +308,9 @@ void ExpectFatalErrorMessage(const std::string& error_message) { OobeScreenWaiter(SignInFatalErrorView::kScreenId).Wait(); - EXPECT_TRUE(ash::LoginScreenTestApi::IsShutdownButtonShown()); - EXPECT_FALSE(ash::LoginScreenTestApi::IsGuestButtonShown()); - EXPECT_FALSE(ash::LoginScreenTestApi::IsAddUserButtonShown()); + EXPECT_TRUE(LoginScreenTestApi::IsShutdownButtonShown()); + EXPECT_FALSE(LoginScreenTestApi::IsGuestButtonShown()); + EXPECT_FALSE(LoginScreenTestApi::IsAddUserButtonShown()); test::OobeJS().ExpectElementText(error_message, {"signin-fatal-error", "subtitle"}); @@ -1068,7 +1064,7 @@ "$('gaia-signin').authenticator_.addEventListener('ready', function() {" " window.domAutomationController.send('ready');" "});")); - ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton()); + ASSERT_TRUE(LoginScreenTestApi::ClickAddUserButton()); std::string message; do { ASSERT_TRUE(message_queue.WaitForMessage(&message)); @@ -1077,7 +1073,7 @@ void SAMLPolicyTest::ShowSAMLInterstitial() { WaitForOobeUI(); - ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton()); + ASSERT_TRUE(LoginScreenTestApi::ClickAddUserButton()); test::OobeJS() .CreateVisibilityWaiter(true, {"gaia-signin", "saml-interstitial"}) ->Wait(); @@ -1127,7 +1123,7 @@ } void SAMLPolicyTest::GetCookies() { - Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUserUnsafe( + Profile* profile = ProfileHelper::Get()->GetProfileByUserUnsafe( user_manager::UserManager::Get()->GetActiveUser()); ASSERT_TRUE(profile); base::RunLoop run_loop; @@ -1165,7 +1161,7 @@ // authenticated without SAML. IN_PROC_BROWSER_TEST_F(SAMLPolicyTest, NoSAML) { // Verify that offline login is allowed. - ash::LoginScreenTestApi::SubmitPassword( + LoginScreenTestApi::SubmitPassword( AccountId::FromUserEmail(kNonSAMLUserEmail), "password", true /* check_if_submittable */); test::WaitForPrimaryUserSessionStart(); @@ -1184,7 +1180,7 @@ // authenticated with SAML is allowed to log in offline. IN_PROC_BROWSER_TEST_F(SAMLPolicyTest, SAMLNoLimit) { // Verify that offline login is allowed. - ash::LoginScreenTestApi::SubmitPassword( + LoginScreenTestApi::SubmitPassword( AccountId::FromUserEmail(saml_test_users::kFirstUserCorpExampleComEmail), "password", true /* check_if_submittable */); test::WaitForPrimaryUserSessionStart(); @@ -1203,9 +1199,8 @@ // authenticated via SAML, that user is forced to log in online the next time. IN_PROC_BROWSER_TEST_F(SAMLPolicyTest, SAMLZeroLimit) { // Verify that offline login is not allowed. - ASSERT_TRUE( - ash::LoginScreenTestApi::IsForcedOnlineSignin(AccountId::FromUserEmail( - saml_test_users::kFirstUserCorpExampleComEmail))); + ASSERT_TRUE(LoginScreenTestApi::IsForcedOnlineSignin(AccountId::FromUserEmail( + saml_test_users::kFirstUserCorpExampleComEmail))); } IN_PROC_BROWSER_TEST_F(SAMLPolicyTest, PRE_PRE_TransferCookiesAffiliated) { @@ -1329,8 +1324,8 @@ ShowSAMLInterstitial(); ClickBackOnSAMLInterstitialPage(); // Back button should hide OOBE dialog. - EXPECT_FALSE(ash::LoginScreenTestApi::IsOobeDialogVisible()); - EXPECT_TRUE(ash::LoginScreenTestApi::IsAddUserButtonShown()); + EXPECT_FALSE(LoginScreenTestApi::IsOobeDialogVisible()); + EXPECT_TRUE(LoginScreenTestApi::IsAddUserButtonShown()); ShowSAMLInterstitial(); ClickNextOnSAMLInterstitialPage(); @@ -1520,7 +1515,7 @@ protected: void SetAllowedUrlsPolicy(const std::vector<std::string>& allowed_urls); - chromeos::ScopedTestingCrosSettings settings_helper_; + ScopedTestingCrosSettings settings_helper_; StubCrosSettingsProvider* settings_provider_ = nullptr; attestation::MockMachineCertificateUploader mock_cert_uploader_; @@ -1760,4 +1755,4 @@ attestation::TpmChallengeKeyResultCode::kTimeoutError, 1); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc b/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc index 7419749e..7a04bb2 100644 --- a/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc +++ b/chrome/browser/ash/login/saml/saml_lockscreen_browsertest.cc
@@ -31,9 +31,9 @@ #include "net/dns/mock_host_resolver.h" #include "testing/gtest/include/gtest/gtest.h" -namespace chromeos { - +namespace ash { namespace { + const test::UIPath kSamlContainer = {"main-element", "body"}; const test::UIPath kMainVerifyButton = {"main-element", "nextButtonVerifyScreen"}; @@ -43,6 +43,7 @@ constexpr char kTestAuthSIDCookie1[] = "fake-auth-SID-cookie-1"; constexpr char kTestAuthLSIDCookie1[] = "fake-auth-LSID-cookie-1"; constexpr char kTestRefreshToken[] = "fake-refresh-token"; + } // namespace class LockscreenWebUiTest : public MixinBasedInProcessBrowserTest { @@ -58,8 +59,7 @@ ~LockscreenWebUiTest() override = default; void SetUpCommandLine(base::CommandLine* command_line) override { - command_line->AppendSwitch( - chromeos::switches::kAllowFailedPolicyFetchForTest); + command_line->AppendSwitch(switches::kAllowFailedPolicyFetchForTest); // TODO(crbug.com/1177416) - Fix this with a proper SSL solution. command_line->AppendSwitch(::switches::kIgnoreCertificateErrors); @@ -173,7 +173,7 @@ base::test::ScopedFeatureList feature_list_; private: - chromeos::InSessionPasswordSyncManager* password_sync_manager_ = nullptr; + InSessionPasswordSyncManager* password_sync_manager_ = nullptr; chromeos::LockScreenStartReauthDialog* reauth_dialog_ = nullptr; LockScreenStartReauthUI* reauth_webui_controller_ = nullptr; LockScreenReauthHandler* main_handler_ = nullptr; @@ -218,4 +218,4 @@ ScreenLockerTester().WaitForUnlock(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/saml_metric_utils.cc b/chrome/browser/ash/login/saml/saml_metric_utils.cc index a53cedf..7437a744 100644 --- a/chrome/browser/ash/login/saml/saml_metric_utils.cc +++ b/chrome/browser/ash/login/saml/saml_metric_utils.cc
@@ -9,7 +9,7 @@ #include "base/strings/string_util.h" #include "net/cert/x509_certificate.h" -namespace chromeos { +namespace ash { namespace metrics { namespace { @@ -86,4 +86,4 @@ } } // namespace metrics -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/saml_metric_utils.h b/chrome/browser/ash/login/saml/saml_metric_utils.h index ca9a8c1..eed621d 100644 --- a/chrome/browser/ash/login/saml/saml_metric_utils.h +++ b/chrome/browser/ash/login/saml/saml_metric_utils.h
@@ -7,12 +7,20 @@ #include <string> -namespace chromeos { +namespace ash { namespace metrics { void RecordSAMLProvider(const std::string& provider); } // namespace metrics +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +namespace metrics { +using ::ash::metrics::RecordSAMLProvider; +} } // namespace chromeos #endif // CHROME_BROWSER_ASH_LOGIN_SAML_SAML_METRIC_UTILS_H_
diff --git a/chrome/browser/ash/login/saml/saml_profile_prefs.cc b/chrome/browser/ash/login/saml/saml_profile_prefs.cc index 774506b..51d887b 100644 --- a/chrome/browser/ash/login/saml/saml_profile_prefs.cc +++ b/chrome/browser/ash/login/saml/saml_profile_prefs.cc
@@ -9,7 +9,7 @@ #include "chromeos/login/auth/saml_password_attributes.h" #include "components/prefs/pref_registry_simple.h" -namespace chromeos { +namespace ash { void RegisterSamlProfilePrefs(PrefRegistrySimple* registry) { // All SAML prefs are not syncable by default. In order to make a new pref @@ -47,4 +47,4 @@ SamlPasswordAttributes::RegisterProfilePrefs(registry); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/saml_profile_prefs.h b/chrome/browser/ash/login/saml/saml_profile_prefs.h index 0c63210..8657616a 100644 --- a/chrome/browser/ash/login/saml/saml_profile_prefs.h +++ b/chrome/browser/ash/login/saml/saml_profile_prefs.h
@@ -7,11 +7,17 @@ class PrefRegistrySimple; -namespace chromeos { +namespace ash { // Registers all Saml-related profile prefs. void RegisterSamlProfilePrefs(PrefRegistrySimple* registry); -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::RegisterSamlProfilePrefs; +} #endif // CHROME_BROWSER_ASH_LOGIN_SAML_SAML_PROFILE_PREFS_H_
diff --git a/chrome/browser/ash/login/saml/security_token_saml_browsertest.cc b/chrome/browser/ash/login/saml/security_token_saml_browsertest.cc index a141c8f..398855c 100644 --- a/chrome/browser/ash/login/saml/security_token_saml_browsertest.cc +++ b/chrome/browser/ash/login/saml/security_token_saml_browsertest.cc
@@ -42,8 +42,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" -namespace chromeos { - +namespace ash { namespace { // Pattern for the DeviceLoginScreenAutoSelectCertificateForUrls admin policy @@ -76,7 +75,7 @@ // Returns the profile into which login-screen extensions are force-installed. Profile* GetOriginalSigninProfile() { - return chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile(); + return ProfileHelper::GetSigninProfile()->GetOriginalProfile(); } } // namespace @@ -122,8 +121,7 @@ command_line->AppendSwitch(switches::kOobeSkipPostLogin); // Avoid aborting the user sign-in due to the user policy requests not being // faked in the test. - command_line->AppendSwitch( - chromeos::switches::kAllowFailedPolicyFetchForTest); + command_line->AppendSwitch(switches::kAllowFailedPolicyFetchForTest); } void SetUpOnMainThread() override { @@ -266,4 +264,4 @@ EXPECT_EQ(1, pin_dialog_shown_count()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.cc b/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.cc index 42f57830..307788ad 100644 --- a/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.cc +++ b/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.cc
@@ -17,8 +17,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" -namespace chromeos { - +namespace ash { namespace { // Name of the "RelayState" URL parameter from the SAML specification. @@ -132,4 +131,4 @@ return assertion_url; } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.h b/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.h index c7f313a..48803a80 100644 --- a/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.h +++ b/chrome/browser/ash/login/saml/test_client_cert_saml_idp_mixin.h
@@ -9,6 +9,8 @@ #include <string> #include <vector> +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chrome/browser/ash/login/test/fake_gaia_mixin.h" #include "chrome/test/base/mixin_based_in_process_browser_test.h" #include "net/test/embedded_test_server/embedded_test_server.h" @@ -21,9 +23,7 @@ } // namespace test_server } // namespace net -namespace chromeos { - -class FakeGaiaMixin; +namespace ash { class TestClientCertSamlIdpMixin final : public InProcessBrowserTestMixin { public: @@ -65,6 +65,6 @@ net::EmbeddedTestServer::TYPE_HTTPS}; }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SAML_TEST_CLIENT_CERT_SAML_IDP_MIXIN_H_
diff --git a/chrome/browser/ash/login/session/chrome_session_manager.cc b/chrome/browser/ash/login/session/chrome_session_manager.cc index f65cae28..eb055bc 100644 --- a/chrome/browser/ash/login/session/chrome_session_manager.cc +++ b/chrome/browser/ash/login/session/chrome_session_manager.cc
@@ -33,12 +33,12 @@ #include "chrome/browser/ash/login/wizard_controller.h" #include "chrome/browser/ash/policy/core/browser_policy_connector_chromeos.h" #include "chrome/browser/ash/policy/handlers/tpm_auto_update_mode_policy_handler.h" +#include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/boot_times_recorder.h" -#include "chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h" #include "chrome/browser/chromeos/tether/tether_service.h" #include "chrome/browser/chromeos/tpm_firmware_update_notification.h" #include "chrome/browser/chromeos/u2f_notification.h"
diff --git a/chrome/browser/ash/login/session/user_session_initializer.cc b/chrome/browser/ash/login/session/user_session_initializer.cc index 2d7d20e..a0bb2ef 100644 --- a/chrome/browser/ash/login/session/user_session_initializer.cc +++ b/chrome/browser/ash/login/session/user_session_initializer.cc
@@ -24,14 +24,14 @@ #include "chrome/browser/ash/login/startup_utils.h" #include "chrome/browser/ash/plugin_vm/plugin_vm_manager.h" #include "chrome/browser/ash/plugin_vm/plugin_vm_manager_factory.h" +#include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/browser/ash/settings/cros_settings.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" #include "chrome/browser/chromeos/eche_app/eche_app_manager_factory.h" #include "chrome/browser/chromeos/phonehub/phone_hub_manager_factory.h" -#include "chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "chrome/browser/component_updater/crl_set_component_installer.h" #include "chrome/browser/component_updater/sth_set_component_remover.h" #include "chrome/browser/google/google_brand_chromeos.h"
diff --git a/chrome/browser/ash/login/session/user_session_manager.h b/chrome/browser/ash/login/session/user_session_manager.h index 816045d..e6fd255c 100644 --- a/chrome/browser/ash/login/session/user_session_manager.h +++ b/chrome/browser/ash/login/session/user_session_manager.h
@@ -57,7 +57,6 @@ class PrefRegistrySimple; class PrefService; class Profile; -class TokenHandleFetcher; class TurnSyncOnHelper; namespace user_manager { @@ -67,6 +66,7 @@ namespace ash { class LoginDisplayHost; class OnboardingUserActivityCounter; +class TokenHandleFetcher; namespace test { class UserSessionManagerTestApi;
diff --git a/chrome/browser/ash/login/signin/auth_error_observer.cc b/chrome/browser/ash/login/signin/auth_error_observer.cc index ac9a8f5..a7c01260c 100644 --- a/chrome/browser/ash/login/signin/auth_error_observer.cc +++ b/chrome/browser/ash/login/signin/auth_error_observer.cc
@@ -18,7 +18,7 @@ #include "components/sync/driver/sync_service.h" #include "components/user_manager/user_manager.h" -namespace chromeos { +namespace ash { // static bool AuthErrorObserver::ShouldObserve(Profile* profile) { @@ -100,4 +100,4 @@ } } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/auth_error_observer.h b/chrome/browser/ash/login/signin/auth_error_observer.h index ab1586f8..d45359bb 100644 --- a/chrome/browser/ash/login/signin/auth_error_observer.h +++ b/chrome/browser/ash/login/signin/auth_error_observer.h
@@ -13,7 +13,7 @@ class GoogleServiceAuthError; class Profile; -namespace chromeos { +namespace ash { // This class is responsible for detecting authentication problems reported // by sync service and SigninErrorController on a user profile. @@ -54,6 +54,6 @@ DISALLOW_COPY_AND_ASSIGN(AuthErrorObserver); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_AUTH_ERROR_OBSERVER_H_
diff --git a/chrome/browser/ash/login/signin/auth_error_observer_factory.cc b/chrome/browser/ash/login/signin/auth_error_observer_factory.cc index e1689894..8b13f27 100644 --- a/chrome/browser/ash/login/signin/auth_error_observer_factory.cc +++ b/chrome/browser/ash/login/signin/auth_error_observer_factory.cc
@@ -10,7 +10,7 @@ #include "chrome/browser/sync/sync_service_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" -namespace chromeos { +namespace ash { AuthErrorObserverFactory::AuthErrorObserverFactory() : BrowserContextKeyedServiceFactory( @@ -42,4 +42,4 @@ return new AuthErrorObserver(profile); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/auth_error_observer_factory.h b/chrome/browser/ash/login/signin/auth_error_observer_factory.h index 05d8422..025e1a0 100644 --- a/chrome/browser/ash/login/signin/auth_error_observer_factory.h +++ b/chrome/browser/ash/login/signin/auth_error_observer_factory.h
@@ -11,8 +11,7 @@ class Profile; -namespace chromeos { - +namespace ash { class AuthErrorObserver; // Singleton that owns all AuthErrorObserver and associates them with @@ -40,6 +39,6 @@ DISALLOW_COPY_AND_ASSIGN(AuthErrorObserverFactory); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_AUTH_ERROR_OBSERVER_FACTORY_H_
diff --git a/chrome/browser/ash/login/signin/device_id_browsertest.cc b/chrome/browser/ash/login/signin/device_id_browsertest.cc index 2a96292..1f6d649 100644 --- a/chrome/browser/ash/login/signin/device_id_browsertest.cc +++ b/chrome/browser/ash/login/signin/device_id_browsertest.cc
@@ -29,6 +29,7 @@ #include "components/user_manager/user_manager.h" #include "content/public/test/browser_test.h" +namespace ash { namespace { char kRefreshToken1[] = "refresh_token_1"; @@ -44,8 +45,6 @@ } // namespace -namespace chromeos { - class DeviceIDTest : public OobeBaseTest, public user_manager::UserManager::Observer { public: @@ -120,14 +119,14 @@ } void SignInOffline(const std::string& user_id, const std::string& password) { - ash::LoginScreenTestApi::SubmitPassword(AccountId::FromUserEmail(user_id), - FakeGaiaMixin::kFakeUserPassword, - false /* check_if_submittable */); + LoginScreenTestApi::SubmitPassword(AccountId::FromUserEmail(user_id), + FakeGaiaMixin::kFakeUserPassword, + false /* check_if_submittable */); test::WaitForPrimaryUserSessionStart(); } void RemoveUser(const AccountId& account_id) { - ASSERT_TRUE(ash::LoginScreenTestApi::RemoveUser(account_id)); + ASSERT_TRUE(LoginScreenTestApi::RemoveUser(account_id)); user_removal_loop_->Run(); } @@ -190,7 +189,7 @@ EXPECT_FALSE(device_id.empty()); EXPECT_EQ(device_id, GetDeviceIdFromGAIA(kRefreshToken1)); - ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton()); + ASSERT_TRUE(LoginScreenTestApi::ClickAddUserButton()); SignInOnline(FakeGaiaMixin::kFakeUserEmail, FakeGaiaMixin::kFakeUserPassword, kRefreshToken2, FakeGaiaMixin::kFakeUserGaiaId); CheckDeviceIDIsConsistent( @@ -221,7 +220,7 @@ // Add the second user. IN_PROC_BROWSER_TEST_F(DeviceIDTest, PRE_PRE_NewUsers) { - ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton()); + ASSERT_TRUE(LoginScreenTestApi::ClickAddUserButton()); SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken1, kSecondUserGaiaId); CheckDeviceIDIsConsistent(AccountId::FromUserEmail(kSecondUserEmail), @@ -236,7 +235,7 @@ // Add the second user back. Verify that device ID has been changed. IN_PROC_BROWSER_TEST_F(DeviceIDTest, NewUsers) { EXPECT_TRUE(GetDeviceId(AccountId::FromUserEmail(kSecondUserEmail)).empty()); - ASSERT_TRUE(ash::LoginScreenTestApi::ClickAddUserButton()); + ASSERT_TRUE(LoginScreenTestApi::ClickAddUserButton()); SignInOnline(kSecondUserEmail, kSecondUserPassword, kSecondUserRefreshToken2, kSecondUserGaiaId); CheckDeviceIDIsConsistent(AccountId::FromUserEmail(kSecondUserEmail), @@ -310,4 +309,4 @@ AccountId::FromUserEmail(FakeGaiaMixin::kFakeUserEmail), std::string()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/merge_session_navigation_throttle.cc b/chrome/browser/ash/login/signin/merge_session_navigation_throttle.cc index 743e63e..6c90d97 100644 --- a/chrome/browser/ash/login/signin/merge_session_navigation_throttle.cc +++ b/chrome/browser/ash/login/signin/merge_session_navigation_throttle.cc
@@ -11,13 +11,13 @@ #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" +namespace ash { namespace { // Maximum wait time for merge session process. constexpr base::TimeDelta kTotalWaitTime = base::TimeDelta::FromSeconds(10); -chromeos::OAuth2LoginManager* GetOAuth2LoginManager( - content::WebContents* web_contents) { +OAuth2LoginManager* GetOAuth2LoginManager(content::WebContents* web_contents) { content::BrowserContext* browser_context = web_contents->GetBrowserContext(); if (!browser_context) return nullptr; @@ -26,9 +26,9 @@ if (!profile) return nullptr; - return chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile( - profile); + return OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); } + } // namespace // static @@ -75,17 +75,15 @@ void MergeSessionNavigationThrottle::OnSessionRestoreStateChanged( Profile* user_profile, - chromeos::OAuth2LoginManager::SessionRestoreState state) { - chromeos::OAuth2LoginManager* manager = - GetOAuth2LoginManager(navigation_handle()->GetWebContents()); + OAuth2LoginManager::SessionRestoreState state) { + auto* manager = GetOAuth2LoginManager(navigation_handle()->GetWebContents()); if (!manager->ShouldBlockTabLoading()) { Proceed(); } } bool MergeSessionNavigationThrottle::BeforeDefer() { - chromeos::OAuth2LoginManager* manager = - GetOAuth2LoginManager(navigation_handle()->GetWebContents()); + auto* manager = GetOAuth2LoginManager(navigation_handle()->GetWebContents()); if (manager && manager->ShouldBlockTabLoading()) { login_manager_observation_.Observe(manager); proceed_timer_.Start(FROM_HERE, kTotalWaitTime, this, @@ -97,11 +95,12 @@ void MergeSessionNavigationThrottle::Proceed() { proceed_timer_.Stop(); - chromeos::OAuth2LoginManager* manager = - GetOAuth2LoginManager(navigation_handle()->GetWebContents()); + auto* manager = GetOAuth2LoginManager(navigation_handle()->GetWebContents()); if (manager) { DCHECK(login_manager_observation_.IsObservingSource(manager)); login_manager_observation_.Reset(); } Resume(); } + +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/merge_session_navigation_throttle.h b/chrome/browser/ash/login/signin/merge_session_navigation_throttle.h index 087c285..97e5f0c6a 100644 --- a/chrome/browser/ash/login/signin/merge_session_navigation_throttle.h +++ b/chrome/browser/ash/login/signin/merge_session_navigation_throttle.h
@@ -18,13 +18,14 @@ class NavigationHandle; } +namespace ash { + // Used to delay a navigation while merge session process (cookie // reconstruction from OAuth2 refresh token in ChromeOS login) is still in // progress while we are attempting to load a google property. It will resume // the navigation once merge session is done, or after 10 seconds. -class MergeSessionNavigationThrottle - : public content::NavigationThrottle, - public chromeos::OAuth2LoginManager::Observer { +class MergeSessionNavigationThrottle : public content::NavigationThrottle, + public OAuth2LoginManager::Observer { public: static std::unique_ptr<content::NavigationThrottle> Create( content::NavigationHandle* handle); @@ -42,7 +43,7 @@ // OAuth2LoginManager::Observer implementation: void OnSessionRestoreStateChanged( Profile* user_profile, - chromeos::OAuth2LoginManager::SessionRestoreState state) override; + OAuth2LoginManager::SessionRestoreState state) override; // Sets up timer and OAuth2LoginManager Observer, should be called before // deferring. Returns true if the Observer was set up correctly and the @@ -53,8 +54,7 @@ // navigation. void Proceed(); - base::ScopedObservation<chromeos::OAuth2LoginManager, - chromeos::OAuth2LoginManager::Observer> + base::ScopedObservation<OAuth2LoginManager, OAuth2LoginManager::Observer> login_manager_observation_{this}; base::OneShotTimer proceed_timer_; @@ -62,4 +62,6 @@ DISALLOW_COPY_AND_ASSIGN(MergeSessionNavigationThrottle); }; +} // namespace ash + #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_MERGE_SESSION_NAVIGATION_THROTTLE_H_
diff --git a/chrome/browser/ash/login/signin/merge_session_throttling_utils.cc b/chrome/browser/ash/login/signin/merge_session_throttling_utils.cc index 331fdea..199617f 100644 --- a/chrome/browser/ash/login/signin/merge_session_throttling_utils.cc +++ b/chrome/browser/ash/login/signin/merge_session_throttling_utils.cc
@@ -23,13 +23,13 @@ #include "services/network/public/cpp/network_connection_tracker.h" #include "url/gurl.h" -using content::BrowserThread; -using content::WebContents; - +namespace ash { namespace merge_session_throttling_utils { - namespace { +using ::content::BrowserThread; +using ::content::WebContents; + const int64_t kMaxSessionRestoreTimeInSec = 60; // The set of blocked profiles. @@ -125,14 +125,13 @@ if (!profile) return false; - chromeos::OAuth2LoginManager* login_manager = - chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile( - profile); + auto* login_manager = + OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); if (!login_manager) return false; switch (login_manager->state()) { - case chromeos::OAuth2LoginManager::SESSION_RESTORE_NOT_STARTED: + case OAuth2LoginManager::SESSION_RESTORE_NOT_STARTED: // The session restore for this profile hasn't even started yet. Don't // block for now. // In theory this should not happen since we should @@ -144,8 +143,8 @@ << "session restore?"; } return false; - case chromeos::OAuth2LoginManager::SESSION_RESTORE_PREPARING: - case chromeos::OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: { + case OAuth2LoginManager::SESSION_RESTORE_PREPARING: + case OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: { // Check if the session restore has been going on for a while already. // If so, don't attempt to block page loading. if ((base::Time::Now() - login_manager->session_restore_start()) @@ -159,9 +158,9 @@ BlockProfile(profile); return true; } - case chromeos::OAuth2LoginManager::SESSION_RESTORE_DONE: - case chromeos::OAuth2LoginManager::SESSION_RESTORE_FAILED: - case chromeos::OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED: { + case OAuth2LoginManager::SESSION_RESTORE_DONE: + case OAuth2LoginManager::SESSION_RESTORE_FAILED: + case OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED: { UnblockProfile(profile); return false; } @@ -193,14 +192,13 @@ if (!profile) return false; - chromeos::OAuth2LoginManager* login_manager = - chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile( - profile); + auto* login_manager = + OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); bool pending_session_restore = false; if (login_manager) { switch (login_manager->state()) { - case chromeos::OAuth2LoginManager::SESSION_RESTORE_PREPARING: - case chromeos::OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: + case OAuth2LoginManager::SESSION_RESTORE_PREPARING: + case OAuth2LoginManager::SESSION_RESTORE_IN_PROGRESS: pending_session_restore = true; break; @@ -213,3 +211,4 @@ } } // namespace merge_session_throttling_utils +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/merge_session_throttling_utils.h b/chrome/browser/ash/login/signin/merge_session_throttling_utils.h index 90ba62d..401a288 100644 --- a/chrome/browser/ash/login/signin/merge_session_throttling_utils.h +++ b/chrome/browser/ash/login/signin/merge_session_throttling_utils.h
@@ -12,11 +12,13 @@ class WebContents; } +namespace ash { +namespace merge_session_throttling_utils { + // A set of helper functions used by the MergeSessionNavigationThrottle and the // RendererUpdater to determine if an interstitial page should be // shown for a request when the merge session process (cookie reconstruction // from OAuth2 refresh token in ChromeOS login) is still in progress. -namespace merge_session_throttling_utils { // Policy for when it is valid to attach a MergeSessionNavigationThrottle. // Namely, this will be false for unit tests, where the UserManager is not @@ -44,5 +46,6 @@ bool IsSessionRestorePending(Profile* profile); } // namespace merge_session_throttling_utils +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_MERGE_SESSION_THROTTLING_UTILS_H_
diff --git a/chrome/browser/ash/login/signin/oauth2_browsertest.cc b/chrome/browser/ash/login/signin/oauth2_browsertest.cc index 6472385..f44ad6b 100644 --- a/chrome/browser/ash/login/signin/oauth2_browsertest.cc +++ b/chrome/browser/ash/login/signin/oauth2_browsertest.cc
@@ -69,15 +69,14 @@ #include "net/test/embedded_test_server/http_response.h" #include "third_party/abseil-cpp/absl/types/optional.h" -using net::test_server::BasicHttpResponse; -using net::test_server::HttpRequest; -using net::test_server::HttpResponse; -using net::test_server::HungResponse; - -namespace chromeos { - +namespace ash { namespace { +using ::net::test_server::BasicHttpResponse; +using ::net::test_server::HttpRequest; +using ::net::test_server::HttpResponse; +using ::net::test_server::HungResponse; + // Email of owner account for test. const char kTestGaiaId[] = "12345"; const char kTestEmail[] = "username@gmail.com"; @@ -310,8 +309,8 @@ // Try login. Primary profile has changed. AccountId account_id = AccountId::FromUserEmailGaiaId(kTestEmail, kTestGaiaId); - ash::LoginScreenTestApi::SubmitPassword(account_id, kTestAccountPassword, - true /*check_if_submittable */); + LoginScreenTestApi::SubmitPassword(account_id, kTestAccountPassword, + true /*check_if_submittable */); test::WaitForPrimaryUserSessionStart(); Profile* profile = ProfileManager::GetPrimaryUserProfile(); @@ -567,7 +566,7 @@ IN_PROC_BROWSER_TEST_F(OAuth2Test, MergeSession) { SimulateNetworkOnline(); - EXPECT_EQ(1, ash::LoginScreenTestApi::GetUsersCount()); + EXPECT_EQ(1, LoginScreenTestApi::GetUsersCount()); // PickAccountId does not work at this point as the primary user profile has // not yet been created. @@ -1224,4 +1223,4 @@ INSTANTIATE_TEST_SUITE_P(All, MergeSessionTimeoutTest, testing::Bool()); -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager.cc b/chrome/browser/ash/login/signin/oauth2_login_manager.cc index 0286945b..7e3ca1c 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_manager.cc +++ b/chrome/browser/ash/login/signin/oauth2_login_manager.cc
@@ -22,7 +22,7 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" -namespace chromeos { +namespace ash { OAuth2LoginManager::OAuth2LoginManager(Profile* user_profile) : user_profile_(user_profile), @@ -32,7 +32,7 @@ // For telemetry, we mark session restore completed to avoid warnings from // MergeSessionThrottle. if (base::CommandLine::ForCurrentProcess()->HasSwitch( - chromeos::switches::kDisableGaiaServices)) { + switches::kDisableGaiaServices)) { SetSessionRestoreState(SESSION_RESTORE_DONE); } } @@ -276,4 +276,4 @@ session_restore_start_ = time; } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager.h b/chrome/browser/ash/login/signin/oauth2_login_manager.h index 1392fa5b..9625255 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_manager.h +++ b/chrome/browser/ash/login/signin/oauth2_login_manager.h
@@ -20,7 +20,7 @@ class GoogleServiceAuthError; class Profile; -namespace chromeos { +namespace ash { // This class is responsible for restoring authenticated web sessions out of // OAuth2 refresh tokens or pre-authenticated cookie jar. @@ -192,12 +192,12 @@ DISALLOW_COPY_AND_ASSIGN(OAuth2LoginManager); }; -} // namespace chromeos +} // namespace ash // TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos // source migration is finished. -namespace ash { -using ::chromeos::OAuth2LoginManager; -} // namespace ash +namespace chromeos { +using ::ash::OAuth2LoginManager; +} #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_LOGIN_MANAGER_H_
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc index f4b9643..5a2f5f16 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc +++ b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.cc
@@ -9,7 +9,7 @@ #include "chrome/browser/signin/identity_manager_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" -namespace chromeos { +namespace ash { OAuth2LoginManagerFactory::OAuth2LoginManagerFactory() : BrowserContextKeyedServiceFactory( @@ -39,4 +39,4 @@ return service; } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h index 568c584..3739203 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h +++ b/chrome/browser/ash/login/signin/oauth2_login_manager_factory.h
@@ -11,7 +11,7 @@ class Profile; -namespace chromeos { +namespace ash { class OAuth2LoginManager; @@ -40,12 +40,12 @@ DISALLOW_COPY_AND_ASSIGN(OAuth2LoginManagerFactory); }; -} // namespace chromeos +} // namespace ash // TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos // source migration is finished. -namespace ash { -using ::chromeos::OAuth2LoginManagerFactory; +namespace chromeos { +using ::ash::OAuth2LoginManagerFactory; } #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_LOGIN_MANAGER_FACTORY_H_
diff --git a/chrome/browser/ash/login/signin/oauth2_login_verifier.cc b/chrome/browser/ash/login/signin/oauth2_login_verifier.cc index 6ceef876..731f6e9 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_verifier.cc +++ b/chrome/browser/ash/login/signin/oauth2_login_verifier.cc
@@ -12,9 +12,9 @@ #include "content/public/browser/browser_thread.h" #include "google_apis/gaia/gaia_auth_util.h" -using content::BrowserThread; +namespace ash { -namespace chromeos { +using ::content::BrowserThread; OAuth2LoginVerifier::OAuth2LoginVerifier( OAuth2LoginVerifier::Delegate* delegate, @@ -97,4 +97,4 @@ delegate_->OnListAccountsFailure(error.IsTransientError()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_login_verifier.h b/chrome/browser/ash/login/signin/oauth2_login_verifier.h index 286479a..48fe9aab 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_verifier.h +++ b/chrome/browser/ash/login/signin/oauth2_login_verifier.h
@@ -15,7 +15,7 @@ #include "chrome/browser/profiles/profile.h" #include "components/signin/public/identity_manager/identity_manager.h" -namespace chromeos { +namespace ash { // Given GCMS and primary account id, this class verifies GAIA credentials // (SAPISID) and rebuild current session's cookie jar for the primary account. @@ -71,6 +71,6 @@ DISALLOW_COPY_AND_ASSIGN(OAuth2LoginVerifier); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_LOGIN_VERIFIER_H_
diff --git a/chrome/browser/ash/login/signin/oauth2_token_fetcher.cc b/chrome/browser/ash/login/signin/oauth2_token_fetcher.cc index 3d04e11..c74edad 100644 --- a/chrome/browser/ash/login/signin/oauth2_token_fetcher.cc +++ b/chrome/browser/ash/login/signin/oauth2_token_fetcher.cc
@@ -16,10 +16,11 @@ #include "services/network/public/cpp/shared_url_loader_factory.h" #include "third_party/cros_system_api/dbus/service_constants.h" -using content::BrowserThread; - +namespace ash { namespace { +using ::content::BrowserThread; + // OAuth token request max retry count. const int kMaxRequestAttemptCount = 5; // OAuth token request retry delay in milliseconds. @@ -27,8 +28,6 @@ } // namespace -namespace chromeos { - OAuth2TokenFetcher::OAuth2TokenFetcher( OAuth2TokenFetcher::Delegate* delegate, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) @@ -87,4 +86,4 @@ std::move(error_handler).Run(); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_token_fetcher.h b/chrome/browser/ash/login/signin/oauth2_token_fetcher.h index 6263145..d0680ba6 100644 --- a/chrome/browser/ash/login/signin/oauth2_token_fetcher.h +++ b/chrome/browser/ash/login/signin/oauth2_token_fetcher.h
@@ -19,7 +19,7 @@ class SharedURLLoaderFactory; } -namespace chromeos { +namespace ash { // OAuth2TokenFetcher is used to convert authenticated cookie jar from the // authentication profile into OAuth2 tokens and GAIA credentials that will be @@ -69,6 +69,6 @@ DISALLOW_COPY_AND_ASSIGN(OAuth2TokenFetcher); }; -} // namespace chromeos +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_TOKEN_FETCHER_H_
diff --git a/chrome/browser/ash/login/signin/oauth2_token_initializer.cc b/chrome/browser/ash/login/signin/oauth2_token_initializer.cc index eba9d72..5b2d5004 100644 --- a/chrome/browser/ash/login/signin/oauth2_token_initializer.cc +++ b/chrome/browser/ash/login/signin/oauth2_token_initializer.cc
@@ -11,7 +11,7 @@ #include "chrome/common/chrome_features.h" #include "services/network/public/cpp/shared_url_loader_factory.h" -namespace chromeos { +namespace ash { OAuth2TokenInitializer::OAuth2TokenInitializer() {} @@ -57,4 +57,4 @@ std::move(callback_).Run(false, user_context_); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/oauth2_token_initializer.h b/chrome/browser/ash/login/signin/oauth2_token_initializer.h index 85f607d4..7b0097c0 100644 --- a/chrome/browser/ash/login/signin/oauth2_token_initializer.h +++ b/chrome/browser/ash/login/signin/oauth2_token_initializer.h
@@ -12,7 +12,7 @@ #include "chrome/browser/ash/login/signin/oauth2_token_fetcher.h" #include "chromeos/login/auth/user_context.h" -namespace chromeos { +namespace ash { // Performs initial fetch of OAuth2 Tokens. class OAuth2TokenInitializer final : public OAuth2TokenFetcher::Delegate { @@ -40,6 +40,12 @@ DISALLOW_COPY_AND_ASSIGN(OAuth2TokenInitializer); }; -} // namespace chromeos +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::OAuth2TokenInitializer; +} #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OAUTH2_TOKEN_INITIALIZER_H_
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter.cc b/chrome/browser/ash/login/signin/offline_signin_limiter.cc index a19c996..37c8c8b6 100644 --- a/chrome/browser/ash/login/signin/offline_signin_limiter.cc +++ b/chrome/browser/ash/login/signin/offline_signin_limiter.cc
@@ -31,7 +31,7 @@ #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" -namespace chromeos { +namespace ash { void OfflineSigninLimiter::SignedIn(UserContext::AuthFlow auth_flow) { PrefService* prefs = profile_->GetPrefs(); @@ -415,4 +415,4 @@ user_manager::known_user::SetOfflineSigninLimit(user->GetAccountId(), limit); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter.h b/chrome/browser/ash/login/signin/offline_signin_limiter.h index 80f72b06..b8fce231 100644 --- a/chrome/browser/ash/login/signin/offline_signin_limiter.h +++ b/chrome/browser/ash/login/signin/offline_signin_limiter.h
@@ -22,7 +22,7 @@ class Clock; } -namespace chromeos { +namespace ash { // Enforces a limit on the length of time for which a user authenticated via // Gaia without SAML or with SAML can use offline authentication against a @@ -97,12 +97,6 @@ DISALLOW_COPY_AND_ASSIGN(OfflineSigninLimiter); }; -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos -// source migration is finished. -namespace ash { -using ::chromeos::OfflineSigninLimiter; -} +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OFFLINE_SIGNIN_LIMITER_H_
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc index 8cfc9c37..c2fb6ff4 100644 --- a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc +++ b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.cc
@@ -11,7 +11,7 @@ #include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/browser_context.h" -namespace chromeos { +namespace ash { base::Clock* OfflineSigninLimiterFactory::clock_for_testing_ = NULL; @@ -45,4 +45,4 @@ clock_for_testing_); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h index 19b0556..4b3b3d9 100644 --- a/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h +++ b/chrome/browser/ash/login/signin/offline_signin_limiter_factory.h
@@ -16,7 +16,7 @@ class Clock; } -namespace chromeos { +namespace ash { class OfflineSigninLimiter; @@ -47,12 +47,6 @@ DISALLOW_COPY_AND_ASSIGN(OfflineSigninLimiterFactory); }; -} // namespace chromeos - -// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos -// source migration is finished. -namespace ash { -using ::chromeos::OfflineSigninLimiterFactory; -} +} // namespace ash #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_OFFLINE_SIGNIN_LIMITER_FACTORY_H_
diff --git a/chrome/browser/ash/login/signin/offline_signin_limiter_unittest.cc b/chrome/browser/ash/login/signin/offline_signin_limiter_unittest.cc index 890f23d..ddc9719 100644 --- a/chrome/browser/ash/login/signin/offline_signin_limiter_unittest.cc +++ b/chrome/browser/ash/login/signin/offline_signin_limiter_unittest.cc
@@ -30,15 +30,14 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using testing::_; -using testing::Mock; -using testing::Return; -using testing::Sequence; - -namespace chromeos { - +namespace ash { namespace { +using ::testing::_; +using ::testing::Mock; +using ::testing::Return; +using ::testing::Sequence; + const char kTestGaiaUser[] = "user@example.com"; const char kTestSAMLUser[] = "user@saml.example.com"; @@ -1356,4 +1355,4 @@ EXPECT_FALSE(timer_->IsRunning()); } -} // namespace chromeos +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc b/chrome/browser/ash/login/signin/signin_error_notifier.cc similarity index 95% rename from chrome/browser/ash/login/signin/signin_error_notifier_ash.cc rename to chrome/browser/ash/login/signin/signin_error_notifier.cc index fc80dfb..65900a12 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc +++ b/chrome/browser/ash/login/signin/signin_error_notifier.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/ash/login/signin/signin_error_notifier_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier.h" #include <memory> #include <string> @@ -53,6 +53,7 @@ #include "ui/message_center/public/cpp/notification.h" #include "ui/message_center/public/cpp/notification_delegate.h" +namespace ash { namespace { constexpr char kProfileSigninNotificationId[] = "chrome://settings/signin/"; @@ -128,7 +129,7 @@ TokenHandleUtil::TokenHandleStatus status) { if (status != TokenHandleUtil::INVALID) return; - RecordReauthReason(account_id, chromeos::ReauthReason::INVALID_TOKEN_HANDLE); + RecordReauthReason(account_id, ReauthReason::INVALID_TOKEN_HANDLE); HandleDeviceAccountError(); } @@ -170,10 +171,10 @@ const AccountId account_id = multi_user_util::GetAccountIdFromProfile(profile_); - if (!ash::IsAccountManagerAvailable(profile_)) { + if (!IsAccountManagerAvailable(profile_)) { // If this flag is disabled, Chrome OS does not have a concept of Secondary // Accounts. Preserve existing behavior. - RecordReauthReason(account_id, chromeos::ReauthReason::SYNC_FAILED); + RecordReauthReason(account_id, ReauthReason::SYNC_FAILED); HandleDeviceAccountError(); return; } @@ -182,7 +183,7 @@ const CoreAccountId primary_account_id = identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (error_account_id == primary_account_id) { - RecordReauthReason(account_id, chromeos::ReauthReason::SYNC_FAILED); + RecordReauthReason(account_id, ReauthReason::SYNC_FAILED); HandleDeviceAccountError(); } else { HandleSecondaryAccountError(error_account_id); @@ -219,7 +220,7 @@ multi_user_util::GetAccountIdFromProfile(profile_).GetUserEmail(); std::unique_ptr<message_center::Notification> notification = - ash::CreateSystemNotification( + CreateSystemNotification( message_center::NOTIFICATION_TYPE_SIMPLE, device_account_notification_id_, l10n_util::GetStringUTF16(IDS_SIGNIN_ERROR_BUBBLE_VIEW_TITLE), @@ -275,7 +276,7 @@ IDS_SIGNIN_ERROR_SECONDARY_ACCOUNT_MIGRATION_BUBBLE_VIEW_MESSAGE); std::unique_ptr<message_center::Notification> notification = - ash::CreateSystemNotification( + CreateSystemNotification( message_center::NOTIFICATION_TYPE_SIMPLE, secondary_account_notification_id_, message_title, message_body, l10n_util::GetStringUTF16( @@ -301,15 +302,14 @@ absl::optional<int> button_index) { if (profile_->IsChild() && !profile_->GetPrefs()->GetBoolean( prefs::kEduCoexistenceArcMigrationCompleted)) { - if (!chromeos::AccountManagerWelcomeDialog:: - ShowIfRequiredForEduCoexistence()) { + if (!AccountManagerWelcomeDialog::ShowIfRequiredForEduCoexistence()) { chrome::SettingsWindowManager::GetInstance()->ShowOSSettings( profile_, chromeos::settings::mojom::kMyAccountsSubpagePath); } return; } - if (!chromeos::AccountManagerWelcomeDialog::ShowIfRequired()) { + if (!AccountManagerWelcomeDialog::ShowIfRequired()) { // The welcome dialog was not shown (because it has been shown too many // times already). Take users to Account Manager UI directly. // Note: If the welcome dialog was shown, we don't need to do anything. @@ -349,3 +349,5 @@ IDS_SYNC_OTHER_SIGN_IN_ERROR_BUBBLE_VIEW_MESSAGE); } } + +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_ash.h b/chrome/browser/ash/login/signin/signin_error_notifier.h similarity index 90% rename from chrome/browser/ash/login/signin/signin_error_notifier_ash.h rename to chrome/browser/ash/login/signin/signin_error_notifier.h index 4930bd5..423ea0f7 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_ash.h +++ b/chrome/browser/ash/login/signin/signin_error_notifier.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_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_ASH_H_ -#define CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_ASH_H_ +#ifndef CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_H_ +#define CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_H_ #include <string> #include <vector> @@ -21,14 +21,13 @@ class Profile; class PrefRegistrySimple; -namespace ash { -class AccountManager; -} - namespace signin { class IdentityManager; } // namespace signin. +namespace ash { +class AccountManager; + // Shows signin-related errors as notifications in Ash. class SigninErrorNotifier : public SigninErrorController::Observer, public KeyedService { @@ -95,4 +94,12 @@ DISALLOW_COPY_AND_ASSIGN(SigninErrorNotifier); }; -#endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_ASH_H_ +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::SigninErrorNotifier; +} + +#endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_H_
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.cc b/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc similarity index 91% rename from chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.cc rename to chrome/browser/ash/login/signin/signin_error_notifier_factory.cc index 4afb5b50..6f2e9289 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.cc +++ b/chrome/browser/ash/login/signin/signin_error_notifier_factory.cc
@@ -2,16 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier_factory.h" #include "ash/constants/ash_switches.h" -#include "chrome/browser/ash/login/signin/signin_error_notifier_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/notification_display_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/signin_error_controller_factory.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" +namespace ash { + SigninErrorNotifierFactory::SigninErrorNotifierFactory() : BrowserContextKeyedServiceFactory( "SigninErrorNotifier", @@ -37,10 +39,12 @@ KeyedService* SigninErrorNotifierFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { // If this is during dummy login from tests, suppress the notification. - if (chromeos::switches::IsGaiaServicesDisabled()) + if (switches::IsGaiaServicesDisabled()) return nullptr; Profile* profile = static_cast<Profile*>(context); return new SigninErrorNotifier( SigninErrorControllerFactory::GetForProfile(profile), profile); } + +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h b/chrome/browser/ash/login/signin/signin_error_notifier_factory.h similarity index 95% rename from chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h rename to chrome/browser/ash/login/signin/signin_error_notifier_factory.h index 7b96192..ea6b8c7 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h +++ b/chrome/browser/ash/login/signin/signin_error_notifier_factory.h
@@ -2,16 +2,18 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_ASH_H_ -#define CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_ASH_H_ +#ifndef CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_H_ +#define CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_H_ #include "base/macros.h" #include "base/memory/singleton.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h" -class SigninErrorNotifier; class Profile; +namespace ash { +class SigninErrorNotifier; + // Singleton that owns all SigninErrorNotifiers and associates them with // Profiles. Listens for the Profile's destruction notification and cleans up // the associated SigninErrorNotifier. @@ -37,4 +39,6 @@ DISALLOW_COPY_AND_ASSIGN(SigninErrorNotifierFactory); }; -#endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_ASH_H_ +} // namespace ash + +#endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_SIGNIN_ERROR_NOTIFIER_FACTORY_H_
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_ash_unittest.cc b/chrome/browser/ash/login/signin/signin_error_notifier_unittest.cc similarity index 97% rename from chrome/browser/ash/login/signin/signin_error_notifier_ash_unittest.cc rename to chrome/browser/ash/login/signin/signin_error_notifier_unittest.cc index c0220709..64f2ca4 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_ash_unittest.cc +++ b/chrome/browser/ash/login/signin/signin_error_notifier_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ash/login/signin/signin_error_notifier_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier.h" #include <stddef.h> @@ -12,7 +12,7 @@ #include "base/cxx17_backports.h" #include "base/memory/ptr_util.h" #include "build/build_config.h" -#include "chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier_factory.h" #include "chrome/browser/ash/login/users/mock_user_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/notifications/notification_display_service_tester.h" @@ -30,6 +30,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/message_center/public/cpp/notification.h" +namespace ash { namespace { const char kTestEmail[] = "email@example.com"; @@ -47,7 +48,7 @@ void SetUp() override { BrowserWithTestWindowTest::SetUp(); - mock_user_manager_ = new ash::MockUserManager(); + mock_user_manager_ = new MockUserManager(); user_manager_enabler_ = std::make_unique<user_manager::ScopedUserManager>( base::WrapUnique(mock_user_manager_)); @@ -84,7 +85,7 @@ protected: std::unique_ptr<NotificationDisplayServiceTester> display_service_; - ash::MockUserManager* mock_user_manager_; // Not owned. + MockUserManager* mock_user_manager_; // Not owned. std::unique_ptr<user_manager::ScopedUserManager> user_manager_enabler_; std::unique_ptr<IdentityTestEnvironmentProfileAdaptor> identity_test_env_profile_adaptor_; @@ -292,3 +293,4 @@ } } // namespace +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/token_handle_fetcher.cc b/chrome/browser/ash/login/signin/token_handle_fetcher.cc index 880f413..e37b205 100644 --- a/chrome/browser/ash/login/signin/token_handle_fetcher.cc +++ b/chrome/browser/ash/login/signin/token_handle_fetcher.cc
@@ -22,7 +22,9 @@ #include "google_apis/gaia/gaia_constants.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +namespace ash { namespace { + const int kMaxRetries = 3; const char kAccessTokenFetchId[] = "token_handle_fetcher"; @@ -109,7 +111,7 @@ void TokenHandleFetcher::FillForNewUser(const std::string& access_token, TokenFetchingCallback callback) { - profile_ = chromeos::ProfileHelper::Get()->GetSigninProfile(); + profile_ = ProfileHelper::Get()->GetSigninProfile(); callback_ = std::move(callback); FillForAccessToken(access_token); } @@ -149,3 +151,5 @@ void TokenHandleFetcher::OnProfileDestroyed() { std::move(callback_).Run(account_id_, false); } + +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/token_handle_fetcher.h b/chrome/browser/ash/login/signin/token_handle_fetcher.h index 6d76e24..abd844e 100644 --- a/chrome/browser/ash/login/signin/token_handle_fetcher.h +++ b/chrome/browser/ash/login/signin/token_handle_fetcher.h
@@ -16,18 +16,19 @@ #include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" #include "google_apis/gaia/gaia_oauth_client.h" +class Profile; + namespace signin { class IdentityManager; } +namespace ash { class TokenHandleUtil; -class Profile; // This class is resposible for obtaining new token handle for user. // It can be used in two ways. When user have just used GAIA signin there is // an OAuth2 token available. If there is profile already loaded, then // minting additional access token might be required. - class TokenHandleFetcher : public gaia::GaiaOAuthClient::Delegate { public: TokenHandleFetcher(TokenHandleUtil* util, const AccountId& account_id); @@ -75,4 +76,6 @@ DISALLOW_COPY_AND_ASSIGN(TokenHandleFetcher); }; +} // namespace ash + #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_TOKEN_HANDLE_FETCHER_H_
diff --git a/chrome/browser/ash/login/signin/token_handle_util.cc b/chrome/browser/ash/login/signin/token_handle_util.cc index 1243d30..e6a7aab1 100644 --- a/chrome/browser/ash/login/signin/token_handle_util.cc +++ b/chrome/browser/ash/login/signin/token_handle_util.cc
@@ -13,6 +13,7 @@ #include "google_apis/gaia/gaia_oauth_client.h" #include "services/network/public/cpp/shared_url_loader_factory.h" +namespace ash { namespace { const char kTokenHandlePref[] = "PasswordTokenHandle"; @@ -251,3 +252,5 @@ std::move(callback_).Run(account_id_, outcome); NotifyDone(); } + +} // namespace ash
diff --git a/chrome/browser/ash/login/signin/token_handle_util.h b/chrome/browser/ash/login/signin/token_handle_util.h index 51d6a684..c691349d 100644 --- a/chrome/browser/ash/login/signin/token_handle_util.h +++ b/chrome/browser/ash/login/signin/token_handle_util.h
@@ -21,6 +21,8 @@ class DictionaryValue; } +namespace ash { + // This class is responsible for operations with External Token Handle. // Handle is an extra token associated with OAuth refresh token that have // exactly same lifetime. It is not secure, and it's only purpose is checking @@ -101,4 +103,12 @@ DISALLOW_COPY_AND_ASSIGN(TokenHandleUtil); }; +} // namespace ash + +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace chromeos { +using ::ash::TokenHandleUtil; +} + #endif // CHROME_BROWSER_ASH_LOGIN_SIGNIN_TOKEN_HANDLE_UTIL_H_
diff --git a/chrome/browser/ash/login/test/https_forwarder.h b/chrome/browser/ash/login/test/https_forwarder.h index c26b98d1..f7558e24c 100644 --- a/chrome/browser/ash/login/test/https_forwarder.h +++ b/chrome/browser/ash/login/test/https_forwarder.h
@@ -49,4 +49,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::HTTPSForwarder; +} + #endif // CHROME_BROWSER_ASH_LOGIN_TEST_HTTPS_FORWARDER_H_
diff --git a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc index 88926f06..58a9ab5 100644 --- a/chrome/browser/ash/login/users/chrome_user_manager_impl.cc +++ b/chrome/browser/ash/login/users/chrome_user_manager_impl.cc
@@ -121,9 +121,7 @@ namespace ash { namespace { -// TODO(https://crbug.com/1164001): remove after the classes are migrated -using ::chromeos::AuthErrorObserver; -using ::chromeos::AuthErrorObserverFactory; +// TODO(https://crbug.com/1164001): remove after the class is migrated using ::chromeos::ProxyConfigServiceImpl; using ::content::BrowserThread;
diff --git a/chrome/browser/ash/policy/core/device_cloud_policy_manager_chromeos.cc b/chrome/browser/ash/policy/core/device_cloud_policy_manager_chromeos.cc index 653f42e..5c515a3e 100644 --- a/chrome/browser/ash/policy/core/device_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/ash/policy/core/device_cloud_policy_manager_chromeos.cc
@@ -29,8 +29,8 @@ #include "chrome/browser/ash/policy/core/device_cloud_policy_store_chromeos.h" #include "chrome/browser/ash/policy/core/policy_pref_names.h" #include "chrome/browser/ash/policy/remote_commands/device_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/rsu/lookup_key_uploader.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h" #include "chrome/browser/chromeos/policy/server_backed_state/server_backed_state_keys_broker.h" #include "chrome/browser/chromeos/policy/status_collector/device_status_collector.h" #include "chrome/browser/chromeos/policy/uploading/heartbeat_scheduler.h"
diff --git a/chrome/browser/ash/policy/core/user_cloud_policy_manager_chromeos.cc b/chrome/browser/ash/policy/core/user_cloud_policy_manager_chromeos.cc index 5240fb1..013744cf 100644 --- a/chrome/browser/ash/policy/core/user_cloud_policy_manager_chromeos.cc +++ b/chrome/browser/ash/policy/core/user_cloud_policy_manager_chromeos.cc
@@ -29,9 +29,9 @@ #include "chrome/browser/ash/policy/core/policy_oauth2_token_fetcher.h" #include "chrome/browser/ash/policy/login/wildcard_login_checker.h" #include "chrome/browser/ash/policy/remote_commands/user_commands_factory_chromeos.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h" #include "chrome/browser/enterprise/reporting/report_scheduler_desktop.h" #include "chrome/browser/enterprise/reporting/reporting_delegate_factory_desktop.h" #include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
diff --git a/chrome/browser/ash/policy/handlers/device_name_policy_handler_impl.h b/chrome/browser/ash/policy/handlers/device_name_policy_handler_impl.h index 42d2e37..c276f83 100644 --- a/chrome/browser/ash/policy/handlers/device_name_policy_handler_impl.h +++ b/chrome/browser/ash/policy/handlers/device_name_policy_handler_impl.h
@@ -60,8 +60,8 @@ // administrator. std::string GenerateHostname(const std::string& hostname_template) const; - // Sets new device name policy value if different from the current policy - // value . + // Sets new device name and policy if different from the current device name + // and/or policy. void SetDeviceNamePolicy(DeviceNamePolicy policy, std::string& new_hostname); ash::CrosSettings* cros_settings_;
diff --git a/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.cc b/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.cc new file mode 100644 index 0000000..d8769f0 --- /dev/null +++ b/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.cc
@@ -0,0 +1,41 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h" + +namespace policy { + +FakeDeviceNamePolicyHandler::FakeDeviceNamePolicyHandler() = default; + +FakeDeviceNamePolicyHandler::~FakeDeviceNamePolicyHandler() = default; + +DeviceNamePolicyHandler::DeviceNamePolicy +FakeDeviceNamePolicyHandler::GetDeviceNamePolicy() const { + return device_name_policy_; +} + +absl::optional<std::string> +FakeDeviceNamePolicyHandler::GetHostnameChosenByAdministrator() const { + return hostname_; +} + +void FakeDeviceNamePolicyHandler::SetPolicyState( + DeviceNamePolicy policy, + const absl::optional<std::string>& hostname_from_template) { + // Hostname from template should only be relevant for + // kPolicyHostnameChosenByAdmin policy, hence should be null for any other + // policies. + if (policy != + DeviceNamePolicyHandler::DeviceNamePolicy::kPolicyHostnameChosenByAdmin) { + DCHECK(!hostname_from_template); + } + + if (device_name_policy_ == policy && hostname_ == hostname_from_template) + return; + device_name_policy_ = policy; + hostname_ = hostname_from_template; + NotifyHostnamePolicyChanged(); +} + +} // namespace policy
diff --git a/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h b/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h new file mode 100644 index 0000000..94fdcf9 --- /dev/null +++ b/chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h
@@ -0,0 +1,35 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ASH_POLICY_HANDLERS_FAKE_DEVICE_NAME_POLICY_HANDLER_H_ +#define CHROME_BROWSER_ASH_POLICY_HANDLERS_FAKE_DEVICE_NAME_POLICY_HANDLER_H_ + +#include "chrome/browser/ash/policy/handlers/device_name_policy_handler.h" + +namespace policy { + +// Fake DeviceNamePolicyHandler implementation +class FakeDeviceNamePolicyHandler : public DeviceNamePolicyHandler { + public: + FakeDeviceNamePolicyHandler(); + ~FakeDeviceNamePolicyHandler() override; + + // DeviceNamePolicyHandler: + DeviceNamePolicy GetDeviceNamePolicy() const override; + absl::optional<std::string> GetHostnameChosenByAdministrator() const override; + + // Sets new device name and policy if different from the current device name + // and/or policy. + void SetPolicyState( + DeviceNamePolicy policy, + const absl::optional<std::string>& hostname_from_template); + + private: + absl::optional<std::string> hostname_ = absl::nullopt; + DeviceNamePolicy device_name_policy_ = DeviceNamePolicy::kNoPolicy; +}; + +} // namespace policy + +#endif // CHROME_BROWSER_ASH_POLICY_HANDLERS_FAKE_DEVICE_NAME_POLICY_HANDLER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/OWNERS b/chrome/browser/ash/policy/reporting/OWNERS similarity index 100% rename from chrome/browser/chromeos/policy/reporting/OWNERS rename to chrome/browser/ash/policy/reporting/OWNERS
diff --git a/chrome/browser/chromeos/policy/reporting/README.md b/chrome/browser/ash/policy/reporting/README.md similarity index 100% rename from chrome/browser/chromeos/policy/reporting/README.md rename to chrome/browser/ash/policy/reporting/README.md
diff --git a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.cc b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.cc similarity index 96% rename from chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.cc rename to chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.cc index 8f6602c..a6544426 100644 --- a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.cc +++ b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.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/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" #include "base/bind.h" #include "base/callback_helpers.h"
diff --git a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h similarity index 89% rename from chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h rename to chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h index f37b06b..c2f41ea 100644 --- a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h +++ b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ #include <memory> #include "base/macros.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h" #include "components/prefs/pref_change_registrar.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -87,4 +87,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_APP_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc similarity index 97% rename from chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc rename to chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc index b5a667d..d36a59a7 100644 --- a/chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc +++ b/chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" #include "base/bind.h" #include "base/callback_helpers.h" @@ -12,7 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/run_loop.h" #include "base/sequenced_task_runner.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" #include "components/arc/arc_prefs.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log.cc similarity index 90% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log.cc index 571fbe5..40c4c71 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log.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/chromeos/policy/reporting/arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_log.h similarity index 69% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log.h index 40e1594..26f131d5 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_ -#include "chrome/browser/chromeos/policy/reporting/install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h" namespace base { @@ -31,4 +31,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.cc index fbdca59f..e500d18 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.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/chromeos/policy/reporting/arc_app_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h" #include "base/command_line.h" #include "base/time/time.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h similarity index 91% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.h rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h index 39d1faca..3b1b467 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.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_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_ #include <stdint.h> @@ -13,7 +13,7 @@ #include "base/logging.h" #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_collector_base.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "components/arc/mojom/policy.mojom-forward.h" @@ -105,4 +105,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_COLLECTOR_H_
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector_unittest.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc index 73b2d45..568e17c52 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector_unittest.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h" #include <vector>
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.cc index 198ab8cc..0f08e287 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_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/chromeos/policy/reporting/arc_app_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h" #include "ash/constants/ash_switches.h" #include "base/command_line.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h similarity index 87% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.h rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h index b4830f6..65c56e1 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h
@@ -2,17 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_ #include <memory> #include <set> #include <string> -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_manager.h" #include "components/policy/proto/device_management_backend.pb.h" class Profile; @@ -112,4 +112,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_MANAGER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager_unittest.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager_unittest.cc index b54328a..c766aaa 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager_unittest.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_manager.h" #include <iterator> #include <map> @@ -20,8 +20,8 @@ #include "base/time/tick_clock.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/profiles/reporting_util.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/system/fake_statistics_provider.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_unittest.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_unittest.cc index 967161a..5c70eb4 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_unittest.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log.h" #include <stddef.h> #include <stdint.h> @@ -13,7 +13,7 @@ #include "base/files/file.h" #include "base/files/file_util.h" #include "base/files/scoped_temp_dir.h" -#include "chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h" #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.cc similarity index 93% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.cc index 3bee9655..301edeb 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.cc
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h" #include "base/bind.h" #include "base/callback_helpers.h" #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/reporting_util.h" #include "components/policy/core/common/cloud/realtime_reporting_job_configuration.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h similarity index 88% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h index cb0b4ff..d3df71d 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_ #include "base/callback.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_uploader_base.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" namespace enterprise_management { @@ -76,4 +76,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOG_UPLOADER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader_unittest.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc index 039ba0c3..e0dcc0e 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader_unittest.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_uploader.h" #include <algorithm> #include <memory> @@ -17,7 +17,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/profiles/reporting_util.h" #include "chromeos/system/fake_statistics_provider.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc similarity index 97% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_logger.cc index e21e638..e26376d 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.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/chromeos/policy/reporting/arc_app_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h" #include <stdint.h> @@ -19,7 +19,7 @@ #include "base/values.h" #include "chrome/browser/ash/arc/arc_util.h" #include "chrome/browser/ash/arc/policy/arc_policy_util.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_logger_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_logger_base.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile.h" #include "components/arc/arc_prefs.h"
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h similarity index 93% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h rename to chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h index eddd2eb..6baa05b 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger.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_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_ #include <memory> #include <set> @@ -12,8 +12,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ash/arc/policy/arc_policy_bridge.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_log_collector.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_logger_base.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/install_event_logger_base.h" #include "components/policy/core/common/policy_service.h" #include "components/policy/proto/device_management_backend.pb.h" @@ -159,4 +159,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_ARC_APP_INSTALL_EVENT_LOGGER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger_unittest.cc b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger_unittest.cc rename to chrome/browser/ash/policy/reporting/arc_app_install_event_logger_unittest.cc index 7e70ff2..b0a135b 100644 --- a/chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger_unittest.cc +++ b/chrome/browser/ash/policy/reporting/arc_app_install_event_logger_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h" #include <stdint.h>
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log.cc similarity index 89% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log.cc index 3af842e..9532bd5 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log.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/chromeos/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" namespace em = enterprise_management;
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log.h b/chrome/browser/ash/policy/reporting/extension_install_event_log.h similarity index 69% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log.h rename to chrome/browser/ash/policy/reporting/extension_install_event_log.h index 6b69771..d9e1455 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log.h
@@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_ -#include "chrome/browser/chromeos/policy/reporting/install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_extension_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h" namespace base { @@ -32,4 +32,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_collector.cc index af8b8f70..dfb81b9 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector.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/chromeos/policy/reporting/extension_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_collector.h" #include "base/command_line.h" #include "base/time/time.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.h b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector.h similarity index 92% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.h rename to chrome/browser/ash/policy/reporting/extension_install_event_log_collector.h index 49a3eba..2e0e12e2 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector.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_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_ #include <stdint.h> @@ -12,7 +12,7 @@ #include "base/logging.h" #include "base/scoped_observation.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_collector_base.h" #include "chrome/browser/extensions/forced_extensions/install_stage_tracker.h" #include "chrome/browser/profiles/profile.h" #include "extensions/browser/extension_registry.h" @@ -125,4 +125,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_COLLECTOR_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_collector_unittest.cc index 7634a88b..e1ef1c6 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_collector_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_collector.h" #include "ash/constants/ash_switches.h" #include "base/command_line.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager.cc index e2b532e3..079d5c7 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_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/chromeos/policy/reporting/extension_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h" #include "base/files/file_path.h" #include "base/files/file_util.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.h b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h similarity index 87% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.h rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h index a8384a1d..b532458 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h
@@ -2,16 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_ #include <memory> #include <set> -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_logger.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_manager.h" #include "components/policy/proto/device_management_backend.pb.h" #include "extensions/common/extension_id.h" @@ -112,4 +112,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager_unittest.cc index 8cb6e59..5ff0059 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h" #include <iterator> #include <map> @@ -20,8 +20,8 @@ #include "base/time/tick_clock.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/profiles/reporting_util.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/system/fake_statistics_provider.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.cc similarity index 96% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.cc index 299e737..c1ae3c5 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.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/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "base/bind.h" #include "base/callback_helpers.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h similarity index 89% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h index adddbaf..805f40c2 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ #include <memory> -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager.h" #include "components/prefs/pref_change_registrar.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -89,4 +89,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_MANAGER_WRAPPER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc similarity index 97% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc index 409f47d..b9a7067 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "base/bind.h" #include "base/callback_helpers.h" @@ -12,7 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/run_loop.h" #include "base/sequenced_task_runner.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/testing_profile.h" #include "components/policy/proto/device_management_backend.pb.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_unittest.cc index 1b474ba..6bdcfb9 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" #include <memory>
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.cc index 6a9f2e6..2d4ef3d6 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.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/chromeos/policy/reporting/extension_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h" #include <atomic> @@ -13,7 +13,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/policy/dm_token_utils.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/reporting_util.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h similarity index 95% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h rename to chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h index 8ea72e72..140a523 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ #include <memory> #include "base/callback.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_uploader_base.h" #include "components/reporting/client/report_queue.h" #include "components/reporting/client/report_queue_provider.h" #include "components/reporting/util/status.h" @@ -194,4 +194,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOG_UPLOADER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_log_uploader_unittest.cc index f3202d2..8163ea66 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_log_uploader_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_uploader.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_uploader.h" #include <algorithm> #include <memory> @@ -17,7 +17,7 @@ #include "base/threading/thread_task_runner_handle.h" #include "base/time/time.h" #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include "chrome/browser/profiles/reporting_util.h" #include "chromeos/system/fake_statistics_provider.h" #include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger.cc b/chrome/browser/ash/policy/reporting/extension_install_event_logger.cc similarity index 97% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_logger.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_logger.cc index 0ac064b..7a27228 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_logger.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/chromeos/policy/reporting/extension_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_logger.h" #include "base/system/sys_info.h" #include "base/task/task_traits.h"
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger.h b/chrome/browser/ash/policy/reporting/extension_install_event_logger.h similarity index 90% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_logger.h rename to chrome/browser/ash/policy/reporting/extension_install_event_logger.h index 7aa59bc..c9678d4 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger.h +++ b/chrome/browser/ash/policy/reporting/extension_install_event_logger.h
@@ -2,14 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_ #include <memory> #include <set> -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_collector.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_logger_base.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_collector.h" +#include "chrome/browser/ash/policy/reporting/install_event_logger_base.h" #include "components/policy/core/common/policy_service.h" #include "components/policy/proto/device_management_backend.pb.h" #include "components/prefs/pref_change_registrar.h" @@ -114,4 +114,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_EXTENSION_INSTALL_EVENT_LOGGER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger_unittest.cc b/chrome/browser/ash/policy/reporting/extension_install_event_logger_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/extension_install_event_logger_unittest.cc rename to chrome/browser/ash/policy/reporting/extension_install_event_logger_unittest.cc index dafb947..dae1ec3 100644 --- a/chrome/browser/chromeos/policy/reporting/extension_install_event_logger_unittest.cc +++ b/chrome/browser/ash/policy/reporting/extension_install_event_logger_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_logger.h" #include "base/files/file_path.h" #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h"
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log.h b/chrome/browser/ash/policy/reporting/install_event_log.h similarity index 95% rename from chrome/browser/chromeos/policy/reporting/install_event_log.h rename to chrome/browser/ash/policy/reporting/install_event_log.h index 63b9b43ac..4a91228 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log.h +++ b/chrome/browser/ash/policy/reporting/install_event_log.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_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_H_ #include <stddef.h> #include <stdint.h> @@ -17,7 +17,7 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/macros.h" -#include "chrome/browser/chromeos/policy/reporting/single_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_install_event_log.h" namespace policy { @@ -212,4 +212,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.cc b/chrome/browser/ash/policy/reporting/install_event_log_collector_base.cc similarity index 96% rename from chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.cc rename to chrome/browser/ash/policy/reporting/install_event_log_collector_base.cc index 03ca221..4fce572 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.cc +++ b/chrome/browser/ash/policy/reporting/install_event_log_collector_base.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/chromeos/policy/reporting/install_event_log_collector_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_collector_base.h" #include "ash/constants/ash_switches.h" #include "base/command_line.h"
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.h b/chrome/browser/ash/policy/reporting/install_event_log_collector_base.h similarity index 87% rename from chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.h rename to chrome/browser/ash/policy/reporting/install_event_log_collector_base.h index 5b41cb7..39f6099 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_collector_base.h +++ b/chrome/browser/ash/policy/reporting/install_event_log_collector_base.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_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" @@ -54,4 +54,4 @@ }; } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_COLLECTOR_BASE_H_
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_manager.cc b/chrome/browser/ash/policy/reporting/install_event_log_manager.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/install_event_log_manager.cc rename to chrome/browser/ash/policy/reporting/install_event_log_manager.cc index 9b9d13db..697b5c4f 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_manager.cc +++ b/chrome/browser/ash/policy/reporting/install_event_log_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/chromeos/policy/reporting/install_event_log_manager.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_manager.h" #include "ash/constants/ash_switches.h" #include "base/bind.h"
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_manager.h b/chrome/browser/ash/policy/reporting/install_event_log_manager.h similarity index 97% rename from chrome/browser/chromeos/policy/reporting/install_event_log_manager.h rename to chrome/browser/ash/policy/reporting/install_event_log_manager.h index 5499bec..1df122a 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_manager.h +++ b/chrome/browser/ash/policy/reporting/install_event_log_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_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_ #include <memory> #include <set> @@ -248,4 +248,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_MANAGER_H_
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.cc b/chrome/browser/ash/policy/reporting/install_event_log_uploader_base.cc similarity index 96% rename from chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.cc rename to chrome/browser/ash/policy/reporting/install_event_log_uploader_base.cc index 5cd4234..d2af7c2 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.cc +++ b/chrome/browser/ash/policy/reporting/install_event_log_uploader_base.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/chromeos/policy/reporting/install_event_log_uploader_base.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_uploader_base.h" #include <algorithm>
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.h b/chrome/browser/ash/policy/reporting/install_event_log_uploader_base.h similarity index 93% rename from chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.h rename to chrome/browser/ash/policy/reporting/install_event_log_uploader_base.h index cb216ff..0002e50 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_uploader_base.h +++ b/chrome/browser/ash/policy/reporting/install_event_log_uploader_base.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_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_ #include "components/policy/core/common/cloud/cloud_policy_client.h" @@ -97,4 +97,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UPLOADER_BASE_H_
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_util.cc b/chrome/browser/ash/policy/reporting/install_event_log_util.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/install_event_log_util.cc rename to chrome/browser/ash/policy/reporting/install_event_log_util.cc index 7529c93..ddbf8f7 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_util.cc +++ b/chrome/browser/ash/policy/reporting/install_event_log_util.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include <set>
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_util.h b/chrome/browser/ash/policy/reporting/install_event_log_util.h similarity index 92% rename from chrome/browser/chromeos/policy/reporting/install_event_log_util.h rename to chrome/browser/ash/policy/reporting/install_event_log_util.h index 426d8c5..4b2bb00f 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_util.h +++ b/chrome/browser/ash/policy/reporting/install_event_log_util.h
@@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_ #include "components/policy/proto/device_management_backend.pb.h" #include "extensions/common/extension_id.h" @@ -66,4 +66,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOG_UTIL_H_
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_log_util_unittest.cc b/chrome/browser/ash/policy/reporting/install_event_log_util_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/install_event_log_util_unittest.cc rename to chrome/browser/ash/policy/reporting/install_event_log_util_unittest.cc index 013eaf6..0d35c5a 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_log_util_unittest.cc +++ b/chrome/browser/ash/policy/reporting/install_event_log_util_unittest.cc
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/install_event_log_util.h" +#include "chrome/browser/ash/policy/reporting/install_event_log_util.h" #include <vector> #include "base/values.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log.h" #include "chrome/browser/profiles/reporting_util.h" #include "chromeos/system/fake_statistics_provider.h" #include "components/policy/proto/device_management_backend.pb.h"
diff --git a/chrome/browser/chromeos/policy/reporting/install_event_logger_base.h b/chrome/browser/ash/policy/reporting/install_event_logger_base.h similarity index 94% rename from chrome/browser/chromeos/policy/reporting/install_event_logger_base.h rename to chrome/browser/ash/policy/reporting/install_event_logger_base.h index 0de070e..8ae14c34 100644 --- a/chrome/browser/chromeos/policy/reporting/install_event_logger_base.h +++ b/chrome/browser/ash/policy/reporting/install_event_logger_base.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_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_ #include "base/memory/weak_ptr.h" #include "base/system/sys_info.h" @@ -112,4 +112,4 @@ base::WeakPtrFactory<InstallEventLoggerBase> weak_factory_{this}; }; } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_INSTALL_EVENT_LOGGER_BASE_H_
diff --git a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.cc b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.cc similarity index 93% rename from chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.cc rename to chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.cc index caab10b..1b063ff4 100644 --- a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.cc +++ b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.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/chromeos/policy/reporting/single_arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h" #include "base/files/file.h"
diff --git a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h similarity index 80% rename from chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h rename to chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h index e9642468..88ae1bd 100644 --- a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h +++ b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h
@@ -2,12 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_ #include <string> -#include "chrome/browser/chromeos/policy/reporting/single_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h" namespace base { @@ -42,4 +42,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_ARC_APP_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log_unittest.cc b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log_unittest.cc rename to chrome/browser/ash/policy/reporting/single_arc_app_install_event_log_unittest.cc index 3c65f49..89d55d97a 100644 --- a/chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log_unittest.cc +++ b/chrome/browser/ash/policy/reporting/single_arc_app_install_event_log_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/single_arc_app_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_arc_app_install_event_log.h" #include <stdint.h> @@ -11,8 +11,8 @@ #include "base/files/file.h" #include "base/files/file_path.h" #include "base/files/scoped_temp_dir.h" -#include "chrome/browser/chromeos/policy/reporting/install_event_log.h" -#include "chrome/browser/chromeos/policy/reporting/single_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_install_event_log.h" #include "testing/gtest/include/gtest/gtest.h" namespace em = enterprise_management;
diff --git a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.cc b/chrome/browser/ash/policy/reporting/single_extension_install_event_log.cc similarity index 93% rename from chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.cc rename to chrome/browser/ash/policy/reporting/single_extension_install_event_log.cc index d4bdb5c..78a90f5 100644 --- a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.cc +++ b/chrome/browser/ash/policy/reporting/single_extension_install_event_log.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/chromeos/policy/reporting/single_extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_extension_install_event_log.h" #include "base/files/file.h"
diff --git a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.h b/chrome/browser/ash/policy/reporting/single_extension_install_event_log.h similarity index 81% rename from chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.h rename to chrome/browser/ash/policy/reporting/single_extension_install_event_log.h index 43289181..d5005f1 100644 --- a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.h +++ b/chrome/browser/ash/policy/reporting/single_extension_install_event_log.h
@@ -2,13 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_ #include <memory> #include <string> -#include "chrome/browser/chromeos/policy/reporting/single_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_install_event_log.h" #include "components/policy/proto/device_management_backend.pb.h" namespace base { @@ -44,4 +44,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_EXTENSION_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log_unittest.cc b/chrome/browser/ash/policy/reporting/single_extension_install_event_log_unittest.cc similarity index 99% rename from chrome/browser/chromeos/policy/reporting/single_extension_install_event_log_unittest.cc rename to chrome/browser/ash/policy/reporting/single_extension_install_event_log_unittest.cc index 63393ec..c1d8b60 100644 --- a/chrome/browser/chromeos/policy/reporting/single_extension_install_event_log_unittest.cc +++ b/chrome/browser/ash/policy/reporting/single_extension_install_event_log_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/reporting/single_extension_install_event_log.h" +#include "chrome/browser/ash/policy/reporting/single_extension_install_event_log.h" #include <stdint.h>
diff --git a/chrome/browser/chromeos/policy/reporting/single_install_event_log.h b/chrome/browser/ash/policy/reporting/single_install_event_log.h similarity index 96% rename from chrome/browser/chromeos/policy/reporting/single_install_event_log.h rename to chrome/browser/ash/policy/reporting/single_install_event_log.h index ebca736..059678c 100644 --- a/chrome/browser/chromeos/policy/reporting/single_install_event_log.h +++ b/chrome/browser/ash/policy/reporting/single_install_event_log.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_CHROMEOS_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_ +#define CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_ #include <stddef.h> #include <stdint.h> @@ -235,4 +235,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_ +#endif // CHROME_BROWSER_ASH_POLICY_REPORTING_SINGLE_INSTALL_EVENT_LOG_H_
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc b/chrome/browser/ash/policy/rsu/lookup_key_uploader.cc similarity index 98% rename from chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc rename to chrome/browser/ash/policy/rsu/lookup_key_uploader.cc index 1bbc2bb19..a5941c5a0 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.cc +++ b/chrome/browser/ash/policy/rsu/lookup_key_uploader.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/chromeos/policy/rsu/lookup_key_uploader.h" +#include "chrome/browser/ash/policy/rsu/lookup_key_uploader.h" #include "base/base64.h" #include "base/bind.h"
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h b/chrome/browser/ash/policy/rsu/lookup_key_uploader.h similarity index 93% rename from chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h rename to chrome/browser/ash/policy/rsu/lookup_key_uploader.h index 0a1a22a..5c6c784 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h +++ b/chrome/browser/ash/policy/rsu/lookup_key_uploader.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_CHROMEOS_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_ -#define CHROME_BROWSER_CHROMEOS_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_ +#ifndef CHROME_BROWSER_ASH_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_ +#define CHROME_BROWSER_ASH_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_ #include <memory> #include <string> @@ -85,4 +85,4 @@ } // namespace policy -#endif // CHROME_BROWSER_CHROMEOS_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_ +#endif // CHROME_BROWSER_ASH_POLICY_RSU_LOOKUP_KEY_UPLOADER_H_
diff --git a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc b/chrome/browser/ash/policy/rsu/lookup_key_uploader_unittest.cc similarity index 98% rename from chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc rename to chrome/browser/ash/policy/rsu/lookup_key_uploader_unittest.cc index 07bd852a..273db5c 100644 --- a/chrome/browser/chromeos/policy/rsu/lookup_key_uploader_unittest.cc +++ b/chrome/browser/ash/policy/rsu/lookup_key_uploader_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/chromeos/policy/rsu/lookup_key_uploader.h" +#include "chrome/browser/ash/policy/rsu/lookup_key_uploader.h" #include <memory> #include <string>
diff --git a/chrome/browser/ash/profiles/profile_helper.cc b/chrome/browser/ash/profiles/profile_helper.cc index 127b93b..c1bc606 100644 --- a/chrome/browser/ash/profiles/profile_helper.cc +++ b/chrome/browser/ash/profiles/profile_helper.cc
@@ -49,7 +49,6 @@ // TODO(https://crbug.com/1164001): remove after //chrome/browser/chromeos // source migration is finished. namespace login = ::chromeos::login; -using ::chromeos::OAuth2LoginManager; // This array contains a subset of the explicitly allowlisted extensions that // are defined in extensions/common/api/_behavior_features.json. The extension @@ -443,9 +442,8 @@ if (!IsSigninProfile(profile) && user_manager::UserManager::Get()->IsLoggedInAsUserWithGaiaAccount() && !user_manager::UserManager::Get()->IsLoggedInAsStub()) { - chromeos::OAuth2LoginManager* login_manager = - chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile( - profile); + auto* login_manager = + OAuth2LoginManagerFactory::GetInstance()->GetForProfile(profile); if (login_manager) login_manager->AddObserver(this); } @@ -675,9 +673,8 @@ if (state == OAuth2LoginManager::SESSION_RESTORE_DONE || state == OAuth2LoginManager::SESSION_RESTORE_FAILED || state == OAuth2LoginManager::SESSION_RESTORE_CONNECTION_FAILED) { - chromeos::OAuth2LoginManager* login_manager = - chromeos::OAuth2LoginManagerFactory::GetInstance()->GetForProfile( - user_profile); + auto* login_manager = + OAuth2LoginManagerFactory::GetInstance()->GetForProfile(user_profile); login_manager->RemoveObserver(this); ClearSigninProfile(base::OnceClosure()); }
diff --git a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc index e2deef8..44aef05 100644 --- a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc +++ b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.cc
@@ -132,4 +132,9 @@ return Profile::FromWebUI(web_ui_)->GetPrefs(); } +void ChromeScanningAppDelegate::SetRemoveableMediaPathForTesting( + const base::FilePath& path) { + file_path_helper_.SetRemoveableMediaPathForTesting(path); +} + } // namespace ash
diff --git a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h index e68ddc3..241b9f7a 100644 --- a/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h +++ b/chrome/browser/ash/scanning/chrome_scanning_app_delegate.h
@@ -57,6 +57,8 @@ void SetValidPaths(const base::FilePath& google_drive_path, const base::FilePath& my_files_path); + void SetRemoveableMediaPathForTesting(const base::FilePath& path); + private: // Returns the PrefService for the active Profile. PrefService* GetPrefs() const;
diff --git a/chrome/browser/ash/scanning/chrome_scanning_app_delegate_unittest.cc b/chrome/browser/ash/scanning/chrome_scanning_app_delegate_unittest.cc index 0160abcc..111b467 100644 --- a/chrome/browser/ash/scanning/chrome_scanning_app_delegate_unittest.cc +++ b/chrome/browser/ash/scanning/chrome_scanning_app_delegate_unittest.cc
@@ -69,10 +69,14 @@ EXPECT_TRUE(base::CreateDirectory(drive_path_)); my_files_path_ = temp_dir_.GetPath().Append("MyFiles"); EXPECT_TRUE(base::CreateDirectory(my_files_path_)); + removable_media_path_ = temp_dir_.GetPath().Append("removable/media"); + EXPECT_TRUE(base::CreateDirectory(removable_media_path_)); chrome_scanning_app_delegate_ = std::make_unique<ChromeScanningAppDelegate>(web_ui_.get()); chrome_scanning_app_delegate_->SetValidPaths(drive_path_, my_files_path_); + chrome_scanning_app_delegate_->SetRemoveableMediaPathForTesting( + removable_media_path_); } protected: @@ -82,6 +86,7 @@ base::ScopedTempDir temp_dir_; base::FilePath my_files_path_; base::FilePath drive_path_; + base::FilePath removable_media_path_; private: content::BrowserTaskEnvironment task_environment_; @@ -134,6 +139,15 @@ EXPECT_TRUE(chrome_scanning_app_delegate_->ShowFileInFilesApp(test_file)); } +// Validates that passing a file path that exists and is a child of a removable +// media returns true for showing the Files app. +TEST_F(ChromeScanningAppDelegateTest, ShowFilesAppRemovableMediaPathChild) { + const base::FilePath test_file = + removable_media_path_.Append("test_file.png"); + base::File(test_file, base::File::FLAG_CREATE | base::File::FLAG_READ); + EXPECT_TRUE(chrome_scanning_app_delegate_->ShowFileInFilesApp(test_file)); +} + // Validates that passing a non-existent file returns false for showing the // Files app. TEST_F(ChromeScanningAppDelegateTest, ShowFilesAppFileNotFound) {
diff --git a/chrome/browser/ash/scanning/scanning_file_path_helper.cc b/chrome/browser/ash/scanning/scanning_file_path_helper.cc index 3bcb5013..a979188 100644 --- a/chrome/browser/ash/scanning/scanning_file_path_helper.cc +++ b/chrome/browser/ash/scanning/scanning_file_path_helper.cc
@@ -15,6 +15,9 @@ namespace { +// The default root path for connected removable media. +constexpr char kRemovableMediaPath[] = "/media/removable"; + // "root" is appended to the user's Google Drive directory to form the // complete path. constexpr char kRoot[] = "root"; @@ -25,7 +28,9 @@ ScanningFilePathHelper::ScanningFilePathHelper( const base::FilePath& google_drive_path, const base::FilePath& my_files_path) - : google_drive_path_(google_drive_path), my_files_path_(my_files_path) {} + : google_drive_path_(google_drive_path), + my_files_path_(my_files_path), + removable_media_path_(base::FilePath(kRemovableMediaPath)) {} ScanningFilePathHelper::ScanningFilePathHelper(ScanningFilePathHelper&& other) = default; @@ -63,7 +68,13 @@ return path_to_file == my_files_path_ || (!path_to_file.ReferencesParent() && (google_drive_path_.IsParent(path_to_file) || - my_files_path_.IsParent(path_to_file))); + my_files_path_.IsParent(path_to_file) || + removable_media_path_.IsParent(path_to_file))); +} + +void ScanningFilePathHelper::SetRemoveableMediaPathForTesting( + const base::FilePath& path) { + removable_media_path_ = path; } } // namespace ash
diff --git a/chrome/browser/ash/scanning/scanning_file_path_helper.h b/chrome/browser/ash/scanning/scanning_file_path_helper.h index 987fc828..541af3a 100644 --- a/chrome/browser/ash/scanning/scanning_file_path_helper.h +++ b/chrome/browser/ash/scanning/scanning_file_path_helper.h
@@ -36,10 +36,15 @@ // are not supported. bool IsFilePathSupported(const base::FilePath& path_to_file) const; + void SetRemoveableMediaPathForTesting(const base::FilePath& path); + private: // The paths to the user's My files and Google Drive directories. base::FilePath google_drive_path_; base::FilePath my_files_path_; + + // The root path to the user's connected removable media. + base::FilePath removable_media_path_; }; } // namespace ash
diff --git a/chrome/browser/ash/scanning/scanning_file_path_helper_unittest.cc b/chrome/browser/ash/scanning/scanning_file_path_helper_unittest.cc index b29b9cd7..84d46262 100644 --- a/chrome/browser/ash/scanning/scanning_file_path_helper_unittest.cc +++ b/chrome/browser/ash/scanning/scanning_file_path_helper_unittest.cc
@@ -89,4 +89,11 @@ my_files_path_.Append("../MyFiles/test_file.png"))); } +// Validates that passing a file path that is a child of a removable media +// returns true for IsFilePathSupported(). +TEST_F(ScanningFilePathHelperTest, FilePathSupportedRemovableMedia) { + ASSERT_TRUE(file_path_helper_.IsFilePathSupported( + base::FilePath("/media/removable/STATE/test_file.png"))); +} + } // namespace ash
diff --git a/chrome/browser/ash/system/kernel_feature_manager.cc b/chrome/browser/ash/system/kernel_feature_manager.cc index baf4fc88..ea23488 100644 --- a/chrome/browser/ash/system/kernel_feature_manager.cc +++ b/chrome/browser/ash/system/kernel_feature_manager.cc
@@ -62,37 +62,49 @@ } void KernelFeatureManager::EnableKernelFeatures() { - base::FeatureList* feature_list_instance = base::FeatureList::GetInstance(); - DCHECK(feature_list_instance); + base::FeatureList* feature_list_ins = base::FeatureList::GetInstance(); + DCHECK(feature_list_ins); for (const auto& name : kernel_feature_list_) { VLOG(1) << "Enabling kernel feature via debugd: " << name << std::endl; - // Was this feature requested in the field trial and also enabled? - // Note: We don't support dynamic disabling of kernel features right now. - // So any requests to disable a feature are ignored. Disabled is the - // default. - if (!feature_list_instance->GetEnabledFieldTrialByFeatureName(name)) { + base::FieldTrial* trial = base::FeatureList::GetInstance() + ->GetAssociatedFieldTrialByFeatureName(name); + + // Skip enabling features that are not a part of the field trial. + // Note: We don't support dynamic disabling of kernel features on the device + // right now. Requests to disable result in *only* the disabled group getting + // activated. The kernel default for the device is already disabled. + if (!trial) { continue; } - debug_daemon_client_->KernelFeatureEnable( - name, base::BindOnce(&KernelFeatureManager::OnKernelFeatureEnable, - weak_ptr_factory_.GetWeakPtr())); + if (feature_list_ins->GetEnabledFieldTrialByFeatureName(name)) { + // Features marked as enabled need to be enabled on the device. + // The actual finch experiment will be activated in the dbus callback + // later once the feature is enabled on the device. + debug_daemon_client_->KernelFeatureEnable( + name, base::BindOnce(&KernelFeatureManager::OnKernelFeatureEnable, + weak_ptr_factory_.GetWeakPtr())); + } else { + // The device defaults to "disabled", so no need to send any dbus commands + // to disable. Just enable the field trial experiment for disabled group. + trial->group(); + VLOG(1) << "Kernel experiment " << name << "activated as disabled."; + } } } void KernelFeatureManager::OnKernelFeatureEnable(bool result, const std::string& out) { - DCHECK(!result || - base::FeatureList::GetInstance()->GetAssociatedFieldTrialByFeatureName( - out)); + base::FieldTrial* trial = base::FeatureList::GetInstance() + ->GetAssociatedFieldTrialByFeatureName(out); + + DCHECK(!result || trial); if (result) { - base::FeatureList::GetInstance() - ->GetAssociatedFieldTrialByFeatureName(out) - ->group(); - VLOG(1) << "Kernel feature " << out << "activated successfully!"; + trial->group(); + VLOG(1) << "Kernel experiment " << out << "activated as enabled."; return; } VLOG(1) << "Kernel feature has not been activated: " << out;
diff --git a/chrome/browser/ash/system/kernel_feature_manager_unittest.cc b/chrome/browser/ash/system/kernel_feature_manager_unittest.cc index 466ee99..3d6397e 100644 --- a/chrome/browser/ash/system/kernel_feature_manager_unittest.cc +++ b/chrome/browser/ash/system/kernel_feature_manager_unittest.cc
@@ -106,7 +106,7 @@ EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial1->trial_name())); EXPECT_FALSE(base::FieldTrialList::IsTrialActive(trial2->trial_name())); - EXPECT_FALSE(base::FieldTrialList::IsTrialActive(trial3->trial_name())); + EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial3->trial_name())); EXPECT_FALSE(base::FieldTrialList::IsTrialActive(trial4->trial_name())); }
diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc index 727b580..8c79b98 100644 --- a/chrome/browser/background/background_mode_manager.cc +++ b/chrome/browser/background/background_mode_manager.cc
@@ -466,6 +466,7 @@ // are in that mode. KeepAliveOrigin::NOTIFICATION, KeepAliveOrigin::PENDING_NOTIFICATION_CLICK_EVENT, + KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT, KeepAliveOrigin::IN_FLIGHT_PUSH_MESSAGE, }); }
diff --git a/chrome/browser/browser_process_platform_part_chromeos.cc b/chrome/browser/browser_process_platform_part_chromeos.cc index f0b3a84..e2ee3691 100644 --- a/chrome/browser/browser_process_platform_part_chromeos.cc +++ b/chrome/browser/browser_process_platform_part_chromeos.cc
@@ -286,8 +286,7 @@ DCHECK(!in_session_password_change_manager_); in_session_password_change_manager_ = - chromeos::InSessionPasswordChangeManager::CreateIfEnabled( - primary_profile); + ash::InSessionPasswordChangeManager::CreateIfEnabled(primary_profile); primary_profile_shutdown_subscription_ = PrimaryProfileServicesShutdownNotifierFactory::GetInstance()
diff --git a/chrome/browser/browser_process_platform_part_chromeos.h b/chrome/browser/browser_process_platform_part_chromeos.h index bf80694..52d95c18 100644 --- a/chrome/browser/browser_process_platform_part_chromeos.h +++ b/chrome/browser/browser_process_platform_part_chromeos.h
@@ -23,6 +23,7 @@ class AccountManagerFactory; class ChromeSessionManager; class ChromeUserManager; +class InSessionPasswordChangeManager; class ProfileHelper; namespace system { @@ -35,7 +36,6 @@ } // namespace ash namespace chromeos { -class InSessionPasswordChangeManager; class KernelFeatureManager; class SchedulerConfigurationManager; class TimeZoneResolver; @@ -133,8 +133,7 @@ ash::AccountManagerFactory* GetAccountManagerFactory(); - chromeos::InSessionPasswordChangeManager* - in_session_password_change_manager() { + ash::InSessionPasswordChangeManager* in_session_password_change_manager() { return in_session_password_change_manager_.get(); } @@ -197,7 +196,7 @@ std::unique_ptr<ash::AccountManagerFactory> account_manager_factory_; - std::unique_ptr<chromeos::InSessionPasswordChangeManager> + std::unique_ptr<ash::InSessionPasswordChangeManager> in_session_password_change_manager_; base::CallbackListSubscription primary_profile_shutdown_subscription_;
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index bfb70e8e..7ca412b 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -3900,10 +3900,10 @@ // Add interstitial page while merge session process (cookie reconstruction // from OAuth2 refresh token in ChromeOS login) is still in progress while // we are attempting to load a google property. - if (merge_session_throttling_utils::ShouldAttachNavigationThrottle() && - !merge_session_throttling_utils::AreAllSessionMergedAlready() && + if (ash::merge_session_throttling_utils::ShouldAttachNavigationThrottle() && + !ash::merge_session_throttling_utils::AreAllSessionMergedAlready() && handle->GetURL().SchemeIsHTTPOrHTTPS()) { - throttles.push_back(MergeSessionNavigationThrottle::Create(handle)); + throttles.push_back(ash::MergeSessionNavigationThrottle::Create(handle)); } } #endif
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index f485ac1..32bb7ec 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1752,10 +1752,10 @@ "../ash/login/signin/offline_signin_limiter.h", "../ash/login/signin/offline_signin_limiter_factory.cc", "../ash/login/signin/offline_signin_limiter_factory.h", - "../ash/login/signin/signin_error_notifier_ash.cc", - "../ash/login/signin/signin_error_notifier_ash.h", - "../ash/login/signin/signin_error_notifier_factory_ash.cc", - "../ash/login/signin/signin_error_notifier_factory_ash.h", + "../ash/login/signin/signin_error_notifier.cc", + "../ash/login/signin/signin_error_notifier.h", + "../ash/login/signin/signin_error_notifier_factory.cc", + "../ash/login/signin/signin_error_notifier_factory.h", "../ash/login/signin/token_handle_fetcher.cc", "../ash/login/signin/token_handle_fetcher.h", "../ash/login/signin/token_handle_util.cc", @@ -2171,6 +2171,47 @@ "../ash/policy/remote_commands/user_command_arc_job.h", "../ash/policy/remote_commands/user_commands_factory_chromeos.cc", "../ash/policy/remote_commands/user_commands_factory_chromeos.h", + "../ash/policy/reporting/app_install_event_log_manager_wrapper.cc", + "../ash/policy/reporting/app_install_event_log_manager_wrapper.h", + "../ash/policy/reporting/arc_app_install_event_log.cc", + "../ash/policy/reporting/arc_app_install_event_log.h", + "../ash/policy/reporting/arc_app_install_event_log_collector.cc", + "../ash/policy/reporting/arc_app_install_event_log_collector.h", + "../ash/policy/reporting/arc_app_install_event_log_manager.cc", + "../ash/policy/reporting/arc_app_install_event_log_manager.h", + "../ash/policy/reporting/arc_app_install_event_log_uploader.cc", + "../ash/policy/reporting/arc_app_install_event_log_uploader.h", + "../ash/policy/reporting/arc_app_install_event_logger.cc", + "../ash/policy/reporting/arc_app_install_event_logger.h", + "../ash/policy/reporting/extension_install_event_log.cc", + "../ash/policy/reporting/extension_install_event_log.h", + "../ash/policy/reporting/extension_install_event_log_collector.cc", + "../ash/policy/reporting/extension_install_event_log_collector.h", + "../ash/policy/reporting/extension_install_event_log_manager.cc", + "../ash/policy/reporting/extension_install_event_log_manager.h", + "../ash/policy/reporting/extension_install_event_log_manager_wrapper.cc", + "../ash/policy/reporting/extension_install_event_log_manager_wrapper.h", + "../ash/policy/reporting/extension_install_event_log_uploader.cc", + "../ash/policy/reporting/extension_install_event_log_uploader.h", + "../ash/policy/reporting/extension_install_event_logger.cc", + "../ash/policy/reporting/extension_install_event_logger.h", + "../ash/policy/reporting/install_event_log.h", + "../ash/policy/reporting/install_event_log_collector_base.cc", + "../ash/policy/reporting/install_event_log_collector_base.h", + "../ash/policy/reporting/install_event_log_manager.cc", + "../ash/policy/reporting/install_event_log_manager.h", + "../ash/policy/reporting/install_event_log_uploader_base.cc", + "../ash/policy/reporting/install_event_log_uploader_base.h", + "../ash/policy/reporting/install_event_log_util.cc", + "../ash/policy/reporting/install_event_log_util.h", + "../ash/policy/reporting/install_event_logger_base.h", + "../ash/policy/reporting/single_arc_app_install_event_log.cc", + "../ash/policy/reporting/single_arc_app_install_event_log.h", + "../ash/policy/reporting/single_extension_install_event_log.cc", + "../ash/policy/reporting/single_extension_install_event_log.h", + "../ash/policy/reporting/single_install_event_log.h", + "../ash/policy/rsu/lookup_key_uploader.cc", + "../ash/policy/rsu/lookup_key_uploader.h", "../ash/power/auto_screen_brightness/adapter.cc", "../ash/power/auto_screen_brightness/adapter.h", "../ash/power/auto_screen_brightness/als_file_reader.cc", @@ -2894,47 +2935,6 @@ "platform_keys/platform_keys_service_factory.cc", "platform_keys/platform_keys_service_factory.h", "platform_keys/platform_keys_service_nss.cc", - "policy/reporting/app_install_event_log_manager_wrapper.cc", - "policy/reporting/app_install_event_log_manager_wrapper.h", - "policy/reporting/arc_app_install_event_log.cc", - "policy/reporting/arc_app_install_event_log.h", - "policy/reporting/arc_app_install_event_log_collector.cc", - "policy/reporting/arc_app_install_event_log_collector.h", - "policy/reporting/arc_app_install_event_log_manager.cc", - "policy/reporting/arc_app_install_event_log_manager.h", - "policy/reporting/arc_app_install_event_log_uploader.cc", - "policy/reporting/arc_app_install_event_log_uploader.h", - "policy/reporting/arc_app_install_event_logger.cc", - "policy/reporting/arc_app_install_event_logger.h", - "policy/reporting/extension_install_event_log.cc", - "policy/reporting/extension_install_event_log.h", - "policy/reporting/extension_install_event_log_collector.cc", - "policy/reporting/extension_install_event_log_collector.h", - "policy/reporting/extension_install_event_log_manager.cc", - "policy/reporting/extension_install_event_log_manager.h", - "policy/reporting/extension_install_event_log_manager_wrapper.cc", - "policy/reporting/extension_install_event_log_manager_wrapper.h", - "policy/reporting/extension_install_event_log_uploader.cc", - "policy/reporting/extension_install_event_log_uploader.h", - "policy/reporting/extension_install_event_logger.cc", - "policy/reporting/extension_install_event_logger.h", - "policy/reporting/install_event_log.h", - "policy/reporting/install_event_log_collector_base.cc", - "policy/reporting/install_event_log_collector_base.h", - "policy/reporting/install_event_log_manager.cc", - "policy/reporting/install_event_log_manager.h", - "policy/reporting/install_event_log_uploader_base.cc", - "policy/reporting/install_event_log_uploader_base.h", - "policy/reporting/install_event_log_util.cc", - "policy/reporting/install_event_log_util.h", - "policy/reporting/install_event_logger_base.h", - "policy/reporting/single_arc_app_install_event_log.cc", - "policy/reporting/single_arc_app_install_event_log.h", - "policy/reporting/single_extension_install_event_log.cc", - "policy/reporting/single_extension_install_event_log.h", - "policy/reporting/single_install_event_log.h", - "policy/rsu/lookup_key_uploader.cc", - "policy/rsu/lookup_key_uploader.h", "policy/scheduled_task_handler/device_scheduled_reboot_handler.cc", "policy/scheduled_task_handler/device_scheduled_reboot_handler.h", "policy/scheduled_task_handler/device_scheduled_update_checker.cc", @@ -3503,6 +3503,8 @@ "../ash/policy/core/user_policy_test_helper.h", "../ash/policy/dlp/dlp_content_manager_test_helper.cc", "../ash/policy/dlp/dlp_content_manager_test_helper.h", + "../ash/policy/handlers/fake_device_name_policy_handler.cc", + "../ash/policy/handlers/fake_device_name_policy_handler.h", "../ash/policy/handlers/minimum_version_policy_test_helpers.cc", "../ash/policy/handlers/minimum_version_policy_test_helpers.h", "../ash/policy/remote_commands/future_value.h", @@ -3901,7 +3903,7 @@ "../ash/login/screens/update_screen_unittest.cc", "../ash/login/session/user_session_manager_test.cc", "../ash/login/signin/offline_signin_limiter_unittest.cc", - "../ash/login/signin/signin_error_notifier_ash_unittest.cc", + "../ash/login/signin/signin_error_notifier_unittest.cc", "../ash/login/signin_partition_manager_unittest.cc", "../ash/login/ui/login_screen_extension_ui/dialog_delegate_unittest.cc", "../ash/login/ui/login_screen_extension_ui/web_dialog_view_unittest.cc", @@ -4003,6 +4005,21 @@ "../ash/policy/remote_commands/device_command_start_crd_session_unittest.cc", "../ash/policy/remote_commands/device_command_wipe_users_job_unittest.cc", "../ash/policy/remote_commands/user_command_arc_job_unittest.cc", + "../ash/policy/reporting/app_install_event_log_manager_wrapper_unittest.cc", + "../ash/policy/reporting/arc_app_install_event_log_collector_unittest.cc", + "../ash/policy/reporting/arc_app_install_event_log_manager_unittest.cc", + "../ash/policy/reporting/arc_app_install_event_log_unittest.cc", + "../ash/policy/reporting/arc_app_install_event_log_uploader_unittest.cc", + "../ash/policy/reporting/arc_app_install_event_logger_unittest.cc", + "../ash/policy/reporting/extension_install_event_log_collector_unittest.cc", + "../ash/policy/reporting/extension_install_event_log_manager_unittest.cc", + "../ash/policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc", + "../ash/policy/reporting/extension_install_event_log_unittest.cc", + "../ash/policy/reporting/extension_install_event_log_uploader_unittest.cc", + "../ash/policy/reporting/extension_install_event_logger_unittest.cc", + "../ash/policy/reporting/install_event_log_util_unittest.cc", + "../ash/policy/reporting/single_arc_app_install_event_log_unittest.cc", + "../ash/policy/rsu/lookup_key_uploader_unittest.cc", "../ash/power/auto_screen_brightness/adapter_unittest.cc", "../ash/power/auto_screen_brightness/als_file_reader_unittest.cc", "../ash/power/auto_screen_brightness/als_reader_unittest.cc", @@ -4222,21 +4239,6 @@ "phonehub/browser_tabs_model_provider_impl_unittest.cc", "platform_keys/key_permissions/arc_key_permissions_manager_delegate_unittest.cc", "platform_keys/key_permissions/key_permissions_service_impl_unittest.cc", - "policy/reporting/app_install_event_log_manager_wrapper_unittest.cc", - "policy/reporting/arc_app_install_event_log_collector_unittest.cc", - "policy/reporting/arc_app_install_event_log_manager_unittest.cc", - "policy/reporting/arc_app_install_event_log_unittest.cc", - "policy/reporting/arc_app_install_event_log_uploader_unittest.cc", - "policy/reporting/arc_app_install_event_logger_unittest.cc", - "policy/reporting/extension_install_event_log_collector_unittest.cc", - "policy/reporting/extension_install_event_log_manager_unittest.cc", - "policy/reporting/extension_install_event_log_manager_wrapper_unittest.cc", - "policy/reporting/extension_install_event_log_unittest.cc", - "policy/reporting/extension_install_event_log_uploader_unittest.cc", - "policy/reporting/extension_install_event_logger_unittest.cc", - "policy/reporting/install_event_log_util_unittest.cc", - "policy/reporting/single_arc_app_install_event_log_unittest.cc", - "policy/rsu/lookup_key_uploader_unittest.cc", "policy/scheduled_task_handler/test/device_scheduled_reboot_handler_unittest.cc", "policy/scheduled_task_handler/test/device_scheduled_update_checker_unittest.cc", "policy/scheduled_task_handler/test/fake_scheduled_task_executor.cc",
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 18c664e..485d3a9 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc
@@ -810,7 +810,10 @@ web_kiosk_app_manager_ = std::make_unique<WebKioskAppManager>(); if (base::FeatureList::IsEnabled(features::kEnableHostnameSetting)) { - DeviceNameStore::Initialize(g_browser_process->local_state()); + DeviceNameStore::Initialize(g_browser_process->local_state(), + g_browser_process->platform_part() + ->browser_policy_connector_chromeos() + ->GetDeviceNamePolicyHandler()); } if (base::FeatureList::IsEnabled(features::kEnableLocalSearchService)) {
diff --git a/chrome/browser/chromeos/device_name_store.cc b/chrome/browser/chromeos/device_name_store.cc index c66dca0d..b784da8a 100644 --- a/chrome/browser/chromeos/device_name_store.cc +++ b/chrome/browser/chromeos/device_name_store.cc
@@ -33,11 +33,12 @@ } // static -void DeviceNameStore::Initialize(PrefService* prefs) { +void DeviceNameStore::Initialize(PrefService* prefs, + policy::DeviceNamePolicyHandler* handler) { CHECK(base::FeatureList::IsEnabled(features::kEnableHostnameSetting)); CHECK(!g_instance); DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - g_instance = new DeviceNameStoreImpl(prefs); + g_instance = new DeviceNameStoreImpl(prefs, handler); } // static
diff --git a/chrome/browser/chromeos/device_name_store.h b/chrome/browser/chromeos/device_name_store.h index 8415851..d2a874d 100644 --- a/chrome/browser/chromeos/device_name_store.h +++ b/chrome/browser/chromeos/device_name_store.h
@@ -12,6 +12,10 @@ class PrefRegistrySimple; class PrefService; +namespace policy { +class DeviceNamePolicyHandler; +} // namespace policy + namespace chromeos { // DeviceNameStore is a device-persistent model of the device name which @@ -39,7 +43,8 @@ // creates a new device name and persists it. Must be called before any other // non-static method on DeviceNameStore. // |prefs| is the PrefService used to persist and read the device name value. - static void Initialize(PrefService* prefs); + static void Initialize(PrefService* prefs, + policy::DeviceNamePolicyHandler* handler); // Shutdown() should be called to destroy the instance once its clients no // longer need it.
diff --git a/chrome/browser/chromeos/device_name_store_impl.cc b/chrome/browser/chromeos/device_name_store_impl.cc index a12cf6bd..f5f3fdc 100644 --- a/chrome/browser/chromeos/device_name_store_impl.cc +++ b/chrome/browser/chromeos/device_name_store_impl.cc
@@ -11,22 +11,43 @@ namespace chromeos { namespace { const char kDefaultDeviceName[] = "ChromeOS"; -} +} // namespace -DeviceNameStoreImpl::DeviceNameStoreImpl(PrefService* prefs) : prefs_(prefs) { +DeviceNameStoreImpl::DeviceNameStoreImpl( + PrefService* prefs, + policy::DeviceNamePolicyHandler* handler) + : prefs_(prefs), handler_(handler) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK(prefs_); if (prefs_->GetString(prefs::kDeviceName).empty()) { prefs_->SetString(prefs::kDeviceName, kDefaultDeviceName); } + handler_->AddObserver(this); } -DeviceNameStoreImpl::~DeviceNameStoreImpl() = default; +DeviceNameStoreImpl::~DeviceNameStoreImpl() { + handler_->RemoveObserver(this); +} std::string DeviceNameStoreImpl::GetDeviceName() const { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - DCHECK(prefs_); - return prefs_->GetString(prefs::kDeviceName); + policy::DeviceNamePolicyHandler::DeviceNamePolicy device_name_policy = + handler_->GetDeviceNamePolicy(); + if (device_name_policy == policy::DeviceNamePolicyHandler::DeviceNamePolicy:: + kPolicyHostnameChosenByAdmin) { + return *handler_->GetHostnameChosenByAdministrator(); + } else if (device_name_policy == + policy::DeviceNamePolicyHandler::DeviceNamePolicy:: + kPolicyHostnameNotConfigurable) { + return kDefaultDeviceName; + } else { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DCHECK(prefs_); + return prefs_->GetString(prefs::kDeviceName); + } +} + +void DeviceNameStoreImpl::OnHostnamePolicyChanged() { + // TODO: Update name in set in |prefs| } } // namespace chromeos
diff --git a/chrome/browser/chromeos/device_name_store_impl.h b/chrome/browser/chromeos/device_name_store_impl.h index 44a1ae9d..21df588d 100644 --- a/chrome/browser/chromeos/device_name_store_impl.h +++ b/chrome/browser/chromeos/device_name_store_impl.h
@@ -7,23 +7,29 @@ #include "chrome/browser/chromeos/device_name_store.h" -class PrefService; +#include "chrome/browser/ash/policy/handlers/device_name_policy_handler.h" namespace chromeos { // DeviceNameStore implementation which uses a PrefService to store the device // name. -class DeviceNameStoreImpl : public DeviceNameStore { +class DeviceNameStoreImpl : public DeviceNameStore, + public policy::DeviceNamePolicyHandler::Observer { public: - explicit DeviceNameStoreImpl(PrefService* prefs); + DeviceNameStoreImpl(PrefService* prefs, + policy::DeviceNamePolicyHandler* handler); ~DeviceNameStoreImpl() override; private: // DeviceNameStore: std::string GetDeviceName() const override; + // policy::DeviceNamePolicyHandler::Observer: + void OnHostnamePolicyChanged() override; + // Provides access and persistence for the device name value. PrefService* prefs_; + policy::DeviceNamePolicyHandler* handler_; }; } // namespace chromeos
diff --git a/chrome/browser/chromeos/device_name_store_impl_unittest.cc b/chrome/browser/chromeos/device_name_store_impl_unittest.cc index 819273b..f0149f34 100644 --- a/chrome/browser/chromeos/device_name_store_impl_unittest.cc +++ b/chrome/browser/chromeos/device_name_store_impl_unittest.cc
@@ -7,6 +7,10 @@ #include "ash/constants/ash_features.h" #include "base/strings/string_util.h" #include "base/test/scoped_feature_list.h" +#include "chrome/browser/ash/policy/core/browser_policy_connector_chromeos.h" +#include "chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/common/pref_names.h" #include "components/prefs/testing_pref_service.h" #include "content/public/test/browser_task_environment.h" @@ -31,13 +35,16 @@ feature_list_.InitAndDisableFeature( ash::features::kEnableHostnameSetting); } - DeviceNameStore::Initialize(&local_state_); + DeviceNameStore::Initialize(&local_state_, + &fake_device_name_policy_handler_); } std::string GetDeviceNameFromPrefs() const { return local_state_.GetString(prefs::kDeviceName); } + policy::FakeDeviceNamePolicyHandler fake_device_name_policy_handler_; + private: // Run on the UI thread. content::BrowserTaskEnvironment task_environment_; @@ -74,4 +81,17 @@ EXPECT_EQ(GetDeviceNameFromPrefs(), "ChromeOS"); } +// Verifies the device name is the template chosen by admin if device name +// policy is set to kPolicyHostnameChosenByAdmin. +TEST_F(DeviceNameStoreImplTest, DeviceNameChosenByAdmin) { + InitializeDeviceNameStore(/*is_hostname_setting_flag_enabled=*/true); + DeviceNameStore* device_name_store_ = DeviceNameStore::GetInstance(); + const std::string template_set_by_admin = "AdminTemplate"; + fake_device_name_policy_handler_.SetPolicyState( + policy::DeviceNamePolicyHandler::DeviceNamePolicy:: + kPolicyHostnameChosenByAdmin, + template_set_by_admin); + EXPECT_EQ(device_name_store_->GetDeviceName(), template_set_by_admin); +} + } // namespace chromeos
diff --git a/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc b/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc index 57c4857a..e5281d3f 100644 --- a/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc +++ b/chrome/browser/chromeos/input_method/component_extension_ime_manager_delegate_impl.cc
@@ -19,6 +19,7 @@ #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/task/thread_pool.h" +#include "base/trace_event/trace_event.h" #include "build/branding_buildflags.h" #include "chrome/browser/extensions/component_loader.h" #include "chrome/browser/extensions/extension_service.h" @@ -109,6 +110,7 @@ const std::string& extension_id, const std::string& manifest, const base::FilePath& file_path) { + TRACE_EVENT1("ime", "DoLoadExtension", "ext_id", extension_id); extensions::ExtensionRegistry* extension_registry = extensions::ExtensionRegistry::Get(profile); DCHECK(extension_registry); @@ -154,18 +156,7 @@ const base::FilePath* file_path, bool result) { if (result) { - std::string manifest_str = *manifest; -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) - // Load Mojo-only background page for ChromeOS IME extension when feature - // 'ImeMojoDecoder' is enabled. See http://b/181170189 for more details. - // TODO(http://b/170278753): Remove this once NaCl decoder is removed. - if ((*extension_id == extension_ime_util::kXkbExtensionId) && - base::FeatureList::IsEnabled(chromeos::features::kImeMojoDecoder)) { - base::ReplaceFirstSubstringAfterOffset( - &manifest_str, 0, "background.html", "background_mojo.html"); - } -#endif - DoLoadExtension(profile, *extension_id, manifest_str, *file_path); + DoLoadExtension(profile, *extension_id, *manifest, *file_path); } else { LOG_IF(ERROR, base::SysInfo::IsRunningOnChromeOS()) << "IME extension file path does not exist: " << file_path->value(); @@ -194,6 +185,26 @@ const std::string& extension_id, const std::string& manifest, const base::FilePath& file_path) { + TRACE_EVENT0("ime", "ComponentExtensionIMEManagerDelegateImpl::Load"); + std::string* manifest_cp = new std::string(manifest); +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + // Skip checking the path of the Chrome OS IME component extension when it's + // Google Chrome brand, since it is bundled resource on Chrome OS image. This + // will improve the IME extension load latency a lot. + // See http://b/192032670 for more details. + if (extension_id == extension_ime_util::kXkbExtensionId) { + // Update manifest content inplace to load Mojo background page for ChromeOS + // IME extension when the feature 'ImeMojoDecoder' is enabled. + // See http://b/181170189 for more details. + // TODO(http://b/170278753): Remove this once NaCl decoder is removed. + if (base::FeatureList::IsEnabled(chromeos::features::kImeMojoDecoder)) { + base::ReplaceFirstSubstringAfterOffset(manifest_cp, 0, "background.html", + "background_mojo.html"); + } + DoLoadExtension(profile, extension_id, *manifest_cp, file_path); + return; + } +#endif // Check the existence of file path to avoid unnecessary extension loading // and InputMethodEngine creation, so that the virtual keyboard web content // url won't be override by IME component extensions. @@ -205,8 +216,7 @@ base::BindOnce(&CheckFilePath, base::Unretained(copied_file_path)), base::BindOnce(&OnFilePathChecked, base::Unretained(profile), base::Owned(new std::string(extension_id)), - base::Owned(new std::string(manifest)), - base::Owned(copied_file_path))); + base::Owned(manifest_cp), base::Owned(copied_file_path))); } bool ComponentExtensionIMEManagerDelegateImpl::IsInLoginLayoutAllowlist(
diff --git a/chrome/browser/chromeos/input_method/grammar_manager.cc b/chrome/browser/chromeos/input_method/grammar_manager.cc index db47c37..3ac0f3a 100644 --- a/chrome/browser/chromeos/input_method/grammar_manager.cc +++ b/chrome/browser/chromeos/input_method/grammar_manager.cc
@@ -110,7 +110,15 @@ SetButtonHighlighted(suggestion_button_, false); return true; case ui::DomCode::ENTER: - AcceptSuggestion(); + // SetComposingRange and CommitText in AcceptSuggestion will not be + // executed immediately if we are in middle of handling a key event, + // instead they will be delayed and CommitText will always be executed + // first. So we need to call AcceptSuggestion in a post task. + // TODO(crbug.com/1230961): remove PostTask after we remove the delay + // logics. + base::SequencedTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(&GrammarManager::AcceptSuggestion, + base::Unretained(this))); return true; default: break;
diff --git a/chrome/browser/chromeos/input_method/grammar_manager_unittest.cc b/chrome/browser/chromeos/input_method/grammar_manager_unittest.cc index e058d7c..9014152 100644 --- a/chrome/browser/chromeos/input_method/grammar_manager_unittest.cc +++ b/chrome/browser/chromeos/input_method/grammar_manager_unittest.cc
@@ -321,6 +321,7 @@ manager.OnKeyEvent(CreateKeyEvent(ui::DomCode::TAB)); EXPECT_CALL(mock_suggestion_handler, DismissSuggestion(1, _)); manager.OnKeyEvent(CreateKeyEvent(ui::DomCode::ENTER)); + task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(200)); EXPECT_EQ( mock_ime_input_context_handler_.delete_surrounding_text_call_count(), 1); @@ -361,6 +362,7 @@ manager.OnKeyEvent(CreateKeyEvent(ui::DomCode::ARROW_UP)); EXPECT_CALL(mock_suggestion_handler, DismissSuggestion(1, _)); manager.OnKeyEvent(CreateKeyEvent(ui::DomCode::ENTER)); + task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(200)); EXPECT_EQ( mock_ime_input_context_handler_.delete_surrounding_text_call_count(), 1);
diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc index 0ca55730..0f6168b 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl.cc
@@ -26,6 +26,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/system/sys_info.h" #include "base/time/time.h" +#include "base/trace_event/trace_event.h" #include "chrome/browser/ash/login/session/user_session_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part_chromeos.h" @@ -1161,8 +1162,11 @@ // image. If specified component extension IME no longer exists, falling back // to an existing IME. DCHECK(state); + TRACE_EVENT0("ime", + "InputMethodManagerImpl::LoadNecessaryComponentExtensions"); std::vector<std::string> unfiltered_input_method_ids; unfiltered_input_method_ids.swap(state->active_input_method_ids); + std::set<std::string> ext_loaded; for (const auto& unfiltered_input_method_id : unfiltered_input_method_ids) { if (!extension_ime_util::IsComponentExtensionIME( unfiltered_input_method_id)) { @@ -1172,7 +1176,7 @@ unfiltered_input_method_id)) { if (enable_extension_loading_) { component_extension_ime_manager_->LoadComponentExtensionIME( - state->profile, unfiltered_input_method_id); + state->profile, unfiltered_input_method_id, &ext_loaded); } state->active_input_method_ids.push_back(unfiltered_input_method_id);
diff --git a/chrome/browser/chromeos/policy/uploading/README.md b/chrome/browser/chromeos/policy/uploading/README.md index 174fb8f..6fcf7032 100644 --- a/chrome/browser/chromeos/policy/uploading/README.md +++ b/chrome/browser/chromeos/policy/uploading/README.md
@@ -3,4 +3,4 @@ This directory should contain code that handles periodically scheduled uploads to the policy server. For uploads that are triggered by an event, -such as install events, see `chrome/browser/chromeos/policy/reporting` instead. +such as install events, see `chrome/browser/ash/policy/reporting` instead.
diff --git a/chrome/browser/chromeos/printing/printer_setup_util.cc b/chrome/browser/chromeos/printing/printer_setup_util.cc index f070474..ed2242f 100644 --- a/chrome/browser/chromeos/printing/printer_setup_util.cc +++ b/chrome/browser/chromeos/printing/printer_setup_util.cc
@@ -128,8 +128,7 @@ // Retry the operation which should now happen at a higher privilege // level. - auto& service = service_mgr.GetService(printer_id); - service->GetPrinterSemanticCapsAndDefaults( + service_mgr.GetPrinterSemanticCapsAndDefaults( printer_id, base::BindOnce(&CapabilitiesFetchedFromService, printer_id, /*elevated_privileges=*/true, std::move(cb))); @@ -154,8 +153,7 @@ VLOG(1) << "Fetching printer capabilities via service"; PrintBackendServiceManager& service_mgr = PrintBackendServiceManager::GetInstance(); - auto& service = service_mgr.GetService(printer_id); - service->GetPrinterSemanticCapsAndDefaults( + service_mgr.GetPrinterSemanticCapsAndDefaults( printer_id, base::BindOnce( &CapabilitiesFetchedFromService, printer_id,
diff --git a/chrome/browser/chromeos/scoped_test_system_nss_key_slot_mixin.h b/chrome/browser/chromeos/scoped_test_system_nss_key_slot_mixin.h index e5af37a..1399198 100644 --- a/chrome/browser/chromeos/scoped_test_system_nss_key_slot_mixin.h +++ b/chrome/browser/chromeos/scoped_test_system_nss_key_slot_mixin.h
@@ -44,4 +44,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::ScopedTestSystemNSSKeySlotMixin; +} + #endif // CHROME_BROWSER_CHROMEOS_SCOPED_TEST_SYSTEM_NSS_KEY_SLOT_MIXIN_H_
diff --git a/chrome/browser/devtools/devtools_window.cc b/chrome/browser/devtools/devtools_window.cc index 9d731a1..95f1871 100644 --- a/chrome/browser/devtools/devtools_window.cc +++ b/chrome/browser/devtools/devtools_window.cc
@@ -1281,10 +1281,8 @@ const GURL& target_url, WebContents* new_contents) { if (target_url.SchemeIs(content::kChromeDevToolsScheme) && - (target_url.path().rfind("device_mode_emulation_frame.html") != - std::string::npos - // TODO(crbug.com/1228264): Remove toolbox.html allowance - || target_url.path().rfind("toolbox.html") != std::string::npos)) { + target_url.path().rfind("device_mode_emulation_frame.html") != + std::string::npos) { CHECK(can_dock_); // Ownership will be passed in DevToolsWindow::AddNewContents.
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc index aa29d76d..178eac5 100644 --- a/chrome/browser/extensions/api/automation/automation_apitest.cc +++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -377,7 +377,13 @@ #if defined(USE_AURA) -IN_PROC_BROWSER_TEST_F(AutomationApiTest, IframeNav) { +// TODO(http://crbug.com/1230863): flaky on ChromeOS. +#if defined(OS_CHROMEOS) +#define MAYBE_IframeNav DISABLED_IframeNav +#else +#define MAYBE_IframeNav IframeNav +#endif +IN_PROC_BROWSER_TEST_F(AutomationApiTest, MAYBE_IframeNav) { StartEmbeddedTestServer(); ASSERT_TRUE(RunExtensionTest("automation/tests/desktop", {.page_url = "iframenav.html"}))
diff --git a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc index d2eb14c..eb23b4e 100644 --- a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc +++ b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc
@@ -118,10 +118,13 @@ return dict; } -system_logs::SystemLogsFetcher* -ChromeFeedbackPrivateDelegate::CreateSystemLogsFetcher( - content::BrowserContext* context) const { - return system_logs::BuildChromeSystemLogsFetcher(/*scrub_data=*/true); +void ChromeFeedbackPrivateDelegate::FetchSystemInformation( + content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) const { + // self-deleting object + auto* fetcher = + system_logs::BuildChromeSystemLogsFetcher(/*scrub_data=*/true); + fetcher->Fetch(std::move(callback)); } #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.h b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.h index d09335a..8507c8f 100644 --- a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.h +++ b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.h
@@ -22,8 +22,9 @@ std::unique_ptr<base::DictionaryValue> GetStrings( content::BrowserContext* browser_context, bool from_crash) const override; - system_logs::SystemLogsFetcher* CreateSystemLogsFetcher( - content::BrowserContext* context) const override; + void FetchSystemInformation( + content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) const override; #if BUILDFLAG(IS_CHROMEOS_ASH) std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource( api::feedback_private::LogSource source_type) const override;
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 2f077be7..e40b6a3 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -4196,6 +4196,11 @@ "expiry_milestone": 95 }, { + "name": "omnibox-on-focus-suggestions-contextual-web-allow-srp", + "owners": [ "ender", "chrome-omnibox-team@google.com" ], + "expiry_milestone": 97 + }, + { "name": "omnibox-pedals-batch2", "owners": [ "orinj", "chrome-omnibox-team@google.com" ], "expiry_milestone": 95
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 11a6301..94f1e4f 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -1841,6 +1841,13 @@ const char kOmniboxRichEntitiesInLauncherDescription[] = "Enable rich entity formatting for Omnibox results in the launcher."; +const char kOmniboxOnFocusSuggestionsContextualWebAllowSRPName[] = + "Allow Omnibox contextual web on-focus suggestions on the SRP"; +const char kOmniboxOnFocusSuggestionsContextualWebAllowSRPDescription[] = + "Enables on-focus suggestions on the Search Results page. " + "Requires on-focus suggestions for the contextual web to be enabled. " + "Will only work if user is signed-in and syncing."; + const char kOmniboxOnFocusSuggestionsContextualWebName[] = "Omnibox on-focus suggestions for the contextual Web"; const char kOmniboxOnFocusSuggestionsContextualWebDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 1b91b2cf..19b1c3d 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1044,6 +1044,9 @@ extern const char kOmniboxRichEntitiesInLauncherName[]; extern const char kOmniboxRichEntitiesInLauncherDescription[]; +extern const char kOmniboxOnFocusSuggestionsContextualWebAllowSRPName[]; +extern const char kOmniboxOnFocusSuggestionsContextualWebAllowSRPDescription[]; + extern const char kOmniboxOnFocusSuggestionsContextualWebName[]; extern const char kOmniboxOnFocusSuggestionsContextualWebDescription[];
diff --git a/chrome/browser/history_clusters/history_clusters_tab_helper.cc b/chrome/browser/history_clusters/history_clusters_tab_helper.cc index 43ffb9a..75909214 100644 --- a/chrome/browser/history_clusters/history_clusters_tab_helper.cc +++ b/chrome/browser/history_clusters/history_clusters_tab_helper.cc
@@ -17,6 +17,7 @@ #include "components/history/core/browser/history_backend.h" #include "components/history/core/browser/history_database.h" #include "components/history/core/browser/history_db_task.h" +#include "components/history/core/browser/history_types.h" #include "components/history/core/browser/url_row.h" #include "components/history_clusters/core/history_clusters_service.h" #include "components/keyed_service/core/service_access_type.h"
diff --git a/chrome/browser/interstitials/enterprise_util.cc b/chrome/browser/interstitials/enterprise_util.cc index c8be7a7c..4d3e06d 100644 --- a/chrome/browser/interstitials/enterprise_util.cc +++ b/chrome/browser/interstitials/enterprise_util.cc
@@ -7,7 +7,6 @@ #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/profiles/profile.h" -#include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h" #include "content/public/browser/web_contents.h" #include "extensions/buildflags/buildflags.h" @@ -59,43 +58,3 @@ net_error_code); #endif } - -std::string GetThreatTypeStringForInterstitial( - safe_browsing::SBThreatType threat_type) { - switch (threat_type) { - case safe_browsing::SB_THREAT_TYPE_URL_PHISHING: - case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING: - return "SOCIAL_ENGINEERING"; - case safe_browsing::SB_THREAT_TYPE_URL_MALWARE: - case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE: - return "MALWARE"; - case safe_browsing::SB_THREAT_TYPE_URL_UNWANTED: - return "UNWANTED_SOFTWARE"; - case safe_browsing::SB_THREAT_TYPE_BILLING: - return "THREAT_TYPE_UNSPECIFIED"; - case safe_browsing::SB_THREAT_TYPE_UNUSED: - case safe_browsing::SB_THREAT_TYPE_SAFE: - case safe_browsing::SB_THREAT_TYPE_URL_BINARY_MALWARE: - case safe_browsing::SB_THREAT_TYPE_EXTENSION: - case safe_browsing::SB_THREAT_TYPE_BLOCKLISTED_RESOURCE: - case safe_browsing::SB_THREAT_TYPE_API_ABUSE: - case safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER: - case safe_browsing::SB_THREAT_TYPE_CSD_ALLOWLIST: - case safe_browsing:: - DEPRECATED_SB_THREAT_TYPE_URL_PASSWORD_PROTECTION_PHISHING: - case safe_browsing::SB_THREAT_TYPE_SAVED_PASSWORD_REUSE: - case safe_browsing::SB_THREAT_TYPE_SIGNED_IN_SYNC_PASSWORD_REUSE: - case safe_browsing::SB_THREAT_TYPE_SIGNED_IN_NON_SYNC_PASSWORD_REUSE: - case safe_browsing::SB_THREAT_TYPE_AD_SAMPLE: - case safe_browsing::SB_THREAT_TYPE_BLOCKED_AD_POPUP: - case safe_browsing::SB_THREAT_TYPE_BLOCKED_AD_REDIRECT: - case safe_browsing::SB_THREAT_TYPE_SUSPICIOUS_SITE: - case safe_browsing::SB_THREAT_TYPE_ENTERPRISE_PASSWORD_REUSE: - case safe_browsing::SB_THREAT_TYPE_APK_DOWNLOAD: - case safe_browsing::SB_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST: - case safe_browsing::SB_THREAT_TYPE_ACCURACY_TIPS: - NOTREACHED(); - break; - } - return std::string(); -}
diff --git a/chrome/browser/interstitials/enterprise_util.h b/chrome/browser/interstitials/enterprise_util.h index 1d927f52..267ec01 100644 --- a/chrome/browser/interstitials/enterprise_util.h +++ b/chrome/browser/interstitials/enterprise_util.h
@@ -27,7 +27,4 @@ const std::string& reason, int net_error_code); -std::string GetThreatTypeStringForInterstitial( - safe_browsing::SBThreatType threat_type); - #endif // CHROME_BROWSER_INTERSTITIALS_ENTERPRISE_UTIL_H_
diff --git a/chrome/browser/lacros/browser_service_lacros.cc b/chrome/browser/lacros/browser_service_lacros.cc index f2e29df..42277fb 100644 --- a/chrome/browser/lacros/browser_service_lacros.cc +++ b/chrome/browser/lacros/browser_service_lacros.cc
@@ -22,6 +22,7 @@ #include "chrome/common/channel_info.h" #include "chromeos/crosapi/mojom/crosapi.mojom.h" #include "chromeos/lacros/lacros_service.h" +#include "components/feedback/feedback_common.h" #include "components/feedback/feedback_report.h" #include "components/feedback/feedback_util.h" #include "components/feedback/system_logs/system_logs_fetcher.h" @@ -145,20 +146,15 @@ const bool google_email = gaia::IsGoogleInternalAccountEmail(user_email); for (auto& it : *sys_info) { - // TODO(crbug.com/1138703): This code is duplicated with the logic in - // feedback_private_api.cc, refactor to remove the duplicated code. // We only send the list of all the crash report IDs if the user has a // @google.com email. We strip this here so that the system information // view properly reflects what we will be uploading to the server. It is // also stripped later on in the feedback processing for other code paths // that don't go through this. - if (it.first == feedback::FeedbackReport::kAllCrashReportIdsKey && - !google_email) { - continue; + if (FeedbackCommon::IncludeInSystemLogs(it.first, google_email)) { + system_log_entries.SetStringKey(std::move(it.first), + std::move(it.second)); } - - system_log_entries.SetStringKey(std::move(it.first), - std::move(it.second)); } }
diff --git a/chrome/browser/lacros/keystore_service_lacros_browsertest.cc b/chrome/browser/lacros/keystore_service_lacros_browsertest.cc index 3490647d..b5a8829 100644 --- a/chrome/browser/lacros/keystore_service_lacros_browsertest.cc +++ b/chrome/browser/lacros/keystore_service_lacros_browsertest.cc
@@ -73,7 +73,7 @@ // Tests that extension generate key works. IN_PROC_BROWSER_TEST_F(KeystoreServiceLacrosBrowserTest, ExtensionGenerateKeyPKCS) { - crosapi::mojom::ExtensionKeystoreBinaryResultPtr result; + crosapi::mojom::DEPRECATED_ExtensionKeystoreBinaryResultPtr result; crosapi::mojom::KeystoreServiceAsyncWaiter async_waiter( keystore_service_remote().get()); crosapi::mojom::KeystoreSigningAlgorithmPtr algo = @@ -82,9 +82,9 @@ crosapi::mojom::KeystorePKCS115Params::New(); params->modulus_length = 1024; algo->set_pkcs115(std::move(params)); - async_waiter.ExtensionGenerateKey(crosapi::mojom::KeystoreType::kUser, - std::move(algo), - /*extension_id=*/"123", &result); + async_waiter.DEPRECATED_ExtensionGenerateKey( + crosapi::mojom::KeystoreType::kUser, std::move(algo), + /*extension_id=*/"123", &result); // Errors out because Ash-Chrome is not running on ChromeOS. ASSERT_TRUE(result->is_error_message()); EXPECT_EQ(result->get_error_message(), kFailedToSetAttribute); @@ -98,7 +98,7 @@ // simple way to prevent this at the moment. IN_PROC_BROWSER_TEST_F(KeystoreServiceLacrosBrowserTest, DISABLED_ExtensionGenerateKeyECDSA) { - crosapi::mojom::ExtensionKeystoreBinaryResultPtr result; + crosapi::mojom::DEPRECATED_ExtensionKeystoreBinaryResultPtr result; crosapi::mojom::KeystoreServiceAsyncWaiter async_waiter( keystore_service_remote().get()); crosapi::mojom::KeystoreSigningAlgorithmPtr algo = @@ -107,9 +107,9 @@ crosapi::mojom::KeystoreECDSAParams::New(); params->named_curve = "P-256"; algo->set_ecdsa(std::move(params)); - async_waiter.ExtensionGenerateKey(crosapi::mojom::KeystoreType::kUser, - std::move(algo), - /*extension_id=*/"123", &result); + async_waiter.DEPRECATED_ExtensionGenerateKey( + crosapi::mojom::KeystoreType::kUser, std::move(algo), + /*extension_id=*/"123", &result); // Errors out because Ash-Chrome is not running on ChromeOS. ASSERT_TRUE(result->is_error_message()); EXPECT_EQ(result->get_error_message(), kFailedToSetAttribute); @@ -117,10 +117,10 @@ // Tests that extension sign works. IN_PROC_BROWSER_TEST_F(KeystoreServiceLacrosBrowserTest, ExtensionSign) { - crosapi::mojom::ExtensionKeystoreBinaryResultPtr result; + crosapi::mojom::DEPRECATED_ExtensionKeystoreBinaryResultPtr result; crosapi::mojom::KeystoreServiceAsyncWaiter async_waiter( keystore_service_remote().get()); - async_waiter.ExtensionSign( + async_waiter.DEPRECATED_ExtensionSign( crosapi::mojom::KeystoreType::kUser, /*public_key=*/{1, 2, 3, 4, 5}, /*scheme=*/crosapi::mojom::KeystoreSigningScheme::kRsassaPkcs1V15Sha256,
diff --git a/chrome/browser/notifications/persistent_notification_handler.cc b/chrome/browser/notifications/persistent_notification_handler.cc index 93cfd94b..6851ff7 100644 --- a/chrome/browser/notifications/persistent_notification_handler.cc +++ b/chrome/browser/notifications/persistent_notification_handler.cc
@@ -26,11 +26,9 @@ #include "url/gurl.h" #if BUILDFLAG(ENABLE_BACKGROUND_MODE) -#include "chrome/browser/profiles/profile_keep_alive_types.h" #include "chrome/browser/profiles/scoped_profile_keep_alive.h" -#include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" -#endif +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) using content::BrowserThread; @@ -56,6 +54,10 @@ return; } +#if BUILDFLAG(ENABLE_BACKGROUND_MODE) + close_event_keep_alive_state_.AddKeepAlive(profile); +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) + NotificationMetricsLogger* metrics_logger = NotificationMetricsLoggerFactory::GetForBrowserContext(profile); if (by_user) @@ -67,16 +69,21 @@ ->DispatchNotificationCloseEvent( profile, notification_id, origin, by_user, base::BindOnce(&PersistentNotificationHandler::OnCloseCompleted, - weak_ptr_factory_.GetWeakPtr(), + weak_ptr_factory_.GetWeakPtr(), profile, std::move(completed_closure))); } void PersistentNotificationHandler::OnCloseCompleted( + Profile* profile, base::OnceClosure completed_closure, content::PersistentNotificationStatus status) { UMA_HISTOGRAM_ENUMERATION( "Notifications.PersistentWebNotificationCloseResult", status); +#if BUILDFLAG(ENABLE_BACKGROUND_MODE) + close_event_keep_alive_state_.RemoveKeepAlive(profile); +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) + std::move(completed_closure).Run(); } @@ -94,19 +101,8 @@ NotificationMetricsLoggerFactory::GetForBrowserContext(profile); #if BUILDFLAG(ENABLE_BACKGROUND_MODE) - // Ensure the browser and Profile stay alive while the event is processed. The - // keep alives will be reset when all click events have been acknowledged. - if (pending_click_dispatch_events_++ == 0) { - click_dispatch_keep_alive_ = std::make_unique<ScopedKeepAlive>( - KeepAliveOrigin::PENDING_NOTIFICATION_CLICK_EVENT, - KeepAliveRestartOption::DISABLED); - } - if (profile_pending_click_dispatch_events_[profile]++ == 0) { - click_dispatch_profile_keep_alives_[profile] = - std::make_unique<ScopedProfileKeepAlive>( - profile, ProfileKeepAliveOrigin::kPendingNotificationClickEvent); - } -#endif + click_event_keep_alive_state_.AddKeepAlive(profile); +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) blink::mojom::PermissionStatus permission_status = profile->GetPermissionController()->GetPermissionStatus( @@ -166,14 +162,8 @@ } #if BUILDFLAG(ENABLE_BACKGROUND_MODE) - DCHECK_GT(pending_click_dispatch_events_, 0); - - // Reset the keep alive if all in-flight events have been processed. - if (--pending_click_dispatch_events_ == 0) - click_dispatch_keep_alive_.reset(); - if (--profile_pending_click_dispatch_events_[profile] == 0) - click_dispatch_profile_keep_alives_[profile].reset(); -#endif + click_event_keep_alive_state_.RemoveKeepAlive(profile); +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) std::move(completed_closure).Run(); } @@ -192,3 +182,41 @@ const GURL& origin) { NotificationCommon::OpenNotificationSettings(profile, origin); } + +#if BUILDFLAG(ENABLE_BACKGROUND_MODE) + +PersistentNotificationHandler::NotificationKeepAliveState:: + NotificationKeepAliveState(KeepAliveOrigin keep_alive_origin, + ProfileKeepAliveOrigin profile_keep_alive_origin) + : keep_alive_origin_(keep_alive_origin), + profile_keep_alive_origin_(profile_keep_alive_origin) {} + +PersistentNotificationHandler::NotificationKeepAliveState:: + ~NotificationKeepAliveState() = default; + +void PersistentNotificationHandler::NotificationKeepAliveState::AddKeepAlive( + Profile* profile) { + // Ensure the browser and Profile stay alive while the event is processed. The + // keep alives will be reset when all events have been acknowledged. + if (pending_dispatch_events_++ == 0) { + event_dispatch_keep_alive_ = std::make_unique<ScopedKeepAlive>( + keep_alive_origin_, KeepAliveRestartOption::DISABLED); + } + if (profile_pending_dispatch_events_[profile]++ == 0) { + event_dispatch_profile_keep_alives_[profile] = + std::make_unique<ScopedProfileKeepAlive>(profile, + profile_keep_alive_origin_); + } +} + +void PersistentNotificationHandler::NotificationKeepAliveState::RemoveKeepAlive( + Profile* profile) { + DCHECK_GT(pending_dispatch_events_, 0); + // Reset the keep alive if all in-flight events have been processed. + if (--pending_dispatch_events_ == 0) + event_dispatch_keep_alive_.reset(); + if (--profile_pending_dispatch_events_[profile] == 0) + event_dispatch_profile_keep_alives_[profile].reset(); +} + +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE)
diff --git a/chrome/browser/notifications/persistent_notification_handler.h b/chrome/browser/notifications/persistent_notification_handler.h index afa79201..6a2e66de 100644 --- a/chrome/browser/notifications/persistent_notification_handler.h +++ b/chrome/browser/notifications/persistent_notification_handler.h
@@ -12,6 +12,11 @@ #include "chrome/browser/notifications/notification_handler.h" #include "chrome/common/buildflags.h" +#if BUILDFLAG(ENABLE_BACKGROUND_MODE) +#include "chrome/browser/profiles/profile_keep_alive_types.h" +#include "components/keep_alive_registry/keep_alive_types.h" +#endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) + class ScopedKeepAlive; class ScopedProfileKeepAlive; @@ -45,7 +50,8 @@ void OpenSettings(Profile* profile, const GURL& origin) override; private: - void OnCloseCompleted(base::OnceClosure completed_closure, + void OnCloseCompleted(Profile* profile, + base::OnceClosure completed_closure, content::PersistentNotificationStatus status); void OnClickCompleted(Profile* profile, const std::string& notification_id, @@ -53,23 +59,47 @@ content::PersistentNotificationStatus status); #if BUILDFLAG(ENABLE_BACKGROUND_MODE) - // Makes sure we keep the browser alive while the event in being processed. - // As we have no control on the click handling, the notification could be - // closed before a browser is brought up, thus terminating Chrome if it was - // the last KeepAlive. (see https://crbug.com/612815) - std::unique_ptr<ScopedKeepAlive> click_dispatch_keep_alive_; + class NotificationKeepAliveState { + public: + NotificationKeepAliveState( + KeepAliveOrigin keep_alive_origin, + ProfileKeepAliveOrigin profile_keep_alive_origin); + ~NotificationKeepAliveState(); - // Same as |click_dispatch_keep_alive_|, but prevents Profile* deletion - // instead of BrowserProcess teardown. - std::map<Profile*, std::unique_ptr<ScopedProfileKeepAlive>> - click_dispatch_profile_keep_alives_; + void AddKeepAlive(Profile* profile); + void RemoveKeepAlive(Profile* profile); - // Number of in-flight notification click events. - int pending_click_dispatch_events_ = 0; + private: + const KeepAliveOrigin keep_alive_origin_; + const ProfileKeepAliveOrigin profile_keep_alive_origin_; - // Number of in-flight notification click events per Profile, for - // |click_dispatch_profile_keep_alives_|. - std::map<Profile*, int> profile_pending_click_dispatch_events_; + // Makes sure we keep the browser alive while the event in being processed. + // As we have no control on the click handling, the notification could be + // closed before a browser is brought up, thus terminating Chrome if it was + // the last KeepAlive (see crbug.com/612815). We also need to wait until + // close events got handled as we need to access the profile when removing + // notifications from the NotificationDatabase (see crbug.com/1221601). + std::unique_ptr<ScopedKeepAlive> event_dispatch_keep_alive_; + + // Same as |event_dispatch_keep_alive_|, but prevent Profile* deletion + // instead of BrowserProcess teardown. + std::map<Profile*, std::unique_ptr<ScopedProfileKeepAlive>> + event_dispatch_profile_keep_alives_; + + // Number of in-flight notification events. + int pending_dispatch_events_ = 0; + + // Number of in-flight notification events per Profile, for + // |event_dispatch_profile_keep_alives_|. + std::map<Profile*, int> profile_pending_dispatch_events_; + }; + + NotificationKeepAliveState click_event_keep_alive_state_{ + KeepAliveOrigin::PENDING_NOTIFICATION_CLICK_EVENT, + ProfileKeepAliveOrigin::kPendingNotificationClickEvent}; + NotificationKeepAliveState close_event_keep_alive_state_{ + KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT, + ProfileKeepAliveOrigin::kPendingNotificationCloseEvent}; #endif base::WeakPtrFactory<PersistentNotificationHandler> weak_ptr_factory_{this};
diff --git a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc index 2cd4bfa..ea9039d 100644 --- a/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc +++ b/chrome/browser/notifications/platform_notification_service_interactive_uitest.cc
@@ -1008,7 +1008,7 @@ #if BUILDFLAG(ENABLE_BACKGROUND_MODE) IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, - KeepAliveRegistryPendingNotificationEvent) { + KeepAliveRegistryPendingNotificationClickEvent) { RequestAndAcceptPermission(); std::string script_result; @@ -1045,6 +1045,45 @@ ASSERT_FALSE(KeepAliveRegistry::GetInstance()->IsOriginRegistered( KeepAliveOrigin::PENDING_NOTIFICATION_CLICK_EVENT)); } + +IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, + KeepAliveRegistryPendingNotificationCloseEvent) { + RequestAndAcceptPermission(); + + std::string script_result; + ASSERT_TRUE(RunScript("DisplayPersistentNotification('action_none')", + &script_result)); + EXPECT_EQ("ok", script_result); + + std::vector<message_center::Notification> notifications = + GetDisplayedNotifications(true /* is_persistent */); + ASSERT_EQ(1u, notifications.size()); + + ASSERT_FALSE(KeepAliveRegistry::GetInstance()->IsOriginRegistered( + KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT)); + + NotificationDisplayServiceImpl* display_service = + NotificationDisplayServiceImpl::GetForProfile(browser()->profile()); + NotificationHandler* handler = display_service->GetNotificationHandler( + NotificationHandler::Type::WEB_PERSISTENT); + ASSERT_TRUE(handler); + + base::RunLoop run_loop; + handler->OnClose(browser()->profile(), notifications[0].origin_url(), + notifications[0].id(), true /* by_user */, + run_loop.QuitClosure()); + + // The asynchronous part of the close event will still be in progress, but + // the keep alive registration should have been created. + ASSERT_TRUE(KeepAliveRegistry::GetInstance()->IsOriginRegistered( + KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT)); + + // Finish the close event. + run_loop.Run(); + + ASSERT_FALSE(KeepAliveRegistry::GetInstance()->IsOriginRegistered( + KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT)); +} #endif // BUILDFLAG(ENABLE_BACKGROUND_MODE) class PlatformNotificationServiceWithoutContentImageBrowserTest
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 4f0ff9f..0ea8b6ca 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -304,7 +304,7 @@ #include "chrome/browser/ash/login/screens/reset_screen.h" #include "chrome/browser/ash/login/security_token_session_controller.h" #include "chrome/browser/ash/login/session/user_session_manager.h" -#include "chrome/browser/ash/login/signin/signin_error_notifier_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier.h" #include "chrome/browser/ash/login/startup_utils.h" #include "chrome/browser/ash/login/users/avatar/user_image_manager.h" #include "chrome/browser/ash/login/users/avatar/user_image_sync_observer.h" @@ -321,6 +321,9 @@ #include "chrome/browser/ash/policy/handlers/adb_sideloading_allowance_mode_policy_handler.h" #include "chrome/browser/ash/policy/handlers/minimum_version_policy_handler.h" #include "chrome/browser/ash/policy/networking/policy_cert_service_factory.h" +#include "chrome/browser/ash/policy/reporting/app_install_event_log_manager_wrapper.h" +#include "chrome/browser/ash/policy/reporting/arc_app_install_event_logger.h" +#include "chrome/browser/ash/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "chrome/browser/ash/power/auto_screen_brightness/metrics_reporter.h" #include "chrome/browser/ash/power/power_metrics_reporter.h" #include "chrome/browser/ash/release_notes/release_notes_storage.h" @@ -335,9 +338,6 @@ #include "chrome/browser/chromeos/first_run/first_run.h" #include "chrome/browser/chromeos/full_restore/full_restore_prefs.h" #include "chrome/browser/chromeos/net/network_throttling_observer.h" -#include "chrome/browser/chromeos/policy/reporting/app_install_event_log_manager_wrapper.h" -#include "chrome/browser/chromeos/policy/reporting/arc_app_install_event_logger.h" -#include "chrome/browser/chromeos/policy/reporting/extension_install_event_log_manager_wrapper.h" #include "chrome/browser/chromeos/policy/status_collector/device_status_collector.h" #include "chrome/browser/chromeos/policy/status_collector/status_collector.h" #include "chrome/browser/chromeos/preferences.h" @@ -1276,12 +1276,12 @@ ash::parent_access::ParentAccessService::RegisterProfilePrefs(registry); chromeos::quick_answers::prefs::RegisterProfilePrefs(registry); ash::quick_unlock::RegisterProfilePrefs(registry); - chromeos::RegisterSamlProfilePrefs(registry); + ash::RegisterSamlProfilePrefs(registry); ash::ScreenTimeController::RegisterProfilePrefs(registry); SecondaryAccountConsentLogger::RegisterPrefs(registry); ash::EduCoexistenceConsentInvalidationController::RegisterProfilePrefs( registry); - SigninErrorNotifier::RegisterPrefs(registry); + ash::SigninErrorNotifier::RegisterPrefs(registry); ash::ServicesCustomizationDocument::RegisterProfilePrefs(registry); chromeos::settings::OSSettingsUI::RegisterProfilePrefs(registry); chromeos::StartupUtils::RegisterOobeProfilePrefs(registry);
diff --git a/chrome/browser/printing/print_backend_service_manager.cc b/chrome/browser/printing/print_backend_service_manager.cc index 566c9be6..324846c9 100644 --- a/chrome/browser/printing/print_backend_service_manager.cc +++ b/chrome/browser/printing/print_backend_service_manager.cc
@@ -300,6 +300,45 @@ saved_callback_id)); } +void PrintBackendServiceManager::GetPrinterSemanticCapsAndDefaults( + const std::string& printer_name, + mojom::PrintBackendService::GetPrinterSemanticCapsAndDefaultsCallback + callback) { + // Need to be able to run the callback either after a successful return from + // the service or after the remote was disconnected, so save it here for + // either eventuality. + // Get a callback ID to represent this command. + auto saved_callback_id = base::UnguessableToken::Create(); + + // Note that `GetService()` will set state internally if this is sandboxed. + std::string remote_id = GetRemoteIdForPrinterName(printer_name); + auto& service = GetService(printer_name); + + SaveCallback(GetRemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks( + is_sandboxed_service_), + remote_id, saved_callback_id, std::move(callback)); + + if (!sandboxed_service_remote_for_test_) { + // TODO(1227561) Remove local call for driver info, don't want any + // residual accesses left into the printer drivers from the browser + // process. + base::ScopedAllowBlocking allow_blocking; + scoped_refptr<PrintBackend> print_backend = + PrintBackend::CreateInstance(g_browser_process->GetApplicationLocale()); + crash_keys_ = std::make_unique<crash_keys::ScopedPrinterInfo>( + print_backend->GetPrinterDriverInfo(printer_name)); + } + + DVLOG(1) << "Sending GetPrinterSemanticCapsAndDefaults on remote `" + << remote_id << "`, saved callback ID of " << saved_callback_id; + service->GetPrinterSemanticCapsAndDefaults( + printer_name, + base::BindOnce( + &PrintBackendServiceManager::GetPrinterSemanticCapsAndDefaultsDone, + base::Unretained(this), is_sandboxed_service_, remote_id, + saved_callback_id)); +} + bool PrintBackendServiceManager::PrinterDriverRequiresElevatedPrivilege( const std::string& printer_name) const { return drivers_requiring_elevated_privilege_.contains(printer_name); @@ -421,6 +460,11 @@ remote_id, mojom::DefaultPrinterNameResult::NewResultCode( mojom::ResultCode::kFailed)); + RunSavedCallbacks( + GetRemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks(sandboxed), + remote_id, + mojom::PrinterSemanticCapsAndDefaultsResult::NewResultCode( + mojom::ResultCode::kFailed)); } PrintBackendServiceManager::RemoteSavedEnumeratePrintersCallbacks& @@ -444,6 +488,16 @@ : unsandboxed_saved_get_default_printer_name_callbacks_; } +PrintBackendServiceManager:: + RemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks& + PrintBackendServiceManager:: + GetRemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks( + bool sandboxed) { + return sandboxed + ? sandboxed_saved_get_printer_semantic_caps_and_defaults_callbacks_ + : unsandboxed_saved_get_printer_semantic_caps_and_defaults_callbacks_; +} + template <class T> void PrintBackendServiceManager::SaveCallback( RemoteSavedCallbacks<T>& saved_callbacks, @@ -511,6 +565,19 @@ remote_id, saved_callback_id, std::move(printer_name)); } +void PrintBackendServiceManager::GetPrinterSemanticCapsAndDefaultsDone( + bool sandboxed, + const std::string& remote_id, + const base::UnguessableToken& saved_callback_id, + mojom::PrinterSemanticCapsAndDefaultsResultPtr printer_caps) { + DVLOG(1) << "GetPrinterSemanticCapsAndDefaults completed for remote `" + << remote_id << "` saved callback ID " << saved_callback_id; + + ServiceCallbackDone( + GetRemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks(sandboxed), + remote_id, saved_callback_id, std::move(printer_caps)); +} + template <class T> void PrintBackendServiceManager::RunSavedCallbacks( RemoteSavedCallbacks<T>& saved_callbacks,
diff --git a/chrome/browser/printing/print_backend_service_manager.h b/chrome/browser/printing/print_backend_service_manager.h index 0858d70..db7a1f23 100644 --- a/chrome/browser/printing/print_backend_service_manager.h +++ b/chrome/browser/printing/print_backend_service_manager.h
@@ -52,6 +52,10 @@ mojom::PrintBackendService::FetchCapabilitiesCallback callback); void GetDefaultPrinterName( mojom::PrintBackendService::GetDefaultPrinterNameCallback callback); + void GetPrinterSemanticCapsAndDefaults( + const std::string& printer_name, + mojom::PrintBackendService::GetPrinterSemanticCapsAndDefaultsCallback + callback); // Query if printer driver has been found to require elevated privilege in // order to have print queries/commands succeed. @@ -109,6 +113,8 @@ RemoteSavedCallbacks<mojom::PrinterCapsAndInfoResult>; using RemoteSavedGetDefaultPrinterNameCallbacks = RemoteSavedCallbacks<mojom::DefaultPrinterNameResult>; + using RemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks = + RemoteSavedCallbacks<mojom::PrinterSemanticCapsAndDefaultsResult>; PrintBackendServiceManager(); ~PrintBackendServiceManager(); @@ -139,6 +145,8 @@ GetRemoteSavedFetchCapabilitiesCallbacks(bool sandboxed); RemoteSavedGetDefaultPrinterNameCallbacks& GetRemoteSavedGetDefaultPrinterNameCallbacks(bool sandboxed); + RemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks& + GetRemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks(bool sandboxed); // Helper function to save outstanding callbacks. template <class T> @@ -169,6 +177,11 @@ const std::string& remote_id, const base::UnguessableToken& saved_callback_id, mojom::DefaultPrinterNameResultPtr printer_name); + void GetPrinterSemanticCapsAndDefaultsDone( + bool sandboxed, + const std::string& remote_id, + const base::UnguessableToken& saved_callback_id, + mojom::PrinterSemanticCapsAndDefaultsResultPtr printer_caps); // Helper function to run outstanding callbacks when a remote has become // disconnected. @@ -204,6 +217,10 @@ sandboxed_saved_get_default_printer_name_callbacks_; RemoteSavedGetDefaultPrinterNameCallbacks unsandboxed_saved_get_default_printer_name_callbacks_; + RemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks + sandboxed_saved_get_printer_semantic_caps_and_defaults_callbacks_; + RemoteSavedGetPrinterSemanticCapsAndDefaultsCallbacks + unsandboxed_saved_get_printer_semantic_caps_and_defaults_callbacks_; // Track if next service started should be sandboxed. bool is_sandboxed_service_ = true;
diff --git a/chrome/browser/profiles/profile_keep_alive_types.cc b/chrome/browser/profiles/profile_keep_alive_types.cc index 16cf5005..6014529 100644 --- a/chrome/browser/profiles/profile_keep_alive_types.cc +++ b/chrome/browser/profiles/profile_keep_alive_types.cc
@@ -49,6 +49,8 @@ return out << "kExtensionUpdater"; case ProfileKeepAliveOrigin::kProfileCreationFlow: return out << "kProfileCreationFlow"; + case ProfileKeepAliveOrigin::kPendingNotificationCloseEvent: + return out << "kPendingNotificationCloseEvent"; } NOTREACHED(); return out << static_cast<int>(origin);
diff --git a/chrome/browser/profiles/profile_keep_alive_types.h b/chrome/browser/profiles/profile_keep_alive_types.h index 6d2e5fd3..ac96fb5 100644 --- a/chrome/browser/profiles/profile_keep_alive_types.h +++ b/chrome/browser/profiles/profile_keep_alive_types.h
@@ -86,7 +86,11 @@ // This profile is being created (and is used to render GAIA sign-in flow). kProfileCreationFlow = 19, - kMaxValue = kProfileCreationFlow, + // The user just closed a notification. This might cause writing to the + // profile's NotificationDatabase, so wait for the event to finish processing. + kPendingNotificationCloseEvent = 20, + + kMaxValue = kPendingNotificationCloseEvent, }; std::ostream& operator<<(std::ostream& out,
diff --git a/chrome/browser/profiles/renderer_updater.cc b/chrome/browser/profiles/renderer_updater.cc index 5e71c1f..7b8273ed 100644 --- a/chrome/browser/profiles/renderer_updater.cc +++ b/chrome/browser/profiles/renderer_updater.cc
@@ -61,10 +61,11 @@ identity_manager_observation_.Observe(identity_manager_); #if BUILDFLAG(IS_CHROMEOS_ASH) oauth2_login_manager_ = - chromeos::OAuth2LoginManagerFactory::GetForProfile(profile_); + ash::OAuth2LoginManagerFactory::GetForProfile(profile_); oauth2_login_manager_->AddObserver(this); merge_session_running_ = - merge_session_throttling_utils::ShouldDelayRequestForProfile(profile_); + ash::merge_session_throttling_utils::ShouldDelayRequestForProfile( + profile_); #endif PrefService* pref_service = profile->GetPrefs(); @@ -174,9 +175,10 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) void RendererUpdater::OnSessionRestoreStateChanged( Profile* user_profile, - chromeos::OAuth2LoginManager::SessionRestoreState state) { + ash::OAuth2LoginManager::SessionRestoreState state) { merge_session_running_ = - merge_session_throttling_utils::ShouldDelayRequestForProfile(profile_); + ash::merge_session_throttling_utils::ShouldDelayRequestForProfile( + profile_); if (merge_session_running_) return;
diff --git a/chrome/browser/profiles/renderer_updater.h b/chrome/browser/profiles/renderer_updater.h index 076fe26..fee01c1 100644 --- a/chrome/browser/profiles/renderer_updater.h +++ b/chrome/browser/profiles/renderer_updater.h
@@ -30,7 +30,7 @@ // The RendererUpdater is responsible for updating renderers about state change. class RendererUpdater : public KeyedService, #if BUILDFLAG(IS_CHROMEOS_ASH) - public chromeos::OAuth2LoginManager::Observer, + public ash::OAuth2LoginManager::Observer, #endif public signin::IdentityManager::Observer { public: @@ -53,10 +53,10 @@ GetRendererConfiguration(content::RenderProcessHost* render_process_host); #if BUILDFLAG(IS_CHROMEOS_ASH) - // chromeos::OAuth2LoginManager::Observer: + // ash::OAuth2LoginManager::Observer: void OnSessionRestoreStateChanged( Profile* user_profile, - chromeos::OAuth2LoginManager::SessionRestoreState state) override; + ash::OAuth2LoginManager::SessionRestoreState state) override; #endif // IdentityManager::Observer: @@ -74,7 +74,7 @@ Profile* profile_; PrefChangeRegistrar pref_change_registrar_; #if BUILDFLAG(IS_CHROMEOS_ASH) - chromeos::OAuth2LoginManager* oauth2_login_manager_; + ash::OAuth2LoginManager* oauth2_login_manager_; bool merge_session_running_; std::vector<mojo::Remote<chrome::mojom::ChromeOSListener>> chromeos_listeners_;
diff --git a/chrome/browser/renderer_context_menu/link_to_text_menu_observer.cc b/chrome/browser/renderer_context_menu/link_to_text_menu_observer.cc index 8c2beba9..515b4c7 100644 --- a/chrome/browser/renderer_context_menu/link_to_text_menu_observer.cc +++ b/chrome/browser/renderer_context_menu/link_to_text_menu_observer.cc
@@ -33,7 +33,8 @@ // static std::unique_ptr<LinkToTextMenuObserver> LinkToTextMenuObserver::Create( - RenderViewContextMenuProxy* proxy) { + RenderViewContextMenuProxy* proxy, + content::RenderFrameHost* render_frame_host) { // WebContents can be null in tests. content::WebContents* web_contents = proxy->GetWebContents(); if (web_contents && extensions::ProcessManager::Get( @@ -43,12 +44,16 @@ return nullptr; } - return base::WrapUnique(new LinkToTextMenuObserver(proxy)); + DCHECK(render_frame_host); + return base::WrapUnique(new LinkToTextMenuObserver(proxy, render_frame_host)); } LinkToTextMenuObserver::LinkToTextMenuObserver( - RenderViewContextMenuProxy* proxy) - : proxy_(proxy) {} + RenderViewContextMenuProxy* proxy, + content::RenderFrameHost* render_frame_host) { + proxy_ = proxy; + render_frame_host_ = render_frame_host; +} LinkToTextMenuObserver::~LinkToTextMenuObserver() = default; void LinkToTextMenuObserver::InitMenu( @@ -193,13 +198,10 @@ } void LinkToTextMenuObserver::CopyLinkToClipboard() { - content::RenderFrameHost* main_frame = - proxy_->GetWebContents()->GetMainFrame(); - std::unique_ptr<ui::DataTransferEndpoint> data_transfer_endpoint = - main_frame && !main_frame->GetBrowserContext()->IsOffTheRecord() + !render_frame_host_->GetBrowserContext()->IsOffTheRecord() ? std::make_unique<ui::DataTransferEndpoint>( - main_frame->GetLastCommittedOrigin()) + render_frame_host_->GetLastCommittedOrigin()) : nullptr; ui::ScopedClipboardWriter scw(ui::ClipboardBuffer::kCopyPaste, @@ -237,13 +239,10 @@ void LinkToTextMenuObserver::OnGetExistingSelectorsComplete( const std::vector<std::string>& selectors) { - content::RenderFrameHost* main_frame = - proxy_->GetWebContents()->GetMainFrame(); - std::unique_ptr<ui::DataTransferEndpoint> data_transfer_endpoint = - main_frame && !main_frame->GetBrowserContext()->IsOffTheRecord() + !render_frame_host_->GetBrowserContext()->IsOffTheRecord() ? std::make_unique<ui::DataTransferEndpoint>( - main_frame->GetLastCommittedOrigin()) + render_frame_host_->GetLastCommittedOrigin()) : nullptr; ui::ScopedClipboardWriter scw(ui::ClipboardBuffer::kCopyPaste, @@ -266,9 +265,7 @@ mojo::Remote<blink::mojom::TextFragmentReceiver>& LinkToTextMenuObserver::GetRemote() { if (!remote_.is_bound()) { - content::RenderFrameHost* main_frame = - proxy_->GetWebContents()->GetMainFrame(); - main_frame->GetRemoteInterfaces()->GetInterface( + render_frame_host_->GetRemoteInterfaces()->GetInterface( remote_.BindNewPipeAndPassReceiver()); } return remote_;
diff --git a/chrome/browser/renderer_context_menu/link_to_text_menu_observer.h b/chrome/browser/renderer_context_menu/link_to_text_menu_observer.h index 7bd76c59..70a45e3 100644 --- a/chrome/browser/renderer_context_menu/link_to_text_menu_observer.h +++ b/chrome/browser/renderer_context_menu/link_to_text_menu_observer.h
@@ -6,6 +6,7 @@ #define CHROME_BROWSER_RENDERER_CONTEXT_MENU_LINK_TO_TEXT_MENU_OBSERVER_H_ #include "components/renderer_context_menu/render_view_context_menu_observer.h" +#include "content/public/browser/render_frame_host.h" #include "services/service_manager/public/cpp/interface_provider.h" #include "third_party/blink/public/mojom/link_to_text/link_to_text.mojom.h" #include "url/gurl.h" @@ -17,7 +18,8 @@ class LinkToTextMenuObserver : public RenderViewContextMenuObserver { public: static std::unique_ptr<LinkToTextMenuObserver> Create( - RenderViewContextMenuProxy* proxy); + RenderViewContextMenuProxy* proxy, + content::RenderFrameHost* render_frame_host); LinkToTextMenuObserver(const LinkToTextMenuObserver&) = delete; LinkToTextMenuObserver& operator=(const LinkToTextMenuObserver&) = delete; @@ -34,7 +36,8 @@ void OverrideGeneratedSelectorForTesting(const std::string& selector); private: - explicit LinkToTextMenuObserver(RenderViewContextMenuProxy* proxy); + explicit LinkToTextMenuObserver(RenderViewContextMenuProxy* proxy, + content::RenderFrameHost* render_frame_host); // Returns true if the link should be generated from the constructor, vs // determined when executed. bool ShouldPreemptivelyGenerateLink(); @@ -72,6 +75,7 @@ RenderViewContextMenuProxy* proxy_; GURL url_; GURL raw_url_; + content::RenderFrameHost* render_frame_host_; // True when the context menu was opened with text selected. bool link_needs_generation_ = false;
diff --git a/chrome/browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc b/chrome/browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc index 44666eb..0571d8d 100644 --- a/chrome/browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc +++ b/chrome/browser/renderer_context_menu/link_to_text_menu_observer_interactive_uitest.cc
@@ -19,6 +19,7 @@ #include "components/shared_highlighting/core/common/shared_highlighting_features.h" #include "components/shared_highlighting/core/common/shared_highlighting_metrics.h" #include "content/public/browser/context_menu_params.h" +#include "content/public/browser/render_frame_host.h" #include "content/public/test/browser_test.h" #include "net/dns/mock_host_resolver.h" #include "testing/gtest/include/gtest/gtest.h" @@ -69,7 +70,8 @@ void Reset(bool incognito) { menu_ = std::make_unique<MockRenderViewContextMenu>(incognito); - observer_ = LinkToTextMenuObserver::Create(menu_.get()); + observer_ = + LinkToTextMenuObserver::Create(menu_.get(), getRenderFrameHost()); menu_->SetObserver(observer_.get()); } @@ -83,6 +85,11 @@ MockRenderViewContextMenu* menu() { return menu_.get(); } LinkToTextMenuObserver* observer() { return observer_.get(); } + content::RenderFrameHost* getRenderFrameHost() { + auto* web_contents = browser()->tab_strip_model()->GetActiveWebContents(); + return web_contents->GetMainFrame(); + } + private: std::unique_ptr<LinkToTextMenuObserver> observer_; std::unique_ptr<MockRenderViewContextMenu> menu_; @@ -238,7 +245,7 @@ menu()->set_web_contents(web_contents); std::unique_ptr<LinkToTextMenuObserver> observer = - LinkToTextMenuObserver::Create(menu()); + LinkToTextMenuObserver::Create(menu(), getRenderFrameHost()); EXPECT_EQ(nullptr, observer); }
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu.cc b/chrome/browser/renderer_context_menu/render_view_context_menu.cc index 078275e..98d9abc 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -1720,7 +1720,8 @@ if (link_to_text_menu_observer_) return; - link_to_text_menu_observer_ = LinkToTextMenuObserver::Create(this); + link_to_text_menu_observer_ = + LinkToTextMenuObserver::Create(this, GetRenderFrameHost()); if (link_to_text_menu_observer_) { observers_.AddObserver(link_to_text_menu_observer_.get()); link_to_text_menu_observer_->InitMenu(params_);
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index 7e391ef..6ac28d92 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -7,6 +7,7 @@ import("//chrome/common/features.gni") import("//chrome/test/base/js2gtest.gni") import("//chrome/test/include_js_tests.gni") +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") import("//components/nacl/features.gni") import("//pdf/features.gni") import("//printing/buildflags/buildflags.gni") @@ -98,6 +99,10 @@ if (enable_print_preview) { public_deps += [ "print_preview:resources" ] } + + if (is_cfm) { + public_deps += [ "chromeos/chromebox_for_meetings:resources" ] + } } if (enable_js_type_check) {
diff --git a/chrome/browser/resources/chromeos/BUILD.gn b/chrome/browser/resources/chromeos/BUILD.gn index b7af840..59ae715 100644 --- a/chrome/browser/resources/chromeos/BUILD.gn +++ b/chrome/browser/resources/chromeos/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//chrome/common/features.gni") +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") import("//third_party/closure_compiler/compile_js.gni") import("//tools/grit/grit_rule.gni") @@ -57,4 +58,7 @@ "sys_internals:closure_compile", "vm:closure_compile", ] + if (is_cfm) { + deps += [ "chromebox_for_meetings:closure_compile" ] + } }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index 9ee4a97..f7064782 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -3610,3 +3610,14 @@ .replay(); }); }); + +TEST_F('ChromeVoxBackgroundTest', 'Abbreviation', function() { + const mockFeedback = this.createMockFeedback(); + const site = ` + <abbr title="uniform resource locator">URL</abbr> + `; + this.runWithLoadedTree(site, function(root) { + mockFeedback.expectSpeech('URL', 'uniform resource locator', 'Abbreviation') + .replay(); + }); +});
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js index f8e2d38d..ea658766 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -2543,6 +2543,7 @@ * @private */ Output.ROLE_INFO_ = { + abbr: {msgId: 'tag_abbr', inherits: 'abstractContainer'}, alert: {msgId: 'role_alert'}, alertDialog: {msgId: 'role_alertdialog', contextOrder: OutputContextOrder.FIRST},
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp index ac4302d..83cdadf 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp +++ b/chrome/browser/resources/chromeos/accessibility/strings/chromevox_strings.grdp
@@ -3339,4 +3339,7 @@ <message desc="Spoken to describe a candidate in the IME conversion window." name="IDS_CHROMEVOX_IME_CANDIDATE" is_accessibility_with_no_ui="true"> Text conversion candidate </message> + <message desc="Spoken to describe a <abbr> tag. For example, <abbr title='uniform resource locator'>URL/<abbr> would be spoken as 'URL, uniform resource locator, Abbreviation'" name="IDS_CHROMEVOX_TAG_ABBR" is_accessibility_with_no_ui="true"> + Abbreviation + </message> </grit-part>
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/BUILD.gn b/chrome/browser/resources/chromeos/chromebox_for_meetings/BUILD.gn new file mode 100644 index 0000000..1bab7a0a --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/BUILD.gn
@@ -0,0 +1,79 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") +import("//third_party/closure_compiler/compile_js.gni") +import("//tools/grit/grit_rule.gni") +import("//tools/grit/preprocess_if_expr.gni") +import("//tools/polymer/html_to_js.gni") +import("//ui/webui/resources/tools/generate_grd.gni") + +assert(is_chromeos, "CFM Network Settings is only available on ChromeOS builds") +assert(is_cfm, "CFM Network Settings is only available on CFM builds") + +preprocess_folder = "preprocessed" +preprocess_gen_manifest = "preprocessed_gen_manifest.json" +resources_grd_file = "$target_gen_dir/resources.grd" + +html_to_js("web_components") { + js_files = [ "cfm_network_settings.js" ] +} + +preprocess_if_expr("preprocess_generated") { + deps = [ ":web_components" ] + in_folder = target_gen_dir + out_folder = "$target_gen_dir/$preprocess_folder" + out_manifest = "$target_gen_dir/$preprocess_gen_manifest" + in_files = [ "cfm_network_settings.js" ] +} + +js_library("cfm_network_settings") { + deps = [ + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider.m", + "//ui/webui/resources/cr_components/chromeos/network:network_list_types.m", + "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m", + "//ui/webui/resources/js:cr.m", + "//ui/webui/resources/js:load_time_data.m", + "//ui/webui/resources/js:util.m", + ] +} + +js_library("cfm_network_settings_browser_proxy") { + deps = [ "//ui/webui/resources/js:cr.m" ] +} + +js_type_check("closure_compile") { + is_polymer3 = true + closure_flags = default_closure_args + [ "language_in=ECMASCRIPT_2020" ] + deps = [ + ":cfm_network_settings", + ":cfm_network_settings_browser_proxy", + ] +} + +generate_grd("build_grd") { + grd_prefix = "cfm_network_settings" + out_grd = resources_grd_file + input_files = [ + "cfm_network_settings_container.html", + "cfm_network_settings_browser_proxy.js", + ] + input_files_base_dir = rebase_path(".", "//") + deps = [ ":preprocess_generated" ] + manifest_files = [ "$target_gen_dir/$preprocess_gen_manifest" ] +} + +grit("resources") { + enable_input_discovery_for_gn_analyze = false + source = resources_grd_file + deps = [ ":build_grd" ] + outputs = [ + "grit/cfm_network_settings_resources.h", + "grit/cfm_network_settings_resources_map.h", + "grit/cfm_network_settings_resources_map.cc", + "cfm_network_settings_resources.pak", + ] + output_dir = "$root_gen_dir/chrome" +}
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/OWNERS b/chrome/browser/resources/chromeos/chromebox_for_meetings/OWNERS new file mode 100644 index 0000000..063e069 --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/OWNERS
@@ -0,0 +1 @@ +file://chromeos/components/chromebox_for_meetings/OWNERS
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.html b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.html new file mode 100644 index 0000000..12f1024 --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.html
@@ -0,0 +1,38 @@ +<style> + body, + html { + overflow: scroll; + } + + #content { + margin: 0 16px; + } + + #network-select, + #custom-items { + flex: 1; + height: 100%; + width: 100%; + } +</style> + +<iron-iconset-svg name="cfm-custom" size="24"> + <svg> + <defs> + <g id="manage-certs"> + <path d="M0 0h24v24H0z" fill="none"> + <path d="M2 2v20h20V2H2zm18 18H4V4h2v7l2.5-1.5L11 11V4h9v16z"> + </g> + </defs> + </svg> +</iron-iconset-svg> +<div id="content"> + <network-list id="custom-items" + custom-items="[[customItems_]]" + on-custom-item-selected="onCustomItemSelected_"> + </network-list> + <h2>$i18n{availableNetworks}</h2> + <network-select id="network-select" + on-network-item-selected="onNetworkItemSelected_"> + </network-select> +</div>
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.js b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.js new file mode 100644 index 0000000..c7de449 --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings.js
@@ -0,0 +1,160 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'chrome://resources/cr_components/chromeos/network/network_select.m.js'; +import 'chrome://resources/cr_components/chromeos/network/network_list.m.js'; +import 'chrome://resources/js/load_time_data.m.js'; +import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js'; +import './strings.m.js'; + +import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +import {NetworkList} from 'chrome://resources/cr_components/chromeos/network/network_list_types.m.js'; +import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js'; +import {$} from 'chrome://resources/js/util.m.js'; +import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {CfmNetworkSettingsBrowserProxy, CfmNetworkSettingsBrowserProxyImpl} from './cfm_network_settings_browser_proxy.js'; + +/** + * Data sent with event when custom item is selected. + * @typedef {{onTap: !function(CfmNetworkSettingsBrowserProxy)}} + */ +let networkCustomItemCustomData; + +/** + * @param {!OncMojo.NetworkStateProperties} networkState + */ +function shouldShowNetworkDetails(networkState) { + const mojom = chromeos.networkConfig.mojom; + return OncMojo.connectionStateIsConnected(networkState.connectionState) || + networkState.connectionState == mojom.ConnectionStateType.kConnecting || + (networkState.type == mojom.NetworkType.kCellular); +} + +/** + * Customized network settings menu for display in a dialog on CFM. + * @polymer + */ +export class CfmNetworkSettings extends PolymerElement { + static get is() { + return 'cfm-network-settings'; + } + + static get template() { + return html`{__html_template__}`; + } + + static get properties() { + return { + customItems_: { + type: Array, + notify: false, + readOnly: true, + } + }; + } + + constructor() { + super(); + + /** @private {?CfmNetworkSettingsBrowserProxy} */ + this.browserProxy_ = null; + } + + /** @override */ + connectedCallback() { + super.connectedCallback(); + this.browserProxy_ = CfmNetworkSettingsBrowserProxyImpl.getInstance(); + } + + /** + * Handles tap on a network entry in networks list. + * @param {!CustomEvent<!OncMojo.NetworkStateProperties>} e + * @private + */ + onNetworkItemSelected_(e) { + const mojom = chromeos.networkConfig.mojom; + const networkState = e.detail; + const guid = networkState.guid; + + if (shouldShowNetworkDetails(networkState)) { + this.browserProxy_.showNetworkDetails(guid); + return; + } + + if (!networkState.connectable || networkState.errorState) { + this.browserProxy_.showNetworkConfig(guid); + return; + } + + const networkConfig = + MojoInterfaceProviderImpl.getInstance().getMojoServiceRemote(); + networkConfig.startConnect(guid).then(response => { + switch (response.result) { + case mojom.StartConnectResult.kSuccess: + return; + case mojom.StartConnectResult.kInvalidGuid: + case mojom.StartConnectResult.kInvalidState: + case mojom.StartConnectResult.kCanceled: + return; + case mojom.StartConnectResult.kNotConfigured: + if (!OncMojo.networkTypeIsMobile(networkState.type)) { + this.browserProxy_.showNetworkConfig(guid); + } else { + console.error('Cellular network is not configured: ' + guid); + } + return; + case mojom.StartConnectResult.kBlocked: + case mojom.StartConnectResult.kUnknown: + console.error( + 'startConnect failed for: ' + guid + ': ' + response.message); + return; + } + }); + } + + /** + * The list of custom items to display after the list of networks. + * See NetworkList for details. + * @return {!Array<NetworkList.CustomItemState>} + * @private + */ + get customItems_() { + return [ + { + customItemType: NetworkList.CustomItemType.OOBE, + customItemName: 'addWiFiListItemName', + polymerIcon: 'cr:add', + showBeforeNetworksList: false, + customData: {onTap: proxy => proxy.showAddWifi()}, + }, + { + customItemType: NetworkList.CustomItemType.OOBE, + customItemName: 'proxySettingsListItemName', + polymerIcon: 'cr:info-outline', + showBeforeNetworksList: false, + customData: {onTap: proxy => proxy.showNetworkDetails('')}, + }, + { + customItemType: NetworkList.CustomItemType.OOBE, + customItemName: 'manageCertsListItemName', + polymerIcon: 'cfm-custom:manage-certs', + showBeforeNetworksList: false, + customData: {onTap: proxy => proxy.showManageCerts()}, + }, + ]; + } + + /** + * Handles tap on a custom item from the networks list. + * @param {!CustomEvent<{customData:!networkCustomItemCustomData}>} event + * @private + */ + onCustomItemSelected_(event) { + let itemState = event.detail; + itemState.customData.onTap(this.browserProxy_); + } +} + +customElements.define(CfmNetworkSettings.is, CfmNetworkSettings);
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_browser_proxy.js b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_browser_proxy.js new file mode 100644 index 0000000..5775f8a --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_browser_proxy.js
@@ -0,0 +1,43 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import {addSingletonGetter} from 'chrome://resources/js/cr.m.js'; + +/** @interface */ +export class CfmNetworkSettingsBrowserProxy { + /** @param {string} guid */ + showNetworkDetails(guid) {} + + /** @param {string} guid */ + showNetworkConfig(guid) {} + + showAddWifi() {} + + showManageCerts() {} +} + +/** @implements {CfmNetworkSettingsBrowserProxy} */ +export class CfmNetworkSettingsBrowserProxyImpl { + /** @override */ + showNetworkDetails(guid) { + chrome.send('showNetworkDetails', [guid]); + } + + /** @override */ + showNetworkConfig(guid) { + chrome.send('showNetworkConfig', [guid]); + } + + /** @override */ + showAddWifi() { + chrome.send('showAddWifi'); + } + + /** @override */ + showManageCerts() { + chrome.send('showManageCerts'); + } +} + +addSingletonGetter(CfmNetworkSettingsBrowserProxyImpl);
diff --git a/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_container.html b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_container.html new file mode 100644 index 0000000..dc5a6ff --- /dev/null +++ b/chrome/browser/resources/chromeos/chromebox_for_meetings/cfm_network_settings_container.html
@@ -0,0 +1,8 @@ +<!DOCTYPE html> +<html dir="$i18n{textdirection}" lang="$i18n{language}"> +<meta charset="utf-8"> +<title>$i18n{headTitle}</title> +<link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> +<cfm-network-settings></cfm-network-settings> +<script type="module" src="cfm_network_settings.js"></script> +</html>
diff --git a/chrome/browser/resources/extensions/activity_log/activity_log.ts b/chrome/browser/resources/extensions/activity_log/activity_log.ts index 250255c..1b098ed 100644 --- a/chrome/browser/resources/extensions/activity_log/activity_log.ts +++ b/chrome/browser/resources/extensions/activity_log/activity_log.ts
@@ -14,7 +14,7 @@ import '../shared_style.js'; import '../shared_vars.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; @@ -54,7 +54,7 @@ } const ExtensionsActivityLogElementBase = - mixinBehaviors([CrContainerShadowBehavior, I18nBehavior], PolymerElement) as + mixinBehaviors([I18nBehavior], CrContainerShadowMixin(PolymerElement)) as {new (): PolymerElement & I18nBehavior}; class ExtensionsActivityLogElement extends ExtensionsActivityLogElementBase {
diff --git a/chrome/browser/resources/extensions/detail_view.ts b/chrome/browser/resources/extensions/detail_view.ts index 456efa5..7de273a 100644 --- a/chrome/browser/resources/extensions/detail_view.ts +++ b/chrome/browser/resources/extensions/detail_view.ts
@@ -24,11 +24,11 @@ import './strings.m.js'; import './toggle_row.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {CrToggleElement} from 'chrome://resources/cr_elements/cr_toggle/cr_toggle.m.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; -import {afterNextRender, html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {afterNextRender, html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {ItemDelegate} from './item.js'; import {ItemMixin} from './item_mixin.js'; @@ -52,7 +52,7 @@ } const ExtensionsDetailViewElementBase = - mixinBehaviors([CrContainerShadowBehavior], ItemMixin(PolymerElement)) as + CrContainerShadowMixin(ItemMixin(PolymerElement)) as {new (): PolymerElement}; export class ExtensionsDetailViewElement extends
diff --git a/chrome/browser/resources/extensions/error_page.ts b/chrome/browser/resources/extensions/error_page.ts index 4a5855a..37b2afdd 100644 --- a/chrome/browser/resources/extensions/error_page.ts +++ b/chrome/browser/resources/extensions/error_page.ts
@@ -14,12 +14,12 @@ import './code_section.js'; import './shared_style.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js'; import {FocusOutlineManager} from 'chrome://resources/js/cr/ui/focus_outline_manager.m.js'; import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; -import {afterNextRender, html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {afterNextRender, html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {navigation, Page} from './navigation_helper.js'; @@ -82,8 +82,7 @@ } const ExtensionsErrorPageElementBase = - mixinBehaviors([CrContainerShadowBehavior], PolymerElement) as - {new (): PolymerElement}; + CrContainerShadowMixin(PolymerElement) as {new (): PolymerElement}; class ExtensionsErrorPageElement extends ExtensionsErrorPageElementBase { static get is() {
diff --git a/chrome/browser/resources/extensions/item_list.ts b/chrome/browser/resources/extensions/item_list.ts index a53863f..c54886a 100644 --- a/chrome/browser/resources/extensions/item_list.ts +++ b/chrome/browser/resources/extensions/item_list.ts
@@ -6,7 +6,7 @@ import './item.js'; import './shared_style.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {I18nBehavior} from 'chrome://resources/js/i18n_behavior.m.js'; import {IronA11yAnnouncer} from 'chrome://resources/polymer/v3_0/iron-a11y-announcer/iron-a11y-announcer.js'; import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; @@ -16,7 +16,7 @@ type Filter = (info: chrome.developerPrivate.ExtensionInfo) => boolean; const ExtensionsItemListElementBase = - mixinBehaviors([CrContainerShadowBehavior, I18nBehavior], PolymerElement) as + mixinBehaviors([I18nBehavior], CrContainerShadowMixin(PolymerElement)) as {new (): PolymerElement & I18nBehavior}; class ExtensionsItemListElement extends ExtensionsItemListElementBase {
diff --git a/chrome/browser/resources/extensions/keyboard_shortcuts.ts b/chrome/browser/resources/extensions/keyboard_shortcuts.ts index d72dd1b..5fca4b18 100644 --- a/chrome/browser/resources/extensions/keyboard_shortcuts.ts +++ b/chrome/browser/resources/extensions/keyboard_shortcuts.ts
@@ -8,7 +8,7 @@ import 'chrome://resources/polymer/v3_0/paper-styles/color.js'; import './shortcut_input.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; import {KeyboardShortcutDelegate} from './keyboard_shortcut_delegate.js'; @@ -23,8 +23,7 @@ } const ExtensionsKeyboardShortcutsElementBase = - mixinBehaviors([CrContainerShadowBehavior], PolymerElement) as - {new (): PolymerElement}; + CrContainerShadowMixin(PolymerElement) as {new (): PolymerElement}; // The UI to display and manage keyboard shortcuts set for extension commands. class ExtensionsKeyboardShortcutsElement extends
diff --git a/chrome/browser/resources/feedback_webui/js/feedback.js b/chrome/browser/resources/feedback_webui/js/feedback.js index 25085e0..856e7f8 100644 --- a/chrome/browser/resources/feedback_webui/js/feedback.js +++ b/chrome/browser/resources/feedback_webui/js/feedback.js
@@ -9,6 +9,8 @@ import {FEEDBACK_LANDING_PAGE, FEEDBACK_LANDING_PAGE_TECHSTOP, FEEDBACK_LEGAL_HELP_URL, FEEDBACK_PRIVACY_POLICY_URL, FEEDBACK_TERM_OF_SERVICE_URL, openUrlInAppWindow} from './feedback_util.js'; import {takeScreenshot} from './take_screenshot.js'; +/** @type {!number} */ +const formOpenTime = new Date().getTime(); /** @type {string} */ const dialogArgs = chrome.getVariableValue('dialogArguments'); @@ -51,29 +53,15 @@ * @param {boolean} useSystemInfo */ sendFeedbackReport(useSystemInfo) { - if (!useSystemInfo) { - feedbackInfo.systemInformation = []; - this.sendFeedbackReportNow(); - return; - } - - this.getSystemInformation().then(sysInfo => { - if (feedbackInfo.systemInformation) { - feedbackInfo.systemInformation = - feedbackInfo.systemInformation.concat(sysInfo); - } else { - feedbackInfo.systemInformation = sysInfo; - } - this.sendFeedbackReportNow(); - }); - } - - sendFeedbackReportNow() { const ID = Math.round(Date.now() / 1000); const FLOW = feedbackInfo.flow; + if (!useSystemInfo) { + feedbackInfo.systemInformation = []; + } chrome.feedbackPrivate.sendFeedback( - feedbackInfo, function(result, landingPageType) { + feedbackInfo, useSystemInfo, formOpenTime, + function(result, landingPageType) { if (result == chrome.feedbackPrivate.Status.SUCCESS) { if (FLOW != chrome.feedbackPrivate.FeedbackFlow.LOGIN && landingPageType !=
diff --git a/chrome/browser/resources/media_router/cast_feedback_ui.js b/chrome/browser/resources/media_router/cast_feedback_ui.js index faa087f1..ab2465f 100644 --- a/chrome/browser/resources/media_router/cast_feedback_ui.js +++ b/chrome/browser/resources/media_router/cast_feedback_ui.js
@@ -70,7 +70,8 @@ /** @override */ sendFeedback(info) { return new Promise( - resolve => chrome.feedbackPrivate.sendFeedback(info, resolve)); + resolve => chrome.feedbackPrivate.sendFeedback( + info, /*loadSystemInfo=*/ null, /*formOpenTime=*/ null, resolve)); } }
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn index 4034c79..a1a47a1 100644 --- a/chrome/browser/resources/settings/BUILD.gn +++ b/chrome/browser/resources/settings/BUILD.gn
@@ -136,9 +136,6 @@ "hats_browser_proxy.js", "i18n_setup.js", "incompatible_applications_page/incompatible_applications_browser_proxy.js", - "languages_page/languages.js", - "languages_page/languages_browser_proxy.js", - "languages_page/languages_settings_metrics_proxy.js", "lazy_load.js", "lifetime_browser_proxy.js", "metrics_browser_proxy.js", @@ -175,7 +172,6 @@ if (is_chromeos_ash) { in_files += [ "autofill_page/blocking_request_manager.js", - "languages_page/languages_metrics_proxy.js", "people_page/account_manager_browser_proxy.js", "site_settings/android_info_browser_proxy.js", ] @@ -187,6 +183,9 @@ ] } in_files += [ + "languages_page/languages.js", + "languages_page/languages_browser_proxy.js", + "languages_page/languages_settings_metrics_proxy.js", "people_page/import_data_browser_proxy.js", "people_page/manage_profile_browser_proxy.js", ] @@ -248,9 +247,6 @@ "controls/settings_toggle_button.js", "downloads_page/downloads_page.js", "icons.js", - "languages_page/add_languages_dialog.js", - "languages_page/languages_page.js", - "languages_page/languages_subpage.js", "settings_menu/settings_menu.js", "on_startup_page/on_startup_page.js", "on_startup_page/startup_url_dialog.js", @@ -340,18 +336,22 @@ ] } - if (!is_mac) { + if (!is_chromeos_ash && !is_mac) { in_files += [ "languages_page/edit_dictionary_page.js" ] } - if (!is_chromeos_ash) { - if (!is_chromeos_lacros) { - in_files += [ - "default_browser_page/default_browser_page.js", - "system_page/system_page.js", - ] - } + if (!is_chromeos) { in_files += [ + "default_browser_page/default_browser_page.js", + "system_page/system_page.js", + ] + } + + if (!is_chromeos_ash) { + in_files += [ + "languages_page/add_languages_dialog.js", + "languages_page/languages_page.js", + "languages_page/languages_subpage.js", "people_page/import_data_dialog.js", "people_page/manage_profile.js", ] @@ -386,7 +386,6 @@ "clear_browsing_data_dialog:closure_compile", "controls:closure_compile", "downloads_page:closure_compile", - "languages_page:closure_compile", "on_startup_page:closure_compile", "people_page:closure_compile", "prefs:closure_compile", @@ -404,7 +403,12 @@ "site_settings:closure_compile", "site_settings_page:closure_compile", ] - if (!is_chromeos_ash && !is_chromeos_lacros) { + + if (!is_chromeos_ash) { + deps += [ "languages_page:closure_compile" ] + } + + if (!is_chromeos) { deps += [ "default_browser_page:closure_compile", "system_page:closure_compile", @@ -498,10 +502,6 @@ "autofill_page:payments_section", "chrome_cleanup_page:chrome_cleanup_proxy", "clear_browsing_data_dialog:clear_browsing_data_browser_proxy", - "languages_page:languages_browser_proxy", - "languages_page:languages_metrics_proxy", - "languages_page:languages_settings_metrics_proxy", - "languages_page:languages_subpage", "privacy_page:cookies_page", "privacy_page:security_page", "privacy_page/privacy_review:privacy_review_page", @@ -512,6 +512,15 @@ "site_settings:site_settings_prefs_browser_proxy", "site_settings_page", ] + + if (!is_chromeos_ash) { + deps += [ + "languages_page:languages_browser_proxy", + "languages_page:languages_page", + "languages_page:languages_settings_metrics_proxy", + "languages_page:languages_subpage", + ] + } } js_library("lifetime_browser_proxy") { @@ -587,7 +596,6 @@ "clear_browsing_data_dialog:web_components", "controls:web_components", "downloads_page:web_components", - "languages_page:web_components", "on_startup_page:web_components", "people_page:web_components", "privacy_page:polymer3_elements", @@ -607,7 +615,11 @@ ":web_components_local", ] - if (!is_chromeos_ash && !is_chromeos_lacros) { + if (!is_chromeos_ash) { + public_deps += [ "languages_page:web_components" ] + } + + if (!is_chromeos) { public_deps += [ "default_browser_page:web_components", "system_page:web_components",
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.html b/chrome/browser/resources/settings/basic_page/basic_page.html index 741d47b..f429000 100644 --- a/chrome/browser/resources/settings/basic_page/basic_page.html +++ b/chrome/browser/resources/settings/basic_page/basic_page.html
@@ -168,8 +168,16 @@ restamp> <settings-section page-title="$i18n{languagesPageTitle}" section="languages"> +<if expr="chromeos"> + <cr-link-row id="openChromeOSLanguagesSettings" + on-click="onOpenChromeOSLanguagesSettingsClick_" + label="$i18n{openChromeOSLanguagesSettingsLabel}" external> + </cr-link-row> +</if> +<if expr="not chromeos"> <settings-languages-page prefs="{{prefs}}"> </settings-languages-page> +</if> </settings-section> </template> <template is="dom-if" if="[[showPage_(pageVisibility.downloads)]]"
diff --git a/chrome/browser/resources/settings/basic_page/basic_page.js b/chrome/browser/resources/settings/basic_page/basic_page.js index 497f68b..b9a1888 100644 --- a/chrome/browser/resources/settings/basic_page/basic_page.js +++ b/chrome/browser/resources/settings/basic_page/basic_page.js
@@ -309,6 +309,16 @@ } // </if> + // <if expr="chromeos"> + /** @private */ + onOpenChromeOSLanguagesSettingsClick_() { + const chromeOSLanguagesSettingsPath = + loadTimeData.getString('chromeOSLanguagesSettingsPath'); + window.location.href = + `chrome://os-settings/${chromeOSLanguagesSettingsPath}`; + } + // </if> + /** @private */ onResetProfileBannerClosed_() { this.showResetProfileBanner_ = false;
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html index 61c2ec8..ea71d9f 100644 --- a/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html +++ b/chrome/browser/resources/settings/chromeos/os_about_page/os_about_page.html
@@ -69,7 +69,7 @@ } iron-icon[icon='cr:error-outline'] { - fill: var(--cros-error-color); + fill: var(--cros-text-color-alert); } .settings-box .start {
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.html b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.html index bb1e885..b4f92240 100644 --- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.html +++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/shared_vars.html
@@ -13,7 +13,6 @@ --expanded-permission-row-height: 48px; --header-font-weight: 500; --header-text-color: var(--cros-text-color-secondary); - --permission-icon-color: var(--cros-app-management-permission-icon-color); --permission-icon-padding: 20px; --permission-list-item-height: 48px; --permission-list-item-with-description-height: 64px;
diff --git a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html index 7c959c74..5b4bfba1 100644 --- a/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html +++ b/chrome/browser/resources/settings/chromeos/os_languages_page/input_page.html
@@ -43,7 +43,7 @@ } .explain-selected { - color: var(--cros-success-color); + color: var(--cros-text-color-positive); font-weight: initial; margin-top: 4px; }
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html index 5ccf5ef..37e1a37 100644 --- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html +++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.html
@@ -58,7 +58,7 @@ } #sync-setup { - --cr-secondary-text-color: var(--cros-error-color); + --cr-secondary-text-color: var(--cros-text-color-alert); } cr-link-row {
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html index de1b746..17eca9c 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html +++ b/chrome/browser/resources/settings/chromeos/os_settings_page/os_settings_page.html
@@ -88,7 +88,7 @@ } #secondaryUserIcon { - background-color : var(--cros-user-icon-color-secondary); + background-color : var(--google-grey-300); background-image: url(chrome://theme/IDR_SECONDARY_USER_SETTINGS); background-position: center; background-repeat: no-repeat;
diff --git a/chrome/browser/resources/settings/ensure_lazy_loaded.js b/chrome/browser/resources/settings/ensure_lazy_loaded.js index 426fa21..40bb5b1 100644 --- a/chrome/browser/resources/settings/ensure_lazy_loaded.js +++ b/chrome/browser/resources/settings/ensure_lazy_loaded.js
@@ -21,11 +21,14 @@ 'certificate-manager', // </if> 'settings-a11y-page', 'settings-downloads-page', - 'settings-languages-page', 'settings-reset-page', + // <if expr="not chromeos"> + 'settings-languages-page', + // </if> + 'settings-reset-page', // <if expr="not chromeos and not lacros"> 'settings-system-page', // </if> - // <if expr="not is_macosx"> + // <if expr="not chromeos and not is_macosx"> 'settings-edit-dictionary-page', // </if> ].map(name => customElements.whenDefined(name)));
diff --git a/chrome/browser/resources/settings/languages_page/BUILD.gn b/chrome/browser/resources/settings/languages_page/BUILD.gn index 2435cd88..704443b 100644 --- a/chrome/browser/resources/settings/languages_page/BUILD.gn +++ b/chrome/browser/resources/settings/languages_page/BUILD.gn
@@ -14,7 +14,6 @@ ":edit_dictionary_page", ":languages", ":languages_browser_proxy", - ":languages_metrics_proxy", ":languages_page", ":languages_settings_metrics_proxy", ":languages_subpage", @@ -86,11 +85,6 @@ ] } -js_library("languages_metrics_proxy") { - deps = [ "//ui/webui/resources/js:cr.m" ] - externs_list = [ "$externs_path/metrics_private.js" ] -} - js_library("languages_settings_metrics_proxy") { deps = [ "//ui/webui/resources/js:cr.m" ] externs_list = [ "$externs_path/metrics_private.js" ] @@ -99,7 +93,6 @@ js_library("languages_page") { deps = [ ":languages", - ":languages_metrics_proxy", ":languages_settings_metrics_proxy", "..:lifetime_browser_proxy", "..:route", @@ -117,7 +110,6 @@ js_library("languages_subpage") { deps = [ ":languages", - ":languages_metrics_proxy", ":languages_settings_metrics_proxy", "..:lifetime_browser_proxy", "..:route",
diff --git a/chrome/browser/resources/settings/languages_page/languages_metrics_proxy.js b/chrome/browser/resources/settings/languages_page/languages_metrics_proxy.js deleted file mode 100644 index f386056..0000000 --- a/chrome/browser/resources/settings/languages_page/languages_metrics_proxy.js +++ /dev/null
@@ -1,91 +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. - -/** - * @fileoverview - * Handles metrics for ChromeOS's languages settings in the browser. - * TODO(crbug/1109431): Remove these metrics when languages settings migration - * is completed and data analysed. - */ - -import {addSingletonGetter} from 'chrome://resources/js/cr.m.js'; - -/** - * Keeps in sync with SettingsLanguagesPageBrowserInteraction - * in tools/metrics/histograms/enums.xml. - * @enum {number} - */ -export const LanguagesPageInteraction = { - SWITCH_SYSTEM_LANGUAGE: 0, - RESTART: 1, - OPEN_CUSTOM_SPELL_CHECK: 2, -}; - -/** @interface */ -export class LanguagesMetricsProxy { - /** - * Records the interaction to enumerated histogram. - * @param {!LanguagesPageInteraction} interaction - */ - recordInteraction(interaction) {} - - /* Records when users select "Add languages". */ - recordAddLanguages() {} - - /** - * Records when users toggle "Spell check" option. - * @param {boolean} value - */ - recordToggleSpellCheck(value) {} - - /** - * Records when users toggle "Offer to translate languages you don't read" - * option. - * @param {boolean} value - */ - recordToggleTranslate(value) {} - - /** - * Records when users check/uncheck "Offer to translate pages in this - * language" checkbox. - * @param {boolean} value - */ - recordTranslateCheckboxChanged(value) {} -} - -/** @implements {LanguagesMetricsProxy} */ -export class LanguagesMetricsProxyImpl { - /** @override */ - recordInteraction(interaction) { - chrome.metricsPrivate.recordEnumerationValue( - 'ChromeOS.Settings.Languages.Browser.Interaction', interaction, - Object.keys(LanguagesPageInteraction).length); - } - - /** @override */ - recordAddLanguages() { - chrome.metricsPrivate.recordUserAction( - 'ChromeOS.Settings.Languages.Browser.AddLanguages'); - } - - /** @override */ - recordToggleSpellCheck(value) { - chrome.metricsPrivate.recordBoolean( - 'ChromeOS.Settings.Languages.Browser.Toggle.SpellCheck', value); - } - - /** @override */ - recordToggleTranslate(value) { - chrome.metricsPrivate.recordBoolean( - 'ChromeOS.Settings.Languages.Browser.Toggle.Translate', value); - } - - /** @override */ - recordTranslateCheckboxChanged(value) { - chrome.metricsPrivate.recordBoolean( - 'ChromeOS.Settings.Languages.Browser.OfferToTranslateCheckbox', value); - } -} - -addSingletonGetter(LanguagesMetricsProxyImpl);
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.html b/chrome/browser/resources/settings/languages_page/languages_page.html index 6cdbac6..72242e4 100644 --- a/chrome/browser/resources/settings/languages_page/languages_page.html +++ b/chrome/browser/resources/settings/languages_page/languages_page.html
@@ -107,14 +107,6 @@ focus-config="[[focusConfig_]]"> <div route-path="default"> <if expr="chromeos"> - <template is="dom-if" if="[[isChromeOSLanguagesSettingsUpdate_]]"> - <cr-link-row id="openChromeOSLanguagesSettings" - on-click="onOpenChromeOSLanguagesSettingsClick_" - label="$i18n{openChromeOSLanguagesSettingsLabel}" external> - </cr-link-row> - </template> -</if> <!-- chromeos --> -<if expr="chromeos"> <template is="dom-if" if="[[!isChromeOSLanguagesSettingsUpdate_]]"> </if> <!-- chromeos --> <template is="dom-if" if="[[enableDesktopRestructuredLanguageSettings_]]"> @@ -151,9 +143,6 @@ sub-label="[[getSpellCheckSubLabel_(spellCheckLanguages_)]]" pref="{{prefs.browser.enable_spellchecking}}" disabled="[[!spellCheckLanguages_.length]]" - <if expr="chromeos"> - on-settings-boolean-control-change="onSpellcheckToggleChange_" - </if> > </settings-toggle-button> <if expr="_google_chrome or not is_macosx">
diff --git a/chrome/browser/resources/settings/languages_page/languages_page.js b/chrome/browser/resources/settings/languages_page/languages_page.js index f273b373..f894dc05d 100644 --- a/chrome/browser/resources/settings/languages_page/languages_page.js +++ b/chrome/browser/resources/settings/languages_page/languages_page.js
@@ -48,10 +48,6 @@ import {routes} from '../route.js'; import {Route, Router} from '../router.js'; -// <if expr="chromeos"> -import {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './languages_metrics_proxy.js'; -// </if> - import {LanguageSettingsActionType, LanguageSettingsMetricsProxy, LanguageSettingsMetricsProxyImpl, LanguageSettingsPageImpressionType} from './languages_settings_metrics_proxy.js'; /** @@ -203,25 +199,11 @@ constructor() { super(); - // <if expr="chromeos"> - /** @private {!LanguagesMetricsProxy} */ - this.languagesMetricsProxy_ = LanguagesMetricsProxyImpl.getInstance(); - // </if> /** @private {!LanguageSettingsMetricsProxy} */ this.languageSettingsMetricsProxy_ = LanguageSettingsMetricsProxyImpl.getInstance(); } - // <if expr="chromeos"> - /** @private */ - onOpenChromeOSLanguagesSettingsClick_() { - const chromeOSLanguagesSettingsPath = - loadTimeData.getString('chromeOSLanguagesSettingsPath'); - window.location.href = - `chrome://os-settings/${chromeOSLanguagesSettingsPath}`; - } - // </if> - // <if expr="not is_macosx"> /** * Checks if there are any errors downloading the spell check dictionary. @@ -337,10 +319,6 @@ * @private */ onEditDictionaryTap_() { - // <if expr="chromeos"> - this.languagesMetricsProxy_.recordInteraction( - LanguagesPageInteraction.OPEN_CUSTOM_SPELL_CHECK); - // </if> Router.getInstance().navigateTo( /** @type {!Route} */ (routes.EDIT_DICTIONARY)); } @@ -368,16 +346,6 @@ return this.languageHelper.getLanguage(languageCode).displayName; } - // <if expr="chromeos"> - /** - * @param {!Event} e - * @private - */ - onSpellcheckToggleChange_(e) { - this.languagesMetricsProxy_.recordToggleSpellCheck(e.target.checked); - } - // </if> - /** * Handler to initiate another attempt at downloading the spell check * dictionary for a specified language.
diff --git a/chrome/browser/resources/settings/languages_page/languages_subpage.js b/chrome/browser/resources/settings/languages_page/languages_subpage.js index 9af3d08..a0d4c52a 100644 --- a/chrome/browser/resources/settings/languages_page/languages_subpage.js +++ b/chrome/browser/resources/settings/languages_page/languages_subpage.js
@@ -39,10 +39,6 @@ import {LifetimeBrowserProxyImpl} from '../lifetime_browser_proxy.js'; import {PrefsBehavior, PrefsBehaviorInterface} from '../prefs/prefs_behavior.js'; -// <if expr="chromeos"> -import {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './languages_metrics_proxy.js'; -// </if> - import {LanguageSettingsActionType, LanguageSettingsMetricsProxy, LanguageSettingsMetricsProxyImpl, LanguageSettingsPageImpressionType} from './languages_settings_metrics_proxy.js'; /** @@ -166,10 +162,6 @@ constructor() { super(); - // <if expr="chromeos"> - /** @private {!LanguagesMetricsProxy} */ - this.languagesMetricsProxy_ = LanguagesMetricsProxyImpl.getInstance(); - // </if> /** @private {!LanguageSettingsMetricsProxy} */ this.languageSettingsMetricsProxy_ = LanguageSettingsMetricsProxyImpl.getInstance(); @@ -180,16 +172,6 @@ // </if> } - // <if expr="chromeos"> - /** @private */ - onOpenChromeOSLanguagesSettingsClick_() { - const chromeOSLanguagesSettingsPath = - loadTimeData.getString('chromeOSLanguagesSettingsPath'); - window.location.href = - `chrome://os-settings/${chromeOSLanguagesSettingsPath}`; - } - // </if> - /** * Stamps and opens the Add Languages dialog, registering a listener to * disable the dialog's dom-if again on close. @@ -198,9 +180,6 @@ */ onAddLanguagesTap_(e) { e.preventDefault(); - // <if expr="chromeos"> - this.languagesMetricsProxy_.recordAddLanguages(); - // </if> this.languageSettingsMetricsProxy_.recordPageImpressionMetric( LanguageSettingsPageImpressionType.ADD_LANGUAGE); @@ -439,9 +418,6 @@ * @private */ onTranslateToggleChange_(e) { - // <if expr="chromeos"> - this.languagesMetricsProxy_.recordToggleTranslate(e.target.checked); - // </if> this.languageSettingsMetricsProxy_.recordSettingsMetric( e.target.checked ? LanguageSettingsActionType.ENABLE_TRANSLATE_GLOBALLY : @@ -530,10 +506,6 @@ // We don't support unchecking this checkbox. TODO(michaelpg): Ask for a // simpler widget. assert(e.target.checked); - // <if expr="chromeos"> - this.languagesMetricsProxy_.recordInteraction( - LanguagesPageInteraction.SWITCH_SYSTEM_LANGUAGE); - // </if> this.isChangeInProgress_ = true; this.languageHelper.setProspectiveUILanguage( this.detailLanguage_.language.code); @@ -563,8 +535,6 @@ */ onRestartTap_() { // <if expr="chromeos"> - this.languagesMetricsProxy_.recordInteraction( - LanguagesPageInteraction.RESTART); LifetimeBrowserProxyImpl.getInstance().signOutAndRestart(); // </if> // <if expr="is_win"> @@ -613,10 +583,6 @@ this.languageSettingsMetricsProxy_.recordSettingsMetric( LanguageSettingsActionType.DISABLE_TRANSLATE_FOR_SINGLE_LANGUAGE); } - // <if expr="chromeos"> - this.languagesMetricsProxy_.recordTranslateCheckboxChanged( - e.target.checked); - // </if> this.closeMenuSoon_(); }
diff --git a/chrome/browser/resources/settings/lazy_load.js b/chrome/browser/resources/settings/lazy_load.js index 4ec38717..d614dea 100644 --- a/chrome/browser/resources/settings/lazy_load.js +++ b/chrome/browser/resources/settings/lazy_load.js
@@ -39,13 +39,15 @@ // Sections import './a11y_page/a11y_page.js'; import './downloads_page/downloads_page.js'; +// <if expr="not chromeos"> import './languages_page/languages_page.js'; +// </if> import './reset_page/reset_page.js'; // <if expr="not chromeos and not lacros"> import './system_page/system_page.js'; // </if> -// <if expr="not is_macosx"> +// <if expr="not chromeos and not is_macosx"> import './languages_page/edit_dictionary_page.js'; // </if> @@ -68,12 +70,11 @@ // <if expr="_google_chrome and is_win"> export {IncompatibleApplication, IncompatibleApplicationsBrowserProxyImpl} from './incompatible_applications_page/incompatible_applications_browser_proxy.js'; // </if> +// <if expr="not chromeos"> export {LanguagesBrowserProxy, LanguagesBrowserProxyImpl} from './languages_page/languages_browser_proxy.js'; -// <if expr="chromeos"> -export {LanguagesMetricsProxy, LanguagesMetricsProxyImpl, LanguagesPageInteraction} from './languages_page/languages_metrics_proxy.js'; -// </if> export {LanguageSettingsActionType, LanguageSettingsMetricsProxy, LanguageSettingsMetricsProxyImpl, LanguageSettingsPageImpressionType} from './languages_page/languages_settings_metrics_proxy.js'; export {kMenuCloseDelay, SettingsLanguagesSubpageElement} from './languages_page/languages_subpage.js'; +// </if> // <if expr="not chromeos"> export {ImportDataBrowserProxyImpl, ImportDataStatus} from './people_page/import_data_browser_proxy.js'; export {ManageProfileBrowserProxyImpl, ProfileShortcutStatus} from './people_page/manage_profile_browser_proxy.js';
diff --git a/chrome/browser/resources/settings/settings_ui/BUILD.gn b/chrome/browser/resources/settings/settings_ui/BUILD.gn index b25dba0..967bf7c 100644 --- a/chrome/browser/resources/settings/settings_ui/BUILD.gn +++ b/chrome/browser/resources/settings/settings_ui/BUILD.gn
@@ -23,7 +23,7 @@ "../settings_main:settings_main", "../settings_menu:settings_menu", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", - "//ui/webui/resources/cr_elements:cr_container_shadow_behavior.m", + "//ui/webui/resources/cr_elements:cr_container_shadow_mixin", "//ui/webui/resources/cr_elements:find_shortcut_behavior", "//ui/webui/resources/cr_elements/cr_drawer:cr_drawer", "//ui/webui/resources/cr_elements/cr_toolbar:cr_toolbar",
diff --git a/chrome/browser/resources/settings/settings_ui/settings_ui.js b/chrome/browser/resources/settings/settings_ui/settings_ui.js index a0e33b0..f0fbbb5 100644 --- a/chrome/browser/resources/settings/settings_ui/settings_ui.js +++ b/chrome/browser/resources/settings/settings_ui/settings_ui.js
@@ -21,7 +21,7 @@ import '../settings_shared_css.js'; import '../settings_vars_css.js'; -import {CrContainerShadowBehavior} from 'chrome://resources/cr_elements/cr_container_shadow_behavior.m.js'; +import {CrContainerShadowMixin, CrContainerShadowMixinInterface} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; import {CrToolbarElement} from 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar.js'; import {CrToolbarSearchFieldElement} from 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar_search_field.js'; import {FindShortcutBehavior} from 'chrome://resources/cr_elements/find_shortcut_behavior.js'; @@ -41,10 +41,11 @@ /** * @constructor * @extends {PolymerElement} + * @implements {CrContainerShadowMixinInterface} */ const SettingsUiElementBase = mixinBehaviors( - [CrContainerShadowBehavior, FindShortcutBehavior], - RouteObserverMixin(PolymerElement)); + [FindShortcutBehavior], + RouteObserverMixin(CrContainerShadowMixin(PolymerElement))); /** @polymer */ export class SettingsUiElement extends SettingsUiElementBase { @@ -226,6 +227,18 @@ /** @param {!Route} route */ currentRouteChanged(route) { + if (document.documentElement.hasAttribute('enable-branding-update')) { + if (route.depth <= 1) { + // Main page uses scroll position to determine whether a shadow should + // be shown. + this.enableShadowBehavior(true); + } else if (!route.isNavigableDialog) { + // Sub-pages always show the top shadow, regardless of scroll position. + this.enableShadowBehavior(false); + this.showDropShadows(); + } + } + const urlSearchQuery = Router.getInstance().getQueryParameters().get('search') || ''; if (urlSearchQuery === this.lastSearchQuery_) {
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index 2c285fd..9e6e5cf 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/containers/contains.h" +#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" @@ -157,6 +158,12 @@ return PasswordReuseLookup::VERDICT_UNSPECIFIED; } +// Records changes in the phished status of saved credential. +void LogCredentialPhishedStatusChanged(CredentialPhishedStatus status) { + base::UmaHistogramEnumeration("SafeBrowsing.CredentialPhishedStatusChange", + status); +} + // Given a |web_contents|, returns the navigation id of its last committed // navigation. int64_t GetLastCommittedNavigationID(content::WebContents* web_contents) { @@ -1742,6 +1749,8 @@ if (!password_store) { continue; } + LogCredentialPhishedStatusChanged( + CredentialPhishedStatus::kMarkedAsPhished); password_store->AddInsecureCredential(password_manager::InsecureCredential( credential.signon_realm, credential.username, base::Time::Now(), password_manager::InsecureType::kPhished, @@ -1762,6 +1771,8 @@ if (!password_store) { continue; } + LogCredentialPhishedStatusChanged( + CredentialPhishedStatus::kSiteMarkedAsLegitimate); password_store->RemoveInsecureCredentials( credential.signon_realm, credential.username, password_manager::RemoveInsecureCredentialsReason::
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_throttle.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_throttle.cc index 3fc4734..538e975 100644 --- a/chrome/browser/safe_browsing/safe_browsing_navigation_throttle.cc +++ b/chrome/browser/safe_browsing/safe_browsing_navigation_throttle.cc
@@ -43,7 +43,8 @@ {resource}, true); MaybeTriggerSecurityInterstitialShownEvent( handle->GetWebContents(), handle->GetURL(), - GetThreatTypeStringForInterstitial(resource.threat_type), + SafeBrowsingUIManager::GetThreatTypeStringForInterstitial( + resource.threat_type), /*net_error_code=*/0); std::string error_page_content = blocking_page->GetHTMLContents(); security_interstitials::SecurityInterstitialTabHelper::
diff --git a/chrome/browser/safe_browsing/ui_manager.cc b/chrome/browser/safe_browsing/ui_manager.cc index fdf4c7d..06ca1c78 100644 --- a/chrome/browser/safe_browsing/ui_manager.cc +++ b/chrome/browser/safe_browsing/ui_manager.cc
@@ -22,6 +22,7 @@ #include "components/prefs/pref_service.h" #include "components/safe_browsing/content/browser/safe_browsing_blocking_page.h" #include "components/safe_browsing/content/browser/threat_details.h" +#include "components/safe_browsing/core/browser/db/v4_protocol_manager_util.h" #include "components/safe_browsing/core/browser/ping_manager.h" #include "components/safe_browsing/core/common/features.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" @@ -210,6 +211,46 @@ EnsureAllowlistCreated(web_contents); } +// static +std::string SafeBrowsingUIManager::GetThreatTypeStringForInterstitial( + safe_browsing::SBThreatType threat_type) { + switch (threat_type) { + case safe_browsing::SB_THREAT_TYPE_URL_PHISHING: + case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_PHISHING: + return "SOCIAL_ENGINEERING"; + case safe_browsing::SB_THREAT_TYPE_URL_MALWARE: + case safe_browsing::SB_THREAT_TYPE_URL_CLIENT_SIDE_MALWARE: + return "MALWARE"; + case safe_browsing::SB_THREAT_TYPE_URL_UNWANTED: + return "UNWANTED_SOFTWARE"; + case safe_browsing::SB_THREAT_TYPE_BILLING: + return "THREAT_TYPE_UNSPECIFIED"; + case safe_browsing::SB_THREAT_TYPE_UNUSED: + case safe_browsing::SB_THREAT_TYPE_SAFE: + case safe_browsing::SB_THREAT_TYPE_URL_BINARY_MALWARE: + case safe_browsing::SB_THREAT_TYPE_EXTENSION: + case safe_browsing::SB_THREAT_TYPE_BLOCKLISTED_RESOURCE: + case safe_browsing::SB_THREAT_TYPE_API_ABUSE: + case safe_browsing::SB_THREAT_TYPE_SUBRESOURCE_FILTER: + case safe_browsing::SB_THREAT_TYPE_CSD_ALLOWLIST: + case safe_browsing:: + DEPRECATED_SB_THREAT_TYPE_URL_PASSWORD_PROTECTION_PHISHING: + case safe_browsing::SB_THREAT_TYPE_SAVED_PASSWORD_REUSE: + case safe_browsing::SB_THREAT_TYPE_SIGNED_IN_SYNC_PASSWORD_REUSE: + case safe_browsing::SB_THREAT_TYPE_SIGNED_IN_NON_SYNC_PASSWORD_REUSE: + case safe_browsing::SB_THREAT_TYPE_AD_SAMPLE: + case safe_browsing::SB_THREAT_TYPE_BLOCKED_AD_POPUP: + case safe_browsing::SB_THREAT_TYPE_BLOCKED_AD_REDIRECT: + case safe_browsing::SB_THREAT_TYPE_SUSPICIOUS_SITE: + case safe_browsing::SB_THREAT_TYPE_ENTERPRISE_PASSWORD_REUSE: + case safe_browsing::SB_THREAT_TYPE_APK_DOWNLOAD: + case safe_browsing::SB_THREAT_TYPE_HIGH_CONFIDENCE_ALLOWLIST: + case safe_browsing::SB_THREAT_TYPE_ACCURACY_TIPS: + NOTREACHED(); + break; + } + return std::string(); +} void SafeBrowsingUIManager::AddObserver(Observer* observer) { DCHECK_CURRENTLY_ON(BrowserThread::UI); observer_list_.AddObserver(observer);
diff --git a/chrome/browser/safe_browsing/ui_manager.h b/chrome/browser/safe_browsing/ui_manager.h index 8bc9868..2baaf8b8 100644 --- a/chrome/browser/safe_browsing/ui_manager.h +++ b/chrome/browser/safe_browsing/ui_manager.h
@@ -98,6 +98,9 @@ // DisplayBlockingPage(), which creates it. static void CreateAllowlistForTesting(content::WebContents* web_contents); + static std::string GetThreatTypeStringForInterstitial( + safe_browsing::SBThreatType threat_type); + // Add and remove observers. These methods must be invoked on the UI thread. void AddObserver(Observer* observer); void RemoveObserver(Observer* remove);
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java index 43d83c6..69dc3b0 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinator.java
@@ -50,6 +50,9 @@ private static final Set<String> AMP_VIEWER_DOMAINS = new HashSet<>(Arrays.asList("google.com/amp/", "bing.com/amp")); private static final int LENGTH_AMP_DOMAIN = 15; + private static final int PREVIEW_MAX_LENGTH = 35; + private static final int PREVIEW_SELECTED_TEXT_CUTOFF_LENGTH = 32; + private static final String PREVIEW_ELLIPSIS = "..."; private final Context mContext; private final ChromeOptionShareCallback mChromeOptionShareCallback; private final Tab mTab; @@ -134,6 +137,7 @@ new ShareParams .Builder(mTab.getWindowAndroid(), /*title=*/"", getUrlToShare(selector)) .setText(mSelectedText, SHARE_TEXT_TEMPLATE) + .setPreviewText(getPreviewText(), SHARE_TEXT_TEMPLATE) .build(); mChromeOptionShareCallback.showThirdPartyShareSheet(params, @@ -155,12 +159,25 @@ cleanup(); } + @VisibleForTesting + String getPreviewText() { + if (mSelectedText.length() <= PREVIEW_MAX_LENGTH) { + return mSelectedText; + } + + StringBuilder sb = new StringBuilder(); + sb.append(mSelectedText.substring(0, PREVIEW_SELECTED_TEXT_CUTOFF_LENGTH)); + sb.append(PREVIEW_ELLIPSIS); + return sb.toString(); + } + private void showPreemptiveShareSheet(String selector) { mShareLinkParams = selector.isEmpty() ? null : new ShareParams .Builder(mTab.getWindowAndroid(), /*title=*/"", getUrlToShare(selector)) .setText(mSelectedText, SHARE_TEXT_TEMPLATE) + .setPreviewText(getPreviewText(), SHARE_TEXT_TEMPLATE) .setLinkToTextSuccessful(true) .build(); mShareTextParams =
diff --git a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java index b8581e26..d1d238ff 100644 --- a/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java +++ b/chrome/browser/share/android/java/src/org/chromium/chrome/browser/share/share_sheet/ShareSheetBottomSheetContent.java
@@ -240,7 +240,7 @@ if ((contentTypes.contains(ContentType.TEXT) || contentTypes.contains(ContentType.HIGHLIGHTED_TEXT)) && contentTypes.contains(ContentType.LINK_PAGE_NOT_VISIBLE)) { - title = mParams.getText(); + title = mParams.getPreviewText() != null ? mParams.getPreviewText() : mParams.getText(); setTitleStyle(R.style.TextAppearance_TextMedium_Primary); setSubtitleMaxLines(1); } else if (!TextUtils.isEmpty(title)) {
diff --git a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java index 6f63ed8..26876887b 100644 --- a/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java +++ b/chrome/browser/share/android/javatests/src/org/chromium/chrome/browser/share/link_to_text/LinkToTextCoordinatorTest.java
@@ -92,6 +92,8 @@ private static final String MOBILE_SUBDOMAIN_URL = "https://m.foo.com"; private static final String AMP_MOBILE_SUBDOMAIN_URL = "https://m.google.com/amp/www.nyt.com/ampthml/blogs.html"; + private static final String SELECTED_TEXT_LONG = + "This textbook has more freedom than most (but see some exceptions)."; @Before public void setUpTest() { @@ -228,4 +230,28 @@ Assert.assertEquals(true, coordinator.isAmpUrl(AMP_MOBILE_SUBDOMAIN_URL)); Assert.assertEquals(false, coordinator.isAmpUrl(MOBILE_SUBDOMAIN_URL)); } + + @Test + @SmallTest + public void getPreviewTextLongTest() { + ShareParams shareParams = new ShareParams.Builder(/*window=*/null, "", AMP_URL) + .setText(SELECTED_TEXT_LONG) + .build(); + ChromeShareExtras chromeShareExtras = new ChromeShareExtras.Builder().build(); + MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( + shareParams, mTab, mShareCallback, chromeShareExtras, 1, VISIBLE_URL); + Assert.assertEquals("This textbook has more freedom t...", coordinator.getPreviewText()); + } + + @Test + @SmallTest + public void getPreviewTextTest() { + ShareParams shareParams = new ShareParams.Builder(/*window=*/null, "", AMP_URL) + .setText(SELECTED_TEXT) + .build(); + ChromeShareExtras chromeShareExtras = new ChromeShareExtras.Builder().build(); + MockLinkToTextCoordinator coordinator = new MockLinkToTextCoordinator( + shareParams, mTab, mShareCallback, chromeShareExtras, 1, VISIBLE_URL); + Assert.assertEquals("selection", coordinator.getPreviewText()); + } }
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd index b562db9..7e247f8 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -2534,10 +2534,10 @@ Search your history </message> <message name="IDS_INCOGNITO_HISTORY_PLACEHOLDER_TITLE" desc="Title that states history is not saved in Incognito mode."> - Sites you visit aren’t saved in Incognito + History isn’t saved in Incognito </message> <message name="IDS_INCOGNITO_HISTORY_PLACEHOLDER_DESCRIPTION" desc="Description that states history is not saved in Incognito mode."> - To clear Incognito browsing history from your device, close all tabs + Chrome doesn’t save your browsing history when you choose to browse privately. You can still use bookmarks to access your favorite sites. </message> <!-- Close Incognito tabs notification messages --> @@ -2829,6 +2829,14 @@ <message name="IDS_DISCOVER_CANT_REFRESH_INSTRUCTIONS" desc="Message body for the article feed on the New Tab Page. Instructs the user to wait and try to refresh the feed once the internet connection returns. Please translate 'stories' to match its use in TC ID 792300740424433300. Also see TC ID 6114827482740570724 for the corresponding message in Discover.">Check back later for new stories</message> <message name="IDS_WEB_FEED_NO_CARDS_TITLE" desc="Message title for the user-customizable web feed on the New Tab Page. Shown when the user either has not followed any websites or when the user has followed some websites but the sites do not have any new articles. Please translate 'stories' to match its use in TC ID 792300740424433300.">You'll find stories here</message> <message name="IDS_WEB_FEED_NO_CARDS_INSTRUCTIONS" desc="Message body for the user-customizable web feed on the New Tab Page. Shown when the user either has not followed any websites or when the user has followed some websites but the sites do not have any new articles. Instructs the user to follow more sites or check back later. Please translate 'Follow' (with capital F) to match its use in TC ID 4108314971463891922.">To follow a site, go to the site, open the Chrome menu, and tap Follow.</message> + <message name="IDS_FEED_SWIPE_REFRESH_IPH" desc="In-product help that prompts the user to use pull-down gesture to refresh the feed content."> + Pull down to refresh + </message> + <message name="IDS_ACCESSIBILITY_FEED_SWIPE_REFRESH_IPH" is_accessibility_with_no_ui="true" desc="The in-product-help + accessibility text that prompts the user to use pull-down gesture to refresh the feed + content."> + To refresh the feed content, pull down the page + </message> <!-- Explore sites strings --> <message name="IDS_EXPLORE_SITES_TITLE" desc="Title of a section showing different categories, each with a number of popular websites">
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_FEED_SWIPE_REFRESH_IPH.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_FEED_SWIPE_REFRESH_IPH.png.sha1 new file mode 100644 index 0000000..8908c54 --- /dev/null +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_FEED_SWIPE_REFRESH_IPH.png.sha1
@@ -0,0 +1 @@ +b11c481afa9bb4cd2d81f953c4b182fc39a25fba \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_DESCRIPTION.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_DESCRIPTION.png.sha1 index d893ab0..4d2a9cf 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_DESCRIPTION.png.sha1 +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_DESCRIPTION.png.sha1
@@ -1 +1 @@ -ae0d8a36141aaf7e9e23511b3da15fdf170a2720 +59573abc0c8c99f031d40cb34d4dafa218ba38ad \ No newline at end of file
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_TITLE.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_TITLE.png.sha1 index d893ab0..4d2a9cf 100644 --- a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_TITLE.png.sha1 +++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_INCOGNITO_HISTORY_PLACEHOLDER_TITLE.png.sha1
@@ -1 +1 @@ -ae0d8a36141aaf7e9e23511b3da15fdf170a2720 +59573abc0c8c99f031d40cb34d4dafa218ba38ad \ No newline at end of file
diff --git a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc index 8d7a3d0..1770b9c 100644 --- a/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc +++ b/chrome/browser/ui/ash/chrome_browser_main_extra_parts_ash.cc
@@ -15,7 +15,7 @@ #include "base/command_line.h" #include "base/scoped_observation.h" #include "base/task/post_task.h" -#include "chrome/browser/ash/login/signin/signin_error_notifier_factory_ash.h" +#include "chrome/browser/ash/login/signin/signin_error_notifier_factory.h" #include "chrome/browser/ash/night_light/night_light_client.h" #include "chrome/browser/ash/policy/display/display_resolution_handler.h" #include "chrome/browser/ash/policy/display/display_rotation_default_handler.h" @@ -327,7 +327,7 @@ if (chromeos::ProfileHelper::IsRegularProfile(profile) && !profile->IsGuestSession()) { // Start the error notifier services to show auth/sync notifications. - SigninErrorNotifierFactory::GetForProfile(profile); + ash::SigninErrorNotifierFactory::GetForProfile(profile); SyncErrorNotifierFactory::GetForProfile(profile); }
diff --git a/chrome/browser/ui/ash/login_screen_client_impl.cc b/chrome/browser/ui/ash/login_screen_client_impl.cc index 92cef5f..bdb476be 100644 --- a/chrome/browser/ui/ash/login_screen_client_impl.cc +++ b/chrome/browser/ui/ash/login_screen_client_impl.cc
@@ -356,8 +356,8 @@ user_manager::UserManager::Get()->FindUser(prefilled_account); Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user); DCHECK(session_manager::SessionManager::Get()->IsScreenLocked()); - chromeos::InSessionPasswordSyncManager* password_sync_manager = - chromeos::InSessionPasswordSyncManagerFactory::GetForProfile(profile); + auto* password_sync_manager = + ash::InSessionPasswordSyncManagerFactory::GetForProfile(profile); if (password_sync_manager) { password_sync_manager->CreateAndShowDialog(); }
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc index 4f327c2..ac47309f 100644 --- a/chrome/browser/ui/startup/startup_browser_creator.cc +++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -116,6 +116,7 @@ #include "chrome/browser/notifications/win/notification_launch_id.h" #include "chrome/browser/ui/startup/credential_provider_signin_dialog_win.h" #include "chrome/browser/ui/webui/settings/reset_settings_handler.h" +#include "chrome/browser/web_applications/web_app_provider.h" #include "chrome/credential_provider/common/gcp_strings.h" #if BUILDFLAG(ENABLE_PRINT_PREVIEW) #include "chrome/browser/printing/print_dialog_cloud_win.h" @@ -981,7 +982,8 @@ std::string app_id = command_line.GetSwitchValueASCII(switches::kUninstallAppId); - web_app::WebAppUiManagerImpl::Get(privacy_safe_profile) + web_app::WebAppUiManagerImpl::Get( + web_app::WebAppProvider::GetForWebApps(privacy_safe_profile)) ->UninstallWebAppFromStartupSwitch(app_id); // Return true to allow startup to continue and for the main event loop to
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index daed33fb..9dad5ba 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -2149,12 +2149,13 @@ } void TabStrip::UpdateHoverCard(Tab* tab, HoverCardUpdateType update_type) { - // We don't want to show a hover card while the tabstrip is animating. + // Some operations (including e.g. starting a drag) can cause the tab focus + // to change at the same time as the tabstrip is starting to animate; the + // hover card should not be visible at this time. + // See crbug.com/1220840 for an example case. if (bounds_animator_.IsAnimating()) { - // Once we're animating the hover card should already be hidden. - DCHECK(!tab || !hover_card_controller_ || - !hover_card_controller_->IsHoverCardVisible()); - return; + tab = nullptr; + update_type = HoverCardUpdateType::kAnimating; } if (!hover_card_controller_) {
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc index db31a81..e527bb73 100644 --- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc +++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -224,14 +224,14 @@ } bool WebAppBrowserController::CanUserUninstall() const { - return WebAppUiManagerImpl::Get(browser()->profile()) + return WebAppUiManagerImpl::Get(&provider_) ->dialog_manager() .CanUserUninstallWebApp(GetAppId()); } void WebAppBrowserController::Uninstall( webapps::WebappUninstallSource webapp_uninstall_source) { - WebAppUiManagerImpl::Get(browser()->profile()) + WebAppUiManagerImpl::Get(&provider_) ->dialog_manager() .UninstallWebApp(GetAppId(), webapps::WebappUninstallSource::kAppMenu, browser()->window(), base::DoNothing());
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc index 86082a2..10cafd55 100644 --- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc +++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.cc
@@ -69,8 +69,8 @@ // UninstallWebAppWithDialogFromStartupSwitch handles WebApp uninstallation from // the Windows Settings. void UninstallWebAppWithDialogFromStartupSwitch(const AppId& app_id, - Profile* profile) { - auto* provider = WebAppProvider::Get(profile); + Profile* profile, + WebAppProvider* provider) { if (!provider->registrar().IsLocallyInstalled(app_id)) { // App does not exist and controller is destroyed. return; @@ -79,7 +79,7 @@ // Note: WebAppInstallFinalizer::UninstallWebApp creates a ScopedKeepAlive // object which ensures the browser stays alive during the WebApp // uninstall. - WebAppUiManagerImpl::Get(profile)->dialog_manager().UninstallWebApp( + WebAppUiManagerImpl::Get(provider)->dialog_manager().UninstallWebApp( app_id, webapps::WebappUninstallSource::kOsSettings, gfx::kNullNativeWindow, base::DoNothing()); } @@ -94,8 +94,8 @@ } // static -WebAppUiManagerImpl* WebAppUiManagerImpl::Get(Profile* profile) { - auto* provider = WebAppProvider::Get(profile); +WebAppUiManagerImpl* WebAppUiManagerImpl::Get( + web_app::WebAppProvider* provider) { return provider ? provider->ui_manager().AsImpl() : nullptr; } @@ -421,9 +421,10 @@ #if defined(OS_WIN) void WebAppUiManagerImpl::UninstallWebAppFromStartupSwitch( const AppId& app_id) { - WebAppProvider::Get(profile_)->on_registry_ready().Post( + WebAppProvider* provider = WebAppProvider::GetForWebApps(profile_); + provider->on_registry_ready().Post( FROM_HERE, base::BindOnce(&UninstallWebAppWithDialogFromStartupSwitch, - app_id, profile_)); + app_id, profile_, provider)); } #endif // defined(OS_WIN)
diff --git a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h index 0b7d2cf7..3aee274 100644 --- a/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h +++ b/chrome/browser/ui/web_applications/web_app_ui_manager_impl.h
@@ -28,7 +28,7 @@ // this class serves a wide range of Web Applications <-> Browser purposes. class WebAppUiManagerImpl : public BrowserListObserver, public WebAppUiManager { public: - static WebAppUiManagerImpl* Get(Profile* profile); + static WebAppUiManagerImpl* Get(WebAppProvider* provider); explicit WebAppUiManagerImpl(Profile* profile); WebAppUiManagerImpl(const WebAppUiManagerImpl&) = delete;
diff --git a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_dialog.h b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_dialog.h index 5e44302f..04c65aa 100644 --- a/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_dialog.h +++ b/chrome/browser/ui/webui/chromeos/account_manager/account_manager_welcome_dialog.h
@@ -44,4 +44,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::AccountManagerWelcomeDialog; +} + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_ACCOUNT_MANAGER_ACCOUNT_MANAGER_WELCOME_DIALOG_H_
diff --git a/chrome/browser/ui/webui/chromeos/chromebox_for_meetings/network_settings_dialog.cc b/chrome/browser/ui/webui/chromeos/chromebox_for_meetings/network_settings_dialog.cc index 6936a811..ed733b9 100644 --- a/chrome/browser/ui/webui/chromeos/chromebox_for_meetings/network_settings_dialog.cc +++ b/chrome/browser/ui/webui/chromeos/chromebox_for_meetings/network_settings_dialog.cc
@@ -1,4 +1,4 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. +// Copyright (c) 2021 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -10,14 +10,21 @@ #include "chrome/browser/ash/app_mode/certificate_manager_dialog.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_localized_strings_provider.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h" #include "chrome/browser/ui/webui/webui_util.h" #include "chrome/common/webui_url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "chrome/grit/cfm_network_settings_resources.h" +#include "chrome/grit/cfm_network_settings_resources_map.h" +#include "chrome/grit/generated_resources.h" #include "components/onc/onc_constants.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/chromeos/strings/network_element_localized_strings_provider.h" namespace chromeos { namespace cfm { @@ -87,8 +94,9 @@ } NetworkSettingsDialog::NetworkSettingsDialog() - : SystemWebDialogDelegate(GURL(chrome::kCfmNetworkSettingsURL), - /* title= */ u"") { + : SystemWebDialogDelegate( + GURL(chrome::kCfmNetworkSettingsURL), + l10n_util::GetStringUTF16(IDS_CFM_NETWORK_SETTINGS_TITLE)) { g_cfm_network_settings_shown = true; } @@ -106,7 +114,24 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kCfmNetworkSettingsHost); - // TODO(b/35772861): attach required resources + source->AddLocalizedString("headTitle", IDS_CFM_NETWORK_SETTINGS_TITLE); + source->AddLocalizedString("availableNetworks", + IDS_CFM_NETWORK_SETTINGS_AVAILABLE_NETWORKS); + source->AddLocalizedString("addWiFiListItemName", + IDS_NETWORK_ADD_WI_FI_LIST_ITEM_NAME); + source->AddLocalizedString("proxySettingsListItemName", + IDS_NETWORK_PROXY_SETTINGS_LIST_ITEM_NAME); + source->AddLocalizedString("manageCertsListItemName", + IDS_MANAGE_CERTIFICATES); + ui::network_element::AddLocalizedStrings(source); + cellular_setup::AddNonStringLoadTimeData(source); + source->UseStringsJs(); + + webui::SetupWebUIDataSource( + source, + base::make_span(kCfmNetworkSettingsResources, + kCfmNetworkSettingsResourcesSize), + IDR_CFM_NETWORK_SETTINGS_CFM_NETWORK_SETTINGS_CONTAINER_HTML); web_ui->AddMessageHandler(std::make_unique<NetworkSettingsMessageHandler>());
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc index 941311b..06c3be88 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.cc
@@ -108,8 +108,8 @@ const user_manager::User* user = user_manager::UserManager::Get()->GetActiveUser(); Profile* profile = ProfileHelper::Get()->GetProfileByUser(user); - InSessionPasswordSyncManager* password_sync_manager = - chromeos::InSessionPasswordSyncManagerFactory::GetForProfile(profile); + auto* password_sync_manager = + InSessionPasswordSyncManagerFactory::GetForProfile(profile); password_sync_manager->ResetDialog(); }
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h index d42a16f..ea866c45 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_dialogs.h
@@ -54,4 +54,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::LockScreenStartReauthDialog; +} + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_IN_SESSION_PASSWORD_CHANGE_LOCK_SCREEN_REAUTH_DIALOGS_H_
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.cc b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.cc index e2d91cf..87f6797 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.cc +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.cc
@@ -62,12 +62,12 @@ return user && user->using_saml(); } -chromeos::InSessionPasswordSyncManager* GetInSessionPasswordSyncManager() { +InSessionPasswordSyncManager* GetInSessionPasswordSyncManager() { const user_manager::User* user = user_manager::UserManager::Get()->GetActiveUser(); Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user); - return chromeos::InSessionPasswordSyncManagerFactory::GetForProfile(profile); + return InSessionPasswordSyncManagerFactory::GetForProfile(profile); } const char kMainElement[] = "$(\'main-element\')."; @@ -210,8 +210,7 @@ bool is_horizontal = display.width() >= display.height(); CallJavascript("setOrientation", base::Value(is_horizontal)); - chromeos::InSessionPasswordSyncManager* password_sync_manager = - GetInSessionPasswordSyncManager(); + auto* password_sync_manager = GetInSessionPasswordSyncManager(); int width = password_sync_manager->GetDialogWidth(); CallJavascript("setWidth", base::Value(width)); } @@ -277,8 +276,7 @@ void LockScreenReauthHandler::OnCookieWaitTimeout() { NOTREACHED() << "Cookie has timed out while attempting to login in."; - chromeos::InSessionPasswordSyncManager* password_sync_manager = - GetInSessionPasswordSyncManager(); + auto* password_sync_manager = GetInSessionPasswordSyncManager(); password_sync_manager->DismissDialog(); } @@ -300,7 +298,7 @@ base::BindRepeating(&LockScreenReauthHandler::ShowPasswordChangedScreen, weak_factory_.GetWeakPtr()); password_sync_manager_ = - chromeos::InSessionPasswordSyncManagerFactory::GetForProfile(profile); + InSessionPasswordSyncManagerFactory::GetForProfile(profile); password_sync_manager_->CheckCredentials(user_context, password_changed_callback); }
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.h b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.h index ec62fb2..f944f3c 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.h +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_reauth_handler.h
@@ -7,12 +7,13 @@ #include "base/memory/weak_ptr.h" #include "base/values.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chrome/browser/ash/login/saml/in_session_password_sync_manager.h" #include "chrome/browser/ui/webui/chromeos/login/online_login_helper.h" #include "content/public/browser/web_ui_message_handler.h" #include "net/cookies/cookie_access_result.h" namespace chromeos { -class InSessionPasswordSyncManager; class LockScreenReauthHandler : public content::WebUIMessageHandler { public: @@ -99,4 +100,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::LockScreenReauthHandler; +} + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_IN_SESSION_PASSWORD_CHANGE_LOCK_SCREEN_REAUTH_HANDLER_H_
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_start_reauth_ui.h b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_start_reauth_ui.h index 2e0049ab..e69dcf79 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_start_reauth_ui.h +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/lock_screen_start_reauth_ui.h
@@ -28,4 +28,10 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::LockScreenStartReauthUI; +} + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_IN_SESSION_PASSWORD_CHANGE_LOCK_SCREEN_START_REAUTH_UI_H_
diff --git a/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_dialogs.h b/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_dialogs.h index 7ff46174..f6f32a2 100644 --- a/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_dialogs.h +++ b/chrome/browser/ui/webui/chromeos/in_session_password_change/password_change_dialogs.h
@@ -90,4 +90,12 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::ConfirmPasswordChangeDialog; +using ::chromeos::PasswordChangeDialog; +using ::chromeos::UrgentPasswordExpiryNotificationDialog; +} // namespace ash + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_IN_SESSION_PASSWORD_CHANGE_PASSWORD_CHANGE_DIALOGS_H_
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc index 18e6dcea..bcfd1c4 100644 --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc
@@ -349,7 +349,7 @@ if (user && user->using_saml() && user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { public_saml_url_fetcher_ = - std::make_unique<chromeos::PublicSamlUrlFetcher>(account_id); + std::make_unique<PublicSamlUrlFetcher>(account_id); public_saml_url_fetcher_->Fetch(std::move(partition_call)); return; }
diff --git a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h index e662faa..4b2d5f7 100644 --- a/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h
@@ -13,6 +13,8 @@ #include "base/memory/ref_counted.h" #include "chrome/browser/ash/certificate_provider/security_token_pin_dialog_host.h" #include "chrome/browser/ash/login/login_client_cert_usage_observer.h" +// TODO(https://crbug.com/1164001): move to forward declaration. +#include "chrome/browser/ash/login/saml/public_saml_url_fetcher.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h" #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" @@ -40,9 +42,7 @@ } namespace chromeos { - class SigninScreenHandler; -class PublicSamlUrlFetcher; class GaiaView { public: @@ -391,7 +391,7 @@ std::unique_ptr<LoginClientCertUsageObserver> extension_provided_client_cert_usage_observer_; - std::unique_ptr<chromeos::PublicSamlUrlFetcher> public_saml_url_fetcher_; + std::unique_ptr<PublicSamlUrlFetcher> public_saml_url_fetcher_; // State of the security token PIN dialogs:
diff --git a/chrome/browser/ui/webui/chromeos/login/saml_challenge_key_handler.h b/chrome/browser/ui/webui/chromeos/login/saml_challenge_key_handler.h index f424bd3..cfcb7c3e 100644 --- a/chrome/browser/ui/webui/chromeos/login/saml_challenge_key_handler.h +++ b/chrome/browser/ui/webui/chromeos/login/saml_challenge_key_handler.h
@@ -69,4 +69,11 @@ } // namespace chromeos +// TODO(https://crbug.com/1164001): remove after the //chrome/browser/chromeos +// source migration is finished. +namespace ash { +using ::chromeos::kSamlChallengeKeyHandlerResultMetric; +using ::chromeos::SamlChallengeKeyHandler; +} // namespace ash + #endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SAML_CHALLENGE_KEY_HANDLER_H_
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index e8702d9..c563d29 100644 --- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -915,7 +915,7 @@ } else { Browser* browser = chrome::FindBrowserWithWebContents(web_ui()->GetWebContents()); - web_app::WebAppUiManagerImpl::Get(Profile::FromWebUI(web_ui())) + web_app::WebAppUiManagerImpl::Get(web_app_provider_) ->dialog_manager() .UninstallWebApp(extension_id_prompting_, webapps::WebappUninstallSource::kAppsPage,
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_name_handler_unittest.cc b/chrome/browser/ui/webui/settings/chromeos/device_name_handler_unittest.cc index 4871ecbc..60a8d6e 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_name_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_name_handler_unittest.cc
@@ -9,6 +9,7 @@ #include "ash/constants/ash_features.h" #include "base/test/scoped_feature_list.h" +#include "chrome/browser/ash/policy/handlers/fake_device_name_policy_handler.h" #include "chrome/browser/chromeos/device_name_store.h" #include "chrome/common/pref_names.h" #include "components/prefs/testing_pref_service.h" @@ -46,7 +47,8 @@ local_state()->SetString(prefs::kDeviceName, "TestDeviceName"); feature_list_.InitAndEnableFeature(ash::features::kEnableHostnameSetting); - DeviceNameStore::Initialize(&local_state_); + DeviceNameStore::Initialize(&local_state_, + &fake_device_name_policy_handler_); } void TearDown() override { DeviceNameStore::Shutdown(); } @@ -62,6 +64,7 @@ // Test backing store for prefs. TestingPrefServiceSimple local_state_; + policy::FakeDeviceNamePolicyHandler fake_device_name_policy_handler_; content::TestWebUI web_ui_; std::unique_ptr<TestDeviceNameHandler> handler_; base::test::ScopedFeatureList feature_list_;
diff --git a/chrome/browser/web_applications/app_service/web_apps.cc b/chrome/browser/web_applications/app_service/web_apps.cc index 9ce2845..8ad3d23 100644 --- a/chrome/browser/web_applications/app_service/web_apps.cc +++ b/chrome/browser/web_applications/app_service/web_apps.cc
@@ -22,11 +22,11 @@ WebApps::~WebApps() = default; // static -void WebApps::UninstallImpl(Profile* profile, +void WebApps::UninstallImpl(WebAppProvider* provider, const std::string& app_id, apps::mojom::UninstallSource uninstall_source, gfx::NativeWindow parent_window) { - WebAppUiManagerImpl* web_app_ui_manager = WebAppUiManagerImpl::Get(profile); + WebAppUiManagerImpl* web_app_ui_manager = WebAppUiManagerImpl::Get(provider); if (!web_app_ui_manager) { return; }
diff --git a/chrome/browser/web_applications/app_service/web_apps.h b/chrome/browser/web_applications/app_service/web_apps.h index 7943300..0e0308b 100644 --- a/chrome/browser/web_applications/app_service/web_apps.h +++ b/chrome/browser/web_applications/app_service/web_apps.h
@@ -28,7 +28,7 @@ ~WebApps() override; // Uninstall for web apps on Chrome. - static void UninstallImpl(Profile* profile, + static void UninstallImpl(WebAppProvider* provider, const std::string& app_id, apps::mojom::UninstallSource uninstall_source, gfx::NativeWindow parent_window);
diff --git a/chrome/browser/web_applications/components/app_registry_controller.cc b/chrome/browser/web_applications/components/app_registry_controller.cc index 9358cab..e615bcc7 100644 --- a/chrome/browser/web_applications/components/app_registry_controller.cc +++ b/chrome/browser/web_applications/components/app_registry_controller.cc
@@ -4,8 +4,6 @@ #include "chrome/browser/web_applications/components/app_registry_controller.h" -#include "chrome/browser/web_applications/components/os_integration_manager.h" - namespace web_app { AppRegistryController::AppRegistryController(Profile* profile) @@ -13,9 +11,4 @@ AppRegistryController::~AppRegistryController() = default; -void AppRegistryController::SetSubsystems( - OsIntegrationManager* os_integration_manager) { - os_integration_manager_ = os_integration_manager; -} - } // namespace web_app
diff --git a/chrome/browser/web_applications/components/app_registry_controller.h b/chrome/browser/web_applications/components/app_registry_controller.h index f0eacae..7303417 100644 --- a/chrome/browser/web_applications/components/app_registry_controller.h +++ b/chrome/browser/web_applications/components/app_registry_controller.h
@@ -6,7 +6,6 @@ #define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_APP_REGISTRY_CONTROLLER_H_ #include "base/callback_forward.h" -#include "chrome/browser/web_applications/components/os_integration_manager.h" #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_id.h" @@ -36,8 +35,6 @@ explicit AppRegistryController(Profile* profile); virtual ~AppRegistryController(); - void SetSubsystems(OsIntegrationManager* os_integration_manager); - virtual void Init(base::OnceClosure callback) = 0; virtual void SetAppUserDisplayMode(const AppId& app_id, @@ -77,14 +74,9 @@ protected: Profile* profile() const { return profile_; } - OsIntegrationManager& os_integration_manager() { - return *os_integration_manager_; - } private: Profile* const profile_; - - OsIntegrationManager* os_integration_manager_ = nullptr; }; } // namespace web_app
diff --git a/chrome/browser/web_applications/components/install_finalizer.h b/chrome/browser/web_applications/components/install_finalizer.h index 3733d408..fbf3003 100644 --- a/chrome/browser/web_applications/components/install_finalizer.h +++ b/chrome/browser/web_applications/components/install_finalizer.h
@@ -29,6 +29,7 @@ enum class InstallResultCode; class WebAppRegistrar; class AppRegistryController; +class WebApp; class WebAppUiManager; class OsIntegrationManager; @@ -40,6 +41,8 @@ using InstallFinalizedCallback = base::OnceCallback<void(const AppId& app_id, InstallResultCode code)>; using UninstallWebAppCallback = base::OnceCallback<void(bool uninstalled)>; + using RepeatingUninstallCallback = + base::RepeatingCallback<void(const AppId& app_id, bool uninstalled)>; struct FinalizeOptions { FinalizeOptions(); @@ -59,10 +62,6 @@ const FinalizeOptions& options, InstallFinalizedCallback callback) = 0; - // Delete app data from disk (icon .png files). |app_id| must be unregistered. - virtual void FinalizeUninstallAfterSync(const AppId& app_id, - UninstallWebAppCallback callback) = 0; - // Write the new WebApp data to disk and update the app. // TODO(https://crbug.com/1196051): Chrome fails to update the manifest // if the app window needing update closes at the same time as Chrome. @@ -94,6 +93,23 @@ webapps::WebappUninstallSource webapp_uninstall_source, UninstallWebAppCallback callback) = 0; + // Sync-initiated uninstall. Copied from WebAppInstallSyncInstallDelegate. + // Called before the web apps are removed from the registry. Begins process of + // uninstalling OS hooks, which initially requires the registrar to still + // contain the web app data. Also notify observers of WebAppWillBeUninstalled. + // TODO(dmurph): After migration to WebApp* from the registry, this could + // potentially just be done in one step, after removal from registry, as os + // hooks information could be passed. + virtual void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) = 0; + // Delete non-database app data from disk (icon .png files). |app_id| must be + // unregistered. Observers are notified of WebAppUninstalled and the + // |callback| is called after the app data is fully deleted & os hooks + // uninstalled. + virtual void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) = 0; + // Returns true if the app with |app_id| was previously uninstalled by the // user. For example, if a user uninstalls a default app ('default apps' are // considered external apps), then this will return true.
diff --git a/chrome/browser/web_applications/components/os_integration_manager.h b/chrome/browser/web_applications/components/os_integration_manager.h index 3e49677..5e0170d 100644 --- a/chrome/browser/web_applications/components/os_integration_manager.h +++ b/chrome/browser/web_applications/components/os_integration_manager.h
@@ -37,7 +37,8 @@ class TestOsIntegrationManager; class WebAppUiManager; -// OsHooksResults contains the result of all Os hook deployments +// OsHooksResults contains the result of all Os hook deployments. +// If a bit is set to `true`, then an error did not occur. using OsHooksResults = std::bitset<OsHookType::kMaxValue + 1>; // Used to pass install options configured from upstream caller.
diff --git a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc index a675146..ceabf2b 100644 --- a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc +++ b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
@@ -184,8 +184,13 @@ })); } - void FinalizeUninstallAfterSync(const AppId& app_id, - UninstallWebAppCallback callback) override { + void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) override { + NOTREACHED(); + } + void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) override { NOTREACHED(); }
diff --git a/chrome/browser/web_applications/test/test_install_finalizer.cc b/chrome/browser/web_applications/test/test_install_finalizer.cc index 8a65b64f..8e1e7db22 100644 --- a/chrome/browser/web_applications/test/test_install_finalizer.cc +++ b/chrome/browser/web_applications/test/test_install_finalizer.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_application_info.h" +#include "chrome/browser/web_applications/web_app.h" #include "components/crx_file/id_util.h" #include "components/webapps/browser/installable/installable_metrics.h" @@ -46,12 +47,6 @@ std::move(callback)); } -void TestInstallFinalizer::FinalizeUninstallAfterSync( - const AppId& app_id, - UninstallWebAppCallback callback) { - NOTREACHED(); -} - void TestInstallFinalizer::UninstallExternalWebApp( const AppId& app_id, webapps::WebappUninstallSource webapp_uninstall_source, @@ -78,6 +73,16 @@ })); } +void TestInstallFinalizer::UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) { + NOTREACHED(); +} +void TestInstallFinalizer::UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) { + NOTREACHED(); +} + bool TestInstallFinalizer::CanUserUninstallWebApp(const AppId& app_id) const { NOTIMPLEMENTED(); return false;
diff --git a/chrome/browser/web_applications/test/test_install_finalizer.h b/chrome/browser/web_applications/test/test_install_finalizer.h index 967ad27..e1302c26 100644 --- a/chrome/browser/web_applications/test/test_install_finalizer.h +++ b/chrome/browser/web_applications/test/test_install_finalizer.h
@@ -30,8 +30,6 @@ void FinalizeInstall(const WebApplicationInfo& web_app_info, const FinalizeOptions& options, InstallFinalizedCallback callback) override; - void FinalizeUninstallAfterSync(const AppId& app_id, - UninstallWebAppCallback callback) override; void FinalizeUpdate(const WebApplicationInfo& web_app_info, content::WebContents* web_contents, InstallFinalizedCallback callback) override; @@ -43,6 +41,11 @@ const GURL& app_url, webapps::WebappUninstallSource external_install_source, UninstallWebAppCallback callback) override; + void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) override; + void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) override; bool CanUserUninstallWebApp(const AppId& app_id) const override; void UninstallWebApp(const AppId& app_id, webapps::WebappUninstallSource uninstall_source,
diff --git a/chrome/browser/web_applications/test/test_os_integration_manager.cc b/chrome/browser/web_applications/test/test_os_integration_manager.cc index 71b6792a..5c49382 100644 --- a/chrome/browser/web_applications/test/test_os_integration_manager.cc +++ b/chrome/browser/web_applications/test/test_os_integration_manager.cc
@@ -107,7 +107,8 @@ void TestOsIntegrationManager::UninstallAllOsHooks( const AppId& app_id, UninstallOsHooksCallback callback) { - OsHooksResults os_hooks_results{true}; + OsHooksResults os_hooks_results; + os_hooks_results.set(); UninstallOsHooks(app_id, os_hooks_results, std::move(callback)); }
diff --git a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc index ca44046..fe9c867 100644 --- a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc +++ b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc
@@ -36,7 +36,6 @@ sync_bridge_ = std::make_unique<WebAppSyncBridge>( profile, database_factory_.get(), mutable_registrar_.get(), this, mock_processor_.CreateForwardingProcessor()); - sync_bridge_->SetSubsystems(os_integration_manager_.get()); ON_CALL(processor(), IsTrackingMetadata()) .WillByDefault(testing::Return(true)); @@ -136,9 +135,16 @@ install_web_apps_after_sync_delegate_ = delegate; } -void TestWebAppRegistryController::SetUninstallWebAppsAfterSyncDelegate( - UninstallWebAppsAfterSyncDelegate delegate) { - uninstall_web_apps_after_sync_delegate_ = delegate; +void TestWebAppRegistryController:: + SetUninstallFromSyncBeforeRegistryUpdateDelegate( + UninstallFromSyncBeforeRegistryUpdateDelegate delegate) { + uninstall_from_sync_before_registry_update_delegate_ = delegate; +} + +void TestWebAppRegistryController:: + SetUninstallFromSyncAfterRegistryUpdateDelegate( + UninstallFromSyncAfterRegistryUpdateDelegate delegate) { + uninstall_from_sync_after_registry_update_delegate_ = delegate; } void TestWebAppRegistryController::InstallWebAppsAfterSync( @@ -152,11 +158,20 @@ } } -void TestWebAppRegistryController::UninstallWebAppsAfterSync( +void TestWebAppRegistryController::UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) { + if (uninstall_from_sync_before_registry_update_delegate_) { + uninstall_from_sync_before_registry_update_delegate_.Run( + std::move(web_apps)); + } +} + +void TestWebAppRegistryController::UninstallFromSyncAfterRegistryUpdate( std::vector<std::unique_ptr<WebApp>> web_apps, RepeatingUninstallCallback callback) { - if (uninstall_web_apps_after_sync_delegate_) { - uninstall_web_apps_after_sync_delegate_.Run(std::move(web_apps), callback); + if (uninstall_from_sync_after_registry_update_delegate_) { + uninstall_from_sync_after_registry_update_delegate_.Run(std::move(web_apps), + callback); } else { for (const std::unique_ptr<WebApp>& web_app : web_apps) callback.Run(web_app->app_id(), /*uninstalled=*/true);
diff --git a/chrome/browser/web_applications/test/test_web_app_registry_controller.h b/chrome/browser/web_applications/test/test_web_app_registry_controller.h index e384d1db..add051a 100644 --- a/chrome/browser/web_applications/test/test_web_app_registry_controller.h +++ b/chrome/browser/web_applications/test/test_web_app_registry_controller.h
@@ -52,17 +52,26 @@ void SetInstallWebAppsAfterSyncDelegate( InstallWebAppsAfterSyncDelegate delegate); - using UninstallWebAppsAfterSyncDelegate = base::RepeatingCallback<void( - std::vector<std::unique_ptr<WebApp>> web_apps, - RepeatingUninstallCallback callback)>; - void SetUninstallWebAppsAfterSyncDelegate( - UninstallWebAppsAfterSyncDelegate delegate); + using UninstallFromSyncBeforeRegistryUpdateDelegate = + base::RepeatingCallback<void(std::vector<AppId> web_apps)>; + void SetUninstallFromSyncBeforeRegistryUpdateDelegate( + UninstallFromSyncBeforeRegistryUpdateDelegate delegate); + + using UninstallFromSyncAfterRegistryUpdateDelegate = + base::RepeatingCallback<void( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback)>; + void SetUninstallFromSyncAfterRegistryUpdateDelegate( + UninstallFromSyncAfterRegistryUpdateDelegate delegate); // SyncInstallDelegate: void InstallWebAppsAfterSync(std::vector<WebApp*> web_apps, RepeatingInstallCallback callback) override; - void UninstallWebAppsAfterSync(std::vector<std::unique_ptr<WebApp>> web_apps, - RepeatingUninstallCallback callback) override; + void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) override; + void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) override; void DestroySubsystems(); @@ -77,7 +86,10 @@ private: InstallWebAppsAfterSyncDelegate install_web_apps_after_sync_delegate_; - UninstallWebAppsAfterSyncDelegate uninstall_web_apps_after_sync_delegate_; + UninstallFromSyncBeforeRegistryUpdateDelegate + uninstall_from_sync_before_registry_update_delegate_; + UninstallFromSyncAfterRegistryUpdateDelegate + uninstall_from_sync_after_registry_update_delegate_; std::unique_ptr<TestWebAppDatabaseFactory> database_factory_; std::unique_ptr<WebAppRegistrarMutable> mutable_registrar_;
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc index 3a4de01..efb5de7 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.cc +++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/callback_helpers.h" +#include "base/containers/contains.h" #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" @@ -100,6 +101,9 @@ } // namespace +WebAppInstallFinalizer::SyncUninstallState::SyncUninstallState() = default; +WebAppInstallFinalizer::SyncUninstallState::~SyncUninstallState() = default; + WebAppInstallFinalizer::WebAppInstallFinalizer( Profile* profile, WebAppIconManager* icon_manager, @@ -219,23 +223,6 @@ std::move(commit_callback)); } -void WebAppInstallFinalizer::FinalizeUninstallAfterSync( - const AppId& app_id, - UninstallWebAppCallback callback) { - DCHECK(started_); - // WebAppSyncBridge::ApplySyncChangesToRegistrar does the actual - // NotifyWebAppWillBeUninstalled and unregistration of the app from the - // registry. - DCHECK(!GetWebAppRegistrar().GetAppById(app_id)); - - icon_manager_->DeleteData( - app_id, - base::BindOnce( - &WebAppInstallFinalizer::OnIconsDataDeletedAndWebAppUninstalled, - weak_ptr_factory_.GetWeakPtr(), app_id, - webapps::WebappUninstallSource::kSync, std::move(callback))); -} - void WebAppInstallFinalizer::UninstallExternalWebApp( const AppId& app_id, webapps::WebappUninstallSource webapp_uninstall_source, @@ -309,6 +296,45 @@ UninstallWebAppInternal(app_id, webapp_uninstall_source, std::move(callback)); } +void WebAppInstallFinalizer::UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) { + DCHECK(started_); + + for (auto& app_id : web_apps) { + registrar().NotifyWebAppWillBeUninstalled(app_id); + pending_sync_uninstalls_[app_id] = std::make_unique<SyncUninstallState>(); + os_integration_manager().UninstallAllOsHooks( + app_id, + base::BindOnce(&WebAppInstallFinalizer::OnSyncUninstallOsHooksUninstall, + weak_ptr_factory_.GetWeakPtr(), app_id)); + } +} + +void WebAppInstallFinalizer::UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback repeating_callback) { + DCHECK(started_); + + for (std::unique_ptr<WebApp>& web_app : web_apps) { + const AppId& app_id = web_app->app_id(); + DCHECK(base::Contains(pending_sync_uninstalls_, app_id)); + auto& uninstall_state = pending_sync_uninstalls_[app_id]; + uninstall_state->callback = base::BindOnce(repeating_callback, app_id); + uninstall_state->web_app = std::move(web_app); + + DCHECK(started_); + // WebAppSyncBridge::ApplySyncChangesToRegistrar does the actual + // NotifyWebAppWillBeUninstalled and unregistration of the app from the + // registry, and MaybeFinishSyncUninstall does the NotifyWebAppUninstalled. + DCHECK(!GetWebAppRegistrar().GetAppById(app_id)); + + icon_manager_->DeleteData( + app_id, + base::BindOnce(&WebAppInstallFinalizer::OnSyncUninstallAppDataDeleted, + weak_ptr_factory_.GetWeakPtr(), app_id)); + } +} + bool WebAppInstallFinalizer::WasPreinstalledWebAppUninstalled( const AppId& app_id) const { return GetBoolWebAppPref(profile_->GetPrefs(), app_id, @@ -383,6 +409,39 @@ uninstall_source, std::move(callback))); } +void WebAppInstallFinalizer::OnSyncUninstallOsHooksUninstall( + AppId app_id, + OsHooksResults results) { + DCHECK(base::Contains(pending_sync_uninstalls_, app_id)); + auto& uninstall_state = pending_sync_uninstalls_[app_id]; + uninstall_state->hooks_uninstalled = true; + uninstall_state->success = uninstall_state->success && results.all(); + MaybeFinishSyncUninstall(app_id); +} + +void WebAppInstallFinalizer::OnSyncUninstallAppDataDeleted(AppId app_id, + bool success) { + DCHECK(base::Contains(pending_sync_uninstalls_, app_id)); + auto& uninstall_state = pending_sync_uninstalls_[app_id]; + uninstall_state->app_data_deleted = true; + uninstall_state->success = uninstall_state->success && success; + MaybeFinishSyncUninstall(app_id); +} + +void WebAppInstallFinalizer::MaybeFinishSyncUninstall(AppId app_id) { + DCHECK(base::Contains(pending_sync_uninstalls_, app_id)); + auto& uninstall_state = pending_sync_uninstalls_[app_id]; + if (uninstall_state->hooks_uninstalled && uninstall_state->app_data_deleted) { + UMA_HISTOGRAM_BOOLEAN("Webapp.SyncInitiatedUninstallResult", + uninstall_state->success); + OnIconsDataDeletedAndWebAppUninstalled( + app_id, webapps::WebappUninstallSource::kSync, + std::move(uninstall_state->callback), uninstall_state->success); + // WebApp object is destroyed here. + pending_sync_uninstalls_.erase(app_id); + } +} + void WebAppInstallFinalizer::OnUninstallOsHooks( const AppId& app_id, webapps::WebappUninstallSource uninstall_source,
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h index f5528c5..97d5e4184 100644 --- a/chrome/browser/web_applications/web_app_install_finalizer.h +++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -44,8 +44,6 @@ void FinalizeInstall(const WebApplicationInfo& web_app_info, const FinalizeOptions& options, InstallFinalizedCallback callback) override; - void FinalizeUninstallAfterSync(const AppId& app_id, - UninstallWebAppCallback callback) override; void FinalizeUpdate(const WebApplicationInfo& web_app_info, content::WebContents* web_contents, InstallFinalizedCallback callback) override; @@ -58,6 +56,13 @@ void UninstallWebApp(const AppId& app_id, webapps::WebappUninstallSource external_install_source, UninstallWebAppCallback callback) override; + + void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) override; + void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) override; + bool CanUserUninstallWebApp(const AppId& app_id) const override; bool WasPreinstalledWebAppUninstalled(const AppId& app_id) const override; void Start() override; @@ -78,6 +83,13 @@ Source::Type source, UninstallWebAppCallback callback); + void OnSyncUninstallOsHooksUninstall(AppId app_id, OsHooksResults); + void OnSyncUninstallAppDataDeleted(AppId app_id, bool success); + // Sync uninstall only finishes once both the hooks are uninstalled + // (OnSyncUninstallOsHooksUninstall) and app data is deleted + // (OnSyncUninstallAppDataDeleted). + void MaybeFinishSyncUninstall(AppId app_id); + void SetWebAppManifestFieldsAndWriteData( const WebApplicationInfo& web_app_info, std::unique_ptr<WebApp> web_app, @@ -129,6 +141,18 @@ WebAppPolicyManager* policy_manager_; bool started_ = false; + struct SyncUninstallState { + SyncUninstallState(); + ~SyncUninstallState(); + std::unique_ptr<WebApp> web_app; + UninstallWebAppCallback callback; + bool hooks_uninstalled = false; + bool app_data_deleted = false; + bool success = true; + }; + base::flat_map<AppId, std::unique_ptr<SyncUninstallState>> + pending_sync_uninstalls_; + std::unique_ptr<FileHandlersPermissionHelper> file_handlers_helper_; base::WeakPtrFactory<WebAppInstallFinalizer> weak_ptr_factory_{this};
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc index 1c57c853..bbf2ed32 100644 --- a/chrome/browser/web_applications/web_app_install_manager.cc +++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -54,16 +54,6 @@ task->app_id_to_expect().value() == app_id; } -// For the new USS-based system only: -void OnWebAppUninstalledAfterSync( - std::unique_ptr<WebApp> web_app, - InstallManager::OnceUninstallCallback callback, - bool uninstalled) { - UMA_HISTOGRAM_BOOLEAN("Webapp.SyncInitiatedUninstallResult", uninstalled); - std::move(callback).Run(web_app->app_id(), uninstalled); - // web_app data is destroyed here. -} - } // namespace WebAppInstallManager::WebAppInstallManager(Profile* profile) @@ -323,18 +313,18 @@ } } -void WebAppInstallManager::UninstallWebAppsAfterSync( +void WebAppInstallManager::UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) { + DCHECK(started_); + finalizer()->UninstallFromSyncBeforeRegistryUpdate(std::move(web_apps)); +} + +void WebAppInstallManager::UninstallFromSyncAfterRegistryUpdate( std::vector<std::unique_ptr<WebApp>> web_apps, RepeatingUninstallCallback callback) { DCHECK(started_); - - for (std::unique_ptr<WebApp>& web_app : web_apps) { - const AppId& app_id = web_app->app_id(); - - finalizer()->FinalizeUninstallAfterSync( - app_id, base::BindOnce(&OnWebAppUninstalledAfterSync, - std::move(web_app), callback)); - } + finalizer()->UninstallFromSyncAfterRegistryUpdate(std::move(web_apps), + std::move(callback)); } void WebAppInstallManager::SetDataRetrieverFactoryForTesting(
diff --git a/chrome/browser/web_applications/web_app_install_manager.h b/chrome/browser/web_applications/web_app_install_manager.h index faab004..9c550bc8 100644 --- a/chrome/browser/web_applications/web_app_install_manager.h +++ b/chrome/browser/web_applications/web_app_install_manager.h
@@ -8,11 +8,13 @@ #include <memory> #include "base/callback_forward.h" +#include "base/containers/flat_map.h" #include "base/containers/flat_set.h" #include "base/containers/queue.h" #include "base/containers/unique_ptr_adapters.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/web_applications/components/install_manager.h" +#include "chrome/browser/web_applications/components/os_integration_manager.h" #include "chrome/browser/web_applications/components/web_app_id.h" #include "chrome/browser/web_applications/components/web_app_url_loader.h" #include "chrome/browser/web_applications/web_app_sync_install_delegate.h" @@ -82,8 +84,11 @@ // For the new USS-based system only. SyncInstallDelegate: void InstallWebAppsAfterSync(std::vector<WebApp*> web_apps, RepeatingInstallCallback callback) override; - void UninstallWebAppsAfterSync(std::vector<std::unique_ptr<WebApp>> web_apps, - RepeatingUninstallCallback callback) override; + void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) override; + void UninstallFromSyncAfterRegistryUpdate( + std::vector<std::unique_ptr<WebApp>> web_apps, + RepeatingUninstallCallback callback) override; using DataRetrieverFactory = base::RepeatingCallback<std::unique_ptr<WebAppDataRetriever>()>;
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc index 6b842ef2..28a76d4 100644 --- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -841,7 +841,7 @@ EXPECT_EQ(*expected_app, *app); } -TEST_P(WebAppInstallManagerTest, UninstallWebAppsAfterSync) { +TEST_P(WebAppInstallManagerTest, UninstallFromSyncAfterRegistryUpdate) { std::unique_ptr<WebApp> app = CreateWebApp(GURL("https://example.com/path"), Source::kSync, /*user_display_mode=*/DisplayMode::kStandalone); @@ -852,41 +852,60 @@ file_utils().SetNextDeleteFileRecursivelyResult(true); enum Event { + kUninstallFromSyncBeforeRegistryUpdate, kObserver_OnWebAppWillBeUninstalled, - kUninstallWebAppsAfterSync_Callback + kObserver_OnWebAppUninstalled, + kUninstallFromSyncAfterRegistryUpdate_Callback }; std::vector<Event> event_order; WebAppInstallObserver observer(®istrar()); - observer.SetWebAppUninstalledDelegate( + observer.SetWebAppWillBeUninstalledDelegate( base::BindLambdaForTesting([&](const AppId& uninstalled_app_id) { EXPECT_EQ(uninstalled_app_id, app_id); event_order.push_back(Event::kObserver_OnWebAppWillBeUninstalled); })); + observer.SetWebAppUninstalledDelegate( + base::BindLambdaForTesting([&](const AppId& uninstalled_app_id) { + EXPECT_EQ(uninstalled_app_id, app_id); + event_order.push_back(Event::kObserver_OnWebAppUninstalled); + })); + + controller().SetUninstallFromSyncBeforeRegistryUpdateDelegate( + base::BindLambdaForTesting([&](std::vector<AppId> apps_to_uninstall) { + ASSERT_FALSE(apps_to_uninstall.empty()); + EXPECT_EQ(apps_to_uninstall[0], app_id); + event_order.push_back(Event::kUninstallFromSyncBeforeRegistryUpdate); + install_manager().UninstallFromSyncBeforeRegistryUpdate( + std::move(apps_to_uninstall)); + })); base::RunLoop run_loop; - - controller().SetUninstallWebAppsAfterSyncDelegate(base::BindLambdaForTesting( - [&](std::vector<std::unique_ptr<WebApp>> apps_unregistered, - SyncInstallDelegate::RepeatingUninstallCallback callback) { - install_manager().UninstallWebAppsAfterSync( - std::move(apps_unregistered), - base::BindLambdaForTesting([&](const AppId& uninstalled_app_id, - bool uninstalled) { - EXPECT_EQ(uninstalled_app_id, app_id); - EXPECT_TRUE(uninstalled); - event_order.push_back(Event::kUninstallWebAppsAfterSync_Callback); - run_loop.Quit(); - })); - })); + controller().SetUninstallFromSyncAfterRegistryUpdateDelegate( + base::BindLambdaForTesting( + [&](std::vector<std::unique_ptr<WebApp>> apps_unregistered, + SyncInstallDelegate::RepeatingUninstallCallback callback) { + install_manager().UninstallFromSyncAfterRegistryUpdate( + std::move(apps_unregistered), + base::BindLambdaForTesting([&](const AppId& uninstalled_app_id, + bool uninstalled) { + EXPECT_EQ(uninstalled_app_id, app_id); + EXPECT_TRUE(uninstalled); + event_order.push_back( + Event::kUninstallFromSyncAfterRegistryUpdate_Callback); + run_loop.Quit(); + })); + })); // The sync server sends a change to delete the app. controller().ApplySyncChanges_DeleteApps({app_id}); run_loop.Run(); const std::vector<Event> expected_event_order{ + Event::kUninstallFromSyncBeforeRegistryUpdate, Event::kObserver_OnWebAppWillBeUninstalled, - Event::kUninstallWebAppsAfterSync_Callback}; + Event::kObserver_OnWebAppUninstalled, + Event::kUninstallFromSyncAfterRegistryUpdate_Callback}; EXPECT_EQ(expected_event_order, event_order); }
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc index 5def7b7..6d528c3c 100644 --- a/chrome/browser/web_applications/web_app_provider.cc +++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -318,7 +318,6 @@ os_integration_manager_->SetSubsystems(registrar_.get(), ui_manager_.get(), icon_manager_.get()); registrar_->SetSubsystems(os_integration_manager_.get()); - registry_controller_->SetSubsystems(os_integration_manager_.get()); connected_ = true; }
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc index e11c438a..a50cae1 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -16,7 +16,6 @@ #include "base/types/pass_key.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/app_registry_controller.h" -#include "chrome/browser/web_applications/components/os_integration_manager.h" #include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_prefs_utils.h" #include "chrome/browser/web_applications/components/web_app_utils.h" @@ -587,14 +586,12 @@ registrar_->NotifyWebAppsWillBeUpdatedFromSync(new_apps_state); } - // Notify observers that web apps will be uninstalled. |apps_to_delete| are - // still registered at this stage. - for (const AppId& app_id : update_local_data->apps_to_delete) { - registrar_->NotifyWebAppWillBeUninstalled(app_id); - // TODO(https://crbug.com/1162349): Have the - // InstallDelegate::UninstallWebAppsAfterSync occur after OS hooks are - // uninstalled. - os_integration_manager().UninstallAllOsHooks(app_id, base::DoNothing()); + // Initiate any uninstall actions that need to happen before the app is + // removed from the registry. This includes starting ot uninstall os hooks, + // and notify observers WebAppWillBeUninstalled. + if (!update_local_data->apps_to_delete.empty()) { + install_delegate_->UninstallFromSyncBeforeRegistryUpdate( + update_local_data->apps_to_delete); } std::vector<WebApp*> apps_to_install; @@ -615,13 +612,11 @@ // locally and not needed by other sources. We need to clean up disk data // (icons). if (!apps_unregistered.empty()) { - // TODO(https://crbug.com/1162349): Instead of calling this now, have this - // call occur after OS hooks are uninstalled. for (const auto& web_app : apps_unregistered) { apps_in_sync_uninstall_.insert(web_app->app_id()); } - install_delegate_->UninstallWebAppsAfterSync( + install_delegate_->UninstallFromSyncAfterRegistryUpdate( std::move(apps_unregistered), base::BindRepeating(&WebAppSyncBridge::WebAppUninstalled, weak_ptr_factory_.GetWeakPtr()));
diff --git a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc index 564dc1a..f5eb81b 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge_unittest.cc
@@ -247,7 +247,7 @@ ADD_FAILURE(); })); - controller().SetUninstallWebAppsAfterSyncDelegate( + controller().SetUninstallFromSyncAfterRegistryUpdateDelegate( base::BindLambdaForTesting( [&](std::vector<std::unique_ptr<WebApp>> apps_to_uninstall, TestWebAppRegistryController::RepeatingUninstallCallback @@ -561,7 +561,7 @@ base::RunLoop run_loop; base::RepeatingClosure barrier_closure = - base::BarrierClosure(2, run_loop.QuitClosure()); + base::BarrierClosure(3, run_loop.QuitClosure()); controller().SetInstallWebAppsAfterSyncDelegate(base::BindLambdaForTesting( [&](std::vector<WebApp*> apps_to_install, @@ -579,24 +579,39 @@ barrier_closure.Run(); })); - controller().SetUninstallWebAppsAfterSyncDelegate(base::BindLambdaForTesting( - [&](std::vector<std::unique_ptr<WebApp>> apps_to_uninstall, - TestWebAppRegistryController::RepeatingUninstallCallback callback) { - for (std::unique_ptr<WebApp>& app_to_uninstall : apps_to_uninstall) { - // The app must be unregistered. - EXPECT_FALSE(registrar().GetAppById(app_to_uninstall->app_id())); - registry.erase(app_to_uninstall->app_id()); + controller().SetUninstallFromSyncBeforeRegistryUpdateDelegate( + base::BindLambdaForTesting([&](std::vector<AppId> apps_to_uninstall) { + for (AppId& app_id : apps_to_uninstall) { + // The app must be registered. + EXPECT_TRUE(registrar().GetAppById(app_id)); } - - RunCallbacksOnUninstall(apps_to_uninstall, callback, - /*uninstalled=*/true); barrier_closure.Run(); })); + controller().SetUninstallFromSyncAfterRegistryUpdateDelegate( + base::BindLambdaForTesting( + [&](std::vector<std::unique_ptr<WebApp>> apps_to_uninstall, + TestWebAppRegistryController::RepeatingUninstallCallback + callback) { + EXPECT_EQ(5ul, + sync_bridge().GetAppsInSyncUninstallForTest().size()); + for (std::unique_ptr<WebApp>& app_to_uninstall : + apps_to_uninstall) { + // The app must be unregistered. + EXPECT_FALSE(registrar().GetAppById(app_to_uninstall->app_id())); + registry.erase(app_to_uninstall->app_id()); + } + + RunCallbacksOnUninstall(apps_to_uninstall, callback, + /*uninstalled=*/true); + barrier_closure.Run(); + })); sync_bridge().ApplySyncChanges(sync_bridge().CreateMetadataChangeList(), std::move(entity_changes)); run_loop.Run(); + EXPECT_EQ(0ul, sync_bridge().GetAppsInSyncUninstallForTest().size()); + EXPECT_TRUE(IsRegistryEqual(registrar_registry(), registry)); EXPECT_TRUE(IsDatabaseRegistryEqualToRegistrar()); }
diff --git a/chrome/browser/web_applications/web_app_sync_install_delegate.h b/chrome/browser/web_applications/web_app_sync_install_delegate.h index 350316b..350d86b 100644 --- a/chrome/browser/web_applications/web_app_sync_install_delegate.h +++ b/chrome/browser/web_applications/web_app_sync_install_delegate.h
@@ -31,8 +31,21 @@ // |web_apps| are already registered and owned by the registrar. virtual void InstallWebAppsAfterSync(std::vector<WebApp*> web_apps, RepeatingInstallCallback callback) = 0; - // |web_apps| are already unregistered and not owned by the registrar. - virtual void UninstallWebAppsAfterSync( + + // Sync-initiated uninstall. + // Called before the web apps are removed from the registry. Begins process of + // uninstalling OS hooks, which initially requires the registrar to still + // contain the web app data. Also notify observers of WebAppWillBeUninstalled. + // TODO(dmurph): After migration to WebApp* from the registry, this could + // potentially just be done in one step, after removal from registry, as os + // hooks information could be passed. + virtual void UninstallFromSyncBeforeRegistryUpdate( + std::vector<AppId> web_apps) = 0; + // Delete non-database app data from disk (icon .png files). |app_id| must be + // unregistered. Observers are notified of WebAppUninstalled and the + // |callback| is called after the app data is fully deleted & os hooks + // uninstalled. + virtual void UninstallFromSyncAfterRegistryUpdate( std::vector<std::unique_ptr<WebApp>> web_apps, RepeatingUninstallCallback callback) = 0; };
diff --git a/chrome/chrome_paks.gni b/chrome/chrome_paks.gni index b24b92c..7b81197 100644 --- a/chrome/chrome_paks.gni +++ b/chrome/chrome_paks.gni
@@ -6,6 +6,7 @@ import("//build/config/locales.gni") import("//chrome/browser/buildflags.gni") import("//chrome/common/features.gni") +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") import("//extensions/buildflags/buildflags.gni") import("//pdf/features.gni") import("//ui/base/ui_features.gni") @@ -332,6 +333,12 @@ sources += [ "$root_gen_dir/chrome/tab_strip_resources.pak" ] deps += [ "//chrome/browser/resources/tab_strip:resources" ] } + if (is_cfm) { + sources += [ "$root_gen_dir/chrome/cfm_network_settings_resources.pak" ] + deps += [ + "//chrome/browser/resources/chromeos/chromebox_for_meetings:resources", + ] + } } }
diff --git a/chrome/test/base/in_process_browser_test_browsertest.cc b/chrome/test/base/in_process_browser_test_browsertest.cc index a45ca57..40b82fe 100644 --- a/chrome/test/base/in_process_browser_test_browsertest.cc +++ b/chrome/test/base/in_process_browser_test_browsertest.cc
@@ -119,7 +119,13 @@ } }; -IN_PROC_BROWSER_TEST_F(SingleProcessBrowserTest, Test) { +// TODO(https://crbug.com/1231009): Flaky / times out on windows bots. +#if defined(OS_WIN) +#define MAYBE_Test DISABLED_Test +#else +#define MAYBE_Test Test +#endif +IN_PROC_BROWSER_TEST_F(SingleProcessBrowserTest, MAYBE_Test) { // Should not crash. }
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json index 05ae7b48..46e44c9e 100644 --- a/chrome/test/data/policy/policy_test_cases.json +++ b/chrome/test/data/policy/policy_test_cases.json
@@ -9194,11 +9194,24 @@ ], "policy_pref_mapping_tests": [ { + "note": "Checking default value (no policies set)", + "policies": {}, + "prefs": { + "crostini.arc_adb_sideloading.user_pref": { + "location": "user_profile", + "default_value": 0 + } + } + }, + { "policies": { "CrostiniArcAdbSideloadingAllowed": 0 }, "prefs": { - "crostini.arc_adb_sideloading.user_pref": {} + "crostini.arc_adb_sideloading.user_pref": { + "location": "user_profile", + "value": 0 + } } }, { @@ -9206,7 +9219,10 @@ "CrostiniArcAdbSideloadingAllowed": 1 }, "prefs": { - "crostini.arc_adb_sideloading.user_pref": {} + "crostini.arc_adb_sideloading.user_pref": { + "location": "user_profile", + "value": 1 + } } } ] @@ -9227,7 +9243,7 @@ ] }, "DeviceCrostiniArcAdbSideloadingAllowed": { - "reason_for_missing_test": "TODO(crbug.com/1213429) add test case" + "reason_for_missing_test": "Maps into CrosSettings" }, "DeviceSamlLoginAuthenticationType": { "reason_for_missing_test": "TODO(crbug.com/1213429) add test case"
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn index 345b265..bb1050ea 100644 --- a/chrome/test/data/webui/BUILD.gn +++ b/chrome/test/data/webui/BUILD.gn
@@ -7,6 +7,7 @@ import("//chrome/common/features.gni") import("//chrome/test/base/js2gtest.gni") import("//chrome/test/include_js_tests.gni") +import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni") import("//printing/buildflags/buildflags.gni") import("//third_party/closure_compiler/compile_js.gni") import("//ui/webui/resources/tools/js_modulizer.gni") @@ -201,6 +202,11 @@ if (!is_android) { sources += [ "commander/commander_browsertest.js" ] } + if (is_cfm) { + sources += [ + "chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js", + ] + } data = [ "$root_gen_dir/chrome/test/data/webui/fake_chrome_event.m.js",
diff --git a/chrome/test/data/webui/chromeos/chromebox_for_meetings/OWNERS b/chrome/test/data/webui/chromeos/chromebox_for_meetings/OWNERS new file mode 100644 index 0000000..063e069 --- /dev/null +++ b/chrome/test/data/webui/chromeos/chromebox_for_meetings/OWNERS
@@ -0,0 +1 @@ +file://chromeos/components/chromebox_for_meetings/OWNERS
diff --git a/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js b/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js new file mode 100644 index 0000000..fd3806d9 --- /dev/null +++ b/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_browsertest.js
@@ -0,0 +1,21 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/** + * @fileoverview Test suite for the CFM Network Settings JS. + */ +GEN_INCLUDE(['//chrome/test/data/webui/polymer_browser_test_base.js']); + +GEN('#include "content/public/test/browser_test.h"'); + +var CfmNetworkSettingsBrowserTest = class extends PolymerTest { + /** @override */ + get browsePreload() { + return 'chrome://cfm-network-settings/test_loader.html?module=chromeos/chromebox_for_meetings/cfm_network_settings_test.js'; + } +}; + +TEST_F('CfmNetworkSettingsBrowserTest', 'All', function() { + mocha.run(); +});
diff --git a/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_test.js b/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_test.js new file mode 100644 index 0000000..23695f2 --- /dev/null +++ b/chrome/test/data/webui/chromeos/chromebox_for_meetings/cfm_network_settings_test.js
@@ -0,0 +1,166 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'chrome://cfm-network-settings/cfm_network_settings.js'; + +import {CfmNetworkSettingsBrowserProxyImpl} from 'chrome://cfm-network-settings/cfm_network_settings_browser_proxy.js'; +import {MojoInterfaceProviderImpl} from 'chrome://resources/cr_components/chromeos/network/mojo_interface_provider.m.js'; +import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js'; +import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; +import {FakeNetworkConfig} from 'chrome://test/chromeos/fake_network_config_mojom.m.js'; +import {TestBrowserProxy} from 'chrome://test/test_browser_proxy.m.js'; + +/** @implements {CfmNetworkSettingsBrowserProxy} */ +export class TestCfmNetworkSettingsBrowserProxy extends TestBrowserProxy { + constructor() { + super([ + 'showNetworkConfig', + 'showNetworkDetails', + 'showAddWifi', + 'showManageCerts', + ]); + } + + /** @override */ + showNetworkConfig(guid) { + this.methodCalled('showNetworkConfig', guid); + } + + /** @override */ + showNetworkDetails(guid) { + this.methodCalled('showNetworkDetails', guid); + } + + /** @override */ + showAddWifi() { + this.methodCalled('showAddWifi'); + } + + /** @override */ + showManageCerts() { + this.methodCalled('showManageCerts'); + } +} + +suite('cfm-network-settings', () => { + const mojom = chromeos.networkConfig.mojom; + const wiFiId = 'WiFi 1'; + const disconnectedWiFiId = 'WiFi 2'; + const configuredWiFiId = 'Configured WiFi'; + let mojoApi; + let networkSettings; + let browserProxy; + + async function flushAsync() { + flush(); + return new Promise(resolve => setTimeout(resolve)); + } + + suiteSetup(() => { + mojoApi = new FakeNetworkConfig(); + MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi; + }); + + setup(async () => { + PolymerTest.clearBody(); + + browserProxy = new TestCfmNetworkSettingsBrowserProxy(); + CfmNetworkSettingsBrowserProxyImpl.instance_ = browserProxy; + + mojoApi.resetForTest(); + + let connectedWiFi = + OncMojo.getDefaultNetworkState(mojom.NetworkType.kWiFi, wiFiId); + connectedWiFi.connectable = true; + connectedWiFi.connectionState = mojom.ConnectionStateType.kConnected; + + let disconnectedWiFi = OncMojo.getDefaultNetworkState( + mojom.NetworkType.kWiFi, disconnectedWiFiId); + + let configuredWiFi = OncMojo.getDefaultNetworkState( + mojom.NetworkType.kWiFi, configuredWiFiId); + configuredWiFi.connectable = true; + + mojoApi.addNetworksForTest( + [connectedWiFi, disconnectedWiFi, configuredWiFi]); + mojoApi.removeNetworkForTest({guid: 'eth0_guid'}); + mojoApi.setDeviceStateForTest({ + type: mojom.NetworkType.kWiFi, + deviceState: mojom.DeviceStateType.kEnabled, + }); + + networkSettings = document.createElement('cfm-network-settings'); + networkSettings.style.height = '100%'; + networkSettings.style.width = '100%'; + document.body.appendChild(networkSettings); + let networkSelect = networkSettings.$['network-select']; + networkSelect.refreshNetworks(); + + await flushAsync(); + }); + + test('Show add wifi', () => { + let customItemList = networkSettings.$['custom-items']; + // While the network list items do have the correct ARIA role, clicking them + // directly does nothing; we have to click a specific element within them. + let items = customItemList.shadowRoot.querySelectorAll('*[role="button"]'); + let clickable = items[0].shadowRoot.querySelectorAll('*[role="button"]'); + clickable[0].click(); + assertEquals(1, browserProxy.getCallCount('showAddWifi')); + }); + + test('Show proxy settings', () => { + let customItemList = networkSettings.$['custom-items']; + // While the network list items do have the correct ARIA role, clicking them + // directly does nothing; we have to click a specific element within them. + let items = customItemList.shadowRoot.querySelectorAll('*[role="button"]'); + let clickable = items[1].shadowRoot.querySelectorAll('*[role="button"]'); + clickable[0].click(); + assertDeepEquals([''], browserProxy.getArgs('showNetworkDetails')); + }); + + test('Show manage certs', () => { + let customItemList = networkSettings.$['custom-items']; + // While the network list items do have the correct ARIA role, clicking them + // directly does nothing; we have to click a specific element within them. + let items = customItemList.shadowRoot.querySelectorAll('*[role="button"]'); + let clickable = items[2].shadowRoot.querySelectorAll('*[role="button"]'); + clickable[0].click(); + assertEquals(1, browserProxy.getCallCount('showManageCerts')); + }); + + test('Click unconnected network', () => { + let networkSelect = networkSettings.$['network-select']; + let item = + networkSelect.getNetworkListItemByNameForTest(disconnectedWiFiId); + item.click(); + assertDeepEquals( + [disconnectedWiFiId + '_guid'], + browserProxy.getArgs('showNetworkConfig')); + }); + + test('Click connected network', () => { + let networkSelect = networkSettings.$['network-select']; + let item = networkSelect.getNetworkListItemByNameForTest(wiFiId); + item.click(); + assertDeepEquals( + [wiFiId + '_guid'], browserProxy.getArgs('showNetworkDetails')); + }); + + test('Click configured network', async () => { + // FakeNetworkConfig doesn't let us mock out startConnect to do + // anything other than return canceled, so we can't verify the + // kNotConfigured case directly, only check that startConnect was called. + let connectTried = false; + mojoApi.whenCalled('startConnect').then(() => connectTried = true); + + let networkSelect = networkSettings.$['network-select']; + let item = networkSelect.getNetworkListItemByNameForTest(configuredWiFiId); + item.click(); + + await flushAsync(); + + assertTrue(connectTried); + }); +});
diff --git a/chrome/test/data/webui/cr_elements/BUILD.gn b/chrome/test/data/webui/cr_elements/BUILD.gn index 3e66417..918363f 100644 --- a/chrome/test/data/webui/cr_elements/BUILD.gn +++ b/chrome/test/data/webui/cr_elements/BUILD.gn
@@ -21,6 +21,7 @@ ":cr_card_radio_button_test", ":cr_checkbox_test", ":cr_container_shadow_behavior_test", + ":cr_container_shadow_mixin_test", ":cr_dialog_test", ":cr_drawer_tests", ":cr_expand_button_tests", @@ -100,6 +101,15 @@ externs_list = [ "$externs_path/mocha-2.5.js" ] } +js_library("cr_container_shadow_mixin_test") { + deps = [ + "..:chai_assert", + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/cr_elements:cr_container_shadow_mixin", + ] + externs_list = [ "$externs_path/mocha-2.5.js" ] +} + js_library("cr_dialog_test") { deps = [ "..:chai_assert",
diff --git a/chrome/test/data/webui/cr_elements/cr_container_shadow_mixin_test.js b/chrome/test/data/webui/cr_elements/cr_container_shadow_mixin_test.js new file mode 100644 index 0000000..17fe533 --- /dev/null +++ b/chrome/test/data/webui/cr_elements/cr_container_shadow_mixin_test.js
@@ -0,0 +1,81 @@ +// 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. + +// clang-format off +import {CrContainerShadowMixin, CrContainerShadowMixinInterface} from 'chrome://resources/cr_elements/cr_container_shadow_mixin.js'; +import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {assertFalse, assertTrue} from '../chai_assert.js'; +// clang-format on + +suite('CrContainerShadowBehavior', function() { + /** + * @constructor + * @extends {PolymerElement} + * @implements {CrContainerShadowMixinInterface} + */ + const TestElementBase = CrContainerShadowMixin(PolymerElement); + + /** @polymer */ + class TestElement extends TestElementBase { + static get is() { + return 'test-element'; + } + + static get template() { + return html` + <style> + #container { + height: 50px; + } + </style> + <div id="before"></div> + <div id="container" show-bottom-shadow$="[[showBottomShadow]]"></div> + <div id="after"></div> + `; + } + + static get properties() { + return { + showBottomShadow: Boolean, + }; + } + } + + customElements.define(TestElement.is, TestElement); + + setup(function() { + document.body.innerHTML = ''; + }); + + test('no bottom shadow', function() { + const element = + /** @type {!TestElement} */ (document.createElement('test-element')); + document.body.appendChild(element); + + // Should not have a bottom shadow div. + assertFalse( + !!element.shadowRoot.querySelector('#cr-container-shadow-bottom')); + assertTrue(!!element.shadowRoot.querySelector('#cr-container-shadow-top')); + + element.showBottomShadow = true; + + // Still no bottom shadow since this is only checked in attached(); + assertFalse( + !!element.shadowRoot.querySelector('#cr-container-shadow-bottom')); + assertTrue(!!element.shadowRoot.querySelector('#cr-container-shadow-top')); + }); + + test('show bottom shadow', function() { + const element = /** @type {TestElementElement} */ ( + document.createElement('test-element')); + element.showBottomShadow = true; + document.body.appendChild(element); + + // Has both shadows. + assertTrue( + !!element.shadowRoot.querySelector('#cr-container-shadow-bottom')); + assertTrue(!!element.shadowRoot.querySelector('#cr-container-shadow-top')); + }); +});
diff --git a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js index 24c7068b..d9689898 100644 --- a/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js +++ b/chrome/test/data/webui/cr_elements/cr_elements_browsertest.js
@@ -62,6 +62,17 @@ mocha.run(); }); +// eslint-disable-next-line no-var +var CrElementsContainerShadowMixinTest = class extends CrElementsV3BrowserTest { + /** @override */ + get browsePreload() { + return 'chrome://test/test_loader.html?module=cr_elements/cr_container_shadow_mixin_test.js'; + } +}; + +TEST_F('CrElementsContainerShadowMixinTest', 'All', function() { + mocha.run(); +}); // eslint-disable-next-line no-var var CrElementsDialogV3Test = class extends CrElementsV3BrowserTest {
diff --git a/chrome/test/data/webui/settings/settings_menu_test.js b/chrome/test/data/webui/settings/settings_menu_test.js index c6b3103..4f85bc57 100644 --- a/chrome/test/data/webui/settings/settings_menu_test.js +++ b/chrome/test/data/webui/settings/settings_menu_test.js
@@ -6,6 +6,7 @@ // clang-format off import {isChromeOS, isLacros} from 'chrome://resources/js/cr.m.js'; +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 {pageVisibility, Router, routes} from 'chrome://settings/settings.js'; // clang-format on @@ -151,9 +152,12 @@ assertEquals( expectedHidden, settingsMenu.shadowRoot.querySelector('#reset').hidden); - assertEquals( - expectedHidden, - settingsMenu.shadowRoot.querySelector('#safetyCheck').hidden); + + if (!loadTimeData.getBoolean('enableLandingPageRedesign')) { + assertEquals( + expectedHidden, + settingsMenu.shadowRoot.querySelector('#safetyCheck').hidden); + } if (!isChromeOS && !isLacros) { assertEquals(
diff --git a/chromeos/crosapi/mojom/keystore_service.mojom b/chromeos/crosapi/mojom/keystore_service.mojom index 1b29c99..acf4be7 100644 --- a/chromeos/crosapi/mojom/keystore_service.mojom +++ b/chromeos/crosapi/mojom/keystore_service.mojom
@@ -89,15 +89,6 @@ }; [Stable] -union ExtensionKeystoreBinaryResult { - // Implies failure. - string error_message; - - // Implies success. - array<uint8> blob; -}; - -[Stable] union KeystoreBinaryResult { // Implies failure. KeystoreError error; @@ -173,6 +164,16 @@ uint64 tags; }; +// DEPRECATED, use `KeystoreBinaryResult` instead. +[Stable, RenamedFrom="crosapi.mojom.ExtensionKeystoreBinaryResult"] +union DEPRECATED_ExtensionKeystoreBinaryResult { + // Implies failure. + string error_message; + + // Implies success. + array<uint8> blob; +}; + // This interface is implemented by ash-chrome. It provides lacros-chrome a // mechanism to modify and query the attestation-only and generate purpose // keystores. @@ -233,30 +234,6 @@ (DEPRECATED_GetPublicKeyResult result); // Generates a private/public key-pair with |algorithm| and stores the results - // in |keystore|. Returns the public key as a binary blob. Also generates - // additional metadata to make the key available for future ExtensionSign - // calls. - // TODO(https://crbug.com/1166105): In the long term it doesn't make sense to - // pass |extension_id|. We should find a better solution. - [MinVersion=2, RenamedFrom="crosapi.mojom.GenerateKey"] - ExtensionGenerateKey@3(KeystoreType keystore, - KeystoreSigningAlgorithm algorithm, - [MinVersion=5] - string? extension_id) => - (ExtensionKeystoreBinaryResult result); - - // Signs some data using a previously generated key, indicated with - // |public_key|. |scheme| is the WebCrypto signing scheme. |extension_id| is - // needed to determine if the extension is allowed to use the key. - // TODO(https://crbug.com/1166105): In the long term it doesn't make sense to - // pass |extension_id|. We should find a better solution. - [MinVersion=4, RenamedFrom="crosapi.mojom.Sign"] - ExtensionSign@7(KeystoreType keystore, array<uint8> public_key, - KeystoreSigningScheme scheme, - array<uint8> data, string extension_id) => - (ExtensionKeystoreBinaryResult result); - - // Generates a private/public key-pair with |algorithm| and stores the results // in |keystore|. Returns the public key as a binary blob. [MinVersion=6] GenerateKey@8(KeystoreType keystore, @@ -299,4 +276,26 @@ [MinVersion=10] CanUserGrantPermissionForKey@14(array<uint8> public_key) => (bool is_allowed); + + // DEPRECATED, use `GenerateKey` instead. + // Generates a private/public key-pair with |algorithm| and stores the results + // in |keystore|. Returns the public key as a binary blob. Also generates + // additional metadata to make the key available for future ExtensionSign + // calls. + [MinVersion=2, RenamedFrom="crosapi.mojom.ExtensionGenerateKey"] + DEPRECATED_ExtensionGenerateKey@3(KeystoreType keystore, + KeystoreSigningAlgorithm algorithm, + [MinVersion=5] + string? extension_id) => + (DEPRECATED_ExtensionKeystoreBinaryResult result); + + // DEPRECATED, use `Sign` instead. + // Signs some data using a previously generated key, indicated with + // |public_key|. |scheme| is the WebCrypto signing scheme. |extension_id| is + // needed to determine if the extension is allowed to use the key. + [MinVersion=4, RenamedFrom="crosapi.mojom.ExtensionSign"] + DEPRECATED_ExtensionSign@7(KeystoreType keystore, array<uint8> public_key, + KeystoreSigningScheme scheme, + array<uint8> data, string extension_id) => + (DEPRECATED_ExtensionKeystoreBinaryResult result); };
diff --git a/components/autofill_assistant/browser/actions/get_element_status_action.cc b/components/autofill_assistant/browser/actions/get_element_status_action.cc index f042848..ab4cdba 100644 --- a/components/autofill_assistant/browser/actions/get_element_status_action.cc +++ b/components/autofill_assistant/browser/actions/get_element_status_action.cc
@@ -13,6 +13,7 @@ #include "components/autofill_assistant/browser/client_status.h" #include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/user_data_util.h" +#include "components/autofill_assistant/browser/web/element_store.h" #include "components/autofill_assistant/browser/web/web_controller.h" #include "third_party/re2/src/re2/re2.h" @@ -93,29 +94,66 @@ void GetElementStatusAction::InternalProcessAction( ProcessActionCallback callback) { callback_ = std::move(callback); - selector_ = Selector(proto_.get_element_status().element()); - if (selector_.empty()) { + switch (proto_.get_element_status().element_case()) { + case GetElementStatusProto::kSelector: + GetElementBySelector(Selector(proto_.get_element_status().selector())); + return; + case GetElementStatusProto::kClientId: + GetElementByClientId(proto_.get_element_status().client_id()); + return; + case GetElementStatusProto::ELEMENT_NOT_SET: + EndAction(ClientStatus(INVALID_ACTION)); + return; + } +} + +void GetElementStatusAction::GetElementBySelector(const Selector& selector) { + if (selector.empty()) { VLOG(1) << __func__ << ": empty selector"; EndAction(ClientStatus(INVALID_SELECTOR)); return; } delegate_->ShortWaitForElementWithSlowWarning( - selector_, + selector, base::BindOnce(&GetElementStatusAction::OnWaitForElementTimed, weak_ptr_factory_.GetWeakPtr(), base::BindOnce(&GetElementStatusAction::OnWaitForElement, - weak_ptr_factory_.GetWeakPtr()))); + weak_ptr_factory_.GetWeakPtr(), selector))); } void GetElementStatusAction::OnWaitForElement( + const Selector& selector, const ClientStatus& element_status) { if (!element_status.ok()) { EndAction(element_status); return; } + delegate_->FindElement(selector, + base::BindOnce(&GetElementStatusAction::OnGetElement, + weak_ptr_factory_.GetWeakPtr())); +} + +void GetElementStatusAction::GetElementByClientId( + const ClientIdProto& client_id) { + auto element = std::make_unique<ElementFinder::Result>(); + auto* element_ptr = element.get(); + OnGetElement(delegate_->GetElementStore()->GetElement(client_id.identifier(), + element_ptr), + std::move(element)); +} + +void GetElementStatusAction::OnGetElement( + const ClientStatus& status, + std::unique_ptr<ElementFinder::Result> element) { + if (!status.ok()) { + EndAction(status); + return; + } + element_ = std::move(element); + std::vector<std::string> attribute_list; switch (proto_.get_element_status().value_source()) { case GetElementStatusProto::VALUE: @@ -129,22 +167,6 @@ return; } - delegate_->FindElement( - selector_, - base::BindOnce(&GetElementStatusAction::OnFindElement, - weak_ptr_factory_.GetWeakPtr(), attribute_list)); -} - -void GetElementStatusAction::OnFindElement( - const std::vector<std::string>& attribute_list, - const ClientStatus& status, - std::unique_ptr<ElementFinder::Result> element) { - if (!status.ok()) { - EndAction(status); - return; - } - element_ = std::move(element); - delegate_->GetWebController()->GetStringAttribute( attribute_list, *element_, base::BindOnce(&GetElementStatusAction::OnGetStringAttribute,
diff --git a/components/autofill_assistant/browser/actions/get_element_status_action.h b/components/autofill_assistant/browser/actions/get_element_status_action.h index c0fd2a7..9eee560 100644 --- a/components/autofill_assistant/browser/actions/get_element_status_action.h +++ b/components/autofill_assistant/browser/actions/get_element_status_action.h
@@ -9,6 +9,7 @@ #include "base/memory/weak_ptr.h" #include "components/autofill_assistant/browser/actions/action.h" #include "components/autofill_assistant/browser/client_status.h" +#include "components/autofill_assistant/browser/dom_action.pb.h" #include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/web/element_finder.h" @@ -28,10 +29,12 @@ // Overrides Action: void InternalProcessAction(ProcessActionCallback callback) override; - void OnWaitForElement(const ClientStatus& element_status); - void OnFindElement(const std::vector<std::string>& attribute_list, - const ClientStatus& status, - std::unique_ptr<ElementFinder::Result> element); + void GetElementBySelector(const Selector& selector); + void OnWaitForElement(const Selector& selector, + const ClientStatus& element_status); + void GetElementByClientId(const ClientIdProto& client_id); + void OnGetElement(const ClientStatus& status, + std::unique_ptr<ElementFinder::Result> element); void OnGetStringAttribute(const ClientStatus& status, const std::string& text); void OnResolveTextValue(const std::string& text, @@ -45,7 +48,6 @@ std::unique_ptr<ElementFinder::Result> element_; - Selector selector_; ProcessActionCallback callback_; base::WeakPtrFactory<GetElementStatusAction> weak_ptr_factory_{this}; };
diff --git a/components/autofill_assistant/browser/actions/get_element_status_action_unittest.cc b/components/autofill_assistant/browser/actions/get_element_status_action_unittest.cc index dc1a5cb6f..1650a9c 100644 --- a/components/autofill_assistant/browser/actions/get_element_status_action_unittest.cc +++ b/components/autofill_assistant/browser/actions/get_element_status_action_unittest.cc
@@ -18,6 +18,7 @@ #include "components/autofill_assistant/browser/selector.h" #include "components/autofill_assistant/browser/service.pb.h" #include "components/autofill_assistant/browser/user_model.h" +#include "components/autofill_assistant/browser/web/element_store.h" #include "components/autofill_assistant/browser/web/mock_web_controller.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_browser_context.h" @@ -86,16 +87,24 @@ MockWebsiteLoginManager mock_website_login_manager_; }; +TEST_F(GetElementStatusActionTest, NoElementSpecifiedFails) { + EXPECT_CALL( + callback_, + Run(Pointee(Property(&ProcessedActionProto::status, INVALID_ACTION)))); + Run(); +} + TEST_F(GetElementStatusActionTest, EmptySelectorFails) { + proto_.mutable_selector(); EXPECT_CALL( callback_, Run(Pointee(Property(&ProcessedActionProto::status, INVALID_SELECTOR)))); Run(); } -TEST_F(GetElementStatusActionTest, ActionFailsForNonExistentElement) { +TEST_F(GetElementStatusActionTest, ActionFailsForSelectorNotFound) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -110,9 +119,43 @@ Run(); } -TEST_F(GetElementStatusActionTest, ActionReportsAllVariations) { +TEST_F(GetElementStatusActionTest, ActionFailsForClientIdNotFound) { + proto_.mutable_client_id()->set_identifier("element"); + proto_.mutable_expected_value_match() + ->mutable_text_match() + ->mutable_text_value() + ->set_text(kValue); + + EXPECT_CALL(callback_, Run(Pointee(Property(&ProcessedActionProto::status, + CLIENT_ID_RESOLUTION_FAILED)))); + Run(); +} + +TEST_F(GetElementStatusActionTest, ActionReportsAllVariationsForSelector) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; + proto_.mutable_expected_value_match() + ->mutable_text_match() + ->mutable_text_value() + ->set_text(kValue); + + EXPECT_CALL( + callback_, + Run(Pointee(AllOf( + Property(&ProcessedActionProto::status, ACTION_APPLIED), + Property( + &ProcessedActionProto::get_element_status_result, + AllOf(Property(&GetElementStatusProto::Result::not_empty, true), + Property(&GetElementStatusProto::Result::reports, + SizeIs(4)))))))); + Run(); +} + +TEST_F(GetElementStatusActionTest, ActionReportsAllVariationsForClientId) { + ElementFinder::Result element; + mock_action_delegate_.GetElementStore()->AddElement("element", + element.dom_object); + proto_.mutable_client_id()->set_identifier("element"); proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -132,7 +175,7 @@ TEST_F(GetElementStatusActionTest, ActionFailsForMismatchIfRequired) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -157,7 +200,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForMismatchIfAllowed) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -181,7 +224,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForNoExpectation) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -200,7 +243,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForCaseSensitiveFullMatch) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -237,7 +280,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForCaseSensitiveContains) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -267,7 +310,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForCaseSensitiveStartsWith) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -297,7 +340,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForCaseSensitiveEndsWith) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -327,7 +370,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForCaseInsensitiveFullMatch) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -357,7 +400,7 @@ TEST_F(GetElementStatusActionTest, ActionSucceedsForFullMatchWithoutSpaces) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -395,7 +438,7 @@ .WillByDefault(RunOnceCallback<2>(OkClientStatus(), std::string())); Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -422,7 +465,7 @@ TEST_F(GetElementStatusActionTest, InnerTextLookupSuccess) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -455,7 +498,7 @@ TEST_F(GetElementStatusActionTest, MatchingValueWithRegexpCaseSensitive) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match()->mutable_text_match()->set_re2("Valu."); proto_.mutable_expected_value_match() ->mutable_text_match() @@ -482,7 +525,7 @@ TEST_F(GetElementStatusActionTest, MatchingValueWithRegexpCaseInsensitive) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match()->mutable_text_match()->set_re2("vAlU."); proto_.mutable_expected_value_match() ->mutable_text_match() @@ -509,7 +552,7 @@ TEST_F(GetElementStatusActionTest, ActionFailsForRegexMismatchIfRequired) { Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match()->mutable_text_match()->set_re2("none"); proto_.mutable_expected_value_match() ->mutable_text_match() @@ -534,7 +577,7 @@ .WillByDefault(RunOnceCallback<2>(OkClientStatus(), std::string())); Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match()->mutable_text_match()->set_re2("^$"); proto_.mutable_expected_value_match() ->mutable_text_match() @@ -561,7 +604,7 @@ .WillByDefault(RunOnceCallback<2>(OkClientStatus(), " ")); Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -612,7 +655,7 @@ static_cast<int>(autofill::ServerFieldType::NAME_LAST)); Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; *proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -648,7 +691,7 @@ password_manager_value.set_credential_type(PasswordManagerValue::PASSWORD); Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; *proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value() @@ -688,7 +731,7 @@ user_data_.additional_values_["__password__"] = value_proto; Selector selector({"#element"}); - *proto_.mutable_element() = selector.proto; + *proto_.mutable_selector() = selector.proto; proto_.mutable_expected_value_match() ->mutable_text_match() ->mutable_text_value()
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto index bd03785..2bd302c 100644 --- a/components/autofill_assistant/browser/service.proto +++ b/components/autofill_assistant/browser/service.proto
@@ -2865,7 +2865,10 @@ // Action to get an element's status. message GetElementStatusProto { - optional SelectorProto element = 1; + oneof element { + SelectorProto selector = 1; + ClientIdProto client_id = 5; + } optional ValueMatch expected_value_match = 2; optional ValueSource value_source = 4;
diff --git a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java index cf7e26f..8951cb66 100644 --- a/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java +++ b/components/browser_ui/share/android/java/src/org/chromium/components/browser_ui/share/ShareParams.java
@@ -50,6 +50,12 @@ /** The boolean result of link to text generation. */ private final Boolean mLinkToTextSuccessful; + /** The sharing hub preview text. */ + private final String mPreviewText; + + /** A format to be used when sharing |mPreviewText|. */ + private final String mPreviewTextFormat; + /** * Optional callback to be called when user makes a choice. Will not be called if receiving a * response when the user makes a choice is not supported (on older Android versions). @@ -59,7 +65,8 @@ private ShareParams(WindowAndroid window, String title, String text, String textFormat, String url, @Nullable String fileContentType, @Nullable ArrayList<Uri> fileUris, @Nullable Uri offlineUri, @Nullable Uri screenshotUri, - @Nullable TargetChosenCallback callback, @Nullable Boolean linkToTextSuccessful) { + @Nullable TargetChosenCallback callback, @Nullable Boolean linkToTextSuccessful, + @Nullable String previewText, String previewTextFormat) { mWindow = window; mTitle = title; mText = text; @@ -71,6 +78,8 @@ mScreenshotUri = screenshotUri; mCallback = callback; mLinkToTextSuccessful = linkToTextSuccessful; + mPreviewText = previewText; + mPreviewTextFormat = previewTextFormat; } /** @@ -180,6 +189,15 @@ return mLinkToTextSuccessful; } + /** + * @return The text to be shared in the format it is meant to be shared. + */ + @Nullable + public String getPreviewText() { + return mPreviewTextFormat == null ? mPreviewText + : String.format(mPreviewTextFormat, mPreviewText); + } + /** The builder for {@link ShareParams} objects. */ public static class Builder { private WindowAndroid mWindow; @@ -193,6 +211,8 @@ private Uri mScreenshotUri; private TargetChosenCallback mCallback; private Boolean mLinkToTextSuccessful; + private String mPreviewText; + private String mPreviewTextFormat; public Builder(@NonNull WindowAndroid window, @NonNull String title, @NonNull String url) { mWindow = window; @@ -217,6 +237,15 @@ } /** + * Sets the sharing hub preview text. + */ + public Builder setPreviewText(@NonNull String previewText, @NonNull String format) { + mPreviewTextFormat = format; + mPreviewText = previewText; + return this; + } + + /** * Sets the MIME type of the arbitrary files to be shared. */ public Builder setFileContentType(@NonNull String fileContentType) { @@ -270,7 +299,8 @@ mUrl = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(mUrl); } return new ShareParams(mWindow, mTitle, mText, mTextFormat, mUrl, mFileContentType, - mFileUris, mOfflineUri, mScreenshotUri, mCallback, mLinkToTextSuccessful); + mFileUris, mOfflineUri, mScreenshotUri, mCallback, mLinkToTextSuccessful, + mPreviewText, mPreviewTextFormat); } }
diff --git a/components/cloud_devices/common/cloud_device_description.cc b/components/cloud_devices/common/cloud_device_description.cc index f37889b..1589ae8 100644 --- a/components/cloud_devices/common/cloud_device_description.cc +++ b/components/cloud_devices/common/cloud_device_description.cc
@@ -40,8 +40,8 @@ if (!ticket.is_dict()) return false; - const base::Value* version = ticket.FindKey(json::kVersion); - return version && version->GetString() == json::kVersion10; + const std::string* version = ticket.FindStringKey(json::kVersion); + return version && *version == json::kVersion10; } std::string CloudDeviceDescription::ToString() const {
diff --git a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java index c3d49393..33b52d51 100644 --- a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java +++ b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/FeatureConstants.java
@@ -48,7 +48,7 @@ FeatureConstants.TAB_SWITCHER_BUTTON_FEATURE, FeatureConstants.FEED_CARD_MENU_FEATURE, FeatureConstants.IDENTITY_DISC_FEATURE, FeatureConstants.TAB_GROUPS_DRAG_AND_DROP_FEATURE, FeatureConstants.QUIET_NOTIFICATION_PROMPTS_FEATURE, - FeatureConstants.FEED_HEADER_MENU_FEATURE, + FeatureConstants.FEED_HEADER_MENU_FEATURE, FeatureConstants.FEED_SWIPE_REFRESH_FEATURE, FeatureConstants.CHROME_REENGAGEMENT_NOTIFICATION_1_FEATURE, FeatureConstants.CHROME_REENGAGEMENT_NOTIFICATION_2_FEATURE, FeatureConstants.CHROME_REENGAGEMENT_NOTIFICATION_3_FEATURE, @@ -215,6 +215,11 @@ String FEED_CARD_MENU_FEATURE = "IPH_FeedCardMenu"; /** + * An IPH feature to prompt users to pull-to-refresh feed. + */ + String FEED_SWIPE_REFRESH_FEATURE = "IPH_FeedSwipeRefresh"; + + /** * An IPH feature prompting user to tap on identity disc to navigate to "Sync and Google * services" preferences. */
diff --git a/components/feature_engagement/public/feature_configurations.cc b/components/feature_engagement/public/feature_configurations.cc index 6d32d70..487a454 100644 --- a/components/feature_engagement/public/feature_configurations.cc +++ b/components/feature_engagement/public/feature_configurations.cc
@@ -189,6 +189,22 @@ k10YearsInDays, k10YearsInDays); return config; } + if (kIPHFeedSwipeRefresh.name == feature->name) { + // A config that allows the feed swipe refresh message IPH to be shown: + // * Once per 15 days + // * Up to 2 times but only if unused in the last 15 days. + absl::optional<FeatureConfig> config = FeatureConfig(); + config->valid = true; + config->availability = Comparator(ANY, 0); + config->session_rate = Comparator(EQUAL, 0); + config->trigger = EventConfig("feed_swipe_refresh_iph_trigger", + Comparator(LESS_THAN, 2), 90, 90); + config->used = + EventConfig("feed_swipe_refresh_shown", Comparator(EQUAL, 0), 90, 90); + config->event_configs.insert(EventConfig("feed_swipe_refresh_iph_trigger", + Comparator(EQUAL, 0), 15, 90)); + return config; + } if (kIPHTabSwitcherButtonFeature.name == feature->name) { absl::optional<FeatureConfig> config = FeatureConfig(); config->valid = true;
diff --git a/components/feature_engagement/public/feature_constants.cc b/components/feature_engagement/public/feature_constants.cc index 154f20a..e2fe408a 100644 --- a/components/feature_engagement/public/feature_constants.cc +++ b/components/feature_engagement/public/feature_constants.cc
@@ -162,6 +162,8 @@ "IPH_ExploreSitesTile", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHFeedHeaderMenuFeature{"IPH_FeedHeaderMenu", base::FEATURE_ENABLED_BY_DEFAULT}; +const base::Feature kIPHFeedSwipeRefresh{"IPH_FeedSwipeRefresh", + base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kIPHChromeReengagementNotification1Feature{ "IPH_ChromeReengagementNotification1", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kIPHChromeReengagementNotification2Feature{
diff --git a/components/feature_engagement/public/feature_constants.h b/components/feature_engagement/public/feature_constants.h index 5ed55765..b268f6be 100644 --- a/components/feature_engagement/public/feature_constants.h +++ b/components/feature_engagement/public/feature_constants.h
@@ -100,6 +100,7 @@ extern const base::Feature kIPHVideoTutorialNTPSummaryFeature; extern const base::Feature kIPHExploreSitesTileFeature; extern const base::Feature kIPHFeedHeaderMenuFeature; +extern const base::Feature kIPHFeedSwipeRefresh; extern const base::Feature kIPHChromeReengagementNotification1Feature; extern const base::Feature kIPHChromeReengagementNotification2Feature; extern const base::Feature kIPHChromeReengagementNotification3Feature;
diff --git a/components/feature_engagement/public/feature_list.cc b/components/feature_engagement/public/feature_list.cc index 56363bb..5952eb5 100644 --- a/components/feature_engagement/public/feature_list.cc +++ b/components/feature_engagement/public/feature_list.cc
@@ -76,6 +76,7 @@ &kIPHVideoTutorialNTPSummaryFeature, &kIPHExploreSitesTileFeature, &kIPHFeedHeaderMenuFeature, + &kIPHFeedSwipeRefresh, &kIPHShareScreenshotFeature, &kIPHWebFeedFollowFeature, &kIPHWebFeedPostFollowDialogFeature,
diff --git a/components/feature_engagement/public/feature_list.h b/components/feature_engagement/public/feature_list.h index 424a2c49..8cedf2f43 100644 --- a/components/feature_engagement/public/feature_list.h +++ b/components/feature_engagement/public/feature_list.h
@@ -149,6 +149,7 @@ "IPH_VideoTutorial_NTP_Summary"); DEFINE_VARIATION_PARAM(kIPHExploreSitesTileFeature, "IPH_ExploreSitesTile"); DEFINE_VARIATION_PARAM(kIPHFeedHeaderMenuFeature, "IPH_FeedHeaderMenu"); +DEFINE_VARIATION_PARAM(kIPHFeedSwipeRefresh, "IPH_FeedSwipeRefresh"); DEFINE_VARIATION_PARAM(kIPHShareScreenshotFeature, "IPH_ShareScreenshot"); DEFINE_VARIATION_PARAM(kIPHWebFeedFollowFeature, "IPH_WebFeedFollow"); DEFINE_VARIATION_PARAM(kIPHWebFeedPostFollowDialogFeature,
diff --git a/components/feed/core/common/pref_names.cc b/components/feed/core/common/pref_names.cc index c799625..087fe41 100644 --- a/components/feed/core/common/pref_names.cc +++ b/components/feed/core/common/pref_names.cc
@@ -13,8 +13,6 @@ namespace prefs { -const char kLastFetchAttemptTime[] = "feed.last_fetch_attempt"; - const char kHostOverrideHost[] = "feed.host_override.host"; const char kHostOverrideBlessNonce[] = "feed.host_override.bless_nonce"; @@ -92,7 +90,6 @@ void RegisterProfilePrefs(PrefRegistrySimple* registry) { registry->RegisterStringPref(feed::prefs::kHostOverrideHost, ""); registry->RegisterStringPref(feed::prefs::kHostOverrideBlessNonce, ""); - registry->RegisterTimePref(prefs::kLastFetchAttemptTime, base::Time()); registry->RegisterListPref(feed::prefs::kThrottlerRequestCountListPrefName); registry->RegisterTimePref(feed::prefs::kThrottlerLastRequestTime, base::Time());
diff --git a/components/feed/core/common/pref_names.h b/components/feed/core/common/pref_names.h index 8a347c8..ca780dd 100644 --- a/components/feed/core/common/pref_names.h +++ b/components/feed/core/common/pref_names.h
@@ -14,9 +14,6 @@ namespace prefs { -// The pref name for the last time when a background fetch was attempted. -extern const char kLastFetchAttemptTime[]; - // The pref name for the feed host override. extern const char kHostOverrideHost[]; // The pref name for the feed host override auth token.
diff --git a/components/feed/core/proto/v2/store.proto b/components/feed/core/proto/v2/store.proto index d93e960..ac8eee3 100644 --- a/components/feed/core/proto/v2/store.proto +++ b/components/feed/core/proto/v2/store.proto
@@ -91,6 +91,8 @@ int64 invalid_age_ms = 2; } ContentLifetime content_lifetime = 5; + // The unix timestamp in milliseconds that the stream was fetched last time. + int64 last_fetch_time_millis = 6; reserved 2; }
diff --git a/components/feed/core/v2/api_test/feed_api_stream_unittest.cc b/components/feed/core/v2/api_test/feed_api_stream_unittest.cc index ec647dd..7486946 100644 --- a/components/feed/core/v2/api_test/feed_api_stream_unittest.cc +++ b/components/feed/core/v2/api_test/feed_api_stream_unittest.cc
@@ -2040,7 +2040,7 @@ // Initialize a session id. feedstore::Metadata metadata = stream_->GetMetadata(); - metadata = *feedstore::MaybeUpdateSessionId(metadata, "session-id"); + feedstore::MaybeUpdateSessionId(metadata, "session-id"); stream_->SetMetadata(metadata); // Trigger a ClearAll.
diff --git a/components/feed/core/v2/feed_stream.cc b/components/feed/core/v2/feed_stream.cc index 801123e0..07db6cf 100644 --- a/components/feed/core/v2/feed_stream.cc +++ b/components/feed/core/v2/feed_stream.cc
@@ -693,9 +693,9 @@ forced_stream_update_for_debugging_ = stream_update; } -base::Time FeedStream::GetLastFetchTime() { +base::Time FeedStream::GetLastFetchTime(const StreamType& stream_type) { const base::Time fetch_time = - profile_prefs_->GetTime(feed::prefs::kLastFetchAttemptTime); + feedstore::GetLastFetchTime(metadata_, stream_type); // Ignore impossible time values. if (fetch_time > base::Time::Now()) return base::Time(); @@ -1008,7 +1008,8 @@ } void FeedStream::ClearAll() { - metrics_reporter_->OnClearAll(base::Time::Now() - GetLastFetchTime()); + metrics_reporter_->OnClearAll(base::Time::Now() - + GetLastFetchTime(kForYouStream)); clear_all_in_progress_ = true; task_queue_.AddTask(std::make_unique<ClearAllTask>(this)); }
diff --git a/components/feed/core/v2/feed_stream.h b/components/feed/core/v2/feed_stream.h index f09c8be..37bc9af 100644 --- a/components/feed/core/v2/feed_stream.h +++ b/components/feed/core/v2/feed_stream.h
@@ -151,6 +151,7 @@ void ReportStreamScrollStart() override; void ReportOtherUserAction(const StreamType& stream_type, FeedUserActionType action_type) override; + base::Time GetLastFetchTime(const StreamType& stream_type) override; // offline_pages::TaskQueue::Delegate. void OnTaskQueueIsIdle() override; @@ -200,9 +201,6 @@ void PrefetchImage(const GURL& url); - // Returns the time of the last content fetch. - base::Time GetLastFetchTime(); - bool IsSignedIn() const { return !delegate_->GetSyncSignedInGaia().empty(); } std::string GetSyncSignedInGaia() const { return delegate_->GetSyncSignedInGaia();
diff --git a/components/feed/core/v2/feedstore_util.cc b/components/feed/core/v2/feedstore_util.cc index a1106a2..3c0c41f 100644 --- a/components/feed/core/v2/feedstore_util.cc +++ b/components/feed/core/v2/feedstore_util.cc
@@ -69,19 +69,15 @@ *stream_metadata.mutable_content_lifetime() = std::move(content_lifetime); } -absl::optional<Metadata> MaybeUpdateSessionId( - const Metadata& metadata, - absl::optional<std::string> token) { +void MaybeUpdateSessionId(Metadata& metadata, + absl::optional<std::string> token) { if (token && metadata.session_id().token() != *token) { base::Time expiry_time = token->empty() ? base::Time() : base::Time::Now() + feed::GetFeedConfig().session_id_max_age; - auto new_metadata = metadata; - SetSessionId(new_metadata, *token, expiry_time); - return new_metadata; + SetSessionId(metadata, *token, expiry_time); } - return absl::nullopt; } absl::optional<Metadata> MaybeUpdateConsistencyToken( @@ -142,6 +138,21 @@ return sm ? sm->is_known_stale() : false; } +base::Time GetLastFetchTime(const Metadata& metadata, + const feed::StreamType& stream_type) { + const Metadata::StreamMetadata* sm = + FindMetadataForStream(metadata, stream_type); + return sm ? FromTimestampMillis(sm->last_fetch_time_millis()) : base::Time(); +} + +void SetLastFetchTime(Metadata& metadata, + const StreamType& stream_type, + const base::Time& fetch_time) { + Metadata::StreamMetadata& stream_metadata = + MetadataForStream(metadata, stream_type); + stream_metadata.set_last_fetch_time_millis(ToTimestampMillis(fetch_time)); +} + feedstore::Metadata MakeMetadata(const std::string& gaia) { feedstore::Metadata md; md.set_stream_schema_version(feed::FeedStore::kCurrentStreamSchemaVersion);
diff --git a/components/feed/core/v2/feedstore_util.h b/components/feed/core/v2/feedstore_util.h index 6e7207f..57f3159e 100644 --- a/components/feed/core/v2/feedstore_util.h +++ b/components/feed/core/v2/feedstore_util.h
@@ -39,6 +39,11 @@ const feed::StreamType& stream_type); bool IsKnownStale(const Metadata& metadata, const feed::StreamType& stream_type); +base::Time GetLastFetchTime(const Metadata& metadata, + const feed::StreamType& stream_type); +void SetLastFetchTime(Metadata& metadata, + const feed::StreamType& stream_type, + const base::Time& fetch_time); feedstore::Metadata MakeMetadata(const std::string& gaia); // Mutations of Metadata. Metadata will need stored again after being changed, @@ -50,9 +55,8 @@ feedstore::Metadata& metadata, const feed::StreamType& stream_type, feedstore::Metadata::StreamMetadata::ContentLifetime content_lifetime); -absl::optional<Metadata> MaybeUpdateSessionId( - const feedstore::Metadata& metadata, - absl::optional<std::string> token); +void MaybeUpdateSessionId(feedstore::Metadata& metadata, + absl::optional<std::string> token); absl::optional<Metadata> MaybeUpdateConsistencyToken( const feedstore::Metadata& metadata, const feedwire::ConsistencyToken& token);
diff --git a/components/feed/core/v2/feedstore_util_unittest.cc b/components/feed/core/v2/feedstore_util_unittest.cc index 24c8917e..219a768 100644 --- a/components/feed/core/v2/feedstore_util_unittest.cc +++ b/components/feed/core/v2/feedstore_util_unittest.cc
@@ -40,23 +40,24 @@ SetSessionId(metadata, Token1(), kExpiryTime1); // Updating the token with nullopt is a NOP. - EXPECT_FALSE(MaybeUpdateSessionId(metadata, absl::nullopt)); + MaybeUpdateSessionId(metadata, absl::nullopt); + EXPECT_EQ(Token1(), metadata.session_id().token()); // Updating the token with the same value is a NOP. - EXPECT_FALSE(MaybeUpdateSessionId(metadata, Token1())); + MaybeUpdateSessionId(metadata, Token1()); + EXPECT_EQ(Token1(), metadata.session_id().token()); // Updating the token with a different value resets the token and assigns a // new expiry time. - absl::optional<Metadata> metadata2 = MaybeUpdateSessionId(metadata, Token2()); - ASSERT_TRUE(metadata2); - EXPECT_EQ(Token2(), metadata2->session_id().token()); + MaybeUpdateSessionId(metadata, Token2()); + EXPECT_EQ(Token2(), metadata.session_id().token()); EXPECT_TIME_EQ(base::Time::Now() + feed::GetFeedConfig().session_id_max_age, - GetSessionIdExpiryTime(*metadata2)); + GetSessionIdExpiryTime(metadata)); // Updating the token with the empty string clears its value. - absl::optional<Metadata> metadata3 = MaybeUpdateSessionId(*metadata2, ""); - EXPECT_TRUE(metadata3->session_id().token().empty()); - EXPECT_TRUE(GetSessionIdExpiryTime(*metadata3).is_null()); + MaybeUpdateSessionId(metadata, ""); + EXPECT_TRUE(metadata.session_id().token().empty()); + EXPECT_TRUE(GetSessionIdExpiryTime(metadata).is_null()); } TEST(feedstore_util_test, GetNextActionId) {
diff --git a/components/feed/core/v2/public/feed_api.h b/components/feed/core/v2/public/feed_api.h index 26e73db..a7becb0c 100644 --- a/components/feed/core/v2/public/feed_api.h +++ b/components/feed/core/v2/public/feed_api.h
@@ -182,6 +182,8 @@ // Forces to render a StreamUpdate on all subsequent surface attaches. virtual void SetForcedStreamUpdateForDebugging( const feedui::StreamUpdate& stream_update) = 0; + // Returns the time of the last successful content fetch. + virtual base::Time GetLastFetchTime(const StreamType& stream_type) = 0; }; } // namespace feed
diff --git a/components/feed/core/v2/public/test/stub_feed_api.cc b/components/feed/core/v2/public/test/stub_feed_api.cc index 9cc3616c..a54ed15 100644 --- a/components/feed/core/v2/public/test/stub_feed_api.cc +++ b/components/feed/core/v2/public/test/stub_feed_api.cc
@@ -58,4 +58,8 @@ return {}; } +base::Time StubFeedApi::GetLastFetchTime(const StreamType& stream_type) { + return base::Time(); +} + } // namespace feed
diff --git a/components/feed/core/v2/public/test/stub_feed_api.h b/components/feed/core/v2/public/test/stub_feed_api.h index 24663a8..f03c62ce 100644 --- a/components/feed/core/v2/public/test/stub_feed_api.h +++ b/components/feed/core/v2/public/test/stub_feed_api.h
@@ -88,6 +88,7 @@ std::string DumpStateForDebugging() override; void SetForcedStreamUpdateForDebugging( const feedui::StreamUpdate& stream_update) override {} + base::Time GetLastFetchTime(const StreamType& stream_type) override; private: StubWebFeedSubscriptions web_feed_subscriptions_;
diff --git a/components/feed/core/v2/tasks/load_more_task.cc b/components/feed/core/v2/tasks/load_more_task.cc index e34d552..b13b998 100644 --- a/components/feed/core/v2/tasks/load_more_task.cc +++ b/components/feed/core/v2/tasks/load_more_task.cc
@@ -136,12 +136,13 @@ result_.loaded_new_content_from_network = !translated_response.model_update_request->stream_structures.empty(); - absl::optional<feedstore::Metadata> updated_metadata = - feedstore::MaybeUpdateSessionId(stream_.GetMetadata(), - translated_response.session_id); - if (updated_metadata) { - stream_.SetMetadata(std::move(*updated_metadata)); + auto updated_metadata = stream_.GetMetadata(); + SetLastFetchTime(updated_metadata, stream_type_, base::Time::Now()); + if (translated_response.session_id) { + feedstore::MaybeUpdateSessionId(updated_metadata, + translated_response.session_id); } + stream_.SetMetadata(std::move(updated_metadata)); result_.model_update_request = std::move(translated_response.model_update_request);
diff --git a/components/feed/core/v2/tasks/load_stream_task.cc b/components/feed/core/v2/tasks/load_stream_task.cc index e2c37df..4a0025ba 100644 --- a/components/feed/core/v2/tasks/load_stream_task.cc +++ b/components/feed/core/v2/tasks/load_stream_task.cc
@@ -366,19 +366,14 @@ MetricsReporter::NoticeCardFulfilled(*fetched_content_has_notice_card_); - absl::optional<feedstore::Metadata> updated_metadata = - feedstore::MaybeUpdateSessionId(stream_.GetMetadata(), - response_data.session_id); + auto updated_metadata = stream_.GetMetadata(); + SetLastFetchTime(updated_metadata, options_.stream_type, base::Time::Now()); + feedstore::MaybeUpdateSessionId(updated_metadata, response_data.session_id); if (response_data.content_lifetime) { - if (!updated_metadata) { - updated_metadata = stream_.GetMetadata(); - } - feedstore::SetContentLifetime(*updated_metadata, options_.stream_type, + feedstore::SetContentLifetime(updated_metadata, options_.stream_type, *response_data.content_lifetime); } - if (updated_metadata) { - stream_.SetMetadata(std::move(*updated_metadata)); - } + stream_.SetMetadata(std::move(updated_metadata)); if (response_data.experiments) experiments_ = *response_data.experiments;
diff --git a/components/feedback/feedback_common.cc b/components/feedback/feedback_common.cc index f9b4902..baf1cd25 100644 --- a/components/feedback/feedback_common.cc +++ b/components/feedback/feedback_common.cc
@@ -180,7 +180,14 @@ feedback_data->set_bucket(category_tag()); } -FeedbackCommon::~FeedbackCommon() {} +// static +bool FeedbackCommon::IncludeInSystemLogs(const std::string& key, + bool is_google_email) { + return is_google_email || + key != feedback::FeedbackReport::kAllCrashReportIdsKey; +} + +FeedbackCommon::~FeedbackCommon() = default; void FeedbackCommon::CompressFile(const base::FilePath& filename, const std::string& zipname, @@ -216,19 +223,17 @@ AddAttachment(feedback_data, file->name.c_str(), file->data); } + const bool is_google_email = gaia::IsGoogleInternalAccountEmail(user_email()); for (const auto& iter : logs_) { if (BelowCompressionThreshold(iter.second)) { // We only send the list of all the crash report IDs if the user has a // @google.com email. We do this also in feedback_private_api, but not all // code paths go through that so we need to check again here. - if (iter.first == feedback::FeedbackReport::kAllCrashReportIdsKey && - !gaia::IsGoogleInternalAccountEmail(user_email())) { - continue; + if (FeedbackCommon::IncludeInSystemLogs(iter.first, is_google_email)) { + // Small enough logs should end up in the report data itself. However, + // they're still added as part of the system_logs.zip file. + AddFeedbackData(feedback_data, iter.first, iter.second); } - - // Small enough logs should end up in the report data itself. However, - // they're still added as part of the system_logs.zip file. - AddFeedbackData(feedback_data, iter.first, iter.second); } } }
diff --git a/components/feedback/feedback_common.h b/components/feedback/feedback_common.h index 5ebb098..ae6405130 100644 --- a/components/feedback/feedback_common.h +++ b/components/feedback/feedback_common.h
@@ -50,6 +50,10 @@ // CompressLogs() must have already been called. void PrepareReport(userfeedback::ExtensionSubmit* feedback_data) const; + // Return true if we want to include the feedback item with a key of |key| in + // the feedback report's system logs. + static bool IncludeInSystemLogs(const std::string& key, bool is_google_email); + // Getters const std::string& category_tag() const { return category_tag_; } const std::string& page_url() const { return page_url_; }
diff --git a/components/feedback/feedback_common_unittest.cc b/components/feedback/feedback_common_unittest.cc index d6e011b1..e00ebb060 100644 --- a/components/feedback/feedback_common_unittest.cc +++ b/components/feedback/feedback_common_unittest.cc
@@ -116,3 +116,15 @@ EXPECT_EQ(1, report_.web_data().product_specific_data_size()); } + +TEST_F(FeedbackCommonTest, IncludeInSystemLogs) { + bool google_email = true; + EXPECT_TRUE(FeedbackCommon::IncludeInSystemLogs(kOne, google_email)); + EXPECT_TRUE(FeedbackCommon::IncludeInSystemLogs( + feedback::FeedbackReport::kAllCrashReportIdsKey, google_email)); + + google_email = false; + EXPECT_TRUE(FeedbackCommon::IncludeInSystemLogs(kOne, google_email)); + EXPECT_FALSE(FeedbackCommon::IncludeInSystemLogs( + feedback::FeedbackReport::kAllCrashReportIdsKey, google_email)); +}
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc index 6d44e8d..96f5814 100644 --- a/components/history/core/browser/history_backend.cc +++ b/components/history/core/browser/history_backend.cc
@@ -1422,44 +1422,39 @@ // and even returns a similar structure. We should investigate combining the // two, while somehow still avoiding fetching unnecessary fields, such as // `VisitContextAnnotations`. Probably we need to expand `QueryOptions`. - VisitVector visit_rows; + VisitVector visits; // Ignore the return value, as we don't care if we have more visits. - db_->GetVisibleVisitsInRange(options, &visit_rows); - DCHECK_LE(static_cast<int>(visit_rows.size()), options.EffectiveMaxCount()); + db_->GetVisibleVisitsInRange(options, &visits); + DCHECK_LE(static_cast<int>(visits.size()), options.EffectiveMaxCount()); std::vector<AnnotatedVisit> annotated_visits; - for (const auto& visit_row : visit_rows) { + for (const auto& visit : visits) { // Add a result row for this visit, get the URL info from the DB. URLRow url_row; - if (!db_->GetURLRow(visit_row.url_id, &url_row)) { - DVLOG(0) << "Failed to get id " << visit_row.url_id - << " from history.urls."; + if (!db_->GetURLRow(visit.url_id, &url_row)) { + DVLOG(0) << "Failed to get id " << visit.url_id << " from history.urls."; continue; // DB out of sync and URL doesn't exist, try to recover. } VisitContextAnnotations context_annotations; - if (!db_->GetContextAnnotationsForVisit(visit_row.visit_id, + if (!db_->GetContextAnnotationsForVisit(visit.visit_id, &context_annotations)) { - // Redirects don't have context annotations. That's not an exceptional + // Redirects don't have context annotations. That's not an execeptional // case. We just skip these as normal. continue; } + VisitContentAnnotations content_annotations; + // The return value of GetContentAnnotationsForVisit() is not checked for // failures, because the feature flag may be legitimately switched off. // Moreover, some visits may legitimately not have any content annotations. // In those cases, `content_annotations` is left unchanged, and this is // the intended behavior. - VisitContentAnnotations content_annotations; - db_->GetContentAnnotationsForVisit(visit_row.visit_id, - &content_annotations); + db_->GetContentAnnotationsForVisit(visit.visit_id, &content_annotations); - VisitID referring_visit_of_redirect_chain_start = - GetRedirectChainStart(visit_row).referring_visit; - - annotated_visits.emplace_back(url_row, visit_row, context_annotations, - content_annotations, - referring_visit_of_redirect_chain_start); + annotated_visits.emplace_back(url_row, visit, context_annotations, + content_annotations); } return annotated_visits; @@ -1558,11 +1553,7 @@ if (db_->GetRowForVisit(annotated_visit_row.visit_id, &visit_row) && db_->GetURLRow(visit_row.url_id, &url_row)) { annotated_visits.push_back( - {url_row, - visit_row, - annotated_visit_row.context_annotations, - {}, - GetRedirectChainStart(visit_row).referring_visit}); + {url_row, visit_row, annotated_visit_row.context_annotations, {}}); } else { // Ignore corrupt data but do not crash, as user DBs can be in bad states. DVLOG(0) << "HistoryBackend: AnnotatedVisit found with missing associated" @@ -1573,24 +1564,6 @@ return annotated_visits; } -VisitRow HistoryBackend::GetRedirectChainStart(VisitRow visit) { - // Iterate up `visit.referring_visit` while `visit.transition` is a redirect. - if (db_) { - base::flat_set<VisitID> visit_set; - while (!(visit.transition & ui::PAGE_TRANSITION_CHAIN_START)) { - visit_set.insert(visit.visit_id); - // `GetRowForVisit()` should not return false if the DB is correct. - if (!db_->GetRowForVisit(visit.referring_visit, &visit)) - return {}; - if (visit_set.count(visit.visit_id)) { - NOTREACHED() << "Loop in visit redirect chain, giving up"; - break; - } - } - } - return visit; -} - // Observers ------------------------------------------------------------------- void HistoryBackend::AddObserver(HistoryBackendObserver* observer) {
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h index 144dfd3a0..41df980 100644 --- a/components/history/core/browser/history_backend.h +++ b/components/history/core/browser/history_backend.h
@@ -437,14 +437,6 @@ std::vector<Cluster> GetClusters(int max_results); - // Finds the 1st visit in the redirect chain containing `visit`. Similar to - // `GetRedirectsToSpecificVisit()`, except 1) only returns the 1st visit of - // the redirect chain instead of the entire chain, and 2) ignores referrals. - // May return an invalid `VisitRow` if there's something wrong with the DB. - // The caller is responsible for identifying, by looking at `visit_id`, and - // handling this case. - VisitRow GetRedirectChainStart(VisitRow visit); - // Observers ----------------------------------------------------------------- void AddObserver(HistoryBackendObserver* observer); @@ -633,10 +625,8 @@ void GetRedirectsFromSpecificVisit(VisitID cur_visit, RedirectList* redirects); - // Similar to the above function except returns a redirect-or-referral list - // ending at `cur_visit`. E.g. if visit A redirected to visit B, which - // referred to visit C, then the return list for visit E would include all 3 - // visits. + // Similar to the above function except returns a redirect list ending + // at `cur_visit`. void GetRedirectsToSpecificVisit(VisitID cur_visit, RedirectList* redirects); // Updates the visit_duration information in visits table.
diff --git a/components/history/core/browser/history_backend_unittest.cc b/components/history/core/browser/history_backend_unittest.cc index e728b00f..442c811 100644 --- a/components/history/core/browser/history_backend_unittest.cc +++ b/components/history/core/browser/history_backend_unittest.cc
@@ -518,16 +518,10 @@ // Returns true if `bitmap_data` is equal to `expected_data`. bool BitmapDataEqual(char expected_data, scoped_refptr<base::RefCountedMemory> bitmap_data) { - return bitmap_data.get() && bitmap_data->size() == 1u && + return bitmap_data.get() && + bitmap_data->size() == 1u && *bitmap_data->front() == expected_data; } - - // Helper to get all annotated visits. - std::vector<AnnotatedVisit> GetAnnotatedVisitRowsFromBackend() { - return backend_ - ->GetRecentClusterIdsAndAnnotatedVisits(base::Time::Min(), 100) - .annotated_visits; - } }; class InMemoryHistoryBackendTest : public HistoryBackendTestBase { @@ -3228,19 +3222,16 @@ EXPECT_EQ(annotated_visits[0].visit_row.visit_id, 3); EXPECT_EQ(annotated_visits[0].visit_row.url_id, 1); EXPECT_EQ(annotated_visits[0].context_annotations.omnibox_url_copied, false); - EXPECT_EQ(annotated_visits[0].referring_visit_of_redirect_chain_start, 0); EXPECT_EQ(annotated_visits[1].url_row.id(), 2); EXPECT_EQ(annotated_visits[1].url_row.url(), "http://2.com/"); EXPECT_EQ(annotated_visits[1].visit_row.visit_id, 2); EXPECT_EQ(annotated_visits[1].visit_row.url_id, 2); EXPECT_EQ(annotated_visits[1].context_annotations.omnibox_url_copied, true); - EXPECT_EQ(annotated_visits[1].referring_visit_of_redirect_chain_start, 0); EXPECT_EQ(annotated_visits[2].url_row.id(), 1); EXPECT_EQ(annotated_visits[2].url_row.url(), "http://1.com/"); EXPECT_EQ(annotated_visits[2].visit_row.visit_id, 1); EXPECT_EQ(annotated_visits[2].visit_row.url_id, 1); EXPECT_EQ(annotated_visits[2].context_annotations.omnibox_url_copied, true); - EXPECT_EQ(annotated_visits[2].referring_visit_of_redirect_chain_start, 0); delete_url(2); delete_visit(3); @@ -3377,79 +3368,4 @@ context_id, navigation_entry_id, url)); } -TEST_F(HistoryBackendTest, GetRedirectChainStart) { - auto last_visit_time = base::Time::Now(); - auto add_visit = [&](std::string url, VisitID referring_visit, - bool is_redirect) { - // Each it should have a unique `visit_time` to avoid deduping visits to - // the same URL. The exact times don't matter, but we use increasing - // values to making the test cases easy to reason about. - last_visit_time += base::TimeDelta::FromMilliseconds(1); - ui::PageTransition transition = - is_redirect ? ui::PageTransition::PAGE_TRANSITION_IS_REDIRECT_MASK - : ui::PageTransition::PAGE_TRANSITION_CHAIN_START; - auto ids = - backend_->AddPageVisit(GURL(url), last_visit_time, referring_visit, - transition, false, SOURCE_BROWSED, false, false); - backend_->AddContextAnnotationsForVisit(ids.second, {}); - }; - - // Navigate to 'google.com'. - add_visit("google.com", 0, false); - // It redirects to 'https://www.google.com'. - add_visit("https://www.google.com", 1, true); - // Perform a search. - add_visit("https://www.google.com/query=wiki", 2, false); - // Navigate to 'https://www.google.com' in a new tab. - add_visit("https://www.google.com", 0, false); - // Perform a search - add_visit("https://www.google.com/query=wiki2", 4, false); - // Follow a search result link. - add_visit("https://www.wiki2.org", 5, false); - // It redirects. - add_visit("https://www.wiki2.org/home", 6, true); - // Follow a search result in the first tab. - add_visit("https://www.wiki.org", 3, false); - - // The redirect/referral chain now look like this: - // 1 ->> 2 -> 3 -> 8 - // 4 -> 5 -> 6 ->> 7 - // where '->' represents a referral, and '->>' represents a redirect. - - struct Expectation { - VisitID referring_visit; - VisitID first_redirect; - VisitID referring_visit_of_redirect_chain_start; - }; - - std::vector<Expectation> expectations = { - {0, 1, 0}, {1, 1, 0}, {2, 3, 2}, {0, 4, 0}, - {4, 5, 4}, {5, 6, 5}, {6, 6, 5}, {3, 8, 3}, - }; - - auto annotated_visits = GetAnnotatedVisitRowsFromBackend(); - ASSERT_EQ(annotated_visits.size(), expectations.size()); - for (size_t i = 0; i < expectations.size(); ++i) { - VisitID visit_id = i + 1; - const auto& expectation = expectations[i]; - VisitRow visit; - backend_->db_->GetRowForVisit(visit_id, &visit); - EXPECT_EQ(visit.referring_visit, expectation.referring_visit) - << "visit id: " << visit_id; - - // Verify `GetRedirectChainStart()`. - auto first_redirect = backend_->GetRedirectChainStart(visit); - EXPECT_EQ(first_redirect.visit_id, expectation.first_redirect) - << "visit id: " << visit_id; - - // Verify `GetAnnotatedVisits()`. - const auto& annotated_visit = annotated_visits[i]; - EXPECT_EQ(annotated_visit.visit_row.visit_id, visit_id) - << "visit id: " << visit_id; - EXPECT_EQ(annotated_visit.referring_visit_of_redirect_chain_start, - expectation.referring_visit_of_redirect_chain_start) - << "visit id: " << visit_id; - } -} - } // namespace history
diff --git a/components/history/core/browser/history_types.cc b/components/history/core/browser/history_types.cc index de04010..b5a7a76 100644 --- a/components/history/core/browser/history_types.cc +++ b/components/history/core/browser/history_types.cc
@@ -374,14 +374,11 @@ AnnotatedVisit::AnnotatedVisit(URLRow url_row, VisitRow visit_row, VisitContextAnnotations context_annotations, - VisitContentAnnotations content_annotations, - VisitID referring_visit_of_redirect_chain_start) + VisitContentAnnotations content_annotations) : url_row(url_row), visit_row(visit_row), context_annotations(context_annotations), - content_annotations(content_annotations), - referring_visit_of_redirect_chain_start( - referring_visit_of_redirect_chain_start) {} + content_annotations(content_annotations) {} AnnotatedVisit::AnnotatedVisit(const AnnotatedVisit&) = default; AnnotatedVisit& AnnotatedVisit::operator=(const AnnotatedVisit&) = default; AnnotatedVisit::~AnnotatedVisit() = default;
diff --git a/components/history/core/browser/history_types.h b/components/history/core/browser/history_types.h index 3f888611..e55ac2bf 100644 --- a/components/history/core/browser/history_types.h +++ b/components/history/core/browser/history_types.h
@@ -715,8 +715,7 @@ AnnotatedVisit(URLRow url_row, VisitRow visit_row, VisitContextAnnotations context_annotations, - VisitContentAnnotations content_annotations, - VisitID referring_visit_of_redirect_chain_start); + VisitContentAnnotations content_annotations); AnnotatedVisit(const AnnotatedVisit&); AnnotatedVisit& operator=(const AnnotatedVisit&); ~AnnotatedVisit(); @@ -725,13 +724,6 @@ VisitRow visit_row; VisitContextAnnotations context_annotations; VisitContentAnnotations content_annotations; - // The `VisitRow::referring_visit` of the 1st visit in the redirect chain that - // includes this visit. If this visit is not part of a redirect chain or is - // the 1st visit in a redirect chain, then it will be - // `visit_row.referring_visit`. Using the collapsed referring visit is - // important because redirect visits are omitted from AnnotatedVisits, so - // the uncollapsed referring visit could refer to an omitted visit. - VisitID referring_visit_of_redirect_chain_start; }; // A minimal representation of `AnnotationVisit` used when retrieving them from
diff --git a/components/history/core/browser/visit_database.h b/components/history/core/browser/visit_database.h index 336dbcb..ca87e20e 100644 --- a/components/history/core/browser/visit_database.h +++ b/components/history/core/browser/visit_database.h
@@ -157,8 +157,7 @@ GURL* to_url); // Similar to the above function except finds a redirect going to a given - // `to_visit`; or, if there is no such redirect, finds the referral going to - // the given `to_visit`. + // `to_visit`. bool GetRedirectToVisit(VisitID to_visit, VisitID* from_visit, GURL* from_url);
diff --git a/components/history_clusters/core/history_clusters_service.cc b/components/history_clusters/core/history_clusters_service.cc index b619686..cdba4d6 100644 --- a/components/history_clusters/core/history_clusters_service.cc +++ b/components/history_clusters/core/history_clusters_service.cc
@@ -13,9 +13,7 @@ #include "base/i18n/case_conversion.h" #include "base/ranges/algorithm.h" #include "base/strings/utf_string_conversions.h" -#include "components/history/core/browser/history_backend.h" -#include "components/history/core/browser/history_database.h" -#include "components/history/core/browser/history_db_task.h" +#include "components/history/core/browser/history_types.h" #include "components/history_clusters/core/history_clusters_buildflags.h" #include "components/history_clusters/core/memories_features.h" #include "components/history_clusters/core/remote_clustering_backend.h" @@ -30,68 +28,6 @@ namespace { -using AnnotatedVisitCallback = - base::OnceCallback<void(const std::vector<history::AnnotatedVisit>&)>; - -// Gets `AnnotatedVisit`s to cluster including both persisted visits from the -// history db and incomplete visits. -// - We don't want incomplete visits to be mysteriously missing from the -// Clusters UI. They haven't recorded the page end metrics yet, but that's fine. -// - The history backend will return persisted visits with already computed -// `referring_visit_of_redirect_chain_start`, while incomplete visits will have -// to independently invoke `GetRedirectChainStart()` to get it. -class GetAnnotatedVisitsToCluster : public history::HistoryDBTask { - public: - GetAnnotatedVisitsToCluster(history::QueryOptions options, - std::vector<IncompleteVisitContextAnnotations> - incomplete_visit_context_annotations, - AnnotatedVisitCallback callback) - : options_(options), - incomplete_visit_context_annotations_( - incomplete_visit_context_annotations), - callback_(std::move(callback)) {} - - bool RunOnDBThread(history::HistoryBackend* backend, - history::HistoryDatabase* db) override { - // Get persisted visits, which will have - // `referring_visit_of_redirect_chain_start` computed. - annotated_visits_ = backend->GetAnnotatedVisits(options_); - - // Compute `referring_visit_of_redirect_chain_start` for each incomplete - // visit. - base::ranges::transform( - incomplete_visit_context_annotations_, - std::back_inserter(annotated_visits_), - [&](const auto& incomplete_visit_context_annotations) { - const auto& first_redirect = backend->GetRedirectChainStart( - incomplete_visit_context_annotations.visit_row); - return history::AnnotatedVisit{ - incomplete_visit_context_annotations.url_row, - incomplete_visit_context_annotations.visit_row, - incomplete_visit_context_annotations.context_annotations, - // Content annotations not provided, but it's not provided for - // complete visits either. - {}, - first_redirect.referring_visit, - }; - }); - return true; - } - - void DoneRunOnMainThread() override { - std::move(callback_).Run(annotated_visits_); - } - - private: - history::QueryOptions options_; - // Incomplete visits not yet persisted passed in in the constructor. - std::vector<IncompleteVisitContextAnnotations> - incomplete_visit_context_annotations_; - // Persisted visits retrieved from the history DB thread. - std::vector<history::AnnotatedVisit> annotated_visits_; - AnnotatedVisitCallback callback_; -}; - // Filter `clusters` matching `query`. There are additional filters (e.g. // `max_time`) used when requesting `QueryClusters()`, but this function is only // responsible for matching `query`. @@ -280,13 +216,6 @@ const size_t max_count, QueryClustersCallback callback, base::CancelableTaskTracker* task_tracker) { - // `QueryClusters` has 5 steps: - // 1. Filters incomplete visits. - // 2. Prepend persisted visits from the history DB. - // 3. Ask `backend_` to convert the visits to clusters. - // 4. Filter clusters matching the query params. - // 5. Run `callback` with the continuation query params and matched clusters. - NotifyDebugMessage("HistoryClustersService::QueryClusters()"); if (!backend_ || !backend_weak_factory_) { @@ -310,46 +239,44 @@ history::QueryOptions options; options.max_count = kMaxVisitsToCluster.Get(); - // Filter incomplete visits to those that have a `url_row`, have a - // `visit_row`, and match `options`. - std::vector<IncompleteVisitContextAnnotations> - filtered_incomplete_visit_context_annotations; - for (const auto& item : incomplete_visit_context_annotations_) { - auto& incomplete_visit_context_annotation = item.second; - // Discard incomplete visits that don't have a `url_row` and `visit_row`. - // It's possible that the `url_row` and `visit_row` will be available - // before they're needed (i.e. before - // `GetAnnotatedVisitsToCluster::RunOnDBThread()`). But since it'll only - // have a copy of the incomplete context annotations, the copy won't have - // the fields updated. A weak ptr won't help since it can't be accessed on - // different threads. A `scoped_refptr` could work. However, only very - // recently opened tabs won't have the rows set, so we don't bother using - // `scoped_refptr`s. - if (!incomplete_visit_context_annotation.status.history_rows) - continue; + history_service_->GetAnnotatedVisits( + options, + base::BindOnce( + [](const IncompleteVisitMap& incomplete_visits, + const history::QueryOptions& options, + std::vector<history::AnnotatedVisit> visits) { + // Append incomplete visits to `visits` too, as otherwise they will + // be mysteriously missing from the Clusters UI. They haven't + // recorded the page end metrics yet, but that's fine. + for (const auto& item : incomplete_visits) { + auto& incomplete_visit = item.second; + if (incomplete_visit.url_row.id() == 0 || + incomplete_visit.visit_row.visit_id == 0) { + // Discard incomplete visits that don't have visit_ids yet. + continue; + } - // Discard incomplete visits are ooutside the `options` time bounds. - // `begin_time` is inclusive, and `end_time` is exclusive. - // TODO(manukh): `end_time` is intended for the WebUI pagination and should - // not affect which visits are clustered. Once we have a feature param to - // toggle on-the-fly clustering, we should move the `end_time` check to - // `GetClusters()` when using persisted clusters. - const auto& visit_time = - incomplete_visit_context_annotation.visit_row.visit_time; - if (visit_time < options.begin_time || - (!options.end_time.is_null() && visit_time >= options.end_time)) { - continue; - } + const auto& visit_time = incomplete_visit.visit_row.visit_time; + if (visit_time < options.begin_time || + (!options.end_time.is_null() && + visit_time >= options.end_time)) { + // Discard incomplete visits outside the `options` time bounds. + // `begin_time` is inclusive, and `end_time` is exclusive. + continue; + } - filtered_incomplete_visit_context_annotations.push_back( - incomplete_visit_context_annotation); - } + visits.push_back({incomplete_visit.url_row, + incomplete_visit.visit_row, + incomplete_visit.context_annotations, + // Content annotations not provided, but it's + // not provided for complete visits either. + {}}); + } - history_service_->ScheduleDBTask( - FROM_HERE, - std::make_unique<GetAnnotatedVisitsToCluster>( - options, filtered_incomplete_visit_context_annotations, - std::move(on_visits_callback)), + return visits; + }, + incomplete_visit_context_annotations_, options) + .Then(std::move(on_visits_callback)), task_tracker); }
diff --git a/components/history_clusters/core/history_clusters_service.h b/components/history_clusters/core/history_clusters_service.h index 87f13ac..f5ab181 100644 --- a/components/history_clusters/core/history_clusters_service.h +++ b/components/history_clusters/core/history_clusters_service.h
@@ -26,8 +26,6 @@ namespace history_clusters { -using IncompleteVisitMap = std::map<int64_t, IncompleteVisitContextAnnotations>; - // This Service is the API for UIs to fetch Chrome Memories. class HistoryClustersService : public KeyedService { public: @@ -113,6 +111,9 @@ private: friend class HistoryClustersServiceTestApi; + using IncompleteVisitMap = + std::map<int64_t, IncompleteVisitContextAnnotations>; + // This is a callback used for the `QueryClusters()` call from // `DoesQueryMatchAnyCluster()`. Populates the cluster keyword cache from the // keywords in `clusters`.
diff --git a/components/history_clusters/core/history_clusters_service_unittest.cc b/components/history_clusters/core/history_clusters_service_unittest.cc index 8398050..783e782 100644 --- a/components/history_clusters/core/history_clusters_service_unittest.cc +++ b/components/history_clusters/core/history_clusters_service_unittest.cc
@@ -47,7 +47,7 @@ std::move(callback_).Run(clusters); } - const std::vector<history::AnnotatedVisit>& LastClusteredVisits() const { + const std::vector<history::AnnotatedVisit>& last_clustered_visits() const { return last_clustered_visits_; } @@ -83,7 +83,6 @@ history::CreateHistoryService(history_dir_.GetPath(), true); history_clusters_service_ = std::make_unique<HistoryClustersService>( history_service_.get(), nullptr); - history_clusters_service_test_api_ = std::make_unique<HistoryClustersServiceTestApi>( history_clusters_service_.get(), history_service_.get()); @@ -97,8 +96,6 @@ HistoryClustersServiceTest& operator=(const HistoryClustersServiceTest&) = delete; - // Add hardcoded completed visits with context annotations to the history - // database. void AddHardcodedTestDataToHistoryService() { history::ContextID context_id = reinterpret_cast<history::ContextID>(1); @@ -131,25 +128,10 @@ } } - // Add an incomplete visit context annotations to the in memory incomplete - // visit map. Does not touch the history database. - void AddIncompleteVisit(history::URLID url_id, history::VisitID visit_id) { - // It's not possible to have an incomplete visit with URL or visit set but - // not the other. - ASSERT_FALSE(url_id ^ visit_id); - auto& incomplete_visit_context_annotations = - history_clusters_service_->GetOrCreateIncompleteVisitContextAnnotations( - next_navigation_id_); - incomplete_visit_context_annotations.url_row.set_id(url_id); - incomplete_visit_context_annotations.visit_row.visit_id = visit_id; - incomplete_visit_context_annotations.status.history_rows = url_id; - next_navigation_id_++; - } - // Verifies that the hardcoded visits were passed to the clustering backend. void VerifyTestClusteringBackendRequest() { std::vector<history::AnnotatedVisit> visits = - test_clustering_backend_->LastClusteredVisits(); + test_clustering_backend_->last_clustered_visits(); ASSERT_EQ(visits.size(), 2u); auto& visit = visits[0]; EXPECT_EQ(visit.visit_row.visit_id, 2); @@ -202,7 +184,7 @@ AddHardcodedTestDataToHistoryService(); history_clusters_service_->QueryClusters( - /*query=*/"", /*end_time=*/base::Time::Now(), /* max_count=*/0, + /*query=*/"", /*max_time=*/base::Time::Now(), /* max_count=*/0, // This "expect" block is not run until after the fake response is sent // further down in this method. base::BindLambdaForTesting( @@ -255,35 +237,6 @@ run_loop_.Run(); } -TEST_F(HistoryClustersServiceTest, QueryClustersIncompleteAndPersistedVisits) { - // Create persisted visits 1 and 2. - AddHardcodedTestDataToHistoryService(); - - // Create incomplete visits 3, 4, and a pending navigation for whom we haven't - // yet retrieved the history rows for. - AddIncompleteVisit(3, 3); - AddIncompleteVisit(0, 0); - AddIncompleteVisit(4, 4); - - history_clusters_service_->QueryClusters( - /*query=*/"", /*end_time=*/base::Time::Now(), /* max_count=*/0, - base::DoNothing(), // Only need to verify the correct request is sent. - &task_tracker_); - - history::BlockUntilHistoryProcessesPendingRequests(history_service_.get()); - - // Persisted visits are ordered before incomplete visits. Persisted visits are - // ordered newest first. Incomplete visits are ordered the same as they were - // sent to the `HistoryClustersService`. - std::vector<history::AnnotatedVisit> visits = - test_clustering_backend_->LastClusteredVisits(); - ASSERT_EQ(visits.size(), 4u); - EXPECT_EQ(visits[0].visit_row.visit_id, 2); - EXPECT_EQ(visits[1].visit_row.visit_id, 1); - EXPECT_EQ(visits[2].visit_row.visit_id, 3); - EXPECT_EQ(visits[3].visit_row.visit_id, 4); -} - TEST_F(HistoryClustersServiceTest, QueryClustersVariousQueries) { AddHardcodedTestDataToHistoryService(); @@ -316,7 +269,7 @@ auto run_loop_quit = run_loop.QuitClosure(); history_clusters_service_->QueryClusters( - test_data[i].query, /*end_time=*/base::Time::Now(), + test_data[i].query, /*max_time=*/base::Time::Now(), /* max_count=*/0, // This "expect" block is not run until after the fake response is sent // further down in this method.
diff --git a/components/history_clusters/core/remote_clustering_backend.cc b/components/history_clusters/core/remote_clustering_backend.cc index 3c9d21f..904b44b 100644 --- a/components/history_clusters/core/remote_clustering_backend.cc +++ b/components/history_clusters/core/remote_clustering_backend.cc
@@ -49,8 +49,7 @@ visit.context_annotations.page_end_reason); request_visit->set_page_transition( static_cast<int>(visit.visit_row.transition)); - request_visit->set_referring_visit_id( - visit.referring_visit_of_redirect_chain_start); + request_visit->set_referring_visit_id(visit.visit_row.referring_visit); if (debug_logger) { base::DictionaryValue debug_visit;
diff --git a/components/keep_alive_registry/keep_alive_types.cc b/components/keep_alive_registry/keep_alive_types.cc index 2138828..5e6a1e4e 100644 --- a/components/keep_alive_registry/keep_alive_types.cc +++ b/components/keep_alive_registry/keep_alive_types.cc
@@ -40,6 +40,8 @@ return out << "NOTIFICATION"; case KeepAliveOrigin::PENDING_NOTIFICATION_CLICK_EVENT: return out << "PENDING_NOTIFICATION_CLICK_EVENT"; + case KeepAliveOrigin::PENDING_NOTIFICATION_CLOSE_EVENT: + return out << "PENDING_NOTIFICATION_CLOSE_EVENT"; case KeepAliveOrigin::IN_FLIGHT_PUSH_MESSAGE: return out << "IN_FLIGHT_PUSH_MESSAGE"; case KeepAliveOrigin::APP_LIST_SERVICE_VIEWS:
diff --git a/components/keep_alive_registry/keep_alive_types.h b/components/keep_alive_registry/keep_alive_types.h index ab3fb23..f856df85 100644 --- a/components/keep_alive_registry/keep_alive_types.h +++ b/components/keep_alive_registry/keep_alive_types.h
@@ -46,6 +46,7 @@ // c/b/notifications NOTIFICATION, PENDING_NOTIFICATION_CLICK_EVENT, + PENDING_NOTIFICATION_CLOSE_EVENT, // c/b/push_messaging IN_FLIGHT_PUSH_MESSAGE,
diff --git a/components/omnibox/browser/autocomplete_result_android.cc b/components/omnibox/browser/autocomplete_result_android.cc index 66e0aef..6f56e79 100644 --- a/components/omnibox/browser/autocomplete_result_android.cc +++ b/components/omnibox/browser/autocomplete_result_android.cc
@@ -97,6 +97,8 @@ void AutocompleteResult::GroupSuggestionsBySearchVsURL(JNIEnv* env, int first_index, int last_index) { + if (first_index == last_index) + return; const int num_elements = matches_.size(); if (first_index < 0 || last_index <= first_index || last_index > num_elements) {
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc index aae3d18b..93ce639 100644 --- a/components/omnibox/browser/zero_suggest_provider.cc +++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -573,9 +573,15 @@ if (current_page_classification == OmniboxEventProto::CHROMEOS_APP_LIST) return REMOTE_NO_URL; + const bool context_eligible_for_web_contextual_suggestions = + (current_page_classification == OmniboxEventProto::OTHER) || + (current_page_classification == + OmniboxEventProto::SEARCH_RESULT_PAGE_NO_SEARCH_TERM_REPLACEMENT && + base::FeatureList::IsEnabled( + omnibox::kOnFocusSuggestionsContextualWebAllowSRP)); + // Contextual Open Web - (same client side behavior for multiple variants). - if (current_page_classification == OmniboxEventProto::OTHER && - can_send_current_url) { + if (context_eligible_for_web_contextual_suggestions && can_send_current_url) { if (input.focus_type() == OmniboxFocusType::ON_FOCUS && (base::FeatureList::IsEnabled( omnibox::kOnFocusSuggestionsContextualWeb) ||
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc index 59f296f..45d1559 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc
@@ -138,10 +138,14 @@ // // There's multiple flags here for multiple backend configurations: // - Default (search queries) +// - SRP specific toggle (enables SRP on top of Web Pages for features below) // - On-Content Suggestions const base::Feature kOnFocusSuggestionsContextualWeb{ "OmniboxOnFocusSuggestionsContextualWeb", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kOnFocusSuggestionsContextualWebAllowSRP{ + "OmniboxOnFocusSuggestionsContextualWebAllowSRP", + base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kOnFocusSuggestionsContextualWebOnContent{ "OmniboxOnFocusSuggestionsContextualWebOnContent", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h index 005935aa..f34f131 100644 --- a/components/omnibox/common/omnibox_features.h +++ b/components/omnibox/common/omnibox_features.h
@@ -39,6 +39,7 @@ extern const base::Feature kOmniboxLocalZeroSuggestAgeThreshold; extern const base::Feature kOmniboxTrendingZeroPrefixSuggestionsOnNTP; extern const base::Feature kOnFocusSuggestionsContextualWeb; +extern const base::Feature kOnFocusSuggestionsContextualWebAllowSRP; extern const base::Feature kOnFocusSuggestionsContextualWebOnContent; extern const base::Feature kLocalHistoryZeroSuggest; // Related, kMaxZeroSuggestMatches.
diff --git a/components/password_manager/core/browser/insecure_credentials_table.cc b/components/password_manager/core/browser/insecure_credentials_table.cc index 44ecee5..7287af4 100644 --- a/components/password_manager/core/browser/insecure_credentials_table.cc +++ b/components/password_manager/core/browser/insecure_credentials_table.cc
@@ -89,9 +89,6 @@ DCHECK(db_->DoesTableExist(kTableName)); - base::UmaHistogramEnumeration("PasswordManager.CompromisedCredentials.Add", - compromised_credentials.insecure_type); - // In case there is an error, expect it to be a constraint violation. db_->set_error_callback(base::BindRepeating([](int error, sql::Statement*) { constexpr int kSqliteErrorMask = 0xFF; @@ -178,15 +175,6 @@ GetRows(signon_realm); if (compromised_credentials.empty()) return false; - for (const auto& compromised_credential : compromised_credentials) { - if (username == compromised_credential.username) { - base::UmaHistogramEnumeration( - "PasswordManager.CompromisedCredentials.Remove", - compromised_credential.insecure_type); - base::UmaHistogramEnumeration( - "PasswordManager.RemoveCompromisedCredentials.RemoveReason", reason); - } - } sql::Statement s(db_->GetCachedStatement( SQL_FROM_HERE,
diff --git a/components/policy/resources/PRESUBMIT.py b/components/policy/resources/PRESUBMIT.py index 14c9175c..a45dfba4 100644 --- a/components/policy/resources/PRESUBMIT.py +++ b/components/policy/resources/PRESUBMIT.py
@@ -48,31 +48,34 @@ root = input_api.change.RepositoryRoot() + # Get the current version from the VERSION file so that we can check + # which policies are un-released and thus can be changed at will. current_version = None + try: + version_path = input_api.os_path.join(root, 'chrome', 'VERSION') + with open(version_path, "rb") as f: + current_version = int(f.readline().split(b"=")[1]) + print('Checking policies against current version: ' + + current_version) + except: + pass + + # Get the original file contents of the policy file so that we can check + # the compatibility of template changes in it original_file_contents = None + if template_affected_file is not None: + original_file_contents = '\n'.join(template_affected_file.OldContents()) # Check if there is a tag that allows us to bypass compatibility checks. # This can be used in situations where there is a bug in the validation # code or if a policy change needs to urgently be submitted. - if not input_api.change.tags.get('BYPASS_POLICY_COMPATIBILITY_CHECK'): - # Get the current version from the VERSION file so that we can check - # which policies are un-released and thus can be changed at will. - try: - version_path = input_api.os_path.join(root, 'chrome', 'VERSION') - with open(version_path, "rb") as f: - current_version = int(f.readline().split(b"=")[1]) - print ('Checking policies against current version: ' + - current_version) - except: - pass - - # Get the original file contents of the policy file so that we can check - # the compatibility of template changes in it - if template_affected_file is not None: - original_file_contents = '\n'.join(template_affected_file.OldContents()) + skip_compatibility_check = \ + 'BYPASS_POLICY_COMPATIBILITY_CHECK' in input_api.change.tags checker = syntax_check_policy_template_json.PolicyTemplateChecker() - if checker.Run(args, filepath, original_file_contents, current_version) > 0: + checker_result = checker.Run(args, filepath, original_file_contents, + current_version, skip_compatibility_check) + if checker_result > 0: return [output_api.PresubmitError('Syntax error(s) in file:', [filepath])] finally: sys.path = old_sys_path
diff --git a/components/policy/test_support/policy_testserver.py b/components/policy/test_support/policy_testserver.py index 1f8f4f3..7c982c8e 100644 --- a/components/policy/test_support/policy_testserver.py +++ b/components/policy/test_support/policy_testserver.py
@@ -203,8 +203,6 @@ }, ] -INVALID_ENROLLMENT_TOKEN = 'invalid_enrollment_token' - POLICY_COMMON_DEFINITIONS_TYPES = [ 'StringList', 'PolicyOptions', @@ -399,9 +397,6 @@ response = self.ProcessCheckAndroidManagementRequest( rmsg.check_android_management_request, str(self.GetUniqueParam('oauth_token'))) - elif request_type == 'register_browser': - response = self.ProcessRegisterBrowserRequest( - rmsg.register_browser_request) elif request_type == 'app_install_report': response = self.ProcessAppInstallReportRequest( rmsg.app_install_report_request) @@ -875,38 +870,6 @@ return (200, response) - def ProcessRegisterBrowserRequest(self, msg): - """Handles a browser registration request. - - Returns: - A tuple of HTTP status code and response data to send to the client. - """ - enrollment_token = None - match = re.match('GoogleEnrollmentToken token=(\\w+)', - self.headers.get('Authorization', '')) - if match: - enrollment_token = match.group(1) - if not enrollment_token: - return (401, 'Missing enrollment token.') - - device_id = self.GetUniqueParam('deviceid') - if not device_id: - return (400, 'Parameter deviceid is missing.') - - if not msg.machine_name and not msg.device_model: - return (400, 'Either machine name or device model must be non-empty.') - - if enrollment_token == INVALID_ENROLLMENT_TOKEN: - return (401, 'Invalid enrollment token') - - dm_token = 'fake_device_management_token' - response = dm.DeviceManagementResponse() - response.register_response.device_management_token = ( - dm_token) - self.server.RegisterBrowser(dm_token, device_id, msg.machine_name) - - return (200, response) - def SetProtoRepeatedField(self, group_message, field, field_value): assert type(field_value) == list entries = group_message.__getattribute__(field.name) @@ -1627,16 +1590,6 @@ self.WriteClientState() return self._registered_tokens[dmtoken] - def RegisterBrowser(self, dm_token, device_id, machine_name): - self._registered_tokens[dm_token] = { - 'device_id': device_id, - 'device_token': dm_token, - 'allowed_policy_types': ['google/chrome/machine-level-user', - 'google/chrome/machine-level-extension'], - 'machine_name': machine_name - } - self.WriteClientState() - def UpdateStateKeys(self, dmtoken, state_keys): """Updates the state keys for a given client.
diff --git a/components/policy/tools/syntax_check_policy_template_json.py b/components/policy/tools/syntax_check_policy_template_json.py index f3885940c..fcea325 100755 --- a/components/policy/tools/syntax_check_policy_template_json.py +++ b/components/policy/tools/syntax_check_policy_template_json.py
@@ -1729,7 +1729,8 @@ self._Error('Missing atomic group id %s' % (delete_id)) return - def Main(self, filename, options, original_file_contents, current_version): + def Main(self, filename, options, original_file_contents, current_version, + skip_compability_check): try: with open(filename, 'rb') as f: raw_data = f.read().decode('UTF-8') @@ -1886,7 +1887,7 @@ # errors). self.non_compatibility_error_count = self.error_count if (not self.non_compatibility_error_count - and original_file_contents is not None and current_version is not None): + and original_file_contents is not None and not skip_compability_check): self._CheckPolicyDefinitionsChangeCompatibility( policy_definitions, original_file_contents, current_version) @@ -1920,7 +1921,8 @@ argv, filename=None, original_file_contents=None, - current_version=None): + current_version=None, + skip_compability_check=False): parser = argparse.ArgumentParser( usage='usage: %prog [options] filename', description='Syntax check a policy_templates.json file.') @@ -1942,4 +1944,5 @@ if args.device_policy_proto_path is None: print('Error: Missing --device_policy_proto_path argument.') return 1 - return self.Main(filename, args, original_file_contents, current_version) + return self.Main(filename, args, original_file_contents, current_version, + skip_compability_check)
diff --git a/components/safe_browsing/core/common/safebrowsing_constants.h b/components/safe_browsing/core/common/safebrowsing_constants.h index a0647922..7f4d79c4 100644 --- a/components/safe_browsing/core/common/safebrowsing_constants.h +++ b/components/safe_browsing/core/common/safebrowsing_constants.h
@@ -66,6 +66,16 @@ kNavigationPreloadSubFrame = 20, kMaxValue = kNavigationPreloadSubFrame, }; + +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +enum class CredentialPhishedStatus { + // The credential was just marked as phished. + kMarkedAsPhished = 0, + // The credential's site was marked as legitimate. + kSiteMarkedAsLegitimate = 1, + kMaxValue = kSiteMarkedAsLegitimate, +}; } #endif // COMPONENTS_SAFE_BROWSING_CORE_COMMON_SAFEBROWSING_CONSTANTS_H_
diff --git a/content/browser/device_posture/device_posture_browsertest.cc b/content/browser/device_posture/device_posture_browsertest.cc index 98d11f8..b264edb 100644 --- a/content/browser/device_posture/device_posture_browsertest.cc +++ b/content/browser/device_posture/device_posture_browsertest.cc
@@ -75,7 +75,7 @@ IN_PROC_BROWSER_TEST_F(DevicePostureBrowserTest, GetPostureDefault) { // This basic test will ensure that the default posture is working. EXPECT_TRUE(NavigateToURL(shell(), GetTestUrl(nullptr, "simple_page.html"))); - EXPECT_EQ("no-fold", EvalJs(shell(), "navigator.devicePosture.type")); + EXPECT_EQ("continuous", EvalJs(shell(), "navigator.devicePosture.type")); } IN_PROC_BROWSER_TEST_F(DevicePostureBrowserTest, PostureChangeEventTest) { @@ -83,7 +83,7 @@ // event handler is properly called and that the new posture has the correct // value. EXPECT_TRUE(NavigateToURL(shell(), GetTestUrl(nullptr, "simple_page.html"))); - EXPECT_EQ("no-fold", EvalJs(shell(), "navigator.devicePosture.type")); + EXPECT_EQ("continuous", EvalJs(shell(), "navigator.devicePosture.type")); EXPECT_EQ(true, ExecJs(shell(), R"( var postureReceived = new Promise(resolve => { @@ -92,8 +92,8 @@ } }); )")); - set_current_posture(device::mojom::DevicePostureType::kLaptop); - EXPECT_EQ("laptop", EvalJs(shell(), "postureReceived")); + set_current_posture(device::mojom::DevicePostureType::kFolded); + EXPECT_EQ("folded", EvalJs(shell(), "postureReceived")); } } // namespace
diff --git a/content/browser/idle/idle_manager_impl.cc b/content/browser/idle/idle_manager_impl.cc index 4d2c7bf..859fbca 100644 --- a/content/browser/idle/idle_manager_impl.cc +++ b/content/browser/idle/idle_manager_impl.cc
@@ -12,6 +12,7 @@ #include "content/public/browser/idle_manager.h" #include "content/public/browser/permission_controller.h" #include "content/public/browser/permission_type.h" +#include "content/public/browser/render_frame_host.h" #include "ui/base/idle/idle.h" #include "url/gurl.h" #include "url/origin.h" @@ -64,9 +65,9 @@ } // namespace -IdleManagerImpl::IdleManagerImpl(BrowserContext* browser_context) +IdleManagerImpl::IdleManagerImpl(RenderFrameHost* render_frame_host) : idle_time_provider_(new DefaultIdleProvider()), - browser_context_(browser_context) {} + render_frame_host_(render_frame_host) {} IdleManagerImpl::~IdleManagerImpl() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); @@ -134,7 +135,7 @@ bool IdleManagerImpl::HasPermission(const url::Origin& origin) { PermissionController* permission_controller = - browser_context_->GetPermissionController(); + render_frame_host_->GetBrowserContext()->GetPermissionController(); DCHECK(permission_controller); PermissionStatus status = permission_controller->GetPermissionStatus( PermissionType::IDLE_DETECTION, origin.GetURL(), origin.GetURL());
diff --git a/content/browser/idle/idle_manager_impl.h b/content/browser/idle/idle_manager_impl.h index 25b404c..3571bb39a 100644 --- a/content/browser/idle/idle_manager_impl.h +++ b/content/browser/idle/idle_manager_impl.h
@@ -24,12 +24,12 @@ namespace content { -class BrowserContext; +class RenderFrameHost; class CONTENT_EXPORT IdleManagerImpl : public IdleManager, public blink::mojom::IdleManager { public: - explicit IdleManagerImpl(BrowserContext* browser_context); + explicit IdleManagerImpl(RenderFrameHost* render_frame_host); ~IdleManagerImpl() override; IdleManagerImpl(const IdleManagerImpl&) = delete; @@ -82,10 +82,8 @@ blink::mojom::IdleStatePtr state_override_; - // Raw pointer should always be valid. IdleManagerImpl is owned by the - // StoragePartitionImpl which is owned by BrowserContext. Therefore when the - // BrowserContext is destroyed, |this| will be destroyed as well. - BrowserContext* const browser_context_; + // Raw pointer is safe because this object is owned by |render_frame_host_|. + RenderFrameHost* const render_frame_host_; // Registered clients. mojo::ReceiverSet<blink::mojom::IdleManager, url::Origin> receivers_;
diff --git a/content/browser/idle/idle_manager_unittest.cc b/content/browser/idle/idle_manager_unittest.cc index 62e37866..d750885 100644 --- a/content/browser/idle/idle_manager_unittest.cc +++ b/content/browser/idle/idle_manager_unittest.cc
@@ -12,15 +12,15 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/test/bind.h" -#include "base/test/task_environment.h" -#include "base/test/test_mock_time_task_runner.h" #include "base/time/time.h" #include "content/browser/permissions/permission_controller_impl.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/permission_controller.h" #include "content/public/browser/permission_type.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_permission_manager.h" #include "content/public/test/test_browser_context.h" +#include "content/public/test/test_renderer_host.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/test_support/test_utils.h" #include "services/service_manager/public/cpp/bind_source_info.h" @@ -63,21 +63,26 @@ MOCK_METHOD0(CheckIdleStateIsLocked, bool()); }; -class IdleManagerTest : public testing::Test { +class IdleManagerTest : public RenderViewHostTestHarness { protected: IdleManagerTest() - : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME), - browser_context_(new TestBrowserContext()) {} + : RenderViewHostTestHarness( + base::test::TaskEnvironment::TimeSource::MOCK_TIME) {} ~IdleManagerTest() override = default; IdleManagerTest(const IdleManagerTest&) = delete; IdleManagerTest& operator=(const IdleManagerTest&) = delete; void SetUp() override { + RenderViewHostTestHarness::SetUp(); + permission_manager_ = new NiceMock<MockPermissionManager>(); - idle_time_provider_ = new NiceMock<MockIdleTimeProvider>(); - browser_context_->SetPermissionControllerDelegate( + auto* test_browser_context = + static_cast<TestBrowserContext*>(browser_context()); + test_browser_context->SetPermissionControllerDelegate( base::WrapUnique(permission_manager_)); - idle_manager_ = std::make_unique<IdleManagerImpl>(browser_context_.get()); + + idle_time_provider_ = new NiceMock<MockIdleTimeProvider>(); + idle_manager_ = std::make_unique<IdleManagerImpl>(main_rfh()); idle_manager_->SetIdleTimeProviderForTest( base::WrapUnique(idle_time_provider_)); idle_manager_->CreateService(service_remote_.BindNewPipeAndPassReceiver(), @@ -86,6 +91,7 @@ void TearDown() override { idle_manager_.reset(); + RenderViewHostTestHarness::TearDown(); } IdleManagerImpl* GetIdleManager() { return idle_manager_.get(); } @@ -131,7 +137,7 @@ })); // Fast forward to run polling task. - task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1)); + task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(1)); loop.Run(); return std::make_tuple(user_result, screen_result); } @@ -155,8 +161,6 @@ mojo::Remote<blink::mojom::IdleManager> service_remote_; private: - BrowserTaskEnvironment task_environment_; - std::unique_ptr<TestBrowserContext> browser_context_; std::unique_ptr<IdleManagerImpl> idle_manager_; MockPermissionManager* permission_manager_; MockIdleTimeProvider* idle_time_provider_;
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index f4d8879..461d3c2a 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -1505,8 +1505,7 @@ // IdleManager should be unique per RenderFrame to provide proper isolation // of overrides. - idle_manager_ = - std::make_unique<IdleManagerImpl>(GetProcess()->GetBrowserContext()); + idle_manager_ = std::make_unique<IdleManagerImpl>(this); preferred_color_scheme_ = ui::NativeTheme::GetInstanceForWeb()->GetPreferredColorScheme() ==
diff --git a/docs/python3_migration.md b/docs/python3_migration.md index 65aea89..de47c3d 100644 --- a/docs/python3_migration.md +++ b/docs/python3_migration.md
@@ -10,16 +10,14 @@ ## Status -As of the time of writing (2021-05-12), we're in the following state: +As of the time of writing (2021-07-19), we're in the following state: * depot_tools is fully Python3-compatible. * [gclient hooks](#gclient_hooks) are being migrated to use Python3 ([crbug.com/1208028](https://crbug.com/1208028)). * GN is fully Python3-compatible, meaning that all the scripts invoked through exec_script() are using Python3. -* The [build](#gn_ninja-actions) (scripts invoked by Ninja) is using Python3 by default, - but some actions are still run using Python2 - ([crbug.com/1112471](https://crbug.com/1112471)). +* The [build](#gn_ninja-actions) (scripts invoked by Ninja) uses Python3. * We are updating the various test harnesses and frameworks to use Python3, but most still use Python2. It is possible to use Python3 for tests if you're ready to do so. @@ -109,13 +107,9 @@ ### GN/Ninja actions -Most targets in the build use Python3 now, and anything declared via an +All targets in the build use Python3 now, and anything declared via an `action()` rule in GN will use Python3. -Some targets still require Python2; they are declared as [python2_action] -targets instead. To migrate them to Python3, change the `python2_action` to -`action` and make sure things still build. - ### Tests Test targets that run by invoking python scripts (like telemetry_unittests @@ -139,6 +133,5 @@ Python3, add the line `USE_PYTHON3 = True` to the PRESUBMIT.py file in question (effectively creating a global variable). -[python2_action]: https://source.chromium.org/chromium/chromium/src/+/main:build/config/python.gni;l=68?q=python2_action%20file:python.gni&ss=chromium [script_test]: https://source.chromium.org/?q=script_test%20file:testing%2Ftest.gni&ss=chromium [vpython]: https://chromium.googlesource.com/infra/infra/+/refs/heads/main/doc/users/vpython.md
diff --git a/extensions/browser/api/feedback_private/feedback_private_api.cc b/extensions/browser/api/feedback_private/feedback_private_api.cc index c1b9583..c03db71a 100644 --- a/extensions/browser/api/feedback_private/feedback_private_api.cc +++ b/extensions/browser/api/feedback_private/feedback_private_api.cc
@@ -24,6 +24,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "components/feedback/content/content_tracing_manager.h" +#include "components/feedback/feedback_common.h" #include "components/feedback/feedback_report.h" #include "components/feedback/system_logs/system_logs_fetcher.h" #include "extensions/browser/api/extensions_api_client.h" @@ -93,12 +94,14 @@ void SendFeedback(content::BrowserContext* browser_context, const FeedbackInfo& feedback_info, + const bool load_system_info, base::OnceCallback<void(feedback_private::LandingPageType, bool)> callback) { // Populate feedback_params FeedbackParams feedback_params; feedback_params.is_internal_email = IsGoogleInternalAccountEmail(browser_context); + feedback_params.load_system_info = load_system_info; feedback_params.send_histograms = feedback_info.send_histograms && *feedback_info.send_histograms; feedback_params.send_bluetooth_logs = @@ -319,12 +322,12 @@ send_all_crash_report_ids_ = IsGoogleInternalAccountEmail(browser_context()); // Self-deleting object. - system_logs::SystemLogsFetcher* fetcher = - ExtensionsAPIClient::Get() - ->GetFeedbackPrivateDelegate() - ->CreateSystemLogsFetcher(browser_context()); - fetcher->Fetch(base::BindOnce( - &FeedbackPrivateGetSystemInformationFunction::OnCompleted, this)); + ExtensionsAPIClient::Get() + ->GetFeedbackPrivateDelegate() + ->FetchSystemInformation( + browser_context(), + base::BindOnce( + &FeedbackPrivateGetSystemInformationFunction::OnCompleted, this)); return RespondLater(); } @@ -340,15 +343,13 @@ // view properly reflects what we will be uploading to the server. It is // also stripped later on in the feedback processing for other code paths // that don't go through this. - if (itr.first == feedback::FeedbackReport::kAllCrashReportIdsKey && - !send_all_crash_report_ids_) { - continue; + if (FeedbackCommon::IncludeInSystemLogs(itr.first, + send_all_crash_report_ids_)) { + SystemInformation sys_info_entry; + sys_info_entry.key = std::move(itr.first); + sys_info_entry.value = std::move(itr.second); + sys_info_list.emplace_back(std::move(sys_info_entry)); } - - SystemInformation sys_info_entry; - sys_info_entry.key = std::move(itr.first); - sys_info_entry.value = std::move(itr.second); - sys_info_list.emplace_back(std::move(sys_info_entry)); } } @@ -395,8 +396,10 @@ feedback_private::SendFeedback::Params::Create(*args_)); EXTENSION_FUNCTION_VALIDATE(params); + bool load_system_info = + (params->load_system_info && *params->load_system_info); SendFeedback( - browser_context(), params->feedback, + browser_context(), params->feedback, load_system_info, base::BindOnce(&FeedbackPrivateSendFeedbackFunction::OnCompleted, this)); return RespondLater();
diff --git a/extensions/browser/api/feedback_private/feedback_private_api_chromeos_unittest.cc b/extensions/browser/api/feedback_private/feedback_private_api_chromeos_unittest.cc index d7b35e2..fc70bb8 100644 --- a/extensions/browser/api/feedback_private/feedback_private_api_chromeos_unittest.cc +++ b/extensions/browser/api/feedback_private/feedback_private_api_chromeos_unittest.cc
@@ -158,6 +158,7 @@ // Verify that the flags in params are set correctly EXPECT_EQ(expected_params.is_internal_email, params.is_internal_email); + EXPECT_EQ(expected_params.load_system_info, params.load_system_info); EXPECT_EQ(expected_params.send_tab_titles, params.send_tab_titles); EXPECT_EQ(expected_params.send_histograms, params.send_histograms); EXPECT_EQ(expected_params.send_bluetooth_logs, @@ -443,6 +444,7 @@ ])"; const FeedbackParams expected_params{/*is_internal_email=*/false, + /*load_system_info=*/false, /*send_tab_titles=*/true, /*send_histograms=*/true, /*send_bluetooth_logs=*/true}; @@ -493,6 +495,7 @@ ])"; const FeedbackParams expected_params{/*is_internal_email=*/false, + /*load_system_info=*/false, /*send_tab_titles=*/false, /*send_histograms=*/false, /*send_bluetooth_logs=*/false}; @@ -514,4 +517,111 @@ EXPECT_FALSE(feedback_data->sys_info()->count("mem_usage_with_title")); } +TEST_F(FeedbackPrivateApiUnittest, SendFeedbackV2WithOptionsTrue) { + const std::string args = R"([ + { + "attachedFile": { + "data": {}, + "name": "C:\\fakepath\\chrome_40px.svg" + }, + "assistantDebugInfoAllowed": true, + "attachedFileBlobUuid": "2e3996de-db9e-4c3d-b62c-80d19b6418b9", + "categoryTag": "test-tag", + "description": "test-desc", + "descriptionPlaceholder": "", + "email": "tester@test.com", + "flow": "regular", + "fromAssistant": true, + "includeBluetoothLogs": true, + "pageUrl": "https://test.com", + "productId": 1122, + "screenshot": {}, + "screenshotBlobUuid": "3e72cc3c-550f-49f0-b5d2-bf21f3fbab15", + "sendBluetoothLogs": true, + "sendHistograms": true, + "sendTabTitles": true, + "systemInformation": [], + "traceId": 9966, + "useSystemWindowFrame": false + }, + true, + 1.625859975163e+12 +])"; + + const FeedbackParams expected_params{/*is_internal_email=*/false, + /*load_system_info=*/true, + /*send_tab_titles=*/true, + /*send_histograms=*/true, + /*send_bluetooth_logs=*/true}; + auto feedback_data = RunSendFeedbackFunction(args, expected_params); + + EXPECT_EQ(9966, feedback_data->trace_id()); + EXPECT_EQ(1122, feedback_data->product_id()); + EXPECT_EQ("chrome_40px.svg", feedback_data->attached_filename()); + EXPECT_EQ("test-desc", feedback_data->description()); + EXPECT_EQ("test-tag", feedback_data->category_tag()); + EXPECT_EQ("tester@test.com", feedback_data->user_email()); + EXPECT_EQ("2e3996de-db9e-4c3d-b62c-80d19b6418b9", + feedback_data->attached_file_uuid()); + EXPECT_EQ("3e72cc3c-550f-49f0-b5d2-bf21f3fbab15", + feedback_data->screenshot_uuid()); + EXPECT_EQ("https://test.com", feedback_data->page_url()); + + EXPECT_TRUE(feedback_data->from_assistant()); + EXPECT_TRUE(feedback_data->assistant_debug_info_allowed()); + EXPECT_TRUE(feedback_data->sys_info()); + EXPECT_TRUE(feedback_data->sys_info()->size() == 0); +} + +TEST_F(FeedbackPrivateApiUnittest, SendFeedbackV2WithOptionsFalse) { + const std::string args = R"([ + { + "attachedFile": { + "data": {}, + "name":"" + }, + "assistantDebugInfoAllowed": false, + "categoryTag": "", + "description": "test-desc", + "descriptionPlaceholder": "", + "email": "", + "flow": "regular", + "fromAssistant": false, + "includeBluetoothLogs": false, + "pageUrl": "", + "screenshot": {}, + "screenshotBlobUuid": "", + "sendBluetoothLogs": false, + "sendHistograms": false, + "sendTabTitles": false, + "systemInformation": [], + "useSystemWindowFrame": false + }, + false, + 1.625859975163e+12 +])"; + + const FeedbackParams expected_params{/*is_internal_email=*/false, + /*load_system_info=*/false, + /*send_tab_titles=*/false, + /*send_histograms=*/false, + /*send_bluetooth_logs=*/false}; + auto feedback_data = RunSendFeedbackFunction(args, expected_params); + + EXPECT_EQ(0, feedback_data->trace_id()); + EXPECT_EQ(-1, feedback_data->product_id()); + EXPECT_EQ("", feedback_data->attached_filename()); + EXPECT_EQ("test-desc", feedback_data->description()); + EXPECT_EQ("", feedback_data->category_tag()); + EXPECT_EQ("", feedback_data->user_email()); + EXPECT_EQ("", feedback_data->attached_file_uuid()); + EXPECT_EQ("", feedback_data->screenshot_uuid()); + EXPECT_EQ("", feedback_data->page_url()); + + EXPECT_FALSE(feedback_data->from_assistant()); + EXPECT_FALSE(feedback_data->assistant_debug_info_allowed()); + EXPECT_TRUE(feedback_data->sys_info()); + EXPECT_TRUE(feedback_data->sys_info()->size() == 0); +} + } // namespace extensions
diff --git a/extensions/browser/api/feedback_private/feedback_private_delegate.h b/extensions/browser/api/feedback_private/feedback_private_delegate.h index e943c53..7abf0c24 100644 --- a/extensions/browser/api/feedback_private/feedback_private_delegate.h +++ b/extensions/browser/api/feedback_private/feedback_private_delegate.h
@@ -28,7 +28,6 @@ } // namespace feedback namespace system_logs { -class SystemLogsFetcher; class SystemLogsSource; } // namespace system_logs @@ -50,9 +49,9 @@ content::BrowserContext* browser_context, bool from_crash) const = 0; - // Returns a SystemLogsFetcher for responding to a request for system logs. - virtual system_logs::SystemLogsFetcher* CreateSystemLogsFetcher( - content::BrowserContext* context) const = 0; + virtual void FetchSystemInformation( + content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) const = 0; #if BUILDFLAG(IS_CHROMEOS_ASH) // Creates a SystemLogsSource for the given type of log file.
diff --git a/extensions/browser/api/feedback_private/feedback_service.cc b/extensions/browser/api/feedback_private/feedback_service.cc index 7f9a4d6..cd76d44 100644 --- a/extensions/browser/api/feedback_private/feedback_service.cc +++ b/extensions/browser/api/feedback_private/feedback_service.cc
@@ -125,13 +125,24 @@ const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data, SendFeedbackCallback callback) { + if (params.load_system_info) { + // The user has chosen to send system logs. They (and on ash more logs) + // will be loaded in the background without blocking the client. + FetchSystemInformation(params, feedback_data); + } else { #if BUILDFLAG(IS_CHROMEOS_ASH) - FetchExtraLogs( - feedback_data, - base::BindOnce(&FeedbackService::OnExtraLogsFetched, this, params)); + if (feedback_data->sys_info()->size() > 0) { + // The user has chosen to send system logs which has been loaded from the + // client side. On ash, extra logs need to be fetched. + FetchExtraLogs(params, feedback_data); + } else { + // The user has chosen not to send system logs. + OnAllLogsFetched(params, feedback_data); + } #else - OnAllLogsFetched(params, feedback_data); + OnAllLogsFetched(params, feedback_data); #endif // BUILDFLAG(IS_CHROMEOS_ASH) + } // True means report will be sent shortly. // False means report will be sent once the device is online. @@ -141,25 +152,50 @@ std::move(callback).Run(status); } +void FeedbackService::FetchSystemInformation( + const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data) { + delegate_->FetchSystemInformation( + browser_context_, + base::BindOnce(&FeedbackService::OnSystemInformationFetched, this, params, + feedback_data)); +} + +void FeedbackService::OnSystemInformationFetched( + const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data, + std::unique_ptr<system_logs::SystemLogsResponse> sys_info) { + if (sys_info) { + for (auto& itr : *sys_info) { + if (FeedbackCommon::IncludeInSystemLogs(itr.first, + params.is_internal_email)) + feedback_data->AddLog(std::move(itr.first), std::move(itr.second)); + } + } +#if BUILDFLAG(IS_CHROMEOS_ASH) + FetchExtraLogs(params, feedback_data); +#else + OnAllLogsFetched(params, feedback_data); +#endif // BUILDFLAG(IS_CHROMEOS_ASH) +} + #if BUILDFLAG(IS_CHROMEOS_ASH) void FeedbackService::FetchExtraLogs( - scoped_refptr<feedback::FeedbackData> feedback_data, - FetchExtraLogsCallback callback) { - delegate_->FetchExtraLogs(feedback_data, std::move(callback)); + const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data) { + delegate_->FetchExtraLogs( + feedback_data, + base::BindOnce(&FeedbackService::OnExtraLogsFetched, this, params)); } void FeedbackService::OnExtraLogsFetched( const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data) { - FetchLacrosHistograms( + delegate_->GetLacrosHistograms( base::BindOnce(&FeedbackService::OnLacrosHistogramsFetched, this, params, feedback_data)); } -void FeedbackService::FetchLacrosHistograms(GetHistogramsCallback callback) { - delegate_->GetLacrosHistograms(std::move(callback)); -} - void FeedbackService::OnLacrosHistogramsFetched( const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data,
diff --git a/extensions/browser/api/feedback_private/feedback_service.h b/extensions/browser/api/feedback_private/feedback_service.h index e3931004..0473ad6 100644 --- a/extensions/browser/api/feedback_private/feedback_service.h +++ b/extensions/browser/api/feedback_private/feedback_service.h
@@ -24,6 +24,9 @@ struct FeedbackParams { // The user has a @google.com email or not. bool is_internal_email = false; + // Set this to true if system information should be loaded. If the data has + // been pre-loaded into the feedback_data, this should be set to false. + bool load_system_info = false; // If true, include the browser tab titles in the feedback. bool send_tab_titles = false; // If true, include histograms in the feedback. @@ -65,20 +68,21 @@ const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data, SendFeedbackCallback callback); + void FetchSystemInformation( + const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data); + void OnSystemInformationFetched( + const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data, + std::unique_ptr<system_logs::SystemLogsResponse> sys_info); #if BUILDFLAG(IS_CHROMEOS_ASH) // Gets logs that aren't covered by FetchSystemInformation, but should be // included in the feedback report. These currently consist of the Intel Wi-Fi // debug logs (if they exist). - // Modifies |feedback_data| and passes it on to |callback|. - void FetchExtraLogs(scoped_refptr<feedback::FeedbackData> feedback_data, - FetchExtraLogsCallback callback); + void FetchExtraLogs(const FeedbackParams& params, + scoped_refptr<feedback::FeedbackData> feedback_data); void OnExtraLogsFetched(const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data); - - using GetHistogramsCallback = base::OnceCallback<void(const std::string&)>; - // Gets Lacros histograms in zip compressed format which will be attached - // as a file in unified feedback report. - void FetchLacrosHistograms(GetHistogramsCallback callback); void OnLacrosHistogramsFetched( const FeedbackParams& params, scoped_refptr<feedback::FeedbackData> feedback_data,
diff --git a/extensions/browser/api/feedback_private/feedback_service_unittest.cc b/extensions/browser/api/feedback_private/feedback_service_unittest.cc index ef80ba54..7d39214b 100644 --- a/extensions/browser/api/feedback_private/feedback_service_unittest.cc +++ b/extensions/browser/api/feedback_private/feedback_service_unittest.cc
@@ -28,6 +28,10 @@ namespace { +const std::string kFakeKey = "fake key"; +const std::string kFakeValue = "fake value"; +const std::string kTabTitleValue = "some sensitive info"; + class MockFeedbackUploader : public FeedbackUploader { public: MockFeedbackUploader( @@ -45,10 +49,14 @@ class MockFeedbackPrivateDelegate : public ShellFeedbackPrivateDelegate { public: MockFeedbackPrivateDelegate() { - ON_CALL(*this, CreateSystemLogsFetcher) - .WillByDefault([](content::BrowserContext* context) { - auto delegate = std::make_unique<ShellFeedbackPrivateDelegate>(); - return delegate->CreateSystemLogsFetcher(context); + ON_CALL(*this, FetchSystemInformation) + .WillByDefault([](content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) { + auto sys_info = std::make_unique<system_logs::SystemLogsResponse>(); + sys_info->emplace(kFakeKey, kFakeValue); + sys_info->emplace(feedback::FeedbackReport::kMemUsageWithTabTitlesKey, + kTabTitleValue); + std::move(callback).Run(std::move(sys_info)); }); #if BUILDFLAG(IS_CHROMEOS_ASH) ON_CALL(*this, FetchExtraLogs) @@ -61,9 +69,9 @@ ~MockFeedbackPrivateDelegate() override = default; - MOCK_METHOD(system_logs::SystemLogsFetcher*, - CreateSystemLogsFetcher, - (content::BrowserContext*), + MOCK_METHOD(void, + FetchSystemInformation, + (content::BrowserContext*, system_logs::SysLogsFetcherCallback), (const, override)); #if BUILDFLAG(IS_CHROMEOS_ASH) MOCK_METHOD(void, @@ -92,9 +100,11 @@ ~FeedbackServiceTest() override = default; void TestSendFeedbackConcerningTabTitles(bool send_tab_titles) { - feedback_data_->AddLog("fake key", "fake value"); - feedback_data_->AddLog("mem_usage_with_title", "some sensitive info"); + feedback_data_->AddLog(kFakeKey, kFakeValue); + feedback_data_->AddLog(feedback::FeedbackReport::kMemUsageWithTabTitlesKey, + kTabTitleValue); const FeedbackParams params{/*is_internal_email=*/false, + /*load_system_info=*/false, /*send_tab_titles=*/send_tab_titles, /*send_histograms=*/true, /*send_bluetooth_logs=*/true}; @@ -112,7 +122,7 @@ browser_context(), mock_delegate.get()); feedback_service->SendFeedback(params, feedback_data_, mock_callback.Get()); - EXPECT_EQ(1u, feedback_data_->sys_info()->count("fake key")); + EXPECT_EQ(1u, feedback_data_->sys_info()->count(kFakeKey)); } base::ScopedTempDir scoped_temp_dir_; @@ -124,6 +134,7 @@ TEST_F(FeedbackServiceTest, SendFeedbackWithoutSysInfo) { const FeedbackParams params{/*is_internal_email=*/false, + /*load_system_info=*/false, /*send_tab_titles=*/true, /*send_histograms=*/true, /*send_bluetooth_logs=*/true}; @@ -139,14 +150,42 @@ feedback_service->SendFeedback(params, feedback_data_, mock_callback.Get()); } +TEST_F(FeedbackServiceTest, SendFeedbackLoadSysInfo) { + const FeedbackParams params{/*is_internal_email=*/false, + /*load_system_info=*/true, + /*send_tab_titles=*/true, + /*send_histograms=*/true, + /*send_bluetooth_logs=*/true}; + + EXPECT_CALL(*mock_uploader_, QueueReport).Times(1); + base::MockCallback<SendFeedbackCallback> mock_callback; + EXPECT_CALL(mock_callback, Run(true)); + + auto mock_delegate = std::make_unique<MockFeedbackPrivateDelegate>(); + EXPECT_CALL(*mock_delegate, FetchSystemInformation(_, _)).Times(1); +#if BUILDFLAG(IS_CHROMEOS_ASH) + EXPECT_CALL(*mock_delegate, FetchExtraLogs(_, _)).Times(1); +#endif // BUILDFLAG(IS_CHROMEOS_ASH) + + auto feedback_service = base::MakeRefCounted<FeedbackService>( + browser_context(), mock_delegate.get()); + + feedback_service->SendFeedback(params, feedback_data_, mock_callback.Get()); + EXPECT_EQ(1u, feedback_data_->sys_info()->count(kFakeKey)); + EXPECT_EQ(1u, feedback_data_->sys_info()->count( + feedback::FeedbackReport::kMemUsageWithTabTitlesKey)); +} + TEST_F(FeedbackServiceTest, SendFeedbackDoNotSendTabTitles) { TestSendFeedbackConcerningTabTitles(false); - EXPECT_EQ(0u, feedback_data_->sys_info()->count("mem_usage_with_title")); + EXPECT_EQ(0u, feedback_data_->sys_info()->count( + feedback::FeedbackReport::kMemUsageWithTabTitlesKey)); } TEST_F(FeedbackServiceTest, SendFeedbackDoSendTabTitles) { TestSendFeedbackConcerningTabTitles(true); - EXPECT_EQ(1u, feedback_data_->sys_info()->count("mem_usage_with_title")); + EXPECT_EQ(1u, feedback_data_->sys_info()->count( + feedback::FeedbackReport::kMemUsageWithTabTitlesKey)); } } // namespace extensions
diff --git a/extensions/browser/api/messaging/extension_message_port.cc b/extensions/browser/api/messaging/extension_message_port.cc index e26470f..d087a86 100644 --- a/extensions/browser/api/messaging/extension_message_port.cc +++ b/extensions/browser/api/messaging/extension_message_port.cc
@@ -29,8 +29,12 @@ #include "extensions/common/extension_messages.h" #include "extensions/common/manifest_handlers/background_info.h" +namespace extensions { + namespace { +using PassKey = base::PassKey<ExtensionMessagePort>; + bool IsExtensionMessageSupported() { if (!content::BackForwardCache::IsBackForwardCacheFeatureEnabled()) return false; @@ -107,8 +111,6 @@ } // namespace -namespace extensions { - const char kReceivingEndDoesntExistError[] = // TODO(lazyboy): Test these in service worker implementation. "Could not establish connection. Receiving end does not exist."; @@ -118,7 +120,7 @@ public ProcessManagerObserver { public: explicit FrameTracker(ExtensionMessagePort* port) : port_(port) {} - ~FrameTracker() override {} + ~FrameTracker() override = default; void TrackExtensionProcessFrames() { pm_observation_.Observe(ProcessManager::Get(port_->browser_context_)); @@ -179,8 +181,6 @@ port_id_(port_id), extension_id_(extension_id), browser_context_(rfh->GetProcess()->GetBrowserContext()), - did_create_port_(false), - background_host_ptr_(nullptr), frame_tracker_(new FrameTracker(this)) { content::WebContents* tab = content::WebContents::FromRenderFrameHost(rfh); CHECK(tab); @@ -204,8 +204,8 @@ const PortId& port_id, const ExtensionId& extension_id, content::BrowserContext* browser_context) { - std::unique_ptr<ExtensionMessagePort> port(new ExtensionMessagePort( - channel_delegate, port_id, extension_id, browser_context)); + auto port = std::make_unique<ExtensionMessagePort>( + channel_delegate, port_id, extension_id, browser_context, PassKey()); port->frame_tracker_ = std::make_unique<FrameTracker>(port.get()); port->frame_tracker_->TrackExtensionProcessFrames(); @@ -225,16 +225,6 @@ return port; } -ExtensionMessagePort::ExtensionMessagePort( - base::WeakPtr<ChannelDelegate> channel_delegate, - const PortId& port_id, - const ExtensionId& extension_id, - content::BrowserContext* browser_context) - : weak_channel_delegate_(channel_delegate), - port_id_(port_id), - extension_id_(extension_id), - browser_context_(browser_context) {} - // static std::unique_ptr<ExtensionMessagePort> ExtensionMessagePort::CreateForEndpoint( base::WeakPtr<ChannelDelegate> channel_delegate, @@ -248,14 +238,26 @@ } // NOTE: We don't want all the workers within the extension, so we cannot // reuse other constructor from above. - std::unique_ptr<ExtensionMessagePort> port(new ExtensionMessagePort( - channel_delegate, port_id, extension_id, endpoint.browser_context())); + auto port = std::make_unique<ExtensionMessagePort>( + channel_delegate, port_id, extension_id, endpoint.browser_context(), + PassKey()); port->frame_tracker_ = std::make_unique<FrameTracker>(port.get()); port->frame_tracker_->TrackExtensionProcessFrames(); port->RegisterWorker(endpoint.GetWorkerId()); return port; } +ExtensionMessagePort::ExtensionMessagePort( + base::WeakPtr<ChannelDelegate> channel_delegate, + const PortId& port_id, + const ExtensionId& extension_id, + content::BrowserContext* browser_context, + PassKey) + : weak_channel_delegate_(channel_delegate), + port_id_(port_id), + extension_id_(extension_id), + browser_context_(browser_context) {} + ExtensionMessagePort::~ExtensionMessagePort() { ClearFrames(); }
diff --git a/extensions/browser/api/messaging/extension_message_port.h b/extensions/browser/api/messaging/extension_message_port.h index 6468162..60cd2ae7 100644 --- a/extensions/browser/api/messaging/extension_message_port.h +++ b/extensions/browser/api/messaging/extension_message_port.h
@@ -14,6 +14,7 @@ #include "base/callback_forward.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/types/pass_key.h" #include "extensions/browser/api/messaging/message_port.h" #include "extensions/browser/service_worker/worker_id.h" #include "extensions/common/api/messaging/port_id.h" @@ -64,8 +65,17 @@ const std::string& extension_id, const ChannelEndpoint& endpoint); + ExtensionMessagePort(base::WeakPtr<ChannelDelegate> channel_delegate, + const PortId& port_id, + const ExtensionId& extension_id, + content::BrowserContext* browser_context, + base::PassKey<ExtensionMessagePort>); + + ExtensionMessagePort(const ExtensionMessagePort&) = delete; ~ExtensionMessagePort() override; + ExtensionMessagePort& operator=(const ExtensionMessagePort&) = delete; + // MessagePort: void RemoveCommonFrames(const MessagePort& port) override; bool HasFrame(content::RenderFrameHost* rfh) const override; @@ -91,11 +101,6 @@ class FrameTracker; struct IPCTarget; - ExtensionMessagePort(base::WeakPtr<ChannelDelegate> channel_delegate, - const PortId& port_id, - const ExtensionId& extension_id, - content::BrowserContext* browser_context); - // Clears the `frames_` set. void ClearFrames(); @@ -176,8 +181,6 @@ // Used in IncrementLazyKeepaliveCount ExtensionHost* background_host_ptr_ = nullptr; std::unique_ptr<FrameTracker> frame_tracker_; - - DISALLOW_COPY_AND_ASSIGN(ExtensionMessagePort); }; } // namespace extensions
diff --git a/extensions/common/api/feedback_private.idl b/extensions/common/api/feedback_private.idl index 5294a2f..890d9ac 100644 --- a/extensions/common/api/feedback_private.idl +++ b/extensions/common/api/feedback_private.idl
@@ -197,7 +197,15 @@ static void getSystemInformation(GetSystemInformationCallback callback); // Sends a feedback report. + // |loadSystemInfo|: Optional flag when present and is true, the backend + // should load system information before sending the report. This is added + // to reduce user's wait time when sending reports because loading system + // information is slow. + // |formOpenTime|: The epoch time when the feedback form was opened. This is + // used for metrics. static void sendFeedback(FeedbackInfo feedback, + optional boolean loadSystemInfo, + optional double formOpenTime, SendFeedbackCallback callback); // Gets localized translated strings for feedback. It returns the
diff --git a/extensions/renderer/resources/feedback_private_custom_bindings.js b/extensions/renderer/resources/feedback_private_custom_bindings.js index ec41dcc..0e0521b 100644 --- a/extensions/renderer/resources/feedback_private_custom_bindings.js +++ b/extensions/renderer/resources/feedback_private_custom_bindings.js
@@ -9,20 +9,20 @@ apiBridge.registerCustomHook(function(bindingsAPI) { var apiFunctions = bindingsAPI.apiFunctions; apiFunctions.setUpdateArgumentsPostValidate( - "sendFeedback", function(feedbackInfo, callback) { - var attachedFileBlobUuid = ''; - var screenshotBlobUuid = ''; + 'sendFeedback', + function(feedbackInfo, loadSystemInfo, formOpenTime, callback) { + var attachedFileBlobUuid = ''; + var screenshotBlobUuid = ''; - if (feedbackInfo.attachedFile) - attachedFileBlobUuid = - blobNatives.GetBlobUuid(feedbackInfo.attachedFile.data); - if (feedbackInfo.screenshot) - screenshotBlobUuid = - blobNatives.GetBlobUuid(feedbackInfo.screenshot); + if (feedbackInfo.attachedFile) + attachedFileBlobUuid = + blobNatives.GetBlobUuid(feedbackInfo.attachedFile.data); + if (feedbackInfo.screenshot) + screenshotBlobUuid = blobNatives.GetBlobUuid(feedbackInfo.screenshot); - feedbackInfo.attachedFileBlobUuid = attachedFileBlobUuid; - feedbackInfo.screenshotBlobUuid = screenshotBlobUuid; + feedbackInfo.attachedFileBlobUuid = attachedFileBlobUuid; + feedbackInfo.screenshotBlobUuid = screenshotBlobUuid; - return [feedbackInfo, callback]; - }); + return [feedbackInfo, loadSystemInfo, formOpenTime, callback]; + }); });
diff --git a/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.cc b/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.cc index fc1646d..022b6f262 100644 --- a/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.cc +++ b/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.cc
@@ -28,10 +28,12 @@ return nullptr; } -system_logs::SystemLogsFetcher* -ShellFeedbackPrivateDelegate::CreateSystemLogsFetcher( - content::BrowserContext* context) const { - return system_logs::BuildShellSystemLogsFetcher(context); +void ShellFeedbackPrivateDelegate::FetchSystemInformation( + content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) const { + // self-deleting object + auto* fetcher = system_logs::BuildShellSystemLogsFetcher(context); + fetcher->Fetch(std::move(callback)); } #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.h b/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.h index 2217025..4442bbd 100644 --- a/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.h +++ b/extensions/shell/browser/api/feedback_private/shell_feedback_private_delegate.h
@@ -22,8 +22,9 @@ std::unique_ptr<base::DictionaryValue> GetStrings( content::BrowserContext* browser_context, bool from_crash) const override; - system_logs::SystemLogsFetcher* CreateSystemLogsFetcher( - content::BrowserContext* context) const override; + void FetchSystemInformation( + content::BrowserContext* context, + system_logs::SysLogsFetcherCallback callback) const override; #if BUILDFLAG(IS_CHROMEOS_ASH) std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource( api::feedback_private::LogSource source_type) const override;
diff --git a/gpu/BUILD.gn b/gpu/BUILD.gn index 8ce915d..1928e03 100644 --- a/gpu/BUILD.gn +++ b/gpu/BUILD.gn
@@ -344,6 +344,8 @@ "command_buffer/tests/gl_set_aggressively_free_resources_unittest.cc", "command_buffer/tests/gl_shared_resources_unittest.cc", "command_buffer/tests/gl_stream_draw_unittest.cc", + "command_buffer/tests/gl_test_setup_helper.cc", + "command_buffer/tests/gl_test_setup_helper.h", "command_buffer/tests/gl_test_utils.cc", "command_buffer/tests/gl_test_utils.h", "command_buffer/tests/gl_tests_main.cc",
diff --git a/gpu/command_buffer/tests/gl_map_buffer_range_unittest.cc b/gpu/command_buffer/tests/gl_map_buffer_range_unittest.cc index 88a45ef..3d8f6d8 100644 --- a/gpu/command_buffer/tests/gl_map_buffer_range_unittest.cc +++ b/gpu/command_buffer/tests/gl_map_buffer_range_unittest.cc
@@ -8,6 +8,7 @@ #include <GLES3/gl3.h> #include <stdint.h> +#include "build/build_config.h" #include "gpu/command_buffer/service/context_group.h" #include "gpu/command_buffer/tests/gl_manager.h" #include "gpu/command_buffer/tests/gl_test_utils.h" @@ -315,6 +316,12 @@ glUnmapBuffer(GL_PIXEL_PACK_BUFFER); GLTestHelper::CheckGLError("no errors", __LINE__); +#if defined(OS_MAC) + // TODO(crbug.com/1230038): This step causes a crash on mac intel-uhd bot. + if (GPUTestBotConfig::CurrentConfigMatches("Mac Intel 0x3e9b")) + return; +#endif + glReadPixels(0, 0, kCanvasSize, kCanvasSize, GL_RGBA, GL_UNSIGNED_BYTE, 0); GLTestHelper::CheckGLError("no errors", __LINE__); }
diff --git a/gpu/command_buffer/tests/gl_test_setup_helper.cc b/gpu/command_buffer/tests/gl_test_setup_helper.cc new file mode 100644 index 0000000..78b5b03b --- /dev/null +++ b/gpu/command_buffer/tests/gl_test_setup_helper.cc
@@ -0,0 +1,40 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "gpu/command_buffer/tests/gl_test_setup_helper.h" + +#include "components/viz/test/test_gpu_service_holder.h" +#include "gpu/command_buffer/client/gles2_lib.h" +#include "gpu/command_buffer/tests/gl_test_utils.h" +#include "ui/gl/init/gl_factory.h" + +namespace gpu { + +GLTestSetupHelper::GLTestSetupHelper() { + viz::TestGpuServiceHolder::DoNotResetOnTestExit(); + testing::TestEventListeners& listeners = + testing::UnitTest::GetInstance()->listeners(); + listeners.Append(this); +} + +GLTestSetupHelper::~GLTestSetupHelper() { + testing::TestEventListeners& listeners = + testing::UnitTest::GetInstance()->listeners(); + CHECK_EQ(this, listeners.Release(this)); +} + +void GLTestSetupHelper::OnTestStart(const testing::TestInfo& test_info) { + gpu::GLTestHelper::InitializeGLDefault(); + ::gles2::Initialize(); +} + +void GLTestSetupHelper::OnTestEnd(const testing::TestInfo& test_info) { + // Explicitly tear down the gpu-service (if active) before shutting down GL. + // Otherwise the gpu-service tries to access GL during tear-down and causes + // crashes. + viz::TestGpuServiceHolder::ResetInstance(); + gl::init::ShutdownGL(/*due_to_fallback=*/false); +} + +} // namespace gpu
diff --git a/gpu/command_buffer/tests/gl_test_setup_helper.h b/gpu/command_buffer/tests/gl_test_setup_helper.h new file mode 100644 index 0000000..402c03a --- /dev/null +++ b/gpu/command_buffer/tests/gl_test_setup_helper.h
@@ -0,0 +1,28 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GPU_COMMAND_BUFFER_TESTS_GL_TEST_SETUP_HELPER_H_ +#define GPU_COMMAND_BUFFER_TESTS_GL_TEST_SETUP_HELPER_H_ + +#include "testing/gtest/include/gtest/gtest.h" + +namespace gpu { + +// Helper class to automatically set-up and initialize GL environment before +// every test, and tear down the environment after every test. This should +// normally be used from base::TestSuite instances, so that it takes care of the +// set-up/tear-down between every test, and each test does not have to do this +// explicitly. +class GLTestSetupHelper : public testing::EmptyTestEventListener { + public: + GLTestSetupHelper(); + ~GLTestSetupHelper(); + + // testing::EmptyTestEventListener: + void OnTestStart(const testing::TestInfo& test_info) override; + void OnTestEnd(const testing::TestInfo& test_info) override; +}; + +} // namespace gpu +#endif // GPU_COMMAND_BUFFER_TESTS_GL_TEST_SETUP_HELPER_H_
diff --git a/gpu/command_buffer/tests/gl_tests_main.cc b/gpu/command_buffer/tests/gl_tests_main.cc index cb0166c..86ac4559 100644 --- a/gpu/command_buffer/tests/gl_tests_main.cc +++ b/gpu/command_buffer/tests/gl_tests_main.cc
@@ -11,7 +11,7 @@ #include "base/test/task_environment.h" #include "base/test/test_suite.h" #include "build/build_config.h" -#include "gpu/command_buffer/client/gles2_lib.h" +#include "gpu/command_buffer/tests/gl_test_setup_helper.h" #include "gpu/command_buffer/tests/gl_test_utils.h" #include "mojo/core/embedder/embedder.h" #include "testing/gmock/include/gmock/gmock.h" @@ -49,13 +49,12 @@ ui::OzonePlatform::InitializeForGPU(params); } #endif - gpu::GLTestHelper::InitializeGLDefault(); - - ::gles2::Initialize(); + gl_setup_ = std::make_unique<gpu::GLTestSetupHelper>(); } private: std::unique_ptr<base::test::TaskEnvironment> task_environment_; + std::unique_ptr<gpu::GLTestSetupHelper> gl_setup_; }; } // namespace
diff --git a/infra/config/generated/cr-buildbucket.cfg b/infra/config/generated/cr-buildbucket.cfg index e393324b..404f3005 100644 --- a/infra/config/generated/cr-buildbucket.cfg +++ b/infra/config/generated/cr-buildbucket.cfg
@@ -15596,6 +15596,10 @@ build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { + key: "chromium.isolate.use_new_lib" + value: 50 + } + experiments { key: "chromium.resultdb.result_sink" value: 100 } @@ -24321,6 +24325,10 @@ build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { + key: "chromium.isolate.use_new_lib" + value: 50 + } + experiments { key: "chromium.resultdb.result_sink" value: 100 } @@ -49956,7 +49964,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -50049,7 +50057,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -50142,7 +50150,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -50235,7 +50243,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -50328,7 +50336,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -50421,7 +50429,7 @@ service_account: "chromium-try-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53399,7 +53407,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53502,7 +53510,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53605,7 +53613,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53708,7 +53716,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53811,7 +53819,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -53914,7 +53922,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54017,7 +54025,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54120,7 +54128,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54237,7 +54245,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54340,7 +54348,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54443,7 +54451,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54546,7 +54554,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54649,7 +54657,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54752,7 +54760,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54855,7 +54863,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -54966,7 +54974,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55070,7 +55078,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55173,7 +55181,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55277,7 +55285,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55380,7 +55388,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55483,7 +55491,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55586,7 +55594,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55689,7 +55697,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55796,7 +55804,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -55903,7 +55911,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56006,7 +56014,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56110,7 +56118,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56213,7 +56221,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56317,7 +56325,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56420,7 +56428,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56523,7 +56531,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56626,7 +56634,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56729,7 +56737,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56832,7 +56840,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -56935,7 +56943,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57038,7 +57046,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57141,7 +57149,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57244,7 +57252,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57347,7 +57355,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57450,7 +57458,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57553,7 +57561,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57656,7 +57664,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57759,7 +57767,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57862,7 +57870,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -57966,7 +57974,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58069,7 +58077,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58172,7 +58180,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58276,7 +58284,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58379,7 +58387,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58482,7 +58490,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58585,7 +58593,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58687,7 +58695,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58790,7 +58798,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58893,7 +58901,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -58996,7 +59004,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59099,7 +59107,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59199,7 +59207,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59328,7 +59336,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59439,7 +59447,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59541,7 +59549,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59644,7 +59652,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59746,7 +59754,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59849,7 +59857,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -59952,7 +59960,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60055,7 +60063,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60157,7 +60165,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60260,7 +60268,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60362,7 +60370,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60465,7 +60473,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60567,7 +60575,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60670,7 +60678,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60773,7 +60781,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60875,7 +60883,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -60976,7 +60984,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61076,7 +61084,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61176,7 +61184,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61277,7 +61285,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61378,7 +61386,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61479,7 +61487,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61580,7 +61588,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61683,7 +61691,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61786,7 +61794,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61889,7 +61897,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -61992,7 +62000,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62095,7 +62103,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62198,7 +62206,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62301,7 +62309,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62404,7 +62412,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62507,7 +62515,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62610,7 +62618,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62713,7 +62721,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62815,7 +62823,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -62917,7 +62925,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63019,7 +63027,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63121,7 +63129,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63220,7 +63228,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63319,7 +63327,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63418,7 +63426,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63517,7 +63525,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63616,7 +63624,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63715,7 +63723,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63814,7 +63822,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -63913,7 +63921,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64012,7 +64020,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64111,7 +64119,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64210,7 +64218,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64309,7 +64317,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64408,7 +64416,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64507,7 +64515,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64606,7 +64614,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64705,7 +64713,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64804,7 +64812,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -64903,7 +64911,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65002,7 +65010,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65101,7 +65109,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65200,7 +65208,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65299,7 +65307,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65398,7 +65406,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65497,7 +65505,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65596,7 +65604,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65695,7 +65703,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65792,7 +65800,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65889,7 +65897,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -65986,7 +65994,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66083,7 +66091,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66180,7 +66188,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66277,7 +66285,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66374,7 +66382,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66471,7 +66479,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66568,7 +66576,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66665,7 +66673,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66762,7 +66770,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66859,7 +66867,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -66956,7 +66964,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67055,7 +67063,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67154,7 +67162,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67253,7 +67261,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67352,7 +67360,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67451,7 +67459,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67550,7 +67558,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67649,7 +67657,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67748,7 +67756,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67847,7 +67855,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -67946,7 +67954,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68045,7 +68053,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68144,7 +68152,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68243,7 +68251,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68342,7 +68350,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68441,7 +68449,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68540,7 +68548,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68637,7 +68645,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68734,7 +68742,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68833,7 +68841,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -68935,7 +68943,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69040,7 +69048,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69153,7 +69161,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69258,7 +69266,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69371,7 +69379,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69476,7 +69484,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69581,7 +69589,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69686,7 +69694,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69798,7 +69806,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -69903,7 +69911,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70008,7 +70016,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70113,7 +70121,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70218,7 +70226,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70320,7 +70328,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70422,7 +70430,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70525,7 +70533,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70628,7 +70636,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70734,7 +70742,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70837,7 +70845,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -70940,7 +70948,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71043,7 +71051,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71146,7 +71154,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71249,7 +71257,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71352,7 +71360,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71456,7 +71464,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71559,7 +71567,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71662,7 +71670,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71765,7 +71773,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71868,7 +71876,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -71971,7 +71979,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72074,7 +72082,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72173,7 +72181,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72276,7 +72284,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72378,7 +72386,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72481,7 +72489,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72584,7 +72592,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72691,7 +72699,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72801,7 +72809,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -72905,7 +72913,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73009,7 +73017,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73110,7 +73118,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73213,7 +73221,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73316,7 +73324,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73419,7 +73427,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73516,7 +73524,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73619,7 +73627,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73722,7 +73730,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73826,7 +73834,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -73929,7 +73937,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74032,7 +74040,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74134,7 +74142,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74237,7 +74245,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74340,7 +74348,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74443,7 +74451,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74545,7 +74553,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74648,7 +74656,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74758,7 +74766,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74867,7 +74875,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -74973,7 +74981,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75079,7 +75087,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75185,7 +75193,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75285,7 +75293,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75385,7 +75393,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75485,7 +75493,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75585,7 +75593,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75689,7 +75697,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75792,7 +75800,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75895,7 +75903,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -75998,7 +76006,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76101,7 +76109,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76204,7 +76212,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76308,7 +76316,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76411,7 +76419,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76514,7 +76522,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76617,7 +76625,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76720,7 +76728,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76824,7 +76832,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -76927,7 +76935,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77031,7 +77039,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77135,7 +77143,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77238,7 +77246,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77341,7 +77349,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77444,7 +77452,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77551,7 +77559,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77654,7 +77662,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77761,7 +77769,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77865,7 +77873,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -77968,7 +77976,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78071,7 +78079,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78174,7 +78182,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78277,7 +78285,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78380,7 +78388,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78483,7 +78491,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78586,7 +78594,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78688,7 +78696,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78785,7 +78793,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78888,7 +78896,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -78989,7 +78997,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79090,7 +79098,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79192,7 +79200,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79292,7 +79300,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79393,7 +79401,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79493,7 +79501,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79594,7 +79602,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79699,7 +79707,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79804,7 +79812,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -79901,7 +79909,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80001,7 +80009,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80101,7 +80109,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80202,7 +80210,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80303,7 +80311,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80404,7 +80412,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80505,7 +80513,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80606,7 +80614,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80707,7 +80715,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80808,7 +80816,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -80909,7 +80917,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81010,7 +81018,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81111,7 +81119,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81212,7 +81220,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81313,7 +81321,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81415,7 +81423,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81517,7 +81525,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81618,7 +81626,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81719,7 +81727,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81819,7 +81827,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -81915,7 +81923,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82011,7 +82019,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82114,7 +82122,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82217,7 +82225,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82320,7 +82328,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82423,7 +82431,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82526,7 +82534,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82629,7 +82637,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82732,7 +82740,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82835,7 +82843,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -82938,7 +82946,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83041,7 +83049,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83145,7 +83153,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83252,7 +83260,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83353,7 +83361,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83455,7 +83463,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83558,7 +83566,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83658,7 +83666,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83758,7 +83766,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83858,7 +83866,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -83958,7 +83966,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84058,7 +84066,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84158,7 +84166,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84258,7 +84266,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84361,7 +84369,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84464,7 +84472,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84567,7 +84575,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84682,7 +84690,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84792,7 +84800,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84895,7 +84903,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -84998,7 +85006,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85107,7 +85115,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85210,7 +85218,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85321,7 +85329,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85423,7 +85431,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85529,7 +85537,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85632,7 +85640,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85735,7 +85743,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85839,7 +85847,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -85942,7 +85950,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86046,7 +86054,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86149,7 +86157,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86252,7 +86260,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86355,7 +86363,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86458,7 +86466,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86561,7 +86569,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86657,7 +86665,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink" @@ -86760,7 +86768,7 @@ } experiments { key: "chromium.chromium_tests.use_rbe_cas" - value: 0 + value: 5 } experiments { key: "chromium.resultdb.result_sink"
diff --git a/infra/config/lib/try.star b/infra/config/lib/try.star index cc5b92b..9e81d3c 100644 --- a/infra/config/lib/try.star +++ b/infra/config/lib/try.star
@@ -168,7 +168,7 @@ fail("Try Windows builder {} must disable ATS".format(name)) # TODO(crbug.com/1143122): remove this after migration. - experiments["chromium.chromium_tests.use_rbe_cas"] = 0 + experiments["chromium.chromium_tests.use_rbe_cas"] = 5 # Define the builder first so that any validation of luci.builder arguments # (e.g. bucket) occurs before we try to use it
diff --git a/infra/config/subprojects/chromium/ci.star b/infra/config/subprojects/chromium/ci.star index e64dc57..c095fa9 100644 --- a/infra/config/subprojects/chromium/ci.star +++ b/infra/config/subprojects/chromium/ci.star
@@ -5815,6 +5815,10 @@ cq_mirrors_console_view = "mirrors", main_console_view = "main", os = os.MAC_10_15, + experiments = { + # TODO(crbug.com/1225524): remove this. + "chromium.isolate.use_new_lib": 50, + }, ) ci.mac_builder( @@ -6426,6 +6430,10 @@ cores = 32, main_console_view = "main", os = os.WINDOWS_ANY, + experiments = { + # TODO(crbug.com/1225524): remove this. + "chromium.isolate.use_new_lib": 50, + }, ) ci.win_builder(
diff --git a/ios/chrome/browser/autofill/autofill_controller_unittest.mm b/ios/chrome/browser/autofill/autofill_controller_unittest.mm index 83c2d47..3044014 100644 --- a/ios/chrome/browser/autofill/autofill_controller_unittest.mm +++ b/ios/chrome/browser/autofill/autofill_controller_unittest.mm
@@ -283,6 +283,7 @@ webStateList:NULL personalDataManager:NULL passwordStore:nullptr + appState:nil securityAlertHandler:nil reauthenticationModule:nil];
diff --git a/ios/chrome/browser/autofill/form_suggestion_controller_unittest.mm b/ios/chrome/browser/autofill/form_suggestion_controller_unittest.mm index 42f1615..bc07a7bb 100644 --- a/ios/chrome/browser/autofill/form_suggestion_controller_unittest.mm +++ b/ios/chrome/browser/autofill/form_suggestion_controller_unittest.mm
@@ -187,6 +187,12 @@ [[[mock_consumer stub] andDo:mockShow] showAccessorySuggestions:[OCMArg any]]; + // Mock restore keyboard to verify cleanup. + void (^mockRestore)(NSInvocation*) = ^(NSInvocation* invocation) { + received_suggestions_ = nil; + }; + [[[mock_consumer stub] andDo:mockRestore] restoreOriginalKeyboardView]; + id mock_window = OCMClassMock([UIWindow class]); id mock_web_state_view = OCMClassMock([UIView class]); @@ -194,12 +200,16 @@ fake_web_state_.SetView(mock_web_state_view); + id mock_app_state = OCMClassMock([AppState class]); + OCMStub([mock_app_state lastTappedWindow]).andReturn(mock_window); + accessory_mediator_ = [[FormInputAccessoryMediator alloc] initWithConsumer:mock_consumer handler:nil webStateList:NULL personalDataManager:NULL passwordStore:nullptr + appState:mock_app_state securityAlertHandler:nil reauthenticationModule:nil]; @@ -248,7 +258,8 @@ EXPECT_FALSE(received_suggestions_.count); } -// Tests that the suggestions are reset when a page is loaded. +// Tests that the suggestions are reset and JavaScript is injected when a page +// is loaded. TEST_F(FormSuggestionControllerTest, PageLoadShouldRestoreKeyboardAccessoryViewAndInjectJavaScript) { SetUpController(@[ [TestSuggestionProvider providerWithSuggestions] ]);
diff --git a/ios/chrome/browser/passwords/password_controller_unittest.mm b/ios/chrome/browser/passwords/password_controller_unittest.mm index dfa945c..8b72ac0 100644 --- a/ios/chrome/browser/passwords/password_controller_unittest.mm +++ b/ios/chrome/browser/passwords/password_controller_unittest.mm
@@ -272,6 +272,7 @@ webStateList:nullptr personalDataManager:nullptr passwordStore:nullptr + appState:nil securityAlertHandler:nil reauthenticationModule:nil]; [accessoryMediator_ injectWebState:web_state()];
diff --git a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm index 4614ffc8..fe27ed36 100644 --- a/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm +++ b/ios/chrome/browser/safe_browsing/chrome_password_protection_service.mm
@@ -7,6 +7,7 @@ #include <memory> #include "base/feature_list.h" +#include "base/metrics/histogram_functions.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" #include "base/notreached.h" @@ -77,6 +78,13 @@ namespace { +// Records changes in the phished status of saved credential. +void LogCredentialPhishedStatusChanged( + safe_browsing::CredentialPhishedStatus status) { + base::UmaHistogramEnumeration("SafeBrowsing.CredentialPhishedStatusChange", + status); +} + // Returns true if the command line has an artificial unsafe cached verdict. bool HasArtificialCachedVerdict() { std::string phishing_url_string = @@ -255,6 +263,8 @@ if (!password_store) { continue; } + LogCredentialPhishedStatusChanged( + safe_browsing::CredentialPhishedStatus::kMarkedAsPhished); password_store->AddInsecureCredential(password_manager::InsecureCredential( credential.signon_realm, credential.username, base::Time::Now(), password_manager::InsecureType::kPhished, @@ -275,6 +285,8 @@ if (!password_store) { continue; } + LogCredentialPhishedStatusChanged( + safe_browsing::CredentialPhishedStatus::kSiteMarkedAsLegitimate); password_store->RemoveInsecureCredentials( credential.signon_realm, credential.username, password_manager::RemoveInsecureCredentialsReason::
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/BUILD.gn b/ios/chrome/browser/ui/autofill/form_input_accessory/BUILD.gn index bb082f8..49f46be 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/BUILD.gn +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/BUILD.gn
@@ -70,23 +70,3 @@ ] frameworks = [ "UIKit.framework" ] } - -source_set("unit_tests") { - configs += [ "//build/config/compiler:enable_arc" ] - testonly = true - sources = [ "form_input_accessory_mediator_unittest.mm" ] - deps = [ - ":form_input_accessory", - "//base/test:test_support", - "//components/autofill/ios/form_util", - "//components/autofill/ios/form_util:test_support", - "//ios/chrome/browser/browser_state:test_support", - "//ios/chrome/browser/main:test_support", - "//ios/chrome/browser/web_state_list", - "//ios/chrome/browser/web_state_list:test_support", - "//ios/web/public/test", - "//ios/web/public/test/fakes", - "//testing/gtest", - "//third_party/ocmock", - ] -}
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_consumer.h b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_consumer.h index 4cd8cbc..16a4e0a8 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_consumer.h +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_consumer.h
@@ -33,10 +33,32 @@ // Enables or disables the previous button if any. @property(nonatomic) BOOL formInputPreviousButtonEnabled; +// Removes the animations on the custom keyboard view. +- (void)removeAnimationsOnKeyboardView; + +// Removes the presented keyboard view and the input accessory view. +- (void)restoreOriginalKeyboardView; + +// Removes the presented keyboard view and the input accessory view until +// |continueCustomKeyboardView| is called. +- (void)pauseCustomKeyboardView; + +// Adds the previously presented views to the keyboard. If they have not been +// reset. +- (void)continueCustomKeyboardView; + +// Tells the consumer that suggestions are being fetched. The fetching is +// asynchronous, so this call gives the opportunity to do any view preparation +// that doesn't need the suggestions. +- (void)prepareToShowSuggestions; + // Replace the keyboard accessory view with one showing the passed suggestions. -// And form navigation buttons on iPhone (iPad already includes those). +// And form navigation buttons if not an iPad (which already includes those). - (void)showAccessorySuggestions:(NSArray<FormSuggestion*>*)suggestions; +// Indicates that the keyboard state changed. +- (void)keyboardWillChangeToState:(KeyboardState)keyboardState; + @end #endif // IOS_CHROME_BROWSER_UI_AUTOFILL_FORM_INPUT_ACCESSORY_FORM_INPUT_ACCESSORY_CONSUMER_H_
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h index e172dc5..5e20d43 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.h
@@ -6,7 +6,6 @@ #define IOS_CHROME_BROWSER_UI_AUTOFILL_FORM_INPUT_ACCESSORY_FORM_INPUT_ACCESSORY_COORDINATOR_H_ #import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" -#import "ios/web/common/crw_input_view_provider.h" @class ManualFillInjectionHandler; @class ReauthenticationModule; @@ -28,12 +27,23 @@ // Creates and manages a custom input accessory view while the user is // interacting with a form. Also handles hiding and showing the default // accessory view elements. -@interface FormInputAccessoryCoordinator - : ChromeCoordinator <CRWResponderInputView> +@interface FormInputAccessoryCoordinator : ChromeCoordinator // The delegate for the coordinator. Must be set before it starts. @property(nonatomic, weak) id<FormInputAccessoryCoordinatorNavigator> navigator; +// Creates a coordinator that uses a |viewController| a |browserState| and +// a |webStateList|. +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithBaseViewController:(UIViewController*)viewController + browser:(Browser*)browser NS_UNAVAILABLE; + +// This resets the input accessory to a clean state. +- (void)reset; + @end #endif // IOS_CHROME_BROWSER_UI_AUTOFILL_FORM_INPUT_ACCESSORY_FORM_INPUT_ACCESSORY_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm index ccb977d7..43da6ca 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_coordinator.mm
@@ -31,14 +31,11 @@ #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_injection_handler.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_coordinator.h" #import "ios/chrome/browser/ui/commands/application_commands.h" -#import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h" #import "ios/chrome/browser/ui/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/commands/open_new_tab_command.h" #import "ios/chrome/browser/ui/commands/security_alert_commands.h" #import "ios/chrome/browser/ui/main/scene_state.h" #import "ios/chrome/browser/ui/main/scene_state_browser_agent.h" -#include "ios/chrome/browser/ui/util/ui_util.h" -#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/browser/web_state_list/web_state_list.h" #import "ios/chrome/common/ui/reauthentication/reauthentication_module.h" #include "ios/chrome/grit/ios_strings.h" @@ -80,9 +77,6 @@ // Modal alert. @property(nonatomic, strong) AlertCoordinator* alertCoordinator; -// Active Form Input View Controller. -@property(nonatomic, strong) UIViewController* formInputViewController; - @end @implementation FormInputAccessoryCoordinator @@ -119,6 +113,9 @@ autofill::PersonalDataManagerFactory::GetForBrowserState( self.browser->GetBrowserState()->GetOriginalChromeBrowserState()); + AppState* appState = SceneStateBrowserAgent::FromBrowser(self.browser) + ->GetSceneState() + .appState; __weak id<SecurityAlertCommands> securityAlertHandler = HandlerForProtocol( self.browser->GetCommandDispatcher(), SecurityAlertCommands); self.formInputAccessoryMediator = [[FormInputAccessoryMediator alloc] @@ -127,6 +124,7 @@ webStateList:self.browser->GetWebStateList() personalDataManager:personalDataManager passwordStore:passwordStore + appState:appState securityAlertHandler:securityAlertHandler reauthenticationModule:self.reauthenticationModule]; self.formInputAccessoryViewController.formSuggestionClient = @@ -135,9 +133,9 @@ - (void)stop { [self stopChildren]; + + [self.formInputAccessoryViewController restoreOriginalKeyboardView]; self.formInputAccessoryViewController = nil; - self.formInputViewController = nil; - [GetFirstResponder() reloadInputViews]; [self.formInputAccessoryMediator disconnect]; self.formInputAccessoryMediator = nil; @@ -148,12 +146,8 @@ - (void)reset { [self stopChildren]; - [self.formInputAccessoryMediator enableSuggestions]; [self.formInputAccessoryViewController reset]; - - self.formInputViewController = nil; - [GetFirstResponder() reloadInputViews]; } #pragma mark - Presenting Children @@ -181,8 +175,8 @@ if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { [passwordCoordinator presentFromButton:button]; } else { - self.formInputViewController = passwordCoordinator.viewController; - [GetFirstResponder() reloadInputViews]; + [self.formInputAccessoryViewController + presentView:passwordCoordinator.viewController.view]; } [self.childCoordinators addObject:passwordCoordinator]; @@ -197,8 +191,8 @@ if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { [cardCoordinator presentFromButton:button]; } else { - self.formInputViewController = cardCoordinator.viewController; - [GetFirstResponder() reloadInputViews]; + [self.formInputAccessoryViewController + presentView:cardCoordinator.viewController.view]; } [self.childCoordinators addObject:cardCoordinator]; @@ -213,8 +207,8 @@ if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { [addressCoordinator presentFromButton:button]; } else { - self.formInputViewController = addressCoordinator.viewController; - [GetFirstResponder() reloadInputViews]; + [self.formInputAccessoryViewController + presentView:addressCoordinator.viewController.view]; } [self.childCoordinators addObject:addressCoordinator]; @@ -222,7 +216,17 @@ #pragma mark - FormInputAccessoryMediatorHandler -- (void)resetFormInputView { +- (void)mediatorDidDetectKeyboardHide:(FormInputAccessoryMediator*)mediator { + // On iOS 13, beta 3, the popover is not dismissed when the keyboard hides. + // This explicitly dismiss any popover. + // TODO(crbug.com/1116037): Verify if this workaround is still needed. + if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { + [self reset]; + } +} + +- (void)mediatorDidDetectMovingToBackground: + (FormInputAccessoryMediator*)mediator { [self reset]; } @@ -284,14 +288,6 @@ [self.navigator openCreditCardSettings]; } -- (void)openAddCreditCard { - [self reset]; - CommandDispatcher* dispatcher = self.browser->GetCommandDispatcher(); - id<BrowserCoordinatorCommands> handler = - HandlerForProtocol(dispatcher, BrowserCoordinatorCommands); - [handler showAddCreditCard]; -} - #pragma mark - AddressCoordinatorDelegate - (void)openAddressSettings { @@ -358,20 +354,6 @@ completion:nil]; } -#pragma mark - CRWResponderInputView - -- (UIView*)inputView { - BOOL isIPad = ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET; - return isIPad ? nil : self.formInputViewController.view; -} - -- (UIView*)inputAccessoryView { - if (self.formInputAccessoryMediator.inputAccessoryViewActive) { - return self.formInputAccessoryViewController.view; - } - return nil; -} - #pragma mark - Private // Shows confirmation dialog before opening Other passwords.
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.h b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.h index 1affb00..7f73498a7 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.h +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.h
@@ -13,8 +13,10 @@ #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h" #import "ios/web/public/web_state_observer_bridge.h" +@class AppState; @class ChromeCoordinator; @protocol FormInputAccessoryConsumer; +@class FormInputAccessoryMediator; @protocol FormInputSuggestionsProvider; @class ReauthenticationModule; @protocol SecurityAlertCommands; @@ -32,8 +34,14 @@ // Handler in charge of accessory mediator events. @protocol FormInputAccessoryMediatorHandler -// The mediator detected that the keyboard input view should be reset. -- (void)resetFormInputView; +// The mediator detected that the keyboard was hidden and it is no longer +// present on the screen. +- (void)mediatorDidDetectKeyboardHide:(FormInputAccessoryMediator*)mediator; + +// The mediator detected that the keyboard was hidden and it is no longer +// present on the screen. +- (void)mediatorDidDetectMovingToBackground: + (FormInputAccessoryMediator*)mediator; @end @@ -51,15 +59,13 @@ personalDataManager:(autofill::PersonalDataManager*)personalDataManager passwordStore: (scoped_refptr<password_manager::PasswordStore>)passwordStore + appState:(AppState*)appState securityAlertHandler:(id<SecurityAlertCommands>)securityAlertHandler reauthenticationModule:(ReauthenticationModule*)reauthenticationModule; // Unavailable, use initWithConsumer:webStateList: instead. - (instancetype)init NS_UNAVAILABLE; -@property(nonatomic, readonly, getter=isInputAccessoryViewActive) - BOOL inputAccessoryViewActive; - // Disables suggestions updates and asks the consumer to remove the current // ones. - (void)disableSuggestions;
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm index 29a09e5..f312d75 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.mm
@@ -16,6 +16,7 @@ #import "components/autofill/ios/browser/personal_data_manager_observer_bridge.h" #import "components/autofill/ios/form_util/form_activity_observer_bridge.h" #include "components/autofill/ios/form_util/form_activity_params.h" +#import "ios/chrome/app/application_delegate/app_state.h" #import "ios/chrome/browser/autofill/form_input_accessory_view_handler.h" #import "ios/chrome/browser/autofill/form_input_suggestions_provider.h" #import "ios/chrome/browser/autofill/form_suggestion_tab_helper.h" @@ -47,7 +48,8 @@ using base::UmaHistogramEnumeration; -@interface FormInputAccessoryMediator () <FormActivityObserver, +@interface FormInputAccessoryMediator () <AppStateObserver, + FormActivityObserver, FormInputAccessoryViewDelegate, CRWWebStateObserver, KeyboardObserverHelperConsumer, @@ -64,6 +66,9 @@ // The object that manages the currently-shown custom accessory view. @property(nonatomic, weak) id<FormInputSuggestionsProvider> currentProvider; +// YES if the first responder is valid. +@property(nonatomic, assign) BOOL firstResponderIsValid; + // The form input handler. This is in charge of form navigation. @property(nonatomic, strong) FormInputAccessoryViewHandler* formNavigationHandler; @@ -88,6 +93,10 @@ // The WebState this instance is observing. Can be null. @property(nonatomic, assign) web::WebState* webState; +// Contains information about the application state, for example the last window +// that was tapped. +@property(nonatomic, weak) AppState* appState; + // Reauthentication Module used for re-authentication. @property(nonatomic, strong) ReauthenticationModule* reauthenticationModule; @@ -136,6 +145,7 @@ personalDataManager:(autofill::PersonalDataManager*)personalDataManager passwordStore: (scoped_refptr<password_manager::PasswordStore>)passwordStore + appState:(AppState*)appState securityAlertHandler:(id<SecurityAlertCommands>)securityAlertHandler reauthenticationModule:(ReauthenticationModule*)reauthenticationModule { self = [super init]; @@ -169,9 +179,21 @@ NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter]; [defaultCenter addObserver:self + selector:@selector(handleTextInputDidBeginEditing:) + name:UITextFieldTextDidBeginEditingNotification + object:nil]; + [defaultCenter addObserver:self + selector:@selector(handleTextInputDidEndEditing:) + name:UITextFieldTextDidEndEditingNotification + object:nil]; + [defaultCenter addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; + [defaultCenter addObserver:self + selector:@selector(windowDidBecomeKey:) + name:UIWindowDidBecomeKeyNotification + object:nil]; _keyboardObserver = [[KeyboardObserverHelper alloc] init]; _keyboardObserver.consumer = self; @@ -203,6 +225,10 @@ consumer.creditCardButtonHidden = YES; consumer.addressButtonHidden = YES; } + _appState = appState; + if (!base::ios::IsRunningOnIOS14OrLater()) { + [_appState addObserver:self]; + } _reauthenticationModule = reauthenticationModule; _securityAlertHandler = securityAlertHandler; } @@ -229,6 +255,9 @@ _webStateListObserver.reset(); _webStateList = nullptr; } + if (!base::ios::IsRunningOnIOS14OrLater()) { + [_appState removeObserver:self]; + } } - (void)detachFromWebState { @@ -247,10 +276,19 @@ #pragma mark - KeyboardObserverHelperConsumer +- (void)keyboardDidStayOnScreen { + [self.consumer removeAnimationsOnKeyboardView]; +} + - (void)keyboardWillChangeToState:(KeyboardState)keyboardState { if (keyboardState.isVisible) { + [self verifyFirstResponderAndUpdateCustomKeyboardView]; [self updateSuggestionsIfNeeded]; } + [self.consumer keyboardWillChangeToState:keyboardState]; + if (!keyboardState.isVisible) { + [self.handler mediatorDidDetectKeyboardHide:self]; + } } #pragma mark - FormActivityObserver @@ -270,12 +308,12 @@ web::URLVerificationTrustLevel trustLevel; const GURL pageURL(webState->GetCurrentURL(&trustLevel)); if (trustLevel != web::URLVerificationTrustLevel::kAbsolute) { - [self reset]; return; } // Return early, pause and reset if the url is not HTML. if (!web::UrlHasWebScheme(pageURL) || !webState->ContentIsHTML()) { + [self pauseCustomKeyboardView]; [self reset]; return; } @@ -286,14 +324,8 @@ return; } - // Return early and reset if element is a picker. - if (params.field_type == "select-one") { - [self reset]; - return; - } - self.validActivityForAccessoryView = YES; - [GetFirstResponder() reloadInputViews]; + [self continueCustomKeyboardView]; NSString* frameID; if (frame) { @@ -311,6 +343,7 @@ } _lastSeenParams = params; _hasLastSeenParams = YES; + [self.consumer prepareToShowSuggestions]; [self retrieveSuggestionsForForm:params webState:webState]; } @@ -334,12 +367,13 @@ - (void)webStateWasShown:(web::WebState*)webState { DCHECK_EQ(_webState, webState); + [self continueCustomKeyboardView]; [self updateSuggestionsIfNeeded]; } - (void)webStateWasHidden:(web::WebState*)webState { DCHECK_EQ(_webState, webState); - [self reset]; + [self pauseCustomKeyboardView]; } - (void)webState:(web::WebState*)webState didLoadPageWithSuccess:(BOOL)success { @@ -374,10 +408,6 @@ [self updateSuggestionsIfNeeded]; } -- (BOOL)isInputAccessoryViewActive { - return self.validActivityForAccessoryView; -} - #pragma mark - Setters - (void)setCurrentProvider:(id<FormInputSuggestionsProvider>)currentProvider { @@ -397,6 +427,32 @@ } } +// Tells the consumer to pause the custom keyboard view. +- (void)pauseCustomKeyboardView { + [self.consumer pauseCustomKeyboardView]; +} + +// Tells the consumer to continue the custom keyboard view if the last activity +// is valid, the web state is visible, and there is no other text input. +- (void)continueCustomKeyboardView { + // Return early if the form is not a supported one. + if (!self.validActivityForAccessoryView) { + return; + } + + // Return early if the current webstate is not visible. + if (!self.webState || !self.webState->IsVisible()) { + return; + } + + // Return early if the current input is not valid. + if (!self.firstResponderIsValid) { + return; + } + + [self.consumer continueCustomKeyboardView]; +} + // Update the status of the consumer form navigation buttons to match the // handler state. - (void)synchronizeNavigationControls { @@ -439,9 +495,8 @@ - (void)reset { _lastSeenParams = autofill::FormActivityParams(); _hasLastSeenParams = NO; - [self.consumer showAccessorySuggestions:@[]]; - [self.handler resetFormInputView]; + [self.consumer restoreOriginalKeyboardView]; [self.formNavigationHandler reset]; self.suggestionsDisabled = NO; @@ -494,7 +549,75 @@ // Handle applicationDidEnterBackground NSNotification. - (void)applicationDidEnterBackground:(NSNotification*)notification { - [self.handler resetFormInputView]; + [self.handler mediatorDidDetectMovingToBackground:self]; +} + +- (void)windowDidBecomeKey:(NSNotification*)notification { + [self verifyFirstResponderAndUpdateCustomKeyboardView]; +} + +// Verifies that the first responder is a child of WKWebView and that is is not +// a child of SSOSignInViewController. Pause or try to continue the keyboard +// custom view depending on the validity of the first responder. +- (void)verifyFirstResponderAndUpdateCustomKeyboardView { + if (!self.webState) { + self.firstResponderIsValid = NO; + [self pauseCustomKeyboardView]; + return; + } + + BOOL ancestorIsSSOSignInViewController = NO; + BOOL ancestorIsWkWebView = NO; + + UIView* webStateContainerView = self.webState->GetView(); + BOOL webStateInKeyWindow = webStateContainerView.window.isKeyWindow; + if (!base::ios::IsRunningOnIOS14OrLater()) { + // This is a workaround for a bug in iOS multiwindow, in which you can touch + // a webView without the window getting the keyboard focus. The result is + // that you focus a field in the new window gains focus, but keyboard typing + // continue to happen in the other window. + // TODO(crbug.com/1109124): Remove this workaround. + webStateInKeyWindow = + webStateInKeyWindow && + webStateContainerView.window == self.appState.lastTappedWindow; + } + if (webStateInKeyWindow) { + UIResponder* firstResponder = GetFirstResponder(); + while (firstResponder) { + if ([firstResponder isKindOfClass:NSClassFromString(@"WKWebView")]) { + ancestorIsWkWebView = YES; + } + if ([firstResponder + isKindOfClass:NSClassFromString(@"SSOSignInViewController")]) { + ancestorIsSSOSignInViewController = YES; + break; + } + firstResponder = firstResponder.nextResponder; + } + } + self.firstResponderIsValid = webStateInKeyWindow && ancestorIsWkWebView && + !ancestorIsSSOSignInViewController; + if (self.firstResponderIsValid) { + [self continueCustomKeyboardView]; + } else { + [self pauseCustomKeyboardView]; + } +} + +#pragma mark - Keyboard Notifications + +// When any text field or text view (e.g. omnibox, settings search bar) +// begins editing, pause the consumer so it doesn't present the custom view over +// the keyboard. +- (void)handleTextInputDidBeginEditing:(NSNotification*)notification { + self.firstResponderIsValid = NO; + [self pauseCustomKeyboardView]; +} + +// When any text field or text view (e.g. omnibox, settings, card unmask dialog) +// ends editing, continue presenting. +- (void)handleTextInputDidEndEditing:(NSNotification*)notification { + [self verifyFirstResponderAndUpdateCustomKeyboardView]; } #pragma mark - FormSuggestionClient @@ -561,6 +684,11 @@ _personalDataManager->GetProfilesToSuggest().empty(); } +#pragma mark - AppStateObserver +- (void)appState:(AppState*)appState lastTappedWindowChanged:(UIWindow*)window { + [self verifyFirstResponderAndUpdateCustomKeyboardView]; +} + #pragma mark - Tests - (void)injectWebState:(web::WebState*)webState {
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator_unittest.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator_unittest.mm deleted file mode 100644 index 02c1f4eb..0000000 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator_unittest.mm +++ /dev/null
@@ -1,104 +0,0 @@ -// Copyright 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_mediator.h" - -#include "components/autofill/ios/form_util/form_activity_params.h" -#include "components/autofill/ios/form_util/test_form_activity_tab_helper.h" -#import "ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_consumer.h" -#include "ios/chrome/browser/web_state_list/fake_web_state_list_delegate.h" -#include "ios/chrome/browser/web_state_list/web_state_list.h" -#import "ios/chrome/browser/web_state_list/web_state_opener.h" -#import "ios/web/public/test/fakes/fake_navigation_manager.h" -#include "ios/web/public/test/fakes/fake_web_frame.h" -#import "ios/web/public/test/fakes/fake_web_frames_manager.h" -#import "ios/web/public/test/fakes/fake_web_state.h" -#include "ios/web/public/test/web_task_environment.h" -#include "testing/platform_test.h" -#import "third_party/ocmock/OCMock/OCMock.h" -#import "third_party/ocmock/gtest_support.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -class FormInputAccessoryMediatorTest : public PlatformTest { - protected: - FormInputAccessoryMediatorTest() - : test_web_state_(std::make_unique<web::FakeWebState>()), - web_state_list_(&web_state_list_delegate_), - test_form_activity_tab_helper_(test_web_state_.get()) {} - - void SetUp() override { - GURL url("http://foo.com"); - test_web_state_->SetCurrentURL(url); - - test_web_state_->SetWebFramesManager( - std::make_unique<web::FakeWebFramesManager>()); - main_frame_ = web::FakeWebFrame::CreateMainWebFrame(url); - - test_web_state_->SetNavigationManager( - std::make_unique<web::FakeNavigationManager>()); - web_state_list_.InsertWebState(0, std::move(test_web_state_), - WebStateList::INSERT_ACTIVATE, - WebStateOpener()); - - consumer_ = OCMProtocolMock(@protocol(FormInputAccessoryConsumer)); - handler_ = OCMProtocolMock(@protocol(FormInputAccessoryMediatorHandler)); - - mediator_ = - [[FormInputAccessoryMediator alloc] initWithConsumer:consumer_ - handler:handler_ - webStateList:&web_state_list_ - personalDataManager:nil - passwordStore:nil - securityAlertHandler:nil - reauthenticationModule:nil]; - } - web::WebTaskEnvironment task_environment_; - std::unique_ptr<web::FakeWebState> test_web_state_; - std::unique_ptr<web::FakeWebFrame> main_frame_; - FakeWebStateListDelegate web_state_list_delegate_; - WebStateList web_state_list_; - id consumer_; - id handler_; - autofill::TestFormActivityTabHelper test_form_activity_tab_helper_; - FormInputAccessoryMediator* mediator_; -}; - -// Tests FormInputAccessoryMediator can be initialized. -TEST_F(FormInputAccessoryMediatorTest, Init) { - EXPECT_TRUE(mediator_); -} - -// Tests consumer and handler are reset when a field is a picker. -TEST_F(FormInputAccessoryMediatorTest, PickerReset) { - autofill::FormActivityParams params; - params.form_name = "form"; - params.field_identifier = "field_id"; - params.field_type = "select-one"; - params.type = "type"; - params.value = "value"; - params.input_missing = false; - - OCMExpect([handler_ resetFormInputView]); - test_form_activity_tab_helper_.FormActivityRegistered(main_frame_.get(), - params); - [handler_ verify]; -} - -// Tests consumer and handler are not reset when a field is text. -TEST_F(FormInputAccessoryMediatorTest, TextDoesNotReset) { - autofill::FormActivityParams params; - params.form_name = "form"; - params.field_identifier = "field_id"; - params.field_type = "text"; - params.type = "type"; - params.value = "value"; - params.input_missing = false; - - [[handler_ reject] resetFormInputView]; - test_form_activity_tab_helper_.FormActivityRegistered(main_frame_.get(), - params); -}
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.h b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.h index c4c4223..7e009185 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.h +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.h
@@ -14,13 +14,18 @@ @protocol ManualFillAccessoryViewControllerDelegate; // Creates and manages a custom input accessory view while the user is -// interacting with a form. +// interacting with a form. Also handles hiding and showing the default +// accessory view elements. Defaults in paused state and needs to be started by +// calling |continueCustomKeyboardView|. @interface FormInputAccessoryViewController - : UIViewController <FormInputAccessoryConsumer> + : NSObject <FormInputAccessoryConsumer> // Client in charge of handling actions in suggestions. @property(nonatomic, weak) id<FormSuggestionClient> formSuggestionClient; +// Presents a view above the keyboard. +- (void)presentView:(UIView*)view; + // Shows the manual fallback icons as the first option in the suggestions bar, // and locks them in that position. - (void)lockManualFallbackView;
diff --git a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.mm b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.mm index 57f445f..88b47ab 100644 --- a/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.mm +++ b/ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view_controller.mm
@@ -12,7 +12,7 @@ #import "ios/chrome/browser/autofill/form_suggestion_view.h" #import "ios/chrome/browser/ui/autofill/form_input_accessory/form_input_accessory_view.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_accessory_view_controller.h" -#include "ios/chrome/browser/ui/util/ui_util.h" +#import "ios/chrome/browser/ui/util/keyboard_observer_helper.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" #import "ios/chrome/common/ui/util/constraints_ui_util.h" #include "ui/base/device_form_factor.h" @@ -21,13 +21,26 @@ #error "This file requires ARC support." #endif +namespace autofill { +CGFloat const kInputAccessoryHeight = 44.0f; +} // namespace autofill + @interface FormInputAccessoryViewController () < FormSuggestionViewDelegate, ManualFillAccessoryViewControllerDelegate> +// The keyboard replacement view, if any. +@property(nonatomic, weak) UIView* keyboardReplacementView; + +// The custom view that should be shown in the input accessory view. +@property(nonatomic, strong) FormInputAccessoryView* inputAccessoryView; + // The leading view with the suggestions in FormInputAccessoryView. @property(nonatomic, strong) FormSuggestionView* formSuggestionView; +// If this view controller is paused it shouldn't add its views to the keyboard. +@property(nonatomic, getter=isPaused) BOOL paused; + // The manual fill accessory view controller to add at the end of the // suggestions. @property(nonatomic, strong, readonly) @@ -59,6 +72,7 @@ manualFillAccessoryViewControllerDelegate { self = [super init]; if (self) { + _paused = YES; _manualFillAccessoryViewControllerDelegate = manualFillAccessoryViewControllerDelegate; _manualFillAccessoryViewController = @@ -67,35 +81,32 @@ return self; } -- (void)loadView { - [self createFormSuggestionViewIfNeeded]; - - FormInputAccessoryView* formInputAccessoryView = - [[FormInputAccessoryView alloc] init]; - if (IsIPadIdiom()) { - [formInputAccessoryView - setUpWithLeadingView:self.formSuggestionView - customTrailingView:self.manualFillAccessoryViewController.view]; - } else { - formInputAccessoryView.accessibilityViewIsModal = YES; - self.formSuggestionView.trailingView = - self.manualFillAccessoryViewController.view; - [formInputAccessoryView setUpWithLeadingView:self.formSuggestionView - navigationDelegate:self.navigationDelegate]; - formInputAccessoryView.nextButton.enabled = self.formInputNextButtonEnabled; - formInputAccessoryView.previousButton.enabled = - self.formInputPreviousButtonEnabled; - } - self.view = formInputAccessoryView; -} - -// The custom view that should be shown in the input accessory view. -- (FormInputAccessoryView*)formInputAccessoryView { - return base::mac::ObjCCastStrict<FormInputAccessoryView>(self.view); +// Returns YES if the keyboard constraint view is present. This view is the one +// used to constraint any presented view. iPad always presents in a separate +// popover. +- (BOOL)canPresentView { + return (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) || + KeyboardObserverHelper.keyboardLayoutGuide; } #pragma mark - Public +- (void)presentView:(UIView*)view { + if (self.paused || ![self canPresentView]) { + return; + } + DCHECK(view); + DCHECK(!view.superview); + UIView* keyboardView = KeyboardObserverHelper.keyboardView; + view.accessibilityViewIsModal = YES; + [keyboardView.superview addSubview:view]; + view.translatesAutoresizingMaskIntoConstraints = NO; + AddSameConstraints(view, KeyboardObserverHelper.keyboardLayoutGuide); + self.keyboardReplacementView = view; + UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, + view); +} + - (void)lockManualFallbackView { [self.formSuggestionView lockTrailingView]; } @@ -106,9 +117,112 @@ #pragma mark - FormInputAccessoryConsumer +- (void)prepareToShowSuggestions { + // Hides the Manual Fallback icons when there is no proper keyboard to present + // those views. And shows them if there is a keyboard present. + // Hidding |manualFillAccessoryViewController|'s view was causing an issue + // with the Stack Views and Auto Layout in iOS 11, hidding each icon avoids + // it. + if ([self canPresentView]) { + self.manualFillAccessoryViewController.passwordButtonHidden = + self.passwordButtonHidden; + self.manualFillAccessoryViewController.addressButtonHidden = + self.addressButtonHidden; + self.manualFillAccessoryViewController.creditCardButtonHidden = + self.creditCardButtonHidden; + } else { + self.manualFillAccessoryViewController.passwordButtonHidden = YES; + self.manualFillAccessoryViewController.addressButtonHidden = YES; + self.manualFillAccessoryViewController.creditCardButtonHidden = YES; + } +} + +- (void)keyboardWillChangeToState:(KeyboardState)keyboardState { + self.lastKeyboardState = keyboardState; + + if (ui::GetDeviceFormFactor() != ui::DEVICE_FORM_FACTOR_TABLET) { + // On iPhones, when using a hardware keyboard, for most models, there's no + // space to show suggestions because of the on-screen menu button. + self.inputAccessoryView.leadingView.hidden = keyboardState.isHardware; + + // On iPhones when the field is a selector the keyboard becomes a picker. + // Restore the keyboard in these cases, but allow the user to return to see + // the info in Manual Fallback. + if (keyboardState.isPicker) { + [self resetAnimated:NO]; + [self.keyboardReplacementView removeFromSuperview]; + self.keyboardReplacementView = nil; + return; + } + } + + // Create the views if they don't exist already. + if (keyboardState.isVisible && !self.inputAccessoryView) { + [self createFormSuggestionViewIfNeeded]; + + self.inputAccessoryView = [[FormInputAccessoryView alloc] init]; + if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { + [self.inputAccessoryView + setUpWithLeadingView:self.formSuggestionView + customTrailingView:self.manualFillAccessoryViewController.view]; + } else { + self.inputAccessoryView.accessibilityViewIsModal = YES; + self.formSuggestionView.trailingView = + self.manualFillAccessoryViewController.view; + [self.inputAccessoryView setUpWithLeadingView:self.formSuggestionView + navigationDelegate:self.navigationDelegate]; + self.inputAccessoryView.nextButton.enabled = + self.formInputNextButtonEnabled; + self.inputAccessoryView.previousButton.enabled = + self.formInputPreviousButtonEnabled; + } + } + + if (self.inputAccessoryView) { + if (!keyboardState.isVisible || keyboardState.isSplit || self.paused) { + self.inputAccessoryView.hidden = true; + } else { + // Make sure the input accessory is there if needed. + [self prepareToShowSuggestions]; + [self addInputAccessoryViewIfNeeded]; + [self addCustomKeyboardViewIfNeeded]; + self.inputAccessoryView.hidden = false; + } + } +} + - (void)showAccessorySuggestions:(NSArray<FormSuggestion*>*)suggestions { [self createFormSuggestionViewIfNeeded]; [self.formSuggestionView updateSuggestions:suggestions]; + [self addInputAccessoryViewIfNeeded]; +} + +- (void)restoreOriginalKeyboardView { + [self.manualFillAccessoryViewController resetAnimated:NO]; + [self removeCustomInputAccessoryView]; + [self.keyboardReplacementView removeFromSuperview]; + self.keyboardReplacementView = nil; +} + +- (void)pauseCustomKeyboardView { + [self removeCustomInputAccessoryView]; + [self.keyboardReplacementView removeFromSuperview]; + self.paused = YES; +} + +- (void)continueCustomKeyboardView { + self.paused = NO; + // Apply any keyboard state change that happened while this controller was + // paused. + [self keyboardWillChangeToState:self.lastKeyboardState]; +} + +- (void)removeAnimationsOnKeyboardView { + // Work Around. On focus event, keyboardReplacementView is animated but the + // keyboard isn't. Cancel the animation to match the keyboard behavior + if (self.keyboardReplacementView.superview) { + [self.keyboardReplacementView.layer removeAllAnimations]; + } } #pragma mark - Setters @@ -136,7 +250,7 @@ return; } _formInputNextButtonEnabled = formInputNextButtonEnabled; - self.formInputAccessoryView.nextButton.enabled = _formInputNextButtonEnabled; + self.inputAccessoryView.nextButton.enabled = _formInputNextButtonEnabled; } - (void)setFormInputPreviousButtonEnabled:(BOOL)formInputPreviousButtonEnabled { @@ -144,7 +258,7 @@ return; } _formInputPreviousButtonEnabled = formInputPreviousButtonEnabled; - self.formInputAccessoryView.previousButton.enabled = + self.inputAccessoryView.previousButton.enabled = _formInputPreviousButtonEnabled; } @@ -164,6 +278,64 @@ } } +// Removes the custom views related to the input accessory view. +- (void)removeCustomInputAccessoryView { + [self.inputAccessoryView removeFromSuperview]; +} + +- (void)addCustomKeyboardViewIfNeeded { + if (self.isPaused) { + return; + } + if (self.keyboardReplacementView && !self.keyboardReplacementView.superview) { + [self presentView:self.keyboardReplacementView]; + } +} + +// Adds the inputAccessoryView and the backgroundView (on iPads), if those are +// not already in the hierarchy. +- (void)addInputAccessoryViewIfNeeded { + if (self.isPaused) { + return; + } + if (self.inputAccessoryView) { + if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { + // On iPad the keyboard view can change so this updates it when needed. + UIView* keyboardView = KeyboardObserverHelper.keyboardView; + if (!keyboardView) { + return; + } + if (self.inputAccessoryView.superview) { + if (keyboardView == self.inputAccessoryView.superview) { + return; + } + // The keyboard view is a different one. + [self.manualFillAccessoryViewController resetAnimated:NO]; + [self.inputAccessoryView removeFromSuperview]; + } + self.inputAccessoryView.translatesAutoresizingMaskIntoConstraints = NO; + [keyboardView addSubview:self.inputAccessoryView]; + [NSLayoutConstraint activateConstraints:@[ + [self.inputAccessoryView.leadingAnchor + constraintEqualToAnchor:keyboardView.leadingAnchor], + [self.inputAccessoryView.trailingAnchor + constraintEqualToAnchor:keyboardView.trailingAnchor], + [self.inputAccessoryView.bottomAnchor + constraintEqualToAnchor:keyboardView.topAnchor], + [self.inputAccessoryView.heightAnchor + constraintEqualToConstant:autofill::kInputAccessoryHeight] + ]]; + } else if (!self.inputAccessoryView.superview) { // Is not an iPad. + UIResponder* firstResponder = GetFirstResponder(); + if (firstResponder.inputAccessoryView) { + [firstResponder.inputAccessoryView addSubview:self.inputAccessoryView]; + AddSameConstraints(self.inputAccessoryView, + firstResponder.inputAccessoryView); + } + } + } +} + #pragma mark - ManualFillAccessoryViewControllerDelegate - (void)keyboardButtonPressed {
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn index abc968c..f226780 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn +++ b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
@@ -224,6 +224,7 @@ "card_view_controller_egtest.mm", "fallback_coordinator_egtest.mm", "fallback_view_controller_egtest.mm", + "keyboard_observer_egtest.mm", "password_view_controller_egtest.mm", ] deps = [
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h index 7156fd2..4de68977 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h +++ b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h
@@ -11,9 +11,6 @@ // TODO(crbug.com/845472): revise delegate method names. @protocol CardCoordinatorDelegate<FallbackCoordinatorDelegate> -// Open feature to add a credit card. -- (void)openAddCreditCard; - // Opens the cards settings. - (void)openCardSettings;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm index 0a44524..7b5cabf 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.mm
@@ -81,7 +81,11 @@ std::vector<autofill::CreditCard*> cards = _personalDataManager->GetCreditCards(); - _cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards]; + CommandDispatcher* dispatcher = super.browser->GetCommandDispatcher(); + id<BrowserCoordinatorCommands> handler = + HandlerForProtocol(dispatcher, BrowserCoordinatorCommands); + _cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards + handler:handler]; _cardMediator.navigationDelegate = self; _cardMediator.contentInjector = super.injectionHandler; _cardMediator.consumer = _cardViewController; @@ -111,35 +115,23 @@ - (void)openCardSettings { __weak id<CardCoordinatorDelegate> delegate = self.delegate; - __weak __typeof(self) weakSelf = self; [self dismissIfNecessaryThenDoCompletion:^{ [delegate openCardSettings]; if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { // Settings close the popover but don't send a message to reopen it. - [delegate fallbackCoordinatorDidDismissPopover:weakSelf]; - } - }]; -} - -- (void)openAddCreditCard { - __weak id<CardCoordinatorDelegate> delegate = self.delegate; - __weak __typeof(self) weakSelf = self; - [self dismissIfNecessaryThenDoCompletion:^{ - [delegate openAddCreditCard]; - if (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) { - // Settings close the popover but don't send a message to reopen it. - [delegate fallbackCoordinatorDidDismissPopover:weakSelf]; + [delegate fallbackCoordinatorDidDismissPopover:self]; } }]; } - (void)requestFullCreditCard:(ManualFillCreditCard*)card { __weak __typeof(self) weakSelf = self; + __weak ManualFillCreditCard* weakCard = card; [self dismissIfNecessaryThenDoCompletion:^{ if (!weakSelf) return; const autofill::CreditCard* autofillCreditCard = - [weakSelf.cardMediator findCreditCardfromGUID:card.GUID]; + [weakSelf.cardMediator findCreditCardfromGUID:weakCard.GUID]; if (!autofillCreditCard) return; [weakSelf.cardRequester requestFullCreditCard:*autofillCreditCard
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h b/ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h index 923dbc3..65b484d 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h +++ b/ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h
@@ -10,10 +10,7 @@ // Delegate for actions in manual fallback's cards list. @protocol CardListDelegate -// Open feature to add a credit card. -- (void)openAddCreditCard; - -// Open cards settings. +// Opens cards settings. - (void)openCardSettings; // Open credit card unlock, through CVC, prompt.
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm index 8538dbd..faaa5a6a 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/card_view_controller_egtest.mm
@@ -251,12 +251,10 @@ [[EarlGrey selectElementWithMatcher:ManualFallbackCreditCardIconMatcher()] performAction:grey_tap()]; - if (![ChromeEarlGrey isIPadIdiom]) { - // Try to scroll on iPhone. - [[EarlGrey - selectElementWithMatcher:ManualFallbackCreditCardTableViewMatcher()] - performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)]; - } + // Try to scroll. + [[EarlGrey + selectElementWithMatcher:ManualFallbackCreditCardTableViewMatcher()] + performAction:grey_scrollToContentEdge(kGREYContentEdgeBottom)]; // Tap the "Add Credit Cards..." action. [[EarlGrey selectElementWithMatcher:ManualFallbackAddCreditCardsMatcher()]
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm index facd3b3..b7c818f 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator.mm
@@ -57,14 +57,13 @@ - (void)presentFromButton:(UIButton*)button { self.viewController.modalPresentationStyle = UIModalPresentationPopover; - // |topFrontWindow| is used in order to present above the keyboard. This way - // the popover will be dismissed on keyboard interaction and it won't be - // covered when the keyboard is near the top of the screen. - UIWindow* topFrontWindow = - [[[UIApplication sharedApplication] windows] lastObject]; - [topFrontWindow.rootViewController presentViewController:self.viewController - animated:YES - completion:nil]; + // The |button.window.rootViewController| is used in order to present above + // the keyboard. This way the popover will be dismissed on keyboard + // interaction and it won't be covered when the keyboard is near the top of + // the screen. + [button.window.rootViewController presentViewController:self.viewController + animated:YES + completion:nil]; UIPopoverPresentationController* popoverPresentationController = self.viewController.popoverPresentationController;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm index 0d4aa84..1152b48 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_coordinator_egtest.mm
@@ -236,11 +236,29 @@ [[EarlGrey selectElementWithMatcher:ManualFallbackProfilesTableViewMatcher()] assertWithMatcher:grey_notVisible()]; - // Verify icons are not present now that the selected field is a picker. - [[EarlGrey selectElementWithMatcher:ManualFallbackProfilesIconMatcher()] - assertWithMatcher:grey_notVisible()]; - [[EarlGrey selectElementWithMatcher:ManualFallbackKeyboardIconMatcher()] - assertWithMatcher:grey_not(grey_sufficientlyVisible())]; + // TODO(crbug.com/1220724): iOS 15 phones seem to act more like iPads now, + // dismissing the keyboard when tapping on the option above. Confirm that this + // is expected and either fix, or remove this comment. + BOOL isIOS15 = NO; + if (@available(iOS 15, *)) { + isIOS15 = YES; + } + + // Verify the status of the icons. + if ([ChromeEarlGrey isIPadIdiom] || isIOS15) { + // Hidden on iPad. + [[EarlGrey selectElementWithMatcher:ManualFallbackProfilesIconMatcher()] + assertWithMatcher:grey_notVisible()]; + [[EarlGrey selectElementWithMatcher:ManualFallbackKeyboardIconMatcher()] + assertWithMatcher:grey_not(grey_sufficientlyVisible())]; + } else { + [[EarlGrey selectElementWithMatcher:ManualFallbackProfilesIconMatcher()] + assertWithMatcher:grey_sufficientlyVisible()]; + [[EarlGrey selectElementWithMatcher:ManualFallbackProfilesIconMatcher()] + assertWithMatcher:grey_userInteractionEnabled()]; + [[EarlGrey selectElementWithMatcher:ManualFallbackKeyboardIconMatcher()] + assertWithMatcher:grey_not(grey_sufficientlyVisible())]; + } } // Tests that the input accessory view continues working after a picker is
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/keyboard_observer_egtest.mm b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_observer_egtest.mm new file mode 100644 index 0000000..c199e19f --- /dev/null +++ b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_observer_egtest.mm
@@ -0,0 +1,132 @@ +// 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. + +#import "base/ios/ios_util.h" +#include "base/mac/foundation_util.h" +#include "base/strings/sys_string_conversions.h" +#import "base/test/ios/wait_util.h" +#import "ios/chrome/browser/ui/util/keyboard_observer_helper.h" +#import "ios/chrome/browser/ui/util/keyboard_observer_helper_app_interface.h" +#import "ios/chrome/test/earl_grey/chrome_actions.h" +#import "ios/chrome/test/earl_grey/chrome_earl_grey.h" +#import "ios/chrome/test/earl_grey/chrome_matchers.h" +#import "ios/chrome/test/earl_grey/chrome_test_case.h" +#import "ios/chrome/test/scoped_eg_synchronization_disabler.h" +#import "ios/testing/earl_grey/earl_grey_test.h" +#include "net/test/embedded_test_server/embedded_test_server.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +// TODO(crbug.com/1015113): The EG2 macro is breaking indexing for some reason +// without the trailing semicolon. For now, disable the extra semi warning +// so Xcode indexing works for the egtest. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat-extra-semi" +GREY_STUB_CLASS_IN_APP_MAIN_QUEUE(KeyboardObserverHelperAppInterface); +#pragma clang diagnostic pop + +using base::TimeDelta; +using base::test::ios::kWaitForUIElementTimeout; +using base::test::ios::SpinRunLoopWithMinDelay; +using base::test::ios::WaitUntilConditionOrTimeout; +using chrome_test_util::TapWebElementWithId; +using chrome_test_util::WebViewMatcher; + +namespace { + +const std::string kFormElementID1 = "username"; +const std::string kFormElementID2 = "otherstuff"; +const std::string kFormElementSubmit = "submit"; + +// If an element is focused in the webview, returns its ID. Returns an empty +// NSString otherwise. +NSString* GetFocusedElementID() { + NSString* javaScript = @"(function() {" + " return document.activeElement.id;" + "})();"; + return [ChromeEarlGrey executeJavaScript:javaScript]; +} + +// Verifies that |elementId| is the selected element in the web page. +void AssertElementIsFocused(const std::string& element_id) { + NSString* description = + [NSString stringWithFormat: + @"Timeout waiting for the focused element in " + @"the webview to be \"%@\"", + base::SysUTF8ToNSString(element_id.c_str())]; + ConditionBlock condition = ^{ + return base::SysNSStringToUTF8(GetFocusedElementID()) == element_id; + }; + GREYAssert(WaitUntilConditionOrTimeout(10, condition), description); +} + +// Helper to tap a web element. +void TapOnWebElementWithID(const std::string& elementID) { + [[EarlGrey selectElementWithMatcher:WebViewMatcher()] + performAction:TapWebElementWithId(elementID)]; +} + +} // namespace + +// Tests Mannual Fallback keyboard observer for form handling. +@interface KeyboardObserverTestCase : ChromeTestCase + +// Observer to be tested. +@property(nonatomic, strong) KeyboardObserverHelper* keyboardObserverHelper; + +@end + +@implementation KeyboardObserverTestCase + +- (void)setUp { + [super setUp]; + self.keyboardObserverHelper = + [KeyboardObserverHelperAppInterface appSharedInstance]; + + GREYAssertTrue(self.testServer->Start(), @"Test server failed to start."); + const GURL URL = self.testServer->GetURL("/multi_field_form.html"); + [ChromeEarlGrey loadURL:URL]; + [ChromeEarlGrey waitForWebStateContainingText:"hello!"]; +} + +- (void)tearDown { + self.keyboardObserverHelper = nil; + [super tearDown]; +} + +// TODO(crbug.com/1173513) This test is flaky on the ios simulator bots. +#if TARGET_OS_SIMULATOR +#define MAYBE_testKeyboardHideState DISABLED_testKeyboardHideState +#else +#define MAYBE_testKeyboardHideState testKeyboardHideState +#endif +// Tests that when the keyboard actually dismiss the right callback is done. +- (void)MAYBE_testKeyboardHideState { + // Opening the keyboard from a webview blocks EarlGrey's synchronization. + ScopedSynchronizationDisabler disabler; + + // Brings up the keyboard by tapping on one of the form's field. + TapOnWebElementWithID(kFormElementID1); + SpinRunLoopWithMinDelay(TimeDelta::FromSeconds(kWaitForUIElementTimeout)); + + // Verifies that the taped element is focused. + AssertElementIsFocused(kFormElementID1); + + // Verify the visible state. + KeyboardObserverHelper* observer = self.keyboardObserverHelper; + GREYAssertTrue(observer.keyboardState.isVisible, + @"Keyboard should be visible."); + + // Tap the "Submit" button, and let the run loop spin. + TapOnWebElementWithID(kFormElementSubmit); + SpinRunLoopWithMinDelay(TimeDelta::FromSeconds(kWaitForUIElementTimeout)); + + // Verify the state changed. + GREYAssertFalse(observer.keyboardState.isVisible, + @"Keyboard shouldn't be visible."); +} + +@end
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_mediator.mm index 067fffb..46b658d 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_mediator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_address_mediator.mm
@@ -17,7 +17,6 @@ #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_injector.h" #import "ios/chrome/browser/ui/list_model/list_model.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" -#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.h b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.h index e50077a7..e0e8abf 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.h +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.h
@@ -41,6 +41,7 @@ // The designated initializer. |cards| must not be nil. - (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards + handler:(id<BrowserCoordinatorCommands>)handler NS_DESIGNATED_INITIALIZER; // Unavailable. Use |initWithCards:|.
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.mm index e8ec8c7..7f25466 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_mediator.mm
@@ -19,9 +19,9 @@ #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_injector.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card+CreditCard.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_credit_card.h" +#import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h" #import "ios/chrome/browser/ui/list_model/list_model.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" -#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "ui/base/l10n/l10n_util_mac.h" @@ -49,14 +49,19 @@ // All available credit cards. @property(nonatomic, assign) std::vector<autofill::CreditCard*> cards; +// The command handler used by this Mediator. +@property(nonatomic, weak) id<BrowserCoordinatorCommands> handler; + @end @implementation ManualFillCardMediator -- (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards { +- (instancetype)initWithCards:(std::vector<autofill::CreditCard*>)cards + handler:(id<BrowserCoordinatorCommands>)handler { self = [super init]; if (self) { _cards = cards; + _handler = handler; } return self; } @@ -136,7 +141,7 @@ action:^{ base::RecordAction(base::UserMetricsAction( "ManualFallback_CreditCard_OpenAddCreditCard")); - [weakSelf.navigationDelegate openAddCreditCard]; + [weakSelf.handler showAddCreditCard]; }]; addCreditCardsItem.accessibilityIdentifier = manual_fill::kAddCreditCardsAccessibilityIdentifier;
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_coordinator.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_coordinator.mm index 70bacf5..1199fa9 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_coordinator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_coordinator.mm
@@ -105,10 +105,18 @@ #pragma mark - PasswordListNavigator - (void)openAllPasswordsList { - __weak id<PasswordCoordinatorDelegate> delegate = self.delegate; - [self dismissIfNecessaryThenDoCompletion:^{ - [delegate openAllPasswordsPicker]; - }]; + // On iPad, first dismiss the popover before the new view is presented. + __weak __typeof(self) weakSelf = self; + if ((ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) && + self.passwordViewController.presentingViewController) { + [self.passwordViewController + dismissViewControllerAnimated:true + completion:^{ + [weakSelf openAllPasswordsList]; + }]; + return; + } + [self.delegate openAllPasswordsPicker]; } - (void)openPasswordSettings {
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_mediator.mm b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_mediator.mm index 0c7dcf4..23c5748 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_mediator.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/manual_fill_password_mediator.mm
@@ -28,7 +28,6 @@ #import "ios/chrome/browser/ui/autofill/manual_fill/password_list_navigator.h" #import "ios/chrome/browser/ui/list_model/list_model.h" #import "ios/chrome/browser/ui/table_view/table_view_model.h" -#import "ios/chrome/browser/ui/util/uikit_ui_util.h" #include "ios/chrome/grit/ios_strings.h" #import "ios/web/public/web_state_observer_bridge.h" #include "ui/base/l10n/l10n_util_mac.h"
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index 2e1ff41..0626260 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -401,7 +401,6 @@ browser:self.browser]; self.formInputAccessoryCoordinator.navigator = self; [self.formInputAccessoryCoordinator start]; - self.viewController.inputViewProvider = self.formInputAccessoryCoordinator; if (base::FeatureList::IsEnabled(kDownloadMobileConfigFile)) { self.mobileConfigCoordinator = [[MobileConfigCoordinator alloc] @@ -647,6 +646,7 @@ } - (void)showAddCreditCard { + [self.formInputAccessoryCoordinator reset]; [self.addCreditCardCoordinator start]; }
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h index 335a501..6084f9a 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -23,7 +23,6 @@ @class BrowserContainerViewController; @class BrowserViewControllerDependencyFactory; @class CommandDispatcher; -@protocol CRWResponderInputView; @class DefaultBrowserPromoNonModalScheduler; @protocol DefaultPromoNonModalPresentationDelegate; @class ToolbarAccessoryPresenter; @@ -93,9 +92,6 @@ @property(nonatomic, weak) id<DefaultPromoNonModalPresentationDelegate> nonModalPromoPresentationDelegate; -// The input view provider for this browser view controller. -@property(nonatomic, weak) id<CRWResponderInputView> inputViewProvider; - // Whether the receiver is currently the primary BVC. - (void)setPrimary:(BOOL)primary;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index 8d4a588f..ac4da5c4 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -190,7 +190,6 @@ #import "ios/public/provider/chrome/browser/ui/fullscreen_provider.h" #include "ios/public/provider/chrome/browser/voice/voice_search_controller.h" #include "ios/public/provider/chrome/browser/voice/voice_search_provider.h" -#import "ios/web/common/crw_input_view_provider.h" #include "ios/web/common/features.h" #include "ios/web/common/url_scheme_util.h" #import "ios/web/public/deprecated/crw_js_injection_receiver.h" @@ -3956,11 +3955,6 @@ completionHandler(configuration); } -- (id<CRWResponderInputView>)webStateInputViewProvider: - (web::WebState*)webState { - return self.inputViewProvider; -} - #pragma mark - CRWWebStateDelegate helpers // Evaluates Javascript asynchronously using the current page context.
diff --git a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm index cd7e2a4..11c78c05 100644 --- a/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm +++ b/ios/chrome/browser/ui/settings/autofill/autofill_add_credit_card_view_controller.mm
@@ -124,10 +124,6 @@ return hasUserInput; } -- (BOOL)canBecomeFirstResponder { - return YES; -} - #pragma mark - ChromeTableViewController - (void)loadModel {
diff --git a/ios/chrome/browser/ui/util/keyboard_observer_helper.h b/ios/chrome/browser/ui/util/keyboard_observer_helper.h index adc1baf..10cf6f2 100644 --- a/ios/chrome/browser/ui/util/keyboard_observer_helper.h +++ b/ios/chrome/browser/ui/util/keyboard_observer_helper.h
@@ -20,11 +20,21 @@ // Is YES if a hardware keyboard is in use and only the top part of the // software keyboard is showing. BOOL isHardware; + // Is YES if a picker (iPhone only) is currently displayed instead of + // keyboard. + BOOL isPicker; } KeyboardState; // Delegate informed about the visible/hidden state of the keyboard. @protocol KeyboardObserverHelperConsumer <NSObject> +// Indicates that |UIKeyboardWillHideNotification| was posted but the keyboard +// was not hidden. For example, this can happen when jumping between fields. +// Deprecated. This is not needed on iOS 13 and will be deleted once support for +// iOS 12 is removed. +- (void)keyboardDidStayOnScreen API_DEPRECATED("Not needed on iOS >12", + ios(11.0, 13.0)); + // Indicates that the keyboard state changed, at least on one of the // |KeyboardState| aspects. - (void)keyboardWillChangeToState:(KeyboardState)keyboardState; @@ -34,6 +44,17 @@ // Helper to observe the keyboard and report updates. @interface KeyboardObserverHelper : NSObject +// Keyboard's UIView based on some known, undocumented classes. |nil| if the +// keyboard is not present or found. +// This can break on any iOS update to keyboard architecture. +@property(class, readonly, nonatomic) UIView* keyboardView; + +// Best layout guide for the keyboard including the prediction part of it. |nil| +// if the keyboard is not present or found. +// This can break on any iOS update to keyboard architecture. +@property(class, readonly, nonatomic) id<EdgeLayoutGuideProvider> + keyboardLayoutGuide; + // Flag that indicates if the keyboard is on screen. // TODO(crbug.com/974226): look into deprecating keyboardOnScreen for // isKeyboardVisible. @@ -42,6 +63,10 @@ // The consumer to inform of the keyboard state changes. @property(nonatomic, weak) id<KeyboardObserverHelperConsumer> consumer; +// Current keyboard state. +@property(nonatomic, readonly, getter=getKeyboardState) + KeyboardState keyboardState; + @end #endif // IOS_CHROME_BROWSER_UI_UTIL_KEYBOARD_OBSERVER_HELPER_H_
diff --git a/ios/chrome/browser/ui/util/keyboard_observer_helper.mm b/ios/chrome/browser/ui/util/keyboard_observer_helper.mm index 8059381f..bdc2ff2 100644 --- a/ios/chrome/browser/ui/util/keyboard_observer_helper.mm +++ b/ios/chrome/browser/ui/util/keyboard_observer_helper.mm
@@ -90,18 +90,74 @@ return nil; } ++ (id<EdgeLayoutGuideProvider>)keyboardLayoutGuide { + // [iOS 13] Sometimes there is an input assistant provided by the system. + // I.e. autocorrection or passwords. A composed guide is needed because + // there isn't a view "hugging" the accessory and the keyboard. This used to + // be merged with the keyboard < iOS 13. + // + // [iOS 13][iOS 12][iPhone][iPhoneX]: "Backdrop" works even when a picker is + // present. + for (NSString* name in @[ @"InputAssistant", @"Backdrop" ]) { + id<EdgeLayoutGuideProvider> layout = + [self keyboardLayoutGuideInHostView:self.keyboardView withName:name]; + if (layout) { + return layout; + } + } + return nil; +} + #pragma mark - Keyboard Notifications +- (void)keyboardWillDidChangeFrame:(NSNotification*)notification { + [self updateKeyboardState]; +} + - (void)keyboardWillShow:(NSNotification*)notification { self.keyboardOnScreen = YES; } - (void)keyboardWillHide:(NSNotification*)notification { self.keyboardOnScreen = NO; +#if !defined(__IPHONE_13_0) || __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_13_0 + dispatch_async(dispatch_get_main_queue(), ^{ + if (self.keyboardOnScreen) { + [self.consumer keyboardDidStayOnScreen]; + } + }); +#endif } -- (void)keyboardWillDidChangeFrame:(NSNotification*)notification { - [self updateKeyboardState]; +#pragma mark - Private + +// Returns a layout guide defined by the top edge of |view| and its window. ++ (id<EdgeLayoutGuideProvider>)topEdgeLayoutGuideForView:(UIView*)view { + ComposedEdgeLayoutGuide* layoutGuide = [[ComposedEdgeLayoutGuide alloc] init]; + layoutGuide.baseLayoutGuide = view.window; + layoutGuide.topAnchorProvider = view; + return layoutGuide; +} + +// This searches in the passed view hierarchy for the best Layout Guide for the +// keyboard. Unexpected behaviour on iPad. ++ (id<EdgeLayoutGuideProvider>)keyboardLayoutGuideInHostView:(UIView*)hostView + withName:(NSString*)name { + DCHECK_NE(ui::GetDeviceFormFactor(), ui::DEVICE_FORM_FACTOR_TABLET); + + for (UIView* subview in hostView.subviews) { + if ([NSStringFromClass([subview class]) containsString:name]) { + return [self topEdgeLayoutGuideForView:subview]; + } + // Continue searching recursively. + id<EdgeLayoutGuideProvider> found = + [self keyboardLayoutGuideInHostView:subview withName:name]; + if (found) { + return found; + } + } + + return nil; } #pragma mark Keyboard State Detection @@ -117,14 +173,16 @@ BOOL isUndocked = CGRectGetMaxY(keyboardFrame) < windowHeight; BOOL isHardware = isVisible && CGRectGetMaxY(keyboardFrame) > windowHeight; BOOL isSplit = [self viewIsSplit:keyboardView]; + BOOL isPicker = [self containsPickerView:keyboardView]; // Only notify if a change is detected. if (isVisible != self.keyboardState.isVisible || isUndocked != self.keyboardState.isUndocked || isSplit != self.keyboardState.isSplit || isHardware != self.keyboardState.isHardware || + isPicker != self.keyboardState.isPicker || keyboardView != self.keyboardView) { - self.keyboardState = {isVisible, isUndocked, isSplit, isHardware}; + self.keyboardState = {isVisible, isUndocked, isSplit, isHardware, isPicker}; self.keyboardView = keyboardView; dispatch_async(dispatch_get_main_queue(), ^{ [self.consumer keyboardWillChangeToState:self.keyboardState]; @@ -132,6 +190,17 @@ } } +// Checks for a picker UIView* under the given |view|. +- (BOOL)containsPickerView:(UIView*)view { + for (UIView* subview in view.subviews) { + if ([NSStringFromClass([subview class]) rangeOfString:@"Picker"].location != + NSNotFound) { + return YES; + } + } + return NO; +} + // Checks for the presence of split image views under the given |view|. - (BOOL)viewIsSplit:(UIView*)view { // Don't waste time going through the accessory views.
diff --git a/ios/chrome/test/BUILD.gn b/ios/chrome/test/BUILD.gn index d88e19f..ff3f1a9a 100644 --- a/ios/chrome/test/BUILD.gn +++ b/ios/chrome/test/BUILD.gn
@@ -271,7 +271,6 @@ "//ios/chrome/browser/ui/authentication/unified_consent:unit_tests", "//ios/chrome/browser/ui/authentication/unified_consent/identity_chooser:unit_tests", "//ios/chrome/browser/ui/autofill/cells:unit_tests", - "//ios/chrome/browser/ui/autofill/form_input_accessory:unit_tests", "//ios/chrome/browser/ui/autofill/manual_fill:unit_tests", "//ios/chrome/browser/ui/badges:unit_tests", "//ios/chrome/browser/ui/bookmarks:unit_tests",
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index d52c50c..3d44de6e 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -d4f904b5b2d4fb24917d4368c1154910fdee214c \ No newline at end of file +5758fca70ceb8d8d04605a866916a5596484eddc \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index e5e7e92..46b62dc 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -8cd256055f534be74672d465d704fe5eab2b73d9 \ No newline at end of file +8b57ebf8888a7d7b1e1c35a49c6b75d7a1043696 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index 467b03e..4bbb3b1 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -f551f54ac170a1fd7bd272616e06aa8c578aac96 \ No newline at end of file +b625cebcb6002f857ee5b512a587b7eba8acb9cb \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 index d8f808d..beedcfe 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -9b3e650e63408d6cf31647ff7f512d10fa141ac3 \ No newline at end of file +7f3d8c837d9b5ce6624273add879db2397856b71 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index 4288c7fc..a57eec2 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -ad880d6efb667c4015438b0391c17f6d2e3dce24 \ No newline at end of file +3c7db06002ffea8f4d12215d30fac575dc15857b \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index 06d50a9..39ad967 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -ea9ae747ef03deef2deccbffcab4305bd27f7d38 \ No newline at end of file +7e6276046622ea59f6aa6607121e5bba860c8d4d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 65f4ff4..364dac6 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -b9c2b52bf1eb2ac459fea409886ee6214aabaeb2 \ No newline at end of file +472f21d2c5001e3442877cd0e3b4c1e33545aaa7 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index 0ef872a9..6499d1b 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -f1f0b7cb590d35f5bb81a3b2b448025724430b80 \ No newline at end of file +1d4511587f15bde1beb34275b5027254f9ec26d8 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index d0d4fcc0..7f9342e 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -f69c57ce23c7008b44c53a6d602a5658528686b9 \ No newline at end of file +562cf3ee5e25a0a23db592744151e0f146f96840 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index e895290..fcde164 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -0b9c36d15a347d8225576e488df4ab3aba721ccc \ No newline at end of file +c19798cff577bc886cccb3d407e83e067540f28a \ No newline at end of file
diff --git a/services/device/device_posture/device_posture_platform_provider_android.cc b/services/device/device_posture/device_posture_platform_provider_android.cc index cacae9e..23489e71 100644 --- a/services/device/device_posture/device_posture_platform_provider_android.cc +++ b/services/device/device_posture/device_posture_platform_provider_android.cc
@@ -14,7 +14,7 @@ device::mojom::DevicePostureType DevicePosturePlatformProviderAndroid::GetDevicePosture() { - return device::mojom::DevicePostureType::kNoFold; + return device::mojom::DevicePostureType::kContinuous; } void DevicePosturePlatformProviderAndroid::Shutdown() {}
diff --git a/services/device/device_posture/device_posture_platform_provider_win.cc b/services/device/device_posture/device_posture_platform_provider_win.cc index 6551f4d5..5e29872 100644 --- a/services/device/device_posture/device_posture_platform_provider_win.cc +++ b/services/device/device_posture/device_posture_platform_provider_win.cc
@@ -13,7 +13,7 @@ DevicePosturePlatformProviderWin::~DevicePosturePlatformProviderWin() = default; mojom::DevicePostureType DevicePosturePlatformProviderWin::GetDevicePosture() { - return mojom::DevicePostureType::kNoFold; + return mojom::DevicePostureType::kContinuous; } void DevicePosturePlatformProviderWin::Shutdown() {}
diff --git a/services/device/public/cpp/test/fake_device_posture_provider.h b/services/device/public/cpp/test/fake_device_posture_provider.h index 6b912df..e31511b 100644 --- a/services/device/public/cpp/test/fake_device_posture_provider.h +++ b/services/device/public/cpp/test/fake_device_posture_provider.h
@@ -35,7 +35,8 @@ void DispatchPostureChanges(); mojo::ReceiverSet<mojom::DevicePostureProvider> receivers_; mojo::RemoteSet<mojom::DevicePostureProviderClient> clients_; - mojom::DevicePostureType current_posture_ = mojom::DevicePostureType::kNoFold; + mojom::DevicePostureType current_posture_ = + mojom::DevicePostureType::kContinuous; }; } // namespace device
diff --git a/services/device/public/mojom/device_posture_provider.mojom b/services/device/public/mojom/device_posture_provider.mojom index 56d41653..d341a36 100644 --- a/services/device/public/mojom/device_posture_provider.mojom +++ b/services/device/public/mojom/device_posture_provider.mojom
@@ -7,12 +7,9 @@ // An enum representing the posture of device, or an no type fold state. // Defined https://w3c.github.io/device-posture/#posture-types enum DevicePostureType { - kNoFold, - kLaptop, - kFlat, - kTent, - kTablet, - kBook, + kContinuous, + kFolded, + kFoldedOver, }; // This interface is used to get the posture of the device from
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index fe957137..f6aec05 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -10666,7 +10666,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -10752,7 +10752,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -10924,7 +10924,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -11010,7 +11010,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 6f2f9c7..47c3d11 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -49495,7 +49495,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49582,7 +49582,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49756,7 +49756,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -49843,7 +49843,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50089,7 +50089,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50175,7 +50175,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50347,7 +50347,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50433,7 +50433,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50679,7 +50679,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50765,7 +50765,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -50937,7 +50937,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M92", - "revision": "version:92.0.4515.108" + "revision": "version:92.0.4515.109" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -51023,7 +51023,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M93", - "revision": "version:93.0.4577.5" + "revision": "version:93.0.4577.6" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index 79c7f974..8f3c6fd5 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -431,7 +431,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M93', - 'revision': 'version:93.0.4577.5', + 'revision': 'version:93.0.4577.6', } ], }, @@ -455,7 +455,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M92', - 'revision': 'version:92.0.4515.108', + 'revision': 'version:92.0.4515.109', } ], }, @@ -503,7 +503,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M93', - 'revision': 'version:93.0.4577.5', + 'revision': 'version:93.0.4577.6', } ], }, @@ -527,7 +527,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M92', - 'revision': 'version:92.0.4515.108', + 'revision': 'version:92.0.4515.109', } ], }, @@ -575,7 +575,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M93', - 'revision': 'version:93.0.4577.5', + 'revision': 'version:93.0.4577.6', } ], }, @@ -599,7 +599,7 @@ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M92', - 'revision': 'version:92.0.4515.108', + 'revision': 'version:92.0.4515.109', } ], },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 8185e3c..dcdde15f 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -961,7 +961,7 @@ ], "experiments": [ { - "name": "Enabled", + "name": "Enabled_20210611", "enable_features": [ "AutofillAssistantInCctTriggering", "AutofillAssistantUrlHeuristics" @@ -7493,6 +7493,25 @@ ] } ], + "SettingsLandingPageRedesign": [ + { + "platforms": [ + "chromeos", + "chromeos_lacros", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "SettingsLandingPageRedesign" + ] + } + ] + } + ], "SettingsRefresh": [ { "platforms": [ @@ -9045,6 +9064,21 @@ ] } ], + "VirtualKeyboardBorderedKey": [ + { + "platforms": [ + "chromeos" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "VirtualKeyboardBorderedKey" + ] + } + ] + } + ], "VisualFeaturesInPasswordProtectionPingsAndroid": [ { "platforms": [
diff --git a/third_party/blink/renderer/core/DEPS b/third_party/blink/renderer/core/DEPS index 1c88f94e..823fcc8 100644 --- a/third_party/blink/renderer/core/DEPS +++ b/third_party/blink/renderer/core/DEPS
@@ -74,6 +74,8 @@ "+mojo/public/cpp/system", "+mojo/public/mojom/base", "+services/data_decoder/public/mojom/resource_snapshot_for_web_bundle.mojom-blink.h", + "+services/device/public/mojom/device_posture_provider.mojom-blink.h", + "+services/device/public/mojom/device_posture_provider.mojom-blink-forward.h", "+services/device/public/mojom/wake_lock.mojom-blink.h", "+services/metrics/public", "+services/network/public/cpp/cors/cors_error_status.h",
diff --git a/third_party/blink/renderer/core/css/css_value_keywords.json5 b/third_party/blink/renderer/core/css/css_value_keywords.json5 index d2e5bfb..b262a33f 100644 --- a/third_party/blink/renderer/core/css/css_value_keywords.json5 +++ b/third_party/blink/renderer/core/css/css_value_keywords.json5
@@ -1394,12 +1394,9 @@ "single-fold-horizontal", // (device-posture) media feature - "no-fold", - "laptop", - // flat, - "tent", - "tablet", - "book", + "continuous", + "folded", + "folded-over", // scrollbar-gutter // auto
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator.cc b/third_party/blink/renderer/core/css/media_query_evaluator.cc index bb58a7b..95c770e 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator.cc +++ b/third_party/blink/renderer/core/css/media_query_evaluator.cc
@@ -29,9 +29,9 @@ #include "third_party/blink/renderer/core/css/media_query_evaluator.h" +#include "services/device/public/mojom/device_posture_provider.mojom-blink.h" #include "third_party/blink/public/common/css/forced_colors.h" #include "third_party/blink/public/common/css/navigation_controls.h" -#include "third_party/blink/renderer/core/css/media_values.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" #include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom-blink.h" #include "third_party/blink/renderer/core/css/css_primitive_value.h" @@ -41,6 +41,7 @@ #include "third_party/blink/renderer/core/css/media_features.h" #include "third_party/blink/renderer/core/css/media_list.h" #include "third_party/blink/renderer/core/css/media_query.h" +#include "third_party/blink/renderer/core/css/media_values.h" #include "third_party/blink/renderer/core/css/media_values_dynamic.h" #include "third_party/blink/renderer/core/css/resolver/media_query_result.h" #include "third_party/blink/renderer/core/css_value_keywords.h" @@ -57,6 +58,7 @@ namespace blink { +using device::mojom::blink::DevicePostureType; using mojom::blink::HoverType; using mojom::blink::PointerType; @@ -975,20 +977,14 @@ DCHECK(value.is_id); - DevicePosture device_posture = media_values.GetDevicePosture(); + DevicePostureType device_posture = media_values.GetDevicePosture(); switch (value.id) { - case CSSValueID::kNoFold: - return device_posture == DevicePosture::kNoFold; - case CSSValueID::kLaptop: - return device_posture == DevicePosture::kLaptop; - case CSSValueID::kFlat: - return device_posture == DevicePosture::kFlat; - case CSSValueID::kTent: - return device_posture == DevicePosture::kTent; - case CSSValueID::kTablet: - return device_posture == DevicePosture::kTablet; - case CSSValueID::kBook: - return device_posture == DevicePosture::kBook; + case CSSValueID::kContinuous: + return device_posture == DevicePostureType::kContinuous; + case CSSValueID::kFolded: + return device_posture == DevicePostureType::kFolded; + case CSSValueID::kFoldedOver: + return device_posture == DevicePostureType::kFoldedOver; default: NOTREACHED(); return false;
diff --git a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc index 9f11c65..f5d5e848 100644 --- a/third_party/blink/renderer/core/css/media_query_evaluator_test.cc +++ b/third_party/blink/renderer/core/css/media_query_evaluator_test.cc
@@ -280,70 +280,28 @@ MediaQueryEvaluatorTestCase g_device_posture_none_cases[] = { {"(device-posture)", true}, - {"(device-posture: laptop)", false}, - {"(device-posture: flat)", false}, - {"(device-posture: tent)", false}, - {"(device-posture: tablet)", false}, - {"(device-posture: book)", false}, - {"(device-posture: no-fold)", true}, + {"(device-posture: continuous)", true}, + {"(device-posture: folded)", false}, + {"(device-posture: folded-over)", false}, {"(device-posture: 15)", false}, {"(device-posture: 2px)", false}, {"(device-posture: 16/9)", false}, {nullptr, false} // Do not remove the terminator line. }; -MediaQueryEvaluatorTestCase g_device_posture_laptop_cases[] = { +MediaQueryEvaluatorTestCase g_device_posture_folded_cases[] = { {"(device-posture)", true}, - {"(device-posture: laptop)", true}, - {"(device-posture: flat)", false}, - {"(device-posture: tent)", false}, - {"(device-posture: tablet)", false}, - {"(device-posture: book)", false}, - {"(device-posture: no-fold)", false}, + {"(device-posture: continuous)", false}, + {"(device-posture: folded)", true}, + {"(device-posture: folded-over)", false}, {nullptr, false} // Do not remove the terminator line. }; -MediaQueryEvaluatorTestCase g_device_posture_flat_cases[] = { +MediaQueryEvaluatorTestCase g_device_posture_folded_over_cases[] = { {"(device-posture)", true}, - {"(device-posture: laptop)", false}, - {"(device-posture: flat)", true}, - {"(device-posture: tent)", false}, - {"(device-posture: tablet)", false}, - {"(device-posture: book)", false}, - {"(device-posture: no-fold)", false}, - {nullptr, false} // Do not remove the terminator line. -}; - -MediaQueryEvaluatorTestCase g_device_posture_tent_cases[] = { - {"(device-posture)", true}, - {"(device-posture: laptop)", false}, - {"(device-posture: flat)", false}, - {"(device-posture: tent)", true}, - {"(device-posture: tablet)", false}, - {"(device-posture: book)", false}, - {"(device-posture: no-fold)", false}, - {nullptr, false} // Do not remove the terminator line. -}; - -MediaQueryEvaluatorTestCase g_device_posture_tablet_cases[] = { - {"(device-posture)", true}, - {"(device-posture: laptop)", false}, - {"(device-posture: flat)", false}, - {"(device-posture: tent)", false}, - {"(device-posture: tablet)", true}, - {"(device-posture: book)", false}, - {"(device-posture: no-fold)", false}, - {nullptr, false} // Do not remove the terminator line. -}; - -MediaQueryEvaluatorTestCase g_device_posture_book_cases[] = { - {"(device-posture)", true}, - {"(device-posture: laptop)", false}, - {"(device-posture: flat)", false}, - {"(device-posture: tent)", false}, - {"(device-posture: tablet)", false}, - {"(device-posture: book)", true}, - {"(device-posture: no-fold)", false}, + {"(device-posture: continuous)", false}, + {"(device-posture: folded)", false}, + {"(device-posture: folded-over)", true}, {nullptr, false} // Do not remove the terminator line. }; @@ -595,46 +553,24 @@ MediaValuesCached::MediaValuesCachedData data; { - data.device_posture = DevicePosture::kNoFold; + data.device_posture = device::mojom::blink::DevicePostureType::kContinuous; MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); - MediaQueryEvaluator media_query_evaluator(*media_values); TestMQEvaluator(g_device_posture_none_cases, media_query_evaluator); } { - data.device_posture = DevicePosture::kLaptop; + data.device_posture = device::mojom::blink::DevicePostureType::kFolded; MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); MediaQueryEvaluator media_query_evaluator(*media_values); - TestMQEvaluator(g_device_posture_laptop_cases, media_query_evaluator); + TestMQEvaluator(g_device_posture_folded_cases, media_query_evaluator); } { - data.device_posture = DevicePosture::kFlat; + data.device_posture = device::mojom::blink::DevicePostureType::kFoldedOver; MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); MediaQueryEvaluator media_query_evaluator(*media_values); - TestMQEvaluator(g_device_posture_flat_cases, media_query_evaluator); - } - - { - data.device_posture = DevicePosture::kTent; - MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); - MediaQueryEvaluator media_query_evaluator(*media_values); - TestMQEvaluator(g_device_posture_tent_cases, media_query_evaluator); - } - - { - data.device_posture = DevicePosture::kTablet; - MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); - MediaQueryEvaluator media_query_evaluator(*media_values); - TestMQEvaluator(g_device_posture_tablet_cases, media_query_evaluator); - } - - { - data.device_posture = DevicePosture::kBook; - MediaValues* media_values = MakeGarbageCollected<MediaValuesCached>(data); - MediaQueryEvaluator media_query_evaluator(*media_values); - TestMQEvaluator(g_device_posture_book_cases, media_query_evaluator); + TestMQEvaluator(g_device_posture_folded_over_cases, media_query_evaluator); } }
diff --git a/third_party/blink/renderer/core/css/media_query_exp.cc b/third_party/blink/renderer/core/css/media_query_exp.cc index 39e4f22..55b0073 100644 --- a/third_party/blink/renderer/core/css/media_query_exp.cc +++ b/third_party/blink/renderer/core/css/media_query_exp.cc
@@ -116,9 +116,8 @@ if (RuntimeEnabledFeatures::DevicePostureEnabled()) { if (media_feature == media_feature_names::kDevicePostureMediaFeature) { - return ident == CSSValueID::kNoFold || ident == CSSValueID::kLaptop || - ident == CSSValueID::kFlat || ident == CSSValueID::kTent || - ident == CSSValueID::kTablet || ident == CSSValueID::kBook; + return ident == CSSValueID::kContinuous || ident == CSSValueID::kFolded || + ident == CSSValueID::kFoldedOver; } }
diff --git a/third_party/blink/renderer/core/css/media_values.cc b/third_party/blink/renderer/core/css/media_values.cc index 74e071f..227d0c8 100644 --- a/third_party/blink/renderer/core/css/media_values.cc +++ b/third_party/blink/renderer/core/css/media_values.cc
@@ -299,9 +299,10 @@ return ScreenSpanning::kNone; } -DevicePosture MediaValues::CalculateDevicePosture(LocalFrame* frame) { +device::mojom::blink::DevicePostureType MediaValues::CalculateDevicePosture( + LocalFrame* frame) { // TODO(darktears): Retrieve information from the host. - return DevicePosture::kNoFold; + return device::mojom::blink::DevicePostureType::kContinuous; } bool MediaValues::ComputeLengthImpl(double value,
diff --git a/third_party/blink/renderer/core/css/media_values.h b/third_party/blink/renderer/core/css/media_values.h index 263b7450..167ddd9 100644 --- a/third_party/blink/renderer/core/css/media_values.h +++ b/third_party/blink/renderer/core/css/media_values.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_H_ +#include "services/device/public/mojom/device_posture_provider.mojom-blink-forward.h" #include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-blink-forward.h" #include "third_party/blink/public/mojom/css/preferred_contrast.mojom-blink-forward.h" #include "third_party/blink/public/mojom/manifest/display_mode.mojom-shared.h" @@ -24,7 +25,6 @@ enum class ForcedColors; enum class NavigationControls; enum class ScreenSpanning { kNone, kSingleFoldHorizontal, kSingleFoldVertical }; -enum class DevicePosture { kNoFold, kLaptop, kFlat, kTent, kTablet, kBook }; mojom::blink::PreferredColorScheme CSSValueIDToPreferredColorScheme( CSSValueID id); @@ -93,7 +93,7 @@ virtual ForcedColors GetForcedColors() const = 0; virtual NavigationControls GetNavigationControls() const = 0; virtual ScreenSpanning GetScreenSpanning() const = 0; - virtual DevicePosture GetDevicePosture() const = 0; + virtual device::mojom::blink::DevicePostureType GetDevicePosture() const = 0; protected: static double CalculateViewportWidth(LocalFrame*); @@ -123,7 +123,8 @@ static ForcedColors CalculateForcedColors(LocalFrame*); static NavigationControls CalculateNavigationControls(LocalFrame*); static ScreenSpanning CalculateScreenSpanning(LocalFrame*); - static DevicePosture CalculateDevicePosture(LocalFrame*); + static device::mojom::blink::DevicePostureType CalculateDevicePosture( + LocalFrame*); }; } // namespace blink
diff --git a/third_party/blink/renderer/core/css/media_values_cached.cc b/third_party/blink/renderer/core/css/media_values_cached.cc index 8760f65..323b3cb 100644 --- a/third_party/blink/renderer/core/css/media_values_cached.cc +++ b/third_party/blink/renderer/core/css/media_values_cached.cc
@@ -196,7 +196,8 @@ return data_.screen_spanning; } -DevicePosture MediaValuesCached::GetDevicePosture() const { +device::mojom::blink::DevicePostureType MediaValuesCached::GetDevicePosture() + const { return data_.device_posture; }
diff --git a/third_party/blink/renderer/core/css/media_values_cached.h b/third_party/blink/renderer/core/css/media_values_cached.h index 962736a..998c38d0 100644 --- a/third_party/blink/renderer/core/css/media_values_cached.h +++ b/third_party/blink/renderer/core/css/media_values_cached.h
@@ -5,6 +5,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_CACHED_H_ #define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_MEDIA_VALUES_CACHED_H_ +#include "services/device/public/mojom/device_posture_provider.mojom-blink.h" #include "third_party/blink/public/common/css/forced_colors.h" #include "third_party/blink/public/common/css/navigation_controls.h" #include "third_party/blink/public/mojom/css/preferred_color_scheme.mojom-blink.h" @@ -58,7 +59,8 @@ ForcedColors forced_colors = ForcedColors::kNone; NavigationControls navigation_controls = NavigationControls::kNone; ScreenSpanning screen_spanning = ScreenSpanning::kNone; - DevicePosture device_posture = DevicePosture::kNoFold; + device::mojom::blink::DevicePostureType device_posture = + device::mojom::blink::DevicePostureType::kContinuous; MediaValuesCachedData(); explicit MediaValuesCachedData(Document&); @@ -133,7 +135,7 @@ ForcedColors GetForcedColors() const override; NavigationControls GetNavigationControls() const override; ScreenSpanning GetScreenSpanning() const override; - DevicePosture GetDevicePosture() const override; + device::mojom::blink::DevicePostureType GetDevicePosture() const override; void OverrideViewportDimensions(double width, double height) override;
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.cc b/third_party/blink/renderer/core/css/media_values_dynamic.cc index eea88954..ec0e224 100644 --- a/third_party/blink/renderer/core/css/media_values_dynamic.cc +++ b/third_party/blink/renderer/core/css/media_values_dynamic.cc
@@ -169,7 +169,8 @@ return CalculateScreenSpanning(frame_); } -DevicePosture MediaValuesDynamic::GetDevicePosture() const { +device::mojom::blink::DevicePostureType MediaValuesDynamic::GetDevicePosture() + const { return CalculateDevicePosture(frame_); }
diff --git a/third_party/blink/renderer/core/css/media_values_dynamic.h b/third_party/blink/renderer/core/css/media_values_dynamic.h index 07ea92e1..790fb884 100644 --- a/third_party/blink/renderer/core/css/media_values_dynamic.h +++ b/third_party/blink/renderer/core/css/media_values_dynamic.h
@@ -54,7 +54,7 @@ ForcedColors GetForcedColors() const override; NavigationControls GetNavigationControls() const override; ScreenSpanning GetScreenSpanning() const override; - DevicePosture GetDevicePosture() const override; + device::mojom::blink::DevicePostureType GetDevicePosture() const override; Document* GetDocument() const override; bool HasValues() const override; void OverrideViewportDimensions(double width, double height) override;
diff --git a/third_party/blink/renderer/core/editing/local_caret_rect_test.cc b/third_party/blink/renderer/core/editing/local_caret_rect_test.cc index 0d0b45fa..6ce9928 100644 --- a/third_party/blink/renderer/core/editing/local_caret_rect_test.cc +++ b/third_party/blink/renderer/core/editing/local_caret_rect_test.cc
@@ -174,6 +174,26 @@ Position(foo, 3), TextAffinity::kDownstream))); } +TEST_P(ParameterizedLocalCaretRectTest, ClampingAndRounding) { + // crbug.com/1228620 + LoadAhem(); + SetBodyContent(R"HTML( + <style> + #root { + margin-left: 0.6px; + width: 150.6px; + text-align: right; + font: 30px/30px Ahem; + } + </style> + <div id=root>def</div>)HTML"); + const Node* text = GetElementById("root")->firstChild(); + EXPECT_EQ( + LocalCaretRect(text->GetLayoutObject(), PhysicalRect(149, 0, 1, 30)), + LocalCaretRectOfPosition( + PositionWithAffinity(Position(text, 3), TextAffinity::kDownstream))); +} + TEST_P(ParameterizedLocalCaretRectTest, OverflowTextLtr) { // This test only records the current behavior. Future changes are allowed.
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc index 55b5760..94c8c55 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc
@@ -11,6 +11,7 @@ #include "third_party/blink/renderer/core/layout/ng/inline/layout_ng_text_combine.h" #include "third_party/blink/renderer/core/layout/ng/inline/ng_caret_position.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" +#include "third_party/blink/renderer/platform/wtf/math_extras.h" namespace blink { @@ -73,6 +74,14 @@ return false; } +LayoutUnit ClampAndRound(LayoutUnit value, LayoutUnit min, LayoutUnit max) { + LayoutUnit min_ceil = LayoutUnit(min.Ceil()); + LayoutUnit max_floor = LayoutUnit(max.Floor()); + if (min_ceil >= max_floor) + return max_floor; + return LayoutUnit(clampTo<LayoutUnit>(value, min_ceil, max_floor).Round()); +} + PhysicalRect ComputeLocalCaretRectAtTextOffset(const NGInlineCursor& cursor, unsigned offset) { DCHECK(cursor.Current().IsText()); @@ -132,27 +141,23 @@ if (is_horizontal) { if (should_align_caret_right) { const LayoutUnit left_edge = std::min(LayoutUnit(), line_box_rect.X()); - caret_location.left = std::max(caret_location.left, left_edge); + const LayoutUnit right_limit = line_box_rect.Right() - caret_width; caret_location.left = - std::min(caret_location.left, line_box_rect.Right() - caret_width); + ClampAndRound(caret_location.left, left_edge, right_limit); } else { - const LayoutUnit right_edge = - std::max(fragment.Size().width, line_box_rect.Right()); + const LayoutUnit right_limit = + std::max(fragment.Size().width, line_box_rect.Right()) - caret_width; caret_location.left = - std::min(caret_location.left, right_edge - caret_width); - caret_location.left = std::max(caret_location.left, line_box_rect.X()); + ClampAndRound(caret_location.left, line_box_rect.X(), right_limit); } - caret_location.left = LayoutUnit(caret_location.left.Round()); return PhysicalRect(caret_location, caret_size); } // Similar adjustment and rounding for vertical text. const LayoutUnit min_y = std::min(LayoutUnit(), line_box_offset.top); - caret_location.top = std::max(caret_location.top, min_y); - const LayoutUnit max_y = - std::max(fragment.Size().height, line_box_rect.Bottom()); - caret_location.top = std::min(caret_location.top, max_y - caret_height); - caret_location.top = LayoutUnit(caret_location.top.Round()); + const LayoutUnit bottom_limit = + std::max(fragment.Size().height, line_box_rect.Bottom()) - caret_height; + caret_location.top = ClampAndRound(caret_location.top, min_y, bottom_limit); return PhysicalRect(caret_location, caret_size); }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc index 5503e635..502812f 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
@@ -486,13 +486,14 @@ box_data.fragment_start = box_data.fragment_end = 0; // Scan children and update start/end from their box_data_index. - unsigned box_count = box_data_list_.size(); + Vector<BoxData> fragmented_boxes; for (unsigned index = 0; index < line_box->size();) - index = UpdateBoxDataFragmentRange(line_box, index); + index = UpdateBoxDataFragmentRange(line_box, index, &fragmented_boxes); - // If any inline fragmentation due to BiDi reorder, adjust box edges. - if (box_count != box_data_list_.size()) - UpdateFragmentedBoxDataEdges(); + // If any inline fragmentation occurred due to BiDi reorder, append them and + // adjust box edges. + if (UNLIKELY(!fragmented_boxes.IsEmpty())) + UpdateFragmentedBoxDataEdges(&fragmented_boxes); #if DCHECK_IS_ON() // Check all BoxData have ranges. @@ -509,7 +510,8 @@ unsigned NGInlineLayoutStateStack::UpdateBoxDataFragmentRange( NGLogicalLineItems* line_box, - unsigned index) { + unsigned index, + Vector<BoxData>* fragmented_boxes) { // Find the first line box item that should create a box fragment. for (; index < line_box->size(); index++) { NGLogicalLineItem* start = &(*line_box)[index]; @@ -537,7 +539,7 @@ // It also changes other BoxData, but not the one we're dealing with here // because the update is limited only when its |box_data_index| is lower. while (end->box_data_index && end->box_data_index < box_data_index) { - UpdateBoxDataFragmentRange(line_box, index); + UpdateBoxDataFragmentRange(line_box, index, fragmented_boxes); } if (box_data_index != end->box_data_index) @@ -552,14 +554,9 @@ } else { // This box is fragmented by BiDi reordering. Add a new BoxData for the // fragmented range. - box_data_list_[box_data_index - 1].fragmented_box_data_index = - box_data_list_.size(); - // Do not use `emplace_back()` here because adding to |box_data_list_| may - // reallocate the buffer, but the `BoxData` ctor must run before the - // reallocation. Create a new instance and |push_back()| instead. - BoxData fragmented_box_data(box_data_list_[box_data_index - 1], - start_index, index); - box_data_list_.push_back(fragmented_box_data); + BoxData& fragmented_box = fragmented_boxes->emplace_back( + box_data_list_[box_data_index - 1], start_index, index); + fragmented_box.fragmented_box_data_index = box_data_index; } // If this box has parent boxes, we need to process it again. if (box_data_list_[box_data_index - 1].parent_box_data_index) @@ -569,7 +566,43 @@ return index; } -void NGInlineLayoutStateStack::UpdateFragmentedBoxDataEdges() { +void NGInlineLayoutStateStack::UpdateFragmentedBoxDataEdges( + Vector<BoxData>* fragmented_boxes) { + DCHECK(!fragmented_boxes->IsEmpty()); + // Append in the descending order of |fragmented_box_data_index| because the + // indices will change as boxes are inserted into |box_data_list_|. + std::sort(fragmented_boxes->begin(), fragmented_boxes->end(), + [](const BoxData& a, const BoxData& b) { + if (a.fragmented_box_data_index != b.fragmented_box_data_index) { + return a.fragmented_box_data_index < + b.fragmented_box_data_index; + } + DCHECK_NE(a.fragment_start, b.fragment_start); + return a.fragment_start < b.fragment_start; + }); + for (BoxData& fragmented_box : base::Reversed(*fragmented_boxes)) { + // Insert the fragmented box to right after the box it was fragmented from. + // The order in the |box_data_list_| is critical when propagating child + // fragment data such as OOF to ancestors. + const unsigned insert_at = fragmented_box.fragmented_box_data_index; + DCHECK_GT(insert_at, 0u); + fragmented_box.fragmented_box_data_index = 0; + box_data_list_.insert(insert_at, fragmented_box); + + // Adjust box data indices by the insertion. + for (BoxData& box_data : box_data_list_) { + if (box_data.fragmented_box_data_index >= insert_at) + ++box_data.fragmented_box_data_index; + } + + // Set the index of the last fragment to the original box. This is needed to + // update fragment edges. + const unsigned fragmented_from = insert_at - 1; + if (!box_data_list_[fragmented_from].fragmented_box_data_index) + box_data_list_[fragmented_from].fragmented_box_data_index = insert_at; + } + + // Move the line-right edge to the last fragment. for (BoxData& box_data : box_data_list_) { if (box_data.fragmented_box_data_index) box_data.UpdateFragmentEdges(box_data_list_);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h index 2e957ea9..558ae99 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
@@ -187,17 +187,6 @@ // reordering. void UpdateAfterReorder(NGLogicalLineItems*); - // Update start/end of the first BoxData found at |index|. - // - // If inline fragmentation is found, a new BoxData is added. - // - // Returns the index to process next. It should be given to the next call to - // this function. - unsigned UpdateBoxDataFragmentRange(NGLogicalLineItems*, unsigned index); - - // Update edges of inline fragmented boxes. - void UpdateFragmentedBoxDataEdges(); - // Compute inline positions of fragments and boxes. LayoutUnit ComputeInlinePositions(NGLogicalLineItems*, LayoutUnit position); @@ -297,6 +286,19 @@ NGLogicalLineItems*); }; + // Update start/end of the first BoxData found at |index|. + // + // If inline fragmentation is found, a new BoxData is added. + // + // Returns the index to process next. It should be given to the next call to + // this function. + unsigned UpdateBoxDataFragmentRange(NGLogicalLineItems*, + unsigned index, + Vector<BoxData>* fragmented_boxes); + + // Update edges of inline fragmented boxes. + void UpdateFragmentedBoxDataEdges(Vector<BoxData>* fragmented_boxes); + Vector<NGInlineBoxState, 4> stack_; Vector<BoxData, 4> box_data_list_;
diff --git a/third_party/blink/renderer/modules/device_posture/device_posture.cc b/third_party/blink/renderer/modules/device_posture/device_posture.cc index 49a9cbc..b37946c 100644 --- a/third_party/blink/renderer/modules/device_posture/device_posture.cc +++ b/third_party/blink/renderer/modules/device_posture/device_posture.cc
@@ -14,21 +14,13 @@ String PostureToString(device::mojom::blink::DevicePostureType posture) { switch (posture) { - case device::mojom::blink::DevicePostureType::kNoFold: - return "no-fold"; - case device::mojom::blink::DevicePostureType::kLaptop: - return "laptop"; - case device::mojom::blink::DevicePostureType::kFlat: - return "flat"; - case device::mojom::blink::DevicePostureType::kTent: - return "tent"; - case device::mojom::blink::DevicePostureType::kTablet: - return "tablet"; - case device::mojom::blink::DevicePostureType::kBook: - return "book"; + case device::mojom::blink::DevicePostureType::kContinuous: + return "continuous"; + case device::mojom::blink::DevicePostureType::kFolded: + return "folded"; + case device::mojom::blink::DevicePostureType::kFoldedOver: + return "folded-over"; } - NOTREACHED(); - return "no-fold"; } } // namespace
diff --git a/third_party/blink/renderer/modules/device_posture/device_posture.h b/third_party/blink/renderer/modules/device_posture/device_posture.h index 52651bb..564ddc2 100644 --- a/third_party/blink/renderer/modules/device_posture/device_posture.h +++ b/third_party/blink/renderer/modules/device_posture/device_posture.h
@@ -46,7 +46,7 @@ void EnsureServiceConnection(); device::mojom::blink::DevicePostureType posture_ = - device::mojom::blink::DevicePostureType::kNoFold; + device::mojom::blink::DevicePostureType::kContinuous; HeapMojoRemote<device::mojom::blink::DevicePostureProvider> service_; HeapMojoReceiver<device::mojom::blink::DevicePostureProviderClient, DevicePosture>
diff --git a/third_party/blink/renderer/modules/device_posture/device_posture.idl b/third_party/blink/renderer/modules/device_posture/device_posture.idl index 643a0809..e89b064 100644 --- a/third_party/blink/renderer/modules/device_posture/device_posture.idl +++ b/third_party/blink/renderer/modules/device_posture/device_posture.idl
@@ -3,12 +3,9 @@ // found in the LICENSE file. enum DevicePostureType { - "no-fold", - "laptop", - "flat", - "tent", - "tablet", - "book" + "continuous", + "folded", + "folded-over" }; [Exposed=Window, RuntimeEnabled=DevicePosture, SecureContext]
diff --git a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc index c6c07c3e..025e518 100644 --- a/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc +++ b/third_party/blink/renderer/modules/webgl/webgl_rendering_context_base.cc
@@ -586,6 +586,11 @@ ScriptState* script_state) { WebFeature feature = WebFeature::kOffscreenCanvasTransferToImageBitmapWebGL; UseCounter::Count(ExecutionContext::From(script_state), feature); + if (!GetDrawingBuffer()) { + // Context is lost. + return nullptr; + } + return MakeGarbageCollected<ImageBitmap>( GetDrawingBuffer()->TransferToStaticBitmapImage()); }
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index c39536e..5cf1133 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -5715,7 +5715,7 @@ crbug.com/1048149 [ Mac ] fast/forms/color/color-picker-appearance-zoom125.html [ Crash Pass ] crbug.com/1048149 [ Mac ] fast/forms/color/color-picker-top-left-selection-position-after-reopen.html [ Crash Pass ] crbug.com/1048149 [ Mac ] fast/forms/color/color-picker-zoom150-bottom-edge-no-nan.html [ Crash Pass ] -crbug.com/1048149 crbug.com/1050121 [ Mac ] fast/forms/month/month-picker-appearance-zoom150.html [ Crash Pass ] +crbug.com/1048149 crbug.com/1050121 [ Mac ] fast/forms/month/month-picker-appearance-zoom150.html [ Crash Pass Failure ] # SwANGLE issues crbug.com/1204234 css3/blending/background-blend-mode-single-accelerated-element.html [ Failure ] @@ -7382,3 +7382,5 @@ crbug.com/1230599 [ Linux ] fast/workers/worker-lifecycle.html [ Crash Pass ] crbug.com/1230599 [ Linux ] virtual/plz-dedicated-worker/fast/workers/chromium/worker-document-leak.html [ Crash ] crbug.com/1230599 [ Linux ] virtual/shared_array_buffer_on_desktop/fast/workers/dedicated-worker-lifecycle.html [ Crash Pass ] + +crbug.com/1230836 [ Mac ] fast/forms/calendar-picker/date-picker-appearance-zoom150.html [ Pass Failure Crash ]
diff --git a/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual.html b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual.html new file mode 100644 index 0000000..bcccc47 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual.html
@@ -0,0 +1,9 @@ +<!DOCTYPE html> +<title>Test that an unrecognized member is ignored</title> +<link rel="help" href="https://www.w3.org/TR/appmanifest/#processing" /> +<link rel="manifest" href="unrecognized-member.webmanifest" /> +<h1>Testing support for ignoring an unrecognized member</h1> +<p> + To pass, the application name must be "pass". Parsing must not fail due to the + presence of the unrecognized members in the manifest. +</p>
diff --git a/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest new file mode 100644 index 0000000..547334c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest
@@ -0,0 +1,7 @@ +{ + "this member name is not expected to be recognized": "ok", + "this object is not expected to be recognized": { + "this sub-field is not expected to be recognized": [] + }, + "short_name": "pass" +}
diff --git a/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest.headers b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest.headers new file mode 100644 index 0000000..23f36ea --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/appmanifest/unrecognized-member/unrecognized-member.webmanifest.headers
@@ -0,0 +1 @@ +Content-Type: application/manifest+json; charset=utf-8 \ No newline at end of file
diff --git a/third_party/blink/web_tests/external/wpt/css/CSS2/text/crashtests/bidi-inline-fragment-oof-crash.html b/third_party/blink/web_tests/external/wpt/css/CSS2/text/crashtests/bidi-inline-fragment-oof-crash.html new file mode 100644 index 0000000..b701d2b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/CSS2/text/crashtests/bidi-inline-fragment-oof-crash.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<link rel="author" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://crbug.com/1229999"> +<div style="direction:rtl; width:500px"> + <span style="border:solid"> + <span style="position:relative"> + <div style="display:inline-block; width:1000%; height:10px"></div> + <span dir="ltr"> + <div style="position:absolute"></div> + </span> + </span> + </span> +</div>
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/device-posture.idl b/third_party/blink/web_tests/external/wpt/interfaces/device-posture.idl index 5f3574d..ba8f9f51 100644 --- a/third_party/blink/web_tests/external/wpt/interfaces/device-posture.idl +++ b/third_party/blink/web_tests/external/wpt/interfaces/device-posture.idl
@@ -15,10 +15,7 @@ }; enum DevicePostureType { - "no-fold", - "laptop", - "flat", - "tent", - "tablet", - "book" + "continuous", + "folded", + "folded-over" };
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt index eca34df7..bd7d40e 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
@@ -44,7 +44,7 @@ PASS window.cached_navigator_connection.ontypechange is null PASS window.cached_navigator_connection.saveData is false PASS window.cached_navigator_devicePosture.onchange is null -PASS window.cached_navigator_devicePosture.type is 'no-fold' +PASS window.cached_navigator_devicePosture.type is 'continuous' PASS window.cached_navigator_hid.onconnect is null PASS window.cached_navigator_hid.ondisconnect is null PASS window.cached_navigator_managed.onmanagedconfigurationchange is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt index 7cd7d4c..faea31a 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -44,7 +44,7 @@ PASS window.cached_navigator_connection.ontypechange is null PASS window.cached_navigator_connection.saveData is false PASS window.cached_navigator_devicePosture.onchange is null -PASS window.cached_navigator_devicePosture.type is 'no-fold' +PASS window.cached_navigator_devicePosture.type is 'continuous' PASS window.cached_navigator_hid.onconnect is null PASS window.cached_navigator_hid.ondisconnect is null PASS window.cached_navigator_managed.onmanagedconfigurationchange is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt index 285a358..ab964816 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -44,7 +44,7 @@ PASS window.cached_navigator_connection.ontypechange is null PASS window.cached_navigator_connection.saveData is false PASS window.cached_navigator_devicePosture.onchange is null -PASS window.cached_navigator_devicePosture.type is 'no-fold' +PASS window.cached_navigator_devicePosture.type is 'continuous' PASS window.cached_navigator_hid.onconnect is null PASS window.cached_navigator_hid.ondisconnect is null PASS window.cached_navigator_managed.onmanagedconfigurationchange is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/resources/window-property-collector.js b/third_party/blink/web_tests/fast/dom/Window/resources/window-property-collector.js index 449a986..80b6e01 100644 --- a/third_party/blink/web_tests/fast/dom/Window/resources/window-property-collector.js +++ b/third_party/blink/web_tests/fast/dom/Window/resources/window-property-collector.js
@@ -119,7 +119,7 @@ expected = "window." + propertyPath; break; case "navigator.devicePosture.type": - expected = "'no-fold'"; + expected = "'continuous'"; break; case "navigator.mediaSession.playbackState": expected = "'none'";
diff --git a/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary.html b/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary.html index 0060737..c7ffaf2 100644 --- a/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary.html +++ b/third_party/blink/web_tests/fast/forms/cursor-at-editable-content-boundary.html
@@ -83,7 +83,7 @@ caretRange = last - first; caretRange = Math.abs(caretRange); - if (caretRange != originalLength - 1) { + if (caretRange > originalLength - 1 || caretRange < originalLength - 2) { succeed = false; --originalLength; testFailed("test id: " + id + " (text width: " + originalLength + " != caretRange: " + caretRange + ")," +
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png b/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png new file mode 100644 index 0000000..9ca4e246 --- /dev/null +++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png b/third_party/blink/web_tests/platform/linux/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png new file mode 100644 index 0000000..1092eb2 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png b/third_party/blink/web_tests/platform/mac/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png new file mode 100644 index 0000000..2e593dd --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png b/third_party/blink/web_tests/platform/win/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png new file mode 100644 index 0000000..310e7f3 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/external/wpt/appmanifest/unrecognized-member/unrecognized-member-manual-expected.png Binary files differ
diff --git a/third_party/closure_compiler/externs/feedback_private.js b/third_party/closure_compiler/externs/feedback_private.js index fca564a..4af12fe 100644 --- a/third_party/closure_compiler/externs/feedback_private.js +++ b/third_party/closure_compiler/externs/feedback_private.js
@@ -7,7 +7,7 @@ // NOTE: The format of types has changed. 'FooType' is now // 'chrome.feedbackPrivate.FooType'. // Please run the closure compiler before committing changes. -// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md +// See https://chromium.googlesource.com/chromium/src/+/main/docs/closure_compilation.md /** @fileoverview Externs generated from namespace: feedbackPrivate */ @@ -135,10 +135,16 @@ /** * Sends a feedback report. * @param {!chrome.feedbackPrivate.FeedbackInfo} feedback + * @param {?boolean|undefined} loadSystemInfo Optional flag when present and is + * true, the backend should load system information before sending the + * report. This is added to reduce user's wait time when sending reports + * because loading system information is slow. + * @param {?number|undefined} formOpenTime The epoch time when the feedback form + * was opened. This is used for metrics. * @param {function(!chrome.feedbackPrivate.Status, !chrome.feedbackPrivate.LandingPageType): void} * callback */ -chrome.feedbackPrivate.sendFeedback = function(feedback, callback) {}; +chrome.feedbackPrivate.sendFeedback = function(feedback, loadSystemInfo, formOpenTime, callback) {}; /** * Gets localized translated strings for feedback. It returns the strings as a
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec index e501a6f..1aa8d3c 100644 --- a/tools/gritsettings/resource_ids.spec +++ b/tools/gritsettings/resource_ids.spec
@@ -278,6 +278,10 @@ "META": {"sizes": {"includes": [10],}}, "includes": [2030], }, + "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/chromeos/chromebox_for_meetings/resources.grd": { + "META": {"sizes": {"includes": [5]}}, + "includes": [2035], + }, "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/chromeos/internet_config_dialog/internet_config_dialog_resources.grd": { "META": {"sizes": {"includes": [10],}}, "includes": [2040],
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 9ca0efc..c15b676 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -16510,6 +16510,11 @@ <int value="10" label="Empty credential, called in autofill-assistant mode"/> </enum> +<enum name="CredentialPhishedStatus"> + <int value="0" label="Marked as phished"/> + <int value="1" label="Site marked as legitimate"/> +</enum> + <enum name="CreditCardUploadDisallowedNetwork"> <int value="0" label="Elo card"/> <int value="1" label="JCB card"/> @@ -48744,6 +48749,8 @@ <int value="-78035185" label="custom_summary"/> <int value="-77872983" label="BookmarkAppsMac:disabled"/> <int value="-77789682" label="SharingPreferVapid:disabled"/> + <int value="-77230883" + label="OmniboxOnFocusSuggestionsContextualWebAllowSRP:enabled"/> <int value="-77084779" label="ExperimentalFlingAnimation:enabled"/> <int value="-76631048" label="disable-offline-auto-reload-visible-only"/> <int value="-76445689" label="WasmCodeCache:enabled"/> @@ -50929,6 +50936,8 @@ label="ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes:enabled"/> <int value="1706682238" label="ContextualSearchTranslations:disabled"/> <int value="1707283026" label="SyncPseudoUSSExtensions:disabled"/> + <int value="1707873180" + label="OmniboxOnFocusSuggestionsContextualWebAllowSRP:disabled"/> <int value="1708118086" label="TextFragmentAnchor:disabled"/> <int value="1711286384" label="ContextMenuCopyImage:disabled"/> <int value="1712622545" label="Memories:disabled"/> @@ -67320,6 +67329,7 @@ <int value="17" label="kWebAppProtocolHandlerLaunch"/> <int value="18" label="kExtensionUpdater"/> <int value="19" label="kProfileCreationFlow"/> + <int value="20" label="kPendingNotificationCloseEvent"/> </enum> <enum name="ProfileMenuActionableItem">
diff --git a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS index 5c58f96a..23e353dd 100644 --- a/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS +++ b/tools/metrics/histograms/histograms_xml/METRIC_REVIEWER_OWNERS
@@ -55,6 +55,7 @@ tobyhuang@chromium.org toyoshim@chromium.org vasilii@chromium.org +vidhanj@google.com vsemeniuk@google.com wanderview@chromium.org xidachen@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/apps/histograms.xml b/tools/metrics/histograms/histograms_xml/apps/histograms.xml index 24ca358..ac2f41c 100644 --- a/tools/metrics/histograms/histograms_xml/apps/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
@@ -2352,7 +2352,7 @@ </histogram> <histogram name="Apps.StateTransition.AnimationSmoothness" units="%" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <!-- Name completed by histogram_suffixes name="TabletOrClamshellMode" and name="EnterOrExitOverview" and
diff --git a/tools/metrics/histograms/histograms_xml/ash/histograms.xml b/tools/metrics/histograms/histograms_xml/ash/histograms.xml index 0240122..ac44a47 100644 --- a/tools/metrics/histograms/histograms_xml/ash/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ash/histograms.xml
@@ -380,7 +380,7 @@ </histogram> <histogram name="Ash.CaptureModeController.SwitchesFromInitialCaptureMode" - enum="Boolean" expires_after="2021-11-11"> + enum="Boolean" expires_after="2022-01-16"> <owner>chinsenj@chromium.org</owner> <owner>gzadina@google.com</owner> <summary> @@ -1599,7 +1599,7 @@ </histogram> <histogram name="Ash.NightLight.ScheduleType" enum="AshNightLightScheduleType" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>afakhry@chromium.org</owner> <summary> The selected Night Light schedule type. Emitted when the user changes the
diff --git a/tools/metrics/histograms/histograms_xml/assistant/histograms.xml b/tools/metrics/histograms/histograms_xml/assistant/histograms.xml index 3e86204..113d6ec7 100644 --- a/tools/metrics/histograms/histograms_xml/assistant/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/assistant/histograms.xml
@@ -283,7 +283,7 @@ </histogram> <histogram name="QuickAnswers.ActiveImpression.Duration" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>llin@google.com</owner> <owner>croissant-eng@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/autofill/OWNERS b/tools/metrics/histograms/histograms_xml/autofill/OWNERS index 5f6f766..f3dc55e7 100644 --- a/tools/metrics/histograms/histograms_xml/autofill/OWNERS +++ b/tools/metrics/histograms/histograms_xml/autofill/OWNERS
@@ -3,4 +3,5 @@ # Prefer sending CLs to the owners listed below. # Use chromium-metrics-reviews@google.com as a backup. jsaul@google.com # Autofill (Payments org) +vidhanj@google.com vsemeniuk@google.com # Passwords
diff --git a/tools/metrics/histograms/histograms_xml/background/histograms.xml b/tools/metrics/histograms/histograms_xml/background/histograms.xml index 4b32950..2fe7364 100644 --- a/tools/metrics/histograms/histograms_xml/background/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/background/histograms.xml
@@ -453,7 +453,7 @@ <histogram name="BackgroundSync.Registration.OneShot.NumAttemptsForSuccessfulEvent" - units="attempts" expires_after="2021-11-14"> + units="attempts" expires_after="2022-01-16"> <owner>nator@chromium.org</owner> <owner>rayankans@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/cros/histograms.xml b/tools/metrics/histograms/histograms_xml/cros/histograms.xml index 34f10b7..79b2102 100644 --- a/tools/metrics/histograms/histograms_xml/cros/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/cros/histograms.xml
@@ -94,7 +94,7 @@ </histogram> <histogram name="CrosDisksClient.FormatCompletedError" - enum="CrosDisksClientFormatError" expires_after="2021-11-14"> + enum="CrosDisksClientFormatError" expires_after="2022-01-16"> <owner>austinct@chromium.org</owner> <summary> The error code of disk format signals received from the Chrome OS cros-disks
diff --git a/tools/metrics/histograms/histograms_xml/cross_device/histograms.xml b/tools/metrics/histograms/histograms_xml/cross_device/histograms.xml index ab55a50..dc535496 100644 --- a/tools/metrics/histograms/histograms_xml/cross_device/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/cross_device/histograms.xml
@@ -829,7 +829,7 @@ </histogram> <histogram name="CryptAuth.Enrollment.Result" enum="BooleanSuccess" - expires_after="2021-10-06"> + expires_after="2022-01-16"> <owner>nohle@chromium.org</owner> <owner>better-together-dev@google.com</owner> <summary> @@ -1641,7 +1641,7 @@ </histogram> <histogram name="MultiDevice.DeviceSyncService.SetSoftwareFeatureState.Result" - enum="BooleanSuccess" expires_after="2021-11-14"> + enum="BooleanSuccess" expires_after="2022-01-16"> <owner>danlee@google.com</owner> <owner>better-together-dev@google.com</owner> <summary>Result of enabling and disabling features for devices.</summary>
diff --git a/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml b/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml index b2c6985..0152c455 100644 --- a/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/cryptohome/histograms.xml
@@ -213,7 +213,7 @@ </histogram> <histogram name="Cryptohome.Errors" enum="CryptohomeError" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary>Cryptohome errors.</summary> @@ -572,7 +572,7 @@ </histogram> <histogram name="Cryptohome.TimeToTakeTpmOwnership" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>apronin@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary> @@ -644,7 +644,7 @@ </token> </histogram> -<histogram name="CryptohomeClient" units="ms" expires_after="2021-11-14"> +<histogram name="CryptohomeClient" units="ms" expires_after="2022-01-16"> <owner>zuan@chromium.org</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/custom_tabs/histograms.xml b/tools/metrics/histograms/histograms_xml/custom_tabs/histograms.xml index 1a2ed17..34d11c90 100644 --- a/tools/metrics/histograms/histograms_xml/custom_tabs/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/custom_tabs/histograms.xml
@@ -35,7 +35,7 @@ </histogram> <histogram name="CustomTabs.ClientAppId" enum="ClientAppId" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>yusufo@chromium.org</owner> <summary> Android: AppId declared by the launching application in EXTRA_APPLICATION_ID
diff --git a/tools/metrics/histograms/histograms_xml/data_reduction_proxy/histograms.xml b/tools/metrics/histograms/histograms_xml/data_reduction_proxy/histograms.xml index 1fed99a..3a79cdb 100644 --- a/tools/metrics/histograms/histograms_xml/data_reduction_proxy/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/data_reduction_proxy/histograms.xml
@@ -385,7 +385,7 @@ </histogram> <histogram name="DataReductionProxy.StartupState" - enum="DataReductionProxyStartupState" expires_after="2021-11-14"> + enum="DataReductionProxyStartupState" expires_after="2022-01-16"> <owner>rajendrant@chromium.org</owner> <owner>tbansal@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/download/histograms.xml b/tools/metrics/histograms/histograms_xml/download/histograms.xml index a0dd274e..ecd79489 100644 --- a/tools/metrics/histograms/histograms_xml/download/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/download/histograms.xml
@@ -105,7 +105,7 @@ </histogram> <histogram base="true" name="Download.Counts" enum="DownloadCountType" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <!-- Name completed by histogram_suffixes name="DownloadSource" --> <owner>xingliu@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml index 9707f1d..fd10251 100644 --- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
@@ -21,6 +21,31 @@ <histograms> +<variants name="Enterprise_RemoteCommandType"> + <variant name=".BrowserClearBrowsingData" summary="Clear Browsing Data"/> + <variant name=".CommandEchoTest" summary="Command echo test"/> + <variant name=".DeviceFetchStatus" summary="Fetch status"/> + <variant name=".DeviceGetAvailableDiagnosticRoutines" + summary="Get available diagnostic routines"/> + <variant name=".DeviceGetDiagnosticRoutineUpdate" + summary="Get diagnostic routine update"/> + <variant name=".DeviceReboot" summary="Reboot"/> + <variant name=".DeviceRefreshEnterpriseMachineCertificate" + summary="Refresh enterprise machine certificate"/> + <variant name=".DeviceRemotePowerwash" summary="Powerwash"/> + <variant name=".DeviceRunDiagnosticRoutine" summary="Run diagnostic routine"/> + <variant name=".DeviceScreenshot" summary="Screenshot"/> + <variant name=".DeviceSetVolume" summary="Set volume"/> + <variant name=".DeviceStartCrdSession" summary="Device start CRD session"/> + <variant name=".DeviceWipeUsers" summary="Wipe users"/> + <variant name=".UserArcCommand" summary="ARC command"/> +</variants> + +<variants name="EnterpriseAutoEnrollmentType"> + <variant name=".ForcedReenrollment" summary="Forced Re-Enrollment"/> + <variant name=".InitialEnrollment" summary="Initial Enrollment Exchange"/> +</variants> + <histogram name="Enterprise.AccountStatusCheckResult" enum="EnterpriseAccountStatus" expires_after="M99"> <owner>raleksandrov@google.com</owner> @@ -83,39 +108,63 @@ </summary> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentBucketDownloadTime" +<histogram + name="Enterprise.AutoEnrollmentBucketDownloadTime{EnterpriseAutoEnrollmentType}" units="ms" expires_after="2021-12-26"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>pmarko@chromium.org</owner> <owner>igorcov@chromium.org</owner> <summary> Duration of the bucket download part of the auto-enrollment protocol. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentExtraTime" units="ms" - expires_after="2021-03-01"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - +<histogram + name="Enterprise.AutoEnrollmentExtraTime{EnterpriseAutoEnrollmentType}" + units="ms" expires_after="2021-03-01"> <owner>pmarko@chromium.org</owner> <owner>igorcov@chromium.org</owner> <summary> Time since the user logged in until the auto-enrollment protocol completed. 0 is sampled when the protocol is done by the time the user logs in. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentHashDanceSuccessTime" +<histogram + name="Enterprise.AutoEnrollmentHashDanceSuccessTime{EnterpriseAutoEnrollmentType}" units="ms" expires_after="2022-01-09"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>amraboelkher@google.com</owner> <owner>mpolzer@google.com</owner> <summary> Duration of the hash dance to determine enrollment state of the device. Only recorded if the hash dance finished successfully. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> <histogram @@ -153,24 +202,38 @@ </summary> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentProtocolTime" units="ms" - expires_after="2022-01-09"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - +<histogram + name="Enterprise.AutoEnrollmentProtocolTime{EnterpriseAutoEnrollmentType}" + units="ms" expires_after="2022-01-09"> <owner>pmarko@chromium.org</owner> <owner>igorcov@chromium.org</owner> - <summary>Total duration time of the auto-enrollment protocol.</summary> + <summary> + Total duration time of the auto-enrollment protocol. + {EnterpriseAutoEnrollmentType} + </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> -<histogram name="Enterprise.AutoEnrollmentPsmDmServerRequestStatus" +<histogram + name="Enterprise.AutoEnrollmentPsmDmServerRequestStatus{EnterpriseAutoEnrollmentType}" enum="EnterpriseDeviceManagementStatus" expires_after="2021-10-31"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>amraboelkher@google.com</owner> <owner>mpolzer@google.com</owner> <summary> Device management server request status for auto-enrollment PSM requests. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""/> + </token> </histogram> <histogram @@ -185,48 +248,73 @@ </summary> </histogram> -<histogram name="Enterprise.AutoEnrollmentPsmRequestNetworkErrorCode" +<histogram + name="Enterprise.AutoEnrollmentPsmRequestNetworkErrorCode{EnterpriseAutoEnrollmentType}" enum="NetErrorCodes" expires_after="2021-10-31"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>amraboelkher@google.com</owner> <owner>mpolzer@google.com</owner> <summary> Network error code (if applicable) for auto-enrollment PSM requests. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""/> + </token> </histogram> -<histogram name="Enterprise.AutoEnrollmentPsmResult" enum="PsmResult" - expires_after="2021-10-31"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - +<histogram + name="Enterprise.AutoEnrollmentPsmResult{EnterpriseAutoEnrollmentType}" + enum="PsmResult" expires_after="2021-10-31"> <owner>amraboelkher@google.com</owner> <owner>mpolzer@google.com</owner> <summary> All possible PSM protocol results after it has executed succcessfully or terminated due to an error or timeout. This request is used to determine the - initial enrollment state of the device. + initial enrollment state of the device. {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""/> + </token> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentRequestNetworkErrorCode" +<histogram + name="Enterprise.AutoEnrollmentRequestNetworkErrorCode{EnterpriseAutoEnrollmentType}" enum="NetErrorCodes" expires_after="2021-12-19"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>pmarko@chromium.org</owner> <owner>igorcov@chromium.org</owner> <summary> Network error code (if applicable) for auto-enrollment requests. + {EnterpriseAutoEnrollmentType} </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> -<histogram base="true" name="Enterprise.AutoEnrollmentRequestStatus" +<histogram + name="Enterprise.AutoEnrollmentRequestStatus{EnterpriseAutoEnrollmentType}" enum="EnterpriseDeviceManagementStatus" expires_after="2021-12-12"> -<!-- Name completed by histogram_suffixes name="EnterpriseAutoEnrollmentType". --> - <owner>pmarko@chromium.org</owner> <owner>igorcov@chromium.org</owner> - <summary>URL fetcher status for auto-enrollment requests.</summary> + <summary> + URL fetcher status for auto-enrollment requests. + {EnterpriseAutoEnrollmentType} + </summary> + <token key="EnterpriseAutoEnrollmentType" + variants="EnterpriseAutoEnrollmentType"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + </token> </histogram> <histogram base="true" name="Enterprise.BrowserSigninIOS.SignedOutByPolicy" @@ -289,8 +377,6 @@ <histogram name="Enterprise.CBCMRemoteCommand.Executed" enum="RemoteCommandExecutionStatus" expires_after="2021-11-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - <owner>anthonyvd@chromium.org</owner> <owner>cbe-eng@google.com</owner> <summary> @@ -302,8 +388,6 @@ <histogram name="Enterprise.CBCMRemoteCommand.Executed.Unsigned" enum="RemoteCommandExecutionStatus" expires_after="2021-11-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - <owner>anthonyvd@chromium.org</owner> <owner>cbe-eng@google.com</owner> <summary> @@ -444,18 +528,37 @@ </summary> </histogram> -<histogram base="true" name="Enterprise.DevicePolicyDeviceIdValidity" +<histogram + name="Enterprise.DevicePolicyDeviceIdValidity{EnterpriseDevicePolicyDeviceIdValidity}" enum="EnterprisePolicyDeviceIdValidity" expires_after="M85"> <obsolete> Removed in M91 since the data is no longer required. </obsolete> -<!-- Name completed by histogram_suffixes name="EnterpriseDevicePolicyDeviceIdValidity" --> - <owner>emaxx@chromium.org</owner> <owner>poromov@chromium.org</owner> <summary> Result of the device ID validation in the device policy blob. + {EnterpriseDevicePolicyDeviceIdValidity} </summary> + <token key="EnterpriseDevicePolicyDeviceIdValidity"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + <variant name=".InitialStore" + summary="the initial device policy stored during enrollment"> + <obsolete> + Removed in M91 since the data is no longer required. + </obsolete> + </variant> + <variant name=".Update" + summary="the updated device policy that overwrites the previous one"> + <obsolete> + Removed in M91 since the data is no longer required. + </obsolete> + </variant> + </token> </histogram> <histogram name="Enterprise.DevicePolicyInvalidations2" @@ -489,30 +592,38 @@ </summary> </histogram> -<histogram name="Enterprise.DeviceRemoteCommand.Executed" +<histogram + name="Enterprise.DeviceRemoteCommand.Executed.Unsigned{Enterprise_RemoteCommandType}" enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - - <owner>asumaneev@google.com</owner> - <owner>managed-platforms@google.com</owner> - <summary> - Events for counting status of executed device remote commands. The metric - includes only signed device remote commands. Reports a final status of - finished remote command (e.g. success, failure or termination). - </summary> -</histogram> - -<histogram name="Enterprise.DeviceRemoteCommand.Executed.Unsigned" - enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - <owner>asumaneev@google.com</owner> <owner>managed-platforms@google.com</owner> <summary> Events for counting status of executed device remote commands. The metric includes only unsigned device remote commands. Reports a final status of finished remote command (e.g. success, failure or termination). + {Enterprise_RemoteCommandType} </summary> + <token key="Enterprise_RemoteCommandType" + variants="Enterprise_RemoteCommandType"> + <variant name=""/> + </token> +</histogram> + +<histogram + name="Enterprise.DeviceRemoteCommand.Executed{Enterprise_RemoteCommandType}" + enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> + <owner>asumaneev@google.com</owner> + <owner>managed-platforms@google.com</owner> + <summary> + Events for counting status of executed device remote commands. The metric + includes only signed device remote commands. Reports a final status of + finished remote command (e.g. success, failure or termination). + {Enterprise_RemoteCommandType} + </summary> + <token key="Enterprise_RemoteCommandType" + variants="Enterprise_RemoteCommandType"> + <variant name=""/> + </token> </histogram> <histogram name="Enterprise.DeviceRemoteCommand.Received" @@ -739,7 +850,7 @@ </summary> </histogram> -<histogram name="Enterprise.DMServerRequestSuccess" +<histogram name="Enterprise.DMServerRequestSuccess{EnterpriseDMServerRequest}" enum="EnterpriseDMServerRequestSuccess" expires_after="2021-12-12"> <owner>poromov@chromium.org</owner> <owner>managed-devices@google.com</owner> @@ -747,8 +858,114 @@ Number of retries the client did to execute a DeviceManagementServer request. It's recorded after the request has been completed, either successfully after 0 or more retries, with a failure (too many retries or - non-retriable error) or with a server error. + non-retriable error) or with a server error. {EnterpriseDMServerRequest} </summary> + <token key="EnterpriseDMServerRequest"> + <variant name=""/> + <variant name=".ActiveDirectoryEnrollPlayUser" + summary="Active Directory Enroll Play User."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".ActiveDirectoryPlayActivity" + summary="Active Directory Play Activity."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".AndroidManagementCheck" summary="Android Management Check."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".ApiAuthCodeFetch" summary="Api Auth Code Fetch."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".AttributeUpdate" summary="Attribute Update."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".AttributeUpdatePermission" + summary="Attribute Update Permission."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".AutoEnrollment" summary="Auto Enrollment."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".CertBasedRegistration" summary="Cert Based Registration."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".ChromeDesktopReport" summary="Chrome Desktop Report."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".DeviceStateRetrieval" summary="Device State Retrieval."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".GcmIdUpdate" summary="Gcm Id Update."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".InitialEnrollmentStateRetrieval" + summary="Initial Enrollment State Retrieval."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".Invalid" summary="Invalid."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".PolicyFetch" summary="Policy Fetch."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".Registration" summary="Registration."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".RemoteCommands" summary="Remote Commands."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".RequestLicenseTypes" summary="Request License Types."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".TokenEnrollment" summary="Token Enrollment."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".Unregistration" summary="Unregistration."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".UploadAppInstallReport" + summary="Upload App Install Report."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".UploadCertificate" summary="Upload Certificate."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".UploadPolicyValidationReport" + summary="Upload Policy Validation Report."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".UploadrealtimeReport" + summary="Upload of real-time reports."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + <variant name=".UploadStatus" summary="Upload Status."> + <owner>poromov@chromium.org</owner> + <owner>zmin@chromium.org</owner> + </variant> + </token> </histogram> <histogram @@ -1566,18 +1783,55 @@ </summary> </histogram> -<histogram base="true" name="Enterprise.RetrievePolicyResponse" +<histogram + name="Enterprise.RetrievePolicyResponse{EnterpriseRetrievePolicyResponse}" enum="EnterpriseRetrievePolicyResponseType" expires_after="2020-02-16"> <obsolete> Removed in M91 since the data is no longer monitored. </obsolete> -<!-- Name completed by histogram_suffixes name="EnterpriseRetrievePolicyResponse" --> - <owner>emaxx@chromium.org</owner> <owner>igorcov@chromium.org</owner> <summary> On Chrome OS, the response obtained to retrieve policy request. + {EnterpriseRetrievePolicyResponse} </summary> + <token key="EnterpriseRetrievePolicyResponse"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + <variant name=".Device" summary="Device policy fetch response."> + <obsolete> + Removed in M91 since the data is no longer monitored. + </obsolete> + <owner>emaxx@chromium.org</owner> + <owner>igorcov@chromium.org</owner> + </variant> + <variant name=".DeviceLocalAccount" + summary="DeviceLocalAccount policy fetch response."> + <obsolete> + Removed in M91 since the data is no longer monitored. + </obsolete> + <owner>emaxx@chromium.org</owner> + <owner>igorcov@chromium.org</owner> + </variant> + <variant name=".User" summary="User policy fetch response."> + <obsolete> + Removed in M91 since the data is no longer monitored. + </obsolete> + <owner>emaxx@chromium.org</owner> + <owner>igorcov@chromium.org</owner> + </variant> + <variant name=".UserDuringLogin" + summary="User policy fetch response during login."> + <obsolete> + Removed in M91 since the data is no longer monitored. + </obsolete> + <owner>emaxx@chromium.org</owner> + <owner>igorcov@chromium.org</owner> + </variant> + </token> </histogram> <histogram name="Enterprise.StorePolicy.Duration" units="ms" @@ -1849,30 +2103,38 @@ </summary> </histogram> -<histogram name="Enterprise.UserRemoteCommand.Executed" +<histogram + name="Enterprise.UserRemoteCommand.Executed.Unsigned{Enterprise_RemoteCommandType}" enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - - <owner>asumaneev@google.com</owner> - <owner>managed-platforms@google.com</owner> - <summary> - Events for counting status of executed user remote commands. The metric - includes only signed user remote commands. Reports a final status of - finished remote command (e.g. success, failure or termination). - </summary> -</histogram> - -<histogram name="Enterprise.UserRemoteCommand.Executed.Unsigned" - enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> -<!-- Name completed by histogram_suffixes name="Enterprise.RemoteCommandType". --> - <owner>asumaneev@google.com</owner> <owner>managed-platforms@google.com</owner> <summary> Events for counting status of executed user remote commands. The metric includes only unsigned user remote commands. Reports a final status of finished remote command (e.g. success, failure or termination). + {Enterprise_RemoteCommandType} </summary> + <token key="Enterprise_RemoteCommandType" + variants="Enterprise_RemoteCommandType"> + <variant name=""/> + </token> +</histogram> + +<histogram + name="Enterprise.UserRemoteCommand.Executed{Enterprise_RemoteCommandType}" + enum="RemoteCommandExecutionStatus" expires_after="2022-03-01"> + <owner>asumaneev@google.com</owner> + <owner>managed-platforms@google.com</owner> + <summary> + Events for counting status of executed user remote commands. The metric + includes only signed user remote commands. Reports a final status of + finished remote command (e.g. success, failure or termination). + {Enterprise_RemoteCommandType} + </summary> + <token key="Enterprise_RemoteCommandType" + variants="Enterprise_RemoteCommandType"> + <variant name=""/> + </token> </histogram> <histogram name="Enterprise.UserRemoteCommand.Received"
diff --git a/tools/metrics/histograms/histograms_xml/event/histograms.xml b/tools/metrics/histograms/histograms_xml/event/histograms.xml index f92d8c4f..4c62e19 100644 --- a/tools/metrics/histograms/histograms_xml/event/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/event/histograms.xml
@@ -21,6 +21,11 @@ <histograms> +<variants name="TopControlsState"> + <variant name=".NoTopControlsMoved" summary="Top controls did not change."/> + <variant name=".TopControlsMoved" summary="Top controls changed."/> +</variants> + <histogram name="Event.AggregatedLatency.Renderer2" units="microseconds" expires_after="2021-12-12"> <owner>flackr@chromium.org</owner> @@ -294,7 +299,7 @@ </histogram> <histogram name="Event.Latency.EndToEnd.KeyPress" units="microseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>flackr@chromium.org</owner> <owner>input-dev@chromium.org</owner> <summary> @@ -357,7 +362,7 @@ </histogram> <histogram name="Event.Latency.HitTest" units="microseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -376,7 +381,7 @@ </histogram> <histogram name="Event.Latency.HitTestRecursive" units="microseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>schenney@chromium.org</owner> <owner>paint-dev@chromium.org</owner> <summary> @@ -671,7 +676,7 @@ </histogram> <histogram name="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2" - units="microseconds" expires_after="2021-11-14"> + units="microseconds" expires_after="2022-01-16"> <owner>nzolghadr@chromium.org</owner> <summary> Time between initial creation of a wheel/touch event and start of the frame @@ -842,7 +847,8 @@ </summary> </histogram> -<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4" +<histogram + name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}" units="microseconds" expires_after="2021-12-19"> <owner>flackr@chromium.org</owner> <owner>input-dev@chromium.org</owner> @@ -860,8 +866,11 @@ clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports will cause this metric to have an abnormal distribution. When considering revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. + solution. {TopControlsState} </summary> + <token key="TopControlsState" variants="TopControlsState"> + <variant name=""/> + </token> </histogram> <histogram @@ -1492,7 +1501,8 @@ </summary> </histogram> -<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4" +<histogram + name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}" units="microseconds" expires_after="never"> <!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) --> @@ -1514,8 +1524,11 @@ clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports will cause this metric to have an abnormal distribution. When considering revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. + solution. {TopControlsState} </summary> + <token key="TopControlsState" variants="TopControlsState"> + <variant name=""/> + </token> </histogram> <histogram @@ -1892,7 +1905,7 @@ </histogram> <histogram base="true" name="EventLatency" units="microseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>mohsen@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml index 0d3db4db..1abdbab0 100644 --- a/tools/metrics/histograms/histograms_xml/extensions/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/extensions/histograms.xml
@@ -21,6 +21,34 @@ <histograms> +<variants name="ExtensionFunctionExecutionTime"> + <variant name=".1msTo5ms" + summary="Execution took between 1ms and 5ms (tolerable)."/> + <variant name=".5msTo10ms" + summary="Execution took between 5ms and 10ms (slow)."/> + <variant name=".LessThan1ms" summary="Execution took less than 1ms (fast)."/> + <variant name=".Over10ms" summary="Execution took over 10ms (glacial)."/> +</variants> + +<variants name="ExtensionMessagingPortType"> + <variant name=".Extension" summary="A port opened to an extension context."/> + <variant name=".NativeApp" summary="A port opened to a native application."/> + <variant name=".Tab" summary="A port opened to a tab context."/> +</variants> + +<variants name="ExtensionWebUiPageType"> + <variant name=".MD" summary="The Material Design chrome://extensions page."> + <obsolete> + Deprecated and removed from code as of 10/2020. + </obsolete> + </variant> + <variant name=".Uber" summary="The Uber chrome://extensions page."> + <obsolete> + Deprecated and removed from code as of 04/2018. + </obsolete> + </variant> +</variants> + <histogram name="Extensions.ActionSetIconFailureType" enum="ExtensionActionSetIconFailureType" expires_after="M88"> <owner>rdevlin.cronin@chromium.org</owner> @@ -235,7 +263,8 @@ </summary> </histogram> -<histogram name="Extensions.Bindings.UpdateBindingsForContextTime" +<histogram + name="Extensions.Bindings.UpdateBindingsForContextTime{ExtensionContextType}" units="microseconds" expires_after="2021-01-31"> <obsolete> Code removed 2021/06. @@ -250,8 +279,54 @@ clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports will cause this metric to have an abnormal distribution. When considering revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the - solution. + solution. {ExtensionContextType} </summary> + <token key="ExtensionContextType"> + <variant name=""/> + <variant name=".BlessedExtensionContext" + summary="Blessed Extension Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".BlessedWebPageContext" summary="Blessed Web Page Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".ContentScriptContext" summary="Content Script Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".LockScreenExtensionContext" + summary="Lock Screen Extension Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".ServiceWorkerContext" summary="Service Worker Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".UnblessedExtensionContext" + summary="Unblessed Extension Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".WebPageContext" summary="(unblessed) Web Page Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + <variant name=".WebUIContext" summary="WebUI Context"> + <obsolete> + Removed 2021/06. + </obsolete> + </variant> + </token> </histogram> <histogram name="Extensions.BookmarkAppLaunchContainer" @@ -564,13 +639,22 @@ </summary> </histogram> -<histogram name="Extensions.Database.Open" enum="LevelDBStatus" - expires_after="never"> +<histogram name="Extensions.Database.Open{ExtensionsDatabaseOpen}" + enum="LevelDBStatus" expires_after="never"> <!-- expires-never: core storage metric; consumed in separate dashboard (go/chrome-storage-dashboard) --> <owner>dmurph@chromium.org</owner> <owner>pwnall@chromium.org</owner> - <summary>The result of an open attempt to an Extensions database.</summary> + <summary> + The result of an open attempt to an Extensions database. + {ExtensionsDatabaseOpen} + </summary> + <token key="ExtensionsDatabaseOpen"> + <variant name=""/> + <variant name=".Rules" summary="Rules backing stores"/> + <variant name=".Settings" summary="Settings backing stores"/> + <variant name=".State" summary="State backing stores"/> + </token> </histogram> <histogram name="Extensions.Database.Value.Restore" @@ -1322,13 +1406,20 @@ <summary>An extension has been uninstalled.</summary> </histogram> -<histogram name="Extensions.ExternalExtensionEvent" enum="SideloadUIEvents" - expires_after="M81"> +<histogram name="Extensions.ExternalExtensionEvent{ExternalExtensionEvent}" + enum="SideloadUIEvents" expires_after="M81"> <owner>Please list the metric's owners. Add more owner tags as needed.</owner> <summary> Records what happens to extensions that are sideloaded, grouped by the - ExternalExtensionEvent enum. + ExternalExtensionEvent enum. {ExternalExtensionEvent} </summary> + <token key="ExternalExtensionEvent"> + <variant name=""/> + <variant name="NonWebstore" + summary="sideloaded extensions that don't update from the webstore"/> + <variant name="Webstore" + summary="sideloaded extensions that update from the webstore"/> + </token> </histogram> <histogram name="Extensions.ExternalItemState" enum="ExternalItemState" @@ -1729,17 +1820,6 @@ </summary> </histogram> -<histogram base="true" name="Extensions.ForceInstalledTime" units="ms" - expires_after="2021-11-21"> - <owner>swapnilgupta@google.com</owner> - <owner>burunduk@chromium.org</owner> - <owner>managed-devices@google.com</owner> - <summary> - The amount of time elapsed during different stage of the installation - process for the enterprise policy forced extensions. - </summary> -</histogram> - <histogram name="Extensions.ForceInstalledTimedOutAndNotInstalledCount" units="units" expires_after="2021-12-05"> <owner>burunduk@chromium.org</owner> @@ -1762,6 +1842,43 @@ </summary> </histogram> +<histogram name="Extensions.ForceInstalledTime{ExtensionInstallStages}" + units="ms" expires_after="2021-11-21"> + <owner>swapnilgupta@google.com</owner> + <owner>burunduk@chromium.org</owner> + <owner>managed-devices@google.com</owner> + <summary> + The amount of time elapsed during different stage of the installation + process for the enterprise policy forced extensions. + {ExtensionInstallStages} + </summary> + <token key="ExtensionInstallStages"> + <variant name=""> + <obsolete> + Base histogram. Use suffixes of this histogram instead. + </obsolete> + </variant> + <variant name=".CheckingExpectationsStartTo.FinalizingStart" + summary="Time taken to perform the expectations checks to confirm + that the extension can be installed."/> + <variant name=".CopyingStartTo.UnpackingStart" + summary="Time taken to complete copying of extension archive into the + working directory"/> + <variant name=".DownloadingStartTo.ManifestDownloadComplete" + summary="Time taken to complete download of update manifest"/> + <variant name=".FinalizingStartTo.CRXInstallComplete" + summary="Time taken to complete the installation of the unpacked + extension."/> + <variant name=".ManifestDownloadCompleteTo.CRXDownloadComplete" + summary="Time taken to complete download of CRX"/> + <variant name=".UnpackingStartTo.CheckingExpectationsStart" + summary="Time taken to complete the unpacking of the extension + archive."/> + <variant name=".VerificationStartTo.CopyingStart" + summary="Time taken to complete signature verification of CRX"/> + </token> +</histogram> + <histogram name="Extensions.ForceInstalledTotalCandidateCount" units="units" expires_after="2021-12-05"> <owner>burunduk@chromium.org</owner> @@ -1883,15 +2000,21 @@ </summary> </histogram> -<histogram name="Extensions.Functions.FailedTime" enum="ExtensionFunctions" - expires_after="2021-12-12"> +<histogram + name="Extensions.Functions.FailedTime{ExtensionFunctionExecutionTime}" + enum="ExtensionFunctions" expires_after="2021-12-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> Recorded when an extension function call fails and finishes execution. The suffix indicates the exact bucket the function is in. See also Extensions.Functions.FailedTotalExecutionTime. + {ExtensionFunctionExecutionTime} </summary> + <token key="ExtensionFunctionExecutionTime" + variants="ExtensionFunctionExecutionTime"> + <variant name=""/> + </token> </histogram> <histogram name="Extensions.Functions.FailedTotalExecutionTime" units="ms" @@ -1935,15 +2058,21 @@ </summary> </histogram> -<histogram name="Extensions.Functions.SucceededTime" enum="ExtensionFunctions" - expires_after="2021-12-12"> +<histogram + name="Extensions.Functions.SucceededTime{ExtensionFunctionExecutionTime}" + enum="ExtensionFunctions" expires_after="2021-12-12"> <owner>rdevlin.cronin@chromium.org</owner> <owner>extensions-core@chromium.org</owner> <summary> Recorded when an extension function call succeeds and finishes execution. The suffix indicates the exact bucket the function is in. See also Extensions.Functions.SucceededTotalExecutionTime. + {ExtensionFunctionExecutionTime} </summary> + <token key="ExtensionFunctionExecutionTime" + variants="ExtensionFunctionExecutionTime"> + <variant name=""/> + </token> </histogram> <histogram name="Extensions.Functions.SucceededTotalExecutionTime" units="ms" @@ -2835,7 +2964,8 @@ <summary>The manifest version of each loaded extension.</summary> </histogram> -<histogram name="Extensions.Messaging.ExtensionPortsCreated" +<histogram + name="Extensions.Messaging.ExtensionPortsCreated{ExtensionMessagingPortCreationTime}" units="number of ports" expires_after="M85"> <owner>rdevlin.cronin@chromium.org</owner> <summary> @@ -2843,28 +2973,59 @@ Recorded once at the destruction of the script context (when no more ports could be created) if and only if at least one port was created in the context. Only includes ports to extension contexts (i.e., not ports created - to tabs or native apps). + to tabs or native apps). {ExtensionMessagingPortCreationTime} </summary> + <token key="ExtensionMessagingPortCreationTime"> + <variant name=""/> + <variant name=".InBeforeUnload" + summary="Created during an event handler for the 'beforeunload' event."> + <obsolete> + Deprecated and removed from code as of 05/2015. + </obsolete> + </variant> + <variant name=".InUnload" + summary="Created during an event handler for the 'unload' event."> + <obsolete> + Deprecated and removed from code as of 05/2015. + </obsolete> + </variant> + <variant name=".Normal" + summary="Created during any time other than the 'unload' or + 'beforeunload' handlers."> + <obsolete> + Deprecated and removed from code as of 05/2015. + </obsolete> + </variant> + <variant name=".Total" summary="The total number of ports created."/> + </token> </histogram> -<histogram name="Extensions.Messaging.GetPortIdAsyncTime" units="ms" - expires_after="M85"> +<histogram + name="Extensions.Messaging.GetPortIdAsyncTime{ExtensionMessagingPortType}" + units="ms" expires_after="M85"> <owner>rdevlin.cronin@chromium.org</owner> <summary> The total amount of time between when an extension opens a new channel and when it receives the global port id from the browser and can begin sending - messages. + messages. {ExtensionMessagingPortType} </summary> + <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType"> + <variant name=""/> + </token> </histogram> -<histogram name="Extensions.Messaging.GetPortIdSyncTime" units="ms" - expires_after="M85"> +<histogram + name="Extensions.Messaging.GetPortIdSyncTime{ExtensionMessagingPortType}" + units="ms" expires_after="M85"> <owner>rdevlin.cronin@chromium.org</owner> <summary> The amount of synchronous time taken for the renderer to request an extension message port id from the browser when a new channel is first - opened by an extension. + opened by an extension. {ExtensionMessagingPortType} </summary> + <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType"> + <variant name=""/> + </token> </histogram> <histogram name="Extensions.Messaging.MessageSize" units="bytes" @@ -2878,14 +3039,18 @@ </summary> </histogram> -<histogram name="Extensions.Messaging.SetPortIdTime" units="ms" - expires_after="M85"> +<histogram + name="Extensions.Messaging.SetPortIdTime{ExtensionMessagingPortType}" + units="ms" expires_after="M85"> <owner>rdevlin.cronin@chromium.org</owner> <summary> The amount of time for the renderer to inform the browser process of a new port being created with a certain id. This replaces the flow for - Extensions.Messaging.GetPortId[A]SyncTime. + Extensions.Messaging.GetPortId[A]SyncTime. {ExtensionMessagingPortType} </summary> + <token key="ExtensionMessagingPortType" variants="ExtensionMessagingPortType"> + <variant name=""/> + </token> </histogram> <histogram name="Extensions.MimeHandlerViewEvents" enum="MimeHandlerViewEvents" @@ -3944,19 +4109,25 @@ </summary> </histogram> -<histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime" units="ms" - expires_after="2021-12-01"> +<histogram + name="Extensions.WebUi.DocumentLoadedInMainFrameTime{ExtensionWebUiPageType}" + units="ms" expires_after="2021-12-01"> <owner>dpapad@chromium.org</owner> <owner>dbeam@chromium.org</owner> <summary> The amount of time between starting the provisional load and fully loading the document in the main frame of the chrome://extensions page. This corresponds to the WebContentsObserver::DocumentLoadedInFrame method. + {ExtensionWebUiPageType} </summary> + <token key="ExtensionWebUiPageType" variants="ExtensionWebUiPageType"> + <variant name=""/> + </token> </histogram> -<histogram name="Extensions.WebUi.LoadCompletedInMainFrame" units="ms" - expires_after="2021-12-01"> +<histogram + name="Extensions.WebUi.LoadCompletedInMainFrame{ExtensionWebUiPageType}" + units="ms" expires_after="2021-12-01"> <owner>dpapad@chromium.org</owner> <owner>dbeam@chromium.org</owner> <summary> @@ -3964,7 +4135,11 @@ completed the onload handler in the main frame of the chrome://extensions page. This corresponds to the WebContentsObserver::DocumentOnLoadCompletedInMainFrame method. + {ExtensionWebUiPageType} </summary> + <token key="ExtensionWebUiPageType" variants="ExtensionWebUiPageType"> + <variant name=""/> + </token> </histogram> <histogram
diff --git a/tools/metrics/histograms/histograms_xml/file/histograms.xml b/tools/metrics/histograms/histograms_xml/file/histograms.xml index 07615fe8..4a27f0c 100644 --- a/tools/metrics/histograms/histograms_xml/file/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/file/histograms.xml
@@ -197,8 +197,9 @@ </histogram> <histogram name="FileBrowser.FormatFileSystemType" - enum="FileManagerFormatFileSystemType" expires_after="2021-08-09"> + enum="FileManagerFormatFileSystemType" expires_after="M98"> <owner>austinct@chromium.org</owner> + <owner>src/ui/file_manager/OWNERS</owner> <summary> Chrome OS File Browser: this records the filesystem selected when formatting an external drive.
diff --git a/tools/metrics/histograms/histograms_xml/gcm/histograms.xml b/tools/metrics/histograms/histograms_xml/gcm/histograms.xml index bd3f842..aa955d1b 100644 --- a/tools/metrics/histograms/histograms_xml/gcm/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/gcm/histograms.xml
@@ -306,7 +306,7 @@ </histogram> <histogram name="GCM.RegistrationRequestStatus" - enum="GCMRegistrationRequestStatus" expires_after="2021-11-14"> + enum="GCMRegistrationRequestStatus" expires_after="2022-01-16"> <owner>peter@chromium.org</owner> <summary> Status code of the outcome of a GCM registration request. The Unknown error
diff --git a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml index 3a68b30..f21681d6 100644 --- a/tools/metrics/histograms/histograms_xml/gpu/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/gpu/histograms.xml
@@ -874,7 +874,7 @@ </histogram> <histogram name="GPU.GPUProcessLaunchTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>vmiura@chromium.org</owner> <summary> Startup time of the GPU process as measured by the GPU process host.
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml index 67e6229..945b0f1 100644 --- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -3240,6 +3240,9 @@ </histogram_suffixes> <histogram_suffixes name="CompromisedCredentialsAction" separator="."> + <obsolete> + Removed 07/2021 + </obsolete> <suffix name="Add" label="Insecure password is added to the database"/> <suffix name="Remove" label="Insecure password is removed from the database"/> <suffix name="Update" label="Insecure password is updated in the database"> @@ -5817,30 +5820,6 @@ </affected-histogram> </histogram_suffixes> -<histogram_suffixes name="Enterprise_RemoteCommandType" separator="."> - <suffix name="BrowserClearBrowsingData" label="Clear Browsing Data"/> - <suffix name="CommandEchoTest" label="Command echo test"/> - <suffix name="DeviceFetchStatus" label="Fetch status"/> - <suffix name="DeviceGetAvailableDiagnosticRoutines" - label="Get available diagnostic routines"/> - <suffix name="DeviceGetDiagnosticRoutineUpdate" - label="Get diagnostic routine update"/> - <suffix name="DeviceReboot" label="Reboot"/> - <suffix name="DeviceRefreshEnterpriseMachineCertificate" - label="Refresh enterprise machine certificate"/> - <suffix name="DeviceRemotePowerwash" label="Powerwash"/> - <suffix name="DeviceRunDiagnosticRoutine" label="Run diagnostic routine"/> - <suffix name="DeviceScreenshot" label="Screenshot"/> - <suffix name="DeviceSetVolume" label="Set volume"/> - <suffix name="DeviceStartCrdSession" label="Device start CRD session"/> - <suffix name="DeviceWipeUsers" label="Wipe users"/> - <suffix name="UserArcCommand" label="ARC command"/> - <affected-histogram name="Enterprise.DeviceRemoteCommand.Executed"/> - <affected-histogram name="Enterprise.DeviceRemoteCommand.Executed.Unsigned"/> - <affected-histogram name="Enterprise.UserRemoteCommand.Executed"/> - <affected-histogram name="Enterprise.UserRemoteCommand.Executed.Unsigned"/> -</histogram_suffixes> - <histogram_suffixes name="Enterprise_ResourceCacheTiming" separator="."> <obsolete> Removed 01/2020 since the histogram indicators were stable. @@ -5875,82 +5854,6 @@ <affected-histogram name="Enterprise.ResourceCacheTiming"/> </histogram_suffixes> -<histogram_suffixes name="EnterpriseAutoEnrollmentType" separator="."> - <suffix name="ForcedReenrollment" label="Forced Re-Enrollment"/> - <suffix name="InitialEnrollment" label="Initial Enrollment Exchange"/> - <affected-histogram name="Enterprise.AutoEnrollmentBucketDownloadTime"/> - <affected-histogram name="Enterprise.AutoEnrollmentExtraTime"/> - <affected-histogram name="Enterprise.AutoEnrollmentHashDanceSuccessTime"/> - <affected-histogram name="Enterprise.AutoEnrollmentProtocolTime"/> - <affected-histogram name="Enterprise.AutoEnrollmentPsmDmServerRequestStatus"/> - <affected-histogram - name="Enterprise.AutoEnrollmentPsmRequestNetworkErrorCode"/> - <affected-histogram name="Enterprise.AutoEnrollmentPsmResult"/> - <affected-histogram name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"/> - <affected-histogram name="Enterprise.AutoEnrollmentRequestStatus"/> -</histogram_suffixes> - -<histogram_suffixes name="EnterpriseDevicePolicyDeviceIdValidity" separator="."> - <obsolete> - Removed in M91 since the data is no longer required. - </obsolete> - <suffix name="InitialStore" - label="the initial device policy stored during enrollment"/> - <suffix name="Update" - label="the updated device policy that overwrites the previous one"/> - <affected-histogram name="Enterprise.DevicePolicyDeviceIdValidity"/> -</histogram_suffixes> - -<histogram_suffixes name="EnterpriseDMServerRequest" separator="."> - <owner>poromov@chromium.org</owner> - <owner>zmin@chromium.org</owner> - <suffix name="ActiveDirectoryEnrollPlayUser" - label="Active Directory Enroll Play User."/> - <suffix name="ActiveDirectoryPlayActivity" - label="Active Directory Play Activity."/> - <suffix name="AndroidManagementCheck" label="Android Management Check."/> - <suffix name="ApiAuthCodeFetch" label="Api Auth Code Fetch."/> - <suffix name="AttributeUpdate" label="Attribute Update."/> - <suffix name="AttributeUpdatePermission" - label="Attribute Update Permission."/> - <suffix name="AutoEnrollment" label="Auto Enrollment."/> - <suffix name="CertBasedRegistration" label="Cert Based Registration."/> - <suffix name="ChromeDesktopReport" label="Chrome Desktop Report."/> - <suffix name="DeviceStateRetrieval" label="Device State Retrieval."/> - <suffix name="GcmIdUpdate" label="Gcm Id Update."/> - <suffix name="InitialEnrollmentStateRetrieval" - label="Initial Enrollment State Retrieval."/> - <suffix name="Invalid" label="Invalid."/> - <suffix name="PolicyFetch" label="Policy Fetch."/> - <suffix name="Registration" label="Registration."/> - <suffix name="RemoteCommands" label="Remote Commands."/> - <suffix name="RequestLicenseTypes" label="Request License Types."/> - <suffix name="TokenEnrollment" label="Token Enrollment."/> - <suffix name="Unregistration" label="Unregistration."/> - <suffix name="UploadAppInstallReport" label="Upload App Install Report."/> - <suffix name="UploadCertificate" label="Upload Certificate."/> - <suffix name="UploadPolicyValidationReport" - label="Upload Policy Validation Report."/> - <suffix name="UploadrealtimeReport" label="Upload of real-time reports."/> - <suffix name="UploadStatus" label="Upload Status."/> - <affected-histogram name="Enterprise.DMServerRequestSuccess"/> -</histogram_suffixes> - -<histogram_suffixes name="EnterpriseRetrievePolicyResponse" separator="."> - <obsolete> - Removed in M91 since the data is no longer monitored. - </obsolete> - <owner>emaxx@chromium.org</owner> - <owner>igorcov@chromium.org</owner> - <suffix name="Device" label="Device policy fetch response."/> - <suffix name="DeviceLocalAccount" - label="DeviceLocalAccount policy fetch response."/> - <suffix name="User" label="User policy fetch response."/> - <suffix name="UserDuringLogin" - label="User policy fetch response during login."/> - <affected-histogram name="Enterprise.RetrievePolicyResponse"/> -</histogram_suffixes> - <histogram_suffixes name="EventLatencyBreakdowns" separator="."> <suffix name="Activation" label="The duration of the activation stage."> <obsolete> @@ -6393,86 +6296,6 @@ name="RendererScheduler.QueueingDurationWhenExpectedQueueingTime"/> </histogram_suffixes> -<histogram_suffixes name="ExtensionContextType" separator="."> - <obsolete> - Removed 2021/06. - </obsolete> - <suffix name="BlessedExtensionContext" label="Blessed Extension Context"/> - <suffix name="BlessedWebPageContext" label="Blessed Web Page Context"/> - <suffix name="ContentScriptContext" label="Content Script Context"/> - <suffix name="LockScreenExtensionContext" - label="Lock Screen Extension Context"/> - <suffix name="ServiceWorkerContext" label="Service Worker Context"/> - <suffix name="UnblessedExtensionContext" label="Unblessed Extension Context"/> - <suffix name="WebPageContext" label="(unblessed) Web Page Context"/> - <suffix name="WebUIContext" label="WebUI Context"/> - <affected-histogram name="Extensions.Bindings.UpdateBindingsForContextTime"/> -</histogram_suffixes> - -<histogram_suffixes name="ExtensionFunctionExecutionTime" separator="."> - <suffix name="1msTo5ms" - label="Execution took between 1ms and 5ms (tolerable)."/> - <suffix name="5msTo10ms" label="Execution took between 5ms and 10ms (slow)."/> - <suffix name="LessThan1ms" label="Execution took less than 1ms (fast)."/> - <suffix name="Over10ms" label="Execution took over 10ms (glacial)."/> - <affected-histogram name="Extensions.Functions.FailedTime"/> - <affected-histogram name="Extensions.Functions.SucceededTime"/> -</histogram_suffixes> - -<histogram_suffixes name="ExtensionInstallStages" separator="."> - <suffix name="CheckingExpectationsStartTo.FinalizingStart" - label="Time taken to perform the expectations checks to confirm that - the extension can be installed."/> - <suffix name="CopyingStartTo.UnpackingStart" - label="Time taken to complete copying of extension archive into the - working directory"/> - <suffix name="DownloadingStartTo.ManifestDownloadComplete" - label="Time taken to complete download of update manifest"/> - <suffix name="FinalizingStartTo.CRXInstallComplete" - label="Time taken to complete the installation of the unpacked - extension."/> - <suffix name="ManifestDownloadCompleteTo.CRXDownloadComplete" - label="Time taken to complete download of CRX"/> - <suffix name="UnpackingStartTo.CheckingExpectationsStart" - label="Time taken to complete the unpacking of the extension archive."/> - <suffix name="VerificationStartTo.CopyingStart" - label="Time taken to complete signature verification of CRX"/> - <affected-histogram name="Extensions.ForceInstalledTime"/> -</histogram_suffixes> - -<histogram_suffixes name="ExtensionMessagingPortCreationTime" separator="."> - <suffix name="InBeforeUnload" - label="Created during an event handler for the 'beforeunload' event."> - <obsolete> - Deprecated and removed from code as of 05/2015. - </obsolete> - </suffix> - <suffix name="InUnload" - label="Created during an event handler for the 'unload' event."> - <obsolete> - Deprecated and removed from code as of 05/2015. - </obsolete> - </suffix> - <suffix name="Normal" - label="Created during any time other than the 'unload' or 'beforeunload' - handlers."> - <obsolete> - Deprecated and removed from code as of 05/2015. - </obsolete> - </suffix> - <suffix name="Total" label="The total number of ports created."/> - <affected-histogram name="Extensions.Messaging.ExtensionPortsCreated"/> -</histogram_suffixes> - -<histogram_suffixes name="ExtensionMessagingPortType" separator="."> - <suffix name="Extension" label="A port opened to an extension context."/> - <suffix name="NativeApp" label="A port opened to a native application."/> - <suffix name="Tab" label="A port opened to a tab context."/> - <affected-histogram name="Extensions.Messaging.GetPortIdAsyncTime"/> - <affected-histogram name="Extensions.Messaging.GetPortIdSyncTime"/> - <affected-histogram name="Extensions.Messaging.SetPortIdTime"/> -</histogram_suffixes> - <histogram_suffixes name="Extensions_WebRequest_WS_RequestHeaders" separator="_"> <obsolete> @@ -6494,13 +6317,6 @@ <affected-histogram name="Extensions.WebRequest.WS_RequestHeaders"/> </histogram_suffixes> -<histogram_suffixes name="ExtensionsDatabaseOpen" separator="."> - <suffix name="Rules" label="Rules backing stores"/> - <suffix name="Settings" label="Settings backing stores"/> - <suffix name="State" label="State backing stores"/> - <affected-histogram name="Extensions.Database.Open"/> -</histogram_suffixes> - <histogram_suffixes name="ExtensionsDatabaseRestore" separator="."> <suffix name="Rules" label="Rules backing stores"/> <suffix name="Settings" label="Settings backing stores"/> @@ -6515,29 +6331,6 @@ <affected-histogram name="Extensions.ForceInstalledFailureReason3"/> </histogram_suffixes> -<histogram_suffixes name="ExtensionWebUiPageType" separator="."> - <suffix name="MD" label="The Material Design chrome://extensions page."> - <obsolete> - Deprecated and removed from code as of 10/2020. - </obsolete> - </suffix> - <suffix name="Uber" label="The Uber chrome://extensions page."> - <obsolete> - Deprecated and removed from code as of 04/2018. - </obsolete> - </suffix> - <affected-histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime"/> - <affected-histogram name="Extensions.WebUi.LoadCompletedInMainFrame"/> -</histogram_suffixes> - -<histogram_suffixes name="ExternalExtensionEvent" separator=""> - <suffix name="NonWebstore" - label="sideloaded extensions that don't update from the webstore"/> - <suffix name="Webstore" - label="sideloaded extensions that update from the webstore"/> - <affected-histogram name="Extensions.ExternalExtensionEvent"/> -</histogram_suffixes> - <histogram_suffixes name="FaviconIconType" separator="."> <obsolete> Removed as of 12/2017. @@ -8081,6 +7874,8 @@ label="In product help feed card menu on NTP."/> <suffix name="IPH_FeedHeaderMenu" label="In product help feed header menu on NTP."/> + <suffix name="IPH_FeedSwipeRefresh" + label="In product help for swipe refreshing feeds on NTP."/> <suffix name="IPH_GlobalMediaControls" label="In product help for the Global Media Controls."/> <suffix name="IPH_HomePageButton" label="In product help home page button."> @@ -19601,15 +19396,6 @@ <affected-histogram name="Event.TimestampHasValidTimebase"/> </histogram_suffixes> -<histogram_suffixes name="TopControlsState" separator="."> - <suffix name="NoTopControlsMoved" label="Top controls did not change."/> - <suffix name="TopControlsMoved" label="Top controls changed."/> - <affected-histogram - name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4"/> - <affected-histogram - name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4"/> -</histogram_suffixes> - <histogram_suffixes name="TotalTimeToHttpsGoogle" separator="."> <suffix name="NotQuic" label=""> <obsolete>
diff --git a/tools/metrics/histograms/histograms_xml/ios/histograms.xml b/tools/metrics/histograms/histograms_xml/ios/histograms.xml index c599558be..1ab802c0 100644 --- a/tools/metrics/histograms/histograms_xml/ios/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ios/histograms.xml
@@ -292,7 +292,7 @@ </histogram> <histogram name="IOS.DefaultBrowserFullscreenPromoRemindMe" - enum="IOSDefaultBrowserFullscreenPromoAction" expires_after="2021-11-07"> + enum="IOSDefaultBrowserFullscreenPromoAction" expires_after="2022-01-16"> <owner>thegreenfrog@chromium.org</owner> <owner>rohitrao@chromium.org</owner> <summary> @@ -498,7 +498,7 @@ </summary> </histogram> -<histogram name="IOS.Incognito.TimeSpent" units="ms" expires_after="2021-09-12"> +<histogram name="IOS.Incognito.TimeSpent" units="ms" expires_after="2022-01-16"> <owner>olivierrobin@chromium.org</owner> <owner>thegreenfrog@chromium.org</owner> <summary> @@ -822,7 +822,7 @@ </histogram> <histogram name="IOS.MultiWindow.OpenInNewWindow" enum="WindowActivityOrigin" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>marq@chromium.org</owner> <owner>djean@chromium.org</owner> <summary> @@ -842,7 +842,7 @@ </histogram> <histogram name="IOS.NTP.Impression" enum="IOSNTPImpression" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>gambard@chromium.org</owner> <summary> The type of NTP impressions on iOS, split by type of suggestions shown
diff --git a/tools/metrics/histograms/histograms_xml/login/histograms.xml b/tools/metrics/histograms/histograms_xml/login/histograms.xml index 8d8ef55f..6b8557e 100644 --- a/tools/metrics/histograms/histograms_xml/login/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/login/histograms.xml
@@ -204,7 +204,7 @@ </histogram> <histogram name="Login.PromptToCompleteLoginTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>rsorokin@chromium.org</owner> <owner>achuith@chromium.org</owner> <owner>cros-oac@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/media/histograms.xml b/tools/metrics/histograms/histograms_xml/media/histograms.xml index 4d93aebd..a576f40 100644 --- a/tools/metrics/histograms/histograms_xml/media/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/media/histograms.xml
@@ -1692,7 +1692,7 @@ </histogram> <histogram base="true" name="Media.EME.CdmFileIO.TimeTo" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>jrummell@chromium.org</owner> <owner>media-dev@chromium.org</owner> <summary> @@ -4193,7 +4193,7 @@ </summary> </histogram> -<histogram name="Media.Video.Roughness" units="ms" expires_after="2021-11-14"> +<histogram name="Media.Video.Roughness" units="ms" expires_after="2022-01-16"> <owner>eugene@chromium.org</owner> <owner>videostack-eng@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/memory/histograms.xml b/tools/metrics/histograms/histograms_xml/memory/histograms.xml index aa9fdda..33f3cc94 100644 --- a/tools/metrics/histograms/histograms_xml/memory/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/memory/histograms.xml
@@ -500,7 +500,7 @@ </histogram> <histogram name="Memory.Discardable.LockingSuccess" - enum="BooleanLockingSuccess" expires_after="2021-11-14"> + enum="BooleanLockingSuccess" expires_after="2022-01-16"> <owner>thiabaud@google.com</owner> <owner>lizeb@chromium.org</owner> <summary> @@ -1100,7 +1100,7 @@ </histogram> <histogram name="Memory.Experimental.Renderer.HighestPrivateMemoryFootprint" - units="MB" expires_after="2021-11-14"> + units="MB" expires_after="2022-01-16"> <owner>tasak@google.com</owner> <owner>bartekn@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/navigation/histograms.xml b/tools/metrics/histograms/histograms_xml/navigation/histograms.xml index 1c8b99e..ea12b3b 100644 --- a/tools/metrics/histograms/histograms_xml/navigation/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/navigation/histograms.xml
@@ -845,7 +845,7 @@ </histogram> <histogram name="Navigation.IsSameSiteInstance" - enum="NavigationIsSameSiteInstance" expires_after="2021-11-14"> + enum="NavigationIsSameSiteInstance" expires_after="2022-01-16"> <owner>arthursonzogni@chromium.org</owner> <owner>clamy@chromium.org</owner> <owner>nasko@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/net/histograms.xml b/tools/metrics/histograms/histograms_xml/net/histograms.xml index 12b6210..a43a17b 100644 --- a/tools/metrics/histograms/histograms_xml/net/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/net/histograms.xml
@@ -51,7 +51,7 @@ </histogram> <histogram name="Net.AlternateProtocolUsage" enum="AlternateProtocolUsage" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -61,7 +61,7 @@ </histogram> <histogram name="Net.AlternateProtocolUsageGoogle" - enum="AlternateProtocolUsage" expires_after="2021-11-14"> + enum="AlternateProtocolUsage" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -383,7 +383,7 @@ </histogram> <histogram name="Net.ConnectionInfo.MainFrame" enum="ConnectionInfo" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -996,7 +996,7 @@ <histogram name="Net.DNS.HTTPSSVC.RecordHttps.AnyProvider.ExpectNoerror.Parsable" - enum="BooleanValid" expires_after="2021-11-14"> + enum="BooleanValid" expires_after="2022-01-16"> <owner>ericorth@chromium.org</owner> <owner>dmcardle@chromium.org</owner> <summary> @@ -1258,7 +1258,7 @@ </histogram> <histogram name="Net.DNS.ProbeSequence.ConfigChange.Success.AttemptTime" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>ericorth@chromium.org</owner> <owner>doh-core@google.com</owner> <summary> @@ -1441,7 +1441,7 @@ </histogram> <histogram name="Net.DNS.SecureDnsTask.DnsModeAutomatic.FailureTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>ericorth@chromium.org</owner> <owner>doh-core@google.com</owner> <summary> @@ -2436,7 +2436,7 @@ </histogram> <histogram name="Net.QuicActiveSessions" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -2806,7 +2806,7 @@ </histogram> <histogram name="Net.QuicNumSentClientHellos" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary>The number of client hello messages sent.</summary> @@ -3089,7 +3089,7 @@ </histogram> <histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient" - enum="QuicErrorCodes" expires_after="2021-11-14"> + enum="QuicErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3099,7 +3099,7 @@ </histogram> <histogram name="Net.QuicSession.ConnectionCloseErrorCodeClientGoogle" - enum="QuicErrorCodes" expires_after="2021-11-14"> + enum="QuicErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3109,7 +3109,7 @@ </histogram> <histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer" - enum="QuicErrorCodes" expires_after="2021-11-14"> + enum="QuicErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3119,7 +3119,7 @@ </histogram> <histogram name="Net.QuicSession.ConnectionCloseErrorCodeServerGoogle" - enum="QuicErrorCodes" expires_after="2021-11-14"> + enum="QuicErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3438,7 +3438,7 @@ </histogram> <histogram name="Net.QuicSession.HandshakeConfirmedTime" units="Milliseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3750,7 +3750,7 @@ </histogram> <histogram name="Net.QuicSession.NumPendingStreamRequests" - units="stream requests" expires_after="2021-11-14"> + units="stream requests" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3864,7 +3864,7 @@ </histogram> <histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -3914,7 +3914,7 @@ </histogram> <histogram name="Net.QuicSession.PortMigration" - enum="QuicConnectionMigrationStatus" expires_after="2021-11-14"> + enum="QuicConnectionMigrationStatus" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary>The result of a QUIC port migration attempt.</summary> @@ -4041,14 +4041,14 @@ </histogram> <histogram name="Net.QuicSession.QuicVersion" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary>Version of the QUIC protocol used for this connection.</summary> </histogram> <histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4058,7 +4058,7 @@ </histogram> <histogram name="Net.QuicSession.ReadError.CurrentNetwork.HandshakeConfirmed" - enum="NetErrorCodes" expires_after="2021-11-14"> + enum="NetErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4293,7 +4293,7 @@ </histogram> <histogram name="Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed" - enum="QuicErrorCodes" expires_after="2021-11-14"> + enum="QuicErrorCodes" expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4499,7 +4499,7 @@ </histogram> <histogram name="Net.QuicSession.VerifyProofTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4550,7 +4550,7 @@ </histogram> <histogram name="Net.QuicSession.ZeroRttReason" - enum="SSLHandshakeEarlyDataReason" expires_after="2021-11-14"> + enum="SSLHandshakeEarlyDataReason" expires_after="2022-01-16"> <owner>nharper@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4560,7 +4560,7 @@ </histogram> <histogram name="Net.QuicSession.ZeroRttReasonGoogle" - enum="SSLHandshakeEarlyDataReason" expires_after="2021-11-14"> + enum="SSLHandshakeEarlyDataReason" expires_after="2022-01-16"> <owner>renjietang@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary> @@ -4582,7 +4582,7 @@ </histogram> <histogram name="Net.QuicSession.ZeroRttState" enum="ZeroRttState" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>renjietang@chromium.org</owner> <owner>src/net/quic/OWNERS</owner> <summary>Whether 0-RTT was successfully used in the connection.</summary> @@ -4970,7 +4970,7 @@ </histogram> <histogram name="Net.SpdyPushedStreamFate" enum="SpdyPushedStreamFate" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary> @@ -5037,7 +5037,7 @@ </histogram> <histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary>Net error codes when SpdySession was closed.</summary> @@ -5131,7 +5131,7 @@ </histogram> <histogram name="Net.SpdyStreamsPushedAndClaimedPerSession" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dschinazi@chromium.org</owner> <owner>src/net/OWNERS</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml index 56e7e3f..5c3b60f 100644 --- a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
@@ -304,7 +304,7 @@ </histogram> <histogram name="NewTabPage.ContentSuggestions.MenuOpened" units="index" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>freedjm@chromium.org</owner> <owner>feed@chromium.org</owner> <summary> @@ -724,7 +724,7 @@ </histogram> <histogram name="NewTabPage.Customized" enum="NTPCustomizedFeatures" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -902,7 +902,7 @@ </histogram> <histogram name="NewTabPage.LogoShown" enum="NewTabPageLogoShown" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1185,7 +1185,7 @@ </histogram> <histogram name="NewTabPage.NumberOfTiles" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1213,7 +1213,7 @@ </histogram> <histogram name="NewTabPage.OneGoogleBar.ShownTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -1235,7 +1235,7 @@ <histogram name="NewTabPage.Promo.EnhancedProtectionPromo.ImpressionUntilAction" - units="units" expires_after="2021-11-14"> + units="units" expires_after="2022-01-16"> <owner>bdea@chromium.org</owner> <owner>chrome-safebrowsing-core@google.com</owner> <summary> @@ -1336,7 +1336,7 @@ </histogram> <histogram name="NewTabPage.Promos.ShownTime" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner> @@ -2016,7 +2016,7 @@ </histogram> <histogram name="NewTabPage.VoiceActions" enum="NewTabPageVoiceAction" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>tiborg@chromium.org</owner> <owner>yyushkina@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/offline/histograms.xml b/tools/metrics/histograms/histograms_xml/offline/histograms.xml index b4b672f..16b37c6 100644 --- a/tools/metrics/histograms/histograms_xml/offline/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/offline/histograms.xml
@@ -106,7 +106,7 @@ </histogram> <histogram name="OfflineIndicator.ConnectivityChanged.DeviceState.Offline" - enum="OfflineIndicatorSurfaceState" expires_after="2021-11-14"> + enum="OfflineIndicatorSurfaceState" expires_after="2022-01-16"> <owner>curranmax@chromium.org</owner> <owner>tbansal@chromium.org</owner> <owner>sinansahin@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml index a6a9fafc..d882f4a 100644 --- a/tools/metrics/histograms/histograms_xml/others/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -728,7 +728,7 @@ </histogram> <histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>pjmclachlan@google.com</owner> <owner>pcovell@google.com</owner> <summary> @@ -753,7 +753,7 @@ </histogram> <histogram name="AppBanners.InstallEvent" enum="AppBannersInstallEvent" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>pjmclachlan@google.com</owner> <owner>pcovell@google.com</owner> <summary> @@ -777,7 +777,7 @@ </histogram> <histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dominickn@chromium.org</owner> <owner>pjmclachlan@google.com</owner> <summary> @@ -2949,7 +2949,7 @@ </histogram> <histogram name="Clipboard.Read" enum="ClipboardFormatRead" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -2977,7 +2977,7 @@ </histogram> <histogram name="Clipboard.Write" enum="ClipboardFormatWrite" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>huangdarwin@chromium.org</owner> <owner>src/ui/base/clipboard/OWNERS</owner> <summary> @@ -3043,7 +3043,7 @@ </histogram> <histogram base="true" name="CompositorLatency" units="microseconds" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>sadrul@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -6794,7 +6794,7 @@ </histogram> <histogram name="Graphics.Smoothness.Checkerboarding" units="%" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>sadrul@chromium.org</owner> <owner>graphics-dev@chromium.org</owner> <summary> @@ -6943,7 +6943,7 @@ </histogram> <histogram name="Graphics.Smoothness.MaxPercentDroppedFrames_1sWindow" - units="%" expires_after="2021-11-12"> + units="%" expires_after="2022-01-16"> <owner>behdadb@chromium.org</owner> <owner>sadrul@chromium.org</owner> <summary> @@ -7761,7 +7761,7 @@ </histogram> <histogram name="ImportantFile.FileCreateError" enum="PlatformFileError" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>grt@chromium.org</owner> <owner>xaerox@yandex-team.ru</owner> <summary> @@ -9043,7 +9043,7 @@ </histogram> <histogram name="Lens.ImageClassification.ClassificationTime.EarlyTerminatedMs" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>yusuyoutube@google.com</owner> <owner>benwgold@google.com</owner> <summary> @@ -10928,7 +10928,7 @@ </histogram> <histogram name="NQE.RTT.OnECTComputation" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>bengr@chromium.org</owner> <owner>tbansal@chromium.org</owner> <summary> @@ -11573,7 +11573,7 @@ </histogram> <histogram name="PDF.LoadStatus" enum="ChromePDFViewerLoadStatus" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>kmoon@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary> @@ -11583,7 +11583,7 @@ </summary> </histogram> -<histogram name="PDF.PageCount" units="pages" expires_after="2021-11-14"> +<histogram name="PDF.PageCount" units="pages" expires_after="2022-01-16"> <owner>hnakashima@chromium.org</owner> <owner>thestig@chromium.org</owner> <summary> @@ -14099,7 +14099,7 @@ </histogram> <histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -14208,7 +14208,7 @@ </histogram> <histogram name="SB2.ResourceTypes2" enum="ContentResourceType2" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>vakh@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -15251,7 +15251,7 @@ </histogram> <histogram name="SiteEngagementService.EngagementType" - enum="SiteEngagementServiceEngagementType" expires_after="2021-11-14"> + enum="SiteEngagementServiceEngagementType" expires_after="2022-01-16"> <owner>calamity@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -15320,7 +15320,7 @@ </histogram> <histogram name="SiteEngagementService.TotalEngagement" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>calamity@chromium.org</owner> <owner>dominickn@chromium.org</owner> <summary> @@ -15331,7 +15331,7 @@ </histogram> <histogram name="SiteIsolatedCodeCache.JS.Behaviour" - enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2021-11-14"> + enum="SiteIsolatedCodeCacheJSBehaviour" expires_after="2022-01-16"> <owner>mythria@chromium.org</owner> <owner>v8-team@google.com</owner> <summary> @@ -15813,7 +15813,7 @@ </histogram> <histogram name="SpellCheck.SpellingService.RequestDuration" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>yyushkina@google.com</owner> <owner>gujen@google.com</owner> <owner>chrome-language@google.com</owner> @@ -16519,7 +16519,7 @@ </histogram> <histogram name="SupervisedUsers.PerAppTimeLimits.BlockedAppsCount" - units="Apps" expires_after="2021-11-14"> + units="Apps" expires_after="2022-01-16"> <owner>agawronska@chromium.org</owner> <owner>yilkal@chromium.org</owner> <owner>cros-families@google.com</owner> @@ -18784,7 +18784,7 @@ </histogram> <histogram base="true" name="WebApp.Engagement" - enum="SiteEngagementServiceEngagementType" expires_after="2021-11-14"> + enum="SiteEngagementServiceEngagementType" expires_after="2022-01-16"> <owner>calamity@chromium.org</owner> <owner>mgiuca@chromium.org</owner> <owner>loyso@chromium.org</owner> @@ -18859,7 +18859,7 @@ </histogram> <histogram name="Webapp.Install.InstallEvent" enum="WebappInstallSource" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>dominickn@chromium.org</owner> <owner>loyso@chromium.org</owner> <owner>calamity@chromium.org</owner> @@ -18903,7 +18903,7 @@ </histogram> <histogram name="Webapp.InstallResult" enum="WebAppInstallResultCode" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <!-- Name completed by histogram_suffixes name="WebAppType" --> <owner>calamity@chromium.org</owner> @@ -19099,7 +19099,7 @@ </histogram> <histogram name="Webapp.SystemApps.FreshInstallDuration" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>calamity@chromium.org</owner> <owner>ortuno@chromium.org</owner> <summary> @@ -19139,7 +19139,7 @@ </histogram> <histogram name="Webapp.UninstallDialogAction" - enum="WebappUninstallDialogAction" expires_after="2021-11-14"> + enum="WebappUninstallDialogAction" expires_after="2022-01-16"> <owner>benwells@chromium.org</owner> <owner>dominickn@chromium.org</owner> <owner>loyso@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/page/histograms.xml b/tools/metrics/histograms/histograms_xml/page/histograms.xml index 0331bf41..c132d0f9 100644 --- a/tools/metrics/histograms/histograms_xml/page/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/page/histograms.xml
@@ -1424,7 +1424,7 @@ <histogram name="PageLoad.Experimental.NavigationTiming.NavigationStartToFirstRequestStart" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>nhiroki@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary> @@ -1446,7 +1446,7 @@ <histogram name="PageLoad.Experimental.NavigationTiming.NavigationStartToNavigationCommitSent" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>nhiroki@chromium.org</owner> <owner>chrome-loading@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/password/histograms.xml b/tools/metrics/histograms/histograms_xml/password/histograms.xml index 0832594..2248c810 100644 --- a/tools/metrics/histograms/histograms_xml/password/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/password/histograms.xml
@@ -138,7 +138,7 @@ </histogram> <histogram name="PasswordBubble.CompromisedBubble.CheckClicked" - enum="BooleanClicked" expires_after="2021-11-14"> + enum="BooleanClicked" expires_after="2022-01-16"> <owner>vasilii@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -148,7 +148,7 @@ </histogram> <histogram name="PasswordBubble.CompromisedBubble.Type" - enum="PasswordBubbleFollowupType" expires_after="2021-11-14"> + enum="PasswordBubbleFollowupType" expires_after="2022-01-16"> <owner>vasilii@chromium.org</owner> <owner>kazinova@google.com</owner> <summary> @@ -183,7 +183,7 @@ </histogram> <histogram name="PasswordGeneration.GeneratedPasswordWasEdited" - enum="BooleanGeneratedPasswordWasEdited" expires_after="2021-11-14"> + enum="BooleanGeneratedPasswordWasEdited" expires_after="2022-01-16"> <owner>kolos@chromium.org</owner> <summary> Measures the frequency of user editing of generated passwords. Uploaded once @@ -221,7 +221,7 @@ </histogram> <histogram name="PasswordGeneration.SubmissionEvent" - enum="PasswordSubmissionEvent" expires_after="2021-11-14"> + enum="PasswordSubmissionEvent" expires_after="2022-01-16"> <owner>kazinova@google.com</owner> <owner>kolos@chromium.org</owner> <summary> @@ -1081,6 +1081,9 @@ <histogram name="PasswordManager.CompromisedCredentials" enum="InsecureCredentialsType" expires_after="2021-12-05"> + <obsolete> + Removed 07/2021 + </obsolete> <owner>bdea@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -2257,7 +2260,7 @@ </histogram> <histogram name="PasswordManager.SaveUIDismissalReasonAfterUnblacklisting" - enum="PasswordManagerUIDismissalReason" expires_after="2021-11-07"> + enum="PasswordManagerUIDismissalReason" expires_after="2022-01-16"> <owner>ioanap@chromium.org</owner> <owner>vasilii@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/platform/histograms.xml b/tools/metrics/histograms/histograms_xml/platform/histograms.xml index 54e07da..e30496c 100644 --- a/tools/metrics/histograms/histograms_xml/platform/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/platform/histograms.xml
@@ -352,7 +352,7 @@ </histogram> <histogram name="Platform.DetachableBase.ROUpdateResult" - enum="DetachableBaseROUpdateResult" expires_after="2021-11-14"> + enum="DetachableBaseROUpdateResult" expires_after="2022-01-16"> <owner>drinkcat@chromium.org</owner> <owner>fshao@chromium.org</owner> <owner>chromeos-kukui@google.com</owner> @@ -474,7 +474,7 @@ </histogram> <histogram name="Platform.IntelMaxMicroArchitecture" - enum="IntelMaxMicroArchitecture" expires_after="2021-11-14"> + enum="IntelMaxMicroArchitecture" expires_after="2022-01-16"> <owner>fbarchard@chromium.org</owner> <owner>pwnall@chromium.org</owner> <summary> @@ -593,7 +593,7 @@ </summary> </histogram> -<histogram name="Platform.Meminfo" units="KB" expires_after="2021-11-14"> +<histogram name="Platform.Meminfo" units="KB" expires_after="2022-01-16"> <owner>hajimehoshi@chromium.org</owner> <owner>kouhei@chromium.org</owner> <owner>sonnyrao@chromium.org</owner> @@ -1312,7 +1312,7 @@ </histogram> <histogram name="Platform.Trunks.TpmErrorCode" enum="TPMResponseCode" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>yich@google.com</owner> <owner>cros-hwsec+uma@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/print/histograms.xml b/tools/metrics/histograms/histograms_xml/print/histograms.xml index 85bbd2f..a9f0f39 100644 --- a/tools/metrics/histograms/histograms_xml/print/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/print/histograms.xml
@@ -218,7 +218,7 @@ </histogram> <histogram name="PrintPreview.PrintSettings" enum="PrintSettings" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>thestig@chromium.org</owner> <owner>awscreen@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/profile/histograms.xml b/tools/metrics/histograms/histograms_xml/profile/histograms.xml index 9a7b345..4a8954f 100644 --- a/tools/metrics/histograms/histograms_xml/profile/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/profile/histograms.xml
@@ -97,7 +97,7 @@ </histogram> <histogram name="Profile.BrowserActive.PerProfile" enum="Profile" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>msarda@chromium.org</owner> <owner>tangltom@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml index b2af543..a959cd858 100644 --- a/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/safe_browsing/histograms.xml
@@ -201,6 +201,17 @@ </summary> </histogram> +<histogram name="SafeBrowsing.CredentialPhishedStatusChange" + enum="CredentialPhishedStatus" expires_after="2021-12-01"> + <owner>bdea@chromium.org</owner> + <owner>chrome-safebrowsing-alerts@google.com</owner> + <summary> + Recorded when the phished status of a saved credential changes. Records when + a credential is marked phished or when a phished insecure credential entry + is removed because the site was marked as legitimate. + </summary> +</histogram> + <histogram name="SafeBrowsing.Daily.BypassCountLast28Days.{UserState}.{EventType}" units="events" expires_after="2022-02-12"> @@ -1227,7 +1238,7 @@ </histogram> <histogram name="SafeBrowsing.RT.GetToken.Time" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1238,7 +1249,7 @@ </histogram> <histogram name="SafeBrowsing.RT.HasTokenFromFetcher" enum="BooleanHasToken" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1249,7 +1260,7 @@ </histogram> <histogram name="SafeBrowsing.RT.HasTokenInRequest" enum="BooleanHasToken" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1271,7 +1282,7 @@ </histogram> <histogram name="SafeBrowsing.RT.IsLookupServiceAvailable" - enum="BooleanAvailable" expires_after="2021-11-14"> + enum="BooleanAvailable" expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1283,7 +1294,7 @@ </histogram> <histogram name="SafeBrowsing.RT.IsLookupSuccessful" enum="BooleanSuccess" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary> @@ -1365,7 +1376,7 @@ </histogram> <histogram name="SafeBrowsing.RT.Request.UserPopulation" - enum="SafeBrowsingUserPopulation" expires_after="2021-11-14"> + enum="SafeBrowsingUserPopulation" expires_after="2022-01-16"> <owner>xinghuilu@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml b/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml index 92e4026e..d05b0967 100644 --- a/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/sb_client/histograms.xml
@@ -125,7 +125,7 @@ </histogram> <histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>drubery@chromium.org</owner> <owner>chrome-safebrowsing-alerts@google.com</owner> <owner>mattm@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/settings/histograms.xml b/tools/metrics/histograms/histograms_xml/settings/histograms.xml index 7550fd31..739a6241 100644 --- a/tools/metrics/histograms/histograms_xml/settings/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/settings/histograms.xml
@@ -404,7 +404,7 @@ </histogram> <histogram name="Settings.StartupPageLoadSettings" enum="SessionStartupPref" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>mpearson@chromium.org</owner> <owner>tiborg@chromium.org</owner> <owner>chrome-desktop-ntp@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/signin/histograms.xml b/tools/metrics/histograms/histograms_xml/signin/histograms.xml index d56af8d..59235f1 100644 --- a/tools/metrics/histograms/histograms_xml/signin/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/signin/histograms.xml
@@ -827,7 +827,7 @@ </histogram> <histogram name="Signin.OAuth2MintToken.ApiCallResult" - enum="OAuth2MintTokenApiCallResult" expires_after="2021-11-14"> + enum="OAuth2MintTokenApiCallResult" expires_after="2022-01-16"> <owner>alexilin@chromium.org</owner> <owner>droger@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/stability/histograms.xml b/tools/metrics/histograms/histograms_xml/stability/histograms.xml index 8024d03..44813a8 100644 --- a/tools/metrics/histograms/histograms_xml/stability/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/stability/histograms.xml
@@ -147,7 +147,7 @@ </histogram> <histogram name="Stability.BadMessageTerminated.Content" - enum="BadMessageReasonContent" expires_after="2021-11-14"> + enum="BadMessageReasonContent" expires_after="2022-01-16"> <owner>jam@chromium.org</owner> <owner>jamescook@chromium.org</owner> <summary> @@ -329,7 +329,7 @@ </histogram> <histogram name="Stability.Experimental.PageLoads" enum="StabilityPageLoadType" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>fdoray@chromium.org</owner> <owner>catan-team@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/startup/histograms.xml b/tools/metrics/histograms/histograms_xml/startup/histograms.xml index 8bb190f..b897ee50 100644 --- a/tools/metrics/histograms/histograms_xml/startup/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/startup/histograms.xml
@@ -66,7 +66,7 @@ </histogram> <histogram base="true" name="Startup.Android.Cold.TimeToFirstContentfulPaint" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>pasko@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary> @@ -79,7 +79,7 @@ </histogram> <histogram base="true" name="Startup.Android.Cold.TimeToFirstNavigationCommit" - units="ms" expires_after="2021-11-14"> + units="ms" expires_after="2022-01-16"> <owner>pasko@chromium.org</owner> <owner>alexilin@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/subresource/histograms.xml b/tools/metrics/histograms/histograms_xml/subresource/histograms.xml index 867872c..eabacf2 100644 --- a/tools/metrics/histograms/histograms_xml/subresource/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/subresource/histograms.xml
@@ -505,7 +505,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationList" - enum="ActivationList" expires_after="2021-11-14"> + enum="ActivationList" expires_after="2022-01-16"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary> @@ -515,7 +515,7 @@ </histogram> <histogram name="SubresourceFilter.PageLoad.ActivationState" - enum="SubresourceFilterActivationState" expires_after="2021-11-14"> + enum="SubresourceFilterActivationState" expires_after="2022-01-16"> <owner>alexmt@chromium.org</owner> <owner>chrome-ads-histograms@google.com</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/sync/histograms.xml b/tools/metrics/histograms/histograms_xml/sync/histograms.xml index c70538c..0a78395 100644 --- a/tools/metrics/histograms/histograms_xml/sync/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/sync/histograms.xml
@@ -79,7 +79,7 @@ </histogram> <histogram name="Sync.BookmarkGUIDSource2" enum="BookmarkGUIDSource" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>rushans@google.com</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component> @@ -228,7 +228,7 @@ </histogram> <histogram name="Sync.ConfigureDataTypeManagerOption" - enum="SyncFeatureOrTransport" expires_after="2021-11-14"> + enum="SyncFeatureOrTransport" expires_after="2022-01-16"> <owner>treib@chromium.org</owner> <component>Services>Sync</component> <summary> @@ -1081,7 +1081,7 @@ </histogram> <histogram name="Sync.PostedDataTypeCommitRequest" enum="SyncModelTypes" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>mastiz@chromium.org</owner> <owner>jkrcal@chromium.org</owner> <component>Services>Sync</component> @@ -1095,7 +1095,7 @@ </histogram> <histogram name="Sync.PostedDataTypeGetUpdatesRequest" enum="SyncModelTypes" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>mastiz@chromium.org</owner> <owner>jkrcal@chromium.org</owner> <component>Services>Sync</component> @@ -1293,7 +1293,7 @@ </histogram> <histogram name="Sync.StopSource" enum="SyncStopSource" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>treib@chromium.org</owner> <owner>mastiz@chromium.org</owner> <component>Services>Sync</component>
diff --git a/tools/metrics/histograms/histograms_xml/tab/histograms.xml b/tools/metrics/histograms/histograms_xml/tab/histograms.xml index b86d34e5..9b7dbef 100644 --- a/tools/metrics/histograms/histograms_xml/tab/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/tab/histograms.xml
@@ -602,7 +602,7 @@ </histogram> <histogram name="TabGroups.CollapsedGroupCountPerLoad" units="groups" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>cyan@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> <summary> @@ -690,7 +690,7 @@ </histogram> <histogram name="TabGroups.UserCustomizedGroupCountPerLoad" units="groups" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>connily@chromium.org</owner> <owner>cyan@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> @@ -711,7 +711,7 @@ </histogram> <histogram name="TabGroups.UserGroupCountPerLoad" units="groups" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>connily@chromium.org</owner> <owner>cyan@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner> @@ -1384,7 +1384,7 @@ </histogram> <histogram name="TabManager.TimeSinceTabClosedUntilRestored" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>aebacanu@chromium.org</owner> <owner>carlscab@chromium.org</owner> <owner>sreejakshetty@chromium.org</owner> @@ -2899,7 +2899,7 @@ </summary> </histogram> -<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2021-11-14"> +<histogram name="TabStrip.TimeToSwitch" units="ms" expires_after="2022-01-16"> <owner>connily@chromium.org</owner> <owner>cyan@chromium.org</owner> <owner>chrome-desktop-ui-sea@google.com</owner>
diff --git a/tools/metrics/histograms/histograms_xml/ukm/histograms.xml b/tools/metrics/histograms/histograms_xml/ukm/histograms.xml index 1ae0e902..455b863 100644 --- a/tools/metrics/histograms/histograms_xml/ukm/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/ukm/histograms.xml
@@ -135,7 +135,7 @@ </histogram> <histogram name="UKM.IOSLog.OnSuccess" units="records" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>rkaplow@chromium.org</owner> <summary> Number of times when UKM.LogSize.OnSuccess was recorded on iOS. Recorded
diff --git a/tools/metrics/histograms/histograms_xml/uma/histograms.xml b/tools/metrics/histograms/histograms_xml/uma/histograms.xml index 5c70a21..e73826f 100644 --- a/tools/metrics/histograms/histograms_xml/uma/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/uma/histograms.xml
@@ -265,7 +265,7 @@ </histogram> <histogram name="UMA.LogUpload.Canceled.CellularConstraint" - enum="BooleanCanceled" expires_after="2021-11-14"> + enum="BooleanCanceled" expires_after="2022-01-16"> <owner>holte@chromium.org</owner> <owner>asvitkine@chromium.org</owner> <owner>src/base/metrics/OWNERS</owner>
diff --git a/tools/metrics/histograms/histograms_xml/v8/histograms.xml b/tools/metrics/histograms/histograms_xml/v8/histograms.xml index 07bffa1..bd3afca 100644 --- a/tools/metrics/histograms/histograms_xml/v8/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/v8/histograms.xml
@@ -357,7 +357,7 @@ </summary> </histogram> -<histogram name="V8.Execute" units="ms" expires_after="2021-11-14"> +<histogram name="V8.Execute" units="ms" expires_after="2022-01-16"> <owner>rmcilroy@chromium.org</owner> <summary> Time spent in JavaScript Execution, including runtime calls, callbacks, and
diff --git a/tools/metrics/histograms/histograms_xml/web_apk/histograms.xml b/tools/metrics/histograms/histograms_xml/web_apk/histograms.xml index 847a676..4814731 100644 --- a/tools/metrics/histograms/histograms_xml/web_apk/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/web_apk/histograms.xml
@@ -70,7 +70,7 @@ </histogram> <histogram name="WebApk.Install.GooglePlayInstallResult" - enum="WebApkGooglePlayInstallResult" expires_after="2021-11-14"> + enum="WebApkGooglePlayInstallResult" expires_after="2022-01-16"> <owner>hartmanng@chromium.org</owner> <owner> src/chrome/android/java/src/org/chromium/chrome/browser/webapps/OWNERS
diff --git a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml index c774989..d2278560 100644 --- a/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/web_rtc/histograms.xml
@@ -459,7 +459,7 @@ </histogram> <histogram name="WebRTC.Audio.DelayedPacketOutageEventMs" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>hlundin@chromium.org</owner> <summary> Measures the duration of each packet loss concealment (a.k.a. expand) event @@ -783,7 +783,7 @@ </histogram> <histogram name="WebRTC.Audio.ExpandRatePercent" units="%" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>hlundin@chromium.org</owner> <summary> Measures the expand rate for an incoming WebRTC audio stream. The expand @@ -987,7 +987,7 @@ </histogram> <histogram name="WebRTC.BWE.Probing.TimePerProbeCluster" units="ms" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>jonasolsson@chromium.org</owner> <owner>crodbro@chromium.org</owner> <summary> @@ -1007,7 +1007,7 @@ </histogram> <histogram name="WebRTC.BWE.Probing.TotalProbeClustersRequested" units="units" - expires_after="2021-11-14"> + expires_after="2022-01-16"> <owner>jonasolsson@chromium.org</owner> <owner>crodbro@chromium.org</owner> <summary>
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json index b52437a4..082ab79 100644 --- a/tools/perf/core/perfetto_binary_roller/binary_deps.json +++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -2,15 +2,15 @@ "trace_processor_shell": { "win": { "hash": "0b17dcefc3d3da9d145909566c7b3033c25976f9", - "remote_path": "perfetto_binaries/trace_processor_shell/win/cb9aee60bd100feb1079c736444a3b72c410730d/trace_processor_shell.exe" + "remote_path": "perfetto_binaries/trace_processor_shell/win/56537d0732d7cda6c26453cc60eee9e63a7f106a/trace_processor_shell.exe" }, "mac": { - "hash": "4a3e7a5523cb8d69a7299e11ac3673c929484f62", - "remote_path": "perfetto_binaries/trace_processor_shell/mac/cb9aee60bd100feb1079c736444a3b72c410730d/trace_processor_shell" + "hash": "d2a7468024c382be38ae3479b955e1fb8b653302", + "remote_path": "perfetto_binaries/trace_processor_shell/mac/56537d0732d7cda6c26453cc60eee9e63a7f106a/trace_processor_shell" }, "linux": { - "hash": "34e1c74c72b1eac03af8dc01901c7838c390a1c2", - "remote_path": "perfetto_binaries/trace_processor_shell/linux/cb9aee60bd100feb1079c736444a3b72c410730d/trace_processor_shell" + "hash": "769df07b64589db07489e8991fdde2bb1b3a2e78", + "remote_path": "perfetto_binaries/trace_processor_shell/linux/56537d0732d7cda6c26453cc60eee9e63a7f106a/trace_processor_shell" } }, "power_profile.sql": {
diff --git a/ui/base/ime/chromeos/component_extension_ime_manager.cc b/ui/base/ime/chromeos/component_extension_ime_manager.cc index 78950bd..b2abfe2 100644 --- a/ui/base/ime/chromeos/component_extension_ime_manager.cc +++ b/ui/base/ime/chromeos/component_extension_ime_manager.cc
@@ -9,6 +9,7 @@ #include "base/command_line.h" #include "base/strings/string_util.h" +#include "base/trace_event/trace_event.h" #include "ui/base/ime/chromeos/extension_ime_util.h" namespace chromeos { @@ -75,11 +76,21 @@ bool ComponentExtensionIMEManager::LoadComponentExtensionIME( Profile* profile, - const std::string& input_method_id) { + const std::string& input_method_id, + std::set<std::string>* extension_loaded) { + TRACE_EVENT0("ime", + "ComponentExtensionIMEManager::LoadComponentExtensionIME"); ComponentExtensionIME ime; if (FindEngineEntry(input_method_id, &ime)) { - delegate_->Load(profile, ime.id, ime.manifest, ime.path); - return true; + bool will_load = extension_loaded == nullptr; + if (!will_load && + extension_loaded->find(ime.id) == extension_loaded->end()) { + extension_loaded->insert(ime.id); + will_load = true; + } + if (will_load) + delegate_->Load(profile, ime.id, ime.manifest, ime.path); + return will_load; } return false; }
diff --git a/ui/base/ime/chromeos/component_extension_ime_manager.h b/ui/base/ime/chromeos/component_extension_ime_manager.h index 77d646a9..65d4164 100644 --- a/ui/base/ime/chromeos/component_extension_ime_manager.h +++ b/ui/base/ime/chromeos/component_extension_ime_manager.h
@@ -53,11 +53,16 @@ std::unique_ptr<ComponentExtensionIMEManagerDelegate> delegate); virtual ~ComponentExtensionIMEManager(); - // Loads |input_method_id| component extension IME. This function returns true - // on success. This function is safe to call multiple times. Returns false if - // already corresponding component extension is loaded. - bool LoadComponentExtensionIME(Profile* profile, - const std::string& input_method_id); + // Loads the IME component extension for |input_method_id| if the extension Id + // is not in the |extension_loaded|. This function returns true once an + // corresponding IME extension will be loaded. This function is safe to call + // multiple times. Returns false if the corresponding component extension is + // already loaded or there is not any IME extension found for the + // |input_method_id|. + bool LoadComponentExtensionIME( + Profile* profile, + const std::string& input_method_id, + std::set<std::string>* extension_loaded = nullptr); // Returns true if |input_method_id| is allowlisted component extension input // method.
diff --git a/ui/chromeos/colors/cros_colors.json5 b/ui/chromeos/colors/cros_colors.json5 index 43bb6852d..06b2778 100644 --- a/ui/chromeos/colors/cros_colors.json5 +++ b/ui/chromeos/colors/cros_colors.json5
@@ -272,23 +272,6 @@ light:"$google_grey_100", dark:"$google_grey_900", }, - - /* - * One_offs. - * - * List your project's one_off colors below here. If a semantic color comes - * up repeatedly, consider speaking to UX about pulling out a common - * variable above. - */ - - /* OS Settings */ - error_color: "$google_red_700", - success_color: "$google_green_700", - - search_page_question_icon_color: "$google_grey_600", - app_management_permission_icon_color: "$google_grey_600", - - user_icon_color_secondary: "rgb(210, 210, 212)", }, opacities: { disabled_opacity: 0.38,
diff --git a/ui/file_manager/file_manager/common/js/util.js b/ui/file_manager/file_manager/common/js/util.js index bb2827e..69d5d732 100644 --- a/ui/file_manager/file_manager/common/js/util.js +++ b/ui/file_manager/file_manager/common/js/util.js
@@ -1528,6 +1528,14 @@ }; /** + * Returns true if FilesBannerFramework flag is enabled. + * @return {boolean} + */ +util.isBannerFrameworkEnabled = () => { + return loadTimeData.getBoolean('FILES_BANNER_FRAMEWORK'); +}; + +/** * Retrieves all entries inside the given |rootEntry|. * @param {!DirectoryEntry} rootEntry * @param {function(!Array<!Entry>)} entriesCallback Called when some chunk of
diff --git a/ui/ozone/platform/wayland/host/wayland_connection.cc b/ui/ozone/platform/wayland/host/wayland_connection.cc index 36e6823..4708536 100644 --- a/ui/ozone/platform/wayland/host/wayland_connection.cc +++ b/ui/ozone/platform/wayland/host/wayland_connection.cc
@@ -87,7 +87,7 @@ // The maximum supported versions for a given interface. // The version bound will be the minimum of the value and the version // advertised by the server. -constexpr uint32_t kMaxAuraShellVersion = 20; +constexpr uint32_t kMaxAuraShellVersion = 21; constexpr uint32_t kMaxCompositorVersion = 4; constexpr uint32_t kMaxCursorShapesVersion = 1; constexpr uint32_t kMaxGtkPrimarySelectionDeviceManagerVersion = 1;
diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc index a5bbe50..3cf3d5e 100644 --- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.cc
@@ -452,6 +452,11 @@ return shell_toplevel() ? shell_toplevel()->IsConfigured() : false; } +void WaylandToplevelWindow::OcclusionChanged(void* data, + zaura_surface* surface, + wl_fixed_t occlusion_fraction, + uint32_t occlusion_reason) {} + void WaylandToplevelWindow::LockFrame(void* data, zaura_surface* surface) { WaylandToplevelWindow* self = static_cast<WaylandToplevelWindow*>(data); DCHECK(self); @@ -464,6 +469,29 @@ self->OnFrameLockingChanged(false); } +void WaylandToplevelWindow::OcclusionStateChanged(void* data, + zaura_surface* surface, + uint32_t mode) { + WaylandToplevelWindow* self = static_cast<WaylandToplevelWindow*>(data); + DCHECK(self); + auto state = PlatformWindowOcclusionState::kUnknown; + switch (mode) { + case ZAURA_SURFACE_OCCLUSION_STATE_UNKNOWN: + state = PlatformWindowOcclusionState::kUnknown; + break; + case ZAURA_SURFACE_OCCLUSION_STATE_VISIBLE: + state = PlatformWindowOcclusionState::kVisible; + break; + case ZAURA_SURFACE_OCCLUSION_STATE_OCCLUDED: + state = PlatformWindowOcclusionState::kOccluded; + break; + case ZAURA_SURFACE_OCCLUSION_STATE_HIDDEN: + state = PlatformWindowOcclusionState::kHidden; + break; + } + self->OnOcclusionStateChanged(state); +} + bool WaylandToplevelWindow::RunMoveLoop(const gfx::Vector2d& drag_offset) { DCHECK(connection()->window_drag_controller()); return connection()->window_drag_controller()->Drag(this, drag_offset); @@ -648,16 +676,17 @@ if (connection()->zaura_shell() && !aura_surface_) { static const zaura_surface_listener zaura_surface_listener = { - nullptr, + &WaylandToplevelWindow::OcclusionChanged, &WaylandToplevelWindow::LockFrame, &WaylandToplevelWindow::UnlockFrame, + &WaylandToplevelWindow::OcclusionStateChanged, }; - aura_surface_.reset(zaura_shell_get_aura_surface( connection()->zaura_shell()->wl_object(), root_surface()->surface())); zaura_surface_add_listener(aura_surface_.get(), &zaura_surface_listener, this); + zaura_surface_set_occlusion_tracking(aura_surface_.get()); SetImmersiveFullscreenStatus(false); } @@ -691,6 +720,11 @@ delegate()->OnSurfaceFrameLockingChanged(lock); } +void WaylandToplevelWindow::OnOcclusionStateChanged( + PlatformWindowOcclusionState occlusion_state) { + delegate()->OnOcclusionStateChanged(occlusion_state); +} + void WaylandToplevelWindow::UpdateWindowMask() { // TODO(http://crbug.com/1158733): When supporting PlatformWindow::SetShape, // update window region with the given |shape|.
diff --git a/ui/ozone/platform/wayland/host/wayland_toplevel_window.h b/ui/ozone/platform/wayland/host/wayland_toplevel_window.h index 7d5c0f8..9df3f571 100644 --- a/ui/ozone/platform/wayland/host/wayland_toplevel_window.h +++ b/ui/ozone/platform/wayland/host/wayland_toplevel_window.h
@@ -82,8 +82,15 @@ bool IsSurfaceConfigured() override; // zaura_surface listeners + static void OcclusionChanged(void* data, + zaura_surface* surface, + wl_fixed_t occlusion_fraction, + uint32_t occlusion_reason); static void LockFrame(void* data, zaura_surface* surface); static void UnlockFrame(void* data, zaura_surface* surface); + static void OcclusionStateChanged(void* data, + zaura_surface* surface, + uint32_t mode); // Calls UpdateWindowShape, set_input_region and set_opaque_region // for this toplevel window. @@ -129,6 +136,9 @@ // previously locked state. void OnFrameLockingChanged(bool lock); + // Called when the occlusion state is updated. + void OnOcclusionStateChanged(PlatformWindowOcclusionState occlusion_state); + // Wrappers around shell surface. std::unique_ptr<ShellToplevelWrapper> shell_toplevel_;
diff --git a/ui/platform_window/platform_window_delegate.cc b/ui/platform_window/platform_window_delegate.cc index ac749bf..a4c88c6a 100644 --- a/ui/platform_window/platform_window_delegate.cc +++ b/ui/platform_window/platform_window_delegate.cc
@@ -38,4 +38,7 @@ return absl::nullopt; } +void PlatformWindowDelegate::OnOcclusionStateChanged( + PlatformWindowOcclusionState occlusion_state) {} + } // namespace ui
diff --git a/ui/platform_window/platform_window_delegate.h b/ui/platform_window/platform_window_delegate.h index d3e6ac9..8055d383 100644 --- a/ui/platform_window/platform_window_delegate.h +++ b/ui/platform_window/platform_window_delegate.h
@@ -35,6 +35,13 @@ kFullScreen, }; +enum class PlatformWindowOcclusionState { + kUnknown, + kVisible, + kOccluded, + kHidden, +}; + class COMPONENT_EXPORT(PLATFORM_WINDOW) PlatformWindowDelegate { public: struct COMPONENT_EXPORT(PLATFORM_WINDOW) BoundsChange { @@ -117,6 +124,11 @@ // different from ui::ET_MOUSE_ENTERED which may not be generated when mouse // is captured either by implicitly or explicitly. virtual void OnMouseEnter() = 0; + + // Called when the occlusion state changes, if the underlying platform + // is providing us with occlusion information. + virtual void OnOcclusionStateChanged( + PlatformWindowOcclusionState occlusion_state); }; } // namespace ui
diff --git a/ui/views/controls/menu/menu_scroll_view_container.cc b/ui/views/controls/menu/menu_scroll_view_container.cc index 979682a..713b41c8 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.cc +++ b/ui/views/controls/menu/menu_scroll_view_container.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <memory> +#include <utility> #include "base/callback_helpers.h" #include "base/macros.h" @@ -349,7 +350,6 @@ void MenuScrollViewContainer::CreateDefaultBorder() { DCHECK_EQ(arrow_, BubbleBorder::NONE); - bubble_border_ = nullptr; const MenuConfig& menu_config = MenuConfig::instance(); corner_radius_ = menu_config.CornerRadiusForMenu( @@ -386,14 +386,14 @@ ? GetNativeTheme()->GetSystemColor( ui::NativeTheme::kColorId_MenuBackgroundColor) : gfx::kPlaceholderColor; - bubble_border_ = - new BubbleBorder(arrow_, BubbleBorder::STANDARD_SHADOW, color); + auto bubble_border = std::make_unique<BubbleBorder>( + arrow_, BubbleBorder::STANDARD_SHADOW, color); if (content_view_->GetMenuItem() ->GetMenuController() ->use_touchable_layout()) { const MenuConfig& menu_config = MenuConfig::instance(); - bubble_border_->SetCornerRadius(menu_config.touchable_corner_radius); - bubble_border_->set_md_shadow_elevation( + bubble_border->SetCornerRadius(menu_config.touchable_corner_radius); + bubble_border->set_md_shadow_elevation( menu_config.touchable_menu_shadow_elevation); gfx::Insets insets(menu_config.vertical_touchable_menu_item_padding, 0); if (GetFootnote()) @@ -401,10 +401,10 @@ scroll_view_->GetContents()->SetBorder(CreateEmptyBorder(insets)); } - corner_radius_ = bubble_border_->corner_radius(); + corner_radius_ = bubble_border->corner_radius(); - SetBorder(std::unique_ptr<Border>(bubble_border_)); - SetBackground(std::make_unique<BubbleBackground>(bubble_border_)); + SetBackground(std::make_unique<BubbleBackground>(bubble_border.get())); + SetBorder(std::move(bubble_border)); } BubbleBorder::Arrow MenuScrollViewContainer::BubbleBorderTypeFromAnchor(
diff --git a/ui/views/controls/menu/menu_scroll_view_container.h b/ui/views/controls/menu/menu_scroll_view_container.h index 2ad2c7c..c942a56 100644 --- a/ui/views/controls/menu/menu_scroll_view_container.h +++ b/ui/views/controls/menu/menu_scroll_view_container.h
@@ -78,9 +78,6 @@ // If set the currently set border is a bubble border. BubbleBorder::Arrow arrow_ = BubbleBorder::NONE; - // Weak reference to the currently set border. - BubbleBorder* bubble_border_ = nullptr; - // Corner radius of the background. int corner_radius_ = 0;
diff --git a/ui/views/view.cc b/ui/views/view.cc index 99bfc06..fbca4e6 100644 --- a/ui/views/view.cc +++ b/ui/views/view.cc
@@ -1234,10 +1234,6 @@ if (widget) return widget->GetNativeTheme(); - // CHECK here to ensure we catch fallthrough to the global NativeTheme - // instance on all Chromium builds (crbug.com/1056756). - CHECK(false); - return ui::NativeTheme::GetInstanceForNativeUi(); }
diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn index 7c2628a..ad5fa79 100644 --- a/ui/webui/resources/BUILD.gn +++ b/ui/webui/resources/BUILD.gn
@@ -189,6 +189,7 @@ "$root_dir/cr_elements/cr_fingerprint/cr_fingerprint_icon.m.d.ts", "$root_dir/cr_elements/cr_fingerprint/cr_fingerprint_progress_arc.m.d.ts", "$root_dir/cr_elements/cr_actionable_row_style.m.d.ts", + "$root_dir/cr_elements/cr_container_shadow_mixin.d.ts", "$root_dir/cr_elements/cr_grid/cr_grid.d.ts", "$root_dir/cr_elements/cr_icons_css.m.d.ts", "$root_dir/cr_elements/cr_auto_img/cr_auto_img.d.ts", @@ -268,6 +269,7 @@ "cr_elements/cr_grid/cr_grid.js", "cr_elements/cr_icons_css.m.js", "cr_elements/cr_auto_img/cr_auto_img.js", + "cr_elements/cr_container_shadow_mixin.js", "cr_elements/cr_input/cr_input_style_css.m.js", "cr_elements/cr_link_row/cr_link_row.js", "cr_elements/cr_lottie/cr_lottie.m.js",
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn index 43197c4..8e637e6 100644 --- a/ui/webui/resources/cr_elements/BUILD.gn +++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -49,6 +49,7 @@ out_manifest = "$target_gen_dir/$preprocess_src_manifest" in_files = [ "cr_auto_img/cr_auto_img.js", + "cr_container_shadow_mixin.js", "cr_search_field/cr_search_field_behavior.js", "cr_splitter/cr_splitter.js", "find_shortcut_behavior.js", @@ -306,6 +307,13 @@ deps = [ "//ui/webui/resources/js:assert" ] } +js_library("cr_container_shadow_mixin") { + deps = [ + "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/js:assert.m", + ] +} + js_library("mouse_hoverable_mixin") { deps = [ "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", @@ -424,8 +432,10 @@ is_polymer3 = true deps = [ ":cr_container_shadow_behavior.m", + ":cr_container_shadow_mixin", ":cr_scrollable_behavior.m", ":find_shortcut_behavior", + ":mouse_hoverable_mixin", ] }
diff --git a/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js b/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js index 2e04023d..31d778c8 100644 --- a/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js +++ b/ui/webui/resources/cr_elements/cr_container_shadow_behavior.js
@@ -29,10 +29,13 @@ * Clients should either use the existing shared styling in * shared_styles_css.html, '#cr-container-shadow-[top/bottom]' and * '#cr-container-shadow-[top/bottom].has-shadow', or define their own styles. + * + * NOTE: This file is deprecated in favor of cr_container_shadow_mixin.js. Don't + * use it in any new code. */ // clang-format off -// #import {assert} from '../js/assert.m.js' +// #import {assert} from '../js/assert.m.js'; // clang-format on /** @enum {string} */
diff --git a/ui/webui/resources/cr_elements/cr_container_shadow_mixin.js b/ui/webui/resources/cr_elements/cr_container_shadow_mixin.js new file mode 100644 index 0000000..18c0287 --- /dev/null +++ b/ui/webui/resources/cr_elements/cr_container_shadow_mixin.js
@@ -0,0 +1,202 @@ +// 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. + +/** + * @fileoverview CrContainerShadowBehavior holds logic for showing a drop shadow + * near the top of a container element, when the content has scrolled. + * + * Elements using this behavior are expected to define a #container element, + * which is the element being scrolled. If the #container element has a + * show-bottom-shadow attribute, a drop shadow will also be shown near the + * bottom of the container element, when there is additional content to scroll + * to. Examples: + * + * For both top and bottom shadows: + * <div id="container" show-bottom-shadow>...</div> + * + * For top shadow only: + * <div id="container">...</div> + * + * The behavior will take care of inserting an element with ID + * 'cr-container-shadow-top' which holds the drop shadow effect, and, + * optionally, an element with ID 'cr-container-shadow-bottom' which holds the + * same effect. A 'has-shadow' CSS class is automatically added to/removed from + * both elements while scrolling, as necessary. Note that the show-bottom-shadow + * attribute is inspected only during attached(), and any changes to it that + * occur after that point will not be respected. + * + * Clients should either use the existing shared styling in + * shared_styles_css.html, '#cr-container-shadow-[top/bottom]' and + * '#cr-container-shadow-[top/bottom].has-shadow', or define their own styles. + */ + +import {dedupingMixin} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {assert} from '../js/assert.m.js'; + +/** @enum {string} */ +export const CrContainerShadowSide = { + TOP: 'top', + BOTTOM: 'bottom', +}; + +/** + * @polymer + * @mixinFunction + */ +export const CrContainerShadowMixin = dedupingMixin(superClass => { + /** + * @polymer + * @mixinClass + */ + class CrContainerShadowMixin extends superClass { + constructor() { + super(); + + /** @private {?IntersectionObserver} */ + this.intersectionObserver_ = null; + + /** @private {?Map<!CrContainerShadowSide, !HTMLDivElement>} */ + this.dropShadows_ = null; + + /** @private {?Map<!CrContainerShadowSide, !HTMLDivElement>} */ + this.intersectionProbes_ = null; + + /** @private {?Array<!CrContainerShadowSide>} */ + this.sides_ = null; + } + + /** @override */ + ready() { + super.ready(); + + this.dropShadows_ = new Map(); + this.intersectionProbes_ = new Map(); + } + + /** @override */ + connectedCallback() { + super.connectedCallback(); + + const hasBottomShadow = + this.$.container.hasAttribute('show-bottom-shadow'); + this.sides_ = hasBottomShadow ? + [CrContainerShadowSide.TOP, CrContainerShadowSide.BOTTOM] : + [CrContainerShadowSide.TOP]; + this.sides_.forEach(side => { + // The element holding the drop shadow effect to be shown. + const shadow = + /** @type {!HTMLDivElement} */ (document.createElement('div')); + shadow.id = `cr-container-shadow-${side}`; + shadow.classList.add('cr-container-shadow'); + this.dropShadows_.set(side, shadow); + this.intersectionProbes_.set( + side, + /** @type {!HTMLDivElement} */ (document.createElement('div'))); + }); + + this.$.container.parentNode.insertBefore( + this.dropShadows_.get(CrContainerShadowSide.TOP), this.$.container); + this.$.container.prepend( + this.intersectionProbes_.get(CrContainerShadowSide.TOP)); + + if (hasBottomShadow) { + this.$.container.parentNode.insertBefore( + this.dropShadows_.get(CrContainerShadowSide.BOTTOM), + this.$.container.nextSibling); + this.$.container.append( + this.intersectionProbes_.get(CrContainerShadowSide.BOTTOM)); + } + + this.enableShadowBehavior(true); + } + + /** @override */ + disconnectedCallback() { + super.disconnectedCallback(); + + this.enableShadowBehavior(false); + } + + /** + * @return {!IntersectionObserver} + * @private + */ + getIntersectionObserver_() { + const callback = entries => { + // In some rare cases, there could be more than one entry per observed + // element, in which case the last entry's result stands. + for (const entry of entries) { + const target = entry.target; + this.sides_.forEach(side => { + if (target === this.intersectionProbes_.get(side)) { + this.dropShadows_.get(side).classList.toggle( + 'has-shadow', entry.intersectionRatio === 0); + } + }); + } + }; + return new IntersectionObserver( + callback, + /** @type {IntersectionObserverInit} */ ({ + root: this.$.container, + threshold: 0, + })); + } + + /** + * @param {boolean} enable Whether to enable the behavior or disable it. + * This function does nothing if the behavior is already in the + * requested state. + */ + enableShadowBehavior(enable) { + // Behavior is already enabled/disabled. Return early. + if (enable === !!this.intersectionObserver_) { + return; + } + + if (!enable) { + this.intersectionObserver_.disconnect(); + this.intersectionObserver_ = null; + return; + } + + this.intersectionObserver_ = this.getIntersectionObserver_(); + + // Need to register the observer within a setTimeout() callback, otherwise + // the drop shadow flashes once on startup, because of the DOM + // modifications earlier in this function causing a relayout. + window.setTimeout(() => { + if (this.intersectionObserver_) { // In case this is already detached. + this.intersectionProbes_.forEach(probe => { + this.intersectionObserver_.observe(probe); + }); + } + }); + } + + /** + * Shows the shadows. The shadow behavior must be disabled before calling + * this method, otherwise the intersection observer might show the shadows + * again. + */ + showDropShadows() { + assert(!this.intersectionObserver_); + assert(this.sides_); + for (const side of this.sides_) { + this.dropShadows_.get(side).classList.toggle('has-shadow', true); + } + } + } + + return CrContainerShadowMixin; +}); + +/** @interface */ +export class CrContainerShadowMixinInterface { + /** @param {boolean} enable */ + enableShadowBehavior(enable) {} + + showDropShadows() {} +}
diff --git a/ui/webui/resources/mojo/BUILD.gn b/ui/webui/resources/mojo/BUILD.gn index 09b336e..c3fb1f3 100644 --- a/ui/webui/resources/mojo/BUILD.gn +++ b/ui/webui/resources/mojo/BUILD.gn
@@ -20,9 +20,20 @@ "url/mojom/url.mojom-webui.js", ] + definitions = [ "$preprocessed_folder/mojo/public/js/bindings.d.ts" ] + extra_deps = [ + ":copy_bindings_dts", "//mojo/public/mojom/base:base_js__generator", "//skia/public/mojom:mojom_js__generator", "//url/mojom:url_mojom_gurl_js__generator", ] } + +# Copy bindings.d.ts file under the same location where other shared Mojo JS +# generated files reside, so that it can be located by the TS compiler when +# resolving chrome://resources/mojo/mojo/public/js/bindings.js. +copy("copy_bindings_dts") { + sources = [ "bindings.d.ts" ] + outputs = [ "$preprocessed_folder/mojo/public/js/{{source_file_part}}" ] +}
diff --git a/ui/webui/resources/mojo/bindings.d.ts b/ui/webui/resources/mojo/bindings.d.ts new file mode 100644 index 0000000..50206cc --- /dev/null +++ b/ui/webui/resources/mojo/bindings.d.ts
@@ -0,0 +1,23 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Minimal definitions for the Mojo core bindings, just enough to make the TS +// compiler to not throw errors. These should be fleshed out, or even better +// auto-generated from bindings_uncompiled.js eventually. The latter currently +// does not produce definitions that work. + +export namespace mojo { + namespace internal { + namespace interfaceSupport { + + interface Endpoint {} + + interface PendingReceiver { + readonly handle: Endpoint; + } + + function getEndpointForReceiver(handle: Endpoint): Endpoint; + } + } +}