Revert "Extensions: Remove temporary cleanup code from crbug.com/558299"

This reverts commit fa48bec92e8b0856c65255469407f51db129dfbd.

Reason for revert: The new CHECK() is crashing, so it seems there is more to be cleaned up.  We need to investigate further.

Original change's description:
> Extensions: Remove temporary cleanup code from crbug.com/558299
> 
> In the past, there was a bug where some themes incorrectly got synced
> into the EXTENSIONS data type, so we added cleanup code to remove the
> bad data. That was long ago and all bad data should be long gone now,
> so let's get rid of the cleanup code.
> 
> Bug: none
> Change-Id: I53fcc8ecb208e9fce6565cda70ec57cc960f9b6c
> Reviewed-on: https://chromium-review.googlesource.com/1124680
> Reviewed-by: Devlin <[email protected]>
> Commit-Queue: Marc Treib <[email protected]>
> Cr-Commit-Position: refs/heads/master@{#572255}

[email protected],[email protected]

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: none
Change-Id: If10997927100f17c505eb83221770c47e4e04b7e
Reviewed-on: https://chromium-review.googlesource.com/1136614
Reviewed-by: Devlin <[email protected]>
Commit-Queue: Devlin <[email protected]>
Cr-Commit-Position: refs/heads/master@{#574979}
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 781da8e..ef74a66 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -1398,6 +1398,10 @@
       pending_extension_manager()->GetById(id);
   if (pending_extension_info) {
     if (!pending_extension_info->ShouldAllowInstall(extension)) {
+      // Hack for crbug.com/558299, see comment on DeleteThemeDoNotUse.
+      if (extension->is_theme() && pending_extension_info->is_from_sync())
+        ExtensionSyncService::Get(profile_)->DeleteThemeDoNotUse(*extension);
+
       pending_extension_manager()->Remove(id);
 
       LOG(WARNING) << "ShouldAllowInstall() returned false for " << id
diff --git a/chrome/browser/extensions/extension_sync_service.cc b/chrome/browser/extensions/extension_sync_service.cc
index ffb601e..c5f150e 100644
--- a/chrome/browser/extensions/extension_sync_service.cc
+++ b/chrome/browser/extensions/extension_sync_service.cc
@@ -57,11 +57,11 @@
 }
 
 // Predicate for PendingExtensionManager.
+// TODO(treib,devlin): The !is_theme check shouldn't be necessary anymore after
+// all the bad data from crbug.com/558299 has been cleaned up, after M52 or so.
 bool ShouldAllowInstall(const Extension* extension) {
-  // Note: In the past, there was a bug where some themes incorrectly ended up
-  // here, see https://crbug.com/558299. Make sure that doesn't happen anymore.
-  CHECK(!extension->is_theme());
-  return extensions::sync_helper::IsSyncable(extension);
+  return !extension->is_theme() &&
+         extensions::sync_helper::IsSyncable(extension);
 }
 
 syncer::SyncDataList ToSyncerSyncDataList(
@@ -493,8 +493,11 @@
     check_for_updates = true;
   } else if (state == NOT_INSTALLED) {
     if (!extension_service()->pending_extension_manager()->AddFromSync(
-            id, extension_sync_data.update_url(), extension_sync_data.version(),
-            ShouldAllowInstall, extension_sync_data.remote_install())) {
+            id,
+            extension_sync_data.update_url(),
+            extension_sync_data.version(),
+            ShouldAllowInstall,
+            extension_sync_data.remote_install())) {
       LOG(WARNING) << "Could not add pending extension for " << id;
       // This means that the extension is already pending installation, with a
       // non-INTERNAL location.  Add to pending_sync_data, even though it will
@@ -560,6 +563,12 @@
   flare_ = flare;
 }
 
+void ExtensionSyncService::DeleteThemeDoNotUse(const Extension& theme) {
+  DCHECK(theme.is_theme());
+  GetSyncBundle(syncer::EXTENSIONS)->PushSyncDeletion(
+      theme.id(), CreateSyncData(theme).GetSyncData());
+}
+
 extensions::ExtensionService* ExtensionSyncService::extension_service() const {
   return ExtensionSystem::Get(profile_)->extension_service();
 }
diff --git a/chrome/browser/extensions/extension_sync_service.h b/chrome/browser/extensions/extension_sync_service.h
index 3a86afd..878b5ba 100644
--- a/chrome/browser/extensions/extension_sync_service.h
+++ b/chrome/browser/extensions/extension_sync_service.h
@@ -67,6 +67,12 @@
   void SetSyncStartFlareForTesting(
       const syncer::SyncableService::StartSyncFlare& flare);
 
+  // Special hack: There was a bug where themes incorrectly ended up in the
+  // syncer::EXTENSIONS type. This is for cleaning up the data. crbug.com/558299
+  // DO NOT USE FOR ANYTHING ELSE!
+  // TODO(treib,devlin): Remove this after M52 or so.
+  void DeleteThemeDoNotUse(const extensions::Extension& theme);
+
  private:
   FRIEND_TEST_ALL_PREFIXES(TwoClientAppsSyncTest, UnexpectedLaunchType);
   FRIEND_TEST_ALL_PREFIXES(ExtensionDisabledGlobalErrorTest,