From c0626ac55509d8f8177b884fb1e36342385a0e1f Mon Sep 17 00:00:00 2001 From: Supreet Singh Date: Mon, 30 May 2022 11:52:17 +0530 Subject: [PATCH 1/2] HTTP Error --- Libraries/Image/RCTImageLoader.mm | 15 +++++++++++++++ Libraries/Image/RCTImageView.mm | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Libraries/Image/RCTImageLoader.mm b/Libraries/Image/RCTImageLoader.mm index 39e33ecdd285..1c85020a6b05 100644 --- a/Libraries/Image/RCTImageLoader.mm +++ b/Libraries/Image/RCTImageLoader.mm @@ -56,6 +56,15 @@ static uint64_t monotonicTimeGetCurrentNanoseconds(void) return (mach_absolute_time() * tb_info.numer) / tb_info.denom; } +static NSError* addResponseHeadersToError(NSError* originalError, NSHTTPURLResponse* response) { + NSMutableDictionary* _userInfo = (NSMutableDictionary*)originalError.userInfo.mutableCopy; + _userInfo[@"httpStatusCode"] = [NSNumber numberWithInt:response.statusCode]; + _userInfo[@"httpResponseHeaders"] = response.allHeaderFields; + NSError *error = [NSError errorWithDomain:originalError.domain code:originalError.code userInfo:_userInfo]; + + return error; +} + @interface RCTImageLoader() @end @@ -523,6 +532,12 @@ - (RCTImageURLLoaderRequest *)_loadImageOrDataWithURLRequest:(NSURLRequest *)req } }); } else if (!std::atomic_load(cancelled.get())) { + if (response && error && [response isKindOfClass: [NSHTTPURLResponse class]]) { + if ([response isKindOfClass: [NSHTTPURLResponse class]]) { + NSHTTPURLResponse* _httpResp = (NSHTTPURLResponse*)response; + error = addResponseHeadersToError(error, _httpResp); + } + } completionBlock(error, imageOrData, imageMetadata, cacheResult, response); } }; diff --git a/Libraries/Image/RCTImageView.mm b/Libraries/Image/RCTImageView.mm index c807372d1938..410f21b73aa7 100644 --- a/Libraries/Image/RCTImageView.mm +++ b/Libraries/Image/RCTImageView.mm @@ -378,7 +378,7 @@ - (void)imageLoaderLoadedImage:(UIImage *)loadedImage error:(NSError *)error for }); if (_onError) { - _onError(@{ @"error": error.localizedDescription }); + _onError(@{ @"error": error.localizedDescription, @"responseCode": (error.userInfo[@"httpStatusCode"]?: [NSNull null]), @"httpResponseHeaders": (error.userInfo[@"httpResponseHeaders"] ?: [NSNull null]) }); } if (_onLoadEnd) { _onLoadEnd(nil); From 8e5d1127730b9f3c180f3ccdef1ca4dc5b7657e9 Mon Sep 17 00:00:00 2001 From: Supreet Singh Date: Mon, 30 May 2022 12:13:40 +0530 Subject: [PATCH 2/2] remove unneeded if --- Libraries/Image/RCTImageLoader.mm | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Libraries/Image/RCTImageLoader.mm b/Libraries/Image/RCTImageLoader.mm index 1c85020a6b05..85a1fbae64c4 100644 --- a/Libraries/Image/RCTImageLoader.mm +++ b/Libraries/Image/RCTImageLoader.mm @@ -533,10 +533,8 @@ - (RCTImageURLLoaderRequest *)_loadImageOrDataWithURLRequest:(NSURLRequest *)req }); } else if (!std::atomic_load(cancelled.get())) { if (response && error && [response isKindOfClass: [NSHTTPURLResponse class]]) { - if ([response isKindOfClass: [NSHTTPURLResponse class]]) { - NSHTTPURLResponse* _httpResp = (NSHTTPURLResponse*)response; - error = addResponseHeadersToError(error, _httpResp); - } + NSHTTPURLResponse* _httpResp = (NSHTTPURLResponse*)response; + error = addResponseHeadersToError(error, _httpResp); } completionBlock(error, imageOrData, imageMetadata, cacheResult, response); }