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

📄 weburlresponse.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// IUnknown -------------------------------------------------------------------HRESULT STDMETHODCALLTYPE WebURLResponse::QueryInterface(REFIID riid, void** ppvObject){    *ppvObject = 0;    if (IsEqualGUID(riid, IID_IUnknown))        *ppvObject = static_cast<IWebURLResponse*>(this);    else if (IsEqualGUID(riid, __uuidof(this)))        *ppvObject = this;    else if (IsEqualGUID(riid, IID_IWebURLResponse))        *ppvObject = static_cast<IWebURLResponse*>(this);    else if (IsEqualGUID(riid, IID_IWebURLResponsePrivate))        *ppvObject = static_cast<IWebURLResponsePrivate*>(this);    else if (m_response.isHTTP() && IsEqualGUID(riid, IID_IWebHTTPURLResponse))        *ppvObject = static_cast<IWebHTTPURLResponse*>(this);    else        return E_NOINTERFACE;    AddRef();    return S_OK;}ULONG STDMETHODCALLTYPE WebURLResponse::AddRef(void){    return ++m_refCount;}ULONG STDMETHODCALLTYPE WebURLResponse::Release(void){    ULONG newRef = --m_refCount;    if (!newRef)        delete(this);    return newRef;}// IWebURLResponse --------------------------------------------------------------------HRESULT STDMETHODCALLTYPE WebURLResponse::expectedContentLength(     /* [retval][out] */ long long* result){    *result = m_response.expectedContentLength();    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::initWithURL(     /* [in] */ BSTR url,    /* [in] */ BSTR mimeType,    /* [in] */ int expectedContentLength,    /* [in] */ BSTR textEncodingName){    m_response = ResourceResponse(MarshallingHelpers::BSTRToKURL(url), String(mimeType), expectedContentLength, String(textEncodingName), String());    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::MIMEType(     /* [retval][out] */ BSTR* result){    BString mimeType(m_response.mimeType());    *result = mimeType.release();    if (!m_response.mimeType().isNull() && !*result)        return E_OUTOFMEMORY;    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::suggestedFilename(     /* [retval][out] */ BSTR* result){    if (!result) {        ASSERT_NOT_REACHED();        return E_POINTER;    }    *result = 0;    if (m_response.url().isEmpty())        return E_FAIL;    *result = BString(m_response.suggestedFilename()).release();    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::textEncodingName(     /* [retval][out] */ BSTR* result){    if (!result)        return E_INVALIDARG;    BString textEncodingName(m_response.textEncodingName());    *result = textEncodingName.release();    if (!m_response.textEncodingName().isNull() && !*result)        return E_OUTOFMEMORY;    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::URL(     /* [retval][out] */ BSTR* result){    if (!result)        return E_INVALIDARG;    BString url(m_response.url().string());    *result = url.release();    if (!m_response.url().isEmpty() && !*result)        return E_OUTOFMEMORY;    return S_OK;}// IWebHTTPURLResponse --------------------------------------------------------HRESULT STDMETHODCALLTYPE WebURLResponse::allHeaderFields(     /* [retval][out] */ IPropertyBag** headerFields){    ASSERT(m_response.isHTTP());    *headerFields = COMPropertyBag<String, AtomicString, CaseFoldingHash>::createInstance(m_response.httpHeaderFields());    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::localizedStringForStatusCode(     /* [in] */ int statusCode,    /* [retval][out] */ BSTR* statusString){    ASSERT(m_response.isHTTP());    if (statusString)        *statusString = 0;    LPCTSTR statusText = CFHTTPMessageCopyLocalizedShortDescriptionForStatusCode(statusCode);    if (!statusText)        return E_FAIL;    if (statusString)        *statusString = SysAllocString(statusText);    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::statusCode(     /* [retval][out] */ int* statusCode){    ASSERT(m_response.isHTTP());    if (statusCode)        *statusCode = m_response.httpStatusCode();    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::isAttachment(     /* [retval][out] */ BOOL *attachment){    *attachment = m_response.isAttachment();    return S_OK;}HRESULT STDMETHODCALLTYPE WebURLResponse::sslPeerCertificate(     /* [retval][out] */ OLE_HANDLE* result){    if (!result)        return E_POINTER;    *result = 0;#if USE(CFNETWORK)    CFDictionaryRef dict = certificateDictionary();    if (!dict)        return E_FAIL;    void* data = wkGetSSLPeerCertificateData(dict);    if (!data)        return E_FAIL;    *result = (OLE_HANDLE)(ULONG64)data;#endif    return *result ? S_OK : E_FAIL;}// WebURLResponse -------------------------------------------------------------HRESULT WebURLResponse::suggestedFileExtension(BSTR *result){    if (!result)        return E_POINTER;    *result = 0;    if (m_response.mimeType().isEmpty())        return E_FAIL;    BString mimeType(m_response.mimeType());    HKEY key;    LONG err = RegOpenKeyEx(HKEY_CLASSES_ROOT, TEXT("MIME\\Database\\Content Type"), 0, KEY_QUERY_VALUE, &key);    if (!err) {        HKEY subKey;        err = RegOpenKeyEx(key, mimeType, 0, KEY_QUERY_VALUE, &subKey);        if (!err) {            DWORD keyType = REG_SZ;            TCHAR extension[MAX_PATH];            DWORD keySize = sizeof(extension)/sizeof(extension[0]);            err = RegQueryValueEx(subKey, TEXT("Extension"), 0, &keyType, (LPBYTE)extension, &keySize);            if (!err && keyType != REG_SZ)                err = ERROR_INVALID_DATA;            if (err) {                // fallback handlers                if (!_tcscmp(mimeType, TEXT("text/html"))) {                    _tcscpy(extension, TEXT(".html"));                    err = 0;                } else if (!_tcscmp(mimeType, TEXT("application/xhtml+xml"))) {                    _tcscpy(extension, TEXT(".xhtml"));                    err = 0;                } else if (!_tcscmp(mimeType, TEXT("image/svg+xml"))) {                    _tcscpy(extension, TEXT(".svg"));                    err = 0;                }            }            if (!err) {                *result = SysAllocString(extension);                if (!*result)                    err = ERROR_OUTOFMEMORY;            }            RegCloseKey(subKey);        }        RegCloseKey(key);    }    return HRESULT_FROM_WIN32(err);}const ResourceResponse& WebURLResponse::resourceResponse() const{    return m_response;}#if USE(CFNETWORK)CFDictionaryRef WebURLResponse::certificateDictionary() const{    if (m_SSLCertificateInfo)        return m_SSLCertificateInfo.get();    CFURLResponseRef cfResponse = m_response.cfURLResponse();    if (!cfResponse)        return 0;    m_SSLCertificateInfo = wkGetSSLCertificateInfo(cfResponse);    return m_SSLCertificateInfo.get();}#endif

⌨️ 快捷键说明

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