Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: content/child/resource_dispatcher.cc

Issue 2540023003: Dispatch encoded_data_length separately in content/child (Closed)
Patch Set: fix Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
6 6
7 #include "content/child/resource_dispatcher.h" 7 #include "content/child/resource_dispatcher.h"
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // document blocking policy. We only do this for the first chunk of data. 324 // document blocking policy. We only do this for the first chunk of data.
325 if (request_info->site_isolation_metadata.get()) { 325 if (request_info->site_isolation_metadata.get()) {
326 SiteIsolationStatsGatherer::OnReceivedFirstChunk( 326 SiteIsolationStatsGatherer::OnReceivedFirstChunk(
327 request_info->site_isolation_metadata, data.data(), data.size()); 327 request_info->site_isolation_metadata, data.data(), data.size());
328 request_info->site_isolation_metadata.reset(); 328 request_info->site_isolation_metadata.reset();
329 } 329 }
330 330
331 DCHECK(!request_info->buffer.get()); 331 DCHECK(!request_info->buffer.get());
332 332
333 request_info->peer->OnReceivedData( 333 request_info->peer->OnReceivedData(
334 base::MakeUnique<content::FixedReceivedData>(data, encoded_data_length)); 334 base::MakeUnique<content::FixedReceivedData>(data));
335
336 // Get the request info again as the client callback may modify the info.
337 request_info = GetPendingRequestInfo(request_id);
338 if (request_info && encoded_data_length > 0)
339 request_info->peer->OnTransferSizeUpdated(encoded_data_length);
335 } 340 }
336 341
337 void ResourceDispatcher::OnReceivedData(int request_id, 342 void ResourceDispatcher::OnReceivedData(int request_id,
338 int data_offset, 343 int data_offset,
339 int data_length, 344 int data_length,
340 int encoded_data_length) { 345 int encoded_data_length) {
341 TRACE_EVENT0("loader", "ResourceDispatcher::OnReceivedData"); 346 TRACE_EVENT0("loader", "ResourceDispatcher::OnReceivedData");
342 DCHECK_GT(data_length, 0); 347 DCHECK_GT(data_length, 0);
343 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); 348 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
344 bool send_ack = true; 349 bool send_ack = true;
345 if (request_info && data_length > 0) { 350 if (request_info && data_length > 0) {
346 CHECK(base::SharedMemory::IsHandleValid(request_info->buffer->handle())); 351 CHECK(base::SharedMemory::IsHandleValid(request_info->buffer->handle()));
347 CHECK_GE(request_info->buffer_size, data_offset + data_length); 352 CHECK_GE(request_info->buffer_size, data_offset + data_length);
348 353
349 const char* data_start = static_cast<char*>(request_info->buffer->memory()); 354 const char* data_start = static_cast<char*>(request_info->buffer->memory());
350 CHECK(data_start); 355 CHECK(data_start);
351 CHECK(data_start + data_offset); 356 CHECK(data_start + data_offset);
352 const char* data_ptr = data_start + data_offset; 357 const char* data_ptr = data_start + data_offset;
353 358
354 // Check whether this response data is compliant with our cross-site 359 // Check whether this response data is compliant with our cross-site
355 // document blocking policy. We only do this for the first chunk of data. 360 // document blocking policy. We only do this for the first chunk of data.
356 if (request_info->site_isolation_metadata.get()) { 361 if (request_info->site_isolation_metadata.get()) {
357 SiteIsolationStatsGatherer::OnReceivedFirstChunk( 362 SiteIsolationStatsGatherer::OnReceivedFirstChunk(
358 request_info->site_isolation_metadata, data_ptr, data_length); 363 request_info->site_isolation_metadata, data_ptr, data_length);
359 request_info->site_isolation_metadata.reset(); 364 request_info->site_isolation_metadata.reset();
360 } 365 }
361 366
362 std::unique_ptr<RequestPeer::ReceivedData> data = 367 std::unique_ptr<RequestPeer::ReceivedData> data =
363 request_info->received_data_factory->Create(data_offset, data_length, 368 request_info->received_data_factory->Create(data_offset, data_length);
364 encoded_data_length);
365 // |data| takes care of ACKing. 369 // |data| takes care of ACKing.
366 send_ack = false; 370 send_ack = false;
367 request_info->peer->OnReceivedData(std::move(data)); 371 request_info->peer->OnReceivedData(std::move(data));
368 } 372 }
369 373
374 // Get the request info again as the client callback may modify the info.
375 request_info = GetPendingRequestInfo(request_id);
376 if (request_info && encoded_data_length > 0)
377 request_info->peer->OnTransferSizeUpdated(encoded_data_length);
378
370 // Acknowledge the reception of this data. 379 // Acknowledge the reception of this data.
371 if (send_ack) 380 if (send_ack)
372 message_sender_->Send(new ResourceHostMsg_DataReceived_ACK(request_id)); 381 message_sender_->Send(new ResourceHostMsg_DataReceived_ACK(request_id));
373 } 382 }
374 383
375 void ResourceDispatcher::OnDownloadedData(int request_id, 384 void ResourceDispatcher::OnDownloadedData(int request_id,
376 int data_len, 385 int data_len,
377 int encoded_data_length) { 386 int encoded_data_length) {
378 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id); 387 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
379 if (!request_info) 388 if (!request_info)
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 delete message; 861 delete message;
853 } 862 }
854 } 863 }
855 864
856 void ResourceDispatcher::SetResourceSchedulingFilter( 865 void ResourceDispatcher::SetResourceSchedulingFilter(
857 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) { 866 scoped_refptr<ResourceSchedulingFilter> resource_scheduling_filter) {
858 resource_scheduling_filter_ = resource_scheduling_filter; 867 resource_scheduling_filter_ = resource_scheduling_filter;
859 } 868 }
860 869
861 } // namespace content 870 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698