Diff
Modified: trunk/Source/WebKit2/ChangeLog (140037 => 140038)
--- trunk/Source/WebKit2/ChangeLog 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/ChangeLog 2013-01-17 21:55:47 UTC (rev 140038)
@@ -1,3 +1,32 @@
+2013-01-17 Brady Eidson <beid...@apple.com>
+
+ Each NetworkConnectionToWebProcess should keep its own map of NetworkResourceLoaders
+ https://bugs.webkit.org/show_bug.cgi?id=107166
+
+ Reviewed by Alexey Proskuryakov.
+
+ NetworkConnectionToWebProcess now keeps its own id->loader map so it can directly address them as needed:
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
+ (WebKit::NetworkConnectionToWebProcess::didReceiveMessage):
+ (WebKit::NetworkConnectionToWebProcess::didClose):
+ (WebKit::NetworkConnectionToWebProcess::scheduleResourceLoad):
+ (WebKit::NetworkConnectionToWebProcess::removeLoadIdentifier):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+
+ NetworkResourceLoadScheduler no longer keeps an identifier -> loader map:
+ * NetworkProcess/NetworkResourceLoadScheduler.cpp:
+ (WebKit::NetworkResourceLoadScheduler::scheduleResourceLoad):
+ (WebKit::NetworkResourceLoadScheduler::removeLoadIdentifier):
+ * NetworkProcess/NetworkResourceLoadScheduler.h:
+
+ There is no longer such a thing as NetworkConnectionToWebProcessObserver:
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ (WebKit::NetworkResourceLoader::NetworkResourceLoader):
+ (WebKit::NetworkResourceLoader::~NetworkResourceLoader):
+ (WebKit::NetworkResourceLoader::connectionToWebProcessDidClose):
+ * NetworkProcess/NetworkResourceLoader.h:
+
2013-01-17 Tim Horton <timothy_hor...@apple.com>
Remove an incorrect ASSERT() after r140002.
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2013-01-17 21:55:47 UTC (rev 140038)
@@ -57,20 +57,7 @@
NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess()
{
- ASSERT(m_observers.isEmpty());
}
-
-void NetworkConnectionToWebProcess::registerObserver(NetworkConnectionToWebProcessObserver* observer)
-{
- ASSERT(!m_observers.contains(observer));
- m_observers.add(observer);
-}
-
-void NetworkConnectionToWebProcess::unregisterObserver(NetworkConnectionToWebProcessObserver* observer)
-{
- ASSERT(m_observers.contains(observer));
- m_observers.remove(observer);
-}
void NetworkConnectionToWebProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder)
{
@@ -80,7 +67,7 @@
}
if (messageID.is<CoreIPC::MessageClassNetworkResourceLoader>()) {
- NetworkResourceLoader* loader = NetworkProcess::shared().networkResourceLoadScheduler().networkResourceLoaderForIdentifier(decoder.destinationID());
+ NetworkResourceLoader* loader = m_resourceLoaders.get(decoder.destinationID()).get();
if (loader)
loader->didReceiveNetworkResourceLoaderMessage(connection, messageID, decoder);
return;
@@ -101,15 +88,12 @@
{
// Protect ourself as we might be otherwise be deleted during this function.
RefPtr<NetworkConnectionToWebProcess> protector(this);
-
- NetworkProcess::shared().removeNetworkConnectionToWebProcess(this);
- Vector<NetworkConnectionToWebProcessObserver*> observers;
- copyToVector(m_observers, observers);
- for (size_t i = 0; i < observers.size(); ++i)
- observers[i]->connectionToWebProcessDidClose(this);
-
- // The object may be destroyed now.
+ HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader> >::iterator end = m_resourceLoaders.end();
+ for (HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader> >::iterator i = m_resourceLoaders.begin(); i != end; ++i)
+ i->value->connectionToWebProcessDidClose();
+
+ m_resourceLoaders.clear();
}
void NetworkConnectionToWebProcess::didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::StringReference, CoreIPC::StringReference)
@@ -118,7 +102,9 @@
void NetworkConnectionToWebProcess::scheduleResourceLoad(const NetworkResourceLoadParameters& loadParameters, ResourceLoadIdentifier& resourceLoadIdentifier)
{
- resourceLoadIdentifier = NetworkProcess::shared().networkResourceLoadScheduler().scheduleResourceLoad(loadParameters, this);
+ RefPtr<NetworkResourceLoader> loader = NetworkProcess::shared().networkResourceLoadScheduler().scheduleResourceLoad(loadParameters, this);
+ resourceLoadIdentifier = loader->identifier();
+ m_resourceLoaders.add(resourceLoadIdentifier, loader);
}
void NetworkConnectionToWebProcess::performSynchronousLoad(const NetworkResourceLoadParameters& loadParameters, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> reply)
@@ -129,6 +115,7 @@
void NetworkConnectionToWebProcess::removeLoadIdentifier(ResourceLoadIdentifier identifier)
{
NetworkProcess::shared().networkResourceLoadScheduler().removeLoadIdentifier(identifier);
+ m_resourceLoaders.remove(identifier);
}
void NetworkConnectionToWebProcess::servePendingRequests(uint32_t resourceLoadPriority)
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2013-01-17 21:55:47 UTC (rev 140038)
@@ -42,23 +42,15 @@
namespace WebKit {
class NetworkConnectionToWebProcess;
+class NetworkResourceLoader;
typedef uint64_t ResourceLoadIdentifier;
-class NetworkConnectionToWebProcessObserver {
-public:
- virtual ~NetworkConnectionToWebProcessObserver() { }
- virtual void connectionToWebProcessDidClose(NetworkConnectionToWebProcess*) = 0;
-};
-
class NetworkConnectionToWebProcess : public RefCounted<NetworkConnectionToWebProcess>, CoreIPC::Connection::Client {
public:
static PassRefPtr<NetworkConnectionToWebProcess> create(CoreIPC::Connection::Identifier);
virtual ~NetworkConnectionToWebProcess();
CoreIPC::Connection* connection() const { return m_connection.get(); }
-
- void registerObserver(NetworkConnectionToWebProcessObserver*);
- void unregisterObserver(NetworkConnectionToWebProcessObserver*);
bool isSerialLoadingEnabled() const { return m_serialLoadingEnabled; }
@@ -91,9 +83,9 @@
void deleteCookie(bool privateBrowsingEnabled, const WebCore::KURL&, const String& cookieName);
RefPtr<CoreIPC::Connection> m_connection;
-
- HashSet<NetworkConnectionToWebProcessObserver*> m_observers;
+ HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader> > m_resourceLoaders;
+
bool m_serialLoadingEnabled;
};
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.cpp 2013-01-17 21:55:47 UTC (rev 140038)
@@ -40,7 +40,7 @@
servePendingRequests();
}
-ResourceLoadIdentifier NetworkResourceLoadScheduler::scheduleResourceLoad(const NetworkResourceLoadParameters& loadParameters, NetworkConnectionToWebProcess* connection)
+PassRefPtr<NetworkResourceLoader> NetworkResourceLoadScheduler::scheduleResourceLoad(const NetworkResourceLoadParameters& loadParameters, NetworkConnectionToWebProcess* connection)
{
ResourceLoadPriority priority = loadParameters.priority();
const ResourceRequest& resourceRequest = loadParameters.request();
@@ -48,8 +48,6 @@
ResourceLoadIdentifier identifier = ++s_currentResourceLoadIdentifier;
RefPtr<NetworkResourceLoader> loader = NetworkResourceLoader::create(loadParameters, identifier, connection);
- m_resourceLoaders.add(identifier, loader);
-
LOG(NetworkScheduling, "(NetworkProcess) NetworkResourceLoadScheduler::scheduleNetworkResourceRequest resource %llu '%s'", identifier, resourceRequest.url().string().utf8().data());
HostRecord* host = hostForURL(resourceRequest.url(), CreateIfNotFound);
@@ -60,12 +58,12 @@
if (priority > ResourceLoadPriorityLow || !resourceRequest.url().protocolIsInHTTPFamily() || (priority == ResourceLoadPriorityLow && !hadRequests)) {
// Try to request important resources immediately.
servePendingRequestsForHost(host, priority);
- return identifier;
+ return loader;
}
// Handle asynchronously so early low priority requests don't get scheduled before later high priority ones.
scheduleServePendingRequests();
- return identifier;
+ return loader;
}
void NetworkResourceLoadScheduler::scheduleSyncNetworkResourceLoader(PassRefPtr<SyncNetworkResourceLoader> loader)
@@ -132,18 +130,10 @@
// In this situation we might not have a HostRecord to clean up.
if (host)
host->remove(identifier);
-
- m_resourceLoaders.remove(identifier);
scheduleServePendingRequests();
}
-NetworkResourceLoader* NetworkResourceLoadScheduler::networkResourceLoaderForIdentifier(ResourceLoadIdentifier identifier)
-{
- ASSERT(m_resourceLoaders.get(identifier));
- return m_resourceLoaders.get(identifier).get();
-}
-
void NetworkResourceLoadScheduler::receivedRedirect(ResourceLoadIdentifier identifier, const WebCore::KURL& redirectURL)
{
ASSERT(isMainThread());
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoadScheduler.h 2013-01-17 21:55:47 UTC (rev 140038)
@@ -49,7 +49,7 @@
NetworkResourceLoadScheduler();
// Adds the request to the queue for its host and create a unique identifier for it.
- ResourceLoadIdentifier scheduleResourceLoad(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*);
+ PassRefPtr<NetworkResourceLoader> scheduleResourceLoad(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*);
// Adds a synchronous request to the synchronous request queue for its host.
void scheduleSyncNetworkResourceLoader(PassRefPtr<SyncNetworkResourceLoader>);
@@ -66,8 +66,6 @@
void receivedRedirect(ResourceLoadIdentifier, const WebCore::KURL& redirectURL);
void servePendingRequests(WebCore::ResourceLoadPriority = WebCore::ResourceLoadPriorityVeryLow);
- NetworkResourceLoader* networkResourceLoaderForIdentifier(ResourceLoadIdentifier);
-
private:
enum CreateHostPolicy {
CreateIfNotFound,
@@ -86,8 +84,6 @@
static void removeScheduledLoadIdentifiers(void* context);
void removeScheduledLoadIdentifiers();
- HashMap<ResourceLoadIdentifier, RefPtr<NetworkResourceLoader> > m_resourceLoaders;
-
typedef HashMap<String, HostRecord*, StringHash> HostMap;
HostMap m_hosts;
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp 2013-01-17 21:55:47 UTC (rev 140038)
@@ -53,15 +53,11 @@
, m_connection(connection)
{
ASSERT(isMainThread());
- connection->registerObserver(this);
}
NetworkResourceLoader::~NetworkResourceLoader()
{
ASSERT(isMainThread());
-
- if (m_connection)
- m_connection->unregisterObserver(this);
}
CoreIPC::Connection* NetworkResourceLoader::connection() const
@@ -141,9 +137,8 @@
deref();
}
-void NetworkResourceLoader::connectionToWebProcessDidClose(NetworkConnectionToWebProcess* connection)
+void NetworkResourceLoader::connectionToWebProcessDidClose()
{
- ASSERT_ARG(connection, connection == m_connection.get());
// FIXME (NetworkProcess): Cancel the load. The request may be long-living, so we don't want it to linger around after all clients are gone.
}
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (140037 => 140038)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h 2013-01-17 21:50:50 UTC (rev 140037)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h 2013-01-17 21:55:47 UTC (rev 140038)
@@ -46,7 +46,7 @@
class RemoteNetworkingContext;
typedef uint64_t ResourceLoadIdentifier;
-class NetworkResourceLoader : public RefCounted<NetworkResourceLoader>, public NetworkConnectionToWebProcessObserver, public WebCore::ResourceHandleClient, public CoreIPC::MessageSender<NetworkResourceLoader> {
+class NetworkResourceLoader : public RefCounted<NetworkResourceLoader>, public WebCore::ResourceHandleClient, public CoreIPC::MessageSender<NetworkResourceLoader> {
public:
static RefPtr<NetworkResourceLoader> create(const NetworkResourceLoadParameters& parameters, ResourceLoadIdentifier identifier, NetworkConnectionToWebProcess* connection)
{
@@ -63,7 +63,7 @@
void start();
- virtual void connectionToWebProcessDidClose(NetworkConnectionToWebProcess*) OVERRIDE;
+ void connectionToWebProcessDidClose();
ResourceLoadIdentifier identifier() const { return m_identifier; }
WebCore::ResourceLoadPriority priority() const;