Changeset 207554 in webkit
- Timestamp:
- Oct 19, 2016 12:04:35 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
- 14 copied
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r207553 r207554 1 2016-10-19 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] Media Controller: click-to-start support 4 https://bugs.webkit.org/show_bug.cgi?id=163659 5 <rdar://problem/28845656> 6 7 Reviewed by Dean Jackson. 8 9 New test coverage for the StartSupport class. 10 11 * media/modern-media-controls/media-controller/media-controller-constructor.html: 12 * media/modern-media-controls/media-controller/media-controller-resize.html: 13 * media/modern-media-controls/start-support/start-support-audio-expected.txt: Added. 14 * media/modern-media-controls/start-support/start-support-audio.html: Added. 15 * media/modern-media-controls/start-support/start-support-autoplay-expected.txt: Added. 16 * media/modern-media-controls/start-support/start-support-autoplay.html: Added. 17 * media/modern-media-controls/start-support/start-support-click-to-start-expected.txt: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start-expected.txt. 18 * media/modern-media-controls/start-support/start-support-click-to-start.html: Renamed from LayoutTests/media/modern-media-controls/media-controller/media-controller-click-to-start.html. 19 * media/modern-media-controls/start-support/start-support-error-expected.txt: Added. 20 * media/modern-media-controls/start-support/start-support-error.html: Added. 21 * media/modern-media-controls/start-support/start-support-fullscreen-expected.txt: Added. 22 * media/modern-media-controls/start-support/start-support-fullscreen.html: Added. 23 * media/modern-media-controls/start-support/start-support-manual-play-expected.txt: Added. 24 * media/modern-media-controls/start-support/start-support-manual-play.html: Added. 25 * media/modern-media-controls/start-support/start-support-no-source-expected.txt: Added. 26 * media/modern-media-controls/start-support/start-support-no-source.html: Added. 27 * platform/ios-simulator/TestExpectations: 28 1 29 2016-10-19 Aaron Chu <aaron_chu@apple.com> 2 30 -
trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-constructor.html
r207436 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> -
trunk/LayoutTests/media/modern-media-controls/media-controller/media-controller-resize.html
r207436 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with an audio element. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true7 8 Dispatching click event to the start button9 Media is playing10 6 PASS mediaController.controls.showsStartButton is false 11 12 7 PASS successfullyParsed is true 13 8 -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-audio.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> 31 < video src="../../content/test.mp4"></video>33 <audio src="../../content/test.mp4" style="width: 320px; height: 240px;"></audio> 32 34 <div id="shadow"></div> 33 35 <script type="text/javascript"> 34 36 35 description("Testing the <code> MediaController</code> constructor.");37 description("Testing the <code>StartSupport</code> behavior with an audio element."); 36 38 37 39 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; 38 40 39 shouldBeDefined("createControls");40 shouldBeType("createControls", "Function");41 42 41 const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" }); 43 const media = document.querySelector(" video");42 const media = document.querySelector("audio"); 44 43 const mediaController = createControls(shadowRoot, media, null); 45 44 46 shouldBeType("mediaController", "MediaController"); 47 shouldBe("mediaController.shadowRoot", "shadowRoot"); 48 shouldBe("mediaController.media", "media"); 49 shouldBeType("mediaController.controls", "MediaControls"); 45 shouldBeFalse("mediaController.controls.showsStartButton"); 50 46 51 47 shadowRoot.host.remove(); 52 48 media.remove(); 53 debug("");54 49 55 50 </script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with autoplay. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true7 8 Dispatching click event to the start button9 6 Media is playing 10 7 PASS mediaController.controls.showsStartButton is false -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-autoplay.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> 31 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" ></video>33 <video src="../../content/test.mp4" style="width: 320px; height: 240px;" autoplay></video> 32 34 <div id="shadow"></div> 33 35 <script type="text/javascript"> … … 35 37 window.jsTestIsAsync = true; 36 38 37 description("Testing the <code> MediaController</code> click-to-start behavior.");39 description("Testing the <code>StartSupport</code> behavior with autoplay."); 38 40 39 41 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; … … 42 44 const media = document.querySelector("video"); 43 45 const mediaController = createControls(shadowRoot, media, null); 44 45 shouldBeTrue("mediaController.controls.showsStartButton");46 46 47 47 media.addEventListener("play", function() { … … 54 54 }); 55 55 56 debug("");57 debug("Dispatching click event to the start button");58 mediaController.controls.startButton.element.click();59 60 56 </script> 61 57 <script src="../../../resources/js-test-post.js"></script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-click-to-start.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> … … 43 45 const mediaController = createControls(shadowRoot, media, null); 44 46 45 shouldBeTrue("mediaController.controls.showsStartButton"); 47 media.addEventListener("loadedmetadata", function() { 48 shouldBeTrue("mediaController.controls.showsStartButton"); 49 debug(""); 50 debug("Dispatching click event to the start button"); 51 mediaController.controls.startButton.element.click(); 52 }); 46 53 47 54 media.addEventListener("play", function() { … … 54 61 }); 55 62 56 debug("");57 debug("Dispatching click event to the start button");58 mediaController.controls.startButton.element.click();59 63 60 64 </script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with an error. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true7 8 Dispatching click event to the start button9 Media is playing10 6 PASS mediaController.controls.showsStartButton is false 11 7 -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-error.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> 31 <video src=" ../../content/test.mp4" style="width: 320px; height: 240px;"></video>33 <video src="404.mp4" style="width: 320px; height: 240px;"></video> 32 34 <div id="shadow"></div> 33 35 <script type="text/javascript"> … … 35 37 window.jsTestIsAsync = true; 36 38 37 description("Testing the <code> MediaController</code> click-to-start behavior.");39 description("Testing the <code>StartSupport</code> behavior with an error."); 38 40 39 41 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; … … 43 45 const mediaController = createControls(shadowRoot, media, null); 44 46 45 shouldBeTrue("mediaController.controls.showsStartButton"); 46 47 media.addEventListener("play", function() { 48 debug("Media is playing"); 47 media.addEventListener("error", function() { 49 48 shouldBeFalse("mediaController.controls.showsStartButton"); 50 49 debug(""); … … 54 53 }); 55 54 56 debug("");57 debug("Dispatching click event to the start button");58 mediaController.controls.startButton.element.click();59 60 55 </script> 61 56 <script src="../../../resources/js-test-post.js"></script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with no source. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true 7 8 Dispatching click event to the start button 9 Media is playing 6 Media entered fullscreen 10 7 PASS mediaController.controls.showsStartButton is false 11 8 -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-fullscreen.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> … … 35 37 window.jsTestIsAsync = true; 36 38 37 description("Testing the <code> MediaController</code> click-to-start behavior.");39 description("Testing the <code>StartSupport</code> behavior with no source."); 38 40 39 41 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; … … 43 45 const mediaController = createControls(shadowRoot, media, null); 44 46 45 shouldBeTrue("mediaController.controls.showsStartButton"); 47 const button = document.body.appendChild(document.createElement("button")); 48 button.addEventListener("click", event => { 49 try { 50 media.webkitEnterFullscreen(); 51 } catch(e) { 52 debug("Calling media.webkitEnterFullscreen() failed"); 53 finishJSTest(); 54 } 55 }); 46 56 47 media.addEventListener(" play", function() {48 debug("Media is playing");57 media.addEventListener("webkitfullscreenchange", function() { 58 debug("Media entered fullscreen"); 49 59 shouldBeFalse("mediaController.controls.showsStartButton"); 50 60 debug(""); 51 61 shadowRoot.host.remove(); 52 62 media.remove(); 63 button.remove(); 53 64 finishJSTest(); 54 65 }); 55 66 56 debug(""); 57 debug("Dispatching click event to the start button"); 58 mediaController.controls.startButton.element.click(); 67 media.addEventListener("loadedmetadata", event => { 68 if ("eventSender" in window) { 69 // Click the button so that we may enter fullscreen. 70 eventSender.mouseMoveTo(button.offsetLeft + 1, button.offsetTop + 1); 71 eventSender.mouseDown(); 72 eventSender.mouseUp(); 73 } else 74 debug("This test is designed to run in DRT"); 75 }); 59 76 60 77 </script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with manual play. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true 6 Media is playing 7 PASS mediaController.controls.showsStartButton is false 7 8 8 Dispatching click event to the start button 9 Media is playing 9 Media is paused 10 10 PASS mediaController.controls.showsStartButton is false 11 11 -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-manual-play.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> … … 35 37 window.jsTestIsAsync = true; 36 38 37 description("Testing the <code> MediaController</code> click-to-start behavior.");39 description("Testing the <code>StartSupport</code> behavior with manual play."); 38 40 39 41 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; … … 43 45 const mediaController = createControls(shadowRoot, media, null); 44 46 45 shouldBeTrue("mediaController.controls.showsStartButton");46 47 47 media.addEventListener("play", function() { 48 48 debug("Media is playing"); 49 49 shouldBeFalse("mediaController.controls.showsStartButton"); 50 debug(""); 51 shadowRoot.host.remove(); 52 media.remove(); 53 finishJSTest(); 50 51 media.addEventListener("pause", function() { 52 debug(""); 53 debug("Media is paused"); 54 shouldBeFalse("mediaController.controls.showsStartButton"); 55 debug(""); 56 shadowRoot.host.remove(); 57 media.remove(); 58 finishJSTest(); 59 }); 60 61 media.autoplay = false; 62 media.pause(); 54 63 }); 55 64 56 debug(""); 57 debug("Dispatching click event to the start button"); 58 mediaController.controls.startButton.element.click(); 65 media.play(); 59 66 60 67 </script> -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source-expected.txt
r207553 r207554 1 Testing the MediaController click-to-start behavior.1 Testing the StartSupport behavior with no source. 2 2 3 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". 4 4 5 5 6 PASS mediaController.controls.showsStartButton is true7 8 Dispatching click event to the start button9 Media is playing10 6 PASS mediaController.controls.showsStartButton is false 11 12 7 PASS successfullyParsed is true 13 8 -
trunk/LayoutTests/media/modern-media-controls/start-support/start-support-no-source.html
r207553 r207554 27 27 <script src="../../../../Source/WebCore/Modules/modern-media-controls/controls/macos-inline-media-controls.js" type="text/javascript"></script> 28 28 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller.js" type="text/javascript"></script> 29 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js" type="text/javascript"></script> 30 <script src="../../../../Source/WebCore/Modules/modern-media-controls/media/start-support.js" type="text/javascript"></script> 29 31 <script src="../../../../Source/WebCore/Modules/modern-media-controls/main.js" type="text/javascript"></script> 30 32 <body> 31 <video s rc="../../content/test.mp4"></video>33 <video style="width: 320px; height: 240px;"></video> 32 34 <div id="shadow"></div> 33 35 <script type="text/javascript"> 34 36 35 description("Testing the <code> MediaController</code> constructor.");37 description("Testing the <code>StartSupport</code> behavior with no source."); 36 38 37 39 iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images"; 38 39 shouldBeDefined("createControls");40 shouldBeType("createControls", "Function");41 40 42 41 const shadowRoot = document.querySelector("div#shadow").attachShadow({ mode: "open" }); … … 44 43 const mediaController = createControls(shadowRoot, media, null); 45 44 46 shouldBeType("mediaController", "MediaController"); 47 shouldBe("mediaController.shadowRoot", "shadowRoot"); 48 shouldBe("mediaController.media", "media"); 49 shouldBeType("mediaController.controls", "MediaControls"); 45 shouldBeFalse("mediaController.controls.showsStartButton"); 50 46 51 47 shadowRoot.host.remove(); 52 48 media.remove(); 53 debug("");54 49 55 50 </script> -
trunk/LayoutTests/platform/ios-simulator/TestExpectations
r207330 r207554 2693 2693 webkit.org/b/163009 media/modern-media-controls/icon-button/icon-button-active-state.html [ Failure ] 2694 2694 webkit.org/b/163357 media/modern-media-controls/volume-slider/volume-slider-value.html [ Skip ] 2695 webkit.org/b/163669 media/modern-media-controls/start-support/start-support-fullscreen.html [ Skip ] 2695 2696 2696 2697 # This variation font test requires Skia which isn't available on iOS. -
trunk/Source/WebCore/ChangeLog
r207553 r207554 1 2016-10-19 Antoine Quint <graouts@apple.com> 2 3 [Modern Media Controls] Media Controller: click-to-start support 4 https://bugs.webkit.org/show_bug.cgi?id=163659 5 <rdar://problem/28845656> 6 7 Reviewed by Dean Jackson. 8 9 We introduce the MediaControllerSupport class which will allow a number of media controller 10 features to be implemented by subclasses each devoted to implementing a specific subset of 11 media controller features. With this bug, we add the correct behavior for click-to-start, 12 only showing the start button under the right circumstances. 13 14 A MediaController object indicates which media control to attach click event listeners to 15 through the `control` property, and a list of media events it should register on the media 16 element through the `mediaEvents` property. Then, as the user interacts with the specified 17 control and the media, the Button delegation method `buttonWasClicked()` and the `syncControl()` 18 methods are called to allow for the media state to be correctly set and represented in the 19 media controls. Custom event handling for the specified events can also be achieved by 20 subclassing the `handleEvent()` method. 21 22 Tests: media/modern-media-controls/start-support/start-support-audio.html 23 media/modern-media-controls/start-support/start-support-autoplay.html 24 media/modern-media-controls/start-support/start-support-click-to-start.html 25 media/modern-media-controls/start-support/start-support-error.html 26 media/modern-media-controls/start-support/start-support-fullscreen.html 27 media/modern-media-controls/start-support/start-support-manual-play.html 28 media/modern-media-controls/start-support/start-support-no-source.html 29 30 * Modules/modern-media-controls/media/media-controller-support.js: Added. 31 (MediaControllerSupport): 32 (MediaControllerSupport.prototype.get control): 33 (MediaControllerSupport.prototype.get mediaEvents): 34 (MediaControllerSupport.prototype.buttonWasClicked): 35 (MediaControllerSupport.prototype.handleEvent): 36 (MediaControllerSupport.prototype.syncControl): 37 * Modules/modern-media-controls/media/media-controller.js: 38 (MediaController): 39 (MediaController.prototype.buttonWasClicked): Deleted. 40 * Modules/modern-media-controls/media/start-support.js: Added. 41 (StartSupport.prototype.get control): 42 (StartSupport.prototype.get mediaEvents): 43 (StartSupport.prototype.buttonWasClicked): 44 (StartSupport.prototype.handleEvent): 45 (StartSupport.prototype.syncControl): 46 (StartSupport.prototype._shouldShowStartButton): 47 (StartSupport): 48 1 49 2016-10-19 Aaron Chu <aaron_chu@apple.com> 2 50 -
trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller-support.js
r207553 r207554 24 24 */ 25 25 26 class MediaController 26 class MediaControllerSupport 27 27 { 28 28 29 constructor( shadowRoot, media, host)29 constructor(mediaController) 30 30 { 31 this.shadowRoot = shadowRoot; 32 this.media = media; 31 this.mediaController = mediaController; 33 32 34 // FIXME: This should get set dynamically based on the current environment.35 this.layoutTraits = LayoutTraits.macOS;33 for (let eventType of this.mediaEvents) 34 mediaController.media.addEventListener(eventType, this); 36 35 37 this.controls = new MacOSInlineMediaControls38 shadowRoot.appendChild(this.controls.element);36 if (!this.control) 37 return; 39 38 40 this.controls.startButton.uiDelegate = this; 41 this.controls.showsStartButton = true; 39 this.control.uiDelegate = this; 42 40 43 this._updateControlsSize(); 44 media.addEventListener("resize", this); 41 this.syncControl(); 45 42 } 46 43 47 44 // Protected 48 45 49 set pageScaleFactor(pageScaleFactor)46 get control() 50 47 { 51 // FIXME: To be implemented.48 // Implemented by subclasses. 52 49 } 53 50 54 set usesLTRUserInterfaceLayoutDirection(flag)51 get mediaEvents() 55 52 { 56 // FIXME: To be implemented. 53 // Implemented by subclasses. 54 return []; 55 } 56 57 buttonWasClicked(control) 58 { 59 // Implemented by subclasses. 57 60 } 58 61 59 62 handleEvent(event) 60 63 { 61 if (event.type === "resize" && event.currentTarget === this.media) 62 this._updateControlsSize(); 64 // Implemented by subclasses. 65 if (this.control) 66 this.syncControl(); 63 67 } 64 68 65 buttonWasClicked(button)69 syncControl() 66 70 { 67 if (button !== this.controls.startButton) 68 return; 69 70 this.controls.showsStartButton = false; 71 this.media.play(); 71 // Implemented by subclasses. 72 72 } 73 74 // Private75 76 _updateControlsSize()77 {78 this.controls.width = this.media.offsetWidth;79 this.controls.height = this.media.offsetHeight;80 }81 82 73 } -
trunk/Source/WebCore/Modules/modern-media-controls/media/media-controller.js
r207436 r207554 31 31 this.shadowRoot = shadowRoot; 32 32 this.media = media; 33 this.host = host; 33 34 34 35 // FIXME: This should get set dynamically based on the current environment. … … 38 39 shadowRoot.appendChild(this.controls.element); 39 40 40 this.controls.startButton.uiDelegate = this; 41 this.controls.showsStartButton = true; 41 new StartSupport(this); 42 42 43 43 this._updateControlsSize(); … … 63 63 } 64 64 65 buttonWasClicked(button)66 {67 if (button !== this.controls.startButton)68 return;69 70 this.controls.showsStartButton = false;71 this.media.play();72 }73 74 65 // Private 75 66 -
trunk/Source/WebCore/Modules/modern-media-controls/media/start-support.js
r207553 r207554 24 24 */ 25 25 26 class MediaController26 class StartSupport extends MediaControllerSupport 27 27 { 28 29 constructor(shadowRoot, media, host)30 {31 this.shadowRoot = shadowRoot;32 this.media = media;33 34 // FIXME: This should get set dynamically based on the current environment.35 this.layoutTraits = LayoutTraits.macOS;36 37 this.controls = new MacOSInlineMediaControls38 shadowRoot.appendChild(this.controls.element);39 40 this.controls.startButton.uiDelegate = this;41 this.controls.showsStartButton = true;42 43 this._updateControlsSize();44 media.addEventListener("resize", this);45 }46 28 47 29 // Protected 48 30 49 set pageScaleFactor(pageScaleFactor)31 get control() 50 32 { 51 // FIXME: To be implemented.33 return this.mediaController.controls.startButton; 52 34 } 53 35 54 set usesLTRUserInterfaceLayoutDirection(flag)36 get mediaEvents() 55 37 { 56 // FIXME: To be implemented. 38 return ["loadedmetadata", "play", "error", "webkitfullscreenchange"]; 39 } 40 41 buttonWasClicked(control) 42 { 43 this.mediaController.media.play(); 57 44 } 58 45 59 46 handleEvent(event) 60 47 { 61 if (event.type === "resize" && event.currentTarget === this.media) 62 this._updateControlsSize(); 48 if (event.type === "play") 49 this._hasPlayed = true; 50 51 super.handleEvent(event); 63 52 } 64 53 65 buttonWasClicked(button)54 syncControl() 66 55 { 67 if (button !== this.controls.startButton) 68 return; 69 70 this.controls.showsStartButton = false; 71 this.media.play(); 56 this.mediaController.controls.showsStartButton = this._shouldShowStartButton(); 72 57 } 73 58 74 59 // Private 75 60 76 _ updateControlsSize()61 _shouldShowStartButton() 77 62 { 78 this.controls.width = this.media.offsetWidth; 79 this.controls.height = this.media.offsetHeight; 63 const media = this.mediaController.media; 64 65 if (this._hasPlayed) 66 return false; 67 68 if (!media.paused) 69 return false; 70 71 if (media.autoplay) 72 return false; 73 74 if (media instanceof HTMLAudioElement) 75 return false; 76 77 if (media.webkitDisplayingFullscreen) 78 return false; 79 80 if (!media.currentSrc) 81 return false; 82 83 if (media.error) 84 return false; 85 86 const host = this.mediaController.host; 87 if (!media.controls && host && host.allowsInlineMediaPlayback) 88 return false; 89 90 return true; 80 91 } 81 92
Note: See TracChangeset
for help on using the changeset viewer.