Commit efb25c77 authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

[Media Feeds] Add media feeds service and flag

Adds a simple Media Feeds service and feature
flag so we can start working on the feature.

BUG=1056766

Change-Id: I74fe15de8ea6e3ee1c73dbb1ebe467ae9f195144
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079265Reviewed-by: default avatarDavid Roger <droger@chromium.org>
Reviewed-by: default avatarTommi <tommi@chromium.org>
Reviewed-by: default avatarTommy Steimel <steimel@chromium.org>
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#746034}
parent 6c10896f
...@@ -687,6 +687,10 @@ jumbo_static_library("browser") { ...@@ -687,6 +687,10 @@ jumbo_static_library("browser") {
"media/cast_mirroring_service_host.h", "media/cast_mirroring_service_host.h",
"media/cast_remoting_connector.cc", "media/cast_remoting_connector.cc",
"media/cast_remoting_connector.h", "media/cast_remoting_connector.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/history/media_history_contents_observer.cc", "media/history/media_history_contents_observer.cc",
"media/history/media_history_contents_observer.h", "media/history/media_history_contents_observer.h",
"media/history/media_history_images_table.cc", "media/history/media_history_images_table.cc",
......
# TEAM: media-dev@chromium.org
# COMPONENT: Internals>Media>Feeds
beccahughes@chromium.org
sgbowen@google.com
steimel@chromium.org
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/feeds/media_feeds_service.h"
#include "base/feature_list.h"
#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_context.h"
#include "media/base/media_switches.h"
namespace media_feeds {
MediaFeedsService::MediaFeedsService(Profile* profile) {
DCHECK(!profile->IsOffTheRecord());
}
// static
MediaFeedsService* MediaFeedsService::Get(Profile* profile) {
return MediaFeedsServiceFactory::GetForProfile(profile);
}
MediaFeedsService::~MediaFeedsService() = default;
bool MediaFeedsService::IsEnabled() {
return base::FeatureList::IsEnabled(media::kMediaFeeds);
}
} // namespace media_feeds
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_H_
#define CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_H_
#include "components/keyed_service/core/keyed_service.h"
class Profile;
namespace media_feeds {
class MediaFeedsService : public KeyedService {
public:
explicit MediaFeedsService(Profile* profile);
~MediaFeedsService() override;
MediaFeedsService(const MediaFeedsService& t) = delete;
MediaFeedsService& operator=(const MediaFeedsService&) = delete;
static bool IsEnabled();
// Returns the instance attached to the given |profile|.
static MediaFeedsService* Get(Profile* profile);
};
} // namespace media_feeds
#endif // CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
#include "chrome/browser/media/feeds/media_feeds_service.h"
#include "chrome/browser/profiles/profile.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "content/public/browser/browser_context.h"
namespace media_feeds {
// static
MediaFeedsService* MediaFeedsServiceFactory::GetForProfile(Profile* profile) {
if (profile->IsOffTheRecord())
return nullptr;
if (!MediaFeedsService::IsEnabled())
return nullptr;
return static_cast<MediaFeedsService*>(
GetInstance()->GetServiceForBrowserContext(profile, true));
}
// static
MediaFeedsServiceFactory* MediaFeedsServiceFactory::GetInstance() {
static base::NoDestructor<MediaFeedsServiceFactory> factory;
return factory.get();
}
MediaFeedsServiceFactory::MediaFeedsServiceFactory()
: BrowserContextKeyedServiceFactory(
"MediaFeedsService",
BrowserContextDependencyManager::GetInstance()) {}
MediaFeedsServiceFactory::~MediaFeedsServiceFactory() = default;
bool MediaFeedsServiceFactory::ServiceIsCreatedWithBrowserContext() const {
return true;
}
KeyedService* MediaFeedsServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
DCHECK(!context->IsOffTheRecord());
if (!MediaFeedsService::IsEnabled())
return nullptr;
return new MediaFeedsService(Profile::FromBrowserContext(context));
}
} // namespace media_feeds
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_FACTORY_H_
#define CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_FACTORY_H_
#include "base/no_destructor.h"
#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
class KeyedService;
class Profile;
namespace content {
class BrowserContext;
} // namespace content
namespace media_feeds {
class MediaFeedsService;
class MediaFeedsServiceFactory : public BrowserContextKeyedServiceFactory {
public:
static MediaFeedsService* GetForProfile(Profile* profile);
static MediaFeedsServiceFactory* GetInstance();
protected:
bool ServiceIsCreatedWithBrowserContext() const override;
private:
friend class base::NoDestructor<MediaFeedsServiceFactory>;
MediaFeedsServiceFactory();
~MediaFeedsServiceFactory() override;
KeyedService* BuildServiceInstanceFor(
content::BrowserContext* context) const override;
};
} // namespace media_feeds
#endif // CHROME_BROWSER_MEDIA_FEEDS_MEDIA_FEEDS_SERVICE_FACTORY_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/feeds/media_feeds_service_factory.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/browser_task_environment.h"
#include "media/base/media_switches.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media_feeds {
class MediaFeedsServiceTest : public testing::Test {
public:
MediaFeedsServiceTest() = default;
void SetUp() override { features_.InitAndEnableFeature(media::kMediaFeeds); }
private:
base::test::ScopedFeatureList features_;
content::BrowserTaskEnvironment task_environment_;
};
TEST_F(MediaFeedsServiceTest, GetForProfile) {
TestingProfile profile;
EXPECT_NE(nullptr, MediaFeedsServiceFactory::GetForProfile(&profile));
Profile* otr_profile = profile.GetOffTheRecordProfile();
EXPECT_EQ(nullptr, MediaFeedsServiceFactory::GetForProfile(otr_profile));
}
} // namespace media_feeds
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include "chrome/browser/history/top_sites_factory.h" #include "chrome/browser/history/top_sites_factory.h"
#include "chrome/browser/language/language_model_manager_factory.h" #include "chrome/browser/language/language_model_manager_factory.h"
#include "chrome/browser/language/url_language_histogram_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/history/media_history_keyed_service_factory.h"
#include "chrome/browser/media/media_engagement_service.h" #include "chrome/browser/media/media_engagement_service.h"
#include "chrome/browser/media/media_engagement_service_factory.h" #include "chrome/browser/media/media_engagement_service_factory.h"
...@@ -290,6 +291,7 @@ void ChromeBrowserMainExtraPartsProfiles:: ...@@ -290,6 +291,7 @@ void ChromeBrowserMainExtraPartsProfiles::
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
MediaGalleriesPreferencesFactory::GetInstance(); MediaGalleriesPreferencesFactory::GetInstance();
#endif #endif
media_feeds::MediaFeedsServiceFactory::GetInstance();
if (base::FeatureList::IsEnabled(media::kUseMediaHistoryStore)) if (base::FeatureList::IsEnabled(media::kUseMediaHistoryStore))
media_history::MediaHistoryKeyedServiceFactory::GetInstance(); media_history::MediaHistoryKeyedServiceFactory::GetInstance();
#if defined(OS_WIN) || defined(OS_MACOSX) || \ #if defined(OS_WIN) || defined(OS_MACOSX) || \
......
...@@ -3210,6 +3210,7 @@ test("unit_tests") { ...@@ -3210,6 +3210,7 @@ test("unit_tests") {
"../browser/mac/keystone_glue_unittest.mm", "../browser/mac/keystone_glue_unittest.mm",
"../browser/media/android/router/media_router_android_unittest.cc", "../browser/media/android/router/media_router_android_unittest.cc",
"../browser/media/cast_mirroring_service_host_unittest.cc", "../browser/media/cast_mirroring_service_host_unittest.cc",
"../browser/media/feeds/media_feeds_service_unittest.cc",
"../browser/media/history/media_history_keyed_service_factory_unittest.cc", "../browser/media/history/media_history_keyed_service_factory_unittest.cc",
"../browser/media/history/media_history_keyed_service_unittest.cc", "../browser/media/history/media_history_keyed_service_unittest.cc",
"../browser/media/history/media_history_store_unittest.cc", "../browser/media/history/media_history_store_unittest.cc",
......
...@@ -627,6 +627,11 @@ const base::Feature kPreloadMediaEngagementData{ ...@@ -627,6 +627,11 @@ const base::Feature kPreloadMediaEngagementData{
const base::Feature kMediaEngagementHTTPSOnly{ const base::Feature kMediaEngagementHTTPSOnly{
"MediaEngagementHTTPSOnly", base::FEATURE_DISABLED_BY_DEFAULT}; "MediaEngagementHTTPSOnly", base::FEATURE_DISABLED_BY_DEFAULT};
// Enables Media Feeds to allow sites to provide specific recommendations for
// users.
const base::Feature kMediaFeeds{"MediaFeeds",
base::FEATURE_DISABLED_BY_DEFAULT};
// Send events to devtools rather than to chrome://media-internals // Send events to devtools rather than to chrome://media-internals
const base::Feature kMediaInspectorLogging{"MediaInspectorLogging", const base::Feature kMediaInspectorLogging{"MediaInspectorLogging",
base::FEATURE_DISABLED_BY_DEFAULT}; base::FEATURE_DISABLED_BY_DEFAULT};
......
...@@ -135,6 +135,7 @@ MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesWithParameters; ...@@ -135,6 +135,7 @@ MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesWithParameters;
MEDIA_EXPORT extern const base::Feature kMediaCastOverlayButton; MEDIA_EXPORT extern const base::Feature kMediaCastOverlayButton;
MEDIA_EXPORT extern const base::Feature kMediaEngagementBypassAutoplayPolicies; MEDIA_EXPORT extern const base::Feature kMediaEngagementBypassAutoplayPolicies;
MEDIA_EXPORT extern const base::Feature kMediaEngagementHTTPSOnly; MEDIA_EXPORT extern const base::Feature kMediaEngagementHTTPSOnly;
MEDIA_EXPORT extern const base::Feature kMediaFeeds;
MEDIA_EXPORT extern const base::Feature kMediaInspectorLogging; MEDIA_EXPORT extern const base::Feature kMediaInspectorLogging;
MEDIA_EXPORT extern const base::Feature kMediaLearningExperiment; MEDIA_EXPORT extern const base::Feature kMediaLearningExperiment;
MEDIA_EXPORT extern const base::Feature kMediaLearningFramework; MEDIA_EXPORT extern const base::Feature kMediaLearningFramework;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment