18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceError.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(CFNETWORK) 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "KURL.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <CoreFoundation/CFError.h> 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <CFNetwork/CFNetworkErrors.h> 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN) 352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebKitSystemInterface/WebKitSystemInterface.h> 362bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <WTF/RetainPtr.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 412bde8e466a4451c7319e3a072d118917957d6554Steve BlockResourceError::ResourceError(CFErrorRef cfError) 422bde8e466a4451c7319e3a072d118917957d6554Steve Block : m_dataIsUpToDate(false) 432bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_platformError(cfError) 442bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 452bde8e466a4451c7319e3a072d118917957d6554Steve Block m_isNull = !cfError; 462bde8e466a4451c7319e3a072d118917957d6554Steve Block} 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 482bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN) 492bde8e466a4451c7319e3a072d118917957d6554Steve BlockResourceError::ResourceError(const String& domain, int errorCode, const String& failingURL, const String& localizedDescription, CFDataRef certificate) 502bde8e466a4451c7319e3a072d118917957d6554Steve Block : ResourceErrorBase(domain, errorCode, failingURL, localizedDescription) 512bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_dataIsUpToDate(true) 522bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_certificate(certificate) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 542bde8e466a4451c7319e3a072d118917957d6554Steve Block} 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 562bde8e466a4451c7319e3a072d118917957d6554Steve BlockPCCERT_CONTEXT ResourceError::certificate() const 572bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 582bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!m_certificate) 592bde8e466a4451c7319e3a072d118917957d6554Steve Block return 0; 602bde8e466a4451c7319e3a072d118917957d6554Steve Block 612bde8e466a4451c7319e3a072d118917957d6554Steve Block return reinterpret_cast<PCCERT_CONTEXT>(CFDataGetBytePtr(m_certificate.get())); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 632bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // PLATFORM(WIN) 642bde8e466a4451c7319e3a072d118917957d6554Steve Block 652bde8e466a4451c7319e3a072d118917957d6554Steve Blockconst CFStringRef failingURLStringKey = CFSTR("NSErrorFailingURLStringKey"); 662bde8e466a4451c7319e3a072d118917957d6554Steve Blockconst CFStringRef failingURLKey = CFSTR("NSErrorFailingURLKey"); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ResourceError::platformLazyInit() 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_dataIsUpToDate) 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_platformError) 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef domain = CFErrorGetDomain(m_platformError.get()); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domain == kCFErrorDomainMach || domain == kCFErrorDomainCocoa) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_domain ="NSCustomErrorDomain"; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (domain == kCFErrorDomainCFNetwork) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_domain = "CFURLErrorDomain"; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (domain == kCFErrorDomainPOSIX) 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_domain = "NSPOSIXErrorDomain"; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (domain == kCFErrorDomainOSStatus) 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_domain = "NSOSStatusErrorDomain"; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (domain == kCFErrorDomainWinSock) 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_domain = "kCFErrorDomainWinSock"; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_errorCode = CFErrorGetCode(m_platformError.get()); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFDictionaryRef> userInfo(AdoptCF, CFErrorCopyUserInfo(m_platformError.get())); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (userInfo.get()) { 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStringRef failingURLString = (CFStringRef) CFDictionaryGetValue(userInfo.get(), failingURLStringKey); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (failingURLString) 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_failingURL = String(failingURLString); 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else { 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLRef failingURL = (CFURLRef) CFDictionaryGetValue(userInfo.get(), failingURLKey); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (failingURL) { 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFURLRef> absoluteURLRef(AdoptCF, CFURLCopyAbsoluteURL(failingURL)); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (absoluteURLRef.get()) { 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project failingURLString = CFURLGetString(absoluteURLRef.get()); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_failingURL = String(failingURLString); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_localizedDescription = (CFStringRef) CFDictionaryGetValue(userInfo.get(), kCFErrorLocalizedDescriptionKey); 1062bde8e466a4451c7319e3a072d118917957d6554Steve Block 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN) 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block m_certificate = wkGetSSLPeerCertificateData(userInfo.get()); 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_dataIsUpToDate = true; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1152bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid ResourceError::platformCopy(ResourceError& errorCopy) const 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN) 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block errorCopy.m_certificate = m_certificate; 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1212bde8e466a4451c7319e3a072d118917957d6554Steve Block 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ResourceError::platformCompare(const ResourceError& a, const ResourceError& b) 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1242bde8e466a4451c7319e3a072d118917957d6554Steve Block return a.cfError() == b.cfError(); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1272bde8e466a4451c7319e3a072d118917957d6554Steve BlockCFErrorRef ResourceError::cfError() const 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_isNull) { 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_platformError); 131967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return 0; 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_platformError) { 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFMutableDictionaryRef> userInfo(AdoptCF, CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_localizedDescription.isEmpty()) { 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFStringRef> localizedDescriptionString(AdoptCF, m_localizedDescription.createCFString()); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFDictionarySetValue(userInfo.get(), kCFErrorLocalizedDescriptionKey, localizedDescriptionString.get()); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_failingURL.isEmpty()) { 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFStringRef> failingURLString(AdoptCF, m_failingURL.createCFString()); 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFDictionarySetValue(userInfo.get(), failingURLStringKey, failingURLString.get()); 145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RetainPtr<CFURLRef> url(AdoptCF, KURL(ParsedURLString, m_failingURL).createCFURL()); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFDictionarySetValue(userInfo.get(), failingURLKey, url.get()); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1492bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN) 1502bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_certificate) 1512bde8e466a4451c7319e3a072d118917957d6554Steve Block wkSetSSLPeerCertificateData(userInfo.get(), m_certificate.get()); 1522bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<CFStringRef> domainString(AdoptCF, m_domain.createCFString()); 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_platformError.adoptCF(CFErrorCreate(0, domainString.get(), m_errorCode, userInfo.get())); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_platformError.get(); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1612bde8e466a4451c7319e3a072d118917957d6554Steve BlockResourceError::operator CFErrorRef() const 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block return cfError(); 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block// FIXME: Once <rdar://problem/5050841> is fixed we can remove this constructor. 1672bde8e466a4451c7319e3a072d118917957d6554Steve BlockResourceError::ResourceError(CFStreamError error) 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block : m_dataIsUpToDate(true) 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1702bde8e466a4451c7319e3a072d118917957d6554Steve Block m_isNull = false; 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block m_errorCode = error.error; 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block 1732bde8e466a4451c7319e3a072d118917957d6554Steve Block switch(error.domain) { 1742bde8e466a4451c7319e3a072d118917957d6554Steve Block case kCFStreamErrorDomainCustom: 1752bde8e466a4451c7319e3a072d118917957d6554Steve Block m_domain ="NSCustomErrorDomain"; 1762bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 1772bde8e466a4451c7319e3a072d118917957d6554Steve Block case kCFStreamErrorDomainPOSIX: 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block m_domain = "NSPOSIXErrorDomain"; 1792bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block case kCFStreamErrorDomainMacOSStatus: 1812bde8e466a4451c7319e3a072d118917957d6554Steve Block m_domain = "NSOSStatusErrorDomain"; 1822bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block } 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block 1862bde8e466a4451c7319e3a072d118917957d6554Steve BlockCFStreamError ResourceError::cfStreamError() const 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lazyInit(); 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFStreamError result; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.error = m_errorCode; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_domain == "NSCustomErrorDomain") 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.domain = kCFStreamErrorDomainCustom; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (m_domain == "NSPOSIXErrorDomain") 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.domain = kCFStreamErrorDomainPOSIX; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (m_domain == "NSOSStatusErrorDomain") 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.domain = kCFStreamErrorDomainMacOSStatus; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2052bde8e466a4451c7319e3a072d118917957d6554Steve BlockResourceError::operator CFStreamError() const 2062bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 2072bde8e466a4451c7319e3a072d118917957d6554Steve Block return cfStreamError(); 2082bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2092bde8e466a4451c7319e3a072d118917957d6554Steve Block 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // USE(CFNETWORK) 213