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
void SetUpCommandLine(base::CommandLine* command_line) override {
PictureInPictureWindowControllerBrowserTest::SetUpCommandLine(command_line);
command_line->AppendSwitchASCII(switches::kEnableBlinkFeatures,
"MediaSession");
"MediaSession,SkipAd");
scoped_feature_list_.InitWithFeatures(
{media_session::features::kMediaSessionService, media::kSkipAd}, {});
{media_session::features::kMediaSessionService}, {});
}
private:
......
......@@ -647,8 +647,7 @@ void OverlayWindowViews::SetAlwaysHidePlayPauseButton(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(
......
......@@ -226,8 +226,7 @@ void PictureInPictureWindowControllerImpl::SetAlwaysHidePlayPauseButton(
}
void PictureInPictureWindowControllerImpl::SkipAd() {
if (base::FeatureList::IsEnabled(media::kSkipAd) &&
media_session_action_skip_ad_handled_)
if (media_session_action_skip_ad_handled_)
MediaSession::Get(initiator_)->SkipAd();
}
......
......@@ -204,9 +204,6 @@ const base::Feature kPictureInPicture {
#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?
const base::Feature kPreloadMetadataLazyLoad{"PreloadMetadataLazyLoad",
base::FEATURE_DISABLED_BY_DEFAULT};
......
......@@ -130,7 +130,6 @@ MEDIA_EXPORT extern const base::Feature kRecordMediaEngagementScores;
MEDIA_EXPORT extern const base::Feature kRecordWebAudioEngagement;
MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo;
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 kUseAndroidOverlay;
MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayAggressively;
......
......@@ -2220,6 +2220,7 @@ enum WebFeature {
kV8RemotePlayback_WatchAvailability_Method = 2780,
kV8RemotePlayback_Prompt_Method = 2781,
kLayoutJankExplicitlyRequested = 2782,
kMediaSessionSkipAd = 2783,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
......
......@@ -13,8 +13,11 @@
#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/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_sanitizer.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
namespace blink {
......@@ -156,7 +159,19 @@ void MediaSession::OnMetadataChanged() {
}
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) {
auto add_result = action_handlers_.Set(action, handler);
......
......@@ -18,6 +18,7 @@
namespace blink {
class ExecutionContext;
class ExceptionState;
class MediaMetadata;
class V8MediaSessionActionHandler;
......@@ -42,7 +43,9 @@ class MODULES_EXPORT MediaSession final
void setMetadata(MediaMetadata*);
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
// internally when a new MediaMetadata object is set.
......
......@@ -30,6 +30,6 @@ callback MediaSessionActionHandler = void ();
[Measure] attribute MediaMetadata? metadata;
[Measure] attribute MediaSessionPlaybackState playbackState;
[Measure] void setActionHandler(MediaSessionAction action,
[Measure, RaisesException] void setActionHandler(MediaSessionAction action,
MediaSessionActionHandler? handler);
};
......@@ -1252,6 +1252,12 @@
origin_trial_feature_name: "SignatureBasedIntegrity",
status: "experimental",
},
{
name: "SkipAd",
depends_on: ["MediaSession"],
origin_trial_feature_name: "SkipAd",
status: "experimental",
},
{
name: "SmoothScrollJSIntervention",
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.-->
<int value="2780" label="V8RemotePlayback_WatchAvailability_Method"/>
<int value="2781" label="V8RemotePlayback_Prompt_Method"/>
<int value="2782" label="LayoutJankExplicitlyRequested"/>
<int value="2783" label="MediaSessionSkipAd"/>
</enum>
<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