[Extensions] Move NTP overriding prefs to settings_api_bubble_helpers

The NTP overridden bubble UI is deprecated (and has been replaced by a
dialog-based approach). However, the preferences related to the UI are
currently encapsulated in the bubble code. We deliberately use the same
preferences so that users who previously acknowledged NTP-overriding
extensions with the bubble UI are not re-notified.

Move the relevant preferences out of the NTP bubble code and into the
more general settings_api_bubble_helpers code. This is the entry point
for both the bubbles and the UI code, and was the only (non-testing)
call site for the preference code.

This CL moves two preference related bits: the first is the preference
to acknowledge a given extension has overridden the NTP. The second is
a preference for whether a global acknowledgement of pre-existing
extensions has been triggered (this is used when expanding the UI to
new platforms). Move each of these to the settings_api_bubble_helpers
code.

Additionally, move the ntp_overridden_bubble_delegate_unittest code to
settings_api_bubble_helpers_unittest. Since the only unittest here was
pertaining to the acknowledgement preferences, we can easily tweak the
test to exercise the same conceptual case for the code in
settings_api_bubble_helpers.

This paves the way to remove NtpOverriddenBubbleDelegate in its
entirety.

Bug: 1186126
Change-Id: Id4c34011c7875b0f8f7414385c19984ecdbab810
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2744647
Commit-Queue: Devlin <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Reviewed-by: David Bertoni <[email protected]>
Cr-Commit-Position: refs/heads/master@{#864031}
diff --git a/chrome/browser/extensions/ntp_overridden_bubble_delegate.cc b/chrome/browser/extensions/ntp_overridden_bubble_delegate.cc
index 3ef616cc..bf645662 100644
--- a/chrome/browser/extensions/ntp_overridden_bubble_delegate.cc
+++ b/chrome/browser/extensions/ntp_overridden_bubble_delegate.cc
@@ -12,30 +12,15 @@
 #include "chrome/browser/extensions/extension_web_ui.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/grit/generated_resources.h"
-#include "components/prefs/pref_registry.h"
-#include "components/prefs/pref_registry_simple.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system.h"
 #include "ui/base/l10n/l10n_util.h"
 
 namespace {
 
-// Whether existing NTP extensions have been automatically acknowledged.
-const char kDidAcknowledgeExistingNtpExtensions[] =
-    "ack_existing_ntp_extensions";
-
-// Whether to acknowledge existing extensions overriding the NTP for the active
-// profile. Active on MacOS to rollout the NTP bubble without prompting for
-// previously-installed extensions.
-bool g_acknowledge_existing_extensions =
-#if defined(OS_MAC)
-    true;
-#else
-    false;
-#endif
-
 base::LazyInstance<std::set<std::pair<Profile*, std::string>>>::Leaky
     g_ntp_overridden_shown = LAZY_INSTANCE_INITIALIZER;
 
@@ -43,47 +28,14 @@
 
 namespace extensions {
 
-const char NtpOverriddenBubbleDelegate::kNtpBubbleAcknowledged[] =
-    "ack_ntp_bubble";
-
 NtpOverriddenBubbleDelegate::NtpOverriddenBubbleDelegate(Profile* profile)
     : extensions::ExtensionMessageBubbleController::Delegate(profile),
       profile_(profile) {
-  set_acknowledged_flag_pref_name(kNtpBubbleAcknowledged);
+  set_acknowledged_flag_pref_name(kNtpOverridingExtensionAcknowledged);
 }
 
 NtpOverriddenBubbleDelegate::~NtpOverriddenBubbleDelegate() {}
 
-// static
-void NtpOverriddenBubbleDelegate::RegisterPrefs(PrefRegistrySimple* registry) {
-  registry->RegisterBooleanPref(kDidAcknowledgeExistingNtpExtensions, false,
-                                PrefRegistry::NO_REGISTRATION_FLAGS);
-}
-
-// static
-void NtpOverriddenBubbleDelegate::MaybeAcknowledgeExistingNtpExtensions(
-    Profile* profile) {
-  if (!g_acknowledge_existing_extensions)
-    return;
-
-  ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
-  PrefService* profile_prefs = profile->GetPrefs();
-  // Only acknowledge existing extensions once per profile.
-  if (profile_prefs->GetBoolean(kDidAcknowledgeExistingNtpExtensions))
-    return;
-
-  profile_prefs->SetBoolean(kDidAcknowledgeExistingNtpExtensions, true);
-  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile);
-  for (const auto& extension : registry->enabled_extensions()) {
-    const URLOverrides::URLOverrideMap& overrides =
-        URLOverrides::GetChromeURLOverrides(extension.get());
-    if (overrides.find(chrome::kChromeUINewTabHost) != overrides.end()) {
-      prefs->UpdateExtensionPref(extension->id(), kNtpBubbleAcknowledged,
-                                 std::make_unique<base::Value>(true));
-    }
-  }
-}
-
 bool NtpOverriddenBubbleDelegate::ShouldIncludeExtension(
     const extensions::Extension* extension) {
   if (!extension_id_.empty() && extension_id_ != extension->id())
@@ -209,10 +161,4 @@
   return true;
 }
 
-void NtpOverriddenBubbleDelegate::
-    set_acknowledge_existing_extensions_for_testing(
-        bool acknowledge_existing_extensions) {
-  g_acknowledge_existing_extensions = acknowledge_existing_extensions;
-}
-
 }  // namespace extensions
diff --git a/chrome/browser/extensions/ntp_overridden_bubble_delegate.h b/chrome/browser/extensions/ntp_overridden_bubble_delegate.h
index f27b155..c3cc1d3 100644
--- a/chrome/browser/extensions/ntp_overridden_bubble_delegate.h
+++ b/chrome/browser/extensions/ntp_overridden_bubble_delegate.h
@@ -12,31 +12,14 @@
 #include "base/macros.h"
 #include "chrome/browser/extensions/extension_message_bubble_controller.h"
 
-class PrefRegistrySimple;
-
 namespace extensions {
 
 class NtpOverriddenBubbleDelegate
     : public ExtensionMessageBubbleController::Delegate {
  public:
-  // Name of the preference that says whether the user has been notified about
-  // extension overriding the new tab page.
-  static const char kNtpBubbleAcknowledged[];
-
   explicit NtpOverriddenBubbleDelegate(Profile* profile);
   ~NtpOverriddenBubbleDelegate() override;
 
-  // Registers associated preferences.
-  static void RegisterPrefs(PrefRegistrySimple* registry);
-
-  // Iterates over existing NTP-overriding extensions installed in the given
-  // |profile| and marks them as acknowledged. Stores a preference indicating
-  // the action was completed. Subsequent calls will *not* acknowledge more
-  // extensions. This is needed to avoid prompting users with existing
-  // extensions when we expand the warning to new platforms.
-  // TODO(devlin): Remove this in M62.
-  static void MaybeAcknowledgeExistingNtpExtensions(Profile* profile);
-
   // ExtensionMessageBubbleController::Delegate methods.
   bool ShouldIncludeExtension(const extensions::Extension* extension) override;
   void AcknowledgeExtension(
@@ -64,9 +47,6 @@
   void LogAction(ExtensionMessageBubbleController::BubbleAction) override;
   bool SupportsPolicyIndicator() override;
 
-  static void set_acknowledge_existing_extensions_for_testing(
-      bool acknowledge_existing_extensions);
-
  private:
   Profile* profile_;
 
diff --git a/chrome/browser/extensions/omnibox_focus_interactive_test.cc b/chrome/browser/extensions/omnibox_focus_interactive_test.cc
index dcf4b861..da29414 100644
--- a/chrome/browser/extensions/omnibox_focus_interactive_test.cc
+++ b/chrome/browser/extensions/omnibox_focus_interactive_test.cc
@@ -6,8 +6,8 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
-#include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
 #include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/test/base/interactive_test_utils.h"
 #include "chrome/test/base/ui_test_utils.h"
@@ -51,9 +51,9 @@
     // Prevent a focus-stealing focus bubble that warns the user that "An
     // extension has changed what page is shown when you open a new tab."
     ExtensionPrefs* prefs = ExtensionPrefs::Get(browser()->profile());
-    prefs->UpdateExtensionPref(
-        extension->id(), NtpOverriddenBubbleDelegate::kNtpBubbleAcknowledged,
-        std::make_unique<base::Value>(true));
+    prefs->UpdateExtensionPref(extension->id(),
+                               kNtpOverridingExtensionAcknowledged,
+                               std::make_unique<base::Value>(true));
 
     return extension;
   }
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 7d0de78..8539c00 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -168,7 +168,7 @@
 #include "chrome/browser/extensions/api/tabs/tabs_api.h"
 #include "chrome/browser/extensions/default_apps.h"
 #include "chrome/browser/extensions/extension_web_ui.h"
-#include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
+#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
 #include "chrome/browser/ui/webui/extensions/extensions_ui.h"
 #include "extensions/browser/api/audio/audio_api.h"
@@ -978,8 +978,11 @@
   extensions::AudioAPI::RegisterUserPrefs(registry);
   extensions::ExtensionPrefs::RegisterProfilePrefs(registry);
   extensions::ExtensionsUI::RegisterProfilePrefs(registry);
-  extensions::NtpOverriddenBubbleDelegate::RegisterPrefs(registry);
   extensions::RuntimeAPI::RegisterPrefs(registry);
+  // TODO(devlin): This would be more inline with the other calls here if it
+  // were nested in either a class or separate namespace with a simple
+  // Register[Profile]Prefs() name.
+  extensions::RegisterSettingsOverriddenUiPrefs(registry);
   update_client::RegisterProfilePrefs(registry);
   web_app::WebAppProvider::RegisterProfilePrefs(registry);
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
diff --git a/chrome/browser/ui/extensions/settings_api_bubble_helpers.cc b/chrome/browser/ui/extensions/settings_api_bubble_helpers.cc
index f6ad4d8..cf0c003 100644
--- a/chrome/browser/ui/extensions/settings_api_bubble_helpers.cc
+++ b/chrome/browser/ui/extensions/settings_api_bubble_helpers.cc
@@ -8,9 +8,11 @@
 
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
+#include "chrome/browser/extensions/extension_web_ui.h"
 #include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
 #include "chrome/browser/extensions/settings_api_bubble_delegate.h"
 #include "chrome/browser/extensions/settings_api_helpers.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_dialogs.h"
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
@@ -22,6 +24,8 @@
 #include "chrome/browser/ui/ui_features.h"
 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h"
 #include "chrome/common/url_constants.h"
+#include "components/prefs/pref_registry.h"
+#include "components/prefs/pref_registry_simple.h"
 #include "content/public/browser/browser_url_handler.h"
 #include "content/public/browser/navigation_entry.h"
 #include "extensions/common/constants.h"
@@ -38,6 +42,24 @@
 bool g_ntp_post_install_ui_enabled = false;
 #endif
 
+// Whether to acknowledge existing extensions overriding the NTP for the active
+// profile. Active on MacOS to rollout the NTP bubble without prompting for
+// previously-installed extensions.
+// TODO(devlin): This has been rolled out on Mac for awhile; we can flip this to
+// false (and keep the logic around for when/if we decide to expand the warning
+// treatment to Linux).
+bool g_acknowledge_existing_ntp_extensions =
+#if defined(OS_MAC)
+    true;
+#else
+    false;
+#endif
+
+// The name of the preference indicating whether existing NTP extensions have
+// been automatically acknowledged.
+const char kDidAcknowledgeExistingNtpExtensions[] =
+    "ack_existing_ntp_extensions";
+
 #if defined(OS_WIN) || defined(OS_MAC)
 void ShowSettingsApiBubble(SettingsApiOverrideType type,
                            Browser* browser) {
@@ -61,10 +83,47 @@
 
 }  // namespace
 
+// Whether a given ntp-overriding extension has been acknowledged by the user.
+// The terse key value is because the pref has migrated between code layers.
+const char kNtpOverridingExtensionAcknowledged[] = "ack_ntp_bubble";
+
 void SetNtpPostInstallUiEnabledForTesting(bool enabled) {
   g_ntp_post_install_ui_enabled = enabled;
 }
 
+base::AutoReset<bool> SetAcknowledgeExistingNtpExtensionsForTesting(
+    bool should_acknowledge) {
+  return base::AutoReset<bool>(&g_acknowledge_existing_ntp_extensions,
+                               should_acknowledge);
+}
+
+void AcknowledgePreExistingNtpExtensions(Profile* profile) {
+  DCHECK(g_acknowledge_existing_ntp_extensions);
+
+  ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
+  PrefService* profile_prefs = profile->GetPrefs();
+  // Only acknowledge existing extensions once per profile.
+  if (profile_prefs->GetBoolean(kDidAcknowledgeExistingNtpExtensions))
+    return;
+
+  profile_prefs->SetBoolean(kDidAcknowledgeExistingNtpExtensions, true);
+  ExtensionPrefs* prefs = ExtensionPrefs::Get(profile);
+  for (const auto& extension : registry->enabled_extensions()) {
+    const URLOverrides::URLOverrideMap& overrides =
+        URLOverrides::GetChromeURLOverrides(extension.get());
+    if (overrides.find(chrome::kChromeUINewTabHost) != overrides.end()) {
+      prefs->UpdateExtensionPref(extension->id(),
+                                 kNtpOverridingExtensionAcknowledged,
+                                 std::make_unique<base::Value>(true));
+    }
+  }
+}
+
+void RegisterSettingsOverriddenUiPrefs(PrefRegistrySimple* registry) {
+  registry->RegisterBooleanPref(kDidAcknowledgeExistingNtpExtensions, false,
+                                PrefRegistry::NO_REGISTRATION_FLAGS);
+}
+
 void MaybeShowExtensionControlledHomeNotification(Browser* browser) {
 #if defined(OS_WIN) || defined(OS_MAC)
   ShowSettingsApiBubble(BUBBLE_TYPE_HOME_PAGE, browser);
@@ -110,8 +169,8 @@
     return;
 
   // Acknowledge existing extensions if necessary.
-  NtpOverriddenBubbleDelegate::MaybeAcknowledgeExistingNtpExtensions(
-      browser->profile());
+  if (g_acknowledge_existing_ntp_extensions)
+    AcknowledgePreExistingNtpExtensions(browser->profile());
 
   // Jump through a series of hoops to see if the web contents is pointing to
   // an extension-controlled NTP.
diff --git a/chrome/browser/ui/extensions/settings_api_bubble_helpers.h b/chrome/browser/ui/extensions/settings_api_bubble_helpers.h
index 0d29533..547df7f 100644
--- a/chrome/browser/ui/extensions/settings_api_bubble_helpers.h
+++ b/chrome/browser/ui/extensions/settings_api_bubble_helpers.h
@@ -5,9 +5,12 @@
 #ifndef CHROME_BROWSER_UI_EXTENSIONS_SETTINGS_API_BUBBLE_HELPERS_H_
 #define CHROME_BROWSER_UI_EXTENSIONS_SETTINGS_API_BUBBLE_HELPERS_H_
 
+#include "base/auto_reset.h"
 #include "components/omnibox/browser/autocomplete_match.h"
 
 class Browser;
+class PrefRegistrySimple;
+class Profile;
 
 namespace content {
 class WebContents;
@@ -15,10 +18,27 @@
 
 namespace extensions {
 
+extern const char kNtpOverridingExtensionAcknowledged[];
+
 // Sets whether the NTP post-install UI is enabled for testing purposes.
 // TODO(devlin): This would be cooler as a base::AutoReset<>.
 void SetNtpPostInstallUiEnabledForTesting(bool enabled);
 
+// Testing-only method to configure if existing NTP extensions are
+// auto-acknowledged.
+base::AutoReset<bool> SetAcknowledgeExistingNtpExtensionsForTesting(
+    bool should_acknowledge);
+
+// Registers prefs related to the settings overridden UI.
+void RegisterSettingsOverriddenUiPrefs(PrefRegistrySimple* registry);
+
+// Iterates over existing NTP-overriding extensions installed in the given
+// `profile` and marks them as acknowledged. Stores a preference indicating
+// the action was completed. Subsequent calls will *not* acknowledge more
+// extensions. This is needed to avoid prompting users with existing
+// extensions when we expand the warning to new platforms.
+void AcknowledgePreExistingNtpExtensions(Profile* profile);
+
 // Shows a bubble notifying the user that the homepage is controlled by an
 // extension. This bubble is shown only on the first use of the Home button
 // after the controlling extension takes effect.
diff --git a/chrome/browser/extensions/ntp_overridden_bubble_delegate_unittest.cc b/chrome/browser/ui/extensions/settings_api_bubble_helpers_unittest.cc
similarity index 60%
rename from chrome/browser/extensions/ntp_overridden_bubble_delegate_unittest.cc
rename to chrome/browser/ui/extensions/settings_api_bubble_helpers_unittest.cc
index 70a2e0eb..b304aae9 100644
--- a/chrome/browser/extensions/ntp_overridden_bubble_delegate_unittest.cc
+++ b/chrome/browser/ui/extensions/settings_api_bubble_helpers_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
+#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
 
 #include <memory>
 
@@ -41,11 +41,11 @@
 
 }  // namespace
 
-using NtpOverriddenBubbleDelegateTest = ExtensionServiceTestBase;
+using SettingsApiBubbleHelpersUnitTest = ExtensionServiceTestBase;
 
-TEST_F(NtpOverriddenBubbleDelegateTest, TestAcknowledgeExistingExtensions) {
-  NtpOverriddenBubbleDelegate::set_acknowledge_existing_extensions_for_testing(
-      true);
+TEST_F(SettingsApiBubbleHelpersUnitTest, TestAcknowledgeExistingExtensions) {
+  base::AutoReset<bool> ack_existing =
+      SetAcknowledgeExistingNtpExtensionsForTesting(true);
 
   InitializeEmptyExtensionService();
   ExtensionWebUIOverrideRegistrar::GetFactoryInstance()->SetTestingFactory(
@@ -58,37 +58,33 @@
   scoped_refptr<const Extension> first = GetNtpExtension("first");
   service()->AddExtension(first.get());
 
-  auto include_extension = [this](const Extension* extension) {
-    auto ntp_delegate =
-        std::make_unique<NtpOverriddenBubbleDelegate>(profile());
-    return ntp_delegate->ShouldIncludeExtension(extension);
+  auto is_acknowledged = [this](const ExtensionId& id) {
+    bool is_acked = false;
+    return ExtensionPrefs::Get(profile())->ReadPrefAsBoolean(
+               id, kNtpOverridingExtensionAcknowledged, &is_acked) &&
+           is_acked;
   };
-  // By default, we should warn about an extension overriding the NTP.
-  EXPECT_TRUE(include_extension(first.get()));
+  // By default, the extension should not be acknowledged.
+  EXPECT_FALSE(is_acknowledged(first->id()));
 
-  // Acknowledge existing extensions. Now, |first| should be acknowledged and
-  // shouldn't be included in the bubble warning.
-  NtpOverriddenBubbleDelegate::MaybeAcknowledgeExistingNtpExtensions(profile());
-  EXPECT_FALSE(include_extension(first.get()));
+  // Acknowledge existing extensions. Now, `first` should be acknowledged.
+  AcknowledgePreExistingNtpExtensions(profile());
+  EXPECT_TRUE(is_acknowledged(first->id()));
 
-  // Install a second NTP-overriding extension. As before, we should include the
-  // extension.
+  // Install a second NTP-overriding extension. The new extension should not be
+  // acknowledged.
   scoped_refptr<const Extension> second = GetNtpExtension("second");
   service()->AddExtension(second.get());
-  EXPECT_TRUE(include_extension(second.get()));
+  EXPECT_FALSE(is_acknowledged(second->id()));
 
   // Try acknowledging existing extensions. Since we already did this once for
-  // this profile, this should have no effect, and we should still warn about
-  // the second extension.
-  NtpOverriddenBubbleDelegate::MaybeAcknowledgeExistingNtpExtensions(profile());
-  EXPECT_TRUE(include_extension(second.get()));
+  // this profile, this should have no effect, and we should still consider the
+  // second extension unacknowledged.
+  AcknowledgePreExistingNtpExtensions(profile());
+  EXPECT_FALSE(is_acknowledged(second->id()));
 
-  // We should still not warn about the first.
-  EXPECT_FALSE(include_extension(first.get()));
-
-  // Clean up.
-  NtpOverriddenBubbleDelegate::set_acknowledge_existing_extensions_for_testing(
-      false);
+  // But the first should still be acknowledged.
+  EXPECT_TRUE(is_acknowledged(first->id()));
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/ui/extensions/settings_overridden_params_providers.cc b/chrome/browser/ui/extensions/settings_overridden_params_providers.cc
index c69d007..7e65f98 100644
--- a/chrome/browser/ui/extensions/settings_overridden_params_providers.cc
+++ b/chrome/browser/ui/extensions/settings_overridden_params_providers.cc
@@ -8,11 +8,11 @@
 #include "build/branding_buildflags.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/extensions/extension_web_ui.h"
-#include "chrome/browser/extensions/ntp_overridden_bubble_delegate.h"
 #include "chrome/browser/extensions/settings_api_bubble_delegate.h"
 #include "chrome/browser/extensions/settings_api_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/ui/extensions/settings_api_bubble_helpers.h"
 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/common/webui_url_constants.h"
@@ -146,11 +146,9 @@
   if (!extension)
     return base::nullopt;
 
-  // We deliberately re-use the same preference that the bubble UI uses. This
-  // way, users won't see the bubble or dialog UI if they've already
-  // acknowledged either version.
-  const char* preference_name =
-      extensions::NtpOverriddenBubbleDelegate::kNtpBubbleAcknowledged;
+  // This preference tracks whether users have acknowledged the extension's
+  // control, so that they are not warned twice about the same extension.
+  const char* preference_name = extensions::kNtpOverridingExtensionAcknowledged;
 
   std::vector<GURL> possible_rewrites =
       content::BrowserURLHandler::GetInstance()->GetPossibleRewrites(ntp_url,
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 39178885..82f1d3fa 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4671,6 +4671,7 @@
       "../browser/ui/extensions/extension_installed_waiter_unittest.cc",
       "../browser/ui/extensions/extension_message_bubble_bridge_unittest.cc",
       "../browser/ui/extensions/extension_settings_overridden_dialog_unittest.cc",
+      "../browser/ui/extensions/settings_api_bubble_helpers_unittest.cc",
       "../browser/ui/extensions/settings_overridden_params_providers_unittest.cc",
       "../browser/ui/font_access/font_access_chooser_controller_unittest.cc",
       "../browser/ui/global_error/global_error_service_unittest.cc",
@@ -5413,7 +5414,6 @@
       "../browser/extensions/installed_loader_unittest.cc",
       "../browser/extensions/media_router_extension_access_logger_impl_unittest.cc",
       "../browser/extensions/menu_manager_unittest.cc",
-      "../browser/extensions/ntp_overridden_bubble_delegate_unittest.cc",
       "../browser/extensions/pack_extension_unittest.cc",
       "../browser/extensions/permission_message_combinations_unittest.cc",
       "../browser/extensions/permission_messages_unittest.cc",