- Revision
- 206833
- Author
- [email protected]
- Date
- 2016-10-05 16:08:44 -0700 (Wed, 05 Oct 2016)
Log Message
Avoid automatically re-taking snapshots for back-forward items that were never loaded into the view
https://bugs.webkit.org/show_bug.cgi?id=162955
<rdar://problem/27659173>
Reviewed by Simon Fraser.
Make it possible for clients to control the snapshot for back-forward
items that are restored from session state without navigating to them,
by ensuring that we won't stomp on the snapshot that they explicitly take,
until a load occurs.
* UIProcess/WebBackForwardList.cpp:
(WebKit::WebBackForwardList::addItem):
(WebKit::WebBackForwardList::goToItem):
* UIProcess/ios/ViewGestureControllerIOS.mm:
(WebKit::ViewGestureController::beginSwipeGesture):
* UIProcess/mac/ViewGestureControllerMac.mm:
(WebKit::ViewGestureController::trackSwipeGesture):
Disambiguate explicit API-driven snapshot recording from automatic,
navigation-driven snapshot recording.
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::saveBackForwardSnapshotForCurrentItem):
Get rid of the version of recordNavigationSnapshot() that doesn't take a
back-forward list item, and grab the current item at the one remaining caller.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::recordAutomaticNavigationSnapshot):
(WebKit::WebPageProxy::recordNavigationSnapshot):
(WebKit::WebPageProxy::restoreFromSessionState):
(WebKit::WebPageProxy::didCommitLoadForFrame):
* UIProcess/WebPageProxy.h:
Rename m_suppressNavigationSnapshotting to m_suppressAutomaticNavigationSnapshotting,
and make it be only about automatic (navigation-driven) snapshots; it won't have
any impact on explicit snapshots forced by clients.
Set m_suppressAutomaticNavigationSnapshotting unconditionally when restoring
from session state, so that we won't start automatically snapshotting until
something has loaded in the view.
* TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
(-[SnapshotTestWKWebView init]):
(forceRepaintCallback):
(-[SnapshotTestWKWebView synchronouslyForceRepaint]):
(-[SnapshotTestWKWebView synchronouslyLoadTestPageAndForceRepaint:]):
(TEST):
(makeRedSquareView):
Add a test that restoring session state into a web view without navigating,
then explicitly snapshotting and navigating away, leaves the original snapshot alone.
Adjust the existing test, as well, to ensure that it will reliably fail
if the feature is broken. Use an explicitly added and removed red square
instead of scrolling, because we can't scroll in the restore-without-navigating case.
Stop trying to override the window scale, because it's not working (we're getting partial snapshots)
and isn't necessary; instead just multiply the expected value by the page scale.
(-[SnapshotTestWKWebView loadPageNamed:]): Deleted.
* TestWebKitAPI/mac/TestWKWebViewMac.h:
* TestWebKitAPI/mac/TestWKWebViewMac.mm:
(-[TestWKWebView synchronouslyLoadTestPageNamed:]):
Reorganize to reduce duplication.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (206832 => 206833)
--- trunk/Source/WebKit2/ChangeLog 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/ChangeLog 2016-10-05 23:08:44 UTC (rev 206833)
@@ -1,5 +1,47 @@
2016-10-05 Tim Horton <[email protected]>
+ Avoid automatically re-taking snapshots for back-forward items that were never loaded into the view
+ https://bugs.webkit.org/show_bug.cgi?id=162955
+ <rdar://problem/27659173>
+
+ Reviewed by Simon Fraser.
+
+ Make it possible for clients to control the snapshot for back-forward
+ items that are restored from session state without navigating to them,
+ by ensuring that we won't stomp on the snapshot that they explicitly take,
+ until a load occurs.
+
+ * UIProcess/WebBackForwardList.cpp:
+ (WebKit::WebBackForwardList::addItem):
+ (WebKit::WebBackForwardList::goToItem):
+ * UIProcess/ios/ViewGestureControllerIOS.mm:
+ (WebKit::ViewGestureController::beginSwipeGesture):
+ * UIProcess/mac/ViewGestureControllerMac.mm:
+ (WebKit::ViewGestureController::trackSwipeGesture):
+ Disambiguate explicit API-driven snapshot recording from automatic,
+ navigation-driven snapshot recording.
+
+ * UIProcess/Cocoa/WebViewImpl.mm:
+ (WebKit::WebViewImpl::saveBackForwardSnapshotForCurrentItem):
+ Get rid of the version of recordNavigationSnapshot() that doesn't take a
+ back-forward list item, and grab the current item at the one remaining caller.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::recordAutomaticNavigationSnapshot):
+ (WebKit::WebPageProxy::recordNavigationSnapshot):
+ (WebKit::WebPageProxy::restoreFromSessionState):
+ (WebKit::WebPageProxy::didCommitLoadForFrame):
+ * UIProcess/WebPageProxy.h:
+ Rename m_suppressNavigationSnapshotting to m_suppressAutomaticNavigationSnapshotting,
+ and make it be only about automatic (navigation-driven) snapshots; it won't have
+ any impact on explicit snapshots forced by clients.
+
+ Set m_suppressAutomaticNavigationSnapshotting unconditionally when restoring
+ from session state, so that we won't start automatically snapshotting until
+ something has loaded in the view.
+
+2016-10-05 Tim Horton <[email protected]>
+
Make it possible to test ViewSnapshotStore behaviors
https://bugs.webkit.org/show_bug.cgi?id=162983
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/WebViewImpl.mm 2016-10-05 23:08:44 UTC (rev 206833)
@@ -3184,7 +3184,8 @@
void WebViewImpl::saveBackForwardSnapshotForCurrentItem()
{
- m_page->recordNavigationSnapshot();
+ if (WebBackForwardListItem* item = m_page->backForwardList().currentItem())
+ m_page->recordNavigationSnapshot(*item);
}
void WebViewImpl::saveBackForwardSnapshotForItem(WebBackForwardListItem& item)
Modified: trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp 2016-10-05 23:08:44 UTC (rev 206833)
@@ -93,7 +93,7 @@
Vector<RefPtr<WebBackForwardListItem>> removedItems;
if (m_hasCurrentIndex) {
- m_page->recordNavigationSnapshot();
+ m_page->recordAutomaticNavigationSnapshot();
// Toss everything in the forward list.
unsigned targetSize = m_currentIndex + 1;
@@ -187,7 +187,7 @@
WebBackForwardListItem* currentItem = m_entries[m_currentIndex].get();
bool shouldKeepCurrentItem = true;
if (currentItem != item) {
- m_page->recordNavigationSnapshot();
+ m_page->recordAutomaticNavigationSnapshot();
shouldKeepCurrentItem = m_page->shouldKeepCurrentBackForwardListItemInList(m_entries[m_currentIndex].get());
}
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2016-10-05 23:08:44 UTC (rev 206833)
@@ -1191,8 +1191,11 @@
return WTFMove(navigation);
}
-void WebPageProxy::recordNavigationSnapshot()
+void WebPageProxy::recordAutomaticNavigationSnapshot()
{
+ if (m_suppressAutomaticNavigationSnapshotting)
+ return;
+
if (WebBackForwardListItem* item = m_backForwardList->currentItem())
recordNavigationSnapshot(*item);
}
@@ -1199,7 +1202,7 @@
void WebPageProxy::recordNavigationSnapshot(WebBackForwardListItem& item)
{
- if (!m_shouldRecordNavigationSnapshots || m_suppressNavigationSnapshotting)
+ if (!m_shouldRecordNavigationSnapshots)
return;
#if PLATFORM(COCOA)
@@ -2392,11 +2395,9 @@
process().send(Messages::WebPage::RestoreSession(m_backForwardList->itemStates()), m_pageID);
- if (navigate) {
- // The back / forward list was restored from a sessionState so we don't want to snapshot the current
- // page when navigating away. Suppress navigation snapshotting until the next load has committed
- m_suppressNavigationSnapshotting = true;
- }
+ // The back / forward list was restored from a sessionState so we don't want to snapshot the current
+ // page when navigating away. Suppress navigation snapshotting until the next load has committed
+ m_suppressAutomaticNavigationSnapshotting = true;
}
// FIXME: Navigating should be separate from state restoration.
@@ -3270,7 +3271,7 @@
if (frame->isMainFrame()) {
m_pageLoadState.didCommitLoad(transaction, webCertificateInfo, markPageInsecure);
- m_suppressNavigationSnapshotting = false;
+ m_suppressAutomaticNavigationSnapshotting = false;
} else if (markPageInsecure)
m_pageLoadState.didDisplayOrRunInsecureContent(transaction);
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2016-10-05 23:08:44 UTC (rev 206833)
@@ -1003,7 +1003,7 @@
bool shouldRecordNavigationSnapshots() const { return m_shouldRecordNavigationSnapshots; }
void setShouldRecordNavigationSnapshots(bool shouldRecordSnapshots) { m_shouldRecordNavigationSnapshots = shouldRecordSnapshots; }
- void recordNavigationSnapshot();
+ void recordAutomaticNavigationSnapshot();
void recordNavigationSnapshot(WebBackForwardListItem&);
#if PLATFORM(COCOA)
@@ -1843,7 +1843,7 @@
bool m_waitingForDidUpdateViewState;
bool m_shouldScaleViewToFitDocument { false };
- bool m_suppressNavigationSnapshotting { false };
+ bool m_suppressAutomaticNavigationSnapshotting { false };
#if PLATFORM(COCOA)
HashMap<String, String> m_temporaryPDFFiles;
Modified: trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/ios/ViewGestureControllerIOS.mm 2016-10-05 23:08:44 UTC (rev 206833)
@@ -157,7 +157,7 @@
if (m_activeGestureType != ViewGestureType::None)
return;
- m_webPageProxy.recordNavigationSnapshot();
+ m_webPageProxy.recordAutomaticNavigationSnapshot();
m_webPageProxyForBackForwardListForCurrentSwipe = m_alternateBackForwardListSourceView.get() ? m_alternateBackForwardListSourceView.get()->_page : &m_webPageProxy;
m_webPageProxyForBackForwardListForCurrentSwipe->navigationGestureDidBegin();
Modified: trunk/Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm (206832 => 206833)
--- trunk/Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Source/WebKit2/UIProcess/mac/ViewGestureControllerMac.mm 2016-10-05 23:08:44 UTC (rev 206833)
@@ -399,7 +399,7 @@
m_pendingSwipeTracker.reset("starting to track swipe");
- m_webPageProxy.recordNavigationSnapshot();
+ m_webPageProxy.recordAutomaticNavigationSnapshot();
BOOL swipingLeft = isPhysicallySwipingLeft(direction);
CGFloat maxProgress = swipingLeft ? 1 : 0;
Modified: trunk/Tools/ChangeLog (206832 => 206833)
--- trunk/Tools/ChangeLog 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Tools/ChangeLog 2016-10-05 23:08:44 UTC (rev 206833)
@@ -1,5 +1,36 @@
2016-10-05 Tim Horton <[email protected]>
+ Avoid automatically re-taking snapshots for back-forward items that were never loaded into the view
+ https://bugs.webkit.org/show_bug.cgi?id=162955
+ <rdar://problem/27659173>
+
+ Reviewed by Simon Fraser.
+
+ * TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm:
+ (-[SnapshotTestWKWebView init]):
+ (forceRepaintCallback):
+ (-[SnapshotTestWKWebView synchronouslyForceRepaint]):
+ (-[SnapshotTestWKWebView synchronouslyLoadTestPageAndForceRepaint:]):
+ (TEST):
+ (makeRedSquareView):
+ Add a test that restoring session state into a web view without navigating,
+ then explicitly snapshotting and navigating away, leaves the original snapshot alone.
+
+ Adjust the existing test, as well, to ensure that it will reliably fail
+ if the feature is broken. Use an explicitly added and removed red square
+ instead of scrolling, because we can't scroll in the restore-without-navigating case.
+
+ Stop trying to override the window scale, because it's not working (we're getting partial snapshots)
+ and isn't necessary; instead just multiply the expected value by the page scale.
+
+ (-[SnapshotTestWKWebView loadPageNamed:]): Deleted.
+ * TestWebKitAPI/mac/TestWKWebViewMac.h:
+ * TestWebKitAPI/mac/TestWKWebViewMac.mm:
+ (-[TestWKWebView synchronouslyLoadTestPageNamed:]):
+ Reorganize to reduce duplication.
+
+2016-10-05 Tim Horton <[email protected]>
+
Make it possible to test ViewSnapshotStore behaviors
https://bugs.webkit.org/show_bug.cgi?id=162983
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm (206832 => 206833)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/SnapshotStore.mm 2016-10-05 23:08:44 UTC (rev 206833)
@@ -28,22 +28,21 @@
#if WK_API_ENABLED && PLATFORM(MAC)
-#import "_javascript_Test.h"
#import "PlatformUtilities.h"
#import "Test.h"
#import "TestNavigationDelegate.h"
#import "TestWKWebViewMac.h"
#import <WebKit/WKBackForwardListItemPrivate.h>
+#import <WebKit/WKPage.h>
+#import <WebKit/WKPagePrivate.h>
#import <WebKit/WKWebView.h>
#import <WebKit/WKWebViewPrivate.h>
#import <wtf/RetainPtr.h>
+static bool didForceRepaint;
+
using namespace TestWebKitAPI;
-@interface NSWindow ()
-- (void)_setWindowResolution:(CGFloat)resolution displayIfChanged:(BOOL)displayIfChanged;
-@end
-
@interface WKWebView ()
- (WKPageRef)_pageForTesting;
@end
@@ -58,23 +57,35 @@
{
self = [super initWithFrame:NSMakeRect(0, 0, 800, 600)];
if (self) {
- [self _setOverrideDeviceScaleFactor:1];
[self _disableBackForwardSnapshotVolatilityForTesting];
[self setAllowsBackForwardNavigationGestures:YES];
[self _setWindowOcclusionDetectionEnabled:NO];
- [self.window _setWindowResolution:1 displayIfChanged:YES];
[self.window orderBack:nil];
}
return self;
}
-- (void)loadPageNamed:(NSString *)pageName
+static void forceRepaintCallback(WKErrorRef error, void*)
{
- [self loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:pageName withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
- [self _test_waitForDidFinishNavigation];
+ EXPECT_NULL(error);
+ didForceRepaint = true;
}
+- (void)synchronouslyForceRepaint
+{
+ didForceRepaint = false;
+ WKPageForceRepaint([self _pageForTesting], 0, forceRepaintCallback);
+ TestWebKitAPI::Util::run(&didForceRepaint);
+}
+
+- (void)synchronouslyLoadTestPageAndForceRepaint:(NSString *)testPageName
+{
+ [self synchronouslyLoadTestPageNamed:testPageName];
+ [self synchronouslyForceRepaint];
+ [[self window] display];
+}
+
@end
static bool imagesAreEqual(CGImageRef first, CGImageRef second)
@@ -89,7 +100,7 @@
{
RetainPtr<SnapshotTestWKWebView> webView = adoptNS([[SnapshotTestWKWebView alloc] init]);
- [webView loadPageNamed:@"simple"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
RetainPtr<WKBackForwardListItem> firstItem = [[webView backForwardList] currentItem];
@@ -96,12 +107,12 @@
RetainPtr<CGImageRef> imageBeforeNavigation = adoptCF([firstItem _copySnapshotForTesting]);
EXPECT_NULL(imageBeforeNavigation.get());
- [webView loadPageNamed:@"lots-of-text"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"lots-of-text"];
// After navigating, the first item should have a valid back-forward snapshot.
RetainPtr<CGImageRef> imageAfterNavigation = adoptCF([firstItem _copySnapshotForTesting]);
EXPECT_NOT_NULL(imageAfterNavigation.get());
- EXPECT_EQ(CGImageGetWidth(imageAfterNavigation.get()), (unsigned long)800);
+ EXPECT_EQ(CGImageGetWidth(imageAfterNavigation.get()), (unsigned long)(800 * [webView window].backingScaleFactor));
}
TEST(SnapshotStore, SnapshotClearedWhenItemIsRemoved)
@@ -108,12 +119,12 @@
{
RetainPtr<SnapshotTestWKWebView> webView = adoptNS([[SnapshotTestWKWebView alloc] init]);
- [webView loadPageNamed:@"simple"];
- [webView loadPageNamed:@"lots-of-text"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"lots-of-text"];
RetainPtr<WKBackForwardListItem> item = [[webView backForwardList] currentItem];
- [webView loadPageNamed:@"simple"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
EXPECT_NOT_NULL(adoptCF([item _copySnapshotForTesting]).get());
@@ -125,7 +136,7 @@
// The original second item is still in the forward list, and should still have a snapshot.
EXPECT_NOT_NULL(adoptCF([item _copySnapshotForTesting]).get());
- [webView loadPageNamed:@"lots-of-text"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"lots-of-text"];
// The original second item shouldn't have an image anymore, because it was invalidated
// by navigating back past it and then doing another load.
@@ -132,20 +143,31 @@
EXPECT_NULL(adoptCF([item _copySnapshotForTesting]).get());
}
+static RetainPtr<NSView> makeRedSquareView()
+{
+ RetainPtr<NSBox> redSquare = adoptNS([[NSBox alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)]);
+ [redSquare setBoxType:NSBoxCustom];
+ [redSquare setFillColor:[NSColor redColor]];
+ return redSquare;
+}
+
TEST(SnapshotStore, ExplicitSnapshotsChangeUponNavigation)
{
RetainPtr<SnapshotTestWKWebView> webView = adoptNS([[SnapshotTestWKWebView alloc] init]);
- [webView loadPageNamed:@"lots-of-text"];
+ RetainPtr<NSView> redSquare = makeRedSquareView();
+ [[webView superview] addSubview:redSquare.get()];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"lots-of-text"];
+
RetainPtr<WKBackForwardListItem> firstItem = [[webView backForwardList] currentItem];
[webView _saveBackForwardSnapshotForItem:firstItem.get()];
+ [redSquare removeFromSuperview];
RetainPtr<CGImageRef> initialSnapshot = adoptCF([firstItem _copySnapshotForTesting]);
EXPECT_NOT_NULL(initialSnapshot);
- EXPECT_JS_EQ([webView _pageForTesting], "window.scrollTo(0,100)", "undefined");
- [webView loadPageNamed:@"simple"];
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
// After navigating, the first item's snapshot should change.
RetainPtr<CGImageRef> snapshotAfterNavigation = adoptCF([firstItem _copySnapshotForTesting]);
@@ -153,4 +175,34 @@
EXPECT_FALSE(imagesAreEqual(initialSnapshot.get(), snapshotAfterNavigation.get()));
}
+TEST(SnapshotStore, SnapshotsForNeverLoadedPagesDoNotChangeUponNavigation)
+{
+ RetainPtr<SnapshotTestWKWebView> webView = adoptNS([[SnapshotTestWKWebView alloc] init]);
+
+ RetainPtr<NSView> redSquare = makeRedSquareView();
+ [[webView superview] addSubview:redSquare.get()];
+
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
+
+ WKRetainPtr<WKSessionStateRef> sessionState = adoptWK(static_cast<WKSessionStateRef>(WKPageCopySessionState([webView _pageForTesting], nullptr, nullptr)));
+ WKPageRestoreFromSessionStateWithoutNavigation([webView _pageForTesting], sessionState.get());
+
+ RetainPtr<WKBackForwardListItem> firstItem = [[webView backForwardList] currentItem];
+ [webView _saveBackForwardSnapshotForItem:firstItem.get()];
+ [redSquare removeFromSuperview];
+
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"lots-of-text"];
+
+ RetainPtr<CGImageRef> initialSnapshot = adoptCF([firstItem _copySnapshotForTesting]);
+ EXPECT_NOT_NULL(initialSnapshot);
+
+ [webView synchronouslyLoadTestPageAndForceRepaint:@"simple"];
+
+ // After navigating, the first item's snapshot should not change, because it was
+ // never loaded into the view.
+ RetainPtr<CGImageRef> snapshotAfterNavigation = adoptCF([firstItem _copySnapshotForTesting]);
+ EXPECT_NOT_NULL(snapshotAfterNavigation.get());
+ EXPECT_TRUE(imagesAreEqual(initialSnapshot.get(), snapshotAfterNavigation.get()));
+}
+
#endif // WK_API_ENABLED && PLATFORM(MAC)
Modified: trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h (206832 => 206833)
--- trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.h 2016-10-05 23:08:44 UTC (rev 206833)
@@ -39,6 +39,7 @@
- (void)mouseDownAtPoint:(NSPoint)point simulatePressure:(BOOL)simulatePressure;
- (void)performAfterReceivingMessage:(NSString *)message action:(dispatch_block_t)action;
- (void)loadTestPageNamed:(NSString *)pageName;
+- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName;
- (void)typeCharacter:(char)character;
- (NSString *)stringByEvaluatingJavaScript:(NSString *)script;
- (void)waitForMessage:(NSString *)message;
Modified: trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm (206832 => 206833)
--- trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm 2016-10-05 22:30:25 UTC (rev 206832)
+++ trunk/Tools/TestWebKitAPI/mac/TestWKWebViewMac.mm 2016-10-05 23:08:44 UTC (rev 206833)
@@ -28,6 +28,7 @@
#if WK_API_ENABLED && PLATFORM(MAC)
+#import "TestNavigationDelegate.h"
#import "Utilities.h"
#import <AppKit/AppKit.h>
@@ -184,6 +185,12 @@
[self loadRequest:request];
}
+- (void)synchronouslyLoadTestPageNamed:(NSString *)pageName
+{
+ [self loadTestPageNamed:pageName];
+ [self _test_waitForDidFinishNavigation];
+}
+
- (void)typeCharacter:(char)character {
NSString *characterAsString = [NSString stringWithFormat:@"%c" , character];
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200