Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: third_party/WebKit/Source/modules/mediasession/MediaSession.cpp

Issue 2367393002: Migrating MediaSession messages to mojo (Closed)
Patch Set: blink typemap (need to revert blink typemap, only need content/ reivew) Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/mediasession/MediaSession.h" 5 #include "modules/mediasession/MediaSession.h"
6 6
7 #include "bindings/core/v8/CallbackPromiseAdapter.h" 7 #include "bindings/core/v8/CallbackPromiseAdapter.h"
8 #include "bindings/core/v8/ScriptPromiseResolver.h" 8 #include "bindings/core/v8/ScriptPromiseResolver.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "core/dom/DOMException.h" 10 #include "core/dom/DOMException.h"
11 #include "core/dom/ExceptionCode.h" 11 #include "core/dom/ExceptionCode.h"
12 #include "core/frame/LocalDOMWindow.h" 12 #include "core/frame/LocalDOMWindow.h"
13 #include "core/frame/LocalFrame.h" 13 #include "core/frame/LocalFrame.h"
14 #include "core/loader/FrameLoaderClient.h" 14 #include "core/loader/FrameLoaderClient.h"
15 #include "modules/mediasession/MediaArtwork.h"
15 #include "modules/mediasession/MediaMetadata.h" 16 #include "modules/mediasession/MediaMetadata.h"
16 #include "modules/mediasession/MediaSessionError.h" 17 #include "modules/mediasession/MediaMetadataSanitizer.h"
18 #include "public/platform/InterfaceProvider.h"
19 #include "public/platform/WebIconSizesParser.h"
17 #include <memory> 20 #include <memory>
18 21
19 namespace blink { 22 namespace blink {
20 23
21 MediaSession::MediaSession(std::unique_ptr<WebMediaSession> webMediaSession) 24 MediaSession::MediaSession() = default;
22 : m_webMediaSession(std::move(webMediaSession)) { 25
23 DCHECK(m_webMediaSession); 26 MediaSession* MediaSession::create() {
27 return new MediaSession();
24 } 28 }
25 29
26 MediaSession* MediaSession::create(ExecutionContext* context, 30 void MediaSession::setMetadata(ScriptState* scriptState,
27 ExceptionState& exceptionState) { 31 MediaMetadata* metadata) {
28 Document* document = toDocument(context); 32 if (getService(scriptState)) {
29 LocalFrame* frame = document->frame(); 33 getService(scriptState)
30 FrameLoaderClient* client = frame->loader().client(); 34 ->SetMetadata(
31 std::unique_ptr<WebMediaSession> webMediaSession = 35 MediaMetadataSanitizer::sanitizeAndConvertToMojo(metadata));
32 client->createWebMediaSession();
33 if (!webMediaSession) {
34 exceptionState.throwDOMException(NotSupportedError,
35 "Missing platform implementation.");
36 return nullptr;
37 }
38 return new MediaSession(std::move(webMediaSession));
39 }
40
41 ScriptPromise MediaSession::activate(ScriptState* scriptState) {
42 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
43 ScriptPromise promise = resolver->promise();
44
45 m_webMediaSession->activate(
46 new CallbackPromiseAdapter<void, MediaSessionError>(resolver));
47 return promise;
48 }
49
50 ScriptPromise MediaSession::deactivate(ScriptState* scriptState) {
51 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
52 ScriptPromise promise = resolver->promise();
53
54 m_webMediaSession->deactivate(
55 new CallbackPromiseAdapter<void, void>(resolver));
56 return promise;
57 }
58
59 void MediaSession::setMetadata(MediaMetadata* metadata) {
60 m_metadata = metadata;
61 if (metadata) {
62 WebMediaMetadata webMetadata = (WebMediaMetadata)*metadata;
63 m_webMediaSession->setMetadata(&webMetadata);
64 } else {
65 m_webMediaSession->setMetadata(nullptr);
66 } 36 }
67 } 37 }
68 38
69 MediaMetadata* MediaSession::metadata() const { 39 MediaMetadata* MediaSession::metadata(ScriptState*) const {
70 return m_metadata; 40 return m_metadata;
71 } 41 }
72 42
43 mojom::blink::MediaSession* MediaSession::getService(ScriptState* scriptState) {
44 if (!m_service) {
45 InterfaceProvider* interfaceProvider = nullptr;
46 DCHECK(scriptState->getExecutionContext()->isDocument())
47 << "MediaSession::getService() is only available from a frame";
48 Document* document = toDocument(scriptState->getExecutionContext());
49 if (document->frame())
50 interfaceProvider = document->frame()->interfaceProvider();
51
52 if (interfaceProvider)
53 interfaceProvider->getInterface(mojo::GetProxy(&m_service));
54 }
55 return m_service.get();
56 }
57
73 DEFINE_TRACE(MediaSession) { 58 DEFINE_TRACE(MediaSession) {
74 visitor->trace(m_metadata); 59 visitor->trace(m_metadata);
75 } 60 }
76 61
77 } // namespace blink 62 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698