summaryrefslogtreecommitdiff
path: root/Tools/WebKitTestRunner/TestController.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
commit8995b83bcbfbb68245f779b64e5517627c6cc6ea (patch)
tree17985605dab9263cc2444bd4d45f189e142cca7c /Tools/WebKitTestRunner/TestController.cpp
parentb9c9652036d5e9f1e29c574f40bc73a35c81ace6 (diff)
downloadqtwebkit-8995b83bcbfbb68245f779b64e5517627c6cc6ea.tar.gz
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
Diffstat (limited to 'Tools/WebKitTestRunner/TestController.cpp')
-rw-r--r--Tools/WebKitTestRunner/TestController.cpp123
1 files changed, 81 insertions, 42 deletions
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<TestController*>(const_cast<void*>(clientInfo))->mainWebView();
- return view->windowFrame();
-}
-
-static void setWindowFrameMainPage(WKPageRef page, WKRect frame, const void* clientInfo)
-{
- PlatformWebView* view = static_cast<TestController*>(const_cast<void*>(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<PlatformWebView*>(const_cast<void*>(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<PlatformWebView*>(const_cast<void*>(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<TestController*>(const_cast<void*>(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<PlatformWebView*>(const_cast<void*>(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<TestController*>(const_cast<void*>(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<char> databaseDirectory(strlen(path) + strlen("/Databases") + 1);
- sprintf(databaseDirectory.data(), "%s%s", path, "/Databases");
- WKRetainPtr<WKStringRef> databaseDirectoryWK(AdoptWK, WKStringCreateWithUTF8CString(databaseDirectory.data()));
- WKContextSetDatabaseDirectory(m_context.get(), databaseDirectoryWK.get());
+ if (const char* dumpRenderTreeTemp = libraryPathForTesting()) {
+ WKRetainPtr<WKStringRef> 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<TestController*>(const_cast<void*>(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<TestController*>(const_cast<void*>(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<TestController*>(const_cast<void*>(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<WKStringRef> wkMIMEType(AdoptWK, WKURLResponseCopyMIMEType(response));
+ if (WKFrameCanShowMIMEType(frame, wkMIMEType.get())) {
+ WKFramePolicyListenerUse(listener);
+ return;
+ }
+
+ WKFramePolicyListenerIgnore(listener);
+}
+
} // namespace WTR