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

Side by Side Diff: chrome/common/resource_dispatcher.cc

Issue 3396029: Flesh out URLLoader's download_to_file function.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 2 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
« no previous file with comments | « chrome/common/resource_dispatcher.h ('k') | webkit/blob/deletable_file_reference.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/common/resource_dispatcher.h" 7 #include "chrome/common/resource_dispatcher.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 #endif 136 #endif
137 } 137 }
138 138
139 IPCResourceLoaderBridge::~IPCResourceLoaderBridge() { 139 IPCResourceLoaderBridge::~IPCResourceLoaderBridge() {
140 // we remove our hook for the resource dispatcher only when going away, since 140 // we remove our hook for the resource dispatcher only when going away, since
141 // it doesn't keep track of whether we've force terminated the request 141 // it doesn't keep track of whether we've force terminated the request
142 if (request_id_ >= 0) { 142 if (request_id_ >= 0) {
143 // this operation may fail, as the dispatcher will have preemptively 143 // this operation may fail, as the dispatcher will have preemptively
144 // removed us when the renderer sends the ReceivedAllData message. 144 // removed us when the renderer sends the ReceivedAllData message.
145 dispatcher_->RemovePendingRequest(request_id_); 145 dispatcher_->RemovePendingRequest(request_id_);
146
147 if (request_.download_to_file) {
148 dispatcher_->message_sender()->Send(
149 new ViewHostMsg_ReleaseDownloadedFile(request_id_));
150 }
146 } 151 }
147 } 152 }
148 153
149 void IPCResourceLoaderBridge::AppendDataToUpload(const char* data, 154 void IPCResourceLoaderBridge::AppendDataToUpload(const char* data,
150 int data_len) { 155 int data_len) {
151 DCHECK(request_id_ == -1) << "request already started"; 156 DCHECK(request_id_ == -1) << "request already started";
152 157
153 // don't bother appending empty data segments 158 // don't bother appending empty data segments
154 if (data_len == 0) 159 if (data_len == 0)
155 return; 160 return;
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 response->url = result.final_url; 258 response->url = result.final_url;
254 response->headers = result.headers; 259 response->headers = result.headers;
255 response->mime_type = result.mime_type; 260 response->mime_type = result.mime_type;
256 response->charset = result.charset; 261 response->charset = result.charset;
257 response->request_time = result.request_time; 262 response->request_time = result.request_time;
258 response->response_time = result.response_time; 263 response->response_time = result.response_time;
259 response->connection_id = result.connection_id; 264 response->connection_id = result.connection_id;
260 response->connection_reused = result.connection_reused; 265 response->connection_reused = result.connection_reused;
261 response->load_timing = result.load_timing; 266 response->load_timing = result.load_timing;
262 response->data.swap(result.data); 267 response->data.swap(result.data);
268 response->download_file_path = result.download_file_path;
263 } 269 }
264 270
265 } // namespace webkit_glue 271 } // namespace webkit_glue
266 272
267 // ResourceDispatcher --------------------------------------------------------- 273 // ResourceDispatcher ---------------------------------------------------------
268 274
269 ResourceDispatcher::ResourceDispatcher(IPC::Message::Sender* sender) 275 ResourceDispatcher::ResourceDispatcher(IPC::Message::Sender* sender)
270 : message_sender_(sender), 276 : message_sender_(sender),
271 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { 277 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
272 } 278 }
273 279
274 ResourceDispatcher::~ResourceDispatcher() { 280 ResourceDispatcher::~ResourceDispatcher() {
275 } 281 }
276 282
277 // ResourceDispatcher implementation ------------------------------------------ 283 // ResourceDispatcher implementation ------------------------------------------
278 284
279 bool ResourceDispatcher::OnMessageReceived(const IPC::Message& message) { 285 bool ResourceDispatcher::OnMessageReceived(const IPC::Message& message) {
280 if (!IsResourceDispatcherMessage(message)) { 286 if (!IsResourceDispatcherMessage(message)) {
281 return false; 287 return false;
282 } 288 }
283 289
284 int request_id; 290 int request_id;
285 291
286 void* iter = NULL; 292 void* iter = NULL;
287 if (!message.ReadInt(&iter, &request_id)) { 293 if (!message.ReadInt(&iter, &request_id)) {
288 NOTREACHED() << "malformed resource message"; 294 NOTREACHED() << "malformed resource message";
289 return true; 295 return true;
290 } 296 }
291 297
292 PendingRequestList::iterator it = pending_requests_.find(request_id); 298 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
293 if (it == pending_requests_.end()) { 299 if (!request_info) {
294 // This might happen for kill()ed requests on the webkit end, so perhaps it
295 // shouldn't be a warning...
296 DLOG(WARNING) << "Got response for a nonexistent or finished request";
297 // Release resources in the message if it is a data message. 300 // Release resources in the message if it is a data message.
298 ReleaseResourcesInDataMessage(message); 301 ReleaseResourcesInDataMessage(message);
299 return true; 302 return true;
300 } 303 }
301 304
302 PendingRequestInfo& request_info = it->second; 305 if (request_info->is_deferred) {
303 if (request_info.is_deferred) { 306 request_info->deferred_message_queue.push_back(new IPC::Message(message));
304 request_info.deferred_message_queue.push_back(new IPC::Message(message));
305 return true; 307 return true;
306 } 308 }
307 // Make sure any deferred messages are dispatched before we dispatch more. 309 // Make sure any deferred messages are dispatched before we dispatch more.
308 if (!request_info.deferred_message_queue.empty()) { 310 if (!request_info->deferred_message_queue.empty()) {
309 FlushDeferredMessages(request_id); 311 FlushDeferredMessages(request_id);
310 // The request could have been deferred now. If yes then the current 312 // The request could have been deferred now. If yes then the current
311 // message has to be queued up. The request_info instance should remain 313 // message has to be queued up. The request_info instance should remain
312 // valid here as there are pending messages for it. 314 // valid here as there are pending messages for it.
313 DCHECK(pending_requests_.find(request_id) != pending_requests_.end()); 315 DCHECK(pending_requests_.find(request_id) != pending_requests_.end());
314 if (request_info.is_deferred) { 316 if (request_info->is_deferred) {
315 request_info.deferred_message_queue.push_back(new IPC::Message(message)); 317 request_info->deferred_message_queue.push_back(new IPC::Message(message));
316 return true; 318 return true;
317 } 319 }
318 } 320 }
319 321
320 DispatchMessage(message); 322 DispatchMessage(message);
321 return true; 323 return true;
322 } 324 }
323 325
326 ResourceDispatcher::PendingRequestInfo*
327 ResourceDispatcher::GetPendingRequestInfo(int request_id) {
328 PendingRequestList::iterator it = pending_requests_.find(request_id);
329 if (it == pending_requests_.end()) {
330 // This might happen for kill()ed requests on the webkit end, so perhaps it
331 // shouldn't be a warning...
332 DLOG(WARNING) << "Received message for a nonexistent or finished request";
333 return NULL;
334 }
335 return &(it->second);
336 }
337
324 void ResourceDispatcher::OnUploadProgress( 338 void ResourceDispatcher::OnUploadProgress(
325 const IPC::Message& message, int request_id, int64 position, int64 size) { 339 const IPC::Message& message, int request_id, int64 position, int64 size) {
326 PendingRequestList::iterator it = pending_requests_.find(request_id); 340 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
327 if (it == pending_requests_.end()) { 341 if (!request_info)
328 // this might happen for kill()ed requests on the webkit end, so perhaps
329 // it shouldn't be a warning...
330 DLOG(WARNING) << "Got upload progress for a nonexistent or "
331 "finished request";
332 return; 342 return;
333 }
334
335 PendingRequestInfo& request_info = it->second;
336 343
337 RESOURCE_LOG("Dispatching upload progress for " << 344 RESOURCE_LOG("Dispatching upload progress for " <<
338 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); 345 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
339 request_info.peer->OnUploadProgress(position, size); 346 request_info->peer->OnUploadProgress(position, size);
340 347
341 // Acknowledge receipt 348 // Acknowledge receipt
342 message_sender()->Send( 349 message_sender()->Send(
343 new ViewHostMsg_UploadProgress_ACK(message.routing_id(), request_id)); 350 new ViewHostMsg_UploadProgress_ACK(message.routing_id(), request_id));
344 } 351 }
345 352
346 void ResourceDispatcher::OnReceivedResponse( 353 void ResourceDispatcher::OnReceivedResponse(
347 int request_id, const ResourceResponseHead& response_head) { 354 int request_id, const ResourceResponseHead& response_head) {
348 PendingRequestList::iterator it = pending_requests_.find(request_id); 355 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
349 if (it == pending_requests_.end()) { 356 if (!request_info)
350 // This might happen for kill()ed requests on the webkit end, so perhaps it
351 // shouldn't be a warning...
352 DLOG(WARNING) << "Got response for a nonexistent or finished request";
353 return; 357 return;
354 }
355 358
356 PendingRequestInfo& request_info = it->second;
357 if (response_head.replace_extension_localization_templates) { 359 if (response_head.replace_extension_localization_templates) {
358 webkit_glue::ResourceLoaderBridge::Peer* new_peer = 360 webkit_glue::ResourceLoaderBridge::Peer* new_peer =
359 ExtensionLocalizationPeer::CreateExtensionLocalizationPeer( 361 ExtensionLocalizationPeer::CreateExtensionLocalizationPeer(
360 request_info.peer, message_sender(), response_head.mime_type, 362 request_info->peer, message_sender(), response_head.mime_type,
361 request_info.url); 363 request_info->url);
362 if (new_peer) 364 if (new_peer)
363 request_info.peer = new_peer; 365 request_info->peer = new_peer;
364 } 366 }
365 367
366 RESOURCE_LOG("Dispatching response for " << 368 RESOURCE_LOG("Dispatching response for " <<
367 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); 369 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
368 request_info.peer->OnReceivedResponse(response_head, false); 370 request_info->peer->OnReceivedResponse(response_head, false);
369 } 371 }
370 372
371 void ResourceDispatcher::OnReceivedCachedMetadata( 373 void ResourceDispatcher::OnReceivedCachedMetadata(
372 int request_id, const std::vector<char>& data) { 374 int request_id, const std::vector<char>& data) {
373 PendingRequestList::iterator it = pending_requests_.find(request_id); 375 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
374 if (it == pending_requests_.end()) { 376 if (!request_info)
375 // this might happen for kill()ed requests on the webkit end, so perhaps
376 // it shouldn't be a warning...
377 DLOG(WARNING) << "Got metadata for a nonexistent or finished request";
378 return; 377 return;
379 }
380 378
381 if (data.size()) { 379 if (data.size()) {
382 PendingRequestInfo& request_info = it->second;
383 RESOURCE_LOG("Dispatching " << data.size() << " metadata bytes for " << 380 RESOURCE_LOG("Dispatching " << data.size() << " metadata bytes for " <<
384 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); 381 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
385 request_info.peer->OnReceivedCachedMetadata(&data.front(), data.size()); 382 request_info->peer->OnReceivedCachedMetadata(&data.front(), data.size());
386 } 383 }
387 } 384 }
388 385
389 void ResourceDispatcher::OnReceivedData(const IPC::Message& message, 386 void ResourceDispatcher::OnReceivedData(const IPC::Message& message,
390 int request_id, 387 int request_id,
391 base::SharedMemoryHandle shm_handle, 388 base::SharedMemoryHandle shm_handle,
392 int data_len) { 389 int data_len) {
393 // Acknowledge the reception of this data. 390 // Acknowledge the reception of this data.
394 message_sender()->Send( 391 message_sender()->Send(
395 new ViewHostMsg_DataReceived_ACK(message.routing_id(), request_id)); 392 new ViewHostMsg_DataReceived_ACK(message.routing_id(), request_id));
396 393
397 const bool shm_valid = base::SharedMemory::IsHandleValid(shm_handle); 394 const bool shm_valid = base::SharedMemory::IsHandleValid(shm_handle);
398 DCHECK((shm_valid && data_len > 0) || (!shm_valid && !data_len)); 395 DCHECK((shm_valid && data_len > 0) || (!shm_valid && !data_len));
399 base::SharedMemory shared_mem(shm_handle, true); // read only 396 base::SharedMemory shared_mem(shm_handle, true); // read only
400 397
401 PendingRequestList::iterator it = pending_requests_.find(request_id); 398 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
402 if (it == pending_requests_.end()) { 399 if (!request_info)
403 // this might happen for kill()ed requests on the webkit end, so perhaps
404 // it shouldn't be a warning...
405 DLOG(WARNING) << "Got data for a nonexistent or finished request";
406 return; 400 return;
407 }
408
409 PendingRequestInfo& request_info = it->second;
410 401
411 if (data_len > 0 && shared_mem.Map(data_len)) { 402 if (data_len > 0 && shared_mem.Map(data_len)) {
412 RESOURCE_LOG("Dispatching " << data_len << " bytes for " << 403 RESOURCE_LOG("Dispatching " << data_len << " bytes for " <<
413 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); 404 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
414 const char* data = static_cast<char*>(shared_mem.memory()); 405 const char* data = static_cast<char*>(shared_mem.memory());
415 request_info.peer->OnReceivedData(data, data_len); 406 request_info->peer->OnReceivedData(data, data_len);
416 } 407 }
417 } 408 }
418 409
410 void ResourceDispatcher::OnDownloadedData(const IPC::Message& message,
411 int request_id,
412 int data_len) {
413 // Acknowledge the reception of this message.
414 message_sender()->Send(
415 new ViewHostMsg_DataDownloaded_ACK(message.routing_id(), request_id));
416
417 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
418 if (!request_info)
419 return;
420
421 RESOURCE_LOG("Dispatching " << data_len << " downloaded for " <<
422 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
423 request_info->peer->OnDownloadedData(data_len);
424 }
425
419 void ResourceDispatcher::OnReceivedRedirect( 426 void ResourceDispatcher::OnReceivedRedirect(
420 const IPC::Message& message, 427 const IPC::Message& message,
421 int request_id, 428 int request_id,
422 const GURL& new_url, 429 const GURL& new_url,
423 const webkit_glue::ResourceLoaderBridge::ResponseInfo& info) { 430 const webkit_glue::ResourceLoaderBridge::ResponseInfo& info) {
424 PendingRequestList::iterator it = pending_requests_.find(request_id); 431 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
425 if (it == pending_requests_.end()) { 432 if (!request_info)
426 // this might happen for kill()ed requests on the webkit end, so perhaps
427 // it shouldn't be a warning...
428 DLOG(WARNING) << "Got data for a nonexistent or finished request";
429 return; 433 return;
430 }
431 434
432 PendingRequestInfo& request_info = it->second; 435 RESOURCE_LOG(
433 436 "Dispatching redirect for " <<
434 RESOURCE_LOG("Dispatching redirect for " << 437 request_info->peer->GetURLForDebugging().possibly_invalid_spec());
435 request_info.peer->GetURLForDebugging().possibly_invalid_spec());
436 438
437 bool has_new_first_party_for_cookies = false; 439 bool has_new_first_party_for_cookies = false;
438 GURL new_first_party_for_cookies; 440 GURL new_first_party_for_cookies;
439 if (request_info.peer->OnReceivedRedirect(new_url, info, 441 if (request_info->peer->OnReceivedRedirect(new_url, info,
440 &has_new_first_party_for_cookies, 442 &has_new_first_party_for_cookies,
441 &new_first_party_for_cookies)) { 443 &new_first_party_for_cookies)) {
442 message_sender()->Send( 444 message_sender()->Send(
443 new ViewHostMsg_FollowRedirect(message.routing_id(), request_id, 445 new ViewHostMsg_FollowRedirect(message.routing_id(), request_id,
444 has_new_first_party_for_cookies, 446 has_new_first_party_for_cookies,
445 new_first_party_for_cookies)); 447 new_first_party_for_cookies));
446 } else { 448 } else {
447 CancelPendingRequest(message.routing_id(), request_id); 449 CancelPendingRequest(message.routing_id(), request_id);
448 } 450 }
449 } 451 }
450 452
451 void ResourceDispatcher::OnRequestComplete(int request_id, 453 void ResourceDispatcher::OnRequestComplete(int request_id,
452 const URLRequestStatus& status, 454 const URLRequestStatus& status,
453 const std::string& security_info, 455 const std::string& security_info,
454 const base::Time& completion_time) { 456 const base::Time& completion_time) {
455 PendingRequestList::iterator it = pending_requests_.find(request_id); 457 PendingRequestInfo* request_info = GetPendingRequestInfo(request_id);
456 if (it == pending_requests_.end()) { 458 if (!request_info)
457 // this might happen for kill()ed requests on the webkit end, so perhaps
458 // it shouldn't be a warning...
459 DLOG(WARNING) << "Got 'complete' for a nonexistent or finished request";
460 return; 459 return;
461 }
462 460
463 PendingRequestInfo& request_info = it->second; 461 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info->peer;
464 webkit_glue::ResourceLoaderBridge::Peer* peer = request_info.peer;
465 462
466 RESOURCE_LOG("Dispatching complete for " << 463 RESOURCE_LOG("Dispatching complete for " <<
467 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); 464 peer->GetURLForDebugging().possibly_invalid_spec());
468 465
469 if (status.status() == URLRequestStatus::CANCELED && 466 if (status.status() == URLRequestStatus::CANCELED &&
470 status.os_error() != net::ERR_ABORTED) { 467 status.os_error() != net::ERR_ABORTED) {
471 // Resource canceled with a specific error are filtered. 468 // Resource canceled with a specific error are filtered.
472 SecurityFilterPeer* new_peer = 469 SecurityFilterPeer* new_peer =
473 SecurityFilterPeer::CreateSecurityFilterPeerForDeniedRequest( 470 SecurityFilterPeer::CreateSecurityFilterPeerForDeniedRequest(
474 request_info.resource_type, 471 request_info->resource_type,
475 request_info.peer, 472 request_info->peer,
476 status.os_error()); 473 status.os_error());
477 if (new_peer) { 474 if (new_peer) {
478 request_info.peer = new_peer; 475 request_info->peer = new_peer;
479 peer = new_peer; 476 peer = new_peer;
480 } 477 }
481 } 478 }
482 479
483 // The request ID will be removed from our pending list in the destructor. 480 // The request ID will be removed from our pending list in the destructor.
484 // Normally, dispatching this message causes the reference-counted request to 481 // Normally, dispatching this message causes the reference-counted request to
485 // die immediately. 482 // die immediately.
486 peer->OnCompletedRequest(status, security_info, completion_time); 483 peer->OnCompletedRequest(status, security_info, completion_time);
487 484
488 webkit_glue::NotifyCacheStats(); 485 webkit_glue::NotifyCacheStats();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 } 542 }
546 543
547 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { 544 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) {
548 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) 545 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message)
549 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress) 546 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress)
550 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse) 547 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse)
551 IPC_MESSAGE_HANDLER( 548 IPC_MESSAGE_HANDLER(
552 ViewMsg_Resource_ReceivedCachedMetadata, OnReceivedCachedMetadata) 549 ViewMsg_Resource_ReceivedCachedMetadata, OnReceivedCachedMetadata)
553 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect) 550 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect)
554 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData) 551 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData)
552 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataDownloaded, OnDownloadedData)
555 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete) 553 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete)
556 IPC_END_MESSAGE_MAP() 554 IPC_END_MESSAGE_MAP()
557 } 555 }
558 556
559 void ResourceDispatcher::FlushDeferredMessages(int request_id) { 557 void ResourceDispatcher::FlushDeferredMessages(int request_id) {
560 PendingRequestList::iterator it = pending_requests_.find(request_id); 558 PendingRequestList::iterator it = pending_requests_.find(request_id);
561 if (it == pending_requests_.end()) // The request could have become invalid. 559 if (it == pending_requests_.end()) // The request could have become invalid.
562 return; 560 return;
563 PendingRequestInfo& request_info = it->second; 561 PendingRequestInfo& request_info = it->second;
564 if (request_info.is_deferred) 562 if (request_info.is_deferred)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 } 595 }
598 596
599 bool ResourceDispatcher::IsResourceDispatcherMessage( 597 bool ResourceDispatcher::IsResourceDispatcherMessage(
600 const IPC::Message& message) { 598 const IPC::Message& message) {
601 switch (message.type()) { 599 switch (message.type()) {
602 case ViewMsg_Resource_UploadProgress::ID: 600 case ViewMsg_Resource_UploadProgress::ID:
603 case ViewMsg_Resource_ReceivedResponse::ID: 601 case ViewMsg_Resource_ReceivedResponse::ID:
604 case ViewMsg_Resource_ReceivedCachedMetadata::ID: 602 case ViewMsg_Resource_ReceivedCachedMetadata::ID:
605 case ViewMsg_Resource_ReceivedRedirect::ID: 603 case ViewMsg_Resource_ReceivedRedirect::ID:
606 case ViewMsg_Resource_DataReceived::ID: 604 case ViewMsg_Resource_DataReceived::ID:
605 case ViewMsg_Resource_DataDownloaded::ID:
607 case ViewMsg_Resource_RequestComplete::ID: 606 case ViewMsg_Resource_RequestComplete::ID:
608 return true; 607 return true;
609 608
610 default: 609 default:
611 break; 610 break;
612 } 611 }
613 612
614 return false; 613 return false;
615 } 614 }
616 615
(...skipping 21 matching lines...) Expand all
638 637
639 // static 638 // static
640 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { 639 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) {
641 while (!queue->empty()) { 640 while (!queue->empty()) {
642 IPC::Message* message = queue->front(); 641 IPC::Message* message = queue->front();
643 ReleaseResourcesInDataMessage(*message); 642 ReleaseResourcesInDataMessage(*message);
644 queue->pop_front(); 643 queue->pop_front();
645 delete message; 644 delete message;
646 } 645 }
647 } 646 }
OLDNEW
« no previous file with comments | « chrome/common/resource_dispatcher.h ('k') | webkit/blob/deletable_file_reference.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698