#pragma once
#include "WebKit.h"
#include <WebCore/COMPtr.h>
#include <WebCore/ResourceError.h>
#include <wtf/RetainPtr.h>
class WebError : public IWebError, IWebErrorPrivate {
public:
static WebError* createInstance(const WebCore::ResourceError&, IPropertyBag* userInfo = 0);
static WebError* createInstance();
protected:
WebError(const WebCore::ResourceError&, IPropertyBag* userInfo);
~WebError();
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _COM_Outptr_ void** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
virtual HRESULT STDMETHODCALLTYPE init(_In_ BSTR domain, int code, _In_ BSTR url);
virtual HRESULT STDMETHODCALLTYPE code(_Out_ int*);
virtual HRESULT STDMETHODCALLTYPE domain(__deref_opt_out BSTR*);
virtual HRESULT STDMETHODCALLTYPE localizedDescription(__deref_opt_out BSTR*);
virtual HRESULT STDMETHODCALLTYPE localizedFailureReason(__deref_opt_out BSTR*);
virtual HRESULT STDMETHODCALLTYPE localizedRecoveryOptions(__deref_opt_out IEnumVARIANT** result);
virtual HRESULT STDMETHODCALLTYPE localizedRecoverySuggestion(__deref_opt_out BSTR*);
virtual HRESULT STDMETHODCALLTYPE recoverAttempter(__deref_opt_out IUnknown** result);
virtual HRESULT STDMETHODCALLTYPE userInfo(_COM_Outptr_opt_ IPropertyBag **result);
virtual HRESULT STDMETHODCALLTYPE failingURL(__deref_opt_out BSTR*);
virtual HRESULT STDMETHODCALLTYPE isPolicyChangeError(_Out_ BOOL*);
virtual HRESULT STDMETHODCALLTYPE sslPeerCertificate(_Out_ ULONG_PTR*);
const WebCore::ResourceError& resourceError() const;
private:
ULONG m_refCount { 0 };
COMPtr<IPropertyBag> m_userInfo;
#if USE(CFURLCONNECTION)
RetainPtr<CFDictionaryRef> m_cfErrorUserInfoDict;
#endif
WebCore::ResourceError m_error;
};