[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