0

[Media Session] [3/4] Move Metadata to service

This CL moves any existing uses of content::MediaMetadata
to the new media_session::MediaMetadata.

BUG=875004

Change-Id: If4b2f889ffb2264daa2bc2f5d9403e9e18586856
Reviewed-on: https://chromium-review.googlesource.com/c/1241572
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Reviewed-by: Ted Choc <tedchoc@chromium.org>
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612704}
This commit is contained in:
Becca Hughes
2018-11-30 18:26:51 +00:00
committed by Commit Bot
parent b6e2cb9b36
commit 11e0d834bb
19 changed files with 67 additions and 64 deletions

@ -14,11 +14,9 @@
#include "base/trace_event/trace_event.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/android/media_metadata_android.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/common/media_metadata.h"
#include "jni/WebContentsObserverProxy_jni.h"
using base::android::AttachCurrentThread;

@ -7,7 +7,7 @@
#include <algorithm>
#include <string>
#include "content/public/common/media_metadata.h"
#include "services/media_session/public/cpp/media_metadata.h"
namespace content {
@ -42,7 +42,8 @@ bool CheckMediaImageSrcSanity(const GURL& src) {
return true;
}
bool CheckMediaImageSanity(const MediaMetadata::MediaImage& image) {
bool CheckMediaImageSanity(
const media_session::MediaMetadata::MediaImage& image) {
if (!CheckMediaImageSrcSanity(image.src))
return false;
if (image.type.size() > kMaxMediaImageTypeLength)
@ -54,9 +55,9 @@ bool CheckMediaImageSanity(const MediaMetadata::MediaImage& image) {
}
// Sanitize MediaImage. The method should not be called if |image.src| is bad.
MediaMetadata::MediaImage SanitizeMediaImage(
const MediaMetadata::MediaImage& image) {
MediaMetadata::MediaImage sanitized_image;
media_session::MediaMetadata::MediaImage SanitizeMediaImage(
const media_session::MediaMetadata::MediaImage& image) {
media_session::MediaMetadata::MediaImage sanitized_image;
sanitized_image.src = image.src;
sanitized_image.type = image.type.substr(0, kMaxMediaImageTypeLength);
@ -71,7 +72,8 @@ MediaMetadata::MediaImage SanitizeMediaImage(
} // anonymous namespace
bool MediaMetadataSanitizer::CheckSanity(const MediaMetadata& metadata) {
bool MediaMetadataSanitizer::CheckSanity(
const media_session::MediaMetadata& metadata) {
if (metadata.title.size() > kMaxIPCStringLength)
return false;
if (metadata.artist.size() > kMaxIPCStringLength)
@ -89,8 +91,9 @@ bool MediaMetadataSanitizer::CheckSanity(const MediaMetadata& metadata) {
return true;
}
MediaMetadata MediaMetadataSanitizer::Sanitize(const MediaMetadata& metadata) {
MediaMetadata sanitized_metadata;
media_session::MediaMetadata MediaMetadataSanitizer::Sanitize(
const media_session::MediaMetadata& metadata) {
media_session::MediaMetadata sanitized_metadata;
sanitized_metadata.title = metadata.title.substr(0, kMaxIPCStringLength);
sanitized_metadata.artist = metadata.artist.substr(0, kMaxIPCStringLength);

@ -5,17 +5,20 @@
#ifndef CONTENT_BROWSER_MEDIA_SESSION_MEDIA_METADATA_SANITIZER_H_
#define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_METADATA_SANITIZER_H_
namespace content {
namespace media_session {
struct MediaMetadata;
} // namespace media_session
namespace content {
class MediaMetadataSanitizer {
public:
// Check the sanity of |metadata|.
static bool CheckSanity(const MediaMetadata& metadata);
static bool CheckSanity(const media_session::MediaMetadata& metadata);
// Sanitizes |metadata| and return the result.
static MediaMetadata Sanitize(const MediaMetadata& metadata);
static media_session::MediaMetadata Sanitize(
const media_session::MediaMetadata& metadata);
};
} // namespace content

@ -9,7 +9,6 @@
#include "content/browser/media/session/media_session_impl.h"
#include "content/browser/web_contents/web_contents_android.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/android/media_metadata_android.h"
#include "content/public/browser/media_session.h"
#include "jni/MediaSessionImpl_jni.h"
#include "services/media_session/public/mojom/audio_focus.mojom.h"
@ -82,7 +81,7 @@ void MediaSessionAndroid::MediaSessionStateChanged(bool is_controllable,
}
void MediaSessionAndroid::MediaSessionMetadataChanged(
const base::Optional<MediaMetadata>& metadata) {
const base::Optional<media_session::MediaMetadata>& metadata) {
ScopedJavaLocalRef<jobject> j_local_session = GetJavaObject();
if (j_local_session.is_null())
return;
@ -95,7 +94,7 @@ void MediaSessionAndroid::MediaSessionMetadataChanged(
ScopedJavaLocalRef<jobject> j_metadata;
if (metadata.has_value())
j_metadata = MediaMetadataAndroid::CreateJavaObject(env, metadata.value());
j_metadata = metadata.value().CreateJavaObject(env);
Java_MediaSessionImpl_mediaSessionMetadataChanged(env, j_local_session,
j_metadata);
}

@ -36,7 +36,7 @@ class MediaSessionAndroid final : public MediaSessionObserver {
void MediaSessionStateChanged(bool is_controllable,
bool is_suspended) override;
void MediaSessionMetadataChanged(
const base::Optional<MediaMetadata>& metadata) override;
const base::Optional<media_session::MediaMetadata>& metadata) override;
void MediaSessionActionsChanged(
const std::set<media_session::mojom::MediaSessionAction>& actions)
override;

@ -208,7 +208,7 @@ void MediaSessionImpl::NotifyAddedObserver(MediaSessionObserver* observer) {
}
void MediaSessionImpl::NotifyMediaSessionMetadataChange(
const base::Optional<MediaMetadata>& metadata) {
const base::Optional<media_session::MediaMetadata>& metadata) {
for (auto& observer : observers_)
observer.MediaSessionMetadataChanged(metadata);
}

@ -22,7 +22,6 @@
#include "content/public/browser/media_session_observer.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "content/public/common/media_metadata.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/interface_ptr_set.h"
@ -38,6 +37,10 @@ namespace media {
enum class MediaContentType;
} // namespace media
namespace media_session {
struct MediaMetadata;
} // namespace media_session
namespace content {
class AudioFocusManagerTest;
@ -89,7 +92,7 @@ class MediaSessionImpl : public MediaSession,
#endif // defined(OS_ANDROID)
void NotifyMediaSessionMetadataChange(
const base::Optional<MediaMetadata>& metadata);
const base::Optional<media_session::MediaMetadata>& metadata);
void NotifyMediaSessionActionsChange(
const std::set<media_session::mojom::MediaSessionAction>& actions);

@ -1714,7 +1714,7 @@ IN_PROC_BROWSER_TEST_P(MediaSessionImplParamBrowserTest,
// Set up the service and information.
EnsureMediaSessionService();
content::MediaMetadata metadata;
media_session::MediaMetadata metadata;
metadata.title = base::ASCIIToUTF16("title");
metadata.artist = base::ASCIIToUTF16("artist");
metadata.album = base::ASCIIToUTF16("album");

@ -16,6 +16,7 @@
#include "content/test/test_render_view_host.h"
#include "content/test/test_web_contents.h"
#include "media/base/media_content_type.h"
#include "services/media_session/public/cpp/media_metadata.h"
#include "services/media_session/public/mojom/constants.mojom.h"
#include "third_party/blink/public/platform/modules/mediasession/media_session.mojom.h"
@ -271,14 +272,14 @@ TEST_F(MediaSessionImplServiceRoutingTest,
CreateServiceForFrame(main_frame_);
services_[main_frame_]->SetMetadata(MediaMetadata());
services_[main_frame_]->SetMetadata(media_session::MediaMetadata());
services_[main_frame_]->EnableAction(
media_session::mojom::MediaSessionAction::kPlay);
}
TEST_F(MediaSessionImplServiceRoutingTest,
NotifyMetadataAndActionsChangeWhenControllable) {
MediaMetadata expected_metadata;
media_session::MediaMetadata expected_metadata;
expected_metadata.title = base::ASCIIToUTF16("title");
expected_metadata.artist = base::ASCIIToUTF16("artist");
expected_metadata.album = base::ASCIIToUTF16("album");
@ -311,7 +312,7 @@ TEST_F(MediaSessionImplServiceRoutingTest,
TEST_F(MediaSessionImplServiceRoutingTest,
NotifyMetadataAndActionsChangeWhenTurningControllable) {
MediaMetadata expected_metadata;
media_session::MediaMetadata expected_metadata;
expected_metadata.title = base::ASCIIToUTF16("title");
expected_metadata.artist = base::ASCIIToUTF16("artist");
expected_metadata.album = base::ASCIIToUTF16("album");
@ -337,7 +338,7 @@ TEST_F(MediaSessionImplServiceRoutingTest,
TEST_F(MediaSessionImplServiceRoutingTest,
DontNotifyMetadataAndActionsChangeWhenTurningUncontrollable) {
MediaMetadata expected_metadata;
media_session::MediaMetadata expected_metadata;
expected_metadata.title = base::ASCIIToUTF16("title");
expected_metadata.artist = base::ASCIIToUTF16("artist");
expected_metadata.album = base::ASCIIToUTF16("album");

@ -65,7 +65,7 @@ void MediaSessionServiceImpl::SetPlaybackState(
}
void MediaSessionServiceImpl::SetMetadata(
const base::Optional<content::MediaMetadata>& metadata) {
const base::Optional<media_session::MediaMetadata>& metadata) {
// When receiving a MediaMetadata, the browser process can't trust that it is
// coming from a known and secure source. It must be processed accordingly.
if (metadata.has_value() &&

@ -6,10 +6,13 @@
#define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_SERVICE_IMPL_H_
#include "base/optional.h"
#include "content/public/common/media_metadata.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "third_party/blink/public/platform/modules/mediasession/media_session.mojom.h"
namespace media_session {
struct MediaMetadata;
} // namespace media_session
namespace content {
class RenderFrameHost;
@ -31,7 +34,9 @@ class CONTENT_EXPORT MediaSessionServiceImpl
blink::mojom::MediaSessionPlaybackState playback_state() const {
return playback_state_;
}
const base::Optional<MediaMetadata>& metadata() const { return metadata_; }
const base::Optional<media_session::MediaMetadata>& metadata() const {
return metadata_;
}
const std::set<media_session::mojom::MediaSessionAction>& actions() const {
return actions_;
}
@ -42,7 +47,8 @@ class CONTENT_EXPORT MediaSessionServiceImpl
void SetClient(blink::mojom::MediaSessionClientPtr client) override;
void SetPlaybackState(blink::mojom::MediaSessionPlaybackState state) override;
void SetMetadata(const base::Optional<MediaMetadata>& metadata) override;
void SetMetadata(
const base::Optional<media_session::MediaMetadata>& metadata) override;
void EnableAction(media_session::mojom::MediaSessionAction action) override;
void DisableAction(media_session::mojom::MediaSessionAction action) override;
@ -65,7 +71,7 @@ class CONTENT_EXPORT MediaSessionServiceImpl
std::unique_ptr<mojo::Binding<blink::mojom::MediaSessionService>> binding_;
blink::mojom::MediaSessionClientPtr client_;
blink::mojom::MediaSessionPlaybackState playback_state_;
base::Optional<MediaMetadata> metadata_;
base::Optional<media_session::MediaMetadata> metadata_;
std::set<media_session::mojom::MediaSessionAction> actions_;
DISALLOW_COPY_AND_ASSIGN(MediaSessionServiceImpl);

@ -6,6 +6,7 @@
#define CONTENT_BROWSER_MEDIA_SESSION_MOCK_MEDIA_SESSION_OBSERVER_H_
#include "content/public/browser/media_session_observer.h"
#include "services/media_session/public/cpp/media_metadata.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace content {
@ -18,8 +19,9 @@ class MockMediaSessionObserver : public MediaSessionObserver {
MOCK_METHOD0(MediaSessionDestroyed, void());
MOCK_METHOD2(MediaSessionStateChanged,
void(bool is_controllable, bool is_suspended));
MOCK_METHOD1(MediaSessionMetadataChanged,
void(const base::Optional<MediaMetadata>& metadata));
MOCK_METHOD1(
MediaSessionMetadataChanged,
void(const base::Optional<media_session::MediaMetadata>& metadata));
MOCK_METHOD1(
MediaSessionActionsChanged,
void(const std::set<media_session::mojom::MediaSessionAction>& action));

@ -10,7 +10,6 @@
#include "base/macros.h"
#include "base/optional.h"
#include "content/common/content_export.h"
#include "content/public/common/media_metadata.h"
namespace media_session {
namespace mojom {
@ -18,6 +17,10 @@ enum class MediaSessionAction;
} // namespace mojom
} // namespace media_session
namespace media_session {
struct MediaMetadata;
} // namespace media_session
namespace content {
class MediaSession;
@ -40,7 +43,7 @@ class CONTENT_EXPORT MediaSessionObserver {
// Called when the observed MediaSession has changed metadata.
virtual void MediaSessionMetadataChanged(
const base::Optional<MediaMetadata>& metadata) {}
const base::Optional<media_session::MediaMetadata>& metadata) {}
// Called when the media session action list has changed.
virtual void MediaSessionActionsChanged(

@ -60,7 +60,8 @@ struct COMPONENT_EXPORT(MEDIA_SESSION_CPP) MediaMetadata {
#if defined(OS_ANDROID)
// Creates a Java MediaMetadata instance and returns the JNI ref.
base::android::ScopedJavaLocalRef<jobject> CreateJavaObject(JNIEnv* env);
base::android::ScopedJavaLocalRef<jobject> CreateJavaObject(
JNIEnv* env) const;
#endif
// Title associated to the MediaSession.

@ -30,7 +30,7 @@ std::vector<int> GetFlattenedSizeArray(const std::vector<gfx::Size>& sizes) {
} // anonymous namespace
base::android::ScopedJavaLocalRef<jobject> MediaMetadata::CreateJavaObject(
JNIEnv* env) {
JNIEnv* env) const {
ScopedJavaLocalRef<jstring> j_title(
base::android::ConvertUTF16ToJavaString(env, title));
ScopedJavaLocalRef<jstring> j_artist(

@ -15,23 +15,6 @@ enum MediaSessionPlaybackState {
PLAYING,
};
// Album art in MediaMetadata
// Spec: https://wicg.github.io/mediasession/
struct MediaImage {
url.mojom.Url src;
mojo_base.mojom.String16 type;
array<gfx.mojom.Size> sizes;
};
// MediaMetadata
// Spec: https://wicg.github.io/mediasession/
struct MediaMetadata {
mojo_base.mojom.String16 title;
mojo_base.mojom.String16 artist;
mojo_base.mojom.String16 album;
array<MediaImage> artwork;
};
interface MediaSessionClient {
// Notifies the Blink side that a MediaSessionAction has been fired from the
// UI or the platform.
@ -48,7 +31,7 @@ interface MediaSessionService {
// Notifies the browser that the metadata is set, |metadata| will be displayed
// on the UI.
SetMetadata(MediaMetadata? metadata);
SetMetadata(media_session.mojom.MediaMetadata? metadata);
// Notifies the browser that the event handler for |action| has been set,
// browser needs to show a media button in the UI or register listeners to the

@ -1,5 +1,6 @@
include_rules = [
"+mojo/public/cpp/bindings/binding.h",
"+services/media_session/public/mojom",
"-third_party/blink/renderer/modules",
"+third_party/blink/renderer/modules/event_target_modules.h",
"+third_party/blink/renderer/modules/modules_export.h",

@ -59,16 +59,16 @@ bool CheckMediaImageSrcSanity(const KURL& src, ExecutionContext* context) {
// Sanitize MediaImage and do mojo serialization. Returns null when
// |image.src()| is bad.
blink::mojom::blink::MediaImagePtr SanitizeMediaImageAndConvertToMojo(
media_session::mojom::blink::MediaImagePtr SanitizeMediaImageAndConvertToMojo(
const MediaImage* image,
ExecutionContext* context) {
blink::mojom::blink::MediaImagePtr mojo_image;
media_session::mojom::blink::MediaImagePtr mojo_image;
KURL url = KURL(image->src());
if (!CheckMediaImageSrcSanity(url, context))
return mojo_image;
mojo_image = blink::mojom::blink::MediaImage::New();
mojo_image = media_session::mojom::blink::MediaImage::New();
mojo_image->src = url;
mojo_image->type = image->type().Left(kMaxImageTypeLength);
for (const auto& web_size :
@ -87,21 +87,21 @@ blink::mojom::blink::MediaImagePtr SanitizeMediaImageAndConvertToMojo(
} // anonymous namespace
blink::mojom::blink::MediaMetadataPtr
media_session::mojom::blink::MediaMetadataPtr
MediaMetadataSanitizer::SanitizeAndConvertToMojo(const MediaMetadata* metadata,
ExecutionContext* context) {
blink::mojom::blink::MediaMetadataPtr mojo_metadata;
media_session::mojom::blink::MediaMetadataPtr mojo_metadata;
if (!metadata)
return mojo_metadata;
mojo_metadata = blink::mojom::blink::MediaMetadata::New();
mojo_metadata = media_session::mojom::blink::MediaMetadata::New();
mojo_metadata->title = metadata->title().Left(kMaxStringLength);
mojo_metadata->artist = metadata->artist().Left(kMaxStringLength);
mojo_metadata->album = metadata->album().Left(kMaxStringLength);
for (const MediaImage* image : metadata->artwork()) {
blink::mojom::blink::MediaImagePtr mojo_image =
media_session::mojom::blink::MediaImagePtr mojo_image =
SanitizeMediaImageAndConvertToMojo(image, context);
if (!mojo_image.is_null())
mojo_metadata->artwork.push_back(std::move(mojo_image));

@ -5,7 +5,7 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_MEDIA_METADATA_SANITIZER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_MEDIA_METADATA_SANITIZER_H_
#include "third_party/blink/public/platform/modules/mediasession/media_session.mojom-blink.h"
#include "services/media_session/public/mojom/media_session.mojom-blink.h"
namespace blink {
@ -16,7 +16,7 @@ class MediaMetadataSanitizer {
public:
// Produce the sanitized metadata, which will later be sent to the
// MediaSession mojo service.
static blink::mojom::blink::MediaMetadataPtr SanitizeAndConvertToMojo(
static media_session::mojom::blink::MediaMetadataPtr SanitizeAndConvertToMojo(
const MediaMetadata*,
ExecutionContext*);
};