Changeset 226610 in webkit
- Timestamp:
- Jan 8, 2018, 7:27:20 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r226609 r226610 1 2018-01-08 Alex Christensen <achristensen@webkit.org> 2 3 Add WKNavigationDelegate SPI exposing WebProcess crash reason 4 https://bugs.webkit.org/show_bug.cgi?id=181410 5 <rdar://problem/36167199> 6 7 Reviewed by Wenson Hsieh. 8 9 We exposed it in the C SPI. 10 11 * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h: 12 * UIProcess/Cocoa/NavigationState.h: 13 * UIProcess/Cocoa/NavigationState.mm: 14 (WebKit::NavigationState::setNavigationDelegate): 15 (WebKit::toWKProcessTerminationReason): 16 (WebKit::NavigationState::NavigationClient::processDidTerminate): 17 1 18 2018-01-08 Alex Christensen <achristensen@webkit.org> 2 19 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h
r226609 r226610 49 49 #endif 50 50 51 typedef NS_ENUM(NSInteger, _WKProcessTerminationReason) { 52 _WKProcessTerminationReasonExceededMemoryLimit, 53 _WKProcessTerminationReasonExceededCPULimit, 54 _WKProcessTerminationReasonRequestedByClient, 55 _WKProcessTerminationReasonCrash, 56 } WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 57 51 58 static const WKNavigationActionPolicy _WKNavigationActionPolicyDownload = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 1); 52 59 static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2); … … 90 97 91 98 - (void)_webView:(WKWebView *)webView URL:(NSURL *)url contentRuleListIdentifiers:(NSArray<NSString *> *)identifiers notifications:(NSArray<NSString *> *)notifications WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 99 - (void)_webView:(WKWebView *)webView webContentProcessDidTerminateWithReason:(_WKProcessTerminationReason)reason WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA)); 92 100 93 101 #if TARGET_OS_IPHONE -
trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h
r226609 r226610 199 199 bool webViewDidReceiveAuthenticationChallengeCompletionHandler : 1; 200 200 bool webViewWebContentProcessDidTerminate : 1; 201 bool webViewWebContentProcessDidTerminateWithReason : 1; 201 202 bool webViewCanAuthenticateAgainstProtectionSpace : 1; 202 203 bool webViewDidReceiveAuthenticationChallenge : 1; -
trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm
r226609 r226610 163 163 m_navigationDelegateMethods.webViewDidReceiveAuthenticationChallengeCompletionHandler = [delegate respondsToSelector:@selector(webView:didReceiveAuthenticationChallenge:completionHandler:)]; 164 164 m_navigationDelegateMethods.webViewWebContentProcessDidTerminate = [delegate respondsToSelector:@selector(webViewWebContentProcessDidTerminate:)]; 165 m_navigationDelegateMethods.webViewWebContentProcessDidTerminateWithReason = [delegate respondsToSelector:@selector(_webView:webContentProcessDidTerminateWithReason:)]; 165 166 m_navigationDelegateMethods.webViewCanAuthenticateAgainstProtectionSpace = [delegate respondsToSelector:@selector(_webView:canAuthenticateAgainstProtectionSpace:)]; 166 167 m_navigationDelegateMethods.webViewDidReceiveAuthenticationChallenge = [delegate respondsToSelector:@selector(_webView:didReceiveAuthenticationChallenge:)]; … … 940 941 } 941 942 942 void NavigationState::NavigationClient::processDidTerminate(WebPageProxy& page, ProcessTerminationReason) 943 { 944 if (!m_navigationState.m_navigationDelegateMethods.webViewWebContentProcessDidTerminate && !m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash) 945 return; 946 947 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 948 if (!navigationDelegate) 949 return; 943 static _WKProcessTerminationReason wkProcessTerminationReason(ProcessTerminationReason reason) 944 { 945 switch (reason) { 946 case ProcessTerminationReason::ExceededMemoryLimit: 947 return _WKProcessTerminationReasonExceededMemoryLimit; 948 case ProcessTerminationReason::ExceededCPULimit: 949 return _WKProcessTerminationReasonExceededCPULimit; 950 case ProcessTerminationReason::RequestedByClient: 951 return _WKProcessTerminationReasonRequestedByClient; 952 case ProcessTerminationReason::Crash: 953 return _WKProcessTerminationReasonCrash; 954 } 955 ASSERT_NOT_REACHED(); 956 return _WKProcessTerminationReasonCrash; 957 } 958 959 void NavigationState::NavigationClient::processDidTerminate(WebPageProxy& page, ProcessTerminationReason reason) 960 { 961 if (!m_navigationState.m_navigationDelegateMethods.webViewWebContentProcessDidTerminate 962 && !m_navigationState.m_navigationDelegateMethods.webViewWebContentProcessDidTerminateWithReason 963 && !m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash) 964 return; 965 966 auto navigationDelegate = m_navigationState.m_navigationDelegate.get(); 967 if (!navigationDelegate) 968 return; 969 970 if (m_navigationState.m_navigationDelegateMethods.webViewWebContentProcessDidTerminateWithReason) { 971 [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webView:m_navigationState.m_webView webContentProcessDidTerminateWithReason:wkProcessTerminationReason(reason)]; 972 return; 973 } 950 974 951 975 // We prefer webViewWebContentProcessDidTerminate: over _webViewWebProcessDidCrash:. … … 955 979 } 956 980 957 if (m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash)958 981 ASSERT(m_navigationState.m_navigationDelegateMethods.webViewWebProcessDidCrash); 982 [static_cast<id <WKNavigationDelegatePrivate>>(navigationDelegate.get()) _webViewWebProcessDidCrash:m_navigationState.m_webView]; 959 983 } 960 984 -
trunk/Tools/ChangeLog
r226607 r226610 1 2018-01-08 Alex Christensen <achristensen@webkit.org> 2 3 Add WKNavigationDelegate SPI exposing WebProcess crash reason 4 https://bugs.webkit.org/show_bug.cgi?id=181410 5 <rdar://problem/36167199> 6 7 Reviewed by Wenson Hsieh. 8 9 * TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm: 10 (-[CrashReasonDelegate _webView:webContentProcessDidTerminateWithReason:]): 11 (TEST): 12 1 13 2018-01-08 Alex Christensen <achristensen@webkit.org> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/Navigation.mm
r222944 r226610 145 145 } 146 146 147 @interface CrashReasonDelegate : NSObject <WKNavigationDelegate> 148 @end 149 150 @implementation CrashReasonDelegate 151 152 - (void)_webView:(WKWebView *)webView webContentProcessDidTerminateWithReason:(_WKProcessTerminationReason)reason 153 { 154 EXPECT_EQ(reason, _WKProcessTerminationReasonRequestedByClient); 155 isDone = true; 156 } 157 158 @end 159 160 TEST(WKNavigation, CrashReason) 161 { 162 auto webView = adoptNS([[WKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]); 163 164 auto delegate = adoptNS([[CrashReasonDelegate alloc] init]); 165 [webView setNavigationDelegate:delegate.get()]; 166 167 [webView loadHTMLString:@"<html>start the web process</html>" baseURL:[NSURL URLWithString:@"https://webkit.org/"]]; 168 [webView _killWebContentProcessAndResetState]; 169 170 TestWebKitAPI::Util::run(&isDone); 171 } 172 147 173 @interface DecidePolicyForPageCacheNavigationDelegate : NSObject <WKNavigationDelegate> 148 174 @property (nonatomic) BOOL decidedPolicyForBackForwardNavigation;
Note:
See TracChangeset
for help on using the changeset viewer.