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

andersca at apple.com andersca at apple.com
Wed Dec 22 17:45:11 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 09c7e62a02c7e1a67f0c304bb4ae6cde07f099e1
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Nov 29 23:34:17 2010 +0000

    Should be able to pause and resume downloads
    https://bugs.webkit.org/show_bug.cgi?id=50185
    <rdar://problem/8691135>
    
    Reviewed by Darin Adler.
    
    * UIProcess/API/C/WKContext.h:
    Add didCancel callback.
    
    * UIProcess/API/C/WKDownload.cpp:
    (WKDownloadGetResumeData):
    (WKDownloadCancel):
    Call the respective DownloadProxy member functions.
    
    * UIProcess/API/C/WKDownload.h:
    * UIProcess/Downloads/DownloadProxy.cpp:
    (WebKit::DownloadProxy::cancel):
    Send Cancel to the WebProcess.
    
    (WebKit::DownloadProxy::didFail):
    This now takes a resumeData reference.
    
    (WebKit::DownloadProxy::didCancel):
    Set the resume data and call didCancel.
    
    * UIProcess/Downloads/DownloadProxy.h:
    (WebKit::DownloadProxy::resumeData):
    Return the resume data.
    
    * UIProcess/Downloads/DownloadProxy.messages.in:
    Add DidCancel message, Add resume data to DidFail.
    
    * UIProcess/WebDownloadClient.cpp:
    (WebKit::WebDownloadClient::didCancel):
    Call the didCancel context client function.
    
    * WebProcess/Downloads/Download.cpp:
    (WebKit::Download::didFail):
    This now takes a resume data argument as well.
    
    (WebKit::Download::didCancel):
    Send DidCancel.
    
    * WebProcess/Downloads/DownloadManager.cpp:
    (WebKit::DownloadManager::cancelDownload):
    Look up the download and cancel it.
    
    * WebProcess/Downloads/cf/DownloadCFNet.cpp:
    (WebKit::Download::cancel):
    Add stub.
    
    * WebProcess/Downloads/mac/DownloadMac.mm:
    (WebKit::Download::cancel):
    Cancel the download.
    
    (-[WKDownloadAsDelegate download:didFailWithError:]):
    Pass the resume data along.
    
    * WebProcess/Downloads/qt/DownloadQt.cpp:
    (WebKit::Download::cancel):
    Add stub.
    
    * WebProcess/WebProcess.cpp:
    (WebKit::WebProcess::cancelDownload):
    Ask the download manager to cancel the download.
    
    * WebProcess/WebProcess.h:
    * WebProcess/WebProcess.messages.in:
    Add CancelDownload message.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72841 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index d274f74..fcddb03 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,75 @@
+2010-11-29  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Darin Adler.
+
+        Should be able to pause and resume downloads
+        https://bugs.webkit.org/show_bug.cgi?id=50185
+        <rdar://problem/8691135>
+
+        * UIProcess/API/C/WKContext.h:
+        Add didCancel callback.
+
+        * UIProcess/API/C/WKDownload.cpp:
+        (WKDownloadGetResumeData):
+        (WKDownloadCancel):
+        Call the respective DownloadProxy member functions.
+
+        * UIProcess/API/C/WKDownload.h:
+        * UIProcess/Downloads/DownloadProxy.cpp:
+        (WebKit::DownloadProxy::cancel):
+        Send Cancel to the WebProcess.
+
+        (WebKit::DownloadProxy::didFail):
+        This now takes a resumeData reference.
+
+        (WebKit::DownloadProxy::didCancel):
+        Set the resume data and call didCancel.
+
+        * UIProcess/Downloads/DownloadProxy.h:
+        (WebKit::DownloadProxy::resumeData):
+        Return the resume data.
+
+        * UIProcess/Downloads/DownloadProxy.messages.in:
+        Add DidCancel message, Add resume data to DidFail.
+
+        * UIProcess/WebDownloadClient.cpp:
+        (WebKit::WebDownloadClient::didCancel):
+        Call the didCancel context client function.
+
+        * WebProcess/Downloads/Download.cpp:
+        (WebKit::Download::didFail):
+        This now takes a resume data argument as well.
+        
+        (WebKit::Download::didCancel):
+        Send DidCancel.
+
+        * WebProcess/Downloads/DownloadManager.cpp:
+        (WebKit::DownloadManager::cancelDownload):
+        Look up the download and cancel it.
+
+        * WebProcess/Downloads/cf/DownloadCFNet.cpp:
+        (WebKit::Download::cancel):
+        Add stub.
+
+        * WebProcess/Downloads/mac/DownloadMac.mm:
+        (WebKit::Download::cancel):
+        Cancel the download.
+
+        (-[WKDownloadAsDelegate download:didFailWithError:]):
+        Pass the resume data along.
+
+        * WebProcess/Downloads/qt/DownloadQt.cpp:
+        (WebKit::Download::cancel):
+        Add stub.
+
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::cancelDownload):
+        Ask the download manager to cancel the download.
+
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        Add CancelDownload message.
+
 2010-11-29  Balazs Kelemen  <kbalazs at webkit.org>
 
         Reviewed by Adam Roben.
diff --git a/WebKit2/UIProcess/API/C/WKContext.h b/WebKit2/UIProcess/API/C/WKContext.h
index 3cd2b2e..2970a6a 100644
--- a/WebKit2/UIProcess/API/C/WKContext.h
+++ b/WebKit2/UIProcess/API/C/WKContext.h
@@ -78,6 +78,7 @@ typedef WKStringRef (*WKContextDownloadDecideDestinationWithSuggestedFilenameCal
 typedef void (*WKContextDownloadDidCreateDestinationCallback)(WKContextRef context, WKDownloadRef download, WKStringRef path, const void *clientInfo);
 typedef void (*WKContextDownloadDidFinishCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
 typedef void (*WKContextDownloadDidFailCallback)(WKContextRef context, WKDownloadRef download, WKErrorRef error, const void *clientInfo);
+typedef void (*WKContextDownloadDidCancel)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
 typedef void (*WKContextDownloadProcessDidCrashCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
 
 struct WKContextDownloadClient {
@@ -91,6 +92,7 @@ struct WKContextDownloadClient {
     WKContextDownloadDidCreateDestinationCallback                       didCreateDestination;
     WKContextDownloadDidFinishCallback                                  didFinish;
     WKContextDownloadDidFailCallback                                    didFail;
+    WKContextDownloadDidCancel                                          didCancel;
     WKContextDownloadProcessDidCrashCallback                            processDidCrash;
 };
 typedef struct WKContextDownloadClient WKContextDownloadClient;
diff --git a/WebKit2/UIProcess/API/C/WKDownload.cpp b/WebKit2/UIProcess/API/C/WKDownload.cpp
index 6f3b536..8960e2a 100644
--- a/WebKit2/UIProcess/API/C/WKDownload.cpp
+++ b/WebKit2/UIProcess/API/C/WKDownload.cpp
@@ -40,3 +40,13 @@ WKURLRequestRef WKDownloadCopyRequest(WKDownloadRef download)
 {
     return toAPI(WebURLRequest::create(toImpl(download)->request()).leakRef());
 }
+
+WKDataRef WKDownloadGetResumeData(WKDownloadRef download)
+{
+    return toAPI(toImpl(download)->resumeData());
+}
+
+void WKDownloadCancel(WKDownloadRef download)
+{
+    return toImpl(download)->cancel();
+}
diff --git a/WebKit2/UIProcess/API/C/WKDownload.h b/WebKit2/UIProcess/API/C/WKDownload.h
index b94f678..b812681 100644
--- a/WebKit2/UIProcess/API/C/WKDownload.h
+++ b/WebKit2/UIProcess/API/C/WKDownload.h
@@ -39,6 +39,8 @@ extern "C" {
 WK_EXPORT WKTypeID WKDownloadGetTypeID();
 
 WK_EXPORT WKURLRequestRef WKDownloadCopyRequest(WKDownloadRef download);
+WK_EXPORT WKDataRef WKDownloadGetResumeData(WKDownloadRef download);
+WK_EXPORT void WKDownloadCancel(WKDownloadRef download);
 
 #ifdef __cplusplus
 }
diff --git a/WebKit2/UIProcess/Downloads/DownloadProxy.cpp b/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
index 1afca4b..fcc4a75 100644
--- a/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
+++ b/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
@@ -25,8 +25,10 @@
 
 #include "DownloadProxy.h"
 
-#include "NotImplemented.h"
+#include "DataReference.h"
 #include "WebContext.h"
+#include "WebData.h"
+#include "WebProcessMessages.h"
 #include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 
@@ -56,6 +58,14 @@ DownloadProxy::~DownloadProxy()
     ASSERT(!m_webContext);
 }
 
+void DownloadProxy::cancel()
+{
+    if (!m_webContext)
+        return;
+
+    m_webContext->process()->send(Messages::WebProcess::CancelDownload(m_downloadID), 0);
+}
+
 void DownloadProxy::invalidate()
 {
     ASSERT(m_webContext);
@@ -134,16 +144,36 @@ void DownloadProxy::didFinish()
     m_webContext->downloadFinished(this);
 }
 
-void DownloadProxy::didFail(const ResourceError& error)
+static PassRefPtr<WebData> createWebData(const CoreIPC::DataReference& data)
+{
+    if (data.isEmpty())
+        return 0;
+
+    return WebData::create(data.data(), data.size());
+}
+
+void DownloadProxy::didFail(const ResourceError& error, const CoreIPC::DataReference& resumeData)
 {
     if (!m_webContext)
         return;
 
+    m_resumeData = createWebData(resumeData);
+
     m_webContext->downloadClient().didFail(m_webContext, this, error);
 
     // This can cause the DownloadProxy object to be deleted.
     m_webContext->downloadFinished(this);
 }
 
+void DownloadProxy::didCancel(const CoreIPC::DataReference& resumeData)
+{
+    m_resumeData = createWebData(resumeData);
+
+    m_webContext->downloadClient().didCancel(m_webContext, this);
+
+    // This can cause the DownloadProxy object to be deleted.
+    m_webContext->downloadFinished(this);
+}
+
 } // namespace WebKit
 
diff --git a/WebKit2/UIProcess/Downloads/DownloadProxy.h b/WebKit2/UIProcess/Downloads/DownloadProxy.h
index aae32e2..a155d72 100644
--- a/WebKit2/UIProcess/Downloads/DownloadProxy.h
+++ b/WebKit2/UIProcess/Downloads/DownloadProxy.h
@@ -41,6 +41,7 @@ namespace WebCore {
 namespace WebKit {
 
 class WebContext;
+class WebData;
 
 class DownloadProxy : public APIObject {
 public:
@@ -51,6 +52,9 @@ public:
 
     uint64_t downloadID() const { return m_downloadID; }
     const WebCore::ResourceRequest& request() const { return m_request; }
+    WebData* resumeData() const { return m_resumeData.get(); }
+
+    void cancel();
 
     void invalidate();
     void processDidClose();
@@ -71,10 +75,13 @@ private:
     void decideDestinationWithSuggestedFilename(const String& filename, String& destination, bool& allowOverwrite, SandboxExtension::Handle& sandboxExtensionHandle);
     void didCreateDestination(const String& path);
     void didFinish();
-    void didFail(const WebCore::ResourceError&);
+    void didFail(const WebCore::ResourceError&, const CoreIPC::DataReference& resumeData);
+    void didCancel(const CoreIPC::DataReference& resumeData);
 
     WebContext* m_webContext;
     uint64_t m_downloadID;
+
+    RefPtr<WebData> m_resumeData;
     WebCore::ResourceRequest m_request;
 };
 
diff --git a/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in b/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in
index 243deb7..999080b 100644
--- a/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in
+++ b/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in
@@ -28,5 +28,6 @@ messages -> DownloadProxy {
     DecideDestinationWithSuggestedFilename(String filename) -> (String destination, bool allowOverwrite, WebKit::SandboxExtension::Handle sandboxExtensionHandle)
     DidCreateDestination(WTF::String path)
     DidFinish()
-    DidFail(WebCore::ResourceError error)
+    DidFail(WebCore::ResourceError error, CoreIPC::DataReference resumeData)
+    DidCancel(CoreIPC::DataReference resumeData)
 }
diff --git a/WebKit2/UIProcess/WebDownloadClient.cpp b/WebKit2/UIProcess/WebDownloadClient.cpp
index ba53588..d6a7bcb 100644
--- a/WebKit2/UIProcess/WebDownloadClient.cpp
+++ b/WebKit2/UIProcess/WebDownloadClient.cpp
@@ -98,6 +98,14 @@ void WebDownloadClient::didFail(WebContext* webContext, DownloadProxy* downloadP
     m_client.didFail(toAPI(webContext), toAPI(downloadProxy), toAPI(error), m_client.clientInfo);
 }
 
+void WebDownloadClient::didCancel(WebContext* webContext, DownloadProxy* downloadProxy)
+{
+    if (!m_client.didCancel)
+        return;
+
+    m_client.didCancel(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
+}
+
 void WebDownloadClient::processDidCrash(WebContext* webContext, DownloadProxy* downloadProxy)
 {
     if (!m_client.processDidCrash)
diff --git a/WebKit2/UIProcess/WebDownloadClient.h b/WebKit2/UIProcess/WebDownloadClient.h
index f5c2211..902c870 100644
--- a/WebKit2/UIProcess/WebDownloadClient.h
+++ b/WebKit2/UIProcess/WebDownloadClient.h
@@ -50,6 +50,7 @@ public:
     void didCreateDestination(WebContext*, DownloadProxy*, const String& path);
     void didFinish(WebContext*, DownloadProxy*);
     void didFail(WebContext*, DownloadProxy*, const WebCore::ResourceError&);
+    void didCancel(WebContext*, DownloadProxy*);
     void processDidCrash(WebContext*, DownloadProxy*);
 };
 
diff --git a/WebKit2/WebProcess/Downloads/Download.cpp b/WebKit2/WebProcess/Downloads/Download.cpp
index e70d927..3cb5588 100644
--- a/WebKit2/WebProcess/Downloads/Download.cpp
+++ b/WebKit2/WebProcess/Downloads/Download.cpp
@@ -26,6 +26,7 @@
 #include "Download.h"
 
 #include "Connection.h"
+#include "DataReference.h"
 #include "DownloadProxyMessages.h"
 #include "DownloadManager.h"
 #include "SandboxExtension.h"
@@ -110,9 +111,18 @@ void Download::didFinish()
     DownloadManager::shared().downloadFinished(this);
 }
 
-void Download::didFail(const WebCore::ResourceError& error)
+void Download::didFail(const ResourceError& error, const CoreIPC::DataReference& resumeData)
 {
-    send(Messages::DownloadProxy::DidFail(error));
+    send(Messages::DownloadProxy::DidFail(error, resumeData));
+
+    if (m_sandboxExtension)
+        m_sandboxExtension->invalidate();
+    DownloadManager::shared().downloadFinished(this);
+}
+
+void Download::didCancel(const CoreIPC::DataReference& resumeData)
+{
+    send(Messages::DownloadProxy::DidCancel(resumeData));
 
     if (m_sandboxExtension)
         m_sandboxExtension->invalidate();
diff --git a/WebKit2/WebProcess/Downloads/Download.h b/WebKit2/WebProcess/Downloads/Download.h
index 37faca8..54f325a 100644
--- a/WebKit2/WebProcess/Downloads/Download.h
+++ b/WebKit2/WebProcess/Downloads/Download.h
@@ -42,6 +42,10 @@ class WKDownloadAsDelegate;
 #endif
 #endif
 
+namespace CoreIPC {
+    class DataReference;
+}
+
 namespace WebCore {
     class ResourceError;
     class ResourceHandle;
@@ -66,6 +70,7 @@ public:
 
     void start(WebPage* initiatingWebPage);
     void startWithHandle(WebPage* initiatingPage, WebCore::ResourceHandle*, const WebCore::ResourceRequest& initialRequest, const WebCore::ResourceResponse&);
+    void cancel();
 
     uint64_t downloadID() const { return m_downloadID; }
 
@@ -76,7 +81,8 @@ public:
     String decideDestinationWithSuggestedFilename(const String& filename, bool& allowOverwrite);
     void didCreateDestination(const String& path);
     void didFinish();
-    void didFail(const WebCore::ResourceError&);
+    void didFail(const WebCore::ResourceError&, const CoreIPC::DataReference& resumeData);
+    void didCancel(const CoreIPC::DataReference& resumeData);
 
 private:
     Download(uint64_t downloadID, const WebCore::ResourceRequest&);
diff --git a/WebKit2/WebProcess/Downloads/DownloadManager.cpp b/WebKit2/WebProcess/Downloads/DownloadManager.cpp
index b3acad5..e65883a 100644
--- a/WebKit2/WebProcess/Downloads/DownloadManager.cpp
+++ b/WebKit2/WebProcess/Downloads/DownloadManager.cpp
@@ -61,6 +61,15 @@ void DownloadManager::convertHandleToDownload(uint64_t downloadID, WebPage* init
     m_downloads.set(downloadID, download.leakPtr());
 }
 
+void DownloadManager::cancelDownload(uint64_t downloadID)
+{
+    Download* download = m_downloads.get(downloadID);
+    if (!download)
+        return;
+
+    download->cancel();
+}
+
 void DownloadManager::downloadFinished(Download* download)
 {
     ASSERT(m_downloads.contains(download->downloadID()));
diff --git a/WebKit2/WebProcess/Downloads/DownloadManager.h b/WebKit2/WebProcess/Downloads/DownloadManager.h
index 0245bb6..1f27b86 100644
--- a/WebKit2/WebProcess/Downloads/DownloadManager.h
+++ b/WebKit2/WebProcess/Downloads/DownloadManager.h
@@ -49,6 +49,8 @@ public:
     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&);
 
+    void cancelDownload(uint64_t downloadID);
+
     void downloadFinished(Download*);
     bool isDownloading() const { return !m_downloads.isEmpty(); }
 
diff --git a/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp b/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
index 4f56e35..34fd60e 100644
--- a/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
+++ b/WebKit2/WebProcess/Downloads/cf/DownloadCFNet.cpp
@@ -41,6 +41,11 @@ void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle*, const R
     notImplemented();
 }
 
+void Download::cancel()
+{
+    notImplemented();
+}
+
 void Download::platformInvalidate()
 {
     notImplemented();
diff --git a/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm b/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
index 6ca49ad..0f3c669 100644
--- a/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
+++ b/WebKit2/WebProcess/Downloads/mac/DownloadMac.mm
@@ -30,6 +30,7 @@
 #include <WebCore/Page.h>
 #include <WebCore/ResourceHandle.h>
 #include <WebCore/ResourceResponse.h>
+#include "DataReference.h"
 #include "NotImplemented.h"
 #include "WebPage.h"
 
@@ -145,6 +146,14 @@ void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle* handle,
     setOriginalURLForDownload(initiatingPage, m_nsURLDownload.get(), initialRequest);
 }
 
+void Download::cancel()
+{
+    [m_nsURLDownload.get() cancel];
+
+    RetainPtr<NSData> resumeData = [m_nsURLDownload.get() resumeData];
+    didCancel(CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([resumeData.get() bytes]), [resumeData.get() length]));
+}
+
 void Download::platformInvalidate()
 {
     ASSERT(m_nsURLDownload);
@@ -262,8 +271,13 @@ void Download::platformInvalidate()
 
 - (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
 {
-    if (_download)
-        _download->didFail(error);
+    if (!_download)
+        return;
+
+    RetainPtr<NSData> resumeData = [download resumeData];
+    CoreIPC::DataReference dataReference(reinterpret_cast<const uint8_t*>([resumeData.get() bytes]), [resumeData.get() length]);
+
+    _download->didFail(error, dataReference);
 }
 
 @end
diff --git a/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp b/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
index 4f56e35..34fd60e 100644
--- a/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
+++ b/WebKit2/WebProcess/Downloads/qt/DownloadQt.cpp
@@ -41,6 +41,11 @@ void Download::startWithHandle(WebPage* initiatingPage, ResourceHandle*, const R
     notImplemented();
 }
 
+void Download::cancel()
+{
+    notImplemented();
+}
+
 void Download::platformInvalidate()
 {
     notImplemented();
diff --git a/WebKit2/WebProcess/WebProcess.cpp b/WebKit2/WebProcess/WebProcess.cpp
index 8190750..a4bb0bb 100644
--- a/WebKit2/WebProcess/WebProcess.cpp
+++ b/WebKit2/WebProcess/WebProcess.cpp
@@ -548,4 +548,9 @@ void WebProcess::clearApplicationCache()
 #endif
 }
 
+void WebProcess::cancelDownload(uint64_t downloadID)
+{
+    DownloadManager::shared().cancelDownload(downloadID);
+}
+
 } // namespace WebKit
diff --git a/WebKit2/WebProcess/WebProcess.h b/WebKit2/WebProcess/WebProcess.h
index ac0e52f..cbc8b8f 100644
--- a/WebKit2/WebProcess/WebProcess.h
+++ b/WebKit2/WebProcess/WebProcess.h
@@ -112,6 +112,8 @@ private:
     void platformClearResourceCaches();
     void clearApplicationCache();
 
+    void cancelDownload(uint64_t downloadID);
+
     // CoreIPC::Connection::Client
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
     void didClose(CoreIPC::Connection*);
diff --git a/WebKit2/WebProcess/WebProcess.messages.in b/WebKit2/WebProcess/WebProcess.messages.in
index a4626c5..1b63496 100644
--- a/WebKit2/WebProcess/WebProcess.messages.in
+++ b/WebKit2/WebProcess/WebProcess.messages.in
@@ -45,4 +45,8 @@ messages -> WebProcess {
 
     ClearResourceCaches();
     ClearApplicationCache();
+
+    # Downloads. This should really be in a Download.messages.in, but it seemed unnecessary to create a new file just for
+    # a single message.
+    CancelDownload(uint64_t downloadID)
 }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list