Index: content/child/resource_dispatcher.cc |
diff --git a/content/child/resource_dispatcher.cc b/content/child/resource_dispatcher.cc |
index 7cbc7fa53e3249f3e79802d1b407a3cf02f3a70e..3441007b4a9cf909bfc6d12572d7f78cb5fd2e03 100644 |
--- a/content/child/resource_dispatcher.cc |
+++ b/content/child/resource_dispatcher.cc |
@@ -578,6 +578,17 @@ void ResourceDispatcher::OnRequestComplete( |
base::TimeTicks renderer_completion_time = ToRendererCompletionTime( |
*request_info, request_complete_data.completion_time); |
+ |
+ // If we have a threaded data provider, this message needs to bounce off the |
+ // background thread before it's returned to this thread and handled, |
+ // to make sure it's processed after all incoming data. |
+ if (request_info->threaded_data_provider) { |
+ request_info->threaded_data_provider->OnRequestCompleteForegroundThread( |
+ weak_factory_.GetWeakPtr(), request_complete_data, |
+ renderer_completion_time); |
+ return; |
+ } |
+ |
// The request ID will be removed from our pending list in the destructor. |
// Normally, dispatching this message causes the reference-counted request to |
// die immediately. |
@@ -589,6 +600,23 @@ void ResourceDispatcher::OnRequestComplete( |
request_complete_data.encoded_data_length); |
} |
+void ResourceDispatcher::CompletedRequestAfterBackgroundThreadFlush( |
davidben
2015/01/23 19:46:43
Huh. I never failed a separate bug for this, but w
oystein (OOO til 10th of July)
2015/01/23 21:23:47
Interesting! It actually might, though it depends
davidben
2015/01/26 21:53:12
Yeah, I think that stop was triggered by ResourceC
|
+ int request_id, |
+ const ResourceMsg_RequestCompleteData& request_complete_data, |
+ const base::TimeTicks& renderer_completion_time) { |
+ PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); |
+ if (!request_info) |
+ return; |
+ |
+ RequestPeer* peer = request_info->peer; |
+ peer->OnCompletedRequest(request_complete_data.error_code, |
+ request_complete_data.was_ignored_by_handler, |
+ request_complete_data.exists_in_cache, |
+ request_complete_data.security_info, |
+ renderer_completion_time, |
+ request_complete_data.encoded_data_length); |
+} |
+ |
int ResourceDispatcher::AddPendingRequest(RequestPeer* callback, |
ResourceType resource_type, |
int origin_pid, |