Title: [140038] trunk/Source/WebKit2
Revision
140038
Author
beid...@apple.com
Date
2013-01-17 13:55:47 -0800 (Thu, 17 Jan 2013)

Log Message

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:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to