Title: [114790] trunk
Revision
114790
Author
jer.no...@apple.com
Date
2012-04-20 15:33:46 -0700 (Fri, 20 Apr 2012)

Log Message

apple.com top navigation bar appears inside video during full screen exit animation
https://bugs.webkit.org/show_bug.cgi?id=83095

Reviewed by Eric Carlson.

Source/WebCore:

Test: fullscreen/full-screen-exit-animation-stacking-context.html

Only tell ancestors of the full screen element that they are no longer ancestors once
the full screen animation is complete:
* dom/Document.cpp:
(WebCore::Document::webkitWillExitFullScreenForElement):
(WebCore::Document::webkitDidExitFullScreenForElement):

To facilitate writing reproducible LayoutTests, expose webkitWill/Did/Enter/ExitFullScreen
from the Internals object, so scripts can call them explicitly:
* testing/Internals.cpp:
(WebCore::Internals::webkitWillEnterFullScreenForElement): Call the Document equivalent.
(WebCore::Internals::webkitDidEnterFullScreenForElement): Ditto.
(WebCore::Internals::webkitWillExitFullScreenForElement): Ditto.
(WebCore::Internals::webkitDidExitFullScreenForElement): Ditto.
* testing/Internals.h:
* testing/Internals.idl:

Source/WebKit2:

Add new WebCore symbols needed by DumpRenderTree to exported symbol list.

* win/WebKit2.def:
* win/WebKit2CFLite.def:

Tools:

Add a new LayoutTestController function, setHasCustomFullScreenBehavior(), which allows scripts to
disable the standard full screen behavior, and replace it with explicit callbacks to the relevant
Document methods from within the script.  This allows subtle timing bugs to be consistently reproduced
from within LayoutTests.

Add the new methods, hasCustomFullScreenBehavior() and setHasCustomFullScreenBehavior():
* DumpRenderTree/LayoutTestController.cpp:
(setHasCustomFullScreenBehaviorCallback):
(LayoutTestController::staticFunctions):
* DumpRenderTree/LayoutTestController.h:
(LayoutTestController::setHasCustomFullScreenBehavior):
(LayoutTestController::hasCustomFullScreenBehavior):
* WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
(WTR::InjectedBundlePage::enterFullScreenForElement):
(WTR::InjectedBundlePage::exitFullScreenForElement):
* WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
* WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
* WebKitTestRunner/InjectedBundle/LayoutTestController.h:
(WTR::LayoutTestController::setHasCustomFullScreenBehavior):
(WTR::LayoutTestController::hasCustomFullScreenBehavior):
* DumpRenderTree/chromium/LayoutTestController.cpp:
(LayoutTestController::LayoutTestController):
(LayoutTestController::reset):
* DumpRenderTree/chromium/LayoutTestController.h:
(LayoutTestController::setHasCustomFullScreenBehavior):
(LayoutTestController::hasCustomFullScreenBehavior):

Query the new methods before calling will/did/Enter/ExitFullScreen:
* DumpRenderTree/chromium/WebViewHost.cpp:
(WebViewHost::enterFullScreenNow):
(WebViewHost::exitFullScreenNow):
* DumpRenderTree/mac/UIDelegate.mm:
(-[UIDelegate webView:enterFullScreenForElement:listener:]):
(-[UIDelegate webView:exitFullScreenForElement:listener:]):

LayoutTests:

* fullscreen/full-screen-exit-animation-stacking-context-expected.txt: Added.
* fullscreen/full-screen-exit-animation-stacking-context.html: Added.
* platform/mac/fullscreen/full-screen-exit-animation-stacking-context-expected.png: Added.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (114789 => 114790)


--- trunk/LayoutTests/ChangeLog	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/LayoutTests/ChangeLog	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1,3 +1,14 @@
+2012-04-04  Jer Noble  <jer.no...@apple.com>
+
+        apple.com top navigation bar appears inside video during full screen exit animation
+        https://bugs.webkit.org/show_bug.cgi?id=83095
+
+        Reviewed by Eric Carlson.
+
+        * fullscreen/full-screen-exit-animation-stacking-context-expected.txt: Added.
+        * fullscreen/full-screen-exit-animation-stacking-context.html: Added.
+        * platform/mac/fullscreen/full-screen-exit-animation-stacking-context-expected.png: Added.
+
 2012-04-20  Dan Bernstein  <m...@apple.com>
 
         Selection highlights of lines in adjoining blocks can overlap

Modified: trunk/Source/WebCore/ChangeLog (114789 => 114790)


--- trunk/Source/WebCore/ChangeLog	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebCore/ChangeLog	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1,3 +1,28 @@
+2012-04-04  Jer Noble  <jer.no...@apple.com>
+
+        apple.com top navigation bar appears inside video during full screen exit animation
+        https://bugs.webkit.org/show_bug.cgi?id=83095
+
+        Reviewed by Eric Carlson.
+
+        Test: fullscreen/full-screen-exit-animation-stacking-context.html
+
+        Only tell ancestors of the full screen element that they are no longer ancestors once
+        the full screen animation is complete:
+        * dom/Document.cpp:
+        (WebCore::Document::webkitWillExitFullScreenForElement):
+        (WebCore::Document::webkitDidExitFullScreenForElement):
+
+        To facilitate writing reproducible LayoutTests, expose webkitWill/Did/Enter/ExitFullScreen
+        from the Internals object, so scripts can call them explicitly:
+        * testing/Internals.cpp:
+        (WebCore::Internals::webkitWillEnterFullScreenForElement): Call the Document equivalent.
+        (WebCore::Internals::webkitDidEnterFullScreenForElement): Ditto.
+        (WebCore::Internals::webkitWillExitFullScreenForElement): Ditto.
+        (WebCore::Internals::webkitDidExitFullScreenForElement): Ditto.
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
 2012-04-17  Jer Noble  <jer.no...@apple.com>
 
         media-exit-fullscreen-button (and related enums) is unnecessary and should be removed.

Modified: trunk/Source/WebCore/dom/Document.cpp (114789 => 114790)


--- trunk/Source/WebCore/dom/Document.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebCore/dom/Document.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -5483,16 +5483,19 @@
     if (!attached() || inPageCache())
         return;
 
-    m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(false);
-    
     m_fullScreenElement->willStopBeingFullscreenElement();
 }
 
 void Document::webkitDidExitFullScreenForElement(Element*)
 {
+    if (!m_fullScreenElement)
+        return;
+
     if (!attached() || inPageCache())
         return;
 
+    m_fullScreenElement->setContainsFullScreenElementOnAncestorsCrossingFrameBoundaries(false);
+
     m_areKeysEnabledInFullScreen = false;
     
     if (m_fullScreenRenderer)

Modified: trunk/Source/WebCore/testing/Internals.cpp (114789 => 114790)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -971,4 +971,33 @@
     return count;
 }
 
+#if ENABLE(FULLSCREEN_API)
+void Internals::webkitWillEnterFullScreenForElement(Document* document, Element* element)
+{
+    if (!document)
+        return;
+    document->webkitWillEnterFullScreenForElement(element);
 }
+
+void Internals::webkitDidEnterFullScreenForElement(Document* document, Element* element)
+{
+    if (!document)
+        return;
+    document->webkitDidEnterFullScreenForElement(element);
+}
+
+void Internals::webkitWillExitFullScreenForElement(Document* document, Element* element)
+{
+    if (!document)
+        return;
+    document->webkitWillExitFullScreenForElement(element);
+}
+
+void Internals::webkitDidExitFullScreenForElement(Document* document, Element* element)
+{
+    if (!document)
+        return;
+    document->webkitDidExitFullScreenForElement(element);
+}
+#endif
+}

Modified: trunk/Source/WebCore/testing/Internals.h (114789 => 114790)


--- trunk/Source/WebCore/testing/Internals.h	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebCore/testing/Internals.h	2012-04-20 22:33:46 UTC (rev 114790)
@@ -165,6 +165,13 @@
     unsigned numberOfLiveDocuments() const;
 #endif
 
+#if ENABLE(FULLSCREEN_API)
+    void webkitWillEnterFullScreenForElement(Document*, Element*);
+    void webkitDidEnterFullScreenForElement(Document*, Element*);
+    void webkitWillExitFullScreenForElement(Document*, Element*);
+    void webkitDidExitFullScreenForElement(Document*, Element*);
+#endif
+
 private:
     explicit Internals(Document*);
     DocumentMarker* markerAt(Node*, const String& markerType, unsigned index, ExceptionCode&);

Modified: trunk/Source/WebCore/testing/Internals.idl (114789 => 114790)


--- trunk/Source/WebCore/testing/Internals.idl	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-04-20 22:33:46 UTC (rev 114790)
@@ -139,6 +139,13 @@
 
         [Conditional=INSPECTOR] unsigned long numberOfLiveNodes();
         [Conditional=INSPECTOR] unsigned long numberOfLiveDocuments();
+
+#if defined(ENABLE_FULLSCREEN_API) && ENABLE_FULLSCREEN_API
+        void webkitWillEnterFullScreenForElement(in Document document, in Element element);
+        void webkitDidEnterFullScreenForElement(in Document document, in Element element);
+        void webkitWillExitFullScreenForElement(in Document document, in Element element);
+        void webkitDidExitFullScreenForElement(in Document document, in Element element);
+#endif
     };
 }
 

Modified: trunk/Source/WebKit2/ChangeLog (114789 => 114790)


--- trunk/Source/WebKit2/ChangeLog	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebKit2/ChangeLog	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1,3 +1,15 @@
+2012-04-06  Jer Noble  <jer.no...@apple.com>
+
+        apple.com top navigation bar appears inside video during full screen exit animation
+        https://bugs.webkit.org/show_bug.cgi?id=83095
+
+        Reviewed by Eric Carlson.
+
+        Add new WebCore symbols needed by DumpRenderTree to exported symbol list.
+
+        * win/WebKit2.def:
+        * win/WebKit2CFLite.def:
+
 2012-04-19  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] Ignore resources while replacing content in WebKit2 GTK+ API

Modified: trunk/Source/WebKit2/win/WebKit2.def (114789 => 114790)


--- trunk/Source/WebKit2/win/WebKit2.def	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebKit2/win/WebKit2.def	2012-04-20 22:33:46 UTC (rev 114790)
@@ -244,3 +244,7 @@
         ?willDetachPage@FrameDestructionObserver@WebCore@@UAEXXZ
         ?nodesFromRect@Document@WebCore@@QBE?AV?$PassRefPtr@VNodeList@WebCore@@@WTF@@HHIIII_N0@Z
         ?selectionStartHasMarkerFor@Editor@WebCore@@QBE_NW4MarkerType@DocumentMarker@2@HH@Z
+        ?webkitWillEnterFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitDidEnterFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitWillExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitDidExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z

Modified: trunk/Source/WebKit2/win/WebKit2CFLite.def (114789 => 114790)


--- trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/WebKit2/win/WebKit2CFLite.def	2012-04-20 22:33:46 UTC (rev 114790)
@@ -237,3 +237,7 @@
         ?willDetachPage@FrameDestructionObserver@WebCore@@UAEXXZ
         ?nodesFromRect@Document@WebCore@@QBE?AV?$PassRefPtr@VNodeList@WebCore@@@WTF@@HHIIII_N0@Z
         ?selectionStartHasMarkerFor@Editor@WebCore@@QBE_NW4MarkerType@DocumentMarker@2@HH@Z
+        ?webkitWillEnterFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitDidEnterFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitWillExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z
+        ?webkitDidExitFullScreenForElement@Document@WebCore@@QAEXPAVElement@2@@Z

Modified: trunk/Source/autotools/symbols.filter (114789 => 114790)


--- trunk/Source/autotools/symbols.filter	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Source/autotools/symbols.filter	2012-04-20 22:33:46 UTC (rev 114790)
@@ -133,6 +133,10 @@
 _ZNK7WebCore8Document13nodesFromRectEiijjjjbb;
 _ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_8NodeListE;
 _ZNK7WebCore6Editor26selectionStartHasMarkerForENS_14DocumentMarker10MarkerTypeEii;
+_ZN7WebCore8Document33webkitDidExitFullScreenForElementEPNS_7ElementE;
+_ZN7WebCore8Document34webkitDidEnterFullScreenForElementEPNS_7ElementE;
+_ZN7WebCore8Document34webkitWillExitFullScreenForElementEPNS_7ElementE;
+_ZN7WebCore8Document35webkitWillEnterFullScreenForElementEPNS_7ElementE;
 _ZN7WebCore17JSDOMGlobalObject6s_infoE;
 local:
 _Z*;

Modified: trunk/Tools/ChangeLog (114789 => 114790)


--- trunk/Tools/ChangeLog	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/ChangeLog	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1,3 +1,45 @@
+2012-04-04  Jer Noble  <jer.no...@apple.com>
+
+        apple.com top navigation bar appears inside video during full screen exit animation
+        https://bugs.webkit.org/show_bug.cgi?id=83095
+
+        Reviewed by Eric Carlson.
+
+        Add a new LayoutTestController function, setHasCustomFullScreenBehavior(), which allows scripts to
+        disable the standard full screen behavior, and replace it with explicit callbacks to the relevant
+        Document methods from within the script.  This allows subtle timing bugs to be consistently reproduced
+        from within LayoutTests.
+
+        Add the new methods, hasCustomFullScreenBehavior() and setHasCustomFullScreenBehavior():
+        * DumpRenderTree/LayoutTestController.cpp:
+        (setHasCustomFullScreenBehaviorCallback):
+        (LayoutTestController::staticFunctions):
+        * DumpRenderTree/LayoutTestController.h:
+        (LayoutTestController::setHasCustomFullScreenBehavior):
+        (LayoutTestController::hasCustomFullScreenBehavior):
+        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
+        (WTR::InjectedBundlePage::enterFullScreenForElement):
+        (WTR::InjectedBundlePage::exitFullScreenForElement):
+        * WebKitTestRunner/InjectedBundle/InjectedBundlePage.h:
+        * WebKitTestRunner/InjectedBundle/LayoutTestController.cpp:
+        * WebKitTestRunner/InjectedBundle/LayoutTestController.h:
+        (WTR::LayoutTestController::setHasCustomFullScreenBehavior):
+        (WTR::LayoutTestController::hasCustomFullScreenBehavior):
+        * DumpRenderTree/chromium/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (LayoutTestController::reset):
+        * DumpRenderTree/chromium/LayoutTestController.h:
+        (LayoutTestController::setHasCustomFullScreenBehavior):
+        (LayoutTestController::hasCustomFullScreenBehavior):
+
+        Query the new methods before calling will/did/Enter/ExitFullScreen:
+        * DumpRenderTree/chromium/WebViewHost.cpp:
+        (WebViewHost::enterFullScreenNow):
+        (WebViewHost::exitFullScreenNow):
+        * DumpRenderTree/mac/UIDelegate.mm:
+        (-[UIDelegate webView:enterFullScreenForElement:listener:]):
+        (-[UIDelegate webView:exitFullScreenForElement:listener:]):
+
 2012-04-20  Nandor Huszka  <hnan...@inf.u-szeged.hu>
 
         NRWT: option --skip-pixel-test-if-no-baseline support on DRT

Modified: trunk/Tools/DumpRenderTree/LayoutTestController.cpp (114789 => 114790)


--- trunk/Tools/DumpRenderTree/LayoutTestController.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/LayoutTestController.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -92,6 +92,7 @@
     , m_shouldPaintBrokenImage(true)
     , m_shouldStayOnPageAfterHandlingBeforeUnload(false)
     , m_areDesktopNotificationPermissionRequestsIgnored(false)
+    , m_customFullScreenBehavior(false) 
     , m_testPathOrURL(testPathOrURL)
     , m_expectedPixelHash(expectedPixelHash)
 {
@@ -2242,8 +2243,20 @@
     }
 
     return JSValueMakeUndefined(context);
+
 }
 
+static JSValueRef setHasCustomFullScreenBehaviorCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    if (argumentCount == 1) {
+        bool hasCustomBehavior = JSValueToBoolean(context, arguments[0]);
+        LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+        controller->setHasCustomFullScreenBehavior(hasCustomBehavior);
+    }
+
+    return JSValueMakeUndefined(context);
+}
+
 static void layoutTestControllerObjectFinalize(JSObjectRef object)
 {
     LayoutTestController* controller = static_cast<LayoutTestController*>(JSObjectGetPrivate(object));
@@ -2461,6 +2474,7 @@
         { "focusWebView", focusWebViewCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setBackingScaleFactor", setBackingScaleFactorCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "preciseTime", preciseTimeCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "setHasCustomFullScreenBehavior", setHasCustomFullScreenBehaviorCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { 0, 0, 0 }
     };
 

Modified: trunk/Tools/DumpRenderTree/LayoutTestController.h (114789 => 114790)


--- trunk/Tools/DumpRenderTree/LayoutTestController.h	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/LayoutTestController.h	2012-04-20 22:33:46 UTC (rev 114790)
@@ -361,6 +361,10 @@
 
     void setTextDirection(JSStringRef);
 
+    // Custom full screen behavior.
+    void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; }
+    bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; }
+
 private:
     LayoutTestController(const std::string& testPathOrURL, const std::string& expectedPixelHash);
 
@@ -413,6 +417,7 @@
     bool m_shouldPaintBrokenImage;
     bool m_shouldStayOnPageAfterHandlingBeforeUnload;
     bool m_areDesktopNotificationPermissionRequestsIgnored;
+    bool m_customFullScreenBehavior;
 
     std::string m_authenticationUsername;
     std::string m_authenticationPassword; 

Modified: trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp (114789 => 114790)


--- trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -251,6 +251,7 @@
     bindMethod("enableFixedLayoutMode", &LayoutTestController::enableFixedLayoutMode);
     bindMethod("setFixedLayoutSize", &LayoutTestController::setFixedLayoutSize);
     bindMethod("selectionAsMarkup", &LayoutTestController::selectionAsMarkup);
+    bindMethod("setHasCustomFullScreenBehavior", &LayoutTestController::setHasCustomFullScreenBehavior);
     
     // The fallback method is called when an unknown method is invoked.
     bindFallbackMethod(&LayoutTestController::fallbackMethod);
@@ -674,6 +675,7 @@
     m_workQueue.reset();
     m_taskList.revokeAll();
     m_shouldStayOnPageAfterHandlingBeforeUnload = false;
+    m_hasCustomFullScreenBehavior = false;
 }
 
 void LayoutTestController::locationChangeDone()
@@ -2230,6 +2232,14 @@
     setShouldDumpAsAudio(true);
 }
 
+void LayoutTestController::setHasCustomFullScreenBehavior(const CppArgumentList& arguments, CppVariant* result)
+{
+    result->setNull();
+    if (arguments.size() <  1 || !arguments[0].isBool())
+        return;
+    m_hasCustomFullScreenBehavior = arguments[0].toBoolean();
+}
+
 #if ENABLE(POINTER_LOCK)
 void LayoutTestController::didLosePointerLock(const CppArgumentList&, CppVariant* result)
 {

Modified: trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h (114789 => 114790)


--- trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h	2012-04-20 22:33:46 UTC (rev 114790)
@@ -491,6 +491,9 @@
     bool testRepaint() const { return m_testRepaint; }
     bool sweepHorizontally() const { return m_sweepHorizontally; }
 
+    void setHasCustomFullScreenBehavior(const CppArgumentList&, CppVariant*);
+    bool hasCustomFullScreenBehavior() const { return m_hasCustomFullScreenBehavior; }
+
     // Called by the webview delegate when the toplevel frame load is done.
     void locationChangeDone();
 
@@ -705,6 +708,10 @@
     WebKit::WebArrayBufferView m_audioData;
 
     bool m_shouldStayOnPageAfterHandlingBeforeUnload;
+
+    // If true, calls to WebViewHost::enter/exitFullScreenNow will not result in 
+    // calls to Document::will/did/Enter/ExitFullScreen.
+    bool m_hasCustomFullScreenBehavior;
 };
 
 #endif // LayoutTestController_h

Modified: trunk/Tools/DumpRenderTree/chromium/WebViewHost.cpp (114789 => 114790)


--- trunk/Tools/DumpRenderTree/chromium/WebViewHost.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/chromium/WebViewHost.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1669,12 +1669,18 @@
 
 void WebViewHost::enterFullScreenNow()
 {
+    if (layoutTestController()->hasCustomFullScreenBehavior())
+        return;
+
     webView()->willEnterFullScreen();
     webView()->didEnterFullScreen();
 }
 
 void WebViewHost::exitFullScreenNow()
 {
+    if (layoutTestController()->hasCustomFullScreenBehavior())
+        return;
+
     webView()->willExitFullScreen();
     webView()->didExitFullScreen();
 }

Modified: trunk/Tools/DumpRenderTree/mac/UIDelegate.mm (114789 => 114790)


--- trunk/Tools/DumpRenderTree/mac/UIDelegate.mm	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/DumpRenderTree/mac/UIDelegate.mm	2012-04-20 22:33:46 UTC (rev 114790)
@@ -260,7 +260,8 @@
 
 - (void)webView:(WebView *)webView enterFullScreenForElement:(DOMElement*)element listener:(NSObject<WebKitFullScreenListener>*)listener
 {
-    [self performSelector:@selector(enterFullScreenWithListener:) withObject:listener afterDelay:0];
+    if (!gLayoutTestController->hasCustomFullScreenBehavior())
+        [self performSelector:@selector(enterFullScreenWithListener:) withObject:listener afterDelay:0];
 }
 
 - (void)exitFullScreenWithListener:(NSObject<WebKitFullScreenListener>*)listener
@@ -271,7 +272,8 @@
 
 - (void)webView:(WebView *)webView exitFullScreenForElement:(DOMElement*)element listener:(NSObject<WebKitFullScreenListener>*)listener
 {
-    [self performSelector:@selector(exitFullScreenWithListener:) withObject:listener afterDelay:0];
+    if (!gLayoutTestController->hasCustomFullScreenBehavior())
+        [self performSelector:@selector(exitFullScreenWithListener:) withObject:listener afterDelay:0];
 }
 
 - (BOOL)webView:(WebView *)webView didPressMissingPluginButton:(DOMElement *)element

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl (114789 => 114790)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/LayoutTestController.idl	2012-04-20 22:33:46 UTC (rev 114790)
@@ -144,6 +144,9 @@
         void resetPageVisibility();
 
         readonly attribute DOMString platformName;
+
+        // Control full screen behavior.
+        void setHasCustomFullScreenBehavior(in boolean value);
     };
 
 }

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp (114789 => 114790)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -1210,16 +1210,22 @@
 {
     if (InjectedBundle::shared().layoutTestController()->shouldDumpFullScreenCallbacks())
         InjectedBundle::shared().stringBuilder()->append("enterFullScreenForElement()\n");
-    WKBundlePageWillEnterFullScreen(pageRef);
-    WKBundlePageDidEnterFullScreen(pageRef);
+
+    if (!InjectedBundle::shared().layoutTestController()->hasCustomFullScreenBehavior()) {
+        WKBundlePageWillEnterFullScreen(pageRef);
+        WKBundlePageDidEnterFullScreen(pageRef);
+    }
 }
 
 void InjectedBundlePage::exitFullScreenForElement(WKBundlePageRef pageRef, WKBundleNodeHandleRef elementRef)
 {
     if (InjectedBundle::shared().layoutTestController()->shouldDumpFullScreenCallbacks())
         InjectedBundle::shared().stringBuilder()->append("exitFullScreenForElement()\n");
-    WKBundlePageWillExitFullScreen(pageRef);
-    WKBundlePageDidExitFullScreen(pageRef);
+
+    if (!InjectedBundle::shared().layoutTestController()->hasCustomFullScreenBehavior()) {
+        WKBundlePageWillExitFullScreen(pageRef);
+        WKBundlePageDidExitFullScreen(pageRef);
+    }
 }
 
 void InjectedBundlePage::beganEnterFullScreen(WKBundlePageRef, WKRect, WKRect)

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h (114789 => 114790)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.h	2012-04-20 22:33:46 UTC (rev 114790)
@@ -121,6 +121,7 @@
 #if ENABLE(FULLSCREEN_API)
     // Full Screen client
     static bool supportsFullScreen(WKBundlePageRef, WKFullScreenKeyboardRequestType);
+    static void setHasCustomFullScreenBehavior(WKBundlePageRef, bool value);
     static void enterFullScreenForElement(WKBundlePageRef, WKBundleNodeHandleRef element);
     static void exitFullScreenForElement(WKBundlePageRef, WKBundleNodeHandleRef element);
     static void beganEnterFullScreen(WKBundlePageRef, WKRect initialFrame, WKRect finalFrame);

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp (114789 => 114790)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp	2012-04-20 22:33:46 UTC (rev 114790)
@@ -109,6 +109,7 @@
     , m_policyDelegateEnabled(false)
     , m_policyDelegatePermissive(false)
     , m_globalFlag(false)
+    , m_customFullScreenBehavior(false)
 {
     platformInitialize();
 }

Modified: trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h (114789 => 114790)


--- trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h	2012-04-20 22:33:35 UTC (rev 114789)
+++ trunk/Tools/WebKitTestRunner/InjectedBundle/LayoutTestController.h	2012-04-20 22:33:46 UTC (rev 114790)
@@ -196,6 +196,10 @@
 
     void overridePreference(JSStringRef preference, bool value);
 
+    // Custom full screen behavior.
+    void setHasCustomFullScreenBehavior(bool value) { m_customFullScreenBehavior = value; }
+    bool hasCustomFullScreenBehavior() const { return m_customFullScreenBehavior; }
+
     JSRetainPtr<JSStringRef> platformName();
 
     void setPageVisibility(JSStringRef state);
@@ -231,6 +235,7 @@
     bool m_policyDelegatePermissive;
     
     bool m_globalFlag;
+    bool m_customFullScreenBehavior;
 
     PlatformTimerRef m_waitToDumpWatchdogTimer;
 };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to