| 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 | 
|---|