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

Side by Side Diff: content/browser/renderer_host/resource_dispatcher_host.cc

Issue 6881106: Treat ERR_CONNECTION_CLOSED as end-of-data marker for downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed issues with tracking number of bytes received & decompressed. Created 9 years, 7 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/browser/renderer_host/resource_dispatcher_host.h" 7 #include "content/browser/renderer_host/resource_dispatcher_host.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 1371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 void ResourceDispatcherHost::ResumeRequest(const GlobalRequestID& request_id) { 1382 void ResourceDispatcherHost::ResumeRequest(const GlobalRequestID& request_id) {
1383 PendingRequestList::iterator i = pending_requests_.find(request_id); 1383 PendingRequestList::iterator i = pending_requests_.find(request_id);
1384 if (i == pending_requests_.end()) // The request may have been destroyed 1384 if (i == pending_requests_.end()) // The request may have been destroyed
1385 return; 1385 return;
1386 1386
1387 net::URLRequest* request = i->second; 1387 net::URLRequest* request = i->second;
1388 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); 1388 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request);
1389 if (!info->is_paused()) 1389 if (!info->is_paused())
1390 return; 1390 return;
1391 1391
1392 VLOG(1) << "Resuming: " << i->second->url().spec(); 1392 VLOG(1) << "Resuming: \"" << i->second->url().spec() << "\""
1393 << " paused_read_bytes = " << info->paused_read_bytes()
1394 << " called response started = " << info->called_on_response_started()
1395 << " started reading = " << info->has_started_reading();
1393 1396
1394 info->set_is_paused(false); 1397 info->set_is_paused(false);
1395 1398
1396 if (info->called_on_response_started()) { 1399 if (info->called_on_response_started()) {
1397 if (info->has_started_reading()) { 1400 if (info->has_started_reading()) {
1398 OnReadCompleted(i->second, info->paused_read_bytes()); 1401 OnReadCompleted(i->second, info->paused_read_bytes());
1399 } else { 1402 } else {
1400 StartReading(request); 1403 StartReading(request);
1401 } 1404 }
1402 } else { 1405 } else {
(...skipping 27 matching lines...) Expand all
1430 DCHECK(buf); 1433 DCHECK(buf);
1431 DCHECK(buf_size > 0); 1434 DCHECK(buf_size > 0);
1432 1435
1433 info->set_has_started_reading(true); 1436 info->set_has_started_reading(true);
1434 return request->Read(buf, buf_size, bytes_read); 1437 return request->Read(buf, buf_size, bytes_read);
1435 } 1438 }
1436 1439
1437 void ResourceDispatcherHost::OnReadCompleted(net::URLRequest* request, 1440 void ResourceDispatcherHost::OnReadCompleted(net::URLRequest* request,
1438 int bytes_read) { 1441 int bytes_read) {
1439 DCHECK(request); 1442 DCHECK(request);
1440 VLOG(1) << "OnReadCompleted: " << request->url().spec(); 1443 VLOG(1) << "OnReadCompleted: \"" << request->url().spec() << "\""
1444 << " bytes_read = " << bytes_read;
1441 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); 1445 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request);
1442 1446
1443 // OnReadCompleted can be called without Read (e.g., for chrome:// URLs). 1447 // OnReadCompleted can be called without Read (e.g., for chrome:// URLs).
1444 // Make sure we know that a read has begun. 1448 // Make sure we know that a read has begun.
1445 info->set_has_started_reading(true); 1449 info->set_has_started_reading(true);
1446 1450
1447 if (PauseRequestIfNeeded(info)) { 1451 if (PauseRequestIfNeeded(info)) {
1448 info->set_paused_read_bytes(bytes_read); 1452 info->set_paused_read_bytes(bytes_read);
1449 VLOG(1) << "OnReadCompleted pausing: " << request->url().spec(); 1453 VLOG(1) << "OnReadCompleted pausing: \"" << request->url().spec() << "\""
1454 << " bytes_read = " << bytes_read;
1450 return; 1455 return;
1451 } 1456 }
1452 1457
1453 if (request->status().is_success() && CompleteRead(request, &bytes_read)) { 1458 if (request->status().is_success() && CompleteRead(request, &bytes_read)) {
1454 // The request can be paused if we realize that the renderer is not 1459 // The request can be paused if we realize that the renderer is not
1455 // servicing messages fast enough. 1460 // servicing messages fast enough.
1456 if (info->pause_count() == 0 && 1461 if (info->pause_count() == 0 &&
1457 Read(request, &bytes_read) && 1462 Read(request, &bytes_read) &&
1458 request->status().is_success()) { 1463 request->status().is_success()) {
1459 if (bytes_read == 0) { 1464 if (bytes_read == 0) {
1460 CompleteRead(request, &bytes_read); 1465 CompleteRead(request, &bytes_read);
1461 } else { 1466 } else {
1462 // Force the next CompleteRead / Read pair to run as a separate task. 1467 // Force the next CompleteRead / Read pair to run as a separate task.
1463 // This avoids a fast, large network request from monopolizing the IO 1468 // This avoids a fast, large network request from monopolizing the IO
1464 // thread and starving other IO operations from running. 1469 // thread and starving other IO operations from running.
1470 VLOG(1) << "OnReadCompleted postponing: \""
1471 << request->url().spec() << "\""
1472 << " bytes_read = " << bytes_read;
1465 info->set_paused_read_bytes(bytes_read); 1473 info->set_paused_read_bytes(bytes_read);
1466 info->set_is_paused(true); 1474 info->set_is_paused(true);
1467 GlobalRequestID id(info->child_id(), info->request_id()); 1475 GlobalRequestID id(info->child_id(), info->request_id());
1468 MessageLoop::current()->PostTask( 1476 MessageLoop::current()->PostTask(
1469 FROM_HERE, 1477 FROM_HERE,
1470 method_runner_.NewRunnableMethod( 1478 method_runner_.NewRunnableMethod(
1471 &ResourceDispatcherHost::ResumeRequest, id)); 1479 &ResourceDispatcherHost::ResumeRequest, id));
1472 return; 1480 return;
1473 } 1481 }
1474 } 1482 }
1475 } 1483 }
1476 1484
1477 if (PauseRequestIfNeeded(info)) { 1485 if (PauseRequestIfNeeded(info)) {
1478 info->set_paused_read_bytes(bytes_read); 1486 info->set_paused_read_bytes(bytes_read);
1479 VLOG(1) << "OnReadCompleted (CompleteRead) pausing: " 1487 VLOG(1) << "OnReadCompleted (CompleteRead) pausing: \""
1480 << request->url().spec(); 1488 << request->url().spec() << "\""
1489 << " bytes_read = " << bytes_read;
1481 return; 1490 return;
1482 } 1491 }
1483 1492
1484 // If the status is not IO pending then we've either finished (success) or we 1493 // If the status is not IO pending then we've either finished (success) or we
1485 // had an error. Either way, we're done! 1494 // had an error. Either way, we're done!
1486 if (!request->status().is_io_pending()) 1495 if (!request->status().is_io_pending())
1487 OnResponseCompleted(request); 1496 OnResponseCompleted(request);
1488 } 1497 }
1489 1498
1490 bool ResourceDispatcherHost::CompleteRead(net::URLRequest* request, 1499 bool ResourceDispatcherHost::CompleteRead(net::URLRequest* request,
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 return is_prefetch_enabled_; 1998 return is_prefetch_enabled_;
1990 } 1999 }
1991 2000
1992 // static 2001 // static
1993 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) { 2002 void ResourceDispatcherHost::set_is_prefetch_enabled(bool value) {
1994 is_prefetch_enabled_ = value; 2003 is_prefetch_enabled_ = value;
1995 } 2004 }
1996 2005
1997 // static 2006 // static
1998 bool ResourceDispatcherHost::is_prefetch_enabled_ = false; 2007 bool ResourceDispatcherHost::is_prefetch_enabled_ = false;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698