[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 16:38:20 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 1aae99437903f57cf4b12cd5d6624bf73a93a279
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Nov 29 18:46:54 2010 +0000
Downloads: When the web process crashes, call error callbacks for pending downloads
https://bugs.webkit.org/show_bug.cgi?id=50164
<rdar://problem/8691170>
Reviewed by Sam Weinig.
* UIProcess/API/C/WKContext.h:
Add processDidCrash callback.
* UIProcess/Downloads/DownloadProxy.cpp:
(WebKit::DownloadProxy::~DownloadProxy):
Assert that the web context is null.
(WebKit::DownloadProxy::processDidClose):
Call the processDidCrash callback.
(WebKit::DownloadProxy::didFinish):
(WebKit::DownloadProxy::didFail):
Call downloadFinished.
* UIProcess/WebContext.cpp:
(WebKit::WebContext::processDidClose):
Call processDidClose on all pending downloads.
(WebKit::WebContext::downloadFinished):
Remove the download proxy from the map.
* UIProcess/WebDownloadClient.cpp:
(WebKit::WebDownloadClient::processDidCrash):
Call the processDidCrash callback function.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@72812 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index acb4533..27819a0 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,36 @@
+2010-11-29 Anders Carlsson <andersca at apple.com>
+
+ Reviewed by Sam Weinig.
+
+ Downloads: When the web process crashes, call error callbacks for pending downloads
+ https://bugs.webkit.org/show_bug.cgi?id=50164
+ <rdar://problem/8691170>
+
+ * UIProcess/API/C/WKContext.h:
+ Add processDidCrash callback.
+
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ (WebKit::DownloadProxy::~DownloadProxy):
+ Assert that the web context is null.
+
+ (WebKit::DownloadProxy::processDidClose):
+ Call the processDidCrash callback.
+
+ (WebKit::DownloadProxy::didFinish):
+ (WebKit::DownloadProxy::didFail):
+ Call downloadFinished.
+
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::processDidClose):
+ Call processDidClose on all pending downloads.
+
+ (WebKit::WebContext::downloadFinished):
+ Remove the download proxy from the map.
+
+ * UIProcess/WebDownloadClient.cpp:
+ (WebKit::WebDownloadClient::processDidCrash):
+ Call the processDidCrash callback function.
+
2010-11-29 Laszlo Gombos <laszlo.1.gombos at nokia.com>
Reviewed by Kenneth Rohde Christiansen.
diff --git a/WebKit2/UIProcess/API/C/WKContext.h b/WebKit2/UIProcess/API/C/WKContext.h
index 90ca8e9..3cd2b2e 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 (*WKContextDownloadProcessDidCrashCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
struct WKContextDownloadClient {
int version;
@@ -90,6 +91,7 @@ struct WKContextDownloadClient {
WKContextDownloadDidCreateDestinationCallback didCreateDestination;
WKContextDownloadDidFinishCallback didFinish;
WKContextDownloadDidFailCallback didFail;
+ WKContextDownloadProcessDidCrashCallback processDidCrash;
};
typedef struct WKContextDownloadClient WKContextDownloadClient;
diff --git a/WebKit2/UIProcess/Downloads/DownloadProxy.cpp b/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
index 2e1343c..1afca4b 100644
--- a/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
+++ b/WebKit2/UIProcess/Downloads/DownloadProxy.cpp
@@ -53,6 +53,7 @@ DownloadProxy::DownloadProxy(WebContext* webContext)
DownloadProxy::~DownloadProxy()
{
+ ASSERT(!m_webContext);
}
void DownloadProxy::invalidate()
@@ -61,6 +62,14 @@ void DownloadProxy::invalidate()
m_webContext = 0;
}
+void DownloadProxy::processDidClose()
+{
+ if (!m_webContext)
+ return;
+
+ m_webContext->downloadClient().processDidCrash(m_webContext, this);
+}
+
void DownloadProxy::didStart(const ResourceRequest& request)
{
m_request = request;
@@ -120,6 +129,9 @@ void DownloadProxy::didFinish()
return;
m_webContext->downloadClient().didFinish(m_webContext, this);
+
+ // This can cause the DownloadProxy object to be deleted.
+ m_webContext->downloadFinished(this);
}
void DownloadProxy::didFail(const ResourceError& error)
@@ -128,6 +140,9 @@ void DownloadProxy::didFail(const ResourceError& error)
return;
m_webContext->downloadClient().didFail(m_webContext, this, error);
+
+ // 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 0e3c43f..aae32e2 100644
--- a/WebKit2/UIProcess/Downloads/DownloadProxy.h
+++ b/WebKit2/UIProcess/Downloads/DownloadProxy.h
@@ -53,6 +53,7 @@ public:
const WebCore::ResourceRequest& request() const { return m_request; }
void invalidate();
+ void processDidClose();
void didReceiveDownloadProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
CoreIPC::SyncReplyMode didReceiveSyncDownloadProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, CoreIPC::ArgumentEncoder*);
diff --git a/WebKit2/UIProcess/WebContext.cpp b/WebKit2/UIProcess/WebContext.cpp
index 1993eab..c10999a 100644
--- a/WebKit2/UIProcess/WebContext.cpp
+++ b/WebKit2/UIProcess/WebContext.cpp
@@ -197,8 +197,11 @@ void WebContext::processDidClose(WebProcessProxy* process)
m_visitedLinkProvider.processDidClose();
// Invalidate all outstanding downloads.
- for (HashMap<uint64_t, RefPtr<DownloadProxy> >::iterator::Values it = m_downloads.begin().values(), end = m_downloads.end().values(); it != end; ++it)
+ for (HashMap<uint64_t, RefPtr<DownloadProxy> >::iterator::Values it = m_downloads.begin().values(), end = m_downloads.end().values(); it != end; ++it) {
+ (*it)->processDidClose();
(*it)->invalidate();
+ }
+
m_downloads.clear();
m_process = 0;
@@ -424,6 +427,14 @@ uint64_t WebContext::createDownloadProxy()
return downloadID;
}
+void WebContext::downloadFinished(DownloadProxy* downloadProxy)
+{
+ ASSERT(m_downloads.contains(downloadProxy->downloadID()));
+
+ downloadProxy->invalidate();
+ m_downloads.remove(downloadProxy->downloadID());
+}
+
void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
{
if (messageID.is<CoreIPC::MessageClassWebContext>()) {
diff --git a/WebKit2/UIProcess/WebContext.h b/WebKit2/UIProcess/WebContext.h
index 7df33c7..20c8fa3 100644
--- a/WebKit2/UIProcess/WebContext.h
+++ b/WebKit2/UIProcess/WebContext.h
@@ -124,6 +124,7 @@ public:
// Downloads.
uint64_t createDownloadProxy();
WebDownloadClient& downloadClient() { return m_downloadClient; }
+ void downloadFinished(DownloadProxy*);
private:
WebContext(ProcessModel, const String& injectedBundlePath);
diff --git a/WebKit2/UIProcess/WebDownloadClient.cpp b/WebKit2/UIProcess/WebDownloadClient.cpp
index 7e69d96..ba53588 100644
--- a/WebKit2/UIProcess/WebDownloadClient.cpp
+++ b/WebKit2/UIProcess/WebDownloadClient.cpp
@@ -98,4 +98,12 @@ void WebDownloadClient::didFail(WebContext* webContext, DownloadProxy* downloadP
m_client.didFail(toAPI(webContext), toAPI(downloadProxy), toAPI(error), m_client.clientInfo);
}
+void WebDownloadClient::processDidCrash(WebContext* webContext, DownloadProxy* downloadProxy)
+{
+ if (!m_client.processDidCrash)
+ return;
+
+ m_client.processDidCrash(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
+}
+
} // namespace WebKit
diff --git a/WebKit2/UIProcess/WebDownloadClient.h b/WebKit2/UIProcess/WebDownloadClient.h
index 7c75605..f5c2211 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 processDidCrash(WebContext*, DownloadProxy*);
};
} // namespace WebKit
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list