Enable kExtensionDisableUnsupportedDeveloper by default

Disable the feature in tests, since the majority of tests use
unpacked extensions and the default developer mode state is OFF.

Bug: 362756477
Change-Id: Ie14988d781b733042f2f4cf6c4f39aa880f215f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6211237
Commit-Queue: Richard Chen <richche@google.com>
Reviewed-by: Vignesh Shenvi <vshenvi@google.com>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Emilia Paz <emiliapaz@chromium.org>
Reviewed-by: David Bertoni <dbertoni@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1414935}
diff --git a/chrome/browser/ash/boca/on_task/on_task_extensions_manager_impl_unittest.cc b/chrome/browser/ash/boca/on_task/on_task_extensions_manager_impl_unittest.cc
index 112e289..e5341ef 100644
--- a/chrome/browser/ash/boca/on_task/on_task_extensions_manager_impl_unittest.cc
+++ b/chrome/browser/ash/boca/on_task/on_task_extensions_manager_impl_unittest.cc
@@ -19,6 +19,7 @@
 #include "extensions/browser/unloaded_extension_reason.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/mojom/manifest.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -38,6 +39,13 @@
 namespace {
 
 class OnTaskExtensionsManagerImplTest : public ::testing::Test {
+ public:
+  OnTaskExtensionsManagerImplTest() {
+    // Allow unpacked extensions without developer mode for testing.
+    scoped_feature_list_.InitAndDisableFeature(
+        extensions_features::kExtensionDisableUnsupportedDeveloper);
+  }
+
  protected:
   const Extension* AddExtension(
       ManifestLocation location = ManifestLocation::kUnpacked) {
@@ -54,6 +62,7 @@
 
   TestingProfile* profile() { return extension_environment_.profile(); }
 
+  base::test::ScopedFeatureList scoped_feature_list_;
   TestExtensionEnvironment extension_environment_;
 };
 
diff --git a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
index 5af6ddb..31791d2 100644
--- a/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
+++ b/chrome/browser/extensions/activity_log/activity_log_enabled_unittest.cc
@@ -17,6 +17,7 @@
 #include "components/prefs/pref_service.h"
 #include "extensions/browser/uninstall_reason.h"
 #include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_features.h"
 
 namespace extensions {
 
@@ -24,6 +25,12 @@
 
 class ActivityLogEnabledTest : public ChromeRenderViewHostTestHarness {
  protected:
+  ActivityLogEnabledTest() {
+    // Allow unpacked extensions without developer mode for testing.
+    scoped_feature_list_.InitAndDisableFeature(
+        extensions_features::kExtensionDisableUnsupportedDeveloper);
+  }
+
   void SetUp() override {
     ChromeRenderViewHostTestHarness::SetUp();
     SetActivityLogTaskRunnerForTesting(
@@ -34,6 +41,8 @@
     ChromeRenderViewHostTestHarness::TearDown();
     SetActivityLogTaskRunnerForTesting(nullptr);
   }
+
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 TEST_F(ActivityLogEnabledTest, NoSwitch) {
diff --git a/chrome/browser/extensions/api/gcm/extension_gcm_app_handler_unittest.cc b/chrome/browser/extensions/api/gcm/extension_gcm_app_handler_unittest.cc
index 91d562c..8bddb1e 100644
--- a/chrome/browser/extensions/api/gcm/extension_gcm_app_handler_unittest.cc
+++ b/chrome/browser/extensions/api/gcm/extension_gcm_app_handler_unittest.cc
@@ -55,6 +55,7 @@
 #include "extensions/browser/uninstall_reason.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/manifest.h"
 #include "extensions/common/manifest_constants.h"
 #include "extensions/common/permissions/api_permission.h"
@@ -256,7 +257,11 @@
       : task_environment_(content::BrowserTaskEnvironment::REAL_IO_THREAD),
         extension_service_(nullptr),
         registration_result_(gcm::GCMClient::UNKNOWN_ERROR),
-        unregistration_result_(gcm::GCMClient::UNKNOWN_ERROR) {}
+        unregistration_result_(gcm::GCMClient::UNKNOWN_ERROR) {
+    // Allow unpacked extensions without developer mode for testing.
+    scoped_feature_list_.InitAndDisableFeature(
+        extensions_features::kExtensionDisableUnsupportedDeveloper);
+  }
 
   ExtensionGCMAppHandlerTest(const ExtensionGCMAppHandlerTest&) = delete;
   ExtensionGCMAppHandlerTest& operator=(const ExtensionGCMAppHandlerTest&) =
@@ -418,6 +423,7 @@
   }
 
  private:
+  base::test::ScopedFeatureList scoped_feature_list_;
   content::BrowserTaskEnvironment task_environment_;
   std::unique_ptr<content::InProcessUtilityThreadHelper>
       in_process_utility_thread_helper_;
diff --git a/chrome/browser/extensions/extension_service_test_base.cc b/chrome/browser/extensions/extension_service_test_base.cc
index 1110a71..030c43b3 100644
--- a/chrome/browser/extensions/extension_service_test_base.cc
+++ b/chrome/browser/extensions/extension_service_test_base.cc
@@ -53,6 +53,7 @@
 #include "extensions/browser/extension_prefs.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/pref_names.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/extensions_client.h"
 
 #if BUILDFLAG(IS_CHROMEOS)
@@ -266,6 +267,9 @@
       std::vector<
           raw_ptr<policy::ConfigurationPolicyProvider, VectorExperimental>>{
           &policy_provider_});
+  // Allow unpacked extensions without developer mode for testing.
+  feature_list_.InitAndDisableFeature(
+      extensions_features::kExtensionDisableUnsupportedDeveloper);
 }
 
 ExtensionServiceTestBase::~ExtensionServiceTestBase() {
diff --git a/chrome/browser/extensions/extension_service_test_base.h b/chrome/browser/extensions/extension_service_test_base.h
index fbf4296b..ce28aab 100644
--- a/chrome/browser/extensions/extension_service_test_base.h
+++ b/chrome/browser/extensions/extension_service_test_base.h
@@ -190,6 +190,7 @@
   }
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
+ private:
   // If a test uses a feature list, it should be destroyed after
   // |task_environment_|, to avoid tsan data races between the ScopedFeatureList
   // destructor, and any tasks running on different threads that check if a
@@ -197,7 +198,6 @@
   // finish before |feature_list_| is destroyed.
   base::test::ScopedFeatureList feature_list_;
 
- private:
   // Must be declared before anything that may make use of the
   // directory so as to ensure files are closed before cleanup.
   base::ScopedTempDir temp_dir_;
diff --git a/chrome/browser/extensions/user_script_listener_unittest.cc b/chrome/browser/extensions/user_script_listener_unittest.cc
index d57f15a..72fbf33 100644
--- a/chrome/browser/extensions/user_script_listener_unittest.cc
+++ b/chrome/browser/extensions/user_script_listener_unittest.cc
@@ -35,6 +35,7 @@
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/scripting_utils.h"
 #include "extensions/browser/test_extension_registry_observer.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/url_pattern_set.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -90,7 +91,11 @@
   UserScriptListenerTest()
       : task_environment_(content::BrowserTaskEnvironment::IO_MAINLOOP),
         profile_manager_(
-            new TestingProfileManager(TestingBrowserProcess::GetGlobal())) {}
+            new TestingProfileManager(TestingBrowserProcess::GetGlobal())) {
+    // Allow unpacked extensions without developer mode for testing.
+    scoped_feature_list_.InitAndDisableFeature(
+        extensions_features::kExtensionDisableUnsupportedDeveloper);
+  }
 
   ~UserScriptListenerTest() override = default;
 
@@ -170,6 +175,7 @@
                                               persistent_urls);
   }
 
+  base::test::ScopedFeatureList scoped_feature_list_;
   content::BrowserTaskEnvironment task_environment_;
   content::RenderViewHostTestEnabler rvh_test_enabler_;
   std::unique_ptr<TestingProfileManager> profile_manager_;
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.cc b/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.cc
index c3cd5e10..f6a9622 100644
--- a/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.cc
+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.cc
@@ -21,6 +21,7 @@
 #include "content/public/test/test_utils.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/mojom/manifest.mojom-shared.h"
 #include "extensions/test/permissions_manager_waiter.h"
 #include "ui/events/base_event_utils.h"
@@ -30,11 +31,19 @@
 using PermissionsManager = extensions::PermissionsManager;
 using SitePermissionsHelper = extensions::SitePermissionsHelper;
 
-ExtensionsToolbarUnitTest::ExtensionsToolbarUnitTest() = default;
+ExtensionsToolbarUnitTest::ExtensionsToolbarUnitTest() {
+  // Allow unpacked extensions without developer mode for testing.
+  scoped_feature_list_.InitAndDisableFeature(
+      extensions_features::kExtensionDisableUnsupportedDeveloper);
+}
 
 ExtensionsToolbarUnitTest::ExtensionsToolbarUnitTest(
     base::test::TaskEnvironment::TimeSource time_source)
-    : TestWithBrowserView(time_source) {}
+    : TestWithBrowserView(time_source) {
+  // Allow unpacked extensions without developer mode for testing.
+  scoped_feature_list_.InitAndDisableFeature(
+      extensions_features::kExtensionDisableUnsupportedDeveloper);
+}
 
 ExtensionsToolbarUnitTest::~ExtensionsToolbarUnitTest() = default;
 
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.h b/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.h
index 2869b6d..ed14aad1 100644
--- a/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.h
+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_unittest.h
@@ -163,6 +163,7 @@
   void TearDown() override;
 
  private:
+  base::test::ScopedFeatureList scoped_feature_list_;
   raw_ptr<extensions::ExtensionService, DanglingUntriaged> extension_service_ =
       nullptr;
   raw_ptr<extensions::PermissionsManager, DanglingUntriaged>
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc
index 7369742..372793f 100644
--- a/chrome/test/base/in_process_browser_test.cc
+++ b/chrome/test/base/in_process_browser_test.cc
@@ -93,6 +93,7 @@
 #include "content/public/test/test_launcher.h"
 #include "content/public/test/test_navigation_observer.h"
 #include "extensions/buildflags/buildflags.h"
+#include "extensions/common/extension_features.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "services/device/public/cpp/device_features.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
@@ -364,6 +365,10 @@
   disabled_features.push_back(
       features::kRestartNetworkServiceUnsandboxedForFailedLaunch);
 
+  // Allow unpacked extensions without developer mode for testing.
+  disabled_features.push_back(
+      extensions_features::kExtensionDisableUnsupportedDeveloper);
+
   // In-product help can conflict with tests' expected window activation and
   // focus. Individual tests can re-enable IPH.
   block_all_iph_feature_list_.InitWithNoFeaturesAllowed();
diff --git a/extensions/common/extension_features.cc b/extensions/common/extension_features.cc
index d172137..d36dd95 100644
--- a/extensions/common/extension_features.cc
+++ b/extensions/common/extension_features.cc
@@ -68,7 +68,7 @@
 
 BASE_FEATURE(kExtensionDisableUnsupportedDeveloper,
              "ExtensionDisableUnsupportedDeveloper",
-             base::FEATURE_DISABLED_BY_DEFAULT);
+             base::FEATURE_ENABLED_BY_DEFAULT);
 
 BASE_FEATURE(kExtensionDynamicURLRedirection,
              "ExtensionDynamicURLRedirection",