Index: third_party/WebKit/Source/core/fetch/Resource.cpp |
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp |
index adf843dd7e9831f464f8fd72224979f566c5ea9f..42e84f92304487e7f63157fc221ccbb1684dc084 100644 |
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp |
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp |
@@ -343,12 +343,28 @@ void Resource::setLoader(ResourceLoader* loader) |
void Resource::checkNotify() |
{ |
+ notifyClientsInternal(MarkFinishedOption::ShouldMarkFinished); |
+} |
+ |
+void Resource::notifyClientsInternal(MarkFinishedOption markFinishedOption) |
+{ |
if (isLoading()) |
return; |
ResourceClientWalker<ResourceClient> w(m_clients); |
- while (ResourceClient* c = w.next()) |
+ while (ResourceClient* c = w.next()) { |
+ if (markFinishedOption == MarkFinishedOption::ShouldMarkFinished) |
+ markClientFinished(c); |
c->notifyFinished(this); |
+ } |
+} |
+ |
+void Resource::markClientFinished(ResourceClient* client) |
+{ |
+ if (m_clients.contains(client)) { |
+ m_finishedClients.add(client); |
+ m_clients.remove(client); |
+ } |
} |
void Resource::appendData(const char* data, size_t length) |
@@ -381,14 +397,6 @@ void Resource::setDataBufferingPolicy(DataBufferingPolicy dataBufferingPolicy) |
setEncodedSize(0); |
} |
-void Resource::markClientsAndObserversFinished() |
-{ |
- HashCountedSet<ResourceClient*> clients; |
- m_clients.swap(clients); |
- for (const auto& it : clients) |
- m_finishedClients.add(it.key, it.value); |
-} |
- |
void Resource::error(const ResourceError& error) |
{ |
ASSERT(!error.isNull()); |
@@ -404,7 +412,6 @@ void Resource::error(const ResourceError& error) |
m_data.clear(); |
m_loader = nullptr; |
checkNotify(); |
- markClientsAndObserversFinished(); |
} |
void Resource::finish(double loadFinishTime) |
@@ -415,7 +422,6 @@ void Resource::finish(double loadFinishTime) |
m_status = Cached; |
m_loader = nullptr; |
checkNotify(); |
- markClientsAndObserversFinished(); |
} |
AtomicString Resource::httpContentType() const |