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