[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
paroga at webkit.org
paroga at webkit.org
Wed Dec 22 13:41:23 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 5ad5bd46c4bb97aed9d99963d7b312808fcc1783
Author: paroga at webkit.org <paroga at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Sep 23 16:12:57 2010 +0000
2010-09-23 Patrick Gansterer <paroga at webkit.org>
Reviewed by Adam Roben.
Cleanup network communication code in ResourceHandleWin
https://bugs.webkit.org/show_bug.cgi?id=46200
Add logic for request handling directly into ResourceHandle::start and fix style.
Use Unicode instead of ASCII Windows API functions.
* platform/network/ResourceHandleInternal.h:
(WebCore::ResourceHandleInternal::ResourceHandleInternal):
* platform/network/win/ResourceHandleWin.cpp:
(WebCore::ResourceHandle::onRequestComplete):
(WebCore::ResourceHandle::start):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68147 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 24136fd..a181bd9 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-09-23 Patrick Gansterer <paroga at webkit.org>
+
+ Reviewed by Adam Roben.
+
+ Cleanup network communication code in ResourceHandleWin
+ https://bugs.webkit.org/show_bug.cgi?id=46200
+
+ Add logic for request handling directly into ResourceHandle::start and fix style.
+ Use Unicode instead of ASCII Windows API functions.
+
+ * platform/network/ResourceHandleInternal.h:
+ (WebCore::ResourceHandleInternal::ResourceHandleInternal):
+ * platform/network/win/ResourceHandleWin.cpp:
+ (WebCore::ResourceHandle::onRequestComplete):
+ (WebCore::ResourceHandle::start):
+
2010-09-23 Luiz Agostini <luiz.agostini at openbossa.org>
Reviewed by Andreas Kling.
diff --git a/WebCore/platform/network/ResourceHandleInternal.h b/WebCore/platform/network/ResourceHandleInternal.h
index 1424b50..70a21b3 100644
--- a/WebCore/platform/network/ResourceHandleInternal.h
+++ b/WebCore/platform/network/ResourceHandleInternal.h
@@ -96,6 +96,9 @@ namespace WebCore {
, m_secondaryHandle(0)
, m_jobId(0)
, m_threadId(0)
+ , m_internetHandle(0)
+ , m_connectHandle(0)
+ , m_requestHandle(0)
, m_sentEndRequest(false)
, m_bytesRemainingToWrite(0)
, m_hasReceivedResponse(false)
@@ -169,6 +172,9 @@ namespace WebCore {
HINTERNET m_secondaryHandle;
unsigned m_jobId;
DWORD m_threadId;
+ HINTERNET m_internetHandle;
+ HINTERNET m_connectHandle;
+ HINTERNET m_requestHandle;
bool m_sentEndRequest;
Vector<char> m_formData;
int m_bytesRemainingToWrite;
diff --git a/WebCore/platform/network/win/ResourceHandleWin.cpp b/WebCore/platform/network/win/ResourceHandleWin.cpp
index d99bd6d..e109c0d 100644
--- a/WebCore/platform/network/win/ResourceHandleWin.cpp
+++ b/WebCore/platform/network/win/ResourceHandleWin.cpp
@@ -381,35 +381,14 @@ void ResourceHandle::onRequestComplete(LPARAM lParam)
buffers.dwBufferLength = bufferSize;
}
- PlatformDataStruct platformData;
- platformData.errorString = 0;
- platformData.error = 0;
- platformData.loaded = ok;
-
- if (!ok) {
- int error = GetLastError();
- if (error == ERROR_IO_PENDING)
- return;
- DWORD errorStringChars = 0;
- if (!InternetGetLastResponseInfo(&platformData.error, 0, &errorStringChars)) {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
- platformData.errorString = new TCHAR[errorStringChars];
- InternetGetLastResponseInfo(&platformData.error, platformData.errorString, &errorStringChars);
- }
- }
-#ifdef RESOURCE_LOADER_DEBUG
- char buf[64];
- _snprintf(buf, sizeof(buf), "Load error: %i\n", error);
- OutputDebugStringA(buf);
-#endif
- }
-
- if (d->m_secondaryHandle)
- InternetCloseHandle(d->m_secondaryHandle);
- InternetCloseHandle(d->m_resourceHandle);
+ if (!ok && GetLastError() == ERROR_IO_PENDING)
+ return;
client()->didFinishLoading(this, 0);
- delete this;
+ InternetCloseHandle(d->m_requestHandle);
+ InternetCloseHandle(d->m_connectHandle);
+ deref(); // balances ref in start
+ return;
}
static void __stdcall transferJobStatusCallback(HINTERNET internetHandle,
@@ -467,68 +446,58 @@ static void __stdcall transferJobStatusCallback(HINTERNET internetHandle,
bool ResourceHandle::start(NetworkingContext* context)
{
- ref();
if (request().url().isLocalFile()) {
+ ref(); // balanced by deref in fileLoadTimer
d->m_fileLoadTimer.startOneShot(0.0);
return true;
- } else {
- static HINTERNET internetHandle = 0;
- if (!internetHandle) {
- String userAgentStr = context->userAgent() + String("", 1);
- LPCWSTR userAgent = reinterpret_cast<const WCHAR*>(userAgentStr.characters());
- // leak the Internet for now
- internetHandle = InternetOpen(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, INTERNET_FLAG_ASYNC);
- }
- if (!internetHandle) {
- delete this;
- return false;
- }
- static INTERNET_STATUS_CALLBACK callbackHandle =
- InternetSetStatusCallback(internetHandle, transferJobStatusCallback);
+ }
- initializeOffScreenResourceHandleWindow();
- d->m_jobId = addToOutstandingJobs(this);
+ if (!d->m_internetHandle)
+ d->m_internetHandle = asynchronousInternetHandle(context->userAgent());
- DWORD flags =
- INTERNET_FLAG_KEEP_CONNECTION |
- INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
- INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
+ if (!d->m_internetHandle)
+ return false;
- // For form posting, we can't use InternetOpenURL. We have to use
- // InternetConnect followed by HttpSendRequest.
- HINTERNET urlHandle;
- String referrer = context->referrer();
- if (request().httpMethod() == "POST") {
- d->m_postReferrer = referrer;
- String host = request().url().host();
- urlHandle = InternetConnectA(internetHandle, host.latin1().data(),
- request().url().port(),
- NULL, // no username
- NULL, // no password
- INTERNET_SERVICE_HTTP,
- flags, (DWORD_PTR)d->m_jobId);
- } else {
- String urlStr = request().url().string();
- int fragmentIndex = urlStr.find('#');
- if (fragmentIndex != -1)
- urlStr = urlStr.left(fragmentIndex);
- String headers;
- if (!referrer.isEmpty())
- headers += String("Referer: ") + referrer + "\r\n";
+ DWORD flags = INTERNET_FLAG_KEEP_CONNECTION
+ | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS
+ | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;
- urlHandle = InternetOpenUrlA(internetHandle, urlStr.latin1().data(),
- headers.latin1().data(), headers.length(),
- flags, (DWORD_PTR)d->m_jobId);
- }
+ d->m_connectHandle = InternetConnectW(d->m_internetHandle, firstRequest().url().host().charactersWithNullTermination(), firstRequest().url().port(),
+ 0, 0, INTERNET_SERVICE_HTTP, flags, reinterpret_cast<DWORD_PTR>(this));
- if (urlHandle == INVALID_HANDLE_VALUE) {
- delete this;
- return false;
- }
- d->m_threadId = GetCurrentThreadId();
+ if (!d->m_connectHandle)
+ return false;
- return true;
+ String urlStr = firstRequest().url().path();
+ String urlQuery = firstRequest().url().query();
+
+ if (!urlQuery.isEmpty()) {
+ urlStr.append('?');
+ urlStr.append(urlQuery);
}
+
+ String httpMethod = firstRequest().httpMethod();
+ String httpReferrer = firstRequest().httpReferrer();
+
+ LPCWSTR httpAccept[] = { L"*/*", 0 };
+
+ d->m_requestHandle = HttpOpenRequestW(d->m_connectHandle, httpMethod.charactersWithNullTermination(), urlStr.charactersWithNullTermination(),
+ 0, httpReferrer.charactersWithNullTermination(), httpAccept, flags, reinterpret_cast<DWORD_PTR>(this));
+
+ if (!d->m_requestHandle) {
+ InternetCloseHandle(d->m_connectHandle);
+ return false;
+ }
+
+ INTERNET_BUFFERSW internetBuffers;
+ ZeroMemory(&internetBuffers, sizeof(internetBuffers));
+ internetBuffers.dwStructSize = sizeof(internetBuffers);
+
+ HttpSendRequestExW(d->m_requestHandle, &internetBuffers, 0, 0, reinterpret_cast<DWORD_PTR>(this));
+
+ ref(); // balanced by deref in onRequestComplete
+
+ return true;
}
void ResourceHandle::fileLoadTimer(Timer<ResourceHandle>*)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list