summaryrefslogtreecommitdiffstats
path: root/Source/WebKit
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-10-24 12:42:19 +0100
committerBen Murdoch <benm@google.com>2011-10-31 10:48:46 +0000
commit1c694b72a5eeade23acf64618e14ab19fcb5801a (patch)
treebb8f2562d940338eb249abfaf955a189eae5eb0b /Source/WebKit
parent05c651b68b396c8a09eef678a6b3439e8eb3297a (diff)
downloadexternal_webkit-1c694b72a5eeade23acf64618e14ab19fcb5801a.zip
external_webkit-1c694b72a5eeade23acf64618e14ab19fcb5801a.tar.gz
external_webkit-1c694b72a5eeade23acf64618e14ab19fcb5801a.tar.bz2
Report a load error when network loads blocked. Do not merge
Cherry pick from master. When network loads are blocked, we should fail those loads rather than leaving them dangling. In particular, this fixes an issue where WebCore will wait to do the first layout while CSS loads are pending. If network loads are blocked, we need to tell WebCore they are never going to complete. To implement this, we make use of the Chromium stack's load flags and move the code to a more suitable location. Bug: 5416543 Change-Id: I4bd9987611364b29d3ccaa50437d418a5eb9a5cd
Diffstat (limited to 'Source/WebKit')
-rw-r--r--Source/WebKit/android/WebCoreSupport/WebResourceRequest.cpp35
-rw-r--r--Source/WebKit/android/WebCoreSupport/WebResourceRequest.h2
-rw-r--r--Source/WebKit/android/WebCoreSupport/WebUrlLoader.cpp5
-rw-r--r--Source/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp3
4 files changed, 26 insertions, 19 deletions
diff --git a/Source/WebKit/android/WebCoreSupport/WebResourceRequest.cpp b/Source/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
index 2ede1ca..663ded8 100644
--- a/Source/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
+++ b/Source/WebKit/android/WebCoreSupport/WebResourceRequest.cpp
@@ -34,22 +34,33 @@ using namespace WebCore;
namespace android {
-WebResourceRequest::WebResourceRequest(const WebCore::ResourceRequest& resourceRequest)
+WebResourceRequest::WebResourceRequest(const WebCore::ResourceRequest& resourceRequest, bool shouldBlockNetworkLoads)
{
// Set the load flags based on the WebCore request.
m_loadFlags = net::LOAD_NORMAL;
- switch (resourceRequest.cachePolicy()) {
- case ReloadIgnoringCacheData:
- m_loadFlags |= net::LOAD_VALIDATE_CACHE;
- break;
- case ReturnCacheDataElseLoad:
- m_loadFlags |= net::LOAD_PREFERRING_CACHE;
- break;
- case ReturnCacheDataDontLoad:
+
+ if (shouldBlockNetworkLoads) {
+ // In the case that the embedder has blocked network loads, we only
+ // ever try to serve content out of the cache. If WebCore has set
+ // ReloadIgnoringCacheData, we would normally attempt to validate
+ // the cached data before serving it. In the absence of network
+ // we can't do that, so we will just return whatever we have in the
+ // cache (which may well be nothing).
m_loadFlags |= net::LOAD_ONLY_FROM_CACHE;
- break;
- case UseProtocolCachePolicy:
- break;
+ } else {
+ switch (resourceRequest.cachePolicy()) {
+ case ReloadIgnoringCacheData:
+ m_loadFlags |= net::LOAD_VALIDATE_CACHE;
+ break;
+ case ReturnCacheDataElseLoad:
+ m_loadFlags |= net::LOAD_PREFERRING_CACHE;
+ break;
+ case ReturnCacheDataDontLoad:
+ m_loadFlags |= net::LOAD_ONLY_FROM_CACHE;
+ break;
+ case UseProtocolCachePolicy:
+ break;
+ }
}
// TODO: We should consider setting these flags and net::LOAD_DO_NOT_SEND_AUTH_DATA
diff --git a/Source/WebKit/android/WebCoreSupport/WebResourceRequest.h b/Source/WebKit/android/WebCoreSupport/WebResourceRequest.h
index 38f37b5..7911f02 100644
--- a/Source/WebKit/android/WebCoreSupport/WebResourceRequest.h
+++ b/Source/WebKit/android/WebCoreSupport/WebResourceRequest.h
@@ -39,7 +39,7 @@ namespace android {
class WebResourceRequest {
public:
- WebResourceRequest(const WebCore::ResourceRequest&);
+ WebResourceRequest(const WebCore::ResourceRequest&, bool shouldBlockNetworkLoads);
const std::string& method() const
{
diff --git a/Source/WebKit/android/WebCoreSupport/WebUrlLoader.cpp b/Source/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
index 0c90bc5..f81fa34 100644
--- a/Source/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
+++ b/Source/WebKit/android/WebCoreSupport/WebUrlLoader.cpp
@@ -50,11 +50,6 @@ PassRefPtr<WebUrlLoader> WebUrlLoader::start(FrameLoaderClient* client, WebCore:
FrameLoaderClientAndroid* androidClient = static_cast<FrameLoaderClientAndroid*>(client);
WebFrame* webFrame = androidClient->webFrame();
- if (webFrame->blockNetworkLoads() &&
- (resourceRequest.url().protocolIs("http") ||
- resourceRequest.url().protocolIs("https")))
- return NULL;
-
webFrame->maybeSavePassword(androidClient->getFrame(), resourceRequest);
RefPtr<WebUrlLoader> loader = WebUrlLoader::create(webFrame, resourceHandle, resourceRequest);
diff --git a/Source/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp b/Source/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
index 56a9539..a6e58c8 100644
--- a/Source/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
+++ b/Source/WebKit/android/WebCoreSupport/WebUrlLoaderClient.cpp
@@ -110,7 +110,8 @@ WebUrlLoaderClient::WebUrlLoaderClient(WebFrame* webFrame, WebCore::ResourceHand
, m_sync(false)
, m_finished(false)
{
- WebResourceRequest webResourceRequest(resourceRequest);
+ bool block = webFrame->blockNetworkLoads() && (resourceRequest.url().protocolIs("http") || resourceRequest.url().protocolIs("https"));
+ WebResourceRequest webResourceRequest(resourceRequest, block);
UrlInterceptResponse* intercept = webFrame->shouldInterceptRequest(resourceRequest.url().string());
if (intercept) {
m_request = new WebRequest(this, webResourceRequest, intercept);