Commit 64f1994c authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Merge NavigationMediaSession and MediaSession

Bug: 1147612
Change-Id: I52ce20f6446c813bd7f51ba8f051930590a0add4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2529702
Auto-Submit: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarBecca Hughes <beccahughes@chromium.org>
Commit-Queue: Nate Chapin <japhet@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827400}
parent 80ca6114
...@@ -12,8 +12,6 @@ blink_modules_sources("mediasession") { ...@@ -12,8 +12,6 @@ blink_modules_sources("mediasession") {
"media_metadata_sanitizer.h", "media_metadata_sanitizer.h",
"media_session.cc", "media_session.cc",
"media_session.h", "media_session.h",
"navigator_media_session.cc",
"navigator_media_session.h",
"type_converters.cc", "type_converters.cc",
"type_converters.h", "type_converters.h",
] ]
......
...@@ -13,9 +13,9 @@ ...@@ -13,9 +13,9 @@
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_action_details.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_action_details.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_action_handler.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_action_handler.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_seek_to_action_details.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_media_session_seek_to_action_details.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/core/frame/web_feature.h" #include "third_party/blink/renderer/core/frame/web_feature.h"
#include "third_party/blink/renderer/modules/mediasession/media_metadata.h" #include "third_party/blink/renderer/modules/mediasession/media_metadata.h"
#include "third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h" #include "third_party/blink/renderer/modules/mediasession/media_metadata_sanitizer.h"
...@@ -125,11 +125,23 @@ mojom::blink::MediaSessionPlaybackState StringToMediaSessionPlaybackState( ...@@ -125,11 +125,23 @@ mojom::blink::MediaSessionPlaybackState StringToMediaSessionPlaybackState(
} // anonymous namespace } // anonymous namespace
MediaSession::MediaSession(ExecutionContext* execution_context) const char MediaSession::kSupplementName[] = "MediaSession";
: ExecutionContextClient(execution_context),
MediaSession* MediaSession::mediaSession(Navigator& navigator) {
MediaSession* supplement =
Supplement<Navigator>::From<MediaSession>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<MediaSession>(navigator);
ProvideTo(navigator, supplement);
}
return supplement;
}
MediaSession::MediaSession(Navigator& navigator)
: Supplement<Navigator>(navigator),
clock_(base::DefaultTickClock::GetInstance()), clock_(base::DefaultTickClock::GetInstance()),
playback_state_(mojom::blink::MediaSessionPlaybackState::NONE), playback_state_(mojom::blink::MediaSessionPlaybackState::NONE),
client_receiver_(this, execution_context) {} client_receiver_(this, navigator.DomWindow()) {}
void MediaSession::setPlaybackState(const String& playback_state) { void MediaSession::setPlaybackState(const String& playback_state) {
playback_state_ = StringToMediaSessionPlaybackState(playback_state); playback_state_ = StringToMediaSessionPlaybackState(playback_state);
...@@ -166,21 +178,22 @@ void MediaSession::OnMetadataChanged() { ...@@ -166,21 +178,22 @@ void MediaSession::OnMetadataChanged() {
return; return;
service->SetMetadata(MediaMetadataSanitizer::SanitizeAndConvertToMojo( service->SetMetadata(MediaMetadataSanitizer::SanitizeAndConvertToMojo(
metadata_, GetExecutionContext())); metadata_, GetSupplementable()->DomWindow()));
} }
void MediaSession::setActionHandler(const String& action, void MediaSession::setActionHandler(const String& action,
V8MediaSessionActionHandler* handler, V8MediaSessionActionHandler* handler,
ExceptionState& exception_state) { ExceptionState& exception_state) {
if (action == "skipad") { if (action == "skipad") {
if (!RuntimeEnabledFeatures::SkipAdEnabled(GetExecutionContext())) { LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (!RuntimeEnabledFeatures::SkipAdEnabled(window)) {
exception_state.ThrowTypeError( exception_state.ThrowTypeError(
"The provided value 'skipad' is not a valid enum " "The provided value 'skipad' is not a valid enum "
"value of type MediaSessionAction."); "value of type MediaSessionAction.");
return; return;
} }
UseCounter::Count(GetExecutionContext(), WebFeature::kMediaSessionSkipAd); UseCounter::Count(window, WebFeature::kMediaSessionSkipAd);
} }
if (handler) { if (handler) {
...@@ -324,13 +337,13 @@ void MediaSession::RecalculatePositionState(bool was_set) { ...@@ -324,13 +337,13 @@ void MediaSession::RecalculatePositionState(bool was_set) {
mojom::blink::MediaSessionService* MediaSession::GetService() { mojom::blink::MediaSessionService* MediaSession::GetService() {
if (service_) if (service_)
return service_.get(); return service_.get();
if (!GetExecutionContext()) LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (!window)
return nullptr; return nullptr;
// See https://bit.ly/2S0zRAS for task types. // See https://bit.ly/2S0zRAS for task types.
auto task_runner = auto task_runner = window->GetTaskRunner(TaskType::kMiscPlatformAPI);
GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI); window->GetBrowserInterfaceBroker().GetInterface(
GetExecutionContext()->GetBrowserInterfaceBroker().GetInterface(
service_.BindNewPipeAndPassReceiver()); service_.BindNewPipeAndPassReceiver());
if (service_.get()) if (service_.get())
service_->SetClient(client_receiver_.BindNewPipeAndPassRemote(task_runner)); service_->SetClient(client_receiver_.BindNewPipeAndPassRemote(task_runner));
...@@ -341,10 +354,11 @@ mojom::blink::MediaSessionService* MediaSession::GetService() { ...@@ -341,10 +354,11 @@ mojom::blink::MediaSessionService* MediaSession::GetService() {
void MediaSession::DidReceiveAction( void MediaSession::DidReceiveAction(
media_session::mojom::blink::MediaSessionAction action, media_session::mojom::blink::MediaSessionAction action,
mojom::blink::MediaSessionActionDetailsPtr details) { mojom::blink::MediaSessionActionDetailsPtr details) {
if (!GetExecutionContext()) LocalDOMWindow* window = GetSupplementable()->DomWindow();
if (!window)
return; return;
LocalFrame::NotifyUserActivation( LocalFrame::NotifyUserActivation(
To<LocalDOMWindow>(GetExecutionContext())->GetFrame(), window->GetFrame(),
mojom::blink::UserActivationNotificationType::kInteraction); mojom::blink::UserActivationNotificationType::kInteraction);
auto& name = MojomActionToActionName(action); auto& name = MojomActionToActionName(action);
...@@ -366,7 +380,7 @@ void MediaSession::Trace(Visitor* visitor) const { ...@@ -366,7 +380,7 @@ void MediaSession::Trace(Visitor* visitor) const {
visitor->Trace(metadata_); visitor->Trace(metadata_);
visitor->Trace(action_handlers_); visitor->Trace(action_handlers_);
ScriptWrappable::Trace(visitor); ScriptWrappable::Trace(visitor);
ExecutionContextClient::Trace(visitor); Supplement<Navigator>::Trace(visitor);
} }
} // namespace blink } // namespace blink
...@@ -8,12 +8,12 @@ ...@@ -8,12 +8,12 @@
#include <memory> #include <memory>
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/mediasession/media_session.mojom-blink.h" #include "third_party/blink/public/mojom/mediasession/media_session.mojom-blink.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h" #include "third_party/blink/renderer/platform/mojo/heap_mojo_wrapper_mode.h"
#include "third_party/blink/renderer/platform/supplementable.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace base { namespace base {
...@@ -22,20 +22,22 @@ class TickClock; ...@@ -22,20 +22,22 @@ class TickClock;
namespace blink { namespace blink {
class ExecutionContext;
class ExceptionState; class ExceptionState;
class MediaMetadata; class MediaMetadata;
class MediaPositionState; class MediaPositionState;
class Navigator;
class V8MediaSessionActionHandler; class V8MediaSessionActionHandler;
class MODULES_EXPORT MediaSession final class MODULES_EXPORT MediaSession final
: public ScriptWrappable, : public ScriptWrappable,
public ExecutionContextClient, public Supplement<Navigator>,
public blink::mojom::blink::MediaSessionClient { public blink::mojom::blink::MediaSessionClient {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
public: public:
explicit MediaSession(ExecutionContext*); static const char kSupplementName[];
static MediaSession* mediaSession(Navigator&);
explicit MediaSession(Navigator&);
void setPlaybackState(const String&); void setPlaybackState(const String&);
String playbackState(); String playbackState();
...@@ -74,7 +76,7 @@ class MODULES_EXPORT MediaSession final ...@@ -74,7 +76,7 @@ class MODULES_EXPORT MediaSession final
void DidReceiveAction(media_session::mojom::blink::MediaSessionAction, void DidReceiveAction(media_session::mojom::blink::MediaSessionAction,
mojom::blink::MediaSessionActionDetailsPtr) override; mojom::blink::MediaSessionActionDetailsPtr) override;
// Returns null when the ExecutionContext is not document. // Returns null if the associated window is detached.
mojom::blink::MediaSessionService* GetService(); mojom::blink::MediaSessionService* GetService();
const base::TickClock* clock_ = nullptr; const base::TickClock* clock_ = nullptr;
......
...@@ -56,7 +56,8 @@ class MediaSessionTest : public PageTestBase { ...@@ -56,7 +56,8 @@ class MediaSessionTest : public PageTestBase {
mock_service_ = std::make_unique<MockMediaSessionService>(); mock_service_ = std::make_unique<MockMediaSessionService>();
media_session_ = MakeGarbageCollected<MediaSession>(GetFrame().DomWindow()); media_session_ =
MediaSession::mediaSession(*GetFrame().DomWindow()->navigator());
media_session_->service_ = mock_service_->CreateRemoteAndBind(); media_session_->service_ = mock_service_->CreateRemoteAndBind();
media_session_->clock_ = &test_clock_; media_session_->clock_ = &test_clock_;
} }
......
// 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 "third_party/blink/renderer/modules/mediasession/navigator_media_session.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/modules/mediasession/media_session.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
NavigatorMediaSession::NavigatorMediaSession(Navigator& navigator)
: Supplement<Navigator>(navigator) {}
void NavigatorMediaSession::Trace(Visitor* visitor) const {
visitor->Trace(session_);
Supplement<Navigator>::Trace(visitor);
}
const char NavigatorMediaSession::kSupplementName[] = "NavigatorMediaSession";
NavigatorMediaSession& NavigatorMediaSession::From(Navigator& navigator) {
NavigatorMediaSession* supplement =
Supplement<Navigator>::From<NavigatorMediaSession>(navigator);
if (!supplement) {
supplement = MakeGarbageCollected<NavigatorMediaSession>(navigator);
ProvideTo(navigator, supplement);
}
return *supplement;
}
MediaSession* NavigatorMediaSession::mediaSession(ScriptState* script_state,
Navigator& navigator) {
NavigatorMediaSession& self = NavigatorMediaSession::From(navigator);
if (!self.session_) {
self.session_ = MakeGarbageCollected<MediaSession>(
ExecutionContext::From(script_state));
}
return self.session_.Get();
}
} // namespace blink
// 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_NAVIGATOR_MEDIA_SESSION_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_NAVIGATOR_MEDIA_SESSION_H_
#include "third_party/blink/renderer/core/frame/navigator.h"
#include "third_party/blink/renderer/modules/mediasession/media_session.h"
#include "third_party/blink/renderer/platform/supplementable.h"
namespace blink {
class Navigator;
class ScriptState;
// Provides MediaSession as a supplement of Navigator as an attribute.
class NavigatorMediaSession final
: public GarbageCollected<NavigatorMediaSession>,
public Supplement<Navigator> {
public:
static const char kSupplementName[];
static NavigatorMediaSession& From(Navigator&);
static MediaSession* mediaSession(ScriptState*, Navigator&);
explicit NavigatorMediaSession(Navigator&);
void Trace(Visitor*) const override;
private:
// The MediaSession instance of this Navigator.
Member<MediaSession> session_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIASESSION_NAVIGATOR_MEDIA_SESSION_H_
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
[ [
Exposed=(Window), Exposed=(Window),
ImplementedAs=NavigatorMediaSession, ImplementedAs=MediaSession,
RuntimeEnabled=MediaSession RuntimeEnabled=MediaSession
] partial interface Navigator { ] partial interface Navigator {
[CallWith=ScriptState, SameObject] readonly attribute MediaSession mediaSession; [SameObject] readonly attribute MediaSession mediaSession;
}; };
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