Diff
Modified: trunk/Source/WebKit2/ChangeLog (134639 => 134640)
--- trunk/Source/WebKit2/ChangeLog 2012-11-14 19:43:05 UTC (rev 134639)
+++ trunk/Source/WebKit2/ChangeLog 2012-11-14 19:43:42 UTC (rev 134640)
@@ -1,5 +1,43 @@
2012-11-14 Brady Eidson <[email protected]>
+ Part of "Move loading responsibility out of WebResourceLoadScheduler into a new WebResourceLoader"
+ https://bugs.webkit.org/show_bug.cgi?id=102259
+
+ Reviewed by Alexey Proskuryakov.
+
+ WebResourceLoadScheduler has taken on too many responsibilities that shouldn't belong to it.
+
+ We should create a WebResourceLoader that will eventually act as an intermediary between
+ WebCore::ResourceLoader and NetworkResourceLoader.
+
+ This patch is prep-work: It adds a new skeleton class to the WebProcess.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+
+ Add the new WebResourceLoader class which is a very thin skeleton for now:
+ * WebProcess/Network/WebResourceLoader.cpp: Added.
+ (WebKit::WebResourceLoader::create):
+ (WebKit::WebResourceLoader::WebResourceLoader):
+ (WebKit::WebResourceLoader::~WebResourceLoader):
+ * WebProcess/Network/WebResourceLoader.h: Added.
+ (WebKit::WebResourceLoader::coreLoader):
+
+ Adapt WebResourceLoadScheduler to use this new class where appropriate:
+ * WebProcess/Network/WebResourceLoadScheduler.cpp:
+ (WebKit::WebResourceLoadScheduler::scheduleLoad):
+ (WebKit::WebResourceLoadScheduler::addMainResourceLoad):
+ (WebKit::WebResourceLoadScheduler::remove):
+ (WebKit::WebResourceLoadScheduler::willSendRequest):
+ (WebKit::WebResourceLoadScheduler::didReceiveResponse):
+ (WebKit::WebResourceLoadScheduler::didReceiveData):
+ (WebKit::WebResourceLoadScheduler::didFinishResourceLoad):
+ (WebKit::WebResourceLoadScheduler::didReceiveResource):
+ (WebKit::WebResourceLoadScheduler::didFailResourceLoad):
+ * WebProcess/Network/WebResourceLoadScheduler.h:
+
+
+2012-11-14 Brady Eidson <[email protected]>
+
Deliver data from NetworkProcess to resources progressively.
https://bugs.webkit.org/show_bug.cgi?id=102171
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (134639 => 134640)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2012-11-14 19:43:05 UTC (rev 134639)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2012-11-14 19:43:42 UTC (rev 134640)
@@ -370,6 +370,8 @@
51021E9C12B16788005C033C /* WebContextMenuClientMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51021E9B12B16788005C033C /* WebContextMenuClientMac.mm */; };
5105B0DD162F7E9D00E27709 /* NetworkProcessManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5105B0DB162F7E9D00E27709 /* NetworkProcessManager.cpp */; };
5105B0DE162F7E9D00E27709 /* NetworkProcessManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5105B0DC162F7E9D00E27709 /* NetworkProcessManager.h */; };
+ 510AFFB916542048001BA05E /* WebResourceLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510AFFB716542048001BA05E /* WebResourceLoader.cpp */; };
+ 510AFFBA16542048001BA05E /* WebResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 510AFFB816542048001BA05E /* WebResourceLoader.h */; };
510CC8491613C85C00D03ED3 /* NetworkProcess.app in CopyFiles */ = {isa = PBXBuildFile; fileRef = 510CC80E1613C79900D03ED3 /* NetworkProcess.app */; };
510CC84F1613C92C00D03ED3 /* MainMacProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A6FA31011E3921E00DB1371 /* MainMacProcess.cpp */; };
510FBB9A1288C95E00AFFDF4 /* WebContextMenuItemData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510FBB981288C95E00AFFDF4 /* WebContextMenuItemData.cpp */; };
@@ -1587,6 +1589,8 @@
5105B0DB162F7E9D00E27709 /* NetworkProcessManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkProcessManager.cpp; sourceTree = "<group>"; };
5105B0DC162F7E9D00E27709 /* NetworkProcessManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkProcessManager.h; sourceTree = "<group>"; };
5105B0F31630872E00E27709 /* NetworkProcessProxy.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = NetworkProcessProxy.messages.in; sourceTree = "<group>"; };
+ 510AFFB716542048001BA05E /* WebResourceLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebResourceLoader.cpp; path = Network/WebResourceLoader.cpp; sourceTree = "<group>"; };
+ 510AFFB816542048001BA05E /* WebResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebResourceLoader.h; path = Network/WebResourceLoader.h; sourceTree = "<group>"; };
510CC7DD16138E2900D03ED3 /* NetworkProcessMainMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NetworkProcessMainMac.mm; sourceTree = "<group>"; };
510CC7DF16138E2900D03ED3 /* NetworkProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcess.cpp; path = NetworkProcess/NetworkProcess.cpp; sourceTree = "<group>"; };
510CC7E016138E2900D03ED3 /* NetworkProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkProcess.h; path = NetworkProcess/NetworkProcess.h; sourceTree = "<group>"; };
@@ -3052,6 +3056,8 @@
51FB0902163A3B1C00EC324A /* NetworkProcessConnection.messages.in */,
51ABF65616392F1500132A7A /* WebResourceLoadScheduler.cpp */,
51ABF65716392F1500132A7A /* WebResourceLoadScheduler.h */,
+ 510AFFB716542048001BA05E /* WebResourceLoader.cpp */,
+ 510AFFB816542048001BA05E /* WebResourceLoader.h */,
);
name = Network;
sourceTree = "<group>";
@@ -4908,6 +4914,7 @@
1AA3D7621651B7D3008713D0 /* RemoteLayerTreeHostMessages.h in Headers */,
51FD18B61651FBAD00DBE1CE /* NetworkResourceLoader.h in Headers */,
51CBBA10165219B6005BE8FD /* NetworkResourceLoadParameters.h in Headers */,
+ 510AFFBA16542048001BA05E /* WebResourceLoader.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -5854,6 +5861,7 @@
1AA3D7611651B7D3008713D0 /* RemoteLayerTreeHostMessageReceiver.cpp in Sources */,
51FD18B51651FBAD00DBE1CE /* NetworkResourceLoader.cpp in Sources */,
51CBBA0F165219B6005BE8FD /* NetworkResourceLoadParameters.cpp in Sources */,
+ 510AFFB916542048001BA05E /* WebResourceLoader.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp (134639 => 134640)
--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp 2012-11-14 19:43:05 UTC (rev 134639)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp 2012-11-14 19:43:42 UTC (rev 134640)
@@ -32,6 +32,7 @@
#include "NetworkResourceLoadParameters.h"
#include "WebCoreArgumentCoders.h"
#include "WebProcess.h"
+#include "WebResourceLoader.h"
#include <WebCore/DocumentLoader.h>
#include <WebCore/Frame.h>
#include <WebCore/FrameLoader.h>
@@ -103,7 +104,7 @@
}
resourceLoader->setIdentifier(identifier);
- m_pendingResourceLoaders.set(identifier, resourceLoader);
+ m_webResourceLoaders.set(identifier, WebResourceLoader::create(identifier, resourceLoader));
notifyDidScheduleResourceRequest(resourceLoader);
}
@@ -121,7 +122,7 @@
resourceLoader->setIdentifier(identifier);
- m_activeResourceLoaders.set(identifier, resourceLoader);
+ m_coreResourceLoaders.set(identifier, resourceLoader);
}
void WebResourceLoadScheduler::remove(ResourceLoader* resourceLoader)
@@ -144,9 +145,9 @@
// If a resource load was actually started within the NetworkProcess then the NetworkProcess handles clearing out the identifier.
WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::RemoveLoadIdentifier(identifier), 0);
- ASSERT(m_pendingResourceLoaders.contains(identifier) || m_activeResourceLoaders.contains(identifier));
- m_pendingResourceLoaders.remove(identifier);
- m_activeResourceLoaders.remove(identifier);
+ ASSERT(m_webResourceLoaders.contains(identifier) || m_coreResourceLoaders.contains(identifier));
+ m_webResourceLoaders.remove(identifier);
+ m_coreResourceLoaders.remove(identifier);
}
void WebResourceLoadScheduler::crossOriginRedirectReceived(ResourceLoader*, const KURL&)
@@ -189,7 +190,7 @@
void WebResourceLoadScheduler::willSendRequest(ResourceLoadIdentifier identifier, WebCore::ResourceRequest& request, const WebCore::ResourceResponse& redirectResponse)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::willSendRequest to '%s'", request.url().string().utf8().data());
@@ -198,7 +199,7 @@
void WebResourceLoadScheduler::didReceiveResponse(ResourceLoadIdentifier identifier, const WebCore::ResourceResponse& response)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::didReceiveResponse for '%s'", loader->url().string().utf8().data());
@@ -207,7 +208,7 @@
void WebResourceLoadScheduler::didReceiveData(ResourceLoadIdentifier identifier, const char* data, int size, int64_t encodedDataLength, bool allAtOnce)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::didReceiveData of size %i for '%s'", size, loader->url().string().utf8().data());
@@ -216,7 +217,7 @@
void WebResourceLoadScheduler::didFinishResourceLoad(ResourceLoadIdentifier identifier, double finishTime)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::didFinishResourceLoad for '%s'", loader->url().string().utf8().data());
@@ -225,7 +226,7 @@
void WebResourceLoadScheduler::didReceiveResource(ResourceLoadIdentifier identifier, const ResourceBuffer& buffer, double finishTime)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::didReceiveResource for '%s'", loader->url().string().utf8().data());
@@ -242,7 +243,7 @@
void WebResourceLoadScheduler::didFailResourceLoad(ResourceLoadIdentifier identifier, const WebCore::ResourceError& error)
{
- RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.get(identifier);
+ RefPtr<ResourceLoader> loader = m_webResourceLoaders.get(identifier)->coreLoader();
ASSERT(loader);
LOG(Network, "(WebProcess) WebResourceLoadScheduler::didFailResourceLoad for '%s'", loader->url().string().utf8().data());
Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h (134639 => 134640)
--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h 2012-11-14 19:43:05 UTC (rev 134639)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h 2012-11-14 19:43:42 UTC (rev 134640)
@@ -35,6 +35,7 @@
namespace WebKit {
class NetworkProcessConnection;
+class WebResourceLoader;
typedef uint64_t ResourceLoadIdentifier;
class WebResourceLoadScheduler : public WebCore::ResourceLoadScheduler {
@@ -69,9 +70,8 @@
private:
void scheduleLoad(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority);
- typedef HashMap<unsigned long, RefPtr<WebCore::ResourceLoader> > ResourceLoaderMap;
- ResourceLoaderMap m_pendingResourceLoaders;
- ResourceLoaderMap m_activeResourceLoaders;
+ HashMap<unsigned long, RefPtr<WebCore::ResourceLoader> > m_coreResourceLoaders;
+ HashMap<unsigned long, RefPtr<WebResourceLoader> > m_webResourceLoaders;
unsigned m_suspendPendingRequestsCount;
Added: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (0 => 134640)
--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (rev 0)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp 2012-11-14 19:43:42 UTC (rev 134640)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebResourceLoader.h"
+
+#if ENABLE(NETWORK_PROCESS)
+
+#include <WebCore/ResourceLoader.h>
+
+using namespace WebCore;
+
+namespace WebKit {
+
+PassRefPtr<WebResourceLoader> WebResourceLoader::create(ResourceLoadIdentifier identifier, PassRefPtr<ResourceLoader> coreLoader)
+{
+ return adoptRef(new WebResourceLoader(identifier, coreLoader));
+}
+
+WebResourceLoader::WebResourceLoader(ResourceLoadIdentifier identifier, PassRefPtr<WebCore::ResourceLoader> coreLoader)
+ : m_resourceLoadIdentifier(identifier)
+ , m_coreLoader(coreLoader)
+{
+}
+
+WebResourceLoader::~WebResourceLoader()
+{
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(NETWORK_PROCESS)
Added: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h (0 => 134640)
--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h (rev 0)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h 2012-11-14 19:43:42 UTC (rev 134640)
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebResourceLoader_h
+#define WebResourceLoader_h
+
+#if ENABLE(NETWORK_PROCESS)
+
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore {
+class ResourceLoader;
+}
+
+namespace WebKit {
+
+typedef uint64_t ResourceLoadIdentifier;
+
+class WebResourceLoader : public RefCounted<WebResourceLoader> {
+public:
+ static PassRefPtr<WebResourceLoader> create(ResourceLoadIdentifier, PassRefPtr<WebCore::ResourceLoader>);
+
+ ~WebResourceLoader();
+
+ WebCore::ResourceLoader* coreLoader() const { return m_coreLoader.get(); }
+
+private:
+ WebResourceLoader(ResourceLoadIdentifier, PassRefPtr<WebCore::ResourceLoader>);
+
+ ResourceLoadIdentifier m_resourceLoadIdentifier;
+ RefPtr<WebCore::ResourceLoader> m_coreLoader;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(NETWORK_PROCESS)
+
+#endif // WebResourceLoader_h