[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

andersca at apple.com andersca at apple.com
Wed Dec 22 15:56:25 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 6676688b01cafc4af75ab9b265666445eb45acf9
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Nov 17 00:19:25 2010 +0000

    Handle converting a ResourceHandle to a download
    https://bugs.webkit.org/show_bug.cgi?id=49631
    
    Reviewed by Sam Weinig.
    
    * WebProcess/Downloads/Download.h:
    Add startWithHandle.
    
    * WebProcess/Downloads/DownloadManager.h:
    * WebProcess/Downloads/DownloadManager.cpp:
    (WebKit::DownloadManager::convertHandleToDownload):
    Create a new Download object and call startWithHandle on it.
    
    * WebProcess/Downloads/cf/DownloadCFNet.cpp:
    (WebKit::Download::startWithHandle):
    Add stub.
    
    * WebProcess/Downloads/mac/DownloadMac.mm:
    (WebKit::Download::startWithHandle):
    Create an NSURLDownload object from passed in ResourceHandle.
    
    * WebProcess/Downloads/qt/DownloadQt.cpp:
    (WebKit::Download::startWithHandle):
    Add stub.
    
    * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
    (WebKit::WebFrameLoaderClient::download):
    Call WebFrame::convertHandleToDownload.
    
    * WebProcess/WebPage/WebFrame.cpp:
    (WebKit::WebFrame::convertHandleToDownload):
    Call DownloadManager::convertHandleToDownload.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72148 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 26b422d..e6d1f06 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,40 @@
 2010-11-16  Anders Carlsson  <andersca at apple.com>
 
+        Reviewed by Sam Weinig.
+
+        Handle converting a ResourceHandle to a download
+        https://bugs.webkit.org/show_bug.cgi?id=49631
+
+        * WebProcess/Downloads/Download.h:
+        Add startWithHandle.
+
+        * WebProcess/Downloads/DownloadManager.h:
+        * WebProcess/Downloads/DownloadManager.cpp:
+        (WebKit::DownloadManager::convertHandleToDownload):
+        Create a new Download object and call startWithHandle on it.
+
+        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+        (WebKit::Download::startWithHandle):
+        Add stub.
+
+        * WebProcess/Downloads/mac/DownloadMac.mm:
+        (WebKit::Download::startWithHandle):
+        Create an NSURLDownload object from passed in ResourceHandle.
+
+        * WebProcess/Downloads/qt/DownloadQt.cpp:
+        (WebKit::Download::startWithHandle):
+        Add stub.
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::download):
+        Call WebFrame::convertHandleToDownload.
+
+        * WebProcess/WebPage/WebFrame.cpp:
+        (WebKit::WebFrame::convertHandleToDownload):
+        Call DownloadManager::convertHandleToDownload.
+
+2010-11-16  Anders Carlsson  <andersca at apple.com>
+
         Reviewed by John Sullivan.
 
         Set the original URL for downloads
diff --git a/WebKit2/WebProcess/Downloads/Download.h b/WebKit2/WebProcess/Downloads/Download.h
index 45e272c..3474b8f 100644
--- a/WebKit2/WebProcess/Downloads/Download.h
+++ b/WebKit2/WebProcess/Downloads/Download.h
@@ -43,6 +43,7 @@ class WKDownloadAsDelegate;
 #endif
 
 namespace WebCore {
+    class ResourceHandle;
     class ResourceResponse;
 }
 
@@ -62,6 +63,7 @@ public:
     uint64_t destinationID() const { return m_downloadID; }
 
     void start(WebPage* initiatingWebPage);
+    void startWithHandle(WebPage* initiatingPage, WebCore::ResourceHandle*, const WebCore::ResourceRequest& initialRequest, const WebCore::ResourceResponse&);
 
     void didStart();
     void didReceiveResponse(const WebCore::ResourceResponse&);
diff --git a/WebKit2/WebProcess/Downloads/DownloadManager.cpp b/WebKit2/WebProcess/Downloads/DownloadManager.cpp
index cfe90e5..f0488fb 100644
--- a/WebKit2/WebProcess/Downloads/DownloadManager.cpp
+++ b/WebKit2/WebProcess/Downloads/DownloadManager.cpp
@@ -52,4 +52,13 @@ void DownloadManager::startDownload(uint64_t downloadID, WebPage* initiatingPage
     m_downloads.set(downloadID, download.leakPtr());
 }
 
+void DownloadManager::convertHandleToDownload(uint64_t downloadID, WebPage* initiatingPage, ResourceHandle* handle, const ResourceRequest& request, const ResourceRequest& initialRequest, const ResourceResponse& response)
+{
+    OwnPtr<Download> download = Download::create(downloadID, request);
+
+    download->startWithHandle(initiatingPage, handle, initialRequest, response);
+    ASSERT(!m_downloads.contains(downloadID));
+    m_downloads.set(downloadID, download.leakPtr());
+}
+
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/Downloads/DownloadManager.h b/WebKit2/WebProcess/Downloads/DownloadManager.h
index 1a48944..19bbe8c 100644
--- a/WebKit2/WebProcess/Downloads/DownloadManager.h
+++ b/WebKit2/WebProcess/Downloads/DownloadManager.h
@@ -30,7 +30,9 @@
 #include <wtf/Noncopyable.h>
 
 namespace WebCore {
+    class ResourceHandle;
     class ResourceRequest;
+    class ResourceResponse;
 }
 
 namespace WebKit {
@@ -45,6 +47,7 @@ public:
     static DownloadManager& shared();
 
     void startDownload(uint64_t downloadID, WebPage* initiatingPage, const WebCore::ResourceRequest&);
+    void convertHandleToDownload(uint64_t downloadID, WebPage* initiatingPage, WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest& initialRequest, const WebCore::ResourceResponse&);
 
 private:
     DownloadManager();
diff --git a/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp b/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
index 505f069..4f56e35 100644
--- a/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
+++ b/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
@@ -36,6 +36,11 @@ void Download::start(WebPage* initiatingWebPage)
     notImplemented();
 }
 
+void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle*, const ResourceRequest& initialRequest, const ResourceResponse&)
+{
+    notImplemented();
+}
+
 void Download::platformInvalidate()
 {
     notImplemented();
diff --git a/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm b/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
index 0d106f0..e943848 100644
--- a/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
+++ b/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
@@ -28,11 +28,17 @@
 #include <WebCore/BackForwardController.h>
 #include <WebCore/HistoryItem.h>
 #include <WebCore/Page.h>
+#include <WebCore/ResourceHandle.h>
 #include <WebCore/ResourceResponse.h>
 #include "NotImplemented.h"
 #include "WebPage.h"
 
 @interface NSURLDownload (WebNSURLDownloadDetails)
++(id)_downloadWithLoadingConnection:(NSURLConnection *)connection
+                            request:(NSURLRequest *)request
+                           response:(NSURLResponse *)r
+                           delegate:(id)delegate
+                              proxy:(id)proxy;
 - (void)_setOriginatingURL:(NSURL *)originatingURL;
 @end
 
@@ -118,6 +124,27 @@ void Download::start(WebPage* initiatingPage)
     setOriginalURLForDownload(initiatingPage, m_nsURLDownload.get(), m_request);
 }
 
+void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle* handle, const ResourceRequest& initialRequest, const ResourceResponse& response)
+{
+    ASSERT(!m_nsURLDownload);
+    ASSERT(!m_delegate);
+
+    id proxy = handle->releaseProxy();
+    ASSERT(proxy);
+
+    m_delegate.adoptNS([[WKDownloadAsDelegate alloc] initWithDownload:this]);
+    m_nsURLDownload = [NSURLDownload _downloadWithLoadingConnection:handle->connection()
+                                                            request:m_request.nsURLRequest()
+                                                           response:response.nsURLResponse()
+                                                            delegate:m_delegate.get()
+                                                               proxy:proxy];
+
+    // FIXME: Allow this to be changed by the client.
+    [m_nsURLDownload.get() setDeletesFileUponFailure:NO];
+                                                            
+    setOriginalURLForDownload(initiatingPage, m_nsURLDownload.get(), initialRequest);
+}
+
 void Download::platformInvalidate()
 {
     ASSERT(m_nsURLDownload);
diff --git a/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp b/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
index 505f069..4f56e35 100644
--- a/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
+++ b/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
@@ -36,6 +36,11 @@ void Download::start(WebPage* initiatingWebPage)
     notImplemented();
 }
 
+void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle*, const ResourceRequest& initialRequest, const ResourceResponse&)
+{
+    notImplemented();
+}
+
 void Download::platformInvalidate()
 {
     notImplemented();
diff --git a/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp b/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
index ec6ed98..158bada 100644
--- a/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
+++ b/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
@@ -978,9 +978,9 @@ bool WebFrameLoaderClient::canCachePage() const
     return false;
 }
 
-void WebFrameLoaderClient::download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&)
+void WebFrameLoaderClient::download(ResourceHandle* handle, const ResourceRequest& request, const ResourceRequest& initialRequest, const ResourceResponse& response)
 {
-    notImplemented();
+    m_frame->convertHandleToDownload(handle, request, initialRequest, response);
 }
 
 PassRefPtr<Frame> WebFrameLoaderClient::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
diff --git a/WebKit2/WebProcess/WebPage/WebFrame.cpp b/WebKit2/WebProcess/WebPage/WebFrame.cpp
index a71ce32..bea53d1 100644
--- a/WebKit2/WebProcess/WebPage/WebFrame.cpp
+++ b/WebKit2/WebProcess/WebPage/WebFrame.cpp
@@ -217,6 +217,14 @@ void WebFrame::startDownload(const WebCore::ResourceRequest& request)
     m_policyDownloadID = 0;
 }
 
+void WebFrame::convertHandleToDownload(ResourceHandle* handle, const ResourceRequest& request, const ResourceRequest& initialRequest, const ResourceResponse& response)
+{
+    ASSERT(m_policyDownloadID);
+
+    DownloadManager::shared().convertHandleToDownload(m_policyDownloadID, page(), handle, request, initialRequest, response);
+    m_policyDownloadID = 0;
+}
+
 String WebFrame::source() const 
 {
     if (!m_coreFrame)
diff --git a/WebKit2/WebProcess/WebPage/WebFrame.h b/WebKit2/WebProcess/WebPage/WebFrame.h
index 8986e4a..dc16733 100644
--- a/WebKit2/WebProcess/WebPage/WebFrame.h
+++ b/WebKit2/WebProcess/WebPage/WebFrame.h
@@ -70,6 +70,7 @@ public:
     void didReceivePolicyDecision(uint64_t listenerID, WebCore::PolicyAction, uint64_t downloadID);
 
     void startDownload(const WebCore::ResourceRequest&);
+    void convertHandleToDownload(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest& initialRequest, const WebCore::ResourceResponse&);
 
     String source() const;
     String contentsAsString() const;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list