Index: content/browser/media/android/media_session_service_impl.cc |
diff --git a/content/browser/media/android/media_session_service_impl.cc b/content/browser/media/android/media_session_service_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c54bda137f3a7b9adf871535b4924101b7cd2523 |
--- /dev/null |
+++ b/content/browser/media/android/media_session_service_impl.cc |
@@ -0,0 +1,77 @@ |
+// Copyright 2016 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 "content/browser/media/android/media_session_service_impl.h" |
+ |
+#include "base/strings/utf_string_conversions.h" |
+#include "content/browser/media/android/browser_media_session_manager.h" |
+#include "content/browser/media/android/media_web_contents_observer_android.h" |
+#include "content/browser/web_contents/web_contents_impl.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/common/media_metadata.h" |
+ |
+namespace content { |
+ |
+namespace { |
+ |
+MediaMetadata::Artwork ToMediaMetadataIcon( |
+ blink::mojom::MediaMetadataIconPtr mojo_icon) { |
+ DCHECK(mojo_icon); |
+ MediaMetadata::Artwork icon; |
+ icon.src = GURL(mojo_icon->src); |
mlamouri (slow - plz ping)
2016/09/29 10:26:40
Should you sanitize the |mojo_icon|?
Zhiqiang Zhang (Slow)
2016/09/30 19:38:01
Yes, I need to sanitize it. But we are now sending
|
+ icon.type = mojo_icon->type; |
+ icon.sizes = mojo_icon->sizes; |
+ return icon; |
+} |
+ |
+base::Optional<MediaMetadata> ToMediaMetadata( |
+ blink::mojom::MediaMetadataPtr mojo_metadata) { |
+ if (!mojo_metadata) |
+ return base::nullopt; |
+ MediaMetadata metadata; |
+ metadata.title = mojo_metadata->title; |
+ metadata.artist = mojo_metadata->artist; |
+ metadata.album = mojo_metadata->album; |
+ for (auto& mojo_icon : mojo_metadata->artwork) |
+ metadata.artwork.push_back(ToMediaMetadataIcon(std::move(mojo_icon))); |
+ return metadata; |
+} |
+ |
+} // anonymous namespace |
+ |
+MediaSessionServiceImpl::MediaSessionServiceImpl( |
+ RenderFrameHost* render_frame_host) |
+ : render_frame_host_(render_frame_host) {} |
+ |
+MediaSessionServiceImpl::~MediaSessionServiceImpl() = default; |
+ |
+// static |
+void MediaSessionServiceImpl::Create( |
+ RenderFrameHost* render_frame_host, |
+ blink::mojom::MediaSessionServiceRequest request) { |
+ MediaSessionServiceImpl* impl = new MediaSessionServiceImpl( |
+ render_frame_host); |
+ impl->Bind(std::move(request)); |
+} |
+ |
+void MediaSessionServiceImpl::SetMetadata( |
+ blink::mojom::MediaMetadataPtr metadata) { |
+ WebContentsImpl* contents = static_cast<WebContentsImpl*>( |
+ WebContents::FromRenderFrameHost(render_frame_host_)); |
+ DCHECK(contents); |
+ MediaWebContentsObserverAndroid* observer = |
+ static_cast<MediaWebContentsObserverAndroid*>( |
+ contents->media_web_contents_observer()); |
+ observer->GetMediaSessionManager(render_frame_host_) |
+ ->OnSetMetadata(0, ToMediaMetadata(std::move(metadata))); |
+} |
+ |
+void MediaSessionServiceImpl::Bind( |
+ mojo::InterfaceRequest<blink::mojom::MediaSessionService> request) { |
+ binding_.reset(new mojo::Binding<blink::mojom::MediaSessionService>( |
+ this, std::move(request))); |
+} |
+ |
+} // namespace content |