[Extensions] Migrate ServiceWorker off behavior feature system

The FeatureSystem is failing to retrieve the behavior feature for service
workers, but the only reason this seems to be the case is because of
potential corruption in the JSON files (or the JSON parser otherwise choking).
For now, to reduce the crash rates, just migrate the service worker restriction
off the behavior feature system.

BUG=461915

Review URL: https://codereview.chromium.org/1417563005

Cr-Commit-Position: refs/heads/master@{#356123}
(cherry picked from commit 2507a2fcd25244dadb7dfcc316426bee7b1df275)

Review URL: https://codereview.chromium.org/1417113004 .

Cr-Commit-Position: refs/branch-heads/2526@{#248}
Cr-Branched-From: cb947c0153db0ec02a8abbcb3ca086d88bf6006f-refs/heads/master@{#352221}
diff --git a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
index 2b5a5dd1..b219235cb 100644
--- a/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
+++ b/chrome/renderer/extensions/chrome_extensions_dispatcher_delegate.cc
@@ -27,6 +27,7 @@
 #include "components/version_info/version_info.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
+#include "extensions/common/constants.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/feature_switch.h"
 #include "extensions/common/permissions/manifest_permission_set.h"
@@ -259,4 +260,9 @@
 
 void ChromeExtensionsDispatcherDelegate::SetChannel(int channel) {
   extensions::SetCurrentChannel(static_cast<version_info::Channel>(channel));
+  if (extensions::GetCurrentChannel() == version_info::Channel::UNKNOWN) {
+    // chrome-extension: resources should be allowed to register ServiceWorkers.
+    blink::WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers(
+        blink::WebString::fromUTF8(extensions::kExtensionScheme));
+  }
 }
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index fa73ccc..7f3a28f 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -1069,7 +1069,6 @@
 
 void Dispatcher::OnSetChannel(int channel) {
   delegate_->SetChannel(channel);
-  AddChannelSpecificFeatures();
 }
 
 void Dispatcher::OnSetScriptingWhitelist(
@@ -1600,13 +1599,4 @@
   }
 }
 
-void Dispatcher::AddChannelSpecificFeatures() {
-  // chrome-extension: resources should be allowed to register a Service Worker.
-  if (FeatureProvider::GetBehaviorFeature(BehaviorFeature::kServiceWorker)
-          ->IsAvailableToEnvironment()
-          .is_available())
-    WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers(
-        WebString::fromUTF8(kExtensionScheme));
-}
-
 }  // namespace extensions
diff --git a/extensions/renderer/dispatcher.h b/extensions/renderer/dispatcher.h
index 09cb0d4..434dcde 100644
--- a/extensions/renderer/dispatcher.h
+++ b/extensions/renderer/dispatcher.h
@@ -246,9 +246,6 @@
   // |context|.
   void RequireGuestViewModules(ScriptContext* context);
 
-  // Adds features that are specific to the current channel.
-  void AddChannelSpecificFeatures();
-
   // The delegate for this dispatcher. Not owned, but must extend beyond the
   // Dispatcher's own lifetime.
   DispatcherDelegate* delegate_;