diff options
author | joepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc> | 2013-01-28 22:38:23 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-08 17:34:02 +0200 |
commit | 0dd9e57645d192fca388abe8f04e93ca7bef6ad6 (patch) | |
tree | 580a6d97c337b8e5cd7ad71e58ee6081e01d84e8 /Tools/WebKitTestRunner | |
parent | f0ce121cf5367b340160408821ab6b9d00d3d0cb (diff) | |
download | qtwebkit-0dd9e57645d192fca388abe8f04e93ca7bef6ad6.tar.gz |
Improve PageVisibility API with enums
https://bugs.webkit.org/show_bug.cgi?id=107364
Reviewed by Sam Weinig.
Source/WebKit/mac:
* WebView/WebView.mm:
* WebView/WebViewPrivate.h:
(corePageVisibilityState):
(-[WebView _setVisibilityState:isInitialState:]):
Switch the private API form int to a WebPageVisibilityState enum.
Source/WebKit2:
* Shared/API/c/WKPageVisibilityTypes.h: Added.
* Shared/API/c/WKSharedAPICast.h:
(WebKit::toPageVisibilityState):
Create an enum for page visibility APIs and a conversion function
for the WK2 values to WebCore values.
* Target.pri:
* GNUmakefile.list.am:
* WebKit2.xcodeproj/project.pbxproj:
Add WKPageVisibilityTypes.h to the build as a private export.
* UIProcess/API/C/WKPage.h:
* UIProcess/API/C/WKPage.cpp:
(WKPageSetVisibilityState):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::setVisibilityState):
UIProcess API to set visibility state. WebPageProxy already
had m_visibilityState, so update that when setter is used.
* WebProcess/InjectedBundle/API/c/WKBundle.cpp:
* WebProcess/InjectedBundle/API/c/WKBundlePrivate.h:
* WebProcess/InjectedBundle/InjectedBundle.cpp:
* WebProcess/InjectedBundle/InjectedBundle.h:
Remove the old SPI for WebKitTestRunner. Tests now use the C API.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setVisibilityState):
* WebProcess/WebPage/WebPage.messages.in:
Update the existing WebPage API to use uint32_t, which matches
other enum message types.
Tools:
* DumpRenderTree/mac/TestRunnerMac.mm:
(TestRunner::resetPageVisibility):
(TestRunner::setPageVisibility):
Update the WK1 test code to use the new WK1 enums.
* WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
(WTR::InjectedBundle::setVisibilityState):
* WebKitTestRunner/InjectedBundle/InjectedBundle.h:
(InjectedBundle):
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setPageVisibility):
(WTR::TestRunner::resetPageVisibility):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::setVisibilityState):
* WebKitTestRunner/TestController.h:
(TestController):
* WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
Update the WK2 test code to use the new WK2 API and enums.
* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp: Added.
(TestWebKitAPI):
(TestWebKitAPI::setPageVisibilityStateWithEvalContinuation):
(TestWebKitAPI::assertSerializedScriptValueIsStringValue):
(TestWebKitAPI::didRunStep1StateChangeVisibleToHidden):
(TestWebKitAPI::didRunStep2StateChangeHiddenToPrerender):
(TestWebKitAPI::didRunStep3StateChangePrerenderToPreview):
(TestWebKitAPI::didRunStep4InStatePreview):
(TestWebKitAPI::TEST):
Test the new WK2 API with all enum types.
Change-Id: I0a057111d7ef26cb87ade328291d4f94322480b7
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@141010 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Tools/WebKitTestRunner')
-rw-r--r-- | Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp | 16 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h | 3 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp | 15 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/TestController.cpp | 5 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/TestController.h | 3 | ||||
-rw-r--r-- | Tools/WebKitTestRunner/TestInvocation.cpp | 16 |
6 files changed, 51 insertions, 7 deletions
diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp index fa7939d3e..96b3d657b 100644 --- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp +++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp @@ -458,6 +458,22 @@ void InjectedBundle::setCustomPolicyDelegate(bool enabled, bool permissive) WKBundlePostMessage(m_bundle, messageName.get(), messageBody.get()); } +void InjectedBundle::setVisibilityState(WKPageVisibilityState visibilityState, bool isInitialState) +{ + WKRetainPtr<WKStringRef> messageName(AdoptWK, WKStringCreateWithUTF8CString("SetVisibilityState")); + WKRetainPtr<WKMutableDictionaryRef> messageBody(AdoptWK, WKMutableDictionaryCreate()); + + WKRetainPtr<WKStringRef> visibilityStateKeyWK(AdoptWK, WKStringCreateWithUTF8CString("visibilityState")); + WKRetainPtr<WKUInt64Ref> visibilityStateWK(AdoptWK, WKUInt64Create(visibilityState)); + WKDictionaryAddItem(messageBody.get(), visibilityStateKeyWK.get(), visibilityStateWK.get()); + + WKRetainPtr<WKStringRef> isInitialKeyWK(AdoptWK, WKStringCreateWithUTF8CString("isInitialState")); + WKRetainPtr<WKBooleanRef> isInitialWK(AdoptWK, WKBooleanCreate(isInitialState)); + WKDictionaryAddItem(messageBody.get(), isInitialKeyWK.get(), isInitialWK.get()); + + WKBundlePostMessage(m_bundle, messageName.get(), messageBody.get()); +} + bool InjectedBundle::shouldProcessWorkQueue() const { if (!m_useWorkQueue) diff --git a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h index 41469ec79..527641e40 100644 --- a/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h +++ b/Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h @@ -98,6 +98,9 @@ public: // Policy delegate. void setCustomPolicyDelegate(bool enabled, bool permissive); + // Page Visibility. + void setVisibilityState(WKPageVisibilityState, bool isInitialState); + // Work queue. bool shouldProcessWorkQueue() const; void processWorkQueue(); diff --git a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp index 10fccc23e..602e600f0 100644 --- a/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp +++ b/Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp @@ -32,12 +32,13 @@ #include "PlatformWebView.h" #include "StringFunctions.h" #include "TestController.h" -#include <WebCore/PageVisibilityState.h> +#include <WebKit2/WKBundle.h> #include <WebKit2/WKBundleBackForwardList.h> #include <WebKit2/WKBundleFrame.h> #include <WebKit2/WKBundleFramePrivate.h> #include <WebKit2/WKBundleInspector.h> #include <WebKit2/WKBundleNodeHandlePrivate.h> +#include <WebKit2/WKBundlePage.h> #include <WebKit2/WKBundlePagePrivate.h> #include <WebKit2/WKBundlePrivate.h> #include <WebKit2/WKBundleScriptWorld.h> @@ -539,21 +540,21 @@ void TestRunner::setDefersLoading(bool shouldDeferLoading) void TestRunner::setPageVisibility(JSStringRef state) { - WebCore::PageVisibilityState visibilityState = WebCore::PageVisibilityStateVisible; + WKPageVisibilityState visibilityState = kWKPageVisibilityStateVisible; if (JSStringIsEqualToUTF8CString(state, "hidden")) - visibilityState = WebCore::PageVisibilityStateHidden; + visibilityState = kWKPageVisibilityStateHidden; else if (JSStringIsEqualToUTF8CString(state, "prerender")) - visibilityState = WebCore::PageVisibilityStatePrerender; + visibilityState = kWKPageVisibilityStatePrerender; else if (JSStringIsEqualToUTF8CString(state, "preview")) - visibilityState = WebCore::PageVisibilityStatePreview; + visibilityState = kWKPageVisibilityStatePreview; - WKBundleSetPageVisibilityState(InjectedBundle::shared().bundle(), InjectedBundle::shared().page()->page(), visibilityState, /* isInitialState */ false); + InjectedBundle::shared().setVisibilityState(visibilityState, false); } void TestRunner::resetPageVisibility() { - WKBundleSetPageVisibilityState(InjectedBundle::shared().bundle(), InjectedBundle::shared().page()->page(), WebCore::PageVisibilityStateVisible, /* isInitialState */ true); + InjectedBundle::shared().setVisibilityState(kWKPageVisibilityStateVisible, true); } typedef WTF::HashMap<unsigned, JSValueRef> CallbackMap; diff --git a/Tools/WebKitTestRunner/TestController.cpp b/Tools/WebKitTestRunner/TestController.cpp index 0e47f3c24..006892f4f 100644 --- a/Tools/WebKitTestRunner/TestController.cpp +++ b/Tools/WebKitTestRunner/TestController.cpp @@ -1077,6 +1077,11 @@ void TestController::setCustomPolicyDelegate(bool enabled, bool permissive) m_policyDelegatePermissive = permissive; } +void TestController::setVisibilityState(WKPageVisibilityState visibilityState, bool isInitialState) +{ + WKPageSetVisibilityState(m_mainWebView->page(), visibilityState, isInitialState); +} + void TestController::decidePolicyForGeolocationPermissionRequestIfPossible() { if (!m_isGeolocationPermissionSet) diff --git a/Tools/WebKitTestRunner/TestController.h b/Tools/WebKitTestRunner/TestController.h index 332e33b70..b0ad979e0 100644 --- a/Tools/WebKitTestRunner/TestController.h +++ b/Tools/WebKitTestRunner/TestController.h @@ -79,6 +79,9 @@ public: // Policy delegate. void setCustomPolicyDelegate(bool enabled, bool permissive); + // Page Visibility. + void setVisibilityState(WKPageVisibilityState, bool isInitialState); + bool resetStateToConsistentValues(); WorkQueueManager& workQueueManager() { return m_workQueueManager; } diff --git a/Tools/WebKitTestRunner/TestInvocation.cpp b/Tools/WebKitTestRunner/TestInvocation.cpp index 8f66cc0dd..f6ad9aa45 100644 --- a/Tools/WebKitTestRunner/TestInvocation.cpp +++ b/Tools/WebKitTestRunner/TestInvocation.cpp @@ -478,6 +478,22 @@ void TestInvocation::didReceiveMessageFromInjectedBundle(WKStringRef messageName return; } + if (WKStringIsEqualToUTF8CString(messageName, "SetVisibilityState")) { + ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID()); + WKDictionaryRef messageBodyDictionary = static_cast<WKDictionaryRef>(messageBody); + + WKRetainPtr<WKStringRef> visibilityStateKeyWK(AdoptWK, WKStringCreateWithUTF8CString("visibilityState")); + WKUInt64Ref visibilityStateWK = static_cast<WKUInt64Ref>(WKDictionaryGetItemForKey(messageBodyDictionary, visibilityStateKeyWK.get())); + WKPageVisibilityState visibilityState = static_cast<WKPageVisibilityState>(WKUInt64GetValue(visibilityStateWK)); + + WKRetainPtr<WKStringRef> isInitialKeyWK(AdoptWK, WKStringCreateWithUTF8CString("isInitialState")); + WKBooleanRef isInitialWK = static_cast<WKBooleanRef>(WKDictionaryGetItemForKey(messageBodyDictionary, isInitialKeyWK.get())); + bool isInitialState = WKBooleanGetValue(isInitialWK); + + TestController::shared().setVisibilityState(visibilityState, isInitialState); + return; + } + if (WKStringIsEqualToUTF8CString(messageName, "ProcessWorkQueue")) { if (TestController::shared().workQueueManager().processWorkQueue()) { WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("WorkQueueProcessedCallback")); |