Title: [88492] branches/safari-534-branch

Diff

Modified: branches/safari-534-branch/LayoutTests/ChangeLog (88491 => 88492)


--- branches/safari-534-branch/LayoutTests/ChangeLog	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/LayoutTests/ChangeLog	2011-06-09 22:44:21 UTC (rev 88492)
@@ -1,3 +1,18 @@
+2011-06-02  Lucas Forschler  <lforsch...@apple.com>
+
+    Merged 88468.
+
+    2011-06-02  Jer Noble  <jer.no...@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        REGRESSION: Page layout messed up after exiting full screen after video ends at jerryseinfeld.com
+        https://bugs.webkit.org/show_bug.cgi?id=61911
+        <rdar://problem/9523017>
+
+        * fullscreen/full-screen-video-offset-expected.txt: Added.
+        * fullscreen/full-screen-video-offset.html: Added.
+
 2011-06-07  Lucas Forschler  <lforsch...@apple.com>
 
     Merged 88104.

Copied: branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset-expected.txt (from rev 88468, trunk/LayoutTests/fullscreen/full-screen-video-offset-expected.txt) (0 => 88492)


--- branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset-expected.txt	                        (rev 0)
+++ branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset-expected.txt	2011-06-09 22:44:21 UTC (rev 88492)
@@ -0,0 +1,9 @@
+This layout test checks that the offset size and position of a video element does not change when the it enters full-screen mode. Press go full-screen to begin.
+EVENT(webkitfullscreenchange)
+EXPECTED (document.webkitCurrentFullScreenElement == '[object HTMLVideoElement]') OK
+EXPECTED (video.offsetLeft == '8') OK
+EXPECTED (video.offsetTop == '48') OK
+EXPECTED (video.offsetWidth == '300') OK
+EXPECTED (video.offsetHeight == '150') OK
+END OF TEST
+

Copied: branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset.html (from rev 88468, trunk/LayoutTests/fullscreen/full-screen-video-offset.html) (0 => 88492)


--- branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset.html	                        (rev 0)
+++ branches/safari-534-branch/LayoutTests/fullscreen/full-screen-video-offset.html	2011-06-09 22:44:21 UTC (rev 88492)
@@ -0,0 +1,30 @@
+<body _onload_="init()">
+    <div>This layout test checks that the offset size and position of a video element does not change when the it enters full-screen mode.  Press <button _onclick_="video.webkitRequestFullScreen()">go full-screen</a> to begin.</div>
+    <video id="video" controls></video>
+    <script src=""
+    <script>
+        var video = document.getElementById('video');
+        function init() {
+
+            // Bail out early if the full screen API is not enabled or is missing:
+            if (Element.prototype.webkitRequestFullScreen == undefined) {
+                logResult(false, "Element.prototype.webkitRequestFullScreen == undefined");
+                endTest();
+            } else {
+                var videoState = {'offsetLeft': video.offsetLeft, 'offsetTop': video.offsetTop, 'offsetWidth': video.offsetWidth, 'offsetHeight': video.offsetHeight };
+
+                var fullscreenChanged = function(event)
+                {
+                    testExpected("document.webkitCurrentFullScreenElement", video);
+                    testExpected("video.offsetLeft", videoState.offsetLeft);
+                    testExpected("video.offsetTop", videoState.offsetTop);
+                    testExpected("video.offsetWidth", videoState.offsetWidth);
+                    testExpected("video.offsetHeight", videoState.offsetHeight);
+                    endTest();
+                };
+                waitForEvent(document, 'webkitfullscreenchange', fullscreenChanged);    
+                runWithKeyDown(function(){video.webkitRequestFullScreen()});
+            }
+        }
+    </script>
+</body>

Modified: branches/safari-534-branch/Source/WebCore/ChangeLog (88491 => 88492)


--- branches/safari-534-branch/Source/WebCore/ChangeLog	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/Source/WebCore/ChangeLog	2011-06-09 22:44:21 UTC (rev 88492)
@@ -1,5 +1,36 @@
 2011-06-02  Lucas Forschler  <lforsch...@apple.com>
 
+    Merged 88468.
+
+    2011-06-02  Jer Noble  <jer.no...@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        REGRESSION: Page layout messed up after exiting full screen after video ends at jerryseinfeld.com
+        https://bugs.webkit.org/show_bug.cgi?id=61911
+        <rdar://problem/9523017>
+
+        Test: fullscreen/full-screen-video-offset.html
+
+        When the video element is taken full-screen in the new element full-screen API, return the
+        offset width and height of the placeholder renderer which is filling in for the full-screen
+        element.  To do so, override offsetWidth, Height, Left, and Top from Element.  These are
+        non-virtual functions, so make them virtual.
+
+        * dom/Element.cpp:
+        (WebCore::Element::adjustForLocalZoom): Made into a class-static function.
+        * dom/Element.h: Made offset functions virtual.
+        * html/HTMLMediaElement.cpp:
+        (WebCore::elementPlaceholder): Added; utility function.
+        (WebCore::HTMLMediaElement::offsetLeft): Added; virtual override of the 
+            Element function. Will be called directly via _javascript_.
+        (WebCore::HTMLMediaElement::offsetTop): Ditto.
+        (WebCore::HTMLMediaElement::offsetWidth): Ditto.
+        (WebCore::HTMLMediaElement::offsetHeight): Ditto.
+        * html/HTMLMediaElement.h:
+
+2011-06-02  Lucas Forschler  <lforsch...@apple.com>
+
     Merged 88475.
 
     2011-06-09  Simon Fraser  <simon.fra...@apple.com>

Modified: branches/safari-534-branch/Source/WebCore/dom/Element.cpp (88491 => 88492)


--- branches/safari-534-branch/Source/WebCore/dom/Element.cpp	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/Source/WebCore/dom/Element.cpp	2011-06-09 22:44:21 UTC (rev 88492)
@@ -345,7 +345,7 @@
     return zoomFactor;
 }
 
-static int adjustForLocalZoom(int value, RenderObject* renderer)
+int Element::adjustForLocalZoom(int value, RenderObject* renderer)
 {
     float zoomFactor = localZoomForRenderer(renderer);
     if (zoomFactor == 1)

Modified: branches/safari-534-branch/Source/WebCore/dom/Element.h (88491 => 88492)


--- branches/safari-534-branch/Source/WebCore/dom/Element.h	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/Source/WebCore/dom/Element.h	2011-06-09 22:44:21 UTC (rev 88492)
@@ -151,10 +151,10 @@
     void scrollByLines(int lines);
     void scrollByPages(int pages);
 
-    int offsetLeft();
-    int offsetTop();
-    int offsetWidth();
-    int offsetHeight();
+    virtual int offsetLeft();
+    virtual int offsetTop();
+    virtual int offsetWidth();
+    virtual int offsetHeight();
     Element* offsetParent();
     int clientLeft();
     int clientTop();
@@ -384,6 +384,7 @@
     
     void idAttributeChanged(Attribute*);
 
+    static int adjustForLocalZoom(int value, RenderObject* renderer);
 private:
     void scrollByUnits(int units, ScrollGranularity);
 

Modified: branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.cpp (88491 => 88492)


--- branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.cpp	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.cpp	2011-06-09 22:44:21 UTC (rev 88492)
@@ -58,6 +58,7 @@
 #include "MouseEvent.h"
 #include "MIMETypeRegistry.h"
 #include "Page.h"
+#include "RenderFullScreen.h"
 #include "RenderVideo.h"
 #include "RenderView.h"
 #include "ScriptEventListener.h"
@@ -2727,7 +2728,47 @@
     return 0;
 }
 
+static RenderBlock* elementPlaceholder(Element* element)
+{
+    RenderObject* renderer = element->renderer();
+    RenderObject* parent = renderer ? renderer->parent() : 0;
+    RenderFullScreen* fullScreen = parent && parent->isRenderFullScreen() ? toRenderFullScreen(parent) : 0;
 
+    return fullScreen ? fullScreen->placeholder() : 0;
 }
 
+int HTMLMediaElement::offsetLeft()
+{
+    int left = Element::offsetLeft();
+    if (RenderBlock* block = elementPlaceholder(this))
+        left = Element::adjustForLocalZoom(block->offsetLeft(), block);
+    return left;
+}
+
+int HTMLMediaElement::offsetTop()
+{
+    int top = Element::offsetTop();
+    if (RenderBlock* block = elementPlaceholder(this))
+        top = Element::adjustForLocalZoom(block->offsetTop(), block);
+    return top;
+}
+
+int HTMLMediaElement::offsetWidth()
+{
+    int width = Element::offsetWidth();
+    if (RenderBlock* block = elementPlaceholder(this))
+        width = Element::adjustForLocalZoom(block->offsetWidth(), block);
+    return width;
+}
+
+int HTMLMediaElement::offsetHeight()
+{
+    int height = Element::offsetHeight();
+    if (RenderBlock* block = elementPlaceholder(this))
+        height = Element::adjustForLocalZoom(block->offsetHeight(), block);
+    return height;
+}
+
+}
+
 #endif

Modified: branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.h (88491 => 88492)


--- branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.h	2011-06-09 22:30:59 UTC (rev 88491)
+++ branches/safari-534-branch/Source/WebCore/html/HTMLMediaElement.h	2011-06-09 22:44:21 UTC (rev 88492)
@@ -203,6 +203,12 @@
 
     bool isPlaying() const { return m_playing; }
 
+    // Override Element implementations
+    virtual int offsetLeft();
+    virtual int offsetTop();
+    virtual int offsetWidth();
+    virtual int offsetHeight();
+
 protected:
     HTMLMediaElement(const QualifiedName&, Document*);
     virtual ~HTMLMediaElement();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to