Commit 25308a86 authored by François Beaufort's avatar François Beaufort Committed by Commit Bot

Add Skip Ad Origin Trial

This CL removes the SkipAd media switch feature as the
Picture-in-Picture window will receive events only from blink/.

Intent to Experiment: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/l6sW0G4jzhE

Bug: 910436
Change-Id: I4c41b476691f43d76a8811f8990873c222341e7c
Reviewed-on: https://chromium-review.googlesource.com/c/1452186
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Reviewed-by: default avatarIan Clelland <iclelland@chromium.org>
Cr-Commit-Position: refs/heads/master@{#629946}
parent 23afdc6d
...@@ -1894,9 +1894,9 @@ class MediaSessionPictureInPictureWindowControllerBrowserTest ...@@ -1894,9 +1894,9 @@ class MediaSessionPictureInPictureWindowControllerBrowserTest
void SetUpCommandLine(base::CommandLine* command_line) override { void SetUpCommandLine(base::CommandLine* command_line) override {
PictureInPictureWindowControllerBrowserTest::SetUpCommandLine(command_line); PictureInPictureWindowControllerBrowserTest::SetUpCommandLine(command_line);
command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures, command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
"MediaSession"); "MediaSession,SkipAd");
scoped_feature_list_.InitWithFeatures( scoped_feature_list_.InitWithFeatures(
{media_session::features::kMediaSessionService, media::kSkipAd}, {}); {media_session::features::kMediaSessionService}, {});
} }
private: private:
......
...@@ -647,8 +647,7 @@ void OverlayWindowViews::SetAlwaysHidePlayPauseButton(bool is_visible) { ...@@ -647,8 +647,7 @@ void OverlayWindowViews::SetAlwaysHidePlayPauseButton(bool is_visible) {
} }
void OverlayWindowViews::SetSkipAdButtonVisibility(bool is_visible) { void OverlayWindowViews::SetSkipAdButtonVisibility(bool is_visible) {
if (base::FeatureList::IsEnabled(media::kSkipAd)) show_skip_ad_button_ = is_visible;
show_skip_ad_button_ = is_visible;
} }
void OverlayWindowViews::SetPictureInPictureCustomControls( void OverlayWindowViews::SetPictureInPictureCustomControls(
......
...@@ -226,8 +226,7 @@ void PictureInPictureWindowControllerImpl::SetAlwaysHidePlayPauseButton( ...@@ -226,8 +226,7 @@ void PictureInPictureWindowControllerImpl::SetAlwaysHidePlayPauseButton(
} }
void PictureInPictureWindowControllerImpl::SkipAd() { void PictureInPictureWindowControllerImpl::SkipAd() {
if (base::FeatureList::IsEnabled(media::kSkipAd) && if (media_session_action_skip_ad_handled_)
media_session_action_skip_ad_handled_)
MediaSession::Get(initiator_)->SkipAd(); MediaSession::Get(initiator_)->SkipAd();
} }
......
...@@ -204,9 +204,6 @@ const base::Feature kPictureInPicture { ...@@ -204,9 +204,6 @@ const base::Feature kPictureInPicture {
#endif #endif
}; };
// Show Skip Ad button in Picture-in-Picture window.
const base::Feature kSkipAd{"SkipAd", base::FEATURE_DISABLED_BY_DEFAULT};
// Only decode preload=metadata elements upon visibility? // Only decode preload=metadata elements upon visibility?
const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad", const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
base::FEATURE_DISABLED_BY_DEFAULT}; base::FEATURE_DISABLED_BY_DEFAULT};
......
...@@ -130,7 +130,6 @@ MEDIA_EXPORT extern const base::Feature kRecordMediaEngagementScores; ...@@ -130,7 +130,6 @@ MEDIA_EXPORT extern const base::Feature kRecordMediaEngagementScores;
MEDIA_EXPORT extern const base::Feature kRecordWebAudioEngagement; MEDIA_EXPORT extern const base::Feature kRecordWebAudioEngagement;
MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo; MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo;
MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough; MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough;
MEDIA_EXPORT extern const base::Feature kSkipAd;
MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay; MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay;
MEDIA_EXPORT extern const base::Feature kUseAndroidOverlay; MEDIA_EXPORT extern const base::Feature kUseAndroidOverlay;
MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayAggressively; MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayAggressively;
......
...@@ -2220,6 +2220,7 @@ enum WebFeature { ...@@ -2220,6 +2220,7 @@ enum WebFeature {
kV8RemotePlayback_WatchAvailability_Method = 2780, kV8RemotePlayback_WatchAvailability_Method = 2780,
kV8RemotePlayback_Prompt_Method = 2781, kV8RemotePlayback_Prompt_Method = 2781,
kLayoutJankExplicitlyRequested = 2782, kLayoutJankExplicitlyRequested = 2782,
kMediaSessionSkipAd = 2783,
// Add new features immediately above this line. Don't change assigned // Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots. // numbers of any item, and don't reuse removed slots.
......
...@@ -13,8 +13,11 @@ ...@@ -13,8 +13,11 @@
#include "third_party/blink/renderer/core/dom/user_gesture_indicator.h" #include "third_party/blink/renderer/core/dom/user_gesture_indicator.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/core/execution_context/execution_context.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/use_counter.h"
#include "third_party/blink/renderer/core/origin_trials/origin_trials.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"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
namespace blink { namespace blink {
...@@ -156,7 +159,19 @@ void MediaSession::OnMetadataChanged() { ...@@ -156,7 +159,19 @@ void MediaSession::OnMetadataChanged() {
} }
void MediaSession::setActionHandler(const String& action, void MediaSession::setActionHandler(const String& action,
V8MediaSessionActionHandler* handler) { V8MediaSessionActionHandler* handler,
ExceptionState& exception_state) {
if (action == "skipad") {
if (!origin_trials::SkipAdEnabled(GetExecutionContext())) {
exception_state.ThrowTypeError(
"The provided value 'skipad' is not a valid enum "
"value of type MediaSessionAction.");
return;
}
UseCounter::Count(GetExecutionContext(), WebFeature::kMediaSessionSkipAd);
}
if (handler) { if (handler) {
auto add_result = action_handlers_.Set(action, handler); auto add_result = action_handlers_.Set(action, handler);
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
namespace blink { namespace blink {
class ExecutionContext; class ExecutionContext;
class ExceptionState;
class MediaMetadata; class MediaMetadata;
class V8MediaSessionActionHandler; class V8MediaSessionActionHandler;
...@@ -42,7 +43,9 @@ class MODULES_EXPORT MediaSession final ...@@ -42,7 +43,9 @@ class MODULES_EXPORT MediaSession final
void setMetadata(MediaMetadata*); void setMetadata(MediaMetadata*);
MediaMetadata* metadata() const; MediaMetadata* metadata() const;
void setActionHandler(const String& action, V8MediaSessionActionHandler*); void setActionHandler(const String& action,
V8MediaSessionActionHandler*,
ExceptionState&);
// Called by the MediaMetadata owned by |this| when it has updates. Also used // Called by the MediaMetadata owned by |this| when it has updates. Also used
// internally when a new MediaMetadata object is set. // internally when a new MediaMetadata object is set.
......
...@@ -30,6 +30,6 @@ callback MediaSessionActionHandler = void (); ...@@ -30,6 +30,6 @@ callback MediaSessionActionHandler = void ();
[Measure] attribute MediaMetadata? metadata; [Measure] attribute MediaMetadata? metadata;
[Measure] attribute MediaSessionPlaybackState playbackState; [Measure] attribute MediaSessionPlaybackState playbackState;
[Measure] void setActionHandler(MediaSessionAction action, [Measure, RaisesException] void setActionHandler(MediaSessionAction action,
MediaSessionActionHandler? handler); MediaSessionActionHandler? handler);
}; };
...@@ -1252,6 +1252,12 @@ ...@@ -1252,6 +1252,12 @@
origin_trial_feature_name: "SignatureBasedIntegrity", origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental", status: "experimental",
}, },
{
name: "SkipAd",
depends_on: ["MediaSession"],
origin_trial_feature_name: "SkipAd",
status: "experimental",
},
{ {
name: "SmoothScrollJSIntervention", name: "SmoothScrollJSIntervention",
status: "stable", status: "stable",
......
<!DOCTYPE html>
<meta charset="utf-8">
<title>SkipAd - media session action exposed by origin trial</title>
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../resources/origin-trials-helper.js"></script>
<script>
// Can only run this test if SkipAd is not enabled via a Chrome flag.
// That is only the case when running this in a virtual test suite (by default,
// runtime enabled features are on for layout tests).
// To run in virtual test suite:
// tools/run_web_tests.py virtual/origin-trials-runtimeflags-disabled/http/tests/origin_trials/webexposed
if (!self.internals.runtimeFlags.skipAdEnabled) {
test(t => {
assert_throws(new TypeError(), function() {
navigator.mediaSession.setActionHandler('skipad', function() {});
});
assert_throws(new TypeError(), function() {
navigator.mediaSession.setActionHandler('skipad', null);
});
}, 'skipad media session action in Origin-Trial disabled document.');
}
// generated with command
// tools/origin_trials/generate_token.py http://127.0.0.1:8000 SkipAd --expire-timestamp=2000000000
const token = 'AnO+YFdm66rVdQ2ZEckocTP2NIsSxSK8BqyMlgIO/sCbXb484ga4DdbgLOn5z52n6WE9HxpKiB9XI97zDfTGvQoAAABOeyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiU2tpcEFkIiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9';
OriginTrialsHelper.add_token(token);
test(t => {
navigator.mediaSession.setActionHandler('skipad', function() {});
navigator.mediaSession.setActionHandler('skipad', null);
}, 'skipad media session action in Origin-Trial enabled document.');
</script>
...@@ -21523,6 +21523,7 @@ Called by update_net_error_codes.py.--> ...@@ -21523,6 +21523,7 @@ Called by update_net_error_codes.py.-->
<int value="2780" label="V8RemotePlayback_WatchAvailability_Method"/> <int value="2780" label="V8RemotePlayback_WatchAvailability_Method"/>
<int value="2781" label="V8RemotePlayback_Prompt_Method"/> <int value="2781" label="V8RemotePlayback_Prompt_Method"/>
<int value="2782" label="LayoutJankExplicitlyRequested"/> <int value="2782" label="LayoutJankExplicitlyRequested"/>
<int value="2783" label="MediaSessionSkipAd"/>
</enum> </enum>
<enum name="FeaturePolicyFeature"> <enum name="FeaturePolicyFeature">
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