- 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>);