OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 return true; | 287 return true; |
288 } | 288 } |
289 // Make sure any deferred messages are dispatched before we dispatch more. | 289 // Make sure any deferred messages are dispatched before we dispatch more. |
290 if (!request_info.deferred_message_queue.empty()) | 290 if (!request_info.deferred_message_queue.empty()) |
291 FlushDeferredMessages(request_id); | 291 FlushDeferredMessages(request_id); |
292 | 292 |
293 DispatchMessage(message); | 293 DispatchMessage(message); |
294 return true; | 294 return true; |
295 } | 295 } |
296 | 296 |
297 void ResourceDispatcher::OnDownloadProgress( | |
298 const IPC::Message& message, int request_id, int64 position, int64 size) { | |
299 PendingRequestList::iterator it = pending_requests_.find(request_id); | |
300 if (it == pending_requests_.end()) { | |
301 DLOG(WARNING) << "Got download progress for a nonexistant or " | |
302 " finished requests"; | |
303 return; | |
304 } | |
305 | |
306 PendingRequestInfo& request_info = it->second; | |
307 | |
308 RESOURCE_LOG("Dispatching download progress for " << | |
309 request_info.peer->GetURLForDebugging()); | |
310 request_info.peer->OnDownloadProgress(position, size); | |
311 | |
312 // Send the ACK message back. | |
313 IPC::Message::Sender* sender = message_sender(); | |
314 if (sender) { | |
315 sender->Send( | |
316 new ViewHostMsg_DownloadProgress_ACK(message.routing_id(), request_id)); | |
317 } | |
318 } | |
319 | |
320 void ResourceDispatcher::OnUploadProgress( | 297 void ResourceDispatcher::OnUploadProgress( |
321 const IPC::Message& message, int request_id, int64 position, int64 size) { | 298 const IPC::Message& message, int request_id, int64 position, int64 size) { |
322 PendingRequestList::iterator it = pending_requests_.find(request_id); | 299 PendingRequestList::iterator it = pending_requests_.find(request_id); |
323 if (it == pending_requests_.end()) { | 300 if (it == pending_requests_.end()) { |
324 // this might happen for kill()ed requests on the webkit end, so perhaps | 301 // this might happen for kill()ed requests on the webkit end, so perhaps |
325 // it shouldn't be a warning... | 302 // it shouldn't be a warning... |
326 DLOG(WARNING) << "Got upload progress for a nonexistant or " | 303 DLOG(WARNING) << "Got upload progress for a nonexistant or " |
327 "finished request"; | 304 "finished request"; |
328 return; | 305 return; |
329 } | 306 } |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 request_info.is_deferred = false; | 474 request_info.is_deferred = false; |
498 MessageLoop::current()->PostTask(FROM_HERE, | 475 MessageLoop::current()->PostTask(FROM_HERE, |
499 method_factory_.NewRunnableMethod( | 476 method_factory_.NewRunnableMethod( |
500 &ResourceDispatcher::FlushDeferredMessages, request_id)); | 477 &ResourceDispatcher::FlushDeferredMessages, request_id)); |
501 } | 478 } |
502 } | 479 } |
503 | 480 |
504 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { | 481 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { |
505 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) | 482 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) |
506 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress) | 483 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress) |
507 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DownloadProgress, OnDownloadProgress) | |
508 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse) | 484 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse) |
509 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect) | 485 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect) |
510 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData) | 486 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData) |
511 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete) | 487 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete) |
512 IPC_END_MESSAGE_MAP() | 488 IPC_END_MESSAGE_MAP() |
513 } | 489 } |
514 | 490 |
515 void ResourceDispatcher::FlushDeferredMessages(int request_id) { | 491 void ResourceDispatcher::FlushDeferredMessages(int request_id) { |
516 PendingRequestList::iterator it = pending_requests_.find(request_id); | 492 PendingRequestList::iterator it = pending_requests_.find(request_id); |
517 if (it == pending_requests_.end()) // The request could have become invalid. | 493 if (it == pending_requests_.end()) // The request could have become invalid. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
552 flags, origin_pid, | 528 flags, origin_pid, |
553 resource_type, | 529 resource_type, |
554 request_context, | 530 request_context, |
555 app_cache_context_id, | 531 app_cache_context_id, |
556 route_id); | 532 route_id); |
557 } | 533 } |
558 | 534 |
559 bool ResourceDispatcher::IsResourceDispatcherMessage( | 535 bool ResourceDispatcher::IsResourceDispatcherMessage( |
560 const IPC::Message& message) { | 536 const IPC::Message& message) { |
561 switch (message.type()) { | 537 switch (message.type()) { |
562 case ViewMsg_Resource_DownloadProgress::ID: | |
563 case ViewMsg_Resource_UploadProgress::ID: | 538 case ViewMsg_Resource_UploadProgress::ID: |
564 case ViewMsg_Resource_ReceivedResponse::ID: | 539 case ViewMsg_Resource_ReceivedResponse::ID: |
565 case ViewMsg_Resource_ReceivedRedirect::ID: | 540 case ViewMsg_Resource_ReceivedRedirect::ID: |
566 case ViewMsg_Resource_DataReceived::ID: | 541 case ViewMsg_Resource_DataReceived::ID: |
567 case ViewMsg_Resource_RequestComplete::ID: | 542 case ViewMsg_Resource_RequestComplete::ID: |
568 return true; | 543 return true; |
569 | 544 |
570 default: | 545 default: |
571 break; | 546 break; |
572 } | 547 } |
(...skipping 14 matching lines...) Expand all Loading... |
587 // handle or there will be a memory leak. | 562 // handle or there will be a memory leak. |
588 if (message.type() == ViewMsg_Resource_DataReceived::ID) { | 563 if (message.type() == ViewMsg_Resource_DataReceived::ID) { |
589 base::SharedMemoryHandle shm_handle; | 564 base::SharedMemoryHandle shm_handle; |
590 if (IPC::ParamTraits<base::SharedMemoryHandle>::Read(&message, | 565 if (IPC::ParamTraits<base::SharedMemoryHandle>::Read(&message, |
591 &iter, | 566 &iter, |
592 &shm_handle)) { | 567 &shm_handle)) { |
593 base::SharedMemory::CloseHandle(shm_handle); | 568 base::SharedMemory::CloseHandle(shm_handle); |
594 } | 569 } |
595 } | 570 } |
596 } | 571 } |
OLD | NEW |