18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2006 Apple Computer, 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#ifndef ResourceHandle_h
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ResourceHandle_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "AuthenticationChallenge.h"
30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "AuthenticationClient.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTTPHeaderMap.h"
3268513a70bcd92384395513322f1b801e7bf9c729Steve Block#include "NetworkingContext.h"
335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "ThreadableLoader.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(SOUP)
378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiantypedef struct _SoupSession SoupSession;
388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CF)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef const struct __CFData * CFDataRef;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if USE(WININET)
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef unsigned long DWORD;
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef unsigned long DWORD_PTR;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void* LPVOID;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef LPVOID HINTERNET;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RetainPtr.h>
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __OBJC__
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSData;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSError;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSURLConnection;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class WebCoreResourceHandleAsDelegate;
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSData;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSError;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSURLConnection;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebCoreResourceHandleAsDelegate;
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct objc_object *id;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(CFNETWORK)
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct _CFURLConnection* CFURLConnectionRef;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef int CFHTTPCookieStorageAcceptPolicy;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct OpaqueCFHTTPCookieStorage* CFHTTPCookieStorageRef;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CFURLSTORAGESESSIONS)
7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochtypedef const struct __CFURLStorageSession* CFURLStorageSessionRef;
7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass AuthenticationChallenge;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Credential;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FormData;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Frame;
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass KURL;
8521939df44de1705786c545cd1bf519d47250322dBen Murdochclass ProtectionSpace;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ResourceError;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ResourceHandleClient;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ResourceHandleInternal;
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ResourceRequest;
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ResourceResponse;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SchedulePair;
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass SharedBuffer;
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttemplate <typename T> class Timer;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
96643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass ResourceHandle : public RefCounted<ResourceHandle>
97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if PLATFORM(MAC) || USE(CFNETWORK) || USE(CURL)
98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    , public AuthenticationClient
99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif
100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    {
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
10268513a70bcd92384395513322f1b801e7bf9c729Steve Block    static PassRefPtr<ResourceHandle> create(NetworkingContext*, const ResourceRequest&, ResourceHandleClient*, bool defersLoading, bool shouldContentSniff);
10368513a70bcd92384395513322f1b801e7bf9c729Steve Block    static void loadResourceSynchronously(NetworkingContext*, const ResourceRequest&, StoredCredentials, ResourceError&, ResourceResponse&, Vector<char>& data);
104967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    static void prepareForURL(const KURL&);
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static bool willLoadFromCache(ResourceRequest&, Frame*);
1076c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    static void cacheMetadata(const ResourceResponse&, const Vector<char>&);
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool didSendBodyDataDelegateExists();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual ~ResourceHandle();
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if PLATFORM(MAC) || USE(CFNETWORK)
1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    void willSendRequest(ResourceRequest&, const ResourceResponse& redirectResponse);
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool shouldUseCredentialStorage();
117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC) || USE(CFNETWORK) || USE(CURL)
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void receivedCredential(const AuthenticationChallenge&, const Credential&);
121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void receivedRequestToContinueWithoutCredential(const AuthenticationChallenge&);
122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void receivedCancellation(const AuthenticationChallenge&);
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void didCancelAuthenticationChallenge(const AuthenticationChallenge&);
12721939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
12821939df44de1705786c545cd1bf519d47250322dBen Murdoch    bool canAuthenticateAgainstProtectionSpace(const ProtectionSpace&);
12921939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NSURLConnection *connection() const;
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebCoreResourceHandleAsDelegate *delegate();
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void releaseDelegate();
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    id releaseProxy();
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void schedule(SchedulePair*);
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void unschedule(SchedulePair*);
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif USE(CFNETWORK)
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFURLConnectionRef connection() const;
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    CFURLConnectionRef releaseConnectionForDownload();
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void setHostAllowsAnyHTTPSCertificate(const String&);
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void setClientCertificate(const String& host, CFDataRef);
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN) && USE(CURL)
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void setHostAllowsAnyHTTPSCertificate(const String&);
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
14781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if PLATFORM(WIN) && USE(CURL) && USE(CF)
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void setClientCertificate(const String& host, CFDataRef);
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PassRefPtr<SharedBuffer> bufferedData();
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool supportsBufferedData();
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    bool shouldContentSniff() const;
1555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    static bool shouldContentSniffURL(const KURL&);
1565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    static void forceContentSniffing();
1585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WININET)
160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void setSynchronousInternetHandle(HINTERNET);
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void fileLoadTimer(Timer<ResourceHandle>*);
162bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void onRedirect();
163bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    bool onRequestComplete();
164bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    static void CALLBACK internetStatusCallback(HINTERNET, DWORD_PTR, DWORD, LPVOID, DWORD);
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
167f07202aa5d185feb2bd6a0a038123863aadb3491Andrei Popescu#if PLATFORM(QT) || USE(CURL) || USE(SOUP) || PLATFORM(ANDROID)
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ResourceHandleInternal* getInternal() { return d.get(); }
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(SOUP)
1728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    static SoupSession* defaultSession();
1738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
1748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Used to work around the fact that you don't get any more NSURLConnection callbacks until you return from the one you're in.
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static bool loadsBlocked();
177967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
178967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    bool hasAuthenticationChallenge() const;
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void clearAuthentication();
1802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual void cancel();
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // The client may be 0, in which case no callbacks will be made.
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ResourceHandleClient* client() const;
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setClient(ResourceHandleClient*);
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setDefersLoading(bool);
187a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch#if PLATFORM(ANDROID)
188a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch// TODO: this needs upstreaming.
189a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch    void pauseLoad(bool);
190a923424180b9d2cbe3a3951caed13039eef1edf6Ben Murdoch#endif
191967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
192967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    ResourceRequest& firstRequest();
193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    const String& lastHTTPMethod() const;
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void fireFailure(Timer<ResourceHandle>*);
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
19781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CFURLSTORAGESESSIONS)
19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static void setPrivateBrowsingEnabled(bool);
19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static CFURLStorageSessionRef privateBrowsingStorageSession();
20081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static void setPrivateBrowsingStorageSessionIdentifierBase(const String&);
20181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
20281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    using RefCounted<ResourceHandle>::ref;
204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    using RefCounted<ResourceHandle>::deref;
205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
206a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochprotected:
207a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    ResourceHandle(const ResourceRequest&, ResourceHandleClient*, bool defersLoading, bool shouldContentSniff);
208a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
210a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    enum FailureType {
211a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        NoFailure,
212a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        BlockedFailure,
213a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch        InvalidURLFailure
214a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    };
215a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
21606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    void platformSetDefersLoading(bool);
21706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void scheduleFailure(FailureType);
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
22068513a70bcd92384395513322f1b801e7bf9c729Steve Block    bool start(NetworkingContext*);
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void refAuthenticationClient() { ref(); }
223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    virtual void derefAuthenticationClient() { deref(); }
224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
225967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if PLATFORM(MAC)
226967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void createNSURLConnection(id delegate, bool shouldUseCredentialStorage, bool shouldContentSniff);
22781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#elif USE(CF)
228967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void createCFURLConnection(bool shouldUseCredentialStorage, bool shouldContentSniff);
229967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif
230967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CFURLSTORAGESESSIONS)
23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static RetainPtr<CFURLStorageSessionRef> createPrivateBrowsingStorageSession(CFStringRef identifier);
23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static String privateBrowsingStorageSessionIdentifierDefaultBase();
23481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif
23581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    friend class ResourceHandleInternal;
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    OwnPtr<ResourceHandleInternal> d;
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ResourceHandle_h
243