1/*
2 * Copyright (C) 2006 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef ResourceError_h
27#define ResourceError_h
28
29#include "ResourceErrorBase.h"
30
31#if USE(SOUP)
32
33#include <wtf/glib/GRefPtr.h>
34
35typedef struct _GTlsCertificate GTlsCertificate;
36typedef struct _SoupRequest SoupRequest;
37typedef struct _SoupMessage SoupMessage;
38
39namespace WebCore {
40
41class ResourceError : public ResourceErrorBase
42{
43public:
44 ResourceError(Type type = Type::Null)
45 : ResourceErrorBase(type)
46 , m_tlsErrors(0)
47 {
48 }
49
50 ResourceError(const String& domain, int errorCode, const URL& failingURL, const String& localizedDescription, Type type = Type::General)
51 : ResourceErrorBase(domain, errorCode, failingURL, localizedDescription, type)
52 , m_tlsErrors(0)
53 {
54 }
55
56 static ResourceError httpError(SoupMessage*, GError*, SoupRequest*);
57 static ResourceError transportError(SoupRequest*, int statusCode, const String& reasonPhrase);
58 static ResourceError genericGError(GError*, SoupRequest*);
59 static ResourceError tlsError(const URL&, unsigned tlsErrors, GTlsCertificate*);
60 static ResourceError timeoutError(const URL& failingURL);
61 static ResourceError authenticationError(SoupMessage*);
62
63 unsigned tlsErrors() const { return m_tlsErrors; }
64 void setTLSErrors(unsigned tlsErrors) { m_tlsErrors = tlsErrors; }
65 GTlsCertificate* certificate() const { return m_certificate.get(); }
66 void setCertificate(GTlsCertificate* certificate) { m_certificate = certificate; }
67
68 static bool platformCompare(const ResourceError& a, const ResourceError& b);
69
70private:
71 friend class ResourceErrorBase;
72 void doPlatformIsolatedCopy(const ResourceError&);
73
74 unsigned m_tlsErrors;
75 GRefPtr<GTlsCertificate> m_certificate;
76};
77
78}
79
80#endif
81
82#endif // ResourceError_h_
83