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

Unified Diff: third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h

Issue 2795783004: Move core MediaControls implementation to modules/media_controls/. (Closed)
Patch Set: rebase Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.h b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
similarity index 67%
rename from third_party/WebKit/Source/core/html/shadow/MediaControls.h
rename to third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
index 590db6ed0005814993ba95c843bdc2d4848023c6..0edf390865931e132d8d537fd0f07335c5c9bb05 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControls.h
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.h
@@ -24,11 +24,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef MediaControls_h
-#define MediaControls_h
+#ifndef MediaControlsImpl_h
+#define MediaControlsImpl_h
#include "core/html/HTMLDivElement.h"
+#include "core/html/media/MediaControls.h"
#include "core/html/shadow/MediaControlElements.h"
+#include "modules/ModulesExport.h"
namespace blink {
@@ -38,109 +40,118 @@ class MediaControlsOrientationLockDelegate;
class MediaControlsWindowEventListener;
class ShadowRoot;
-class CORE_EXPORT MediaControls final : public HTMLDivElement {
+// Default implementation of the core/ MediaControls interface used by
+// HTMLMediaElement.
+class MODULES_EXPORT MediaControlsImpl final : public HTMLDivElement,
+ public MediaControls {
+ USING_GARBAGE_COLLECTED_MIXIN(MediaControlsImpl);
+ WTF_MAKE_NONCOPYABLE(MediaControlsImpl);
+
public:
- static MediaControls* create(HTMLMediaElement&, ShadowRoot&);
+ class Factory : public MediaControls::Factory {
+ public:
+ MediaControls* create(HTMLMediaElement&, ShadowRoot&) override;
+ };
- HTMLMediaElement& mediaElement() const { return *m_mediaElement; }
+ ~MediaControlsImpl() = default;
// Node override.
Node::InsertionNotificationRequest insertedInto(ContainerNode*) override;
void removedFrom(ContainerNode*) override;
- void reset();
- void onControlsListUpdated();
-
- void show();
- void hide();
- bool isVisible() const;
-
- void beginScrubbing();
- void endScrubbing();
-
- void updateCurrentTimeDisplay();
-
- void toggleTextTrackList();
- void showTextTrackAtIndex(unsigned indexToEnable);
- void disableShowingTextTracks();
-
- // Called by the fullscreen buttons to toggle fulllscreen on/off.
- void enterFullscreen();
- void exitFullscreen();
-
- void showOverlayCastButtonIfNeeded();
- // Update cast button visibility, but don't try to update our panel
- // button visibility for space.
- void refreshCastButtonVisibilityWithoutUpdate();
-
- void setAllowHiddenVolumeControls(bool);
-
- // Returns the layout object for the part of the controls that should be
- // used for overlap checking during text track layout. May be null.
- LayoutObject* layoutObjectForTextTrackLayout();
-
- // Return the internal elements, which is used by registering clicking
- // EventHandlers from MediaControlsWindowEventListener.
- MediaControlPanelElement* panelElement() { return m_panel; }
- MediaControlTimelineElement* timelineElement() { return m_timeline; }
- MediaControlCastButtonElement* castButtonElement() { return m_castButton; }
- MediaControlVolumeSliderElement* volumeSliderElement() {
- return m_volumeSlider;
- }
-
- // Notify us that the media element's network state has changed.
- void networkStateChanged();
-
- void toggleOverflowMenu();
-
- bool overflowMenuVisible();
-
+ // MediaControls implementation.
+ void show() override;
+ void hide() override;
+ void reset() override;
+ void onControlsListUpdated() override;
// TODO(mlamouri): this is temporary to notify the controls that an
// HTMLTrackElement failed to load because there is no web exposed way to
// be notified on the TextTrack object. See https://crbug.com/669977
- void onTrackElementFailedToLoad() { onTextTracksAddedOrRemoved(); }
-
+ void onTrackElementFailedToLoad() override { onTextTracksAddedOrRemoved(); }
// TODO(mlamouri): the following methods will be able to become private when
- // the controls have moved to modules/ and have access to RemotePlayback.
- void onRemotePlaybackAvailabilityChanged() { refreshCastButtonVisibility(); }
- void onRemotePlaybackConnecting() { startedCasting(); }
- void onRemotePlaybackDisconnected() { stoppedCasting(); }
-
+ // the controls have to modules/ and have access to RemotePlayback.
+ void onRemotePlaybackAvailabilityChanged() override {
+ refreshCastButtonVisibility();
+ }
+ void onRemotePlaybackConnecting() override { startedCasting(); }
+ void onRemotePlaybackDisconnected() override { stoppedCasting(); }
// TODO(mlamouri): this method is needed in order to notify the controls that
// the attribute have changed.
- void onDisableRemotePlaybackAttributeChanged() {
+ void onDisableRemotePlaybackAttributeChanged() override {
refreshCastButtonVisibility();
}
-
+ // Notify us that the media element's network state has changed.
+ void networkStateChanged() override;
+ LayoutObject* panelLayoutObject() override;
+ LayoutObject* containerLayoutObject() override;
+ // Return the internal elements, which is used by registering clicking
+ // EventHandlers from MediaControlsWindowEventListener.
+ MediaControlPanelElement* panelElement() override { return m_panel; }
+ MediaControlTimelineElement* timelineElement() override { return m_timeline; }
+ MediaControlCastButtonElement* castButtonElement() override {
+ return m_castButton;
+ }
+ MediaControlVolumeSliderElement* volumeSliderElement() override {
+ return m_volumeSlider;
+ }
+ void beginScrubbing() override;
+ void endScrubbing() override;
+ void updateCurrentTimeDisplay() override;
+ void toggleTextTrackList() override;
+ void showTextTrackAtIndex(unsigned indexToEnable) override;
+ void disableShowingTextTracks() override;
+ // Called by the fullscreen buttons to toggle fulllscreen on/off.
+ void enterFullscreen() override;
+ void exitFullscreen() override;
+ void showOverlayCastButtonIfNeeded() override;
+ void toggleOverflowMenu() override;
+ bool overflowMenuVisible() override;
// TODO(mlamouri): this method is needed in order to notify the controls that
- // the `mediaControlsEnabled` setting has changed.
- void onMediaControlsEnabledChange() {
+ // the `MediaControlsEnabled` setting has changed.
+ void onMediaControlsEnabledChange() override {
// There is no update because only the overlay is expected to change.
refreshCastButtonVisibilityWithoutUpdate();
}
+ // Methods called by MediaControlsMediaEventListener.
+ void onVolumeChange() override;
+ void onFocusIn() override;
+ void onTimeUpdate() override;
+ void onDurationChange() override;
+ void onPlay() override;
+ void onPause() override;
+ void onTextTracksAddedOrRemoved() override;
+ void onTextTracksChanged() override;
+ void onError() override;
+ void onLoadedMetadata() override;
+ void onEnteredFullscreen() override;
+ void onExitedFullscreen() override;
+ Document& ownerDocument() { return document(); }
DECLARE_VIRTUAL_TRACE();
private:
friend class MediaControlsMediaEventListener;
friend class MediaControlsOrientationLockDelegateTest;
- friend class MediaControlsTest;
-
- void invalidate(Element*);
+ friend class MediaControlsImplTest;
// Need to be members of MediaControls for private member access.
class BatchedControlUpdate;
class MediaControlsResizeObserverCallback;
+ static MediaControlsImpl* create(HTMLMediaElement&, ShadowRoot&);
+
+ void invalidate(Element*);
+
// Notify us that our controls enclosure has changed size.
void notifyElementSizeChanged(ClientRect* newSize);
- explicit MediaControls(HTMLMediaElement&);
+ explicit MediaControlsImpl(HTMLMediaElement&);
void initializeControls();
void makeOpaque();
void makeTransparent();
+ bool isVisible() const;
void updatePlayState();
@@ -173,26 +184,11 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement {
void defaultEventHandler(Event*) override;
bool containsRelatedTarget(Event*);
- // Methods called by MediaControlsMediaEventListener.
- void onVolumeChange();
- void onFocusIn();
- void onTimeUpdate();
- void onDurationChange();
- void onPlay();
- void onPause();
- void onTextTracksAddedOrRemoved();
- void onTextTracksChanged();
- void onError();
- void onLoadedMetadata();
- void onEnteredFullscreen();
- void onExitedFullscreen();
-
// Internal cast related methods.
void startedCasting();
void stoppedCasting();
void refreshCastButtonVisibility();
-
- Member<HTMLMediaElement> m_mediaElement;
+ void refreshCastButtonVisibilityWithoutUpdate();
// Media control elements.
Member<MediaControlOverlayEnclosureElement> m_overlayEnclosure;
@@ -220,7 +216,7 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement {
Member<MediaControlsWindowEventListener> m_windowEventListener;
Member<MediaControlsOrientationLockDelegate> m_orientationLockDelegate;
- TaskRunnerTimer<MediaControls> m_hideMediaControlsTimer;
+ TaskRunnerTimer<MediaControlsImpl> m_hideMediaControlsTimer;
unsigned m_hideTimerBehaviorFlags;
bool m_isMouseOverControls : 1;
bool m_isPausedForScrubbing : 1;
@@ -229,13 +225,13 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement {
// necessary.
Member<ResizeObserver> m_resizeObserver;
- TaskRunnerTimer<MediaControls> m_elementSizeChangedTimer;
+ TaskRunnerTimer<MediaControlsImpl> m_elementSizeChangedTimer;
IntSize m_size;
bool m_keepShowingUntilTimerFires : 1;
};
-DEFINE_ELEMENT_TYPE_CASTS(MediaControls, isMediaControls());
+DEFINE_ELEMENT_TYPE_CASTS(MediaControlsImpl, isMediaControls());
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698