[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
japhet at chromium.org
japhet at chromium.org
Wed Dec 22 15:46:44 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 8fb63c9f75ece1a620fc150ae061cc0548ee9bfd
Author: japhet at chromium.org <japhet at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Nov 12 05:17:14 2010 +0000
2010-11-11 Nate Chapin <japhet at chromium.org>
Reviewed by Antti Koivisto.
Test update for https://bugs.webkit.org/show_bug.cgi?id=49351,
the timing of willSendRequest() calls will be slightly different.
* platform/mac/security/block-test-expected.txt:
2010-11-11 Nate Chapin <japhet at chromium.org>
Reviewed by Antti Koivisto.
Cleanup after http://trac.webkit.org/changeset/71562, namely:
Make deferred request handle simpler.
Don't perform callbacks associated with network load starting
(e.g., willSendRequest) until the load is in fact sent to the network.
Make ResourceLoadScheduler a friend of ResourceLoader and make
ResourceLoader::start() protected to try to ensure loads actually
go through the scheduler.
https://bugs.webkit.org/show_bug.cgi?id=49351
Behavior should be covered by existing tests.
* loader/NetscapePlugInStreamLoader.cpp:
(WebCore::NetscapePlugInStreamLoader::create):
* loader/ResourceLoadScheduler.cpp:
(WebCore::ResourceLoadScheduler::servePendingRequests):
* loader/ResourceLoadScheduler.h:
(WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
* loader/ResourceLoader.cpp:
(WebCore::ResourceLoader::init):
(WebCore::ResourceLoader::start):
(WebCore::ResourceLoader::setDefersLoading):
(WebCore::ResourceLoader::didCancel):
* loader/ResourceLoader.h:
(WebCore::ResourceLoader::reachedTerminalState):
(WebCore::ResourceLoader::request):
* loader/SubresourceLoader.cpp:
(WebCore::SubresourceLoader::create):
* loader/loader.cpp:
(WebCore::Loader::load):
(WebCore::Loader::willSendRequest):
* loader/loader.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71884 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 0a4fc1e..4ff2aae 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,12 @@
+2010-11-11 Nate Chapin <japhet at chromium.org>
+
+ Reviewed by Antti Koivisto.
+
+ Test update for https://bugs.webkit.org/show_bug.cgi?id=49351,
+ the timing of willSendRequest() calls will be slightly different.
+
+ * platform/mac/security/block-test-expected.txt:
+
2010-11-11 Carol Szabo <carol.szabo at nokia.com>
Reviewed by Kent Tamura.
diff --git a/LayoutTests/platform/mac/security/block-test-expected.txt b/LayoutTests/platform/mac/security/block-test-expected.txt
index 56a5de2..14f074e 100644
--- a/LayoutTests/platform/mac/security/block-test-expected.txt
+++ b/LayoutTests/platform/mac/security/block-test-expected.txt
@@ -1,7 +1,7 @@
http://255.255.255.255:1/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255:1/test.jpg, main document URL block-test.html, http method GET> redirectResponse (null)
<unknown> - didFinishLoading
-http://255.255.255.255:7/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255:7/test.jpg, main document URL block-test.html, http method GET> redirectResponse (null)
http://255.255.255.255:1/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://255.255.255.255:1/test.jpg">
+http://255.255.255.255:7/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255:7/test.jpg, main document URL block-test.html, http method GET> redirectResponse (null)
http://255.255.255.255:7/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://255.255.255.255:7/test.jpg">
http://255.255.255.255:9/test.jpg - willSendRequest <NSURLRequest URL http://255.255.255.255:9/test.jpg, main document URL block-test.html, http method GET> redirectResponse (null)
http://255.255.255.255:9/test.jpg - didFailLoadingWithError: <NSError domain WebKitErrorDomain, code 103, failing URL "http://255.255.255.255:9/test.jpg">
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 4318125..f58b0dc 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,39 @@
+2010-11-11 Nate Chapin <japhet at chromium.org>
+
+ Reviewed by Antti Koivisto.
+
+ Cleanup after http://trac.webkit.org/changeset/71562, namely:
+ Make deferred request handle simpler.
+ Don't perform callbacks associated with network load starting
+ (e.g., willSendRequest) until the load is in fact sent to the network.
+ Make ResourceLoadScheduler a friend of ResourceLoader and make
+ ResourceLoader::start() protected to try to ensure loads actually
+ go through the scheduler.
+ https://bugs.webkit.org/show_bug.cgi?id=49351
+
+ Behavior should be covered by existing tests.
+
+ * loader/NetscapePlugInStreamLoader.cpp:
+ (WebCore::NetscapePlugInStreamLoader::create):
+ * loader/ResourceLoadScheduler.cpp:
+ (WebCore::ResourceLoadScheduler::servePendingRequests):
+ * loader/ResourceLoadScheduler.h:
+ (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
+ * loader/ResourceLoader.cpp:
+ (WebCore::ResourceLoader::init):
+ (WebCore::ResourceLoader::start):
+ (WebCore::ResourceLoader::setDefersLoading):
+ (WebCore::ResourceLoader::didCancel):
+ * loader/ResourceLoader.h:
+ (WebCore::ResourceLoader::reachedTerminalState):
+ (WebCore::ResourceLoader::request):
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::create):
+ * loader/loader.cpp:
+ (WebCore::Loader::load):
+ (WebCore::Loader::willSendRequest):
+ * loader/loader.h:
+
2010-11-11 Carol Szabo <carol.szabo at nokia.com>
Reviewed by Kent Tamura.
diff --git a/WebCore/loader/NetscapePlugInStreamLoader.cpp b/WebCore/loader/NetscapePlugInStreamLoader.cpp
index c9725e9..8c2a426 100644
--- a/WebCore/loader/NetscapePlugInStreamLoader.cpp
+++ b/WebCore/loader/NetscapePlugInStreamLoader.cpp
@@ -49,7 +49,8 @@ PassRefPtr<NetscapePlugInStreamLoader> NetscapePlugInStreamLoader::create(Frame*
RefPtr<NetscapePlugInStreamLoader> loader(adoptRef(new NetscapePlugInStreamLoader(frame, client)));
loader->setShouldBufferData(false);
loader->documentLoader()->addPlugInStreamLoader(loader.get());
- return loader->load(request) ? loader.release() : 0;
+ loader->init(request);
+ return loader.release();
}
bool NetscapePlugInStreamLoader::isDone() const
diff --git a/WebCore/loader/ResourceLoadScheduler.cpp b/WebCore/loader/ResourceLoadScheduler.cpp
index ad04f12..f2bb0b5 100644
--- a/WebCore/loader/ResourceLoadScheduler.cpp
+++ b/WebCore/loader/ResourceLoadScheduler.cpp
@@ -179,7 +179,6 @@ void ResourceLoadScheduler::servePendingRequests(HostInformation* host, Priority
for (int priority = High; priority >= minimumPriority; --priority) {
HostInformation::RequestQueue& requestsPending = host->requestsPending((Priority) priority);
- HostInformation::RequestQueue deferredRequests;
while (!requestsPending.isEmpty()) {
RefPtr<ResourceLoader> resourceLoader = requestsPending.first();
@@ -189,20 +188,14 @@ void ResourceLoadScheduler::servePendingRequests(HostInformation* host, Priority
// and we don't know all stylesheets yet.
Document* document = resourceLoader->frameLoader() ? resourceLoader->frameLoader()->frame()->document() : 0;
bool shouldLimitRequests = !host->name().isNull() || (document && (document->parsing() || !document->haveStylesheetsLoaded()));
- if (shouldLimitRequests && host->limitRequests()) {
- while (!deferredRequests.isEmpty())
- requestsPending.append(deferredRequests.takeFirst());
+ if (shouldLimitRequests && host->limitRequests())
return;
- }
- if (resourceLoader->start())
+ resourceLoader->start();
+ if (!resourceLoader->reachedTerminalState())
host->addLoadInProgress(resourceLoader.get());
- else
- deferredRequests.append(resourceLoader);
requestsPending.removeFirst();
}
-
- requestsPending.swap(deferredRequests);
}
}
@@ -233,29 +226,6 @@ void ResourceLoadScheduler::requestTimerFired(Timer<ResourceLoadScheduler>*)
servePendingRequests();
}
-#ifndef NDEBUG
-void ResourceLoadScheduler::assertLoaderBeingCounted(ResourceLoader* resourceLoader)
-{
- HostInformation* host = hostForURL(resourceLoader->url());
- ASSERT(host);
- host->assertLoaderBeingCounted(resourceLoader);
-}
-
-void ResourceLoadScheduler::HostInformation::assertLoaderBeingCounted(ResourceLoader* resourceLoader)
-{
- // If a load is being started, it should be at the front of the highest priority queue
- // that actually contains a request.
- for (int priority = High; priority >= VeryLow; --priority) {
- if (!m_requestsPending[priority].isEmpty()) {
- ASSERT(m_requestsPending[priority].first().get() == resourceLoader);
- return;
- }
- }
-
- ASSERT_NOT_REACHED();
-}
-#endif
-
ResourceLoadScheduler::HostInformation::HostInformation(const String& name, unsigned maxRequestsInFlight)
: m_name(name)
, m_maxRequestsInFlight(maxRequestsInFlight)
diff --git a/WebCore/loader/ResourceLoadScheduler.h b/WebCore/loader/ResourceLoadScheduler.h
index 511c1a1..11951b4 100644
--- a/WebCore/loader/ResourceLoadScheduler.h
+++ b/WebCore/loader/ResourceLoadScheduler.h
@@ -57,10 +57,6 @@ public:
void servePendingRequests(Priority minimumPriority = VeryLow);
void suspendPendingRequests();
void resumePendingRequests();
-
-#ifndef NDEBUG
- void assertLoaderBeingCounted(ResourceLoader*);
-#endif
private:
ResourceLoadScheduler();
@@ -81,10 +77,6 @@ private:
void remove(ResourceLoader*);
bool hasRequests() const;
bool limitRequests() const { return m_requestsLoading.size() >= m_maxRequestsInFlight; }
-
-#ifndef NDEBUG
- void assertLoaderBeingCounted(ResourceLoader*);
-#endif
typedef Deque<RefPtr<ResourceLoader> > RequestQueue;
RequestQueue& requestsPending(Priority priority) { return m_requestsPending[priority]; }
diff --git a/WebCore/loader/ResourceLoader.cpp b/WebCore/loader/ResourceLoader.cpp
index 56a169b..39288bd 100644
--- a/WebCore/loader/ResourceLoader.cpp
+++ b/WebCore/loader/ResourceLoader.cpp
@@ -110,9 +110,10 @@ void ResourceLoader::releaseResources()
m_deferredRequest = ResourceRequest();
}
-bool ResourceLoader::load(const ResourceRequest& r)
+void ResourceLoader::init(const ResourceRequest& r)
{
ASSERT(!m_handle);
+ ASSERT(m_request.isNull());
ASSERT(m_deferredRequest.isNull());
ASSERT(!m_documentLoader->isSubstituteLoadPending(this));
@@ -128,39 +129,36 @@ bool ResourceLoader::load(const ResourceRequest& r)
clientRequest.setFirstPartyForCookies(document->firstPartyForCookies());
}
- willSendRequest(clientRequest, ResourceResponse());
- if (clientRequest.isNull()) {
- didFail(frameLoader()->cancelledError(r));
- return false;
- }
-
- if (m_defersLoading)
- m_deferredRequest = clientRequest;
-
- return true;
+ m_request = clientRequest;
}
-bool ResourceLoader::start()
+void ResourceLoader::start()
{
ASSERT(!m_handle);
-#ifndef NDEBUG
- resourceLoadScheduler()->assertLoaderBeingCounted(this);
-#endif
+ ASSERT(!m_request.isNull());
+ ASSERT(m_deferredRequest.isNull());
+
+ willSendRequest(m_request, ResourceResponse());
+ if (m_request.isNull()) {
+ didFail(frameLoader()->cancelledError(m_request));
+ return;
+ }
if (m_documentLoader->scheduleArchiveLoad(this, m_request, m_request.url()))
- return true;
+ return;
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
if (m_documentLoader->applicationCacheHost()->maybeLoadResource(this, m_request, m_request.url()))
- return true;
+ return;
#endif
- if (m_defersLoading)
- return false;
+ if (m_defersLoading) {
+ m_deferredRequest = m_request;
+ return;
+ }
if (!m_reachedTerminalState)
m_handle = ResourceHandle::create(m_frame->loader()->networkingContext(), m_request, this, m_defersLoading, m_shouldContentSniff);
- return true;
}
void ResourceLoader::setDefersLoading(bool defers)
@@ -169,9 +167,9 @@ void ResourceLoader::setDefersLoading(bool defers)
if (m_handle)
m_handle->setDefersLoading(defers);
if (!defers && !m_deferredRequest.isNull()) {
- ResourceRequest request(m_deferredRequest);
+ m_request = m_deferredRequest;
m_deferredRequest = ResourceRequest();
- load(request);
+ start();
}
}
@@ -359,7 +357,7 @@ void ResourceLoader::didCancel(const ResourceError& error)
m_handle->cancel();
m_handle = 0;
}
- if (m_sendResourceLoadCallbacks && !m_calledDidFinishLoad)
+ if (m_sendResourceLoadCallbacks && m_identifier && !m_calledDidFinishLoad)
frameLoader()->notifier()->didFailToLoad(this, error);
releaseResources();
diff --git a/WebCore/loader/ResourceLoader.h b/WebCore/loader/ResourceLoader.h
index 9b69ccd..34cdd97 100644
--- a/WebCore/loader/ResourceLoader.h
+++ b/WebCore/loader/ResourceLoader.h
@@ -54,7 +54,7 @@ namespace WebCore {
void cancel();
- virtual bool load(const ResourceRequest&);
+ virtual void init(const ResourceRequest&);
FrameLoader* frameLoader() const;
DocumentLoader* documentLoader() const { return m_documentLoader.get(); }
@@ -126,8 +126,7 @@ namespace WebCore {
ResourceHandle* handle() const { return m_handle.get(); }
bool sendResourceLoadCallbacks() const { return m_sendResourceLoadCallbacks; }
- // Called by ResourceLoadScheduler to create a ResourceHandle and actually begin the load.
- bool start();
+ bool reachedTerminalState() const { return m_reachedTerminalState; }
void setShouldBufferData(bool shouldBufferData);
@@ -137,12 +136,15 @@ namespace WebCore {
#if ENABLE(OFFLINE_WEB_APPLICATIONS)
friend class ApplicationCacheHost; // for access to request()
#endif
-
+ friend class ResourceLoadScheduler; // for access to start()
+ // start() actually sends the load to the network (unless the load is being
+ // deferred) and should only be called by ResourceLoadScheduler or setDefersLoading().
+ void start();
+
virtual void didCancel(const ResourceError&);
void didFinishLoadingOnePart(double finishTime);
const ResourceRequest& request() const { return m_request; }
- bool reachedTerminalState() const { return m_reachedTerminalState; }
bool cancelled() const { return m_cancelled; }
bool defersLoading() const { return m_defersLoading; }
diff --git a/WebCore/loader/SubresourceLoader.cpp b/WebCore/loader/SubresourceLoader.cpp
index 7e1ea8b..e99e0e6 100644
--- a/WebCore/loader/SubresourceLoader.cpp
+++ b/WebCore/loader/SubresourceLoader.cpp
@@ -86,8 +86,7 @@ PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, Subresourc
RefPtr<SubresourceLoader> subloader(adoptRef(new SubresourceLoader(frame, client, sendResourceLoadCallbacks, shouldContentSniff)));
subloader->documentLoader()->addSubresourceLoader(subloader.get());
- if (!subloader->load(newRequest))
- return 0;
+ subloader->init(newRequest);
return subloader.release();
}
diff --git a/WebCore/loader/loader.cpp b/WebCore/loader/loader.cpp
index 05ad7db..3b9af7a 100644
--- a/WebCore/loader/loader.cpp
+++ b/WebCore/loader/loader.cpp
@@ -130,11 +130,10 @@ void Loader::load(CachedResourceLoader* cachedResourceLoader, CachedResource* re
RefPtr<SubresourceLoader> loader = resourceLoadScheduler()->scheduleSubresourceLoad(cachedResourceLoader->document()->frame(),
this, resourceRequest, determinePriority(resource), request->shouldDoSecurityCheck(), request->sendResourceLoadCallbacks());
- if (loader) {
+ if (loader && !loader->reachedTerminalState())
m_requestsLoading.add(loader.release(), request);
- request->cachedResource()->setRequestedFromNetworkingLayer();
- } else {
- // FIXME: What if resources in other frames were waiting for this revalidation?
+ else {
+ // FIXME: What if resources in other frames were waiting for this revalidation?
LOG(ResourceLoading, "Cannot start loading '%s'", request->cachedResource()->url().latin1().data());
cachedResourceLoader->decrementRequestCount(request->cachedResource());
cachedResourceLoader->setLoadInProgress(true);
@@ -164,6 +163,16 @@ void Loader::cancelRequests(CachedResourceLoader* cachedResourceLoader)
}
}
+void Loader::willSendRequest(SubresourceLoader* loader, ResourceRequest&, const ResourceResponse&)
+{
+ RequestMap::iterator i = m_requestsLoading.find(loader);
+ if (i == m_requestsLoading.end())
+ return;
+
+ Request* request = i->second;
+ request->cachedResource()->setRequestedFromNetworkingLayer();
+}
+
void Loader::didFinishLoading(SubresourceLoader* loader)
{
RequestMap::iterator i = m_requestsLoading.find(loader);
diff --git a/WebCore/loader/loader.h b/WebCore/loader/loader.h
index 36c8ed3..818f56f 100644
--- a/WebCore/loader/loader.h
+++ b/WebCore/loader/loader.h
@@ -43,6 +43,7 @@ namespace WebCore {
void cancelRequests(CachedResourceLoader*);
private:
+ virtual void willSendRequest(SubresourceLoader*, ResourceRequest&, const ResourceResponse&);
virtual void didReceiveResponse(SubresourceLoader*, const ResourceResponse&);
virtual void didReceiveData(SubresourceLoader*, const char*, int);
virtual void didReceiveCachedMetadata(SubresourceLoader*, const char*, int);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list