Title: [185472] trunk/Source
Revision
185472
Author
[email protected]
Date
2015-06-11 13:53:49 -0700 (Thu, 11 Jun 2015)

Log Message

Update media controls JS and CSS to use picture-in-picture
https://bugs.webkit.org/show_bug.cgi?id=145827
<rdar://problem/21311576>

Reviewed by Dean Jackson.

Source/WebCore:

* English.lproj/mediaControlsLocalizedStrings.js: Update localized strings.
Add a string for the placeholder text, and for the aria-label of the
placard.

* Modules/mediacontrols/MediaControlsHost.idl: Remove uncalled functions.
* Modules/mediacontrols/MediaControlsHost.h: Also remove optimizedFullscreenSupported(),
which was never used.
* Modules/mediacontrols/MediaControlsHost.cpp: Remove uncalled functions and media part IDs.
(WebCore::MediaControlsHost::enterFullscreenOptimized): Deleted.
(WebCore::MediaControlsHost::mediaUIImageData): Deleted.

* Modules/mediacontrols/mediaControlsApple.css:
(audio::-webkit-media-controls-picture-in-picture-button): Update pseudo-element name.
(audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
* Modules/mediacontrols/mediaControlsApple.js: Update global variable name, and classes.
(Controller.prototype.createControls): Update button name. Add aria-label to the placeholder.
(Controller.prototype.updateFullscreenButtons):
(Controller.prototype.updateLayoutForDisplayedWidth):
(Controller.prototype.handlePictureInPictureButtonClicked): Update handler names.
(Controller.prototype.handleOptimizedFullscreenButtonClicked): Deleted.

* Modules/mediacontrols/mediaControlsiOS.css: Rename pseudo-element.
(audio::-webkit-media-controls-picture-in-picture-button): Add mask images.
(audio::-webkit-media-controls-picture-in-picture-button:active):
(video::-webkit-media-controls-picture-in-picture-button):
(video::-webkit-media-controls-picture-in-picture-button.return-from-picture-in-picture):
(audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):
(audio::-webkit-media-controls-wireless-playback-text-top.picture-in-picture):
(audio::-webkit-media-controls-wireless-playback-text-bottom.picture-in-picture):
(audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
(audio::-webkit-media-controls-optimized-fullscreen-button:active): Deleted.
(video::-webkit-media-controls-optimized-fullscreen-button): Deleted.
(audio::-webkit-media-controls-wireless-playback-status.optimized): Deleted. The placard
pseudo-element should be updated from wireless-playback-status to just playback-status
since it serves both for pip and AirPlay.
(audio::-webkit-media-controls-wireless-playback-text-top.optimized): Deleted.
(audio::-webkit-media-controls-wireless-playback-text-bottom.optimized): Deleted.
* Modules/mediacontrols/mediaControlsiOS.js:
(ControllerIOS.prototype.createControls): Update button names.
(ControllerIOS.prototype.configureInlineControls):
(ControllerIOS.prototype.handlePictureInPictureButtonClicked): Update handler name.
(ControllerIOS.prototype.handlePictureInPictureTouchStart):
(ControllerIOS.prototype.handlePictureInPictureTouchEnd):
(ControllerIOS.prototype.handlePictureInPictureTouchCancel):
(ControllerIOS.prototype.handlePresentationModeChange): Remove changes to the inline bg
image style, and rely on the CSS to fill those in. Use localized strings for the placard.
Move the aria-label to createControls().
(ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): Deleted.
(ControllerIOS.prototype.handleOptimizedFullscreenTouchStart): Deleted.
(ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd): Deleted.
(ControllerIOS.prototype.handleOptimizedFullscreenTouchCancel): Deleted.

* html/HTMLMediaElement.cpp: Remove enterFullscreenOptimized since it is never called.
(WebCore::HTMLMediaElement::enterFullscreenOptimized): Deleted.
* html/HTMLMediaElement.h:
* platform/ios/WebCoreSystemInterfaceIOS.h: Remove wkGetMediaUIImageData.
* platform/ios/WebCoreSystemInterfaceIOS.mm:
* rendering/RenderThemeIOS.mm:
(WebCore::RenderThemeIOS::mediaControlsStyleSheet): Remove calls to wkGetMediaUIImageData.

Source/WebKit/mac:

* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface): Deleted GetMediaUIImageData.

Source/WebKit2:

* WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
(InitWebCoreSystemInterface): Deleted GetMediaUIImageData.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (185471 => 185472)


--- trunk/Source/WebCore/ChangeLog	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/ChangeLog	2015-06-11 20:53:49 UTC (rev 185472)
@@ -1,3 +1,71 @@
+2015-06-11  Jon Lee  <[email protected]>
+
+        Update media controls JS and CSS to use picture-in-picture
+        https://bugs.webkit.org/show_bug.cgi?id=145827
+        <rdar://problem/21311576>
+
+        Reviewed by Dean Jackson.
+
+        * English.lproj/mediaControlsLocalizedStrings.js: Update localized strings.
+        Add a string for the placeholder text, and for the aria-label of the
+        placard.
+
+        * Modules/mediacontrols/MediaControlsHost.idl: Remove uncalled functions.
+        * Modules/mediacontrols/MediaControlsHost.h: Also remove optimizedFullscreenSupported(),
+        which was never used.
+        * Modules/mediacontrols/MediaControlsHost.cpp: Remove uncalled functions and media part IDs.
+        (WebCore::MediaControlsHost::enterFullscreenOptimized): Deleted.
+        (WebCore::MediaControlsHost::mediaUIImageData): Deleted.
+
+        * Modules/mediacontrols/mediaControlsApple.css:
+        (audio::-webkit-media-controls-picture-in-picture-button): Update pseudo-element name.
+        (audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
+        * Modules/mediacontrols/mediaControlsApple.js: Update global variable name, and classes.
+        (Controller.prototype.createControls): Update button name. Add aria-label to the placeholder.
+        (Controller.prototype.updateFullscreenButtons):
+        (Controller.prototype.updateLayoutForDisplayedWidth):
+        (Controller.prototype.handlePictureInPictureButtonClicked): Update handler names.
+        (Controller.prototype.handleOptimizedFullscreenButtonClicked): Deleted.
+
+        * Modules/mediacontrols/mediaControlsiOS.css: Rename pseudo-element.
+        (audio::-webkit-media-controls-picture-in-picture-button): Add mask images.
+        (audio::-webkit-media-controls-picture-in-picture-button:active):
+        (video::-webkit-media-controls-picture-in-picture-button):
+        (video::-webkit-media-controls-picture-in-picture-button.return-from-picture-in-picture):
+        (audio::-webkit-media-controls-wireless-playback-status.picture-in-picture):
+        (audio::-webkit-media-controls-wireless-playback-text-top.picture-in-picture):
+        (audio::-webkit-media-controls-wireless-playback-text-bottom.picture-in-picture):
+        (audio::-webkit-media-controls-optimized-fullscreen-button): Deleted.
+        (audio::-webkit-media-controls-optimized-fullscreen-button:active): Deleted.
+        (video::-webkit-media-controls-optimized-fullscreen-button): Deleted.
+        (audio::-webkit-media-controls-wireless-playback-status.optimized): Deleted. The placard
+        pseudo-element should be updated from wireless-playback-status to just playback-status
+        since it serves both for pip and AirPlay.
+        (audio::-webkit-media-controls-wireless-playback-text-top.optimized): Deleted.
+        (audio::-webkit-media-controls-wireless-playback-text-bottom.optimized): Deleted.
+        * Modules/mediacontrols/mediaControlsiOS.js:
+        (ControllerIOS.prototype.createControls): Update button names.
+        (ControllerIOS.prototype.configureInlineControls):
+        (ControllerIOS.prototype.handlePictureInPictureButtonClicked): Update handler name.
+        (ControllerIOS.prototype.handlePictureInPictureTouchStart):
+        (ControllerIOS.prototype.handlePictureInPictureTouchEnd):
+        (ControllerIOS.prototype.handlePictureInPictureTouchCancel):
+        (ControllerIOS.prototype.handlePresentationModeChange): Remove changes to the inline bg
+        image style, and rely on the CSS to fill those in. Use localized strings for the placard.
+        Move the aria-label to createControls().
+        (ControllerIOS.prototype.handleOptimizedFullscreenButtonClicked): Deleted.
+        (ControllerIOS.prototype.handleOptimizedFullscreenTouchStart): Deleted.
+        (ControllerIOS.prototype.handleOptimizedFullscreenTouchEnd): Deleted.
+        (ControllerIOS.prototype.handleOptimizedFullscreenTouchCancel): Deleted.
+
+        * html/HTMLMediaElement.cpp: Remove enterFullscreenOptimized since it is never called.
+        (WebCore::HTMLMediaElement::enterFullscreenOptimized): Deleted.
+        * html/HTMLMediaElement.h:
+        * platform/ios/WebCoreSystemInterfaceIOS.h: Remove wkGetMediaUIImageData.
+        * platform/ios/WebCoreSystemInterfaceIOS.mm:
+        * rendering/RenderThemeIOS.mm:
+        (WebCore::RenderThemeIOS::mediaControlsStyleSheet): Remove calls to wkGetMediaUIImageData.
+
 2015-06-11  Dean Jackson  <[email protected]>
 
         Add an appearance keyword for wireless playback / airplay icon

Modified: trunk/Source/WebCore/English.lproj/mediaControlsLocalizedStrings.js (185471 => 185472)


--- trunk/Source/WebCore/English.lproj/mediaControlsLocalizedStrings.js	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/English.lproj/mediaControlsLocalizedStrings.js	2015-06-11 20:53:49 UTC (rev 185472)
@@ -11,7 +11,7 @@
     'Captions': 'Captions',
     'Choose Wireless Display': 'Choose Wireless Display',
     'Display Full Screen': 'Display Full Screen',
-    'Display Optimized Full Screen': 'Display Optimized Full Screen',
+    'Display Picture in Picture': 'Display Picture in Picture',
     'Duration': 'Duration',
     'Elapsed': 'Elapsed',
     'Error': 'Error',
@@ -31,8 +31,10 @@
     'Start Playback': 'Start Playback',
     'Subtitles': 'Subtitles',
     'Suspended': 'Suspended',
+    'This video is playing in Picture in Picture': 'This video is playing in Picture in Picture',
     'Unmute': 'Unmute',
     'Video Playback': 'Video Playback',
+    'Video Playback Placeholder': 'Video Playback Placeholder',
     'Volume': 'Volume',
     'Waiting': 'Waiting'
 };
\ No newline at end of file

Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp	2015-06-11 20:53:49 UTC (rev 185472)
@@ -188,14 +188,7 @@
     if (m_textTrackContainer)
         m_textTrackContainer->exitedFullscreen();
 }
-    
-void MediaControlsHost::enterFullscreenOptimized()
-{
-#if PLATFORM(IOS)
-    m_mediaElement->enterFullscreenOptimized();
-#endif
-}
-    
+
 void MediaControlsHost::updateCaptionDisplaySizes()
 {
     if (m_textTrackContainer)
@@ -278,27 +271,6 @@
     m_mediaElement->setMediaControlsDependOnPageScaleFactor(value);
 }
 
-String MediaControlsHost::mediaUIImageData(const String& partID) const
-{
-#if PLATFORM(IOS)
-    if (partID == "optimized-fullscreen-button")
-        return wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenButton);
-
-    if (partID == "optimized-fullscreen-return-button")
-        return wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenReturnButton);
-
-    if (partID == "optimized-fullscreen-placeholder")
-        return wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenPlaceholder);
-
-    if (partID == "optimized-fullscreen-placeholder-text")
-        return wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenPlaceholderText);
-#else
-    UNUSED_PARAM(partID);
-#endif
-
-    return emptyString();
-}
-
 String MediaControlsHost::generateUUID() const
 {
     return createCanonicalUUIDString();

Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h	2015-06-11 20:53:49 UTC (rev 185472)
@@ -70,9 +70,6 @@
     void updateCaptionDisplaySizes();
     void enteredFullscreen();
     void exitedFullscreen();
-    void enterFullscreenOptimized();
-    bool optimizedFullscreenSupported();
-    String mediaUIImageData(const String&) const;
 
     String externalDeviceDisplayName() const;
     String externalDeviceType() const;

Modified: trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl	2015-06-11 20:53:49 UTC (rev 185472)
@@ -29,13 +29,6 @@
     "tvout"
 };
 
-enum MediaUIPartID {
-    "optimized-fullscreen-button",
-    "optimized-fullscreen-return-button",
-    "optimized-fullscreen-placeholder",
-    "optimized-fullscreen-placeholder-text"
-};
-
 [
     NoInterfaceObject,
     Conditional=MEDIA_CONTROLS_SCRIPT,
@@ -62,8 +55,6 @@
     void updateTextTrackContainer();
     void enteredFullscreen();
     void exitedFullscreen();
-    void enterFullscreenOptimized();
-    DOMString mediaUIImageData(MediaUIPartID partID);
 
     DOMString generateUUID();
 };

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css	2015-06-11 20:53:49 UTC (rev 185472)
@@ -437,8 +437,8 @@
     margin-top: 6px;
 }
 
-video::-webkit-media-controls-optimized-fullscreen-button,
-audio::-webkit-media-controls-optimized-fullscreen-button {
+video::-webkit-media-controls-picture-in-picture-button,
+audio::-webkit-media-controls-picture-in-picture-button {
     background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 15 15" transform="rotate(90,0,0)"><linearGradient id="gradient" x2="0" y2="100%" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(216, 216, 216)"/><stop offset="0.4375" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(208, 208, 208)"/><stop offset="0.5" stop-color="rgb(200, 200, 200)"/><stop offset="1" stop-color="rgb(208, 208, 208)"/></linearGradient><path d="M 7,8 m 0,6 -2,-2 -2,2 c 0,0 -1,1 -2,0 -1,-1 0,-2 0,-2 l 2,-2 -2,-2 6,0 z" style="fill:url(#gradient) "/><path d="M 8,7 m 0,-6 2,2 2,-2 c
  0,0 1,-1 2,0 1,1 0,2 0,2 l -2,2 2,2 -6,0 z" style="fill:url(#gradient) "/></svg>');
     margin: 0 7px;
 }

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.js	2015-06-11 20:53:49 UTC (rev 185472)
@@ -54,7 +54,7 @@
 
 /* Globals */
 Controller.gSimulateWirelessPlaybackTarget = false; // Used for testing when there are no wireless targets.
-Controller.gSimulateOptimizedFullscreenAvailable = false; // Used for testing when optimized fullscreen is not available.
+Controller.gSimulatePictureInPictureAvailable = false; // Used for testing when picture-in-picture is not available.
 
 Controller.prototype = {
 
@@ -99,10 +99,10 @@
         list: 'list',
         muteBox: 'mute-box',
         muted: 'muted',
-        optimized: 'optimized',
         paused: 'paused',
+        pictureInPicture: 'picture-in-picture',
         playing: 'playing',
-        returnFromOptimized: 'return-from-optimized',
+        returnFromPictureInPicture: 'return-from-picture-in-picture',
         selected: 'selected',
         show: 'show',
         small: 'small',
@@ -464,14 +464,15 @@
         fullscreenButton.setAttribute('aria-label', this.UIString('Display Full Screen'));
         this.listenFor(fullscreenButton, 'click', this.handleFullscreenButtonClicked);
 
-        var optimizedFullscreenButton = this.controls.optimizedFullscreenButton = document.createElement('button');
-        optimizedFullscreenButton.setAttribute('pseudo', '-webkit-media-controls-optimized-fullscreen-button');
-        optimizedFullscreenButton.setAttribute('aria-label', this.UIString('Display Optimized Full Screen'));
-        this.listenFor(optimizedFullscreenButton, 'click', this.handleOptimizedFullscreenButtonClicked);
+        var pictureInPictureButton = this.controls.pictureInPictureButton = document.createElement('button');
+        pictureInPictureButton.setAttribute('pseudo', '-webkit-media-controls-picture-in-picture-button');
+        pictureInPictureButton.setAttribute('aria-label', this.UIString('Display Picture in Picture'));
+        this.listenFor(pictureInPictureButton, 'click', this.handlePictureInPictureButtonClicked);
 
         var inlinePlaybackPlaceholder = this.controls.inlinePlaybackPlaceholder = document.createElement('div');
         inlinePlaybackPlaceholder.setAttribute('pseudo', '-webkit-media-controls-wireless-playback-status');
-        if (!Controller.gSimulateOptimizedFullscreenAvailable)
+        inlinePlaybackPlaceholder.setAttribute('aria-label', this.UIString('Video Playback Placeholder'));
+        if (!Controller.gSimulatePictureInPictureAvailable)
             inlinePlaybackPlaceholder.classList.add(this.ClassNames.hidden);
 
         var inlinePlaybackPlaceholderText = this.controls.inlinePlaybackPlaceholderText = document.createElement('div');
@@ -1025,7 +1026,7 @@
     {
         var shouldBeHidden = !this.video.webkitSupportsFullscreen || !this.hasVideo();
         this.controls.fullscreenButton.classList.toggle(this.ClassNames.hidden, shouldBeHidden && !this.isFullScreen());
-        this.controls.optimizedFullscreenButton.classList.toggle(this.ClassNames.hidden, shouldBeHidden);
+        this.controls.pictureInPictureButton.classList.toggle(this.ClassNames.hidden, shouldBeHidden);
         this.setNeedsUpdateForDisplayedWidth();
         this.updateLayoutForDisplayedWidth();
     },
@@ -1441,7 +1442,7 @@
 
         // Filter all the buttons which are not explicitly hidden.
         var buttons = [this.controls.playButton, this.controls.rewindButton, this.controls.captionButton,
-                       this.controls.fullscreenButton, this.controls.optimizedFullscreenButton,
+                       this.controls.fullscreenButton, this.controls.pictureInPictureButton,
                        this.controls.wirelessTargetPicker, this.controls.muteBox];
         var visibleButtons = buttons.filter(this.isControlVisible, this);
 
@@ -1455,7 +1456,7 @@
         this.controls.remainingTime.classList.toggle(this.ClassNames.dropped, shouldDropTimeline);
 
         // Then controls in the following order:
-        var removeOrder = [this.controls.wirelessTargetPicker, this.controls.optimizedFullscreenButton,
+        var removeOrder = [this.controls.wirelessTargetPicker, this.controls.pictureInPictureButton,
                            this.controls.captionButton, this.controls.muteBox, this.controls.rewindButton,
                            this.controls.fullscreenButton];
         removeOrder.forEach(function(control) {
@@ -1884,7 +1885,7 @@
             this.hideTimer = setTimeout(this.hideControls.bind(this), this.HideControlsDelay);
     },
 
-    handleOptimizedFullscreenButtonClicked: function(event) {
+    handlePictureInPictureButtonClicked: function(event) {
     },
 
     currentPlaybackTargetIsWireless: function() {

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.css (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.css	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.css	2015-06-11 20:53:49 UTC (rev 185472)
@@ -225,8 +225,8 @@
 audio::-webkit-media-controls-fullscreen-button,
 audio::-webkit-media-controls-wireless-playback-picker-button,
 video::-webkit-media-controls-wireless-playback-picker-button,
-video::-webkit-media-controls-optimized-fullscreen-button,
-audio::-webkit-media-controls-optimized-fullscreen-button {
+video::-webkit-media-controls-picture-in-picture-button,
+audio::-webkit-media-controls-picture-in-picture-button {
     -webkit-appearance: none;
     display: block;
     padding: 0;
@@ -250,8 +250,8 @@
 audio::-webkit-media-controls-fullscreen-button:active,
 audio::-webkit-media-controls-wireless-playback-picker-button:active,
 video::-webkit-media-controls-wireless-playback-picker-button:active,
-video::-webkit-media-controls-optimized-fullscreen-button:active,
-audio::-webkit-media-controls-optimized-fullscreen-button:active {
+video::-webkit-media-controls-picture-in-picture-button:active,
+audio::-webkit-media-controls-picture-in-picture-button:active {
     mix-blend-mode: normal;
     opacity: 1;
     background-color: white;
@@ -320,14 +320,20 @@
     background-color: -apple-system-blue;
 }
 
-/* ================== OPTIMIZED FULLSCREEN BUTTON ====================== */
+/* ================== PICTURE IN PICTURE BUTTON ====================== */
 
-video::-webkit-media-controls-optimized-fullscreen-button {
+video::-webkit-media-controls-picture-in-picture-button {
     width: 35px;
     height: 44px;
     -webkit-order: 5;
+    -webkit-mask-size: 23px 18px;
+    -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAkCAYAAAD2IghRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANhJREFUeNrslzEOwjAMRR2UA3AQ7sLKwsTEglg6sTIgLgs7qCZBRbIsWpDayHH1v/SHJmn0ZFutHYiIqX4F+cDMtCCncgseh1JiLJ5lxH+Br2qGZ2Gpa/IjeVMZ1/ur0ndgLdaeydsvF9/7LrYEz7oo+J0X8Kyz2GuT917As04K/uAFPKtR5xov4FnHLuIy+i7AqavxVr1jAh7H/HbRZE3QZGndBvaW1k1Z6VqdHtjzIBELZrHoKIfRzbpUxqY4IOJzLpWAiAMc4AAHOMAB/m9T9Bn1veklwACtBYmnlYBaIQAAAABJRU5ErkJggg==');
 }
 
+video::-webkit-media-controls-picture-in-picture-button.return-from-picture-in-picture {
+    -webkit-mask-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAkCAYAAAD2IghRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOZJREFUeNpiZGBg+M8w+AEjMuf///8MTAxDFAxZh7Pgi5IBBv+HZYgPS4f/JwJ/GA1xCjMnIfAejf9poHPvfyy5GFvS6KdjyYPLXeAKiFiH/0ZiT6GT46ni8CAg/onEn0WH/EEVh4OAL5rjFwIx81BwOAh4APE3JPGlNHQ8VR0OAs5A/BVJbjUQsw0Fh4OAHRB/RpLPG0wOJwSsoTXnfBolF5o5HARUBqL2pYbDB6bGBDqchYYlAk27cqPt8YFuHVIaxYyjIT6ckwrjaIiPOnzU4aMOH3X4qMNHHU5sowjWmxhqACDAAI3lmdvpn4aTAAAAAElFTkSuQmCC');
+}
+
 /* ================== SPACER ====================== */
 
 video::-webkit-media-controls-spacer,
@@ -560,7 +566,7 @@
     font-style: italic;
 }
 
-/* ==================== AIRPLAY PLACARD ==================== */
+/* ==================== PLAYBACK PLACARD ==================== */
 
 video::-webkit-media-controls-wireless-playback-status,
 audio::-webkit-media-controls-wireless-playback-status {
@@ -638,21 +644,22 @@
     display: none;
 }
 
-video::-webkit-media-controls-wireless-playback-status.optimized,
-audio::-webkit-media-controls-wireless-playback-status.optimized
+video::-webkit-media-controls-wireless-playback-status.picture-in-picture,
+audio::-webkit-media-controls-wireless-playback-status.picture-in-picture
 {
     background-size: 304px auto;
     background-position: 50% calc(.5 * (100% - 25px));
+    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 304 150\"><g fill=\"none\" stroke=\"#3c3c3c\" stroke-width=\"3\"><path d=\"m 172,106 -81,0 c -3.5,0 -6,-2.5 -6,-6 l 0,-89 c 0,-3.5 2.5,-6 6,-6 l 122,0 c 3.5,0 6,2.5 6,6 l 0,57\" /><path d=\"m 233,119 -53,0 c -3,0 -3,-0 -3,-3 l 0,-40 c 0,-3 0,-3 3,-3 l 53,0 c 3,0 3,0 3,3 l 0,40 c 0,3 0,3 -3,3 z\" /></g></svg>');
 }
 
-video::-webkit-media-controls-wireless-playback-text-top.optimized,
-audio::-webkit-media-controls-wireless-playback-text-top.optimized {
+video::-webkit-media-controls-wireless-playback-text-top.picture-in-picture,
+audio::-webkit-media-controls-wireless-playback-text-top.picture-in-picture {
     top: initial;
     bottom: 0;
 }
 
-video::-webkit-media-controls-wireless-playback-text-bottom.optimized,
-audio::-webkit-media-controls-wireless-playback-text-bottom.optimized {
+video::-webkit-media-controls-wireless-playback-text-bottom.picture-in-picture,
+audio::-webkit-media-controls-wireless-playback-text-bottom.picture-in-picture {
     display: none;
 }
 

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js (185471 => 185472)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js	2015-06-11 20:53:49 UTC (rev 185472)
@@ -125,9 +125,9 @@
         this.listenFor(this.controls.fullscreenButton, 'touchstart', this.handleFullscreenTouchStart);
         this.listenFor(this.controls.fullscreenButton, 'touchend', this.handleFullscreenTouchEnd);
         this.listenFor(this.controls.fullscreenButton, 'touchcancel', this.handleFullscreenTouchCancel);
-        this.listenFor(this.controls.optimizedFullscreenButton, 'touchstart', this.handleOptimizedFullscreenTouchStart);
-        this.listenFor(this.controls.optimizedFullscreenButton, 'touchend', this.handleOptimizedFullscreenTouchEnd);
-        this.listenFor(this.controls.optimizedFullscreenButton, 'touchcancel', this.handleOptimizedFullscreenTouchCancel);
+        this.listenFor(this.controls.pictureInPictureButton, 'touchstart', this.handlePictureInPictureTouchStart);
+        this.listenFor(this.controls.pictureInPictureButton, 'touchend', this.handlePictureInPictureTouchEnd);
+        this.listenFor(this.controls.pictureInPictureButton, 'touchcancel', this.handlePictureInPictureTouchCancel);
         this.listenFor(this.controls.timeline, 'touchstart', this.handleTimelineTouchStart);
         this.stopListeningFor(this.controls.playButton, 'click', this.handlePlayButtonClicked);
 
@@ -179,8 +179,8 @@
             // Hide the scrubber on audio until the user starts playing.
             this.controls.timelineBox.classList.add(this.ClassNames.hidden);
         } else {
-            if (Controller.gSimulateOptimizedFullscreenAvailable || ('webkitSupportsPresentationMode' in this.video && this.video.webkitSupportsPresentationMode('picture-in-picture')))
-                this.controls.panel.appendChild(this.controls.optimizedFullscreenButton);
+            if (Controller.gSimulatePictureInPictureAvailable || ('webkitSupportsPresentationMode' in this.video && this.video.webkitSupportsPresentationMode('picture-in-picture')))
+                this.controls.panel.appendChild(this.controls.pictureInPictureButton);
             this.controls.panel.appendChild(this.controls.fullscreenButton);
         }
     },
@@ -428,7 +428,7 @@
         return true;
     },
 
-    handleOptimizedFullscreenButtonClicked: function(event) {
+    handlePictureInPictureButtonClicked: function(event) {
         if (!('webkitSetPresentationMode' in this.video))
             return;
 
@@ -438,20 +438,20 @@
             this.video.webkitSetPresentationMode('picture-in-picture');
     },
 
-    handleOptimizedFullscreenTouchStart: function() {
-        this.controls.optimizedFullscreenButton.classList.add('active');
+    handlePictureInPictureTouchStart: function() {
+        this.controls.pictureInPictureButton.classList.add('active');
     },
 
-    handleOptimizedFullscreenTouchEnd: function(event) {
-        this.controls.optimizedFullscreenButton.classList.remove('active');
+    handlePictureInPictureTouchEnd: function(event) {
+        this.controls.pictureInPictureButton.classList.remove('active');
 
-        this.handleOptimizedFullscreenButtonClicked();
+        this.handlePictureInPictureButtonClicked();
 
         return true;
     },
 
-    handleOptimizedFullscreenTouchCancel: function(event) {
-        this.controls.optimizedFullscreenButton.classList.remove('active');
+    handlePictureInPictureTouchCancel: function(event) {
+        this.controls.pictureInPictureButton.classList.remove('active');
         return true;
     },
 
@@ -562,35 +562,30 @@
 
         switch (presentationMode) {
             case 'inline':
-                this.controls.inlinePlaybackPlaceholder.style.backgroundImage = "";
                 this.controls.inlinePlaybackPlaceholder.classList.add(this.ClassNames.hidden);
-                this.controls.inlinePlaybackPlaceholder.classList.remove(this.ClassNames.optimized);
-                this.controls.inlinePlaybackPlaceholderTextTop.classList.remove(this.ClassNames.optimized);
-                this.controls.inlinePlaybackPlaceholderTextBottom.classList.remove(this.ClassNames.optimized);
+                this.controls.inlinePlaybackPlaceholder.classList.remove(this.ClassNames.pictureInPicture);
+                this.controls.inlinePlaybackPlaceholderTextTop.classList.remove(this.ClassNames.pictureInPicture);
+                this.controls.inlinePlaybackPlaceholderTextBottom.classList.remove(this.ClassNames.pictureInPicture);
 
-                this.controls.optimizedFullscreenButton.classList.remove(this.ClassNames.returnFromOptimized);
+                this.controls.pictureInPictureButton.classList.remove(this.ClassNames.returnFromPictureInPicture);
                 break;
             case 'picture-in-picture':
-                var backgroundImage = "url('" + this.host.mediaUIImageData("optimized-fullscreen-placeholder") + "')";
-                this.controls.inlinePlaybackPlaceholder.style.backgroundImage = backgroundImage;
-                this.controls.inlinePlaybackPlaceholder.setAttribute('aria-label', "video playback placeholder");
-                this.controls.inlinePlaybackPlaceholder.classList.add(this.ClassNames.optimized);
+                this.controls.inlinePlaybackPlaceholder.classList.add(this.ClassNames.pictureInPicture);
                 this.controls.inlinePlaybackPlaceholder.classList.remove(this.ClassNames.hidden);
 
-                this.controls.inlinePlaybackPlaceholderTextTop.innerText = this.host.mediaUIImageData("optimized-fullscreen-placeholder-text");
-                this.controls.inlinePlaybackPlaceholderTextTop.classList.add(this.ClassNames.optimized);
+                this.controls.inlinePlaybackPlaceholderTextTop.innerText = this.UIString('This video is playing in Picture in Picture');
+                this.controls.inlinePlaybackPlaceholderTextTop.classList.add(this.ClassNames.pictureInPicture);
                 this.controls.inlinePlaybackPlaceholderTextBottom.innerText = "";
-                this.controls.inlinePlaybackPlaceholderTextBottom.classList.add(this.ClassNames.optimized);
+                this.controls.inlinePlaybackPlaceholderTextBottom.classList.add(this.ClassNames.pictureInPicture);
 
-                this.controls.optimizedFullscreenButton.classList.add(this.ClassNames.returnFromOptimized);
+                this.controls.pictureInPictureButton.classList.add(this.ClassNames.returnFromPictureInPicture);
                 break;
             default:
-                this.controls.inlinePlaybackPlaceholder.style.backgroundImage = "";
-                this.controls.inlinePlaybackPlaceholder.classList.remove(this.ClassNames.optimized);
-                this.controls.inlinePlaybackPlaceholderTextTop.classList.remove(this.ClassNames.optimized);
-                this.controls.inlinePlaybackPlaceholderTextBottom.classList.remove(this.ClassNames.optimized);
+                this.controls.inlinePlaybackPlaceholder.classList.remove(this.ClassNames.pictureInPicture);
+                this.controls.inlinePlaybackPlaceholderTextTop.classList.remove(this.ClassNames.pictureInPicture);
+                this.controls.inlinePlaybackPlaceholderTextBottom.classList.remove(this.ClassNames.pictureInPicture);
 
-                this.controls.optimizedFullscreenButton.classList.remove(this.ClassNames.returnFromOptimized);
+                this.controls.pictureInPictureButton.classList.remove(this.ClassNames.returnFromPictureInPicture);
                 break;
         }
 

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (185471 => 185472)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2015-06-11 20:53:49 UTC (rev 185472)
@@ -5138,12 +5138,6 @@
     }
 }
 
-void HTMLMediaElement::enterFullscreenOptimized()
-{
-    if (m_mediaSession->allowsAlternateFullscreen(*this))
-        enterFullscreen(VideoFullscreenModeOptimized);
-}
-
 void HTMLMediaElement::didBecomeFullscreenElement()
 {
     if (hasMediaControls())

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (185471 => 185472)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2015-06-11 20:53:49 UTC (rev 185472)
@@ -368,7 +368,6 @@
     void enterFullscreen(VideoFullscreenMode);
     virtual void enterFullscreen() override;
     WEBCORE_EXPORT void exitFullscreen();
-    void enterFullscreenOptimized();
 
     virtual bool hasClosedCaptions() const override;
     virtual bool closedCaptionsVisible() const override;

Modified: trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h (185471 => 185472)


--- trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.h	2015-06-11 20:53:49 UTC (rev 185472)
@@ -78,13 +78,4 @@
 
 extern bool (*wkIsOptimizedFullscreenSupported)(void);
 
-typedef enum {
-    wkMediaUIPartOptimizedFullscreenButton = 0,
-    wkMediaUIPartOptimizedFullscreenReturnButton,
-    wkMediaUIPartOptimizedFullscreenPlaceholder,
-    wkMediaUIPartOptimizedFullscreenPlaceholderText
-} wkMediaUIPart;
-extern CFStringRef (*wkGetMediaUIImageData)(int wkMediaUIPart);
-
-
 #endif // WebCoreSystemInterfaceIOS_h

Modified: trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm (185471 => 185472)


--- trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm	2015-06-11 20:53:49 UTC (rev 185472)
@@ -117,7 +117,6 @@
 WEBCORE_EXPORT CFStringRef (*wkGetVendorNameForNavigator)(void);
 
 WEBCORE_EXPORT bool (*wkIsOptimizedFullscreenSupported)(void);
-WEBCORE_EXPORT CFStringRef (*wkGetMediaUIImageData)(int);
 
 WEBCORE_EXPORT int (*wkExernalDeviceTypeForPlayer)(AVPlayer *);
 WEBCORE_EXPORT NSString *(*wkExernalDeviceDisplayNameForPlayer)(AVPlayer *);

Modified: trunk/Source/WebCore/rendering/RenderThemeIOS.mm (185471 => 185472)


--- trunk/Source/WebCore/rendering/RenderThemeIOS.mm	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebCore/rendering/RenderThemeIOS.mm	2015-06-11 20:53:49 UTC (rev 185472)
@@ -1285,8 +1285,6 @@
     if (m_mediaControlsStyleSheet.isEmpty()) {
         StringBuilder builder;
         builder.append([NSString stringWithContentsOfFile:[[NSBundle bundleForClass:[WebCoreRenderThemeBundle class]] pathForResource:@"mediaControlsiOS" ofType:@"css"] encoding:NSUTF8StringEncoding error:nil]);
-        builder.append(wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenButton));
-        builder.append(wkGetMediaUIImageData(wkMediaUIPartOptimizedFullscreenReturnButton));
         m_mediaControlsStyleSheet = builder.toString();
     }
     return m_mediaControlsStyleSheet;

Modified: trunk/Source/WebKit/mac/ChangeLog (185471 => 185472)


--- trunk/Source/WebKit/mac/ChangeLog	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebKit/mac/ChangeLog	2015-06-11 20:53:49 UTC (rev 185472)
@@ -1,3 +1,14 @@
+2015-06-11  Jon Lee  <[email protected]>
+
+        Update media controls JS and CSS to use picture-in-picture
+        https://bugs.webkit.org/show_bug.cgi?id=145827
+        <rdar://problem/21311576>
+
+        Reviewed by Dean Jackson.
+
+        * WebCoreSupport/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface): Deleted GetMediaUIImageData.
+
 2015-06-10  Jon Honeycutt  <[email protected]>
 
         Meta refresh preference is not respected on fast path WebView

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm (185471 => 185472)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm	2015-06-11 20:53:49 UTC (rev 185472)
@@ -125,7 +125,6 @@
     INIT(GetScreenScaleFactor);
     INIT(IsGB18030ComplianceRequired);
     INIT(IsOptimizedFullscreenSupported);
-    INIT(GetMediaUIImageData);
 #endif
 
 #if !PLATFORM(IOS)

Modified: trunk/Source/WebKit2/ChangeLog (185471 => 185472)


--- trunk/Source/WebKit2/ChangeLog	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebKit2/ChangeLog	2015-06-11 20:53:49 UTC (rev 185472)
@@ -1,3 +1,14 @@
+2015-06-11  Jon Lee  <[email protected]>
+
+        Update media controls JS and CSS to use picture-in-picture
+        https://bugs.webkit.org/show_bug.cgi?id=145827
+        <rdar://problem/21311576>
+
+        Reviewed by Dean Jackson.
+
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface): Deleted GetMediaUIImageData.
+
 2015-06-11  Alex Christensen  <[email protected]>
 
         Speculative build fix for GTK after r185463.

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm (185471 => 185472)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2015-06-11 20:51:11 UTC (rev 185471)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm	2015-06-11 20:53:49 UTC (rev 185472)
@@ -191,7 +191,6 @@
         INIT(GetScreenScaleFactor);
         INIT(IsGB18030ComplianceRequired);
         INIT(IsOptimizedFullscreenSupported);
-        INIT(GetMediaUIImageData);
 #endif
 
 #if ENABLE(PUBLIC_SUFFIX_LIST)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to