From 8995b83bcbfbb68245f779b64e5517627c6cc6ea Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 17 Oct 2012 16:21:14 +0200 Subject: Imported WebKit commit cf4f8fc6f19b0629f51860cb2d4b25e139d07e00 (http://svn.webkit.org/repository/webkit/trunk@131592) New snapshot that includes the build fixes for Mac OS X 10.6 and earlier as well as the previously cherry-picked changes --- Tools/WebKitTestRunner/TestController.cpp | 123 ++++++++++++++++++++---------- 1 file changed, 81 insertions(+), 42 deletions(-) (limited to 'Tools/WebKitTestRunner/TestController.cpp') diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp index 33d913fdb..e9ef0471d 100644 --- a/Tools/WebKitTestRunner/TestController.cpp +++ b/Tools/WebKitTestRunner/TestController.cpp @@ -93,6 +93,8 @@ TestController::TestController(int argc, const char* argv[]) , m_beforeUnloadReturnValue(true) , m_isGeolocationPermissionSet(false) , m_isGeolocationPermissionAllowed(false) + , m_policyDelegateEnabled(false) + , m_policyDelegatePermissive(false) #if PLATFORM(MAC) || PLATFORM(QT) || PLATFORM(GTK) || PLATFORM(EFL) , m_eventSenderProxy(new EventSenderProxy(this)) #endif @@ -107,35 +109,22 @@ TestController::~TestController() { } -static WKRect getWindowFrameMainPage(WKPageRef page, const void* clientInfo) -{ - PlatformWebView* view = static_cast(const_cast(clientInfo))->mainWebView(); - return view->windowFrame(); -} - -static void setWindowFrameMainPage(WKPageRef page, WKRect frame, const void* clientInfo) -{ - PlatformWebView* view = static_cast(const_cast(clientInfo))->mainWebView(); - view->setWindowFrame(frame); -} - -static WKRect getWindowFrameOtherPage(WKPageRef page, const void* clientInfo) +static WKRect getWindowFrame(WKPageRef page, const void* clientInfo) { PlatformWebView* view = static_cast(const_cast(clientInfo)); return view->windowFrame(); } -static void setWindowFrameOtherPage(WKPageRef page, WKRect frame, const void* clientInfo) +static void setWindowFrame(WKPageRef page, WKRect frame, const void* clientInfo) { PlatformWebView* view = static_cast(const_cast(clientInfo)); view->setWindowFrame(frame); } -static bool runBeforeUnloadConfirmPanel(WKPageRef page, WKStringRef message, WKFrameRef frame, const void *clientInfo) +static bool runBeforeUnloadConfirmPanel(WKPageRef page, WKStringRef message, WKFrameRef frame, const void*) { - TestController* testController = static_cast(const_cast(clientInfo)); printf("CONFIRM NAVIGATION: %s\n", toSTD(message).c_str()); - return testController->beforeUnloadReturnValue(); + return TestController::shared().beforeUnloadReturnValue(); } static unsigned long long exceededDatabaseQuota(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKStringRef, WKStringRef, unsigned long long, unsigned long long, unsigned long long, unsigned long long, const void*) @@ -163,6 +152,7 @@ static void closeOtherPage(WKPageRef page, const void* clientInfo) static void focus(WKPageRef page, const void* clientInfo) { PlatformWebView* view = static_cast(const_cast(clientInfo)); + view->focus(); view->setWindowIsKey(true); } @@ -174,8 +164,7 @@ static void unfocus(WKPageRef page, const void* clientInfo) static void decidePolicyForGeolocationPermissionRequest(WKPageRef, WKFrameRef, WKSecurityOriginRef, WKGeolocationPermissionRequestRef permissionRequest, const void* clientInfo) { - TestController* testController = static_cast(const_cast(clientInfo)); - testController->handleGeolocationPermissionRequest(permissionRequest); + TestController::shared().handleGeolocationPermissionRequest(permissionRequest); } WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKURLRequestRef, WKDictionaryRef, WKEventModifiers, WKEventMouseButton, const void*) @@ -210,8 +199,8 @@ WKPageRef TestController::createOtherPage(WKPageRef oldPage, WKURLRequestRef, WK 0, // setStatusBarIsVisible 0, // isResizable 0, // setIsResizable - getWindowFrameOtherPage, - setWindowFrameOtherPage, + getWindowFrame, + setWindowFrame, runBeforeUnloadConfirmPanel, 0, // didDraw 0, // pageDidScroll @@ -328,12 +317,12 @@ void TestController::initialize(int argc, const char* argv[]) m_context.adopt(WKContextCreateWithInjectedBundlePath(injectedBundlePath())); m_geolocationProvider = adoptPtr(new GeolocationProviderMock(m_context.get())); - const char* path = libraryPathForTesting(); - if (path) { - Vector databaseDirectory(strlen(path) + strlen("/Databases") + 1); - sprintf(databaseDirectory.data(), "%s%s", path, "/Databases"); - WKRetainPtr databaseDirectoryWK(AdoptWK, WKStringCreateWithUTF8CString(databaseDirectory.data())); - WKContextSetDatabaseDirectory(m_context.get(), databaseDirectoryWK.get()); + if (const char* dumpRenderTreeTemp = libraryPathForTesting()) { + WKRetainPtr dumpRenderTreeTempWK(AdoptWK, WKStringCreateWithUTF8CString(dumpRenderTreeTemp)); + WKContextSetDatabaseDirectory(m_context.get(), dumpRenderTreeTempWK.get()); + WKContextSetLocalStorageDirectory(m_context.get(), dumpRenderTreeTempWK.get()); + WKContextSetDiskCacheDirectory(m_context.get(), dumpRenderTreeTempWK.get()); + WKContextSetCookieStorageDirectory(m_context.get(), dumpRenderTreeTempWK.get()); } platformInitializeContext(); @@ -358,13 +347,13 @@ void TestController::initialize(int argc, const char* argv[]) WKPageUIClient pageUIClient = { kWKPageUIClientCurrentVersion, - this, + m_mainWebView.get(), 0, // createNewPage_deprecatedForUseWithV0 0, // showPage 0, // close 0, // takeFocus - 0, // focus - 0, // unfocus + focus, + unfocus, 0, // runJavaScriptAlert 0, // runJavaScriptConfirm 0, // runJavaScriptPrompt @@ -381,8 +370,8 @@ void TestController::initialize(int argc, const char* argv[]) 0, // setStatusBarIsVisible 0, // isResizable 0, // setIsResizable - getWindowFrameMainPage, - setWindowFrameMainPage, + getWindowFrame, + setWindowFrame, runBeforeUnloadConfirmPanel, 0, // didDraw 0, // pageDidScroll @@ -445,6 +434,16 @@ void TestController::initialize(int argc, const char* argv[]) 0, // didLayout }; WKPageSetPageLoaderClient(m_mainWebView->page(), &pageLoaderClient); + + WKPagePolicyClient pagePolicyClient = { + kWKPagePolicyClientCurrentVersion, + this, + decidePolicyForNavigationAction, + 0, // decidePolicyForNewWindowAction + decidePolicyForResponse, + 0, // unableToImplementPolicy + }; + WKPageSetPagePolicyClient(m_mainWebView->page(), &pagePolicyClient); } bool TestController::resetStateToConsistentValues() @@ -491,12 +490,7 @@ bool TestController::resetStateToConsistentValues() WKPreferencesSetArtificialPluginInitializationDelayEnabled(preferences, false); WKPreferencesSetTabToLinksEnabled(preferences, false); WKPreferencesSetInteractiveFormValidationEnabled(preferences, true); - -// [Qt][WK2]REGRESSION(r104881):It broke hundreds of tests -// FIXME: https://bugs.webkit.org/show_bug.cgi?id=76247 -#if !PLATFORM(QT) WKPreferencesSetMockScrollbarsEnabled(preferences, true); -#endif #if !PLATFORM(QT) static WKStringRef standardFontFamily = WKStringCreateWithUTF8CString("Times"); @@ -533,6 +527,11 @@ bool TestController::resetStateToConsistentValues() m_isGeolocationPermissionSet = false; m_isGeolocationPermissionAllowed = false; + // Reset Custom Policy Delegate. + setCustomPolicyDelegate(false, false); + + m_workQueueManager.clearWorkQueue(); + // Reset main page back to about:blank m_doneResetting = false; @@ -1011,9 +1010,9 @@ void TestController::setGeolocationPermission(bool enabled) decidePolicyForGeolocationPermissionRequestIfPossible(); } -void TestController::setMockGeolocationPosition(double latitude, double longitude, double accuracy) +void TestController::setMockGeolocationPosition(double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed) { - m_geolocationProvider->setPosition(latitude, longitude, accuracy); + m_geolocationProvider->setPosition(latitude, longitude, accuracy, providesAltitude, altitude, providesAltitudeAccuracy, altitudeAccuracy, providesHeading, heading, providesSpeed, speed); } void TestController::setMockGeolocationPositionUnavailableError(WKStringRef errorMessage) @@ -1027,23 +1026,30 @@ void TestController::handleGeolocationPermissionRequest(WKGeolocationPermissionR decidePolicyForGeolocationPermissionRequestIfPossible(); } +void TestController::setCustomPolicyDelegate(bool enabled, bool permissive) +{ + m_policyDelegateEnabled = enabled; + m_policyDelegatePermissive = permissive; +} + void TestController::decidePolicyForGeolocationPermissionRequestIfPossible() { if (!m_isGeolocationPermissionSet) return; for (size_t i = 0; i < m_geolocationPermissionRequests.size(); ++i) { - WKGeolocationPermissionRequestRef& permissionRequest = m_geolocationPermissionRequests[i]; + WKGeolocationPermissionRequestRef permissionRequest = m_geolocationPermissionRequests[i].get(); if (m_isGeolocationPermissionAllowed) WKGeolocationPermissionRequestAllow(permissionRequest); else WKGeolocationPermissionRequestDeny(permissionRequest); } + m_geolocationPermissionRequests.clear(); } -void TestController::decidePolicyForNotificationPermissionRequest(WKPageRef page, WKSecurityOriginRef origin, WKNotificationPermissionRequestRef request, const void* clientInfo) +void TestController::decidePolicyForNotificationPermissionRequest(WKPageRef page, WKSecurityOriginRef origin, WKNotificationPermissionRequestRef request, const void*) { - static_cast(const_cast(clientInfo))->decidePolicyForNotificationPermissionRequest(page, origin, request); + TestController::shared().decidePolicyForNotificationPermissionRequest(page, origin, request); } void TestController::decidePolicyForNotificationPermissionRequest(WKPageRef, WKSecurityOriginRef, WKNotificationPermissionRequestRef request) @@ -1051,4 +1057,37 @@ void TestController::decidePolicyForNotificationPermissionRequest(WKPageRef, WKS WKNotificationPermissionRequestAllow(request); } +void TestController::decidePolicyForNavigationAction(WKPageRef, WKFrameRef, WKFrameNavigationType, WKEventModifiers, WKEventMouseButton, WKURLRequestRef, WKFramePolicyListenerRef listener, WKTypeRef, const void* clientInfo) +{ + static_cast(const_cast(clientInfo))->decidePolicyForNavigationAction(listener); +} + +void TestController::decidePolicyForNavigationAction(WKFramePolicyListenerRef listener) +{ + if (m_policyDelegateEnabled && !m_policyDelegatePermissive) { + WKFramePolicyListenerIgnore(listener); + return; + } + + WKFramePolicyListenerUse(listener); +} + +void TestController::decidePolicyForResponse(WKPageRef, WKFrameRef frame, WKURLResponseRef response, WKURLRequestRef, WKFramePolicyListenerRef listener, WKTypeRef, const void* clientInfo) +{ + static_cast(const_cast(clientInfo))->decidePolicyForResponse(frame, response, listener); +} + +void TestController::decidePolicyForResponse(WKFrameRef frame, WKURLResponseRef response, WKFramePolicyListenerRef listener) +{ + // Even though Response was already checked by WKBundlePagePolicyClient, the check did not include plugins + // so we have to re-check again. + WKRetainPtr wkMIMEType(AdoptWK, WKURLResponseCopyMIMEType(response)); + if (WKFrameCanShowMIMEType(frame, wkMIMEType.get())) { + WKFramePolicyListenerUse(listener); + return; + } + + WKFramePolicyListenerIgnore(listener); +} + } // namespace WTR -- cgit v1.2.1