diff options
Diffstat (limited to 'Source/WebCore/platform/network/mac/ResourceErrorMac.mm')
-rw-r--r-- | Source/WebCore/platform/network/mac/ResourceErrorMac.mm | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/Source/WebCore/platform/network/mac/ResourceErrorMac.mm b/Source/WebCore/platform/network/mac/ResourceErrorMac.mm index e83990c3d..df6e9868a 100644 --- a/Source/WebCore/platform/network/mac/ResourceErrorMac.mm +++ b/Source/WebCore/platform/network/mac/ResourceErrorMac.mm @@ -37,6 +37,22 @@ namespace WebCore { +static RetainPtr<NSError> createNSErrorFromResourceErrorBase(const ResourceErrorBase& resourceError) +{ + RetainPtr<NSMutableDictionary> userInfo(AdoptNS, [[NSMutableDictionary alloc] init]); + + if (!resourceError.localizedDescription().isEmpty()) + [userInfo.get() setValue:resourceError.localizedDescription() forKey:NSLocalizedDescriptionKey]; + + if (!resourceError.failingURL().isEmpty()) { + RetainPtr<NSURL> cocoaURL = adoptNS([[NSURL alloc] initWithString:resourceError.failingURL()]); + [userInfo.get() setValue:resourceError.failingURL() forKey:@"NSErrorFailingURLStringKey"]; + [userInfo.get() setValue:cocoaURL.get() forKey:@"NSErrorFailingURLKey"]; + } + + return RetainPtr<NSError>(AdoptNS, [[NSError alloc] initWithDomain:resourceError.domain() code:resourceError.errorCode() userInfo:userInfo.get()]); +} + #if USE(CFNETWORK) ResourceError::ResourceError(NSError *error) @@ -52,11 +68,18 @@ NSError *ResourceError::nsError() const ASSERT(!m_platformError); return nil; } - if (!m_platformNSError) { + + if (m_platformNSError) + return m_platformNSError.get(); + + if (m_platformError) { CFErrorRef error = m_platformError.get(); RetainPtr<NSDictionary> userInfo(AdoptCF, (NSDictionary *) CFErrorCopyUserInfo(error)); m_platformNSError.adoptNS([[NSError alloc] initWithDomain:(NSString *)CFErrorGetDomain(error) code:CFErrorGetCode(error) userInfo:userInfo.get()]); + return m_platformNSError.get(); } + + m_platformNSError = createNSErrorFromResourceErrorBase(*this); return m_platformNSError.get(); } @@ -72,6 +95,8 @@ ResourceError::ResourceError(NSError *nsError) , m_platformError(nsError) { m_isNull = !nsError; + if (!m_isNull) + m_isTimeout = [m_platformError.get() code] == NSURLErrorTimedOut; } ResourceError::ResourceError(CFErrorRef cfError) @@ -79,6 +104,8 @@ ResourceError::ResourceError(CFErrorRef cfError) , m_platformError((NSError *)cfError) { m_isNull = !cfError; + if (!m_isNull) + m_isTimeout = [m_platformError.get() code] == NSURLErrorTimedOut; } void ResourceError::platformLazyInit() @@ -113,21 +140,9 @@ NSError *ResourceError::nsError() const ASSERT(!m_platformError); return nil; } - - if (!m_platformError) { - RetainPtr<NSMutableDictionary> userInfo(AdoptNS, [[NSMutableDictionary alloc] init]); - if (!m_localizedDescription.isEmpty()) - [userInfo.get() setValue:m_localizedDescription forKey:NSLocalizedDescriptionKey]; - - if (!m_failingURL.isEmpty()) { - RetainPtr<NSURL> cocoaURL = adoptNS([[NSURL alloc] initWithString:m_failingURL]); - [userInfo.get() setValue:m_failingURL forKey:@"NSErrorFailingURLStringKey"]; - [userInfo.get() setValue:cocoaURL.get() forKey:@"NSErrorFailingURLKey"]; - } - - m_platformError.adoptNS([[NSError alloc] initWithDomain:m_domain code:m_errorCode userInfo:userInfo.get()]); - } + if (!m_platformError) + m_platformError = createNSErrorFromResourceErrorBase(*this);; return m_platformError.get(); } |