| 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 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 if (new_peer) { | 360 if (new_peer) { |
| 361 request_info.peer = new_peer; | 361 request_info.peer = new_peer; |
| 362 peer = new_peer; | 362 peer = new_peer; |
| 363 } | 363 } |
| 364 | 364 |
| 365 RESOURCE_LOG("Dispatching response for " << | 365 RESOURCE_LOG("Dispatching response for " << |
| 366 peer->GetURLForDebugging().possibly_invalid_spec()); | 366 peer->GetURLForDebugging().possibly_invalid_spec()); |
| 367 peer->OnReceivedResponse(response_head, false); | 367 peer->OnReceivedResponse(response_head, false); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void ResourceDispatcher::OnReceivedCachedMetadata( |
| 371 int request_id, const std::vector<char>& data) { |
| 372 PendingRequestList::iterator it = pending_requests_.find(request_id); |
| 373 if (it == pending_requests_.end()) { |
| 374 // this might happen for kill()ed requests on the webkit end, so perhaps |
| 375 // it shouldn't be a warning... |
| 376 DLOG(WARNING) << "Got metadata for a nonexistant or finished request"; |
| 377 return; |
| 378 } |
| 379 |
| 380 if (data.size()) { |
| 381 PendingRequestInfo& request_info = it->second; |
| 382 RESOURCE_LOG("Dispatching " << data.size() << " metadata bytes for " << |
| 383 request_info.peer->GetURLForDebugging().possibly_invalid_spec()); |
| 384 request_info.peer->OnReceivedCachedMetadata(&data.front(), data.size()); |
| 385 } |
| 386 } |
| 387 |
| 370 void ResourceDispatcher::OnReceivedData(const IPC::Message& message, | 388 void ResourceDispatcher::OnReceivedData(const IPC::Message& message, |
| 371 int request_id, | 389 int request_id, |
| 372 base::SharedMemoryHandle shm_handle, | 390 base::SharedMemoryHandle shm_handle, |
| 373 int data_len) { | 391 int data_len) { |
| 374 // Acknowledge the reception of this data. | 392 // Acknowledge the reception of this data. |
| 375 message_sender()->Send( | 393 message_sender()->Send( |
| 376 new ViewHostMsg_DataReceived_ACK(message.routing_id(), request_id)); | 394 new ViewHostMsg_DataReceived_ACK(message.routing_id(), request_id)); |
| 377 | 395 |
| 378 const bool shm_valid = base::SharedMemory::IsHandleValid(shm_handle); | 396 const bool shm_valid = base::SharedMemory::IsHandleValid(shm_handle); |
| 379 DCHECK((shm_valid && data_len > 0) || (!shm_valid && !data_len)); | 397 DCHECK((shm_valid && data_len > 0) || (!shm_valid && !data_len)); |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 MessageLoop::current()->PostTask(FROM_HERE, | 539 MessageLoop::current()->PostTask(FROM_HERE, |
| 522 method_factory_.NewRunnableMethod( | 540 method_factory_.NewRunnableMethod( |
| 523 &ResourceDispatcher::FlushDeferredMessages, request_id)); | 541 &ResourceDispatcher::FlushDeferredMessages, request_id)); |
| 524 } | 542 } |
| 525 } | 543 } |
| 526 | 544 |
| 527 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { | 545 void ResourceDispatcher::DispatchMessage(const IPC::Message& message) { |
| 528 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) | 546 IPC_BEGIN_MESSAGE_MAP(ResourceDispatcher, message) |
| 529 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress) | 547 IPC_MESSAGE_HANDLER(ViewMsg_Resource_UploadProgress, OnUploadProgress) |
| 530 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse) | 548 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedResponse, OnReceivedResponse) |
| 549 IPC_MESSAGE_HANDLER( |
| 550 ViewMsg_Resource_ReceivedCachedMetadata, OnReceivedCachedMetadata) |
| 531 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect) | 551 IPC_MESSAGE_HANDLER(ViewMsg_Resource_ReceivedRedirect, OnReceivedRedirect) |
| 532 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData) | 552 IPC_MESSAGE_HANDLER(ViewMsg_Resource_DataReceived, OnReceivedData) |
| 533 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete) | 553 IPC_MESSAGE_HANDLER(ViewMsg_Resource_RequestComplete, OnRequestComplete) |
| 534 IPC_END_MESSAGE_MAP() | 554 IPC_END_MESSAGE_MAP() |
| 535 } | 555 } |
| 536 | 556 |
| 537 void ResourceDispatcher::FlushDeferredMessages(int request_id) { | 557 void ResourceDispatcher::FlushDeferredMessages(int request_id) { |
| 538 PendingRequestList::iterator it = pending_requests_.find(request_id); | 558 PendingRequestList::iterator it = pending_requests_.find(request_id); |
| 539 if (it == pending_requests_.end()) // The request could have become invalid. | 559 if (it == pending_requests_.end()) // The request could have become invalid. |
| 540 return; | 560 return; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 return new webkit_glue::IPCResourceLoaderBridge(this, request_info, | 592 return new webkit_glue::IPCResourceLoaderBridge(this, request_info, |
| 573 host_renderer_id, | 593 host_renderer_id, |
| 574 host_render_view_id); | 594 host_render_view_id); |
| 575 } | 595 } |
| 576 | 596 |
| 577 bool ResourceDispatcher::IsResourceDispatcherMessage( | 597 bool ResourceDispatcher::IsResourceDispatcherMessage( |
| 578 const IPC::Message& message) { | 598 const IPC::Message& message) { |
| 579 switch (message.type()) { | 599 switch (message.type()) { |
| 580 case ViewMsg_Resource_UploadProgress::ID: | 600 case ViewMsg_Resource_UploadProgress::ID: |
| 581 case ViewMsg_Resource_ReceivedResponse::ID: | 601 case ViewMsg_Resource_ReceivedResponse::ID: |
| 602 case ViewMsg_Resource_ReceivedCachedMetadata::ID: |
| 582 case ViewMsg_Resource_ReceivedRedirect::ID: | 603 case ViewMsg_Resource_ReceivedRedirect::ID: |
| 583 case ViewMsg_Resource_DataReceived::ID: | 604 case ViewMsg_Resource_DataReceived::ID: |
| 584 case ViewMsg_Resource_RequestComplete::ID: | 605 case ViewMsg_Resource_RequestComplete::ID: |
| 585 return true; | 606 return true; |
| 586 | 607 |
| 587 default: | 608 default: |
| 588 break; | 609 break; |
| 589 } | 610 } |
| 590 | 611 |
| 591 return false; | 612 return false; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 615 | 636 |
| 616 // static | 637 // static |
| 617 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 638 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
| 618 while (!queue->empty()) { | 639 while (!queue->empty()) { |
| 619 IPC::Message* message = queue->front(); | 640 IPC::Message* message = queue->front(); |
| 620 ReleaseResourcesInDataMessage(*message); | 641 ReleaseResourcesInDataMessage(*message); |
| 621 queue->pop_front(); | 642 queue->pop_front(); |
| 622 delete message; | 643 delete message; |
| 623 } | 644 } |
| 624 } | 645 } |
| OLD | NEW |