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