summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebKit/android/WebCoreSupport/WebRequest.cpp12
-rw-r--r--WebKit/android/WebCoreSupport/WebResourceRequest.cpp2
-rw-r--r--WebKit/android/WebCoreSupport/WebResourceRequest.h2
-rw-r--r--WebKit/android/WebCoreSupport/WebResponse.cpp10
-rw-r--r--WebKit/android/WebCoreSupport/WebResponse.h4
-rw-r--r--WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp16
-rw-r--r--WebKit/android/WebCoreSupport/WebUrlLoaderClient.h1
7 files changed, 37 insertions, 10 deletions
diff --git a/WebKit/android/WebCoreSupport/WebRequest.cpp b/WebKit/android/WebCoreSupport/WebRequest.cpp
index 811cd3f..4030160 100644
--- a/WebKit/android/WebCoreSupport/WebRequest.cpp
+++ b/WebKit/android/WebCoreSupport/WebRequest.cpp
@@ -63,10 +63,16 @@ WebRequest::~WebRequest()
{
}
-void WebRequest::finish(bool /*success*/)
+void WebRequest::finish(bool success)
{
- LoaderData* loaderData = new LoaderData(m_urlLoader);
- callOnMainThread(WebUrlLoaderClient::didFinishLoading, loaderData);
+ if (success) {
+ LoaderData* loaderData = new LoaderData(m_urlLoader);
+ callOnMainThread(WebUrlLoaderClient::didFinishLoading, loaderData);
+ } else {
+ WebResponse webResponse(m_request.get());
+ LoaderData* loaderData = new LoaderData(m_urlLoader, webResponse);
+ callOnMainThread(WebUrlLoaderClient::didFail, loaderData);
+ }
m_networkBuffer = 0;
m_request = 0;
}
diff --git a/WebKit/android/WebCoreSupport/WebResourceRequest.cpp b/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
index 6248217..ee3ddaa 100644
--- a/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
+++ b/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
@@ -33,7 +33,7 @@
namespace android {
-WebResourceRequest::WebResourceRequest(WebCore::ResourceRequest& resourceRequest)
+WebResourceRequest::WebResourceRequest(const WebCore::ResourceRequest& resourceRequest)
{
// Set the request headers
net::HttpRequestHeaders requestHeaders;
diff --git a/WebKit/android/WebCoreSupport/WebResourceRequest.h b/WebKit/android/WebCoreSupport/WebResourceRequest.h
index 4ed9a44..7064176 100644
--- a/WebKit/android/WebCoreSupport/WebResourceRequest.h
+++ b/WebKit/android/WebCoreSupport/WebResourceRequest.h
@@ -38,7 +38,7 @@ namespace android {
class WebResourceRequest {
public:
- WebResourceRequest(WebCore::ResourceRequest&);
+ WebResourceRequest(const WebCore::ResourceRequest&);
const std::string& method()
{
diff --git a/WebKit/android/WebCoreSupport/WebResponse.cpp b/WebKit/android/WebCoreSupport/WebResponse.cpp
index 6fc48e9..fcd2127 100644
--- a/WebKit/android/WebCoreSupport/WebResponse.cpp
+++ b/WebKit/android/WebCoreSupport/WebResponse.cpp
@@ -27,6 +27,7 @@
#include "WebResponse.h"
#include "ResourceResponse.h"
+#include "ResourceError.h"
namespace android {
@@ -34,6 +35,7 @@ WebResponse::WebResponse(URLRequest* request)
: m_httpStatusCode(0)
{
m_url = request->url().spec();
+ m_host = request->url().HostNoBrackets();
request->GetMimeType(&m_mime);
request->GetCharset(&m_encoding);
m_length = request->GetExpectedContentSize();
@@ -74,6 +76,14 @@ WebCore::ResourceResponse WebResponse::createResourceResponse()
return resourceResponse;
}
+WebCore::ResourceError WebResponse::createResourceError()
+{
+ // TODO: Last parameter is a localized string, get the correct one from android
+ WebCore::ResourceError error(m_host.c_str(), m_httpStatusCode, m_url.c_str(), m_httpStatusText.c_str());
+ return error;
+}
+
+
WebCore::KURL WebResponse::url()
{
WebCore::KURL kurl(WebCore::ParsedURLString, m_url.c_str());
diff --git a/WebKit/android/WebCoreSupport/WebResponse.h b/WebKit/android/WebCoreSupport/WebResponse.h
index 3112b2a..ea548d9 100644
--- a/WebKit/android/WebCoreSupport/WebResponse.h
+++ b/WebKit/android/WebCoreSupport/WebResponse.h
@@ -34,6 +34,7 @@
namespace WebCore {
class ResourceResponse;
+class ResourceError;
}
namespace android {
@@ -49,10 +50,13 @@ public:
// Only use on the WebCore thread!
WebCore::ResourceResponse createResourceResponse();
+ // Only use on the WebCore thread!
+ WebCore::ResourceError createResourceError();
private:
std::string m_encoding;
int m_httpStatusCode;
+ std::string m_host;
std::string m_httpStatusText;
long long m_length;
std::string m_mime;
diff --git a/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp b/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
index 3785a1d..8545686 100644
--- a/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
+++ b/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
@@ -85,18 +85,18 @@ bool WebUrlLoaderClient::isActive() const
}
WebUrlLoaderClient::WebUrlLoaderClient(WebCore::ResourceHandle* resourceHandle, const WebCore::ResourceRequest& resourceRequest)
- : m_resourceHandle(resourceHandle), m_resourceRequest(resourceRequest), m_cancelling(false)
+ : m_resourceHandle(resourceHandle), m_cancelling(false)
{
- WebResourceRequest webResourceRequest(m_resourceRequest);
+ WebResourceRequest webResourceRequest(resourceRequest);
m_request = new WebRequest(this, webResourceRequest);
m_request->AddRef(); // Matched by ReleaseSoon in destructor
base::Thread* thread = ioThread();
// Set uploads before start is called on the request
- if (m_resourceRequest.httpBody() && !(webResourceRequest.method() == "GET" || webResourceRequest.method() == "HEAD")) {
+ if (resourceRequest.httpBody() && !(webResourceRequest.method() == "GET" || webResourceRequest.method() == "HEAD")) {
Vector<FormDataElement>::iterator iter;
- Vector<FormDataElement> elements = m_resourceRequest.httpBody()->elements();
+ Vector<FormDataElement> elements = resourceRequest.httpBody()->elements();
for (iter = elements.begin(); iter != elements.end(); iter++) {
FormDataElement element = *iter;
switch (element.m_type) {
@@ -201,6 +201,14 @@ void WebUrlLoaderClient::didReceiveDataUrl(void* data)
// static - on main thread
void WebUrlLoaderClient::didFail(void* data)
{
+ OwnPtr<LoaderData> loaderData(static_cast<LoaderData*>(data));
+ WebUrlLoaderClient* loader = loaderData->loader;
+
+ if (loader->isActive())
+ loader->m_resourceHandle->client()->didFail(loader->m_resourceHandle.get(), loaderData->webResponse.createResourceError());
+
+ // Always finish a request, if not it will leak
+ loader->finish();
}
// static - on main thread
diff --git a/WebKit/android/WebCoreSupport/WebUrlLoaderClient.h b/WebKit/android/WebCoreSupport/WebUrlLoaderClient.h
index 084b6a0..399df08 100644
--- a/WebKit/android/WebCoreSupport/WebUrlLoaderClient.h
+++ b/WebKit/android/WebCoreSupport/WebUrlLoaderClient.h
@@ -74,7 +74,6 @@ public:
private:
void finish();
RefPtr<WebCore::ResourceHandle> m_resourceHandle;
- WebCore::ResourceRequest m_resourceRequest;
bool m_cancelling;
// Not an OwnPtr since it should be deleted on another thread