summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoepeck@webkit.org <joepeck@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>2013-01-28 22:38:23 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-08 17:34:02 +0200
commit0dd9e57645d192fca388abe8f04e93ca7bef6ad6 (patch)
tree580a6d97c337b8e5cd7ad71e58ee6081e01d84e8
parentf0ce121cf5367b340160408821ab6b9d00d3d0cb (diff)
downloadqtwebkit-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>
-rw-r--r--Source/WebKit/mac/WebView/WebView.mm34
-rw-r--r--Source/WebKit/mac/WebView/WebViewPrivate.h10
-rw-r--r--Source/WebKit2/GNUmakefile.list.am2
-rw-r--r--Source/WebKit2/Shared/API/c/WKPageVisibilityTypes.h45
-rw-r--r--Source/WebKit2/Shared/API/c/WKSharedAPICast.h19
-rw-r--r--Source/WebKit2/Target.pri1
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPage.cpp5
-rw-r--r--Source/WebKit2/UIProcess/API/C/WKPage.h3
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.cpp13
-rw-r--r--Source/WebKit2/UIProcess/WebPageProxy.h2
-rw-r--r--Source/WebKit2/WebKit2.xcodeproj/project.pbxproj4
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp5
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h2
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp8
-rw-r--r--Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h2
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.cpp2
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.h5
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.messages.in2
-rw-r--r--Tools/DumpRenderTree/mac/TestRunnerMac.mm14
-rw-r--r--Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj4
-rw-r--r--Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp109
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp16
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.h3
-rw-r--r--Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp15
-rw-r--r--Tools/WebKitTestRunner/TestController.cpp5
-rw-r--r--Tools/WebKitTestRunner/TestController.h3
-rw-r--r--Tools/WebKitTestRunner/TestInvocation.cpp16
27 files changed, 302 insertions, 47 deletions
diff --git a/Source/WebKit/mac/WebView/WebView.mm b/Source/WebKit/mac/WebView/WebView.mm
index f8e5b79f0..d270eaed3 100644
--- a/Source/WebKit/mac/WebView/WebView.mm
+++ b/Source/WebKit/mac/WebView/WebView.mm
@@ -408,6 +408,23 @@ WebLayoutMilestones kitLayoutMilestones(LayoutMilestones milestones)
| (milestones & DidHitRelevantRepaintedObjectsAreaThreshold ? WebDidHitRelevantRepaintedObjectsAreaThreshold : 0);
}
+static PageVisibilityState core(WebPageVisibilityState visibilityState)
+{
+ switch (visibilityState) {
+ case WebPageVisibilityStateVisible:
+ return PageVisibilityStateVisible;
+ case WebPageVisibilityStateHidden:
+ return PageVisibilityStateHidden;
+ case WebPageVisibilityStatePrerender:
+ return PageVisibilityStatePrerender;
+ case WebPageVisibilityStatePreview:
+ return PageVisibilityStatePreview;
+ }
+
+ ASSERT_NOT_REACHED();
+ return PageVisibilityStateVisible;
+}
+
@interface WebView (WebFileInternal)
- (float)_deviceScaleFactor;
- (BOOL)_isLoading;
@@ -2937,6 +2954,14 @@ static Vector<String> toStringVector(NSArray* patterns)
return kitLayoutMilestones(page->layoutMilestones());
}
+- (void)_setVisibilityState:(WebPageVisibilityState)visibilityState isInitialState:(BOOL)isInitialState
+{
+#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
+ if (_private->page)
+ _private->page->setVisibilityState(core(visibilityState), isInitialState);
+#endif
+}
+
- (void)_setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns
{
Page* page = core(self);
@@ -3065,15 +3090,6 @@ static Vector<String> toStringVector(NSArray* patterns)
ResourceRequest::setHTTPPipeliningEnabled(enabled);
}
-- (void)_setVisibilityState:(int)visibilityState isInitialState:(BOOL)isInitialState
-{
-#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
- if (_private->page) {
- _private->page->setVisibilityState(static_cast<PageVisibilityState>(visibilityState), isInitialState);
- }
-#endif
-}
-
@end
@implementation _WebSafeForwarder
diff --git a/Source/WebKit/mac/WebView/WebViewPrivate.h b/Source/WebKit/mac/WebView/WebViewPrivate.h
index fd5b9b06d..49bdcd0cb 100644
--- a/Source/WebKit/mac/WebView/WebViewPrivate.h
+++ b/Source/WebKit/mac/WebView/WebViewPrivate.h
@@ -115,7 +115,13 @@ enum {
};
typedef NSUInteger WebLayoutMilestones;
-// This needs to be in sync with WebCore::NotificationClient::Permission
+typedef enum {
+ WebPageVisibilityStateVisible,
+ WebPageVisibilityStateHidden,
+ WebPageVisibilityStatePrerender,
+ WebPageVisibilityStatePreview
+} WebPageVisibilityState;
+
typedef enum {
WebNotificationPermissionAllowed,
WebNotificationPermissionNotAllowed,
@@ -574,6 +580,8 @@ Could be worth adding to the API.
- (void)_listenForLayoutMilestones:(WebLayoutMilestones)layoutMilestones;
- (WebLayoutMilestones)_layoutMilestones;
+- (void)_setVisibilityState:(WebPageVisibilityState)visibilityState isInitialState:(BOOL)isInitialState;
+
// Whether the column-break-{before,after} properties are respected instead of the
// page-break-{before,after} properties.
- (void)_setPaginationBehavesLikeColumns:(BOOL)behavesLikeColumns;
diff --git a/Source/WebKit2/GNUmakefile.list.am b/Source/WebKit2/GNUmakefile.list.am
index ab523ef3f..84d231489 100644
--- a/Source/WebKit2/GNUmakefile.list.am
+++ b/Source/WebKit2/GNUmakefile.list.am
@@ -20,6 +20,7 @@ webkit2_h_api += \
$(WebKit2)/Shared/API/c/WKMutableDictionary.h \
$(WebKit2)/Shared/API/c/WKNumber.h \
$(WebKit2)/Shared/API/c/WKPageLoadTypes.h \
+ $(WebKit2)/Shared/API/c/WKPageVisibilityTypes.h \
$(WebKit2)/Shared/API/c/WKRenderLayer.h \
$(WebKit2)/Shared/API/c/WKRenderObject.h \
$(WebKit2)/Shared/API/c/WKSecurityOrigin.h \
@@ -338,6 +339,7 @@ webkit2_sources += \
Source/WebKit2/Shared/API/c/WKNumber.cpp \
Source/WebKit2/Shared/API/c/WKNumber.h \
Source/WebKit2/Shared/API/c/WKPageLoadTypes.h \
+ Source/WebKit2/Shared/API/c/WKPageVisibilityTypes.h \
Source/WebKit2/Shared/API/c/WKRenderLayer.cpp \
Source/WebKit2/Shared/API/c/WKRenderLayer.h \
Source/WebKit2/Shared/API/c/WKRenderObject.cpp \
diff --git a/Source/WebKit2/Shared/API/c/WKPageVisibilityTypes.h b/Source/WebKit2/Shared/API/c/WKPageVisibilityTypes.h
new file mode 100644
index 000000000..8bc4cedd7
--- /dev/null
+++ b/Source/WebKit2/Shared/API/c/WKPageVisibilityTypes.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKPageVisibilityTypes_h
+#define WKPageVisibilityTypes_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+ kWKPageVisibilityStateVisible,
+ kWKPageVisibilityStateHidden,
+ kWKPageVisibilityStatePrerender,
+ kWKPageVisibilityStatePreview
+};
+typedef uint32_t WKPageVisibilityState;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* WKPageVisibilityTypes_h */
diff --git a/Source/WebKit2/Shared/API/c/WKSharedAPICast.h b/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
index 380cd25c2..f7b40b67b 100644
--- a/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
+++ b/Source/WebKit2/Shared/API/c/WKSharedAPICast.h
@@ -35,6 +35,7 @@
#include "WKGeometry.h"
#include "WKImage.h"
#include "WKPageLoadTypes.h"
+#include "WKPageVisibilityTypes.h"
#include "WebError.h"
#include "WebEvent.h"
#include "WebFindOptions.h"
@@ -49,6 +50,7 @@
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/IntRect.h>
#include <WebCore/LayoutMilestones.h>
+#include <WebCore/PageVisibilityState.h>
#include <WebCore/SecurityOrigin.h>
#include <WebCore/UserContentTypes.h>
#include <WebCore/UserScriptTypes.h>
@@ -788,6 +790,23 @@ inline WebCore::LayoutMilestones toLayoutMilestones(WKLayoutMilestones wkMilesto
return milestones;
}
+inline WebCore::PageVisibilityState toPageVisibilityState(WKPageVisibilityState wkPageVisibilityState)
+{
+ switch (wkPageVisibilityState) {
+ case kWKPageVisibilityStateVisible:
+ return WebCore::PageVisibilityStateVisible;
+ case kWKPageVisibilityStateHidden:
+ return WebCore::PageVisibilityStateHidden;
+ case kWKPageVisibilityStatePrerender:
+ return WebCore::PageVisibilityStatePrerender;
+ case kWKPageVisibilityStatePreview:
+ return WebCore::PageVisibilityStatePreview;
+ }
+
+ ASSERT_NOT_REACHED();
+ return WebCore::PageVisibilityStateVisible;
+}
+
inline ImageOptions toImageOptions(WKImageOptions wkImageOptions)
{
unsigned imageOptions = 0;
diff --git a/Source/WebKit2/Target.pri b/Source/WebKit2/Target.pri
index aeefadee7..e47264199 100644
--- a/Source/WebKit2/Target.pri
+++ b/Source/WebKit2/Target.pri
@@ -56,6 +56,7 @@ HEADERS += \
Shared/API/c/WKMutableDictionary.h \
Shared/API/c/WKNumber.h \
Shared/API/c/WKPageLoadTypes.h \
+ Shared/API/c/WKPageVisibilityTypes.h \
Shared/API/c/WKRenderLayer.h \
Shared/API/c/WKRenderObject.h \
Shared/API/c/WKSecurityOrigin.h \
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.cpp b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
index ef871bb4c..c0e17c429 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.cpp
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.cpp
@@ -347,6 +347,11 @@ void WKPageListenForLayoutMilestones(WKPageRef pageRef, WKLayoutMilestones miles
toImpl(pageRef)->listenForLayoutMilestones(toLayoutMilestones(milestones));
}
+void WKPageSetVisibilityState(WKPageRef pageRef, WKPageVisibilityState state, bool isInitialState)
+{
+ toImpl(pageRef)->setVisibilityState(toPageVisibilityState(state), isInitialState);
+}
+
bool WKPageHasHorizontalScrollbar(WKPageRef pageRef)
{
return toImpl(pageRef)->hasHorizontalScrollbar();
diff --git a/Source/WebKit2/UIProcess/API/C/WKPage.h b/Source/WebKit2/UIProcess/API/C/WKPage.h
index 4a25bb63b..b002eef0f 100644
--- a/Source/WebKit2/UIProcess/API/C/WKPage.h
+++ b/Source/WebKit2/UIProcess/API/C/WKPage.h
@@ -33,6 +33,7 @@
#include <WebKit2/WKGeometry.h>
#include <WebKit2/WKNativeEvent.h>
#include <WebKit2/WKPageLoadTypes.h>
+#include <WebKit2/WKPageVisibilityTypes.h>
#ifndef __cplusplus
#include <stdbool.h>
@@ -431,6 +432,8 @@ WK_EXPORT WKSize WKPageFixedLayoutSize(WKPageRef page);
WK_EXPORT void WKPageListenForLayoutMilestones(WKPageRef page, WKLayoutMilestones milestones);
+WK_EXPORT void WKPageSetVisibilityState(WKPageRef page, WKPageVisibilityState state, bool isInitialState);
+
WK_EXPORT bool WKPageHasHorizontalScrollbar(WKPageRef page);
WK_EXPORT bool WKPageHasVerticalScrollbar(WKPageRef page);
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index 9d914cf28..819fd7ad3 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -1588,6 +1588,19 @@ void WebPageProxy::listenForLayoutMilestones(WebCore::LayoutMilestones milestone
m_process->send(Messages::WebPage::ListenForLayoutMilestones(milestones), m_pageID);
}
+void WebPageProxy::setVisibilityState(WebCore::PageVisibilityState visibilityState, bool isInitialState)
+{
+ if (!isValid())
+ return;
+
+#if ENABLE(PAGE_VISIBILITY_API)
+ if (visibilityState != m_visibilityState || isInitialState) {
+ m_visibilityState = visibilityState;
+ m_process->send(Messages::WebPage::SetVisibilityState(visibilityState, isInitialState), m_pageID);
+ }
+#endif
+}
+
void WebPageProxy::setSuppressScrollbarAnimations(bool suppressAnimations)
{
if (!isValid())
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.h b/Source/WebKit2/UIProcess/WebPageProxy.h
index 1b2e9a2b7..b97cdf35e 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.h
+++ b/Source/WebKit2/UIProcess/WebPageProxy.h
@@ -508,6 +508,8 @@ public:
void listenForLayoutMilestones(WebCore::LayoutMilestones);
+ void setVisibilityState(WebCore::PageVisibilityState, bool isInitialState);
+
bool hasHorizontalScrollbar() const { return m_mainFrameHasHorizontalScrollbar; }
bool hasVerticalScrollbar() const { return m_mainFrameHasVerticalScrollbar; }
diff --git a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
index f5893bff4..75550a429 100644
--- a/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
+++ b/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
@@ -571,6 +571,7 @@
9F4F59461648BA8E00493B7E /* NetworkProcessManagerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9F4F59451648BA8E00493B7E /* NetworkProcessManagerMac.mm */; };
9F54F88F16488E87007DF81A /* ChildProcessMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9F54F88E16488E87007DF81A /* ChildProcessMac.mm */; };
9F54F8951648AE0F007DF81A /* PluginProcessManagerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9F54F8941648AE0E007DF81A /* PluginProcessManagerMac.mm */; };
+ A5EFD38C16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5EFD38B16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
B62E7310143047A60069EC35 /* WKHitTestResult.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B62E730F143047A60069EC35 /* WKHitTestResult.cpp */; };
B62E7312143047B00069EC35 /* WKHitTestResult.h in Headers */ = {isa = PBXBuildFile; fileRef = B62E7311143047B00069EC35 /* WKHitTestResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
B63403F914910D57001070B5 /* APIObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B63403F814910D57001070B5 /* APIObject.cpp */; };
@@ -1829,6 +1830,7 @@
9F4F59451648BA8E00493B7E /* NetworkProcessManagerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkProcessManagerMac.mm; path = mac/NetworkProcessManagerMac.mm; sourceTree = "<group>"; };
9F54F88E16488E87007DF81A /* ChildProcessMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ChildProcessMac.mm; sourceTree = "<group>"; };
9F54F8941648AE0E007DF81A /* PluginProcessManagerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginProcessManagerMac.mm; sourceTree = "<group>"; };
+ A5EFD38B16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageVisibilityTypes.h; sourceTree = "<group>"; };
A72D5D7F1236CBA800A88B15 /* WebSerializedScriptValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSerializedScriptValue.h; sourceTree = "<group>"; };
B396EA5512E0ED2D00F4FEB7 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
B62E730F143047A60069EC35 /* WKHitTestResult.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKHitTestResult.cpp; sourceTree = "<group>"; };
@@ -4199,6 +4201,7 @@
BC4075E5124FF0270068F20A /* WKNumber.cpp */,
BC4075E6124FF0270068F20A /* WKNumber.h */,
BC2D021812AC426C00E732A3 /* WKPageLoadTypes.h */,
+ A5EFD38B16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h */,
37948406150C4B9600E52CE9 /* WKRenderLayer.cpp */,
37948407150C4B9600E52CE9 /* WKRenderLayer.h */,
37608820150414F700FC82C7 /* WKRenderObject.cpp */,
@@ -5016,6 +5019,7 @@
5175944B1657080400DD771D /* NetworkResourceLoaderMessages.h in Headers */,
BC8ACA1316670D89004C1941 /* ObjCObjectGraph.h in Headers */,
BC8ACA1516670D89004C1941 /* ObjCObjectGraphCoders.h in Headers */,
+ A5EFD38C16B0E88C00B2F0E8 /* WKPageVisibilityTypes.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
index e7d5611f0..627d748ec 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp
@@ -293,11 +293,6 @@ bool WKBundleIsProcessingUserGesture(WKBundleRef)
return InjectedBundle::isProcessingUserGesture();
}
-void WKBundleSetPageVisibilityState(WKBundleRef bundleRef, WKBundlePageRef pageRef, int state, bool isInitialState)
-{
- toImpl(bundleRef)->setPageVisibilityState(toImpl(pageRef), state, isInitialState);
-}
-
size_t WKBundleGetWorkerThreadCount(WKBundleRef)
{
// Actually do not need argument here, keeping it however for consistency.
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h
index 2cacb5976..f46dcc866 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundlePrivate.h
@@ -97,8 +97,6 @@ WK_EXPORT size_t WKBundleGetJavaScriptObjectsCount(WKBundleRef bundle);
WK_EXPORT bool WKBundleIsProcessingUserGesture(WKBundleRef bundle);
-WK_EXPORT void WKBundleSetPageVisibilityState(WKBundleRef bundle, WKBundlePageRef page, int state, bool isInitialState);
-
WK_EXPORT size_t WKBundleGetWorkerThreadCount(WKBundleRef bundle);
WK_EXPORT void WKBundleSetTabKeyCyclesThroughElements(WKBundleRef bundle, WKBundlePageRef page, bool enabled);
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
index 1b4e85af7..07ccab7e3 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
@@ -58,7 +58,6 @@
#include <WebCore/JSNotification.h>
#include <WebCore/Page.h>
#include <WebCore/PageGroup.h>
-#include <WebCore/PageVisibilityState.h>
#include <WebCore/PrintContext.h>
#include <WebCore/ResourceHandle.h>
#include <WebCore/ResourceLoadScheduler.h>
@@ -567,13 +566,6 @@ void InjectedBundle::didReceiveMessageToPage(WebPage* page, const String& messag
m_client.didReceiveMessageToPage(this, page, messageName, messageBody);
}
-void InjectedBundle::setPageVisibilityState(WebPage* page, int state, bool isInitialState)
-{
-#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
- page->corePage()->setVisibilityState(static_cast<PageVisibilityState>(state), isInitialState);
-#endif
-}
-
size_t InjectedBundle::workerThreadCount()
{
#if ENABLE(WORKERS)
diff --git a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
index 8c065cc14..982473889 100644
--- a/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
+++ b/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.h
@@ -173,8 +173,6 @@ public:
static bool isProcessingUserGesture();
- void setPageVisibilityState(WebPage*, int state, bool isInitialState);
-
static size_t workerThreadCount();
void setTabKeyCyclesThroughElements(WebPage*, bool enabled);
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
index 849c1c1e9..bbabefb72 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -3519,7 +3519,7 @@ FrameView* WebPage::mainFrameView() const
}
#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
-void WebPage::setVisibilityState(int visibilityState, bool isInitialState)
+void WebPage::setVisibilityState(uint32_t visibilityState, bool isInitialState)
{
if (!m_page)
return;
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.h b/Source/WebKit2/WebProcess/WebPage/WebPage.h
index d4817c028..5d7dafff8 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.h
@@ -55,9 +55,8 @@
#include <WebCore/Editor.h>
#include <WebCore/FrameLoaderTypes.h>
#include <WebCore/IntRect.h>
-#if ENABLE(PAGE_VISIBILITY_API)
+#include <WebCore/Page.h>
#include <WebCore/PageVisibilityState.h>
-#endif
#include <WebCore/PlatformScreen.h>
#include <WebCore/ScrollTypes.h>
#include <WebCore/WebCoreKeyboardUIMode.h>
@@ -580,7 +579,7 @@ public:
bool willGoToBackForwardItemCallbackEnabled() const { return m_willGoToBackForwardItemCallbackEnabled; }
#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
- void setVisibilityState(int visibilityState, bool isInitialState);
+ void setVisibilityState(uint32_t /* WebCore::PageVisibilityState */, bool isInitialState);
#endif
#if PLATFORM(GTK) && USE(TEXTURE_MAPPER_GL)
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
index ad4292b4b..057435ec3 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
@@ -307,7 +307,7 @@ messages -> WebPage {
#endif
#if ENABLE(PAGE_VISIBILITY_API) || ENABLE(HIDDEN_PAGE_DOM_TIMER_THROTTLING)
- SetVisibilityState(int visibilityState, bool isInitialState)
+ SetVisibilityState(uint32_t visibilityState, bool isInitialState)
#endif
#if PLATFORM(GTK) && USE(TEXTURE_MAPPER_GL)
diff --git a/Tools/DumpRenderTree/mac/TestRunnerMac.mm b/Tools/DumpRenderTree/mac/TestRunnerMac.mm
index b520e096f..c6a2f4a37 100644
--- a/Tools/DumpRenderTree/mac/TestRunnerMac.mm
+++ b/Tools/DumpRenderTree/mac/TestRunnerMac.mm
@@ -43,7 +43,6 @@
#import <JavaScriptCore/JSStringRef.h>
#import <JavaScriptCore/JSStringRefCF.h>
#import <WebCore/GeolocationPosition.h>
-#import <WebCore/PageVisibilityState.h>
#import <WebKit/DOMDocument.h>
#import <WebKit/DOMElement.h>
#import <WebKit/WebApplicationCache.h>
@@ -1156,9 +1155,8 @@ void TestRunner::setBackingScaleFactor(double backingScaleFactor)
void TestRunner::resetPageVisibility()
{
WebView *webView = [mainFrame webView];
- if ([webView respondsToSelector:@selector(_setVisibilityState:isInitialState:)]) {
- [webView _setVisibilityState:WebCore::PageVisibilityStateVisible isInitialState:NO];
- }
+ if ([webView respondsToSelector:@selector(_setVisibilityState:isInitialState:)])
+ [webView _setVisibilityState:WebPageVisibilityStateVisible isInitialState:YES];
}
void TestRunner::setPageVisibility(const char* newVisibility)
@@ -1168,13 +1166,13 @@ void TestRunner::setPageVisibility(const char* newVisibility)
WebView *webView = [mainFrame webView];
if (!strcmp(newVisibility, "visible"))
- [webView _setVisibilityState:WebCore::PageVisibilityStateVisible isInitialState:NO];
+ [webView _setVisibilityState:WebPageVisibilityStateVisible isInitialState:NO];
else if (!strcmp(newVisibility, "hidden"))
- [webView _setVisibilityState:WebCore::PageVisibilityStateHidden isInitialState:NO];
+ [webView _setVisibilityState:WebPageVisibilityStateHidden isInitialState:NO];
else if (!strcmp(newVisibility, "prerender"))
- [webView _setVisibilityState:WebCore::PageVisibilityStatePrerender isInitialState:NO];
+ [webView _setVisibilityState:WebPageVisibilityStatePrerender isInitialState:NO];
else if (!strcmp(newVisibility, "preview"))
- [webView _setVisibilityState:WebCore::PageVisibilityStatePreview isInitialState:NO];
+ [webView _setVisibilityState:WebPageVisibilityStatePreview isInitialState:NO];
}
void TestRunner::sendWebIntentResponse(JSStringRef)
diff --git a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
index 249fc4aa6..cfda4b91d 100644
--- a/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
+++ b/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
@@ -95,6 +95,7 @@
9B26FCCA159D16DE00CC3765 /* HTMLFormCollectionNamedItem.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B26FCB4159D15E700CC3765 /* HTMLFormCollectionNamedItem.html */; };
9B4F8FA4159D52B1002D9F94 /* HTMLCollectionNamedItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9B4F8FA3159D52B1002D9F94 /* HTMLCollectionNamedItem.mm */; };
9B4F8FA7159D52DD002D9F94 /* HTMLCollectionNamedItem.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9B4F8FA6159D52CA002D9F94 /* HTMLCollectionNamedItem.html */; };
+ A51B650916ADF9B1007AA5D9 /* PageVisibilityState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A51B650816ADF9B1007AA5D9 /* PageVisibilityState.cpp */; };
A5E2027315B2181900C13E14 /* WindowlessWebViewWithMedia.mm in Sources */ = {isa = PBXBuildFile; fileRef = A5E2027215B2181900C13E14 /* WindowlessWebViewWithMedia.mm */; };
A5E2027515B21F6E00C13E14 /* WindowlessWebViewWithMedia.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = A5E2027015B2180600C13E14 /* WindowlessWebViewWithMedia.html */; };
A7A966DB140ECCC8005EF9B4 /* CheckedArithmeticOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7A966DA140ECCC8005EF9B4 /* CheckedArithmeticOperations.cpp */; };
@@ -341,6 +342,7 @@
9B26FCB4159D15E700CC3765 /* HTMLFormCollectionNamedItem.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = HTMLFormCollectionNamedItem.html; sourceTree = "<group>"; };
9B4F8FA3159D52B1002D9F94 /* HTMLCollectionNamedItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = HTMLCollectionNamedItem.mm; sourceTree = "<group>"; };
9B4F8FA6159D52CA002D9F94 /* HTMLCollectionNamedItem.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = HTMLCollectionNamedItem.html; sourceTree = "<group>"; };
+ A51B650816ADF9B1007AA5D9 /* PageVisibilityState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PageVisibilityState.cpp; sourceTree = "<group>"; };
A5E2027015B2180600C13E14 /* WindowlessWebViewWithMedia.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = WindowlessWebViewWithMedia.html; sourceTree = "<group>"; };
A5E2027215B2181900C13E14 /* WindowlessWebViewWithMedia.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WindowlessWebViewWithMedia.mm; sourceTree = "<group>"; };
A7A966DA140ECCC8005EF9B4 /* CheckedArithmeticOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CheckedArithmeticOperations.cpp; path = WTF/CheckedArithmeticOperations.cpp; sourceTree = "<group>"; };
@@ -624,6 +626,7 @@
93F7E86E14DC8E5B00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames_Bundle.cpp */,
BC909779125571AB00083756 /* PageLoadBasic.cpp */,
BC2D004812A9FDFA00E732A3 /* PageLoadDidChangeLocationWithinPageForFrame.cpp */,
+ A51B650816ADF9B1007AA5D9 /* PageVisibilityState.cpp */,
52E5CE4514D21E9D003B2BD8 /* ParentFrame.cpp */,
52E5CE4814D21EAB003B2BD8 /* ParentFrame_Bundle.cpp */,
333B9CE11277F23100FEFCE3 /* PreventEmptyUserAgent.cpp */,
@@ -973,6 +976,7 @@
93F7E86C14DC8E4D00C84A99 /* NewFirstVisuallyNonEmptyLayoutFrames.cpp in Sources */,
BC90977A125571AB00083756 /* PageLoadBasic.cpp in Sources */,
BC2D004912A9FDFA00E732A3 /* PageLoadDidChangeLocationWithinPageForFrame.cpp in Sources */,
+ A51B650916ADF9B1007AA5D9 /* PageVisibilityState.cpp in Sources */,
52E5CE4614D21E9D003B2BD8 /* ParentFrame.cpp in Sources */,
BC575BC0126F5752006F0F12 /* PlatformUtilities.cpp in Sources */,
BC131885117114B600B69727 /* PlatformUtilitiesMac.mm in Sources */,
diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp
new file mode 100644
index 000000000..00c79ce3a
--- /dev/null
+++ b/Tools/TestWebKitAPI/Tests/WebKit2/PageVisibilityState.cpp
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "PlatformUtilities.h"
+#include "PlatformWebView.h"
+#include "Test.h"
+#include <JavaScriptCore/JSContextRef.h>
+#include <WebKit2/WKRetainPtr.h>
+#include <WebKit2/WKSerializedScriptValue.h>
+
+namespace TestWebKitAPI {
+
+static bool testDone;
+
+static void didRunStep1StateChangeVisibleToHidden(WKSerializedScriptValueRef, WKErrorRef, void*);
+static void didRunStep2StateChangeHiddenToPrerender(WKSerializedScriptValueRef, WKErrorRef, void*);
+static void didRunStep3StateChangePrerenderToPreview(WKSerializedScriptValueRef, WKErrorRef, void*);
+static void didRunStep4InStatePreview(WKSerializedScriptValueRef, WKErrorRef, void*);
+
+static void setPageVisibilityStateWithEvalContinuation(PlatformWebView* webView, WKPageVisibilityState visibilityState, WKPageRunJavaScriptFunction callback)
+{
+ WKPageSetVisibilityState(webView->page(), visibilityState, false);
+ WKRetainPtr<WKStringRef> javaScriptString(AdoptWK, WKStringCreateWithUTF8CString("document.webkitVisibilityState"));
+ WKPageRunJavaScriptInMainFrame(webView->page(), javaScriptString.get(), static_cast<void*>(webView), callback);
+}
+
+static void assertSerializedScriptValueIsStringValue(WKSerializedScriptValueRef serializedValue, WKErrorRef error, const char *expected)
+{
+ EXPECT_NULL(error);
+ EXPECT_NOT_NULL(serializedValue);
+ if (error || !serializedValue)
+ return;
+
+ JSGlobalContextRef scriptContext = JSGlobalContextCreate(0);
+ JSValueRef scriptValue = WKSerializedScriptValueDeserialize(serializedValue, scriptContext, 0);
+ EXPECT_TRUE(JSValueIsString(scriptContext, scriptValue));
+ if (!JSValueIsString(scriptContext, scriptValue)) {
+ JSGlobalContextRelease(scriptContext);
+ return;
+ }
+
+ JSStringRef expectedString = JSStringCreateWithUTF8CString(expected);
+ JSStringRef scriptString = JSValueToStringCopy(scriptContext, scriptValue, 0);
+ EXPECT_TRUE(JSStringIsEqual(scriptString, expectedString));
+
+ JSStringRelease(scriptString);
+ JSStringRelease(expectedString);
+ JSGlobalContextRelease(scriptContext);
+}
+
+static void didRunStep1StateChangeVisibleToHidden(WKSerializedScriptValueRef resultSerializedScriptValue, WKErrorRef error, void* context)
+{
+ assertSerializedScriptValueIsStringValue(resultSerializedScriptValue, error, "visible");
+ setPageVisibilityStateWithEvalContinuation(static_cast<PlatformWebView*>(context), kWKPageVisibilityStateHidden, didRunStep2StateChangeHiddenToPrerender);
+}
+
+static void didRunStep2StateChangeHiddenToPrerender(WKSerializedScriptValueRef resultSerializedScriptValue, WKErrorRef error, void* context)
+{
+ assertSerializedScriptValueIsStringValue(resultSerializedScriptValue, error, "hidden");
+ setPageVisibilityStateWithEvalContinuation(static_cast<PlatformWebView*>(context), kWKPageVisibilityStatePrerender, didRunStep3StateChangePrerenderToPreview);
+}
+
+static void didRunStep3StateChangePrerenderToPreview(WKSerializedScriptValueRef resultSerializedScriptValue, WKErrorRef error, void* context)
+{
+ assertSerializedScriptValueIsStringValue(resultSerializedScriptValue, error, "prerender");
+ setPageVisibilityStateWithEvalContinuation(static_cast<PlatformWebView*>(context), kWKPageVisibilityStatePreview, didRunStep4InStatePreview);
+}
+
+static void didRunStep4InStatePreview(WKSerializedScriptValueRef resultSerializedScriptValue, WKErrorRef error, void* context)
+{
+ assertSerializedScriptValueIsStringValue(resultSerializedScriptValue, error, "preview");
+ testDone = true;
+}
+
+TEST(WebKit2, PageVisibilityState)
+{
+ WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate());
+
+ // Pass the PlatformWebView webView on as the context of the evals, so we can continue to eval on it.
+ PlatformWebView webView(context.get());
+ setPageVisibilityStateWithEvalContinuation(&webView, kWKPageVisibilityStateVisible, didRunStep1StateChangeVisibleToHidden);
+
+ Util::run(&testDone);
+}
+
+} // namespace TestWebKitAPI
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"));