2 * Copyright (C) 2012 Apple 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
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.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef NetworkResourceLoader_h
27 #define NetworkResourceLoader_h
29 #if ENABLE(NETWORK_PROCESS)
31 #include "MessageSender.h"
32 #include "NetworkConnectionToWebProcess.h"
33 #include "SchedulableLoader.h"
34 #include <WebCore/ResourceHandleClient.h>
35 #include <WebCore/ResourceLoaderOptions.h>
36 #include <WebCore/ResourceRequest.h>
45 class RemoteNetworkingContext;
47 class NetworkResourceLoader : public SchedulableLoader, public WebCore::ResourceHandleClient, public CoreIPC::MessageSender<NetworkResourceLoader> {
49 static RefPtr<NetworkResourceLoader> create(const NetworkResourceLoadParameters& parameters, NetworkConnectionToWebProcess* connection)
51 return adoptRef(new NetworkResourceLoader(parameters, connection));
54 ~NetworkResourceLoader();
56 // Used by MessageSender.
57 CoreIPC::Connection* connection() const;
58 uint64_t destinationID() const;
62 // ResourceHandleClient methods
63 virtual void willSendRequest(WebCore::ResourceHandle*, WebCore::ResourceRequest&, const WebCore::ResourceResponse& /*redirectResponse*/) OVERRIDE;
64 virtual void didSendData(WebCore::ResourceHandle*, unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/) OVERRIDE;
65 virtual void didReceiveResponse(WebCore::ResourceHandle*, const WebCore::ResourceResponse&) OVERRIDE;
66 virtual void didReceiveData(WebCore::ResourceHandle*, const char*, int, int /*encodedDataLength*/) OVERRIDE;
67 virtual void didReceiveCachedMetadata(WebCore::ResourceHandle*, const char*, int) OVERRIDE;
68 virtual void didFinishLoading(WebCore::ResourceHandle*, double /*finishTime*/) OVERRIDE;
69 virtual void didFail(WebCore::ResourceHandle*, const WebCore::ResourceError&) OVERRIDE;
70 virtual void wasBlocked(WebCore::ResourceHandle*) OVERRIDE;
71 virtual void cannotShowURL(WebCore::ResourceHandle*) OVERRIDE;
72 virtual bool shouldUseCredentialStorage(WebCore::ResourceHandle*) OVERRIDE;
73 virtual void didReceiveAuthenticationChallenge(WebCore::ResourceHandle*, const WebCore::AuthenticationChallenge&) OVERRIDE;
74 virtual void didCancelAuthenticationChallenge(WebCore::ResourceHandle*, const WebCore::AuthenticationChallenge&) OVERRIDE;
76 #if USE(PROTECTION_SPACE_AUTH_CALLBACK)
77 virtual bool canAuthenticateAgainstProtectionSpace(WebCore::ResourceHandle*, const WebCore::ProtectionSpace&) OVERRIDE;
80 #if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
81 virtual bool supportsDataArray() OVERRIDE;
82 virtual void didReceiveDataArray(WebCore::ResourceHandle*, CFArrayRef) OVERRIDE;
87 virtual CFCachedURLResponseRef willCacheResponse(WebCore::ResourceHandle*, CFCachedURLResponseRef) OVERRIDE;
89 virtual NSCachedURLResponse* willCacheResponse(WebCore::ResourceHandle*, NSCachedURLResponse*) OVERRIDE;
91 virtual void willStopBufferingData(WebCore::ResourceHandle*, const char*, int) OVERRIDE;
92 #endif // PLATFORM(MAC)
95 virtual WebCore::AsyncFileStream* createAsyncFileStream(WebCore::FileStreamClient*) OVERRIDE;
99 NetworkResourceLoader(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*);
101 void scheduleStopOnMainThread();
102 static void performStops(void*);
104 void resourceHandleStopped();
106 RefPtr<RemoteNetworkingContext> m_networkingContext;
107 RefPtr<WebCore::ResourceHandle> m_handle;
110 } // namespace WebKit
112 #endif // ENABLE(NETWORK_PROCESS)
114 #endif // NetworkResourceLoader_h