⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourceerrorcf.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (C) 2007 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 COMPUTER, INC. ``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 COMPUTER, INC. OR * 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.  */#include "config.h"#include "KURL.h"#include "ResourceError.h"#if USE(CFNETWORK)// FIXME: Once <rdar://problem/5050881> is fixed in open source we// can remove this extern "C"extern "C" { #include <CFNetwork/CFNetworkErrors.h>}#include <CoreFoundation/CFError.h>#include <WTF/RetainPtr.h>namespace WebCore {const CFStringRef failingURLStringKey = CFSTR("NSErrorFailingURLStringKey");const CFStringRef failingURLKey = CFSTR("NSErrorFailingURLKey");// FIXME: Once <rdar://problem/5050841> is fixed we can remove this constructor.ResourceError::ResourceError(CFStreamError error)    : m_dataIsUpToDate(true){    m_isNull = false;    m_errorCode = error.error;    switch(error.domain) {    case kCFStreamErrorDomainCustom:        m_domain ="NSCustomErrorDomain";        break;    case kCFStreamErrorDomainPOSIX:        m_domain = "NSPOSIXErrorDomain";        break;    case kCFStreamErrorDomainMacOSStatus:        m_domain = "NSOSStatusErrorDomain";        break;    }}void ResourceError::platformLazyInit(){    if (m_dataIsUpToDate)        return;    if (!m_platformError)        return;    CFStringRef domain = CFErrorGetDomain(m_platformError.get());    if (domain == kCFErrorDomainMach || domain == kCFErrorDomainCocoa)        m_domain ="NSCustomErrorDomain";    else if (domain == kCFErrorDomainCFNetwork)        m_domain = "CFURLErrorDomain";    else if (domain == kCFErrorDomainPOSIX)        m_domain = "NSPOSIXErrorDomain";    else if (domain == kCFErrorDomainOSStatus)        m_domain = "NSOSStatusErrorDomain";    else if (domain == kCFErrorDomainWinSock)        m_domain = "kCFErrorDomainWinSock";    m_errorCode = CFErrorGetCode(m_platformError.get());    RetainPtr<CFDictionaryRef> userInfo(AdoptCF, CFErrorCopyUserInfo(m_platformError.get()));    if (userInfo.get()) {        CFStringRef failingURLString = (CFStringRef) CFDictionaryGetValue(userInfo.get(), failingURLStringKey);        if (failingURLString)            m_failingURL = String(failingURLString);        else {            CFURLRef failingURL = (CFURLRef) CFDictionaryGetValue(userInfo.get(), failingURLKey);            if (failingURL) {                RetainPtr<CFURLRef> absoluteURLRef(AdoptCF, CFURLCopyAbsoluteURL(failingURL));                if (absoluteURLRef.get()) {                    failingURLString = CFURLGetString(absoluteURLRef.get());                    m_failingURL = String(failingURLString);                }            }        }        m_localizedDescription = (CFStringRef) CFDictionaryGetValue(userInfo.get(), kCFErrorLocalizedDescriptionKey);    }    m_dataIsUpToDate = true;}bool ResourceError::platformCompare(const ResourceError& a, const ResourceError& b){    return (CFErrorRef)a == (CFErrorRef)b;}ResourceError::operator CFErrorRef() const{    if (m_isNull) {        ASSERT(!m_platformError);        return nil;    }        if (!m_platformError) {        RetainPtr<CFMutableDictionaryRef> userInfo(AdoptCF, CFDictionaryCreateMutable(0, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));        if (!m_localizedDescription.isEmpty()) {            RetainPtr<CFStringRef> localizedDescriptionString(AdoptCF, m_localizedDescription.createCFString());            CFDictionarySetValue(userInfo.get(), kCFErrorLocalizedDescriptionKey, localizedDescriptionString.get());        }        if (!m_failingURL.isEmpty()) {            RetainPtr<CFStringRef> failingURLString(AdoptCF, m_failingURL.createCFString());            CFDictionarySetValue(userInfo.get(), failingURLStringKey, failingURLString.get());            RetainPtr<CFURLRef> url(AdoptCF, KURL(m_failingURL).createCFURL());            CFDictionarySetValue(userInfo.get(), failingURLKey, url.get());        }        RetainPtr<CFStringRef> domainString(AdoptCF, m_domain.createCFString());        m_platformError.adoptCF(CFErrorCreate(0, domainString.get(), m_errorCode, userInfo.get()));    }    return m_platformError.get();}ResourceError::operator CFStreamError() const{    lazyInit();    CFStreamError result;    result.error = m_errorCode;    if (m_domain == "NSCustomErrorDomain")        result.domain = kCFStreamErrorDomainCustom;    else if (m_domain == "NSPOSIXErrorDomain")        result.domain = kCFStreamErrorDomainPOSIX;    else if (m_domain == "NSOSStatusErrorDomain")        result.domain = kCFStreamErrorDomainMacOSStatus;    else        ASSERT_NOT_REACHED();    return result;}} // namespace WebCore#endif // USE(CFNETWORK)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -