[Media Feeds] Disable on Android

Disables Media Feeds on Android because they
are desktop only and caused a large binary size
regression.

BUG=1070720

Change-Id: If7afe1f62524d84b93951c1dc8bf4c955c5128a1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2231701
Reviewed-by: Tommy Steimel <[email protected]>
Reviewed-by: David Trainor <[email protected]>
Reviewed-by: Tom Sepez <[email protected]>
Commit-Queue: Becca Hughes <[email protected]>
Cr-Commit-Position: refs/heads/master@{#776107}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 851c277..a289c47 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -683,16 +683,6 @@
     "media/cast_mirroring_service_host.h",
     "media/cast_remoting_connector.cc",
     "media/cast_remoting_connector.h",
-    "media/feeds/media_feeds_contents_observer.cc",
-    "media/feeds/media_feeds_contents_observer.h",
-    "media/feeds/media_feeds_converter.cc",
-    "media/feeds/media_feeds_converter.h",
-    "media/feeds/media_feeds_fetcher.cc",
-    "media/feeds/media_feeds_fetcher.h",
-    "media/feeds/media_feeds_service.cc",
-    "media/feeds/media_feeds_service.h",
-    "media/feeds/media_feeds_service_factory.cc",
-    "media/feeds/media_feeds_service_factory.h",
     "media/feeds/media_feeds_utils.cc",
     "media/feeds/media_feeds_utils.h",
     "media/history/media_history_contents_observer.cc",
@@ -2158,7 +2148,6 @@
     "//components/safe_browsing/core/common:safe_browsing_policy_handler",
     "//components/safe_search_api",
     "//components/safe_search_api:safe_search_client",
-    "//components/schema_org:extractor",
     "//components/schema_org/common:improved_mojom",
     "//components/search",
     "//components/search_engines",
@@ -3344,6 +3333,16 @@
       "lifetime/termination_notification.h",
       "media/capture_access_handler_base.cc",
       "media/capture_access_handler_base.h",
+      "media/feeds/media_feeds_contents_observer.cc",
+      "media/feeds/media_feeds_contents_observer.h",
+      "media/feeds/media_feeds_converter.cc",
+      "media/feeds/media_feeds_converter.h",
+      "media/feeds/media_feeds_fetcher.cc",
+      "media/feeds/media_feeds_fetcher.h",
+      "media/feeds/media_feeds_service.cc",
+      "media/feeds/media_feeds_service.h",
+      "media/feeds/media_feeds_service_factory.cc",
+      "media/feeds/media_feeds_service_factory.h",
       "media/unified_autoplay_config.cc",
       "media/unified_autoplay_config.h",
       "media/webrtc/desktop_capture_devices_util.cc",
@@ -3869,6 +3868,7 @@
       "//components/image_fetcher/core",
       "//components/keep_alive_registry",
       "//components/ntp_snippets",
+      "//components/schema_org:extractor",
       "//components/services/app_service:lib",
       "//components/services/app_service/public/cpp:app_file_handling",
       "//components/services/app_service/public/cpp:app_update",
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index e250881..a0ffdd8 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
 #include "chrome/browser/engagement/site_engagement_details.mojom.h"
 #include "chrome/browser/language/translate_frame_binder.h"
-#include "chrome/browser/media/feeds/media_feeds_store.mojom.h"
 #include "chrome/browser/media/history/media_history_store.mojom.h"
 #include "chrome/browser/media/media_engagement_score_details.mojom.h"
 #include "chrome/browser/navigation_predictor/navigation_predictor.h"
@@ -31,7 +30,6 @@
 #include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h"
 #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h"
 #include "chrome/browser/ui/webui/media/media_engagement_ui.h"
-#include "chrome/browser/ui/webui/media/media_feeds_ui.h"
 #include "chrome/browser/ui/webui/media/media_history_ui.h"
 #include "chrome/browser/ui/webui/omnibox/omnibox.mojom.h"
 #include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
@@ -102,11 +100,13 @@
 #else
 #include "chrome/browser/accessibility/caption_host_impl.h"
 #include "chrome/browser/badging/badge_manager.h"
+#include "chrome/browser/media/feeds/media_feeds_store.mojom.h"
 #include "chrome/browser/payments/payment_request_factory.h"
 #include "chrome/browser/speech/speech_recognition_service.h"
 #include "chrome/browser/speech/speech_recognition_service_factory.h"
 #include "chrome/browser/ui/webui/downloads/downloads.mojom.h"
 #include "chrome/browser/ui/webui/downloads/downloads_ui.h"
+#include "chrome/browser/ui/webui/media/media_feeds_ui.h"
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page.mojom.h"
 #include "chrome/browser/ui/webui/new_tab_page/new_tab_page_ui.h"
 #include "chrome/common/caption.mojom.h"
@@ -463,9 +463,6 @@
       media::mojom::MediaEngagementScoreDetailsProvider, MediaEngagementUI>(
       map);
 
-  RegisterWebUIControllerInterfaceBinder<media_feeds::mojom::MediaFeedsStore,
-                                         MediaFeedsUI>(map);
-
   RegisterWebUIControllerInterfaceBinder<
       media_history::mojom::MediaHistoryStore, MediaHistoryUI>(map);
 
@@ -491,6 +488,9 @@
 
   RegisterWebUIControllerInterfaceBinder<
       new_tab_page::mojom::PageHandlerFactory, NewTabPageUI>(map);
+
+  RegisterWebUIControllerInterfaceBinder<media_feeds::mojom::MediaFeedsStore,
+                                         MediaFeedsUI>(map);
 #endif
 
 #if defined(OS_CHROMEOS)
diff --git a/chrome/browser/media/feeds/media_feeds_service.cc b/chrome/browser/media/feeds/media_feeds_service.cc
index 81990a8..0ca7710 100644
--- a/chrome/browser/media/feeds/media_feeds_service.cc
+++ b/chrome/browser/media/feeds/media_feeds_service.cc
@@ -8,7 +8,6 @@
 #include "base/feature_list.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/threading/thread_checker.h"
-#include "build/build_config.h"
 #include "chrome/browser/media/feeds/media_feeds_converter.h"
 #include "chrome/browser/media/feeds/media_feeds_fetcher.h"
 #include "chrome/browser/media/feeds/media_feeds_service_factory.h"
@@ -123,14 +122,10 @@
 
 MediaFeedsService::MediaFeedsService(Profile* profile)
     :
-#if defined(OS_ANDROID)
-      cookie_change_listener_(nullptr),
-#else
       cookie_change_listener_(std::make_unique<CookieChangeListener>(
           profile,
           base::BindRepeating(&MediaFeedsService::OnResetOriginFromCookie,
                               base::Unretained(this)))),
-#endif  // defined(OS_ANDROID)
       profile_(profile) {
   DCHECK(!profile->IsOffTheRecord());
 
diff --git a/chrome/browser/media/history/media_history_keyed_service_unittest.cc b/chrome/browser/media/history/media_history_keyed_service_unittest.cc
index 008350a8..5ff7be8b 100644
--- a/chrome/browser/media/history/media_history_keyed_service_unittest.cc
+++ b/chrome/browser/media/history/media_history_keyed_service_unittest.cc
@@ -16,8 +16,6 @@
 #include "base/test/test_mock_time_task_runner.h"
 #include "build/build_config.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
-#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
 #include "chrome/browser/media/feeds/media_feeds_store.mojom-shared.h"
 #include "chrome/browser/media/feeds/media_feeds_store.mojom.h"
 #include "chrome/browser/media/history/media_history_feed_associated_origins_table.h"
@@ -44,6 +42,11 @@
 #include "services/media_session/public/cpp/media_position.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_service.h"
+#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
+#endif
+
 namespace media_history {
 
 namespace {
@@ -244,10 +247,12 @@
     return result;
   }
 
+#if !defined(OS_ANDROID)
   media_feeds::MediaFeedsService* GetMediaFeedsService() {
     return media_feeds::MediaFeedsServiceFactory::GetInstance()->GetForProfile(
         profile());
   }
+#endif
 
   scoped_refptr<base::TestMockTimeTaskRunner> mock_time_task_runner_;
 
@@ -435,9 +440,11 @@
                                    CreateImageVector(shared_image));
   }
 
+#if !defined(OS_ANDROID)
   // Discover the media feeds.
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_1);
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_2);
+#endif
 
   // Wait until the playbacks have finished saving.
   WaitForDB();
@@ -456,11 +463,14 @@
     EXPECT_EQ(5,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(5, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(2, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(10, stats->table_row_counts
                       [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 10 session images because each session has an image with two
     // sizes.
@@ -474,7 +484,10 @@
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistoryPlaybackTable::kTableName));
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(images, GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(media_feeds, GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 
   MaybeSetSavingBrowsingHistoryDisabled();
 
@@ -503,11 +516,14 @@
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(2, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(1, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(1,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(5, stats->table_row_counts
                      [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 4 session images because each session has an image with two
     // sizes.
@@ -521,8 +537,11 @@
   EXPECT_EQ(remaining, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(remaining_images,
             GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(remaining_media_feeds,
             GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 }
 
 TEST_P(MediaHistoryKeyedServiceTest,
@@ -656,9 +675,11 @@
   // Record a visit for |url3|.
   history->AddPage(url3, base::Time::Now(), history::SOURCE_BROWSED);
 
+#if !defined(OS_ANDROID)
   // Discover the media feeds.
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_1);
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_2);
+#endif
 
   // Wait until the playbacks have finished saving.
   WaitForDB();
@@ -677,11 +698,14 @@
     EXPECT_EQ(5,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(5, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(2, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(10, stats->table_row_counts
                       [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 10 session images because each session has an image with two
     // sizes.
@@ -695,7 +719,10 @@
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistoryPlaybackTable::kTableName));
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(images, GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(media_feeds, GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 
   MaybeSetSavingBrowsingHistoryDisabled();
 
@@ -724,11 +751,14 @@
     EXPECT_EQ(4,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(4, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(2, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(10, stats->table_row_counts
                       [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 8 session images because each session has an image with two
     // sizes.
@@ -742,7 +772,10 @@
   EXPECT_EQ(remaining, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(remaining_images,
             GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(media_feeds, GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 }
 
 TEST_P(MediaHistoryKeyedServiceTest, CleanUpDatabaseWhenURLIsDeleted) {
@@ -870,9 +903,11 @@
                                    CreateImageVector(shared_image));
   }
 
+#if !defined(OS_ANDROID)
   // Discover the media feeds.
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_1);
   GetMediaFeedsService()->DiscoverMediaFeed(media_feed_2);
+#endif
 
   // Wait until the playbacks have finished saving.
   WaitForDB();
@@ -891,11 +926,14 @@
     EXPECT_EQ(5,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(5, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(2, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(10, stats->table_row_counts
                       [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 10 session images because each session has an image with two
     // sizes.
@@ -909,7 +947,10 @@
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistoryPlaybackTable::kTableName));
   EXPECT_EQ(all_urls, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(images, GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(media_feeds, GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 
   // Check the origins have the correct aggregate watchtime.
   {
@@ -954,11 +995,14 @@
     EXPECT_EQ(3,
               stats->table_row_counts[MediaHistoryPlaybackTable::kTableName]);
     EXPECT_EQ(3, stats->table_row_counts[MediaHistorySessionTable::kTableName]);
+
+#if !defined(OS_ANDROID)
     EXPECT_EQ(2, stats->table_row_counts[MediaHistoryFeedsTable::kTableName]);
     EXPECT_EQ(2,
               stats->table_row_counts[MediaHistoryFeedItemsTable::kTableName]);
     EXPECT_EQ(10, stats->table_row_counts
                       [MediaHistoryFeedAssociatedOriginsTable::kTableName]);
+#endif
 
     // There are 6 session images because each session has an image with two
     // sizes.
@@ -972,7 +1016,10 @@
   EXPECT_EQ(remaining, GetURLsInTable(MediaHistorySessionTable::kTableName));
   EXPECT_EQ(remaining_images,
             GetURLsInTable(MediaHistoryImagesTable::kTableName));
+
+#if !defined(OS_ANDROID)
   EXPECT_EQ(media_feeds, GetURLsInTable(MediaHistoryFeedsTable::kTableName));
+#endif
 
   // Check the origins have the correct aggregate watchtime.
   {
diff --git a/chrome/browser/media/history/media_history_store.cc b/chrome/browser/media/history/media_history_store.cc
index 90182e9..64210ab 100644
--- a/chrome/browser/media/history/media_history_store.cc
+++ b/chrome/browser/media/history/media_history_store.cc
@@ -10,7 +10,7 @@
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/stringprintf.h"
 #include "base/task_runner_util.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
+#include "build/build_config.h"
 #include "chrome/browser/media/history/media_history_feed_associated_origins_table.h"
 #include "chrome/browser/media/history/media_history_feed_items_table.h"
 #include "chrome/browser/media/history/media_history_feeds_table.h"
@@ -28,6 +28,10 @@
 #include "sql/transaction.h"
 #include "url/origin.h"
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_service.h"
+#endif  // !defined(OS_ANDROID)
+
 namespace {
 
 constexpr int kCurrentVersionNumber = 2;
@@ -97,6 +101,14 @@
          cause == net::CookieChangeCause::EVICTED;
 }
 
+bool IsMediaFeedsEnabled() {
+#if defined(OS_ANDROID)
+  return false;
+#else
+  return media_feeds::MediaFeedsService::IsEnabled();
+#endif  // defined(OS_ANDROID)
+}
+
 }  // namespace
 
 int GetCurrentVersion() {
@@ -128,14 +140,14 @@
       session_images_table_(
           new MediaHistorySessionImagesTable(db_task_runner_)),
       images_table_(new MediaHistoryImagesTable(db_task_runner_)),
-      feeds_table_(media_feeds::MediaFeedsService::IsEnabled()
+      feeds_table_(IsMediaFeedsEnabled()
                        ? new MediaHistoryFeedsTable(db_task_runner_)
                        : nullptr),
-      feed_items_table_(media_feeds::MediaFeedsService::IsEnabled()
+      feed_items_table_(IsMediaFeedsEnabled()
                             ? new MediaHistoryFeedItemsTable(db_task_runner_)
                             : nullptr),
       feed_origins_table_(
-          media_feeds::MediaFeedsService::IsEnabled()
+          IsMediaFeedsEnabled()
               ? new MediaHistoryFeedAssociatedOriginsTable(db_task_runner_)
               : nullptr),
       initialization_successful_(false) {}
diff --git a/chrome/browser/media/history/media_history_store_unittest.cc b/chrome/browser/media/history/media_history_store_unittest.cc
index 8ce98d02..8200621 100644
--- a/chrome/browser/media/history/media_history_store_unittest.cc
+++ b/chrome/browser/media/history/media_history_store_unittest.cc
@@ -17,9 +17,8 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/test_timeouts.h"
+#include "build/build_config.h"
 #include "chrome/browser/history/history_service_factory.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
-#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
 #include "chrome/browser/media/feeds/media_feeds_store.mojom-forward.h"
 #include "chrome/browser/media/feeds/media_feeds_store.mojom.h"
 #include "chrome/browser/media/history/media_history_feed_items_table.h"
@@ -46,6 +45,11 @@
 #include "sql/statement.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_service.h"
+#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
+#endif
+
 namespace media_history {
 
 namespace {
@@ -54,6 +58,8 @@
 // might be equal but it might be close too.
 const int kTimeErrorMargin = 10000;
 
+#if !defined(OS_ANDROID)
+
 // The expected display name for the fetched media feed.
 const char kExpectedDisplayName[] = "Test Feed";
 
@@ -70,6 +76,8 @@
 const int kExpectedAltFetchContentTypes =
     static_cast<int>(media_feeds::mojom::MediaFeedItemType::kVideo);
 
+#endif  // !defined(OS_ANDROID)
+
 base::FilePath g_temp_history_dir;
 
 std::unique_ptr<KeyedService> BuildTestHistoryService(
@@ -244,20 +252,6 @@
                            media_feeds::mojom::FetchResult::kSuccess);
   }
 
-  void DiscoverMediaFeed(const GURL& url) {
-    if (auto* service = GetMediaFeedsService())
-      service->DiscoverMediaFeed(url);
-  }
-
-  media_feeds::MediaFeedsService* GetMediaFeedsService() {
-    Profile* profile = profile_.get();
-    if (GetParam() == TestState::kIncognito)
-      profile = profile->GetOffTheRecordProfile();
-
-    return media_feeds::MediaFeedsServiceFactory::GetInstance()->GetForProfile(
-        profile);
-  }
-
   MediaHistoryKeyedService* service() const {
     // If the param is true then we use the OTR service to simulate being in
     // incognito.
@@ -271,6 +265,8 @@
 
   bool IsReadOnly() const { return GetParam() != TestState::kNormal; }
 
+  Profile* GetProfile() { return profile_.get(); }
+
  private:
   base::ScopedTempDir temp_dir_;
 
@@ -624,26 +620,7 @@
   EXPECT_EQ(origins, GetOriginRowsSync(otr_service()));
 }
 
-// TODO(crbug.com/1087974).
-#if defined(THREAD_SANITIZER)
-#define MAYBE_DiscoverMediaFeed_Noop DISABLED_DiscoverMediaFeed_Noop
-#else
-#define MAYBE_DiscoverMediaFeed_Noop DiscoverMediaFeed_Noop
-#endif
-TEST_P(MediaHistoryStoreUnitTest, MAYBE_DiscoverMediaFeed_Noop) {
-  DiscoverMediaFeed(GURL("https://www.google.com/feed"));
-  WaitForDB();
-
-  {
-    // Check the feeds were not recorded.
-    mojom::MediaHistoryStatsPtr stats = GetStatsSync(service());
-    EXPECT_FALSE(base::Contains(stats->table_row_counts,
-                                MediaHistoryFeedsTable::kTableName));
-
-    // The OTR service should have the same data.
-    EXPECT_EQ(stats, GetStatsSync(otr_service()));
-  }
-}
+#if !defined(OS_ANDROID)
 
 // Runs the tests with the media feeds feature enabled.
 class MediaHistoryStoreFeedsTest : public MediaHistoryStoreUnitTest {
@@ -653,6 +630,20 @@
     MediaHistoryStoreUnitTest::SetUp();
   }
 
+  void DiscoverMediaFeed(const GURL& url) {
+    if (auto* service = GetMediaFeedsService())
+      service->DiscoverMediaFeed(url);
+  }
+
+  media_feeds::MediaFeedsService* GetMediaFeedsService() {
+    Profile* profile = GetProfile();
+    if (GetParam() == TestState::kIncognito)
+      profile = profile->GetOffTheRecordProfile();
+
+    return media_feeds::MediaFeedsServiceFactory::GetInstance()->GetForProfile(
+        profile);
+  }
+
   std::vector<media_feeds::mojom::MediaFeedItemPtr> GetItemsForMediaFeedSync(
       MediaHistoryKeyedService* service,
       const int64_t feed_id) {
@@ -2873,4 +2864,6 @@
   }
 }
 
+#endif  // !defined(OS_ANDROID)
+
 }  // namespace media_history
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 6abde35..e5f9fd62 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/gpu/gpu_mode_manager.h"
 #include "chrome/browser/intranet_redirect_detector.h"
 #include "chrome/browser/lifetime/browser_shutdown.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
 #include "chrome/browser/media/media_device_id_salt.h"
 #include "chrome/browser/media/media_engagement_service.h"
 #include "chrome/browser/media/media_storage_id_salt.h"
@@ -397,6 +396,10 @@
 #include "chrome/browser/ui/browser_view_prefs.h"
 #endif
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_service.h"
+#endif
+
 namespace {
 
 #if defined(OS_ANDROID)
@@ -1084,7 +1087,9 @@
   RegisterBrowserViewProfilePrefs(registry);
 #endif
 
+#if !defined(OS_ANDROID)
   media_feeds::MediaFeedsService::RegisterProfilePrefs(registry);
+#endif
 
   RegisterProfilePrefsForMigration(registry);
 }
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index b35064b7..b359e44e 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -37,7 +37,6 @@
 #include "chrome/browser/history/top_sites_factory.h"
 #include "chrome/browser/language/language_model_manager_factory.h"
 #include "chrome/browser/language/url_language_histogram_factory.h"
-#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
 #include "chrome/browser/media/history/media_history_keyed_service_factory.h"
 #include "chrome/browser/media/media_engagement_service.h"
 #include "chrome/browser/media/media_engagement_service_factory.h"
@@ -108,6 +107,7 @@
 #else
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/feedback/feedback_uploader_factory_chrome.h"
+#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
 #include "chrome/browser/metrics/desktop_session_duration/desktop_profile_session_durations_service_factory.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h"
 #include "chrome/browser/search/instant_service_factory.h"
@@ -290,8 +290,8 @@
 #endif
   if (MediaEngagementService::IsEnabled())
     MediaEngagementServiceFactory::GetInstance();
-  media_feeds::MediaFeedsServiceFactory::GetInstance();
 #if !defined(OS_ANDROID)
+  media_feeds::MediaFeedsServiceFactory::GetInstance();
   MediaGalleriesPreferencesFactory::GetInstance();
 #endif
   if (base::FeatureList::IsEnabled(media::kUseMediaHistoryStore))
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 5c78199..fa6f677 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -241,8 +241,6 @@
     "webui/log_web_ui_url.h",
     "webui/media/media_engagement_ui.cc",
     "webui/media/media_engagement_ui.h",
-    "webui/media/media_feeds_ui.cc",
-    "webui/media/media_feeds_ui.h",
     "webui/media/media_history_ui.cc",
     "webui/media/media_history_ui.h",
     "webui/media/webrtc_logs_ui.cc",
@@ -614,6 +612,12 @@
     }
   } else {
     # !is_android
+
+    sources += [
+      "webui/media/media_feeds_ui.cc",
+      "webui/media/media_feeds_ui.h",
+    ]
+
     deps += [ "//components/autofill/content/browser/webauthn" ]
   }
 
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index ab86be5..98389f5 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -31,8 +31,6 @@
 #include "chrome/browser/history/top_sites_factory.h"
 #include "chrome/browser/infobars/infobar_service.h"
 #include "chrome/browser/installable/installable_manager.h"
-#include "chrome/browser/media/feeds/media_feeds_contents_observer.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
 #include "chrome/browser/media/history/media_history_contents_observer.h"
 #include "chrome/browser/media/media_engagement_service.h"
 #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_observer.h"
@@ -149,6 +147,11 @@
 #include "chrome/browser/ui/hats/hats_helper.h"
 #endif
 
+#if !defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_contents_observer.h"
+#include "chrome/browser/media/feeds/media_feeds_service.h"
+#endif
+
 #if BUILDFLAG(ENABLE_CAPTIVE_PORTAL_DETECTION)
 #include "components/captive_portal/content/captive_portal_tab_helper.h"
 #endif
@@ -259,8 +262,6 @@
   IsolatedPrerenderTabHelper::CreateForWebContents(web_contents);
   if (MediaEngagementService::IsEnabled())
     MediaEngagementService::CreateWebContentsObserver(web_contents);
-  if (media_feeds::MediaFeedsService::IsEnabled())
-    MediaFeedsContentsObserver::CreateForWebContents(web_contents);
   if (base::FeatureList::IsEnabled(media::kUseMediaHistoryStore))
     MediaHistoryContentsObserver::CreateForWebContents(web_contents);
   metrics::RendererUptimeWebContentsObserver::CreateForWebContents(
@@ -360,6 +361,8 @@
       std::make_unique<JavaScriptTabModalDialogManagerDelegateDesktop>(
           web_contents));
   ManagePasswordsUIController::CreateForWebContents(web_contents);
+  if (media_feeds::MediaFeedsService::IsEnabled())
+    MediaFeedsContentsObserver::CreateForWebContents(web_contents);
   pdf::PDFWebContentsHelper::CreateForWebContentsWithClient(
       web_contents, std::make_unique<ChromePDFWebContentsHelperClient>());
   SadTabHelper::CreateForWebContents(web_contents);
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 0cf5a37..4751ffd3 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/buildflags.h"
 #include "chrome/browser/devtools/devtools_ui_bindings.h"
 #include "chrome/browser/engagement/site_engagement_service.h"
-#include "chrome/browser/media/feeds/media_feeds_service.h"
 #include "chrome/browser/media/history/media_history_keyed_service.h"
 #include "chrome/browser/media/media_engagement_service.h"
 #include "chrome/browser/profiles/profile.h"
@@ -133,6 +132,7 @@
 #include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h"
 #endif  // BUILDFLAG(ENABLE_FEED_IN_CHROME)
 #else   // defined(OS_ANDROID)
+#include "chrome/browser/media/feeds/media_feeds_service.h"
 #include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/ui/webui/bookmarks/bookmarks_ui.h"
 #include "chrome/browser/ui/webui/devtools_ui.h"
@@ -817,10 +817,12 @@
     return &NewWebUI<MediaEngagementUI>;
   }
 
+#if !defined(OS_ANDROID)
   if (media_feeds::MediaFeedsService::IsEnabled() &&
       url.host_piece() == chrome::kChromeUIMediaFeedsHost) {
     return &NewWebUI<MediaFeedsUI>;
   }
+#endif
 
   if (media_history::MediaHistoryKeyedService::IsEnabled() &&
       url.host_piece() == chrome::kChromeUIMediaHistoryHost) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 1033e78..cb8d342 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3170,9 +3170,6 @@
     "../browser/mac/keystone_glue_unittest.mm",
     "../browser/media/android/router/media_router_android_unittest.cc",
     "../browser/media/cast_mirroring_service_host_unittest.cc",
-    "../browser/media/feeds/media_feeds_converter_unittest.cc",
-    "../browser/media/feeds/media_feeds_fetcher_unittest.cc",
-    "../browser/media/feeds/media_feeds_service_unittest.cc",
     "../browser/media/history/media_history_keyed_service_unittest.cc",
     "../browser/media/history/media_history_store_unittest.cc",
     "../browser/media/media_engagement_contents_observer_unittest.cc",
@@ -3584,6 +3581,9 @@
       "../browser/component_updater/soda_component_installer_unittest.cc",
       "../browser/content_settings/generated_cookie_prefs_unittest.cc",
       "../browser/device_identity/device_oauth2_token_service_unittest.cc",
+      "../browser/media/feeds/media_feeds_converter_unittest.cc",
+      "../browser/media/feeds/media_feeds_fetcher_unittest.cc",
+      "../browser/media/feeds/media_feeds_service_unittest.cc",
       "../browser/nearby_sharing/fast_initiation_manager_unittest.cc",
       "../browser/nearby_sharing/nearby_process_manager_unittest.cc",
       "../browser/nearby_sharing/nearby_sharing_service_impl_unittest.cc",