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();