Commit 07d22792 authored by François Beaufort's avatar François Beaufort Committed by Commit Bot

[Picture-in-Picture] Add UseCounter.

As part of the origin trial, we should record usage with UseCounter, as that
can be automatically monitored by the origin trials infrastructure.

Bug: 806249
Change-Id: I7978d33f57c9d31ecc2b18a410c66475f3971ddb
Reviewed-on: https://chromium-review.googlesource.com/1055396
Commit-Queue: François Beaufort <beaufort.francois@gmail.com>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558324}
parent 656fcdd6
......@@ -1908,6 +1908,18 @@ enum WebFeature {
kPaymentRequestInvalidCurrencyCode = 2435,
kV8ArraySortNoElementsProtector = 2436,
kV8ArrayPrototypeSortJSArrayModifiedPrototype = 2437,
kV8Document_PictureInPictureEnabled_AttributeGetter = 2438,
kV8Document_PictureInPictureElement_AttributeGetter = 2439,
kV8Document_ExitPictureInPicture_Method = 2440,
kV8ShadowRoot_PictureInPictureElement_AttributeGetter = 2441,
kV8HTMLVideoElement_DisablePictureInPicture_AttributeGetter = 2442,
kV8HTMLVideoElement_DisablePictureInPicture_AttributeSetter = 2443,
kV8HTMLVideoElement_RequestPictureInPicture_Method = 2444,
kEnterPictureInPictureEventListener = 2445,
kLeavePictureInPictureEventListener = 2446,
kV8PictureInPictureWindow_Height_AttributeGetter = 2447,
kV8PictureInPictureWindow_Width_AttributeGetter = 2448,
kPictureInPictureWindowResizeEventListener = 2449,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
......
......@@ -36,6 +36,7 @@
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/picture_in_picture_controller.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/frame/use_counter.h"
#include "third_party/blink/renderer/core/fullscreen/fullscreen.h"
#include "third_party/blink/renderer/core/fullscreen/fullscreen_options.h"
#include "third_party/blink/renderer/core/html/media/media_custom_controls_fullscreen_detector.h"
......@@ -574,6 +575,20 @@ WebMediaPlayer::DisplayType HTMLVideoElement::DisplayType() const {
return HTMLMediaElement::DisplayType();
}
void HTMLVideoElement::AddedEventListener(
const AtomicString& event_type,
RegisteredEventListener& registered_listener) {
if (event_type == EventTypeNames::enterpictureinpicture) {
UseCounter::Count(GetExecutionContext(),
WebFeature::kEnterPictureInPictureEventListener);
} else if (event_type == EventTypeNames::leavepictureinpicture) {
UseCounter::Count(GetExecutionContext(),
WebFeature::kLeavePictureInPictureEventListener);
}
HTMLMediaElement::AddedEventListener(event_type, registered_listener);
}
bool HTMLVideoElement::IsRemotingInterstitialVisible() const {
return remoting_interstitial_ && remoting_interstitial_->IsVisible();
}
......
......@@ -154,6 +154,11 @@ class CORE_EXPORT HTMLVideoElement final : public HTMLMediaElement,
void MediaRemotingStopped(WebLocalizedString::Name error_msg) final;
WebMediaPlayer::DisplayType DisplayType() const final;
protected:
// EventTarget overrides.
void AddedEventListener(const AtomicString& event_type,
RegisteredEventListener&) override;
private:
friend class MediaCustomControlsFullscreenDetectorTest;
friend class HTMLMediaElementEventListenersTest;
......
......@@ -9,10 +9,10 @@
OriginTrialEnabled=PictureInPictureAPI
]
partial interface Document {
readonly attribute boolean pictureInPictureEnabled;
[Measure] readonly attribute boolean pictureInPictureEnabled;
[CallWith=ScriptState] Promise<void> exitPictureInPicture();
[CallWith=ScriptState, Measure] Promise<void> exitPictureInPicture();
// TODO(crbug.com/656517): Define this attribute in DocumentOrShadowRoot.
readonly attribute HTMLVideoElement? pictureInPictureElement;
[Measure] readonly attribute HTMLVideoElement? pictureInPictureElement;
};
\ No newline at end of file
......@@ -8,11 +8,11 @@
OriginTrialEnabled=PictureInPictureAPI
]
partial interface HTMLVideoElement {
[CallWith=ScriptState] Promise<PictureInPictureWindow> requestPictureInPicture();
[CallWith=ScriptState, Measure] Promise<PictureInPictureWindow> requestPictureInPicture();
attribute EventHandler onenterpictureinpicture;
attribute EventHandler onleavepictureinpicture;
[CEReactions, Reflect] attribute boolean disablePictureInPicture;
[CEReactions, Measure, Reflect] attribute boolean disablePictureInPicture;
};
\ No newline at end of file
......@@ -5,6 +5,7 @@
#include "third_party/blink/renderer/modules/picture_in_picture/picture_in_picture_window.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/frame/use_counter.h"
namespace blink {
......@@ -21,6 +22,18 @@ const AtomicString& PictureInPictureWindow::InterfaceName() const {
return EventTargetNames::PictureInPictureWindow;
}
void PictureInPictureWindow::AddedEventListener(
const AtomicString& event_type,
RegisteredEventListener& registered_listener) {
if (event_type == EventTypeNames::resize) {
UseCounter::Count(GetExecutionContext(),
WebFeature::kPictureInPictureWindowResizeEventListener);
}
EventTargetWithInlineData::AddedEventListener(event_type,
registered_listener);
}
void PictureInPictureWindow::Trace(blink::Visitor* visitor) {
EventTargetWithInlineData::Trace(visitor);
ContextClient::Trace(visitor);
......
......@@ -39,6 +39,11 @@ class PictureInPictureWindow : public EventTargetWithInlineData,
void Trace(blink::Visitor*) override;
protected:
// EventTarget overrides.
void AddedEventListener(const AtomicString& event_type,
RegisteredEventListener&) override;
private:
// The Picture-in-Picture window size in pixels.
WebSize size_;
......
......@@ -7,8 +7,8 @@
OriginTrialEnabled=PictureInPictureAPI
]
interface PictureInPictureWindow : EventTarget {
readonly attribute long width;
readonly attribute long height;
[Measure] readonly attribute long width;
[Measure] readonly attribute long height;
attribute EventHandler onresize;
};
\ No newline at end of file
......@@ -9,5 +9,5 @@
]
partial interface ShadowRoot {
// TODO(crbug.com/656517): Define this attribute in DocumentOrShadowRoot.
readonly attribute HTMLVideoElement? pictureInPictureElement;
[Measure] readonly attribute HTMLVideoElement? pictureInPictureElement;
};
\ No newline at end of file
......@@ -18657,6 +18657,21 @@ Called by update_net_error_codes.py.-->
<int value="2435" label="PaymentRequestInvalidCurrencyCode"/>
<int value="2436" label="V8ArraySortNoElementsProtector"/>
<int value="2437" label="V8ArrayPrototypeSortJSArrayModifiedPrototype"/>
<int value="2438" label="V8Document_PictureInPictureEnabled_AttributeGetter"/>
<int value="2439" label="V8Document_PictureInPictureElement_AttributeGetter"/>
<int value="2440" label="V8Document_ExitPictureInPicture_Method"/>
<int value="2441"
label="V8ShadowRoot_PictureInPictureElement_AttributeGetter"/>
<int value="2442"
label="V8HTMLVideoElement_DisablePictureInPicture_AttributeGetter"/>
<int value="2443"
label="V8HTMLVideoElement_DisablePictureInPicture_AttributeSetter"/>
<int value="2444" label="V8HTMLVideoElement_RequestPictureInPicture_Method"/>
<int value="2445" label="EnterPictureInPictureEventListener"/>
<int value="2446" label="LeavePictureInPictureEventListener"/>
<int value="2447" label="V8PictureInPictureWindow_Height_AttributeGetter"/>
<int value="2448" label="V8PictureInPictureWindow_Width_AttributeGetter"/>
<int value="2449" label="PictureInPictureWindowResizeEventListener"/>
</enum>
<enum name="FeedbackSource">
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