Changeset 228718 in webkit
- Timestamp:
- Feb 19, 2018 4:37:42 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r228717 r228718 1 2018-02-19 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] Implement a compact set of media controls 4 https://bugs.webkit.org/show_bug.cgi?id=182937 5 <rdar://problem/37682257> 6 7 Reviewed by Eric Carlson. 8 9 Add new tests that cover the basic properties and layout under different situations of the new CompactMediaControls. 10 11 * media/modern-media-controls/compact-media-controls/compact-media-controls-constructor-expected.txt: Added. 12 * media/modern-media-controls/compact-media-controls/compact-media-controls-constructor.html: Added. 13 * media/modern-media-controls/compact-media-controls/compact-media-controls-layout-expected.txt: Added. 14 * media/modern-media-controls/compact-media-controls/compact-media-controls-layout.html: Added. 15 1 16 2018-02-19 Antoine Quint <graouts@apple.com> 2 17 -
trunk/Source/WebCore/ChangeLog
r228717 r228718 1 2018-02-19 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] Implement a compact set of media controls 4 https://bugs.webkit.org/show_bug.cgi?id=182937 5 <rdar://problem/37682257> 6 7 Reviewed by Eric Carlson. 8 9 We add a new type of media controls used when we need stripped down and compact controls. The new 10 CompactMediaControls only show a play/pause button and an invalid placard and disregard all media 11 events that are not relevant to the display of these controls. 12 13 To distinguish cases where we need to show compact media controls, we expose a new property on 14 MediaControlsHost called "compactMode". 15 16 Tests: media/modern-media-controls/compact-media-controls/compact-media-controls-constructor.html 17 media/modern-media-controls/compact-media-controls/compact-media-controls-layout.html 18 19 * Modules/mediacontrols/MediaControlsHost.cpp: 20 (WebCore::MediaControlsHost::base64StringForIconNameAndType const): 21 (WebCore::MediaControlsHost::compactMode const): 22 * Modules/mediacontrols/MediaControlsHost.h: 23 (WebCore::MediaControlsHost::setSimulateCompactMode): 24 * Modules/mediacontrols/MediaControlsHost.idl: 25 * Modules/modern-media-controls/controls/compact-media-controls.js: Added. 26 (CompactMediaControls.prototype.get scaleFactor): 27 (CompactMediaControls.prototype.set scaleFactor): 28 (CompactMediaControls.prototype.get shouldCenterControlsVertically): 29 (CompactMediaControls.prototype.set shouldCenterControlsVertically): 30 (CompactMediaControls.prototype.get placard): 31 (CompactMediaControls.prototype.set placard): 32 (CompactMediaControls.prototype.layout): 33 (CompactMediaControls.prototype.commitProperty): 34 * Modules/modern-media-controls/controls/icon-service.js: 35 (const.iconService.new.IconService.prototype._fileNameAndPlatformForIconAndLayoutTraits): 36 (const.iconService.new.IconService): 37 * Modules/modern-media-controls/controls/inline-media-controls.js: 38 * Modules/modern-media-controls/controls/layout-item.js: 39 * Modules/modern-media-controls/js-files: 40 * Modules/modern-media-controls/main.js: 41 * Modules/modern-media-controls/media/media-controller.js: 42 (MediaController.prototype.get layoutTraits): 43 (MediaController.prototype._supportingObjectClasses): Compute the set of MediaControllerSupport classes based 44 on the layout traits such that in compact mode we only return PlacardSupport and PlaybackSupport. 45 (MediaController.prototype._updateControlsIfNeeded): 46 (MediaController.prototype._controlsClassForLayoutTraits): 47 (MediaController.prototype._shouldControlsBeAvailable): 48 * Modules/modern-media-controls/media/placard-support.js: 49 (PlacardSupport.prototype.get mediaEvents): Only track the "error" event in compact mode since this is the only 50 relevant placard. 51 * Modules/modern-media-controls/media/playback-support.js: 52 (PlaybackSupport.prototype.syncControl): Only show or hide the play/pause button based on the playback state 53 when in compact mode. 54 (PlaybackSupport): 55 * WebCore.xcodeproj/project.pbxproj: 56 1 57 2018-02-19 Antoine Quint <graouts@apple.com> 2 58 -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp
r228218 r228718 284 284 String MediaControlsHost::base64StringForIconNameAndType(const String& iconName, const String& iconType) const 285 285 { 286 287 286 return RenderTheme::singleton().mediaControlsBase64StringForIconNameAndType(iconName, iconType); 288 287 } … … 293 292 } 294 293 295 } 296 294 bool MediaControlsHost::compactMode() const 295 { 296 if (m_simulateCompactMode) 297 return true; 298 299 #if ENABLE(EXTRA_ZOOM_MODE) 300 return true; 301 #else 302 return false; 297 303 #endif 304 } 305 306 } 307 308 #endif -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h
r218881 r228718 82 82 DeviceType externalDeviceType() const; 83 83 84 bool compactMode() const; 85 void setSimulateCompactMode(bool value) { m_simulateCompactMode = value; } 86 84 87 bool controlsDependOnPageScaleFactor() const; 85 88 void setControlsDependOnPageScaleFactor(bool v); … … 96 99 HTMLMediaElement* m_mediaElement; 97 100 RefPtr<MediaControlTextTrackContainerElement> m_textTrackContainer; 101 bool m_simulateCompactMode { false }; 98 102 }; 99 103 -
trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl
r218853 r228718 50 50 readonly attribute boolean isInMediaDocument; 51 51 readonly attribute boolean shouldForceControlsDisplay; 52 readonly attribute boolean compactMode; 52 53 53 54 readonly attribute DOMString externalDeviceDisplayName; -
trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js
r228471 r228718 89 89 if (layoutTraits & LayoutTraits.macOS) 90 90 platform = "macOS"; 91 else if (layoutTraits & LayoutTraits.iOS )91 else if (layoutTraits & LayoutTraits.iOS || layoutTraits & LayoutTraits.Compact) 92 92 platform = "iOS"; 93 93 else -
trunk/Source/WebCore/Modules/modern-media-controls/controls/inline-media-controls.js
r228010 r228718 26 26 const InsideMargin = 6; // Minimum margin to guarantee around all controls, this constant needs to stay in sync with the --inline-controls-inside-margin CSS variable. 27 27 const BottomControlsBarHeight = 31; // This constant needs to stay in sync with the --inline-controls-bar-height CSS variable. 28 const MinimumSizeToShowAnyControl = 47;29 const MaximumSizeToShowSmallProminentControl = 88;30 28 31 29 class InlineMediaControls extends MediaControls -
trunk/Source/WebCore/Modules/modern-media-controls/controls/layout-item.js
r217823 r228718 28 28 macOS : 1 << 0, 29 29 iOS : 1 << 1, 30 Fullscreen : 1 << 2 30 Fullscreen : 1 << 2, 31 Compact : 1 << 3 31 32 }; 32 33 -
trunk/Source/WebCore/Modules/modern-media-controls/js-files
r217823 r228718 40 40 controls/invalid-placard.js 41 41 controls/pip-placard.js 42 controls/compact-media-controls.js 42 43 media/media-controller-support.js 43 44 media/airplay-support.js … … 64 65 media/media-document-controller.js 65 66 media/media-controller.js 66 -
trunk/Source/WebCore/Modules/modern-media-controls/main.js
r228471 r228718 25 25 26 26 const SkipSeconds = 15; 27 const MinimumSizeToShowAnyControl = 47; 28 const MaximumSizeToShowSmallProminentControl = 88; 27 29 28 30 let mediaControlsHost; -
trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js
r228519 r228718 97 97 get layoutTraits() 98 98 { 99 if (this.host && this.host.compactMode) 100 return LayoutTraits.Compact; 101 99 102 let traits = window.navigator.platform === "MacIntel" ? LayoutTraits.macOS : LayoutTraits.iOS; 100 103 if (this.isFullscreen) … … 179 182 // Private 180 183 184 _supportingObjectClasses() 185 { 186 if (this.layoutTraits & LayoutTraits.Compact) 187 return [PlacardSupport, PlaybackSupport]; 188 189 return [AirplaySupport, AudioSupport, ControlsVisibilitySupport, FullscreenSupport, MuteSupport, PiPSupport, PlacardSupport, PlaybackSupport, ScrubbingSupport, SeekBackwardSupport, SeekForwardSupport, SkipBackSupport, SkipForwardSupport, StartSupport, StatusSupport, TimeControlSupport, TracksSupport, VolumeSupport, VolumeDownSupport, VolumeUpSupport]; 190 } 191 181 192 _updateControlsIfNeeded() 182 193 { … … 200 211 this.controls.delegate = this; 201 212 202 if (this. shadowRoot.host && this.shadowRoot.host.dataset.autoHideDelay)213 if (this.controls.autoHideController && this.shadowRoot.host && this.shadowRoot.host.dataset.autoHideDelay) 203 214 this.controls.autoHideController.autoHideDelay = this.shadowRoot.host.dataset.autoHideDelay; 204 215 … … 213 224 this._updateControlsSize(); 214 225 215 this._supportingObjects = [AirplaySupport, AudioSupport, ControlsVisibilitySupport, FullscreenSupport, MuteSupport, PiPSupport, PlacardSupport, PlaybackSupport, ScrubbingSupport, SeekBackwardSupport, SeekForwardSupport, SkipBackSupport, SkipForwardSupport, StartSupport, StatusSupport, TimeControlSupport, TracksSupport, VolumeSupport, VolumeDownSupport, VolumeUpSupport].map(SupportClass => { 216 return new SupportClass(this); 217 }, this); 226 this._supportingObjects = this._supportingObjectClasses().map(SupportClass => new SupportClass(this), this); 218 227 219 228 this.controls.shouldUseSingleBarLayout = this.controls instanceof InlineMediaControls && this.isYouTubeEmbedWithTitle; … … 279 288 _controlsClassForLayoutTraits(layoutTraits) 280 289 { 290 if (layoutTraits & LayoutTraits.Compact) 291 return CompactMediaControls; 281 292 if (layoutTraits & LayoutTraits.iOS) 282 293 return IOSInlineMediaControls; … … 308 319 _shouldControlsBeAvailable() 309 320 { 321 // Controls are always available with compact layout. 322 if (this.layoutTraits & LayoutTraits.Compact) 323 return true; 324 310 325 // Controls are always available while in fullscreen on macOS, and they are never available when in fullscreen on iOS. 311 326 if (this.isFullscreen) -
trunk/Source/WebCore/Modules/modern-media-controls/media/placard-support.js
r228445 r228718 37 37 get mediaEvents() 38 38 { 39 if (this.mediaController.layoutTraits & LayoutTraits.Compact) 40 return ["error"]; 41 39 42 return ["loadstart", "error", "webkitpresentationmodechanged", "webkitcurrentplaybacktargetiswirelesschanged"]; 40 43 } -
trunk/Source/WebCore/Modules/modern-media-controls/media/playback-support.js
r212573 r228718 46 46 syncControl() 47 47 { 48 this.control.playing = !this.mediaController.media.paused; 48 const isPaused = this.mediaController.media.paused; 49 50 // We always show the play button when the media is paused with compact layout. 51 if (this.mediaController.layoutTraits & LayoutTraits.Compact) 52 this.control.visible = isPaused; 53 else 54 this.control.playing = !isPaused; 49 55 } 50 56 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r228662 r228718 8997 8997 71DCB6FF1568197600862271 /* JSSVGZoomAndPan.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGZoomAndPan.cpp; sourceTree = "<group>"; }; 8998 8998 71DCB7001568197600862271 /* JSSVGZoomAndPan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSSVGZoomAndPan.h; sourceTree = "<group>"; }; 8999 71DE2794203A9C1C0058CB51 /* compact-media-controls.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "compact-media-controls.js"; sourceTree = "<group>"; }; 8999 9000 71E2183817359FB8006E6E4D /* PlugInsResources.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = PlugInsResources.h; sourceTree = "<group>"; }; 9000 9001 71E2183917359FB8006E6E4D /* PlugInsResourcesData.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; path = PlugInsResourcesData.cpp; sourceTree = "<group>"; }; … … 19070 19071 716FA0DE1DB26591007323CC /* buttons-container.css */, 19071 19072 716FA0DF1DB26591007323CC /* buttons-container.js */, 19073 71DE2794203A9C1C0058CB51 /* compact-media-controls.js */, 19072 19074 717F618B1E43D61A00F37024 /* controls-bar.css */, 19073 19075 710FA74B1DEE576D004C715E /* controls-bar.js */, … … 30711 30713 runOnlyForDeploymentPostprocessing = 0; 30712 30714 shellPath = /bin/sh; 30713 shellScript = "SRC_DIR=\"$SRCROOT/Modules/modern-media-controls\"\nDST_DIR=\"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/modern-media-controls\"\n\nmkdir -p \"$DST_DIR\"\n\nif [ \"${PLATFORM_NAME}\" == \"macosx\" ]; then\n IMG_OS_PREFIX=\"macOS\"\nfi\n\nif [ \"${PLATFORM_NAME}\" == \"iphoneos\" ] || [ \"${PLATFORM_NAME}\" == \"iphonesimulator\" ]; then\nIMG_OS_PREFIX=\"iOS\"\nfi\n\nif [ -n \"$IMG_OS_PREFIX\" ]; then\nrsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRC_DIR/images/$IMG_OS_PREFIX/\" \"$DST_DIR/images\"\nfi\n\ncd \"$SRC_DIR\"\ncat controls/*.css > \"$DST_DIR/modern-media-controls.css\"\n cat `cat js-files` > \"$DST_DIR/modern-media-controls.js\"\n";30715 shellScript = "SRC_DIR=\"$SRCROOT/Modules/modern-media-controls\"\nDST_DIR=\"$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/modern-media-controls\"\n\nmkdir -p \"$DST_DIR\"\n\nif [ \"${PLATFORM_NAME}\" == \"macosx\" ]; then\n IMG_OS_PREFIX=\"macOS\"\nelse\n IMG_OS_PREFIX=\"iOS\"\nfi\n\nif [ -n \"$IMG_OS_PREFIX\" ]; then\nrsync -aq --exclude \".svn\" --exclude \".DS_Store\" \"$SRC_DIR/images/$IMG_OS_PREFIX/\" \"$DST_DIR/images\"\nfi\n\ncd \"$SRC_DIR\"\ncat controls/*.css > \"$DST_DIR/modern-media-controls.css\"\n cat `cat js-files` > \"$DST_DIR/modern-media-controls.js\"\n"; 30714 30716 }; 30715 30717 A5E79CEC1E67F2CF00FB8153 /* Make Frameworks Symbolic Link */ = {
Note: See TracChangeset
for help on using the changeset viewer.