2
* Copyright (C) 2009 Google Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are
8
* * Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above
11
* copyright notice, this list of conditions and the following disclaimer
12
* in the documentation and/or other materials provided with the
14
* * Neither the name of Google Inc. nor the names of its
15
* contributors may be used to endorse or promote products derived from
16
* this software without specific prior written permission.
18
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
#ifndef DocumentThreadableLoader_h
32
#define DocumentThreadableLoader_h
34
#include "SubresourceLoaderClient.h"
35
#include "ThreadableLoader.h"
36
#include <wtf/OwnPtr.h>
37
#include <wtf/PassRefPtr.h>
38
#include <wtf/RefCounted.h>
39
#include <wtf/RefPtr.h>
44
struct ResourceRequest;
45
class ThreadableLoaderClient;
47
class DocumentThreadableLoader : public RefCounted<DocumentThreadableLoader>, public ThreadableLoader, private SubresourceLoaderClient {
49
static void loadResourceSynchronously(Document*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);
50
static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&);
51
virtual ~DocumentThreadableLoader();
53
virtual void cancel();
55
using RefCounted<DocumentThreadableLoader>::ref;
56
using RefCounted<DocumentThreadableLoader>::deref;
59
virtual void refThreadableLoader() { ref(); }
60
virtual void derefThreadableLoader() { deref(); }
63
enum BlockingBehavior {
68
DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior blockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions& options);
70
virtual void willSendRequest(SubresourceLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
71
virtual void didSendData(SubresourceLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
73
virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&);
74
virtual void didReceiveData(SubresourceLoader*, const char*, int lengthReceived);
75
virtual void didFinishLoading(SubresourceLoader*);
76
virtual void didFail(SubresourceLoader*, const ResourceError&);
78
virtual bool getShouldUseCredentialStorage(SubresourceLoader*, bool& shouldUseCredentialStorage);
79
virtual void didReceiveAuthenticationChallenge(SubresourceLoader*, const AuthenticationChallenge&);
80
virtual void receivedCancellation(SubresourceLoader*, const AuthenticationChallenge&);
82
void didFinishLoading(unsigned long identifier);
83
void makeSimpleCrossOriginAccessRequest(const ResourceRequest& request);
84
void makeCrossOriginAccessRequestWithPreflight(const ResourceRequest& request);
85
void preflightSuccess();
86
void preflightFailure();
88
void loadRequest(const ResourceRequest&, bool skipCanLoadCheck);
89
bool isAllowedRedirect(const KURL&);
91
RefPtr<SubresourceLoader> m_loader;
92
ThreadableLoaderClient* m_client;
94
ThreadableLoaderOptions m_options;
95
bool m_sameOriginRequest;
97
OwnPtr<ResourceRequest> m_actualRequest; // non-null during Access Control preflight checks
100
} // namespace WebCore
102
#endif // DocumentThreadableLoader_h