Commit cf45c7a9 authored by Becca Hughes's avatar Becca Hughes Committed by Chromium LUCI CQ

Split KaleidoscopeDataProvider into NTP variant

As part of our security review we were asked to split
the KaleidoscopeDataProvider interface into two to reduce
the attack surface from the NTP.

BUG=1114862

Change-Id: Ie37472dfcda44cbea00b3e5b9b610b485d41d5fa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2577899
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarTibor Goldschwendt <tiborg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#834843}
parent 376b0cf5
...@@ -811,7 +811,11 @@ void PopulateChromeWebUIFrameBinders( ...@@ -811,7 +811,11 @@ void PopulateChromeWebUIFrameBinders(
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
RegisterWebUIControllerInterfaceBinder<media::mojom::KaleidoscopeDataProvider, RegisterWebUIControllerInterfaceBinder<media::mojom::KaleidoscopeDataProvider,
KaleidoscopeUI, NewTabPageUI>(map); KaleidoscopeUI>(map);
RegisterWebUIControllerInterfaceBinder<
media::mojom::KaleidoscopeNTPDataProvider, NewTabPageUI>(map);
RegisterWebUIControllerInterfaceBinder< RegisterWebUIControllerInterfaceBinder<
media::mojom::KaleidoscopeIdentityManager, KaleidoscopeUI, NewTabPageUI>( media::mojom::KaleidoscopeIdentityManager, KaleidoscopeUI, NewTabPageUI>(
map); map);
......
...@@ -63,11 +63,27 @@ base::Optional<media_feeds::mojom::MediaFeedItemType> GetFeedItemTypeForTab( ...@@ -63,11 +63,27 @@ base::Optional<media_feeds::mojom::MediaFeedItemType> GetFeedItemTypeForTab(
KaleidoscopeDataProviderImpl::KaleidoscopeDataProviderImpl( KaleidoscopeDataProviderImpl::KaleidoscopeDataProviderImpl(
mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> receiver, mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> receiver,
Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder)
: KaleidoscopeDataProviderImpl(profile, metrics_recorder) {
receiver_.Bind(std::move(receiver));
}
KaleidoscopeDataProviderImpl::KaleidoscopeDataProviderImpl(
mojo::PendingReceiver<media::mojom::KaleidoscopeNTPDataProvider> receiver,
Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder)
: KaleidoscopeDataProviderImpl(profile, metrics_recorder) {
ntp_receiver_.Bind(std::move(receiver));
}
KaleidoscopeDataProviderImpl::KaleidoscopeDataProviderImpl(
Profile* profile, Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder) KaleidoscopeMetricsRecorder* metrics_recorder)
: profile_(profile), : profile_(profile),
metrics_recorder_(metrics_recorder), metrics_recorder_(metrics_recorder),
receiver_(this, std::move(receiver)) { receiver_(this),
ntp_receiver_(this) {
DCHECK(profile); DCHECK(profile);
identity_manager_ = IdentityManagerFactory::GetForProfile(profile_); identity_manager_ = IdentityManagerFactory::GetForProfile(profile_);
...@@ -164,7 +180,7 @@ void KaleidoscopeDataProviderImpl::GetHighWatchTimeOrigins( ...@@ -164,7 +180,7 @@ void KaleidoscopeDataProviderImpl::GetHighWatchTimeOrigins(
void KaleidoscopeDataProviderImpl::GetTopMediaFeeds( void KaleidoscopeDataProviderImpl::GetTopMediaFeeds(
media::mojom::KaleidoscopeTab tab, media::mojom::KaleidoscopeTab tab,
GetTopMediaFeedsCallback callback) { media::mojom::KaleidoscopeDataProvider::GetTopMediaFeedsCallback callback) {
GetMediaHistoryService()->GetMediaFeeds( GetMediaHistoryService()->GetMediaFeeds(
media_history::MediaHistoryKeyedService::GetMediaFeedsRequest:: media_history::MediaHistoryKeyedService::GetMediaFeedsRequest::
CreateTopFeedsForDisplay( CreateTopFeedsForDisplay(
...@@ -178,7 +194,8 @@ void KaleidoscopeDataProviderImpl::GetTopMediaFeeds( ...@@ -178,7 +194,8 @@ void KaleidoscopeDataProviderImpl::GetTopMediaFeeds(
void KaleidoscopeDataProviderImpl::GetMediaFeedContents( void KaleidoscopeDataProviderImpl::GetMediaFeedContents(
int64_t feed_id, int64_t feed_id,
media::mojom::KaleidoscopeTab tab, media::mojom::KaleidoscopeTab tab,
GetMediaFeedContentsCallback callback) { media::mojom::KaleidoscopeDataProvider::GetMediaFeedContentsCallback
callback) {
GetMediaHistoryService()->GetMediaFeedItems( GetMediaHistoryService()->GetMediaFeedItems(
media_history::MediaHistoryKeyedService::GetMediaFeedItemsRequest:: media_history::MediaHistoryKeyedService::GetMediaFeedItemsRequest::
CreateItemsForFeed( CreateItemsForFeed(
...@@ -193,7 +210,8 @@ void KaleidoscopeDataProviderImpl::GetMediaFeedContents( ...@@ -193,7 +210,8 @@ void KaleidoscopeDataProviderImpl::GetMediaFeedContents(
void KaleidoscopeDataProviderImpl::GetContinueWatchingMediaFeedItems( void KaleidoscopeDataProviderImpl::GetContinueWatchingMediaFeedItems(
media::mojom::KaleidoscopeTab tab, media::mojom::KaleidoscopeTab tab,
GetContinueWatchingMediaFeedItemsCallback callback) { media::mojom::KaleidoscopeDataProvider::
GetContinueWatchingMediaFeedItemsCallback callback) {
GetMediaHistoryService()->GetMediaFeedItems( GetMediaHistoryService()->GetMediaFeedItems(
media_history::MediaHistoryKeyedService::GetMediaFeedItemsRequest:: media_history::MediaHistoryKeyedService::GetMediaFeedItemsRequest::
CreateItemsForContinueWatching( CreateItemsForContinueWatching(
...@@ -227,7 +245,7 @@ void KaleidoscopeDataProviderImpl::GetCollections( ...@@ -227,7 +245,7 @@ void KaleidoscopeDataProviderImpl::GetCollections(
} }
void KaleidoscopeDataProviderImpl::GetSignedOutProviders( void KaleidoscopeDataProviderImpl::GetSignedOutProviders(
GetSignedOutProvidersCallback cb) { media::mojom::KaleidoscopeDataProvider::GetSignedOutProvidersCallback cb) {
DCHECK(!identity_manager_->HasPrimaryAccount( DCHECK(!identity_manager_->HasPrimaryAccount(
signin::ConsentLevel::kNotRequired)); signin::ConsentLevel::kNotRequired));
...@@ -313,7 +331,8 @@ void KaleidoscopeDataProviderImpl::OnGotMediaFeedContents( ...@@ -313,7 +331,8 @@ void KaleidoscopeDataProviderImpl::OnGotMediaFeedContents(
} }
void KaleidoscopeDataProviderImpl::OnGotContinueWatchingMediaFeedItems( void KaleidoscopeDataProviderImpl::OnGotContinueWatchingMediaFeedItems(
GetContinueWatchingMediaFeedItemsCallback callback, media::mojom::KaleidoscopeDataProvider::
GetContinueWatchingMediaFeedItemsCallback callback,
std::vector<media_feeds::mojom::MediaFeedItemPtr> items) { std::vector<media_feeds::mojom::MediaFeedItemPtr> items) {
std::set<int64_t> ids; std::set<int64_t> ids;
for (auto& item : items) for (auto& item : items)
......
...@@ -26,12 +26,17 @@ class KaleidoscopeMetricsRecorder; ...@@ -26,12 +26,17 @@ class KaleidoscopeMetricsRecorder;
class Profile; class Profile;
class KaleidoscopeDataProviderImpl class KaleidoscopeDataProviderImpl
: public media::mojom::KaleidoscopeDataProvider { : public media::mojom::KaleidoscopeDataProvider,
public media::mojom::KaleidoscopeNTPDataProvider {
public: public:
KaleidoscopeDataProviderImpl( KaleidoscopeDataProviderImpl(
mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> receiver, mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> receiver,
Profile* profile, Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder); KaleidoscopeMetricsRecorder* metrics_recorder);
KaleidoscopeDataProviderImpl(
mojo::PendingReceiver<media::mojom::KaleidoscopeNTPDataProvider> receiver,
Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder);
KaleidoscopeDataProviderImpl(const KaleidoscopeDataProviderImpl&) = delete; KaleidoscopeDataProviderImpl(const KaleidoscopeDataProviderImpl&) = delete;
KaleidoscopeDataProviderImpl& operator=(const KaleidoscopeDataProviderImpl&) = KaleidoscopeDataProviderImpl& operator=(const KaleidoscopeDataProviderImpl&) =
...@@ -39,14 +44,19 @@ class KaleidoscopeDataProviderImpl ...@@ -39,14 +44,19 @@ class KaleidoscopeDataProviderImpl
~KaleidoscopeDataProviderImpl() override; ~KaleidoscopeDataProviderImpl() override;
// media::mojom::KaleidoscopeDataProvider implementation. // media::mojom::KaleidoscopeDataProvider implementation.
void GetTopMediaFeeds(media::mojom::KaleidoscopeTab tab, void GetTopMediaFeeds(
GetTopMediaFeedsCallback callback) override; media::mojom::KaleidoscopeTab tab,
void GetMediaFeedContents(int64_t feed_id, media::mojom::KaleidoscopeDataProvider::GetTopMediaFeedsCallback callback)
media::mojom::KaleidoscopeTab tab, override;
GetMediaFeedContentsCallback callback) override; void GetMediaFeedContents(
int64_t feed_id,
media::mojom::KaleidoscopeTab tab,
media::mojom::KaleidoscopeDataProvider::GetMediaFeedContentsCallback
callback) override;
void GetContinueWatchingMediaFeedItems( void GetContinueWatchingMediaFeedItems(
media::mojom::KaleidoscopeTab tab, media::mojom::KaleidoscopeTab tab,
GetContinueWatchingMediaFeedItemsCallback callback) override; media::mojom::KaleidoscopeDataProvider::
GetContinueWatchingMediaFeedItemsCallback callback) override;
void GetShouldShowFirstRunExperience( void GetShouldShowFirstRunExperience(
GetShouldShowFirstRunExperienceCallback cb) override; GetShouldShowFirstRunExperienceCallback cb) override;
void SetFirstRunExperienceStep( void SetFirstRunExperienceStep(
...@@ -64,7 +74,9 @@ class KaleidoscopeDataProviderImpl ...@@ -64,7 +74,9 @@ class KaleidoscopeDataProviderImpl
void GetCollections(media::mojom::CredentialsPtr credentials, void GetCollections(media::mojom::CredentialsPtr credentials,
const std::string& request, const std::string& request,
GetCollectionsCallback cb) override; GetCollectionsCallback cb) override;
void GetSignedOutProviders(GetSignedOutProvidersCallback cb) override; void GetSignedOutProviders(
media::mojom::KaleidoscopeDataProvider::GetSignedOutProvidersCallback cb)
override;
void SetSignedOutProviders( void SetSignedOutProviders(
const std::vector<std::string>& providers) override; const std::vector<std::string>& providers) override;
void RecordTimeTakenToStartWatchHistogram(base::TimeDelta time) override; void RecordTimeTakenToStartWatchHistogram(base::TimeDelta time) override;
...@@ -76,12 +88,16 @@ class KaleidoscopeDataProviderImpl ...@@ -76,12 +88,16 @@ class KaleidoscopeDataProviderImpl
private: private:
media_history::MediaHistoryKeyedService* GetMediaHistoryService(); media_history::MediaHistoryKeyedService* GetMediaHistoryService();
KaleidoscopeDataProviderImpl(Profile* profile,
KaleidoscopeMetricsRecorder* metrics_recorder);
void OnGotMediaFeedContents( void OnGotMediaFeedContents(
GetMediaFeedContentsCallback callback, GetMediaFeedContentsCallback callback,
const int64_t feed_id, const int64_t feed_id,
std::vector<media_feeds::mojom::MediaFeedItemPtr> items); std::vector<media_feeds::mojom::MediaFeedItemPtr> items);
void OnGotContinueWatchingMediaFeedItems( void OnGotContinueWatchingMediaFeedItems(
GetContinueWatchingMediaFeedItemsCallback callback, media::mojom::KaleidoscopeDataProvider::
GetContinueWatchingMediaFeedItemsCallback callback,
std::vector<media_feeds::mojom::MediaFeedItemPtr> items); std::vector<media_feeds::mojom::MediaFeedItemPtr> items);
signin::IdentityManager* identity_manager_; signin::IdentityManager* identity_manager_;
...@@ -92,6 +108,8 @@ class KaleidoscopeDataProviderImpl ...@@ -92,6 +108,8 @@ class KaleidoscopeDataProviderImpl
mojo::Receiver<media::mojom::KaleidoscopeDataProvider> receiver_; mojo::Receiver<media::mojom::KaleidoscopeDataProvider> receiver_;
mojo::Receiver<media::mojom::KaleidoscopeNTPDataProvider> ntp_receiver_;
base::WeakPtrFactory<KaleidoscopeDataProviderImpl> weak_ptr_factory{this}; base::WeakPtrFactory<KaleidoscopeDataProviderImpl> weak_ptr_factory{this};
}; };
......
...@@ -90,12 +90,6 @@ interface KaleidoscopeDataProvider { ...@@ -90,12 +90,6 @@ interface KaleidoscopeDataProvider {
// Will trigger a feedback dialog to be displayed. // Will trigger a feedback dialog to be displayed.
SendFeedback(); SendFeedback();
// Gets the collections from the backend to be displayed. Takes a credential
// instance and a string that contains the request to be sent to the server.
// The request is the GetCollectionsRequest proto here: go/ks-media-proto.
GetCollections(Credentials credentials, string request)
=> (GetCollectionsResponse response);
// Gets a list of stored providers that will be used to filter the // Gets a list of stored providers that will be used to filter the
// recommendations on the server if the user is signed out. They are arbitary // recommendations on the server if the user is signed out. They are arbitary
// strings that are provided by the server, stored locally and then retrieved // strings that are provided by the server, stored locally and then retrieved
...@@ -124,6 +118,29 @@ interface KaleidoscopeDataProvider { ...@@ -124,6 +118,29 @@ interface KaleidoscopeDataProvider {
UpdateFeedUserStatus(int64 feed_id, media_feeds.mojom.FeedUserStatus status); UpdateFeedUserStatus(int64 feed_id, media_feeds.mojom.FeedUserStatus status);
}; };
// Provides data for the Kaleidoscope NTP module.
interface KaleidoscopeNTPDataProvider {
// Returns all the Media Feeds that Kaleidoscope might decide to show.
// Returned feeds will be appropriate for the |tab|.
GetTopMediaFeeds(KaleidoscopeTab tab) => (array<media_feeds.mojom.MediaFeed> feeds);
// Returns all the items from the Media Feeds Store that can be displayed for
// continue watching. Returned items will be appropriate for the |tab|.
GetContinueWatchingMediaFeedItems(KaleidoscopeTab tab) => (array<media_feeds.mojom.MediaFeedItem> items);
// Gets the collections from the backend to be displayed. Takes a credential
// instance and a string that contains the request to be sent to the server.
// The request is the GetCollectionsRequest proto here: go/ks-media-proto.
GetCollections(Credentials credentials, string request)
=> (GetCollectionsResponse response);
// Gets a list of stored providers that will be used to filter the
// recommendations on the server if the user is signed out. They are arbitary
// strings that are provided by the server, stored locally and then retrieved
// when Kaleidoscope is loaded.
GetSignedOutProviders() => (array<string> providers);
};
// Handles identity related tasks. // Handles identity related tasks.
interface KaleidoscopeIdentityManager { interface KaleidoscopeIdentityManager {
// Retrieves the current credentials. // Retrieves the current credentials.
......
...@@ -387,7 +387,7 @@ void NewTabPageUI::BindInterface( ...@@ -387,7 +387,7 @@ void NewTabPageUI::BindInterface(
} }
void NewTabPageUI::BindInterface( void NewTabPageUI::BindInterface(
mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> mojo::PendingReceiver<media::mojom::KaleidoscopeNTPDataProvider>
pending_page_handler) { pending_page_handler) {
kaleidoscope_data_provider_ = std::make_unique<KaleidoscopeDataProviderImpl>( kaleidoscope_data_provider_ = std::make_unique<KaleidoscopeDataProviderImpl>(
std::move(pending_page_handler), profile_, nullptr); std::move(pending_page_handler), profile_, nullptr);
......
...@@ -76,7 +76,7 @@ class NewTabPageUI ...@@ -76,7 +76,7 @@ class NewTabPageUI
// media::mojom::KaleidoscopeNTPDataProvider mojo interface passing the // media::mojom::KaleidoscopeNTPDataProvider mojo interface passing the
// pending receiver that will be internally bound. // pending receiver that will be internally bound.
void BindInterface( void BindInterface(
mojo::PendingReceiver<media::mojom::KaleidoscopeDataProvider> mojo::PendingReceiver<media::mojom::KaleidoscopeNTPDataProvider>
pending_receiver); pending_receiver);
// Instantiates the implementor of the // Instantiates the implementor of the
......
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