Title: [141824] trunk/Source/WebKit2
Revision
141824
Author
[email protected]
Date
2013-02-04 15:24:31 -0800 (Mon, 04 Feb 2013)

Log Message

WebProcess crashes handling repeated NetworkProcess crashes.
<rdar://problem/13049867> and https://bugs.webkit.org/show_bug.cgi?id=108861

Reviewed by Alexey Proskuryakov.

- Rename the concept of "unschedulable loader" to "internally failed loader"
- When the NetworkProcess crashes, add all outstanding ResourceLoaders into the unschedulable pile.
* WebProcess/Network/WebResourceLoadScheduler.cpp:
(WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
(WebKit::WebResourceLoadScheduler::scheduleLoad):
(WebKit::WebResourceLoadScheduler::scheduleInternallyFailedLoad):
(WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired):
(WebKit::WebResourceLoadScheduler::remove): Also remove a non-helpful, out of date comment.
(WebKit::WebResourceLoadScheduler::networkProcessCrashed):
* WebProcess/Network/WebResourceLoadScheduler.h:

WebResourceLoader no longer responds to crashes directly, but now exposes its WebCore ResourceLoader:
* WebProcess/Network/WebResourceLoader.cpp:
* WebProcess/Network/WebResourceLoader.h:
(WebKit::WebResourceLoader::resourceLoader):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (141823 => 141824)


--- trunk/Source/WebKit2/ChangeLog	2013-02-04 23:23:56 UTC (rev 141823)
+++ trunk/Source/WebKit2/ChangeLog	2013-02-04 23:24:31 UTC (rev 141824)
@@ -1,3 +1,26 @@
+2013-02-04  Brady Eidson  <[email protected]>
+
+        WebProcess crashes handling repeated NetworkProcess crashes.
+        <rdar://problem/13049867> and https://bugs.webkit.org/show_bug.cgi?id=108861
+
+        Reviewed by Alexey Proskuryakov.
+
+        - Rename the concept of "unschedulable loader" to "internally failed loader"
+        - When the NetworkProcess crashes, add all outstanding ResourceLoaders into the unschedulable pile.
+        * WebProcess/Network/WebResourceLoadScheduler.cpp:
+        (WebKit::WebResourceLoadScheduler::WebResourceLoadScheduler):
+        (WebKit::WebResourceLoadScheduler::scheduleLoad):
+        (WebKit::WebResourceLoadScheduler::scheduleInternallyFailedLoad):
+        (WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired):
+        (WebKit::WebResourceLoadScheduler::remove): Also remove a non-helpful, out of date comment.
+        (WebKit::WebResourceLoadScheduler::networkProcessCrashed):
+        * WebProcess/Network/WebResourceLoadScheduler.h:
+
+        WebResourceLoader no longer responds to crashes directly, but now exposes its WebCore ResourceLoader:
+        * WebProcess/Network/WebResourceLoader.cpp:
+        * WebProcess/Network/WebResourceLoader.h:
+        (WebKit::WebResourceLoader::resourceLoader):
+
 2013-02-04  Anders Carlsson  <[email protected]>
 
         Update message generation to use the new queue client semantics

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp (141823 => 141824)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp	2013-02-04 23:23:56 UTC (rev 141823)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.cpp	2013-02-04 23:24:31 UTC (rev 141824)
@@ -54,7 +54,7 @@
 namespace WebKit {
 
 WebResourceLoadScheduler::WebResourceLoadScheduler()
-    : m_unschedulableLoadTimer(RunLoop::main(), this, &WebResourceLoadScheduler::unscheduledLoadTimerFired)
+    : m_internallyFailedLoadTimer(RunLoop::main(), this, &WebResourceLoadScheduler::internallyFailedLoadTimerFired)
     , m_suspendPendingRequestsCount(0)
 {
 }
@@ -109,7 +109,7 @@
     if (!WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad(loadParameters), 0)) {
         // We probably failed to schedule this load with the NetworkProcess because it had crashed.
         // This load will never succeed so we will schedule it to fail asynchronously.
-        addUnschedulableLoad(resourceLoader);
+        scheduleInternallyFailedLoad(resourceLoader);
         return;
     }
     
@@ -118,19 +118,19 @@
     notifyDidScheduleResourceRequest(resourceLoader);
 }
 
-void WebResourceLoadScheduler::addUnschedulableLoad(WebCore::ResourceLoader* resourceLoader)
+void WebResourceLoadScheduler::scheduleInternallyFailedLoad(WebCore::ResourceLoader* resourceLoader)
 {
-    m_unschedulableResourceLoaders.add(resourceLoader);
-    m_unschedulableLoadTimer.startOneShot(0);
+    m_internallyFailedResourceLoaders.add(resourceLoader);
+    m_internallyFailedLoadTimer.startOneShot(0);
 }
 
-void WebResourceLoadScheduler::unscheduledLoadTimerFired()
+void WebResourceLoadScheduler::internallyFailedLoadTimerFired()
 {
-    Vector<RefPtr<ResourceLoader> > unschedulableLoaders;
-    copyToVector(m_unschedulableResourceLoaders, unschedulableLoaders);
+    Vector<RefPtr<ResourceLoader> > internallyFailedResourceLoaders;
+    copyToVector(m_internallyFailedResourceLoaders, internallyFailedResourceLoaders);
     
-    for (size_t i = 0; i < unschedulableLoaders.size(); ++i)
-        unschedulableLoaders[i]->didFail(internalError(unschedulableLoaders[i]->url()));
+    for (size_t i = 0; i < internallyFailedResourceLoaders.size(); ++i)
+        internallyFailedResourceLoaders[i]->didFail(internalError(internallyFailedResourceLoaders[i]->url()));
 }
 
 void WebResourceLoadScheduler::remove(ResourceLoader* resourceLoader)
@@ -138,15 +138,10 @@
     ASSERT(resourceLoader);
     LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::remove, url '%s'", resourceLoader->url().string().utf8().data());
 
-    if (m_unschedulableResourceLoaders.contains(resourceLoader)) {
-        m_unschedulableResourceLoaders.remove(resourceLoader);
+    if (m_internallyFailedResourceLoaders.contains(resourceLoader)) {
+        m_internallyFailedResourceLoaders.remove(resourceLoader);
         return;
     }
-
-    // FIXME (NetworkProcess): It's possible for a resourceLoader to be removed before it ever started,
-    // meaning before it even has an identifier.
-    // We should make this not be possible.
-    // The ResourceLoader code path should always for an identifier to ResourceLoaders.
     
     ResourceLoadIdentifier identifier = resourceLoader->identifier();
     if (!identifier) {
@@ -198,13 +193,11 @@
 
 void WebResourceLoadScheduler::networkProcessCrashed()
 {
-    Vector<RefPtr<WebResourceLoader> > webResourceLoaders;
-    copyValuesToVector(m_webResourceLoaders, webResourceLoaders);
-    
-    for (size_t i = 0; i < webResourceLoaders.size(); ++i)
-        webResourceLoaders[i]->networkProcessCrashed();
+    HashMap<unsigned long, RefPtr<WebResourceLoader> >::iterator end = m_webResourceLoaders.end();
+    for (HashMap<unsigned long, RefPtr<WebResourceLoader> >::iterator i = m_webResourceLoaders.begin(); i != end; ++i)
+        scheduleInternallyFailedLoad(i->value.get()->resourceLoader());
 
-    ASSERT(m_webResourceLoaders.isEmpty());
+    m_webResourceLoaders.clear();
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h (141823 => 141824)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h	2013-02-04 23:23:56 UTC (rev 141823)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoadScheduler.h	2013-02-04 23:24:31 UTC (rev 141824)
@@ -64,11 +64,11 @@
 
 private:
     void scheduleLoad(WebCore::ResourceLoader*, WebCore::ResourceLoadPriority);
-    void addUnschedulableLoad(WebCore::ResourceLoader*);
-    void unscheduledLoadTimerFired();
+    void scheduleInternallyFailedLoad(WebCore::ResourceLoader*);
+    void internallyFailedLoadTimerFired();
     
-    HashSet<RefPtr<WebCore::ResourceLoader> > m_unschedulableResourceLoaders;
-    WebCore::RunLoop::Timer<WebResourceLoadScheduler> m_unschedulableLoadTimer;
+    HashSet<RefPtr<WebCore::ResourceLoader> > m_internallyFailedResourceLoaders;
+    WebCore::RunLoop::Timer<WebResourceLoadScheduler> m_internallyFailedLoadTimer;
     
     HashMap<unsigned long, RefPtr<WebResourceLoader> > m_webResourceLoaders;
     

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (141823 => 141824)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp	2013-02-04 23:23:56 UTC (rev 141823)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp	2013-02-04 23:24:31 UTC (rev 141824)
@@ -128,12 +128,6 @@
     result = m_coreLoader->canAuthenticateAgainstProtectionSpace(protectionSpace);
 }
 
-void WebResourceLoader::networkProcessCrashed()
-{
-    ASSERT(m_coreLoader);
-    m_coreLoader->didFail(internalError(m_coreLoader->url()));
-}
-
 } // namespace WebKit
 
 #endif // ENABLE(NETWORK_PROCESS)

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h (141823 => 141824)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h	2013-02-04 23:23:56 UTC (rev 141823)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.h	2013-02-04 23:24:31 UTC (rev 141824)
@@ -66,7 +66,7 @@
     void didReceiveWebResourceLoaderMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&);
     void didReceiveSyncWebResourceLoaderMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&, OwnPtr<CoreIPC::MessageEncoder>&);
 
-    void networkProcessCrashed();
+    WebCore::ResourceLoader* resourceLoader() const { return m_coreLoader.get(); }
 
 private:
     WebResourceLoader(PassRefPtr<WebCore::ResourceLoader>);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to