Source/WebKit2/ChangeLog

112016-08-04 Chris Dumez <cdumez@apple.com>
22
 3 Write API test to cover crash fix in r204135
 4 https://bugs.webkit.org/show_bug.cgi?id=160587
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Call didClose() in WebProcessProxy::requestTermination() so that
 9 the processDidCrash() delegates get called in API tests whenever
 10 a WebContent process is terminated to simulate a crash.
 11
 12 * UIProcess/WebProcessProxy.cpp:
 13 (WebKit::WebProcessProxy::requestTermination):
 14
 152016-08-04 Chris Dumez <cdumez@apple.com>
 16
317 Crash under NavigationState::NavigationClient::processDidCrash()
418 https://bugs.webkit.org/show_bug.cgi?id=160563
519 <rdar://problem/19814215>

Source/WebKit2/UIProcess/WebProcessProxy.cpp

@@void WebProcessProxy::requestTermination()
804804
805805 ChildProcessProxy::terminate();
806806
807  if (webConnection())
808  webConnection()->didClose();
 807 didClose(*connection());
809808
810809 shutDown();
811810}

Tools/ChangeLog

 12016-08-04 Chris Dumez <cdumez@apple.com>
 2
 3 Write API test to cover crash fix in r204135
 4 https://bugs.webkit.org/show_bug.cgi?id=160587
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Add API test to cover crash fix in r204135. This reproduces the crash
 9 by destroying a related WKWebView in the webViewWebContentProcessDidTerminate
 10 callback.
 11
 12 * TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm:
 13 (-[NavigationDelegate webViewWebContentProcessDidTerminate:]):
 14 (TEST):
 15
1162016-08-04 Dean Johnson <dean_johnson@apple.com>
217
318 UI improvements to Flakiness Dashboard.

Tools/TestWebKitAPI/Tests/WebKit2Cocoa/Navigation.mm

2727
2828#import <WebKit/WKNavigationPrivate.h>
2929#import <WebKit/WKNavigationDelegate.h>
 30#import <WebKit/WKProcessPoolPrivate.h>
3031#import <WebKit/WKWebView.h>
 32#import <WebKit/WKWebViewConfigurationPrivate.h>
 33#import <WebKit/WKWebViewPrivate.h>
 34#import <WebKit/_WKProcessPoolConfiguration.h>
3135#import <wtf/RetainPtr.h>
3236#import "PlatformUtilities.h"
3337#import "Test.h"

3539#if WK_API_ENABLED
3640
3741static bool isDone;
 42static std::function<void()> crashHandler;
3843static RetainPtr<WKNavigation> currentNavigation;
3944
4045@interface NavigationDelegate : NSObject <WKNavigationDelegate>

@@- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigat
6065 isDone = true;
6166}
6267
 68- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView
 69{
 70 crashHandler();
 71}
 72
6373@end
6474
6575TEST(WKNavigation, NavigationDelegate)

@@TEST(WKNavigation, DecidePolicyForPageCacheNavigation)
187197 ASSERT_TRUE([delegate decidedPolicyForBackForwardNavigation]);
188198}
189199
 200TEST(WKNavigation, WebContentProcessDidTerminate)
 201{
 202 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 203 RetainPtr<_WKProcessPoolConfiguration> poolConfiguration = adoptNS([[_WKProcessPoolConfiguration alloc] init]);
 204 poolConfiguration.get().maximumProcessCount = 1;
 205 RetainPtr<WKProcessPool> processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:poolConfiguration.get()]);
 206
 207 RetainPtr<WKWebViewConfiguration> configuration1 = adoptNS([[WKWebViewConfiguration alloc] init]);
 208 configuration1.get().processPool = processPool.get();
 209 RetainPtr<WKWebView> webView1 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration1.get()]);
 210
 211 RetainPtr<NavigationDelegate> delegate1 = adoptNS([[NavigationDelegate alloc] init]);
 212 [webView1 setNavigationDelegate:delegate1.get()];
 213
 214 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"data:text/html,1"]];
 215
 216 isDone = false;
 217 currentNavigation = [webView1 loadRequest:request];
 218 TestWebKitAPI::Util::run(&isDone);
 219
 220 RetainPtr<WKWebViewConfiguration> configuration2 = adoptNS([[WKWebViewConfiguration alloc] init]);
 221 configuration2.get().processPool = processPool.get();
 222 configuration2.get()._relatedWebView = webView1.get();
 223 RetainPtr<WKWebView> webView2 = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration2.get()]);
 224
 225 RetainPtr<NavigationDelegate> delegate2 = adoptNS([[NavigationDelegate alloc] init]);
 226 [webView2 setNavigationDelegate:delegate2.get()];
 227
 228 isDone = false;
 229 currentNavigation = [webView2 loadRequest:request];
 230 TestWebKitAPI::Util::run(&isDone);
 231
 232 bool didTerminate = false;
 233 crashHandler = [&] {
 234 webView1 = nullptr;
 235 webView2 = nullptr;
 236 [pool drain]; // Make sure the views get deallocated.
 237 didTerminate = true;
 238 };
 239
 240 [webView2 _killWebContentProcessAndResetState];
 241 TestWebKitAPI::Util::run(&didTerminate);
 242}
 243
190244#endif