Errors passed to delegate methods should have recovery attempters
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Apr 2014 23:51:15 +0000 (23:51 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 21 Apr 2014 23:51:15 +0000 (23:51 +0000)
https://bugs.webkit.org/show_bug.cgi?id=131957
<rdar://problem/16642539>

Reviewed by Tim Horton.

* UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h: Added.
* UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm: Added.
* UIProcess/Cocoa/NavigationState.mm:
(WebKit::createErrorWithRecoveryAttempter):
(WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
(WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
* UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h: Added.
* UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm: Added.
(-[WKReloadFrameErrorRecoveryAttempter initWithWebView:frameHandle:urlString:]):
(-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
* WebKit2.xcodeproj/project.pbxproj:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@167633 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h [new file with mode: 0644]
Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm [new file with mode: 0644]
Source/WebKit2/UIProcess/Cocoa/NavigationState.mm
Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h [new file with mode: 0644]
Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm [new file with mode: 0644]
Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

index f4464ba..42dd0af 100644 (file)
@@ -1,3 +1,23 @@
+2014-04-21  Anders Carlsson  <andersca@apple.com>
+
+        Errors passed to delegate methods should have recovery attempters
+        https://bugs.webkit.org/show_bug.cgi?id=131957
+        <rdar://problem/16642539>
+
+        Reviewed by Tim Horton.
+
+        * UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h: Added.
+        * UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm: Added.
+        * UIProcess/Cocoa/NavigationState.mm:
+        (WebKit::createErrorWithRecoveryAttempter):
+        (WebKit::NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame):
+        (WebKit::NavigationState::LoaderClient::didFailLoadWithErrorForFrame):
+        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h: Added.
+        * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm: Added.
+        (-[WKReloadFrameErrorRecoveryAttempter initWithWebView:frameHandle:urlString:]):
+        (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]):
+        * WebKit2.xcodeproj/project.pbxproj:
+
 2014-04-21  Eric Carlson  <eric.carlson@apple.com>
 
         [Mac] implement WebKitDataCue
diff --git a/Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h b/Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.h
new file mode 100644 (file)
index 0000000..ddb6124
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import <WebKit2/WKFoundation.h>
+
+#if WK_API_ENABLED
+
+#import <Foundation/Foundation.h>
+#import <WebKit2/WKDeclarationSpecifiers.h>
+
+WK_EXPORT extern NSString * const _WKRecoveryAttempterErrorKey;
+
+@protocol _WKErrorRecoveryAttempting <NSObject>
+
+- (BOOL)attemptRecovery;
+
+@end
+
+#endif // WK_API_ENABLED
diff --git a/Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm b/Source/WebKit2/UIProcess/API/Cocoa/_WKErrorRecoveryAttempting.mm
new file mode 100644 (file)
index 0000000..b4712d7
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import "config.h"
+#import "_WKErrorRecoveryAttempting.h"
+
+#if WK_API_ENABLED
+
+NSString * const _WKRecoveryAttempterErrorKey = @"_WKRecoveryAttempterErrorKey";
+
+#endif // WK_API_ENABLED
index b515e51..003665e 100644 (file)
@@ -28,6 +28,8 @@
 
 #if WK_API_ENABLED
 
+#import "_WKErrorRecoveryAttempting.h"
+#import "_WKFrameHandleInternal.h"
 #import "APINavigationData.h"
 #import "APIURL.h"
 #import "APIString.h"
@@ -45,6 +47,7 @@
 #import "WKNavigationDelegatePrivate.h"
 #import "WKNavigationInternal.h"
 #import "WKNavigationResponseInternal.h"
+#import "WKReloadFrameErrorRecoveryAttempter.h"
 #import "WKWebViewInternal.h"
 #import "WebFrameProxy.h"
 #import "WebPageProxy.h"
@@ -381,6 +384,20 @@ void NavigationState::LoaderClient::didReceiveServerRedirectForProvisionalLoadFo
     [navigationDelegate webView:m_navigationState.m_webView didReceiveServerRedirectForProvisionalNavigation:navigation];
 }
 
+static RetainPtr<NSError> createErrorWithRecoveryAttempter(WKWebView *webView, WebFrameProxy& webFrameProxy, NSError *originalError)
+{
+    RefPtr<API::FrameHandle> frameHandle = API::FrameHandle::create(webFrameProxy.frameID());
+
+    auto recoveryAttempter = adoptNS([[WKReloadFrameErrorRecoveryAttempter alloc] initWithWebView:webView frameHandle:wrapper(*frameHandle) urlString:originalError.userInfo[NSURLErrorFailingURLStringErrorKey]]);
+
+    auto userInfo = adoptNS([[NSMutableDictionary alloc] initWithObjectsAndKeys:recoveryAttempter.get(), _WKRecoveryAttempterErrorKey, nil]);
+
+    if (NSDictionary *originalUserInfo = originalError.userInfo)
+        [userInfo addEntriesFromDictionary:originalUserInfo];
+
+    return adoptNS([[NSError alloc] initWithDomain:originalError.domain code:originalError.code userInfo:userInfo.get()]);
+}
+
 void NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, const WebCore::ResourceError& error, API::Object*)
 {
     if (!webFrameProxy->isMainFrame())
@@ -400,7 +417,8 @@ void NavigationState::LoaderClient::didFailProvisionalLoadWithErrorForFrame(WebP
     if (!navigationDelegate)
         return;
 
-    [navigationDelegate webView:m_navigationState.m_webView didFailProvisionalNavigation:navigation.get() withError:error];
+    auto errorWithRecoveryAttempter = createErrorWithRecoveryAttempter(m_navigationState.m_webView, *webFrameProxy, error);
+    [navigationDelegate webView:m_navigationState.m_webView didFailProvisionalNavigation:navigation.get() withError:errorWithRecoveryAttempter.get()];
 }
 
 void NavigationState::LoaderClient::didCommitLoadForFrame(WebPageProxy*, WebFrameProxy* webFrameProxy, uint64_t navigationID, API::Object*)
@@ -479,7 +497,8 @@ void NavigationState::LoaderClient::didFailLoadWithErrorForFrame(WebPageProxy*,
     if (navigationID)
         navigation = m_navigationState.m_navigations.get(navigationID).get();
 
-    [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:navigation withError:error];
+    auto errorWithRecoveryAttempter = createErrorWithRecoveryAttempter(m_navigationState.m_webView, *webFrameProxy, error);
+    [navigationDelegate webView:m_navigationState.m_webView didFailNavigation:navigation withError:errorWithRecoveryAttempter.get()];
 }
 
 static _WKRenderingProgressEvents renderingProgressEvents(WebCore::LayoutMilestones milestones)
diff --git a/Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h b/Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.h
new file mode 100644 (file)
index 0000000..c230250
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import <WebKit2/WKFoundation.h>
+
+#if WK_API_ENABLED
+
+#import <wtf/Forward.h>
+
+@class WKWebView;
+@class _WKFrameHandle;
+
+@interface WKReloadFrameErrorRecoveryAttempter : NSObject
+
+- (id)initWithWebView:(WKWebView *)webView frameHandle:(_WKFrameHandle *)frameHandle urlString:(const String&)urlString;
+
+@end
+
+#endif
diff --git a/Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm b/Source/WebKit2/UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm
new file mode 100644 (file)
index 0000000..ec2ecc2
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#import "config.h"
+#import "WKReloadFrameErrorRecoveryAttempter.h"
+
+#if WK_API_ENABLED
+
+#import "_WKErrorRecoveryAttempting.h"
+#import "_WKFrameHandleInternal.h"
+#import "WKWebViewInternal.h"
+#import "WeakObjCPtr.h"
+#import "WebFrameProxy.h"
+#import "WebPageProxy.h"
+#import "WebProcessProxy.h"
+#import <wtf/RetainPtr.h>
+
+@interface WKReloadFrameErrorRecoveryAttempter () <_WKErrorRecoveryAttempting>
+@end
+
+@implementation WKReloadFrameErrorRecoveryAttempter {
+    WebKit::WeakObjCPtr<WKWebView> _webView;
+    RetainPtr<_WKFrameHandle> _frameHandle;
+    String _urlString;
+}
+
+- (id)initWithWebView:(WKWebView *)webView frameHandle:(_WKFrameHandle *)frameHandle urlString:(const String&)urlString
+{
+    if (!(self = [super init]))
+        return nil;
+
+    _webView = webView;
+    _frameHandle = frameHandle;
+    _urlString = urlString;
+
+    return self;
+}
+
+- (BOOL)attemptRecovery
+{
+    auto webView = _webView.get();
+    if (!webView)
+        return NO;
+
+    uint64_t frameID = [_frameHandle _frameID];
+    WebKit::WebFrameProxy* webFrameProxy = webView->_page->process().webFrame(frameID);
+    if (!webFrameProxy)
+        return NO;
+
+    webFrameProxy->loadURL(_urlString);
+    return YES;
+}
+
+@end
+
+#endif
index 1c49580..cf93a3f 100644 (file)
                1AC8702E130B49A2002C1257 /* WebPluginSiteDataManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC8702C130B49A2002C1257 /* WebPluginSiteDataManager.cpp */; };
                1ACECD2417162DB1001FC9EF /* StorageAreaMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ACECD2217162DB1001FC9EF /* StorageAreaMap.cpp */; };
                1ACECD2517162DB1001FC9EF /* StorageAreaMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACECD2317162DB1001FC9EF /* StorageAreaMap.h */; };
+               1AD01BC81905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AD01BC61905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm */; };
+               1AD01BC91905D37E00C9C45F /* _WKErrorRecoveryAttempting.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD01BC71905D37E00C9C45F /* _WKErrorRecoveryAttempting.h */; settings = {ATTRIBUTES = (Private, ); }; };
+               1AD01BCC1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AD01BCA1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm */; };
+               1AD01BCD1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD01BCB1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h */; };
                1AD09F2B1743F8E600A95E50 /* WKNPAPIPlugInContainer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AD09F291743F8E600A95E50 /* WKNPAPIPlugInContainer.mm */; };
                1AD09F2C1743F8E600A95E50 /* WKNPAPIPlugInContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AD09F2A1743F8E600A95E50 /* WKNPAPIPlugInContainer.h */; };
                1AD25E95167AB08100EA9BCD /* DownloadProxyMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD25E93167AB08100EA9BCD /* DownloadProxyMap.cpp */; };
                1AC8702C130B49A2002C1257 /* WebPluginSiteDataManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebPluginSiteDataManager.cpp; sourceTree = "<group>"; };
                1ACECD2217162DB1001FC9EF /* StorageAreaMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StorageAreaMap.cpp; sourceTree = "<group>"; };
                1ACECD2317162DB1001FC9EF /* StorageAreaMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StorageAreaMap.h; sourceTree = "<group>"; };
+               1AD01BC61905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = _WKErrorRecoveryAttempting.mm; sourceTree = "<group>"; };
+               1AD01BC71905D37E00C9C45F /* _WKErrorRecoveryAttempting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = _WKErrorRecoveryAttempting.h; sourceTree = "<group>"; };
+               1AD01BCA1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKReloadFrameErrorRecoveryAttempter.mm; sourceTree = "<group>"; };
+               1AD01BCB1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKReloadFrameErrorRecoveryAttempter.h; sourceTree = "<group>"; };
                1AD09F291743F8E600A95E50 /* WKNPAPIPlugInContainer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKNPAPIPlugInContainer.mm; sourceTree = "<group>"; };
                1AD09F2A1743F8E600A95E50 /* WKNPAPIPlugInContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNPAPIPlugInContainer.h; sourceTree = "<group>"; };
                1AD09F2D1743FB0300A95E50 /* WKNPAPIPlugInContainerInternal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKNPAPIPlugInContainerInternal.h; sourceTree = "<group>"; };
                                1ABC3DF31899E437004F0626 /* NavigationState.mm */,
                                1AFE436418B6C081009C7A48 /* UIDelegate.h */,
                                1AFE436318B6C081009C7A48 /* UIDelegate.mm */,
+                               1AD01BCB1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h */,
+                               1AD01BCA1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm */,
                                2D7AAFD218C8640600A7ACD4 /* WKWebViewContentProvider.h */,
                                2DC6D9C118C44A610043BAD4 /* WKWebViewContentProviderRegistry.h */,
                                2DC6D9C218C44A610043BAD4 /* WKWebViewContentProviderRegistry.mm */,
                                379A873818BBFE0F00588AF2 /* _WKElementAction.h */,
                                379A873718BBFE0F00588AF2 /* _WKElementAction.mm */,
                                379A873B18BBFF0700588AF2 /* _WKElementActionInternal.h */,
+                               1AD01BC71905D37E00C9C45F /* _WKErrorRecoveryAttempting.h */,
+                               1AD01BC61905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm */,
                                005D158E18E4C4EB00734619 /* _WKFindDelegate.h */,
                                37A64E5418F38E3C00EB30F1 /* _WKFormDelegate.h */,
                                37A64E5618F38F4600EB30F1 /* _WKFormInputSession.h */,
                                2684055318B86ED60022C38B /* ViewUpdateDispatcherMessages.h in Headers */,
                                516A4A5D120A2CCD00C05B7F /* APIError.h in Headers */,
                                1A433F0D113C53DD00FACDE9 /* WebErrors.h in Headers */,
+                               1AD01BC91905D37E00C9C45F /* _WKErrorRecoveryAttempting.h in Headers */,
                                BC032DB910F4380F0058C15A /* WebEvent.h in Headers */,
                                BC032DBB10F4380F0058C15A /* WebEventConversion.h in Headers */,
                                BC111B5D112F629800337BAB /* WebEventFactory.h in Headers */,
                                1A9E328D182165A900F5D04C /* _WKRemoteObjectInterface.h in Headers */,
                                51290993183ACEAF005522A6 /* WebIDBServerConnection.h in Headers */,
                                370F34A31829BE1E009027C8 /* WKNavigationData.h in Headers */,
+                               1AD01BCD1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.h in Headers */,
                                1AB7D78D1288CD9A00CFD08C /* WKDownload.h in Headers */,
                                BC4075FC124FF0270068F20A /* WKError.h in Headers */,
                                BCFD548C132D82680055D816 /* WKErrorCF.h in Headers */,
                                1A910072126675C4001842F5 /* FindIndicator.cpp in Sources */,
                                BCE81D8C1319F7EF00241910 /* FontInfo.cpp in Sources */,
                                378E1A4918208CD60031007A /* WKNSString.mm in Sources */,
+                               1AD01BCC1905D54900C9C45F /* WKReloadFrameErrorRecoveryAttempter.mm in Sources */,
                                C55CB5B818C2A5D600CA81E1 /* WKFormSelectPicker.mm in Sources */,
                                BC06F43012DBB9B6002D78DE /* GeolocationPermissionRequestManager.cpp in Sources */,
                                BC06F44B12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.cpp in Sources */,
                                33367635130C99B2006C9DE2 /* WebResourceCacheManagerProxy.cpp in Sources */,
                                33367657130C9ECA006C9DE2 /* WebResourceCacheManagerProxyMessageReceiver.cpp in Sources */,
                                1A8E7D3C18C15149005A702A /* VisitedLinkTableControllerMessageReceiver.cpp in Sources */,
+                               1AD01BC81905D37E00C9C45F /* _WKErrorRecoveryAttempting.mm in Sources */,
                                510AFFB916542048001BA05E /* WebResourceLoader.cpp in Sources */,
                                3F889D14188778C900FEADAF /* WebVideoFullscreenManagerProxy.mm in Sources */,
                                51F060E11654318500F3281B /* WebResourceLoaderMessageReceiver.cpp in Sources */,