diff options
-rw-r--r-- | WebKit/android/WebCoreSupport/WebRequest.cpp | 12 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebResourceRequest.cpp | 2 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebResourceRequest.h | 2 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebResponse.cpp | 10 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebResponse.h | 4 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp | 16 | ||||
-rw-r--r-- | WebKit/android/WebCoreSupport/WebUrlLoaderClient.h | 1 |
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 |