Chromium Code Reviews| 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); |
| + 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) { |
|
xhwang
2016/09/30 23:24:58
Have you considered to use typemapping so that the
Zhiqiang Zhang (Slow)
2016/10/03 14:31:13
Done on the chromium side. The blink-side typemapi
|
| + 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 |