summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/network/ResourceHandleInternal.h
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2011-05-06 11:45:16 +0100
committerSteve Block <steveblock@google.com>2011-05-12 13:44:10 +0100
commitcad810f21b803229eb11403f9209855525a25d57 (patch)
tree29a6fd0279be608e0fe9ffe9841f722f0f4e4269 /Source/WebCore/platform/network/ResourceHandleInternal.h
parent121b0cf4517156d0ac5111caf9830c51b69bae8f (diff)
downloadexternal_webkit-cad810f21b803229eb11403f9209855525a25d57.zip
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.gz
external_webkit-cad810f21b803229eb11403f9209855525a25d57.tar.bz2
Merge WebKit at r75315: Initial merge by git.
Change-Id: I570314b346ce101c935ed22a626b48c2af266b84
Diffstat (limited to 'Source/WebCore/platform/network/ResourceHandleInternal.h')
-rw-r--r--Source/WebCore/platform/network/ResourceHandleInternal.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/Source/WebCore/platform/network/ResourceHandleInternal.h b/Source/WebCore/platform/network/ResourceHandleInternal.h
new file mode 100644
index 0000000..d833e32
--- /dev/null
+++ b/Source/WebCore/platform/network/ResourceHandleInternal.h
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ResourceHandleInternal_h
+#define ResourceHandleInternal_h
+
+#include "ResourceHandle.h"
+#include "ResourceRequest.h"
+#include "AuthenticationChallenge.h"
+#include "Timer.h"
+
+#if USE(CFNETWORK)
+#include <CFNetwork/CFURLConnectionPriv.h>
+#endif
+
+#if USE(WININET) || (USE(CURL) && PLATFORM(WIN))
+#include <winsock2.h>
+#include <windows.h>
+#endif
+
+#if USE(CURL)
+#include <curl/curl.h>
+#include "FormDataStreamCurl.h"
+#endif
+
+#if USE(SOUP)
+#include "soup-requester.h"
+#include <GRefPtr.h>
+#include <libsoup/soup.h>
+class Frame;
+#endif
+
+#if PLATFORM(QT)
+class QWebNetworkJob;
+namespace WebCore {
+class QNetworkReplyHandler;
+}
+#endif
+
+#if PLATFORM(MAC)
+#ifdef __OBJC__
+@class NSURLAuthenticationChallenge;
+@class NSURLConnection;
+#else
+class NSURLAuthenticationChallenge;
+class NSURLConnection;
+#endif
+#endif
+
+#if PLATFORM(ANDROID)
+#include "ResourceLoaderAndroid.h"
+#endif
+
+// The allocations and releases in ResourceHandleInternal are
+// Cocoa-exception-free (either simple Foundation classes or
+// WebCoreResourceLoaderImp which avoids doing work in dealloc).
+
+namespace WebCore {
+ class ResourceHandleClient;
+
+ class ResourceHandleInternal : public Noncopyable {
+ public:
+ ResourceHandleInternal(ResourceHandle* loader, const ResourceRequest& request, ResourceHandleClient* c, bool defersLoading, bool shouldContentSniff)
+ : m_client(c)
+ , m_firstRequest(request)
+ , m_lastHTTPMethod(request.httpMethod())
+ , status(0)
+ , m_defersLoading(defersLoading)
+ , m_shouldContentSniff(shouldContentSniff)
+#if USE(CFNETWORK)
+ , m_connection(0)
+#endif
+#if USE(WININET)
+ , m_fileLoadTimer(loader, &ResourceHandle::fileLoadTimer)
+ , m_internetHandle(0)
+ , m_connectHandle(0)
+ , m_requestHandle(0)
+ , m_sentEndRequest(false)
+ , m_bytesRemainingToWrite(0)
+ , m_loadSynchronously(false)
+ , m_hasReceivedResponse(false)
+#endif
+#if USE(CURL)
+ , m_handle(0)
+ , m_url(0)
+ , m_customHeaders(0)
+ , m_cancelled(false)
+ , m_formDataStream(loader)
+#endif
+#if USE(SOUP)
+ , m_cancelled(false)
+ , m_buffer(0)
+ , m_total(0)
+ , m_idleHandler(0)
+ , m_gotChunkHandler(0)
+#endif
+#if PLATFORM(QT)
+ , m_job(0)
+#endif
+#if PLATFORM(MAC)
+ , m_startWhenScheduled(false)
+ , m_needsSiteSpecificQuirks(false)
+ , m_currentMacChallenge(nil)
+#endif
+ , m_scheduledFailureType(ResourceHandle::NoFailure)
+ , m_failureTimer(loader, &ResourceHandle::fireFailure)
+ {
+ const KURL& url = m_firstRequest.url();
+ m_user = url.user();
+ m_pass = url.pass();
+ m_firstRequest.removeCredentials();
+#if USE(SOUP)
+ m_requester = adoptGRef(webkit_soup_requester_new());
+#endif
+ }
+
+ ~ResourceHandleInternal();
+
+ ResourceHandleClient* client() { return m_client; }
+ ResourceHandleClient* m_client;
+
+ ResourceRequest m_firstRequest;
+ String m_lastHTTPMethod;
+
+ // Suggested credentials for the current redirection step.
+ String m_user;
+ String m_pass;
+
+ Credential m_initialCredential;
+
+ int status;
+
+ bool m_defersLoading;
+ bool m_shouldContentSniff;
+#if USE(CFNETWORK)
+ RetainPtr<CFURLConnectionRef> m_connection;
+#elif PLATFORM(MAC)
+ RetainPtr<NSURLConnection> m_connection;
+ RetainPtr<WebCoreResourceHandleAsDelegate> m_delegate;
+ RetainPtr<id> m_proxy;
+ bool m_startWhenScheduled;
+ bool m_needsSiteSpecificQuirks;
+#endif
+#if USE(WININET)
+ Timer<ResourceHandle> m_fileLoadTimer;
+ HINTERNET m_internetHandle;
+ HINTERNET m_connectHandle;
+ HINTERNET m_requestHandle;
+ bool m_sentEndRequest;
+ Vector<char> m_formData;
+ size_t m_bytesRemainingToWrite;
+ bool m_loadSynchronously;
+ bool m_hasReceivedResponse;
+ String m_redirectUrl;
+#endif
+#if USE(CURL)
+ CURL* m_handle;
+ char* m_url;
+ struct curl_slist* m_customHeaders;
+ ResourceResponse m_response;
+ bool m_cancelled;
+
+ FormDataStream m_formDataStream;
+ Vector<char> m_postBytes;
+#endif
+#if USE(SOUP)
+ GRefPtr<SoupMessage> m_soupMessage;
+ ResourceResponse m_response;
+ bool m_cancelled;
+ GRefPtr<WebKitSoupRequest> m_soupRequest;
+ GRefPtr<WebKitSoupRequester> m_requester;
+ GRefPtr<GInputStream> m_inputStream;
+ GRefPtr<GCancellable> m_cancellable;
+ char* m_buffer;
+ gsize m_total;
+ guint m_idleHandler;
+ RefPtr<NetworkingContext> m_context;
+ gulong m_gotChunkHandler;
+#endif
+#if PLATFORM(QT)
+ QNetworkReplyHandler* m_job;
+ RefPtr<NetworkingContext> m_context;
+#endif
+
+#if PLATFORM(MAC)
+ // We need to keep a reference to the original challenge to be able to cancel it.
+ // It is almost identical to m_currentWebChallenge.nsURLAuthenticationChallenge(), but has a different sender.
+ NSURLAuthenticationChallenge *m_currentMacChallenge;
+#endif
+#if PLATFORM(ANDROID)
+ RefPtr<ResourceLoaderAndroid> m_loader;
+#endif
+ AuthenticationChallenge m_currentWebChallenge;
+
+ ResourceHandle::FailureType m_scheduledFailureType;
+ Timer<ResourceHandle> m_failureTimer;
+ };
+
+} // namespace WebCore
+
+#endif // ResourceHandleInternal_h