OLD | NEW |
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 "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 22 matching lines...) Expand all Loading... |
33 return next_request_id++; | 33 return next_request_id++; |
34 } | 34 } |
35 | 35 |
36 // ResourceLoaderBridge implementation ---------------------------------------- | 36 // ResourceLoaderBridge implementation ---------------------------------------- |
37 | 37 |
38 namespace webkit_glue { | 38 namespace webkit_glue { |
39 | 39 |
40 class IPCResourceLoaderBridge : public ResourceLoaderBridge { | 40 class IPCResourceLoaderBridge : public ResourceLoaderBridge { |
41 public: | 41 public: |
42 IPCResourceLoaderBridge(ResourceDispatcher* dispatcher, | 42 IPCResourceLoaderBridge(ResourceDispatcher* dispatcher, |
43 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info, | 43 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info); |
44 int host_renderer_id, | |
45 int host_render_view_id); | |
46 virtual ~IPCResourceLoaderBridge(); | 44 virtual ~IPCResourceLoaderBridge(); |
47 | 45 |
48 // ResourceLoaderBridge | 46 // ResourceLoaderBridge |
49 virtual void AppendDataToUpload(const char* data, int data_len); | 47 virtual void AppendDataToUpload(const char* data, int data_len); |
50 virtual void AppendFileRangeToUpload( | 48 virtual void AppendFileRangeToUpload( |
51 const FilePath& path, | 49 const FilePath& path, |
52 uint64 offset, | 50 uint64 offset, |
53 uint64 length, | 51 uint64 length, |
54 const base::Time& expected_modification_time); | 52 const base::Time& expected_modification_time); |
55 virtual void AppendBlobToUpload(const GURL& blob_url); | 53 virtual void AppendBlobToUpload(const GURL& blob_url); |
(...skipping 12 matching lines...) Expand all Loading... |
68 | 66 |
69 // The request to send, created on initialization for modification and | 67 // The request to send, created on initialization for modification and |
70 // appending data. | 68 // appending data. |
71 ViewHostMsg_Resource_Request request_; | 69 ViewHostMsg_Resource_Request request_; |
72 | 70 |
73 // ID for the request, valid once Start()ed, -1 if not valid yet. | 71 // ID for the request, valid once Start()ed, -1 if not valid yet. |
74 int request_id_; | 72 int request_id_; |
75 | 73 |
76 // The routing id used when sending IPC messages. | 74 // The routing id used when sending IPC messages. |
77 int routing_id_; | 75 int routing_id_; |
78 | |
79 // The following two members are specified if the request is initiated by | |
80 // a plugin like Gears. | |
81 | |
82 // Contains the id of the host renderer. | |
83 int host_renderer_id_; | |
84 | |
85 // Contains the id of the host render view. | |
86 int host_render_view_id_; | |
87 }; | 76 }; |
88 | 77 |
89 IPCResourceLoaderBridge::IPCResourceLoaderBridge( | 78 IPCResourceLoaderBridge::IPCResourceLoaderBridge( |
90 ResourceDispatcher* dispatcher, | 79 ResourceDispatcher* dispatcher, |
91 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info, | 80 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info) |
92 int host_renderer_id, | |
93 int host_render_view_id) | |
94 : peer_(NULL), | 81 : peer_(NULL), |
95 dispatcher_(dispatcher), | 82 dispatcher_(dispatcher), |
96 request_id_(-1), | 83 request_id_(-1), |
97 routing_id_(request_info.routing_id), | 84 routing_id_(request_info.routing_id) { |
98 host_renderer_id_(host_renderer_id), | |
99 host_render_view_id_(host_render_view_id) { | |
100 DCHECK(dispatcher_) << "no resource dispatcher"; | 85 DCHECK(dispatcher_) << "no resource dispatcher"; |
101 request_.method = request_info.method; | 86 request_.method = request_info.method; |
102 request_.url = request_info.url; | 87 request_.url = request_info.url; |
103 request_.first_party_for_cookies = request_info.first_party_for_cookies; | 88 request_.first_party_for_cookies = request_info.first_party_for_cookies; |
104 request_.referrer = request_info.referrer; | 89 request_.referrer = request_info.referrer; |
105 request_.headers = request_info.headers; | 90 request_.headers = request_info.headers; |
106 request_.load_flags = request_info.load_flags; | 91 request_.load_flags = request_info.load_flags; |
107 request_.origin_pid = request_info.requestor_pid; | 92 request_.origin_pid = request_info.requestor_pid; |
108 request_.resource_type = request_info.request_type; | 93 request_.resource_type = request_info.request_type; |
109 request_.request_context = request_info.request_context; | 94 request_.request_context = request_info.request_context; |
110 request_.appcache_host_id = request_info.appcache_host_id; | 95 request_.appcache_host_id = request_info.appcache_host_id; |
111 request_.download_to_file = request_info.download_to_file; | 96 request_.download_to_file = request_info.download_to_file; |
112 request_.has_user_gesture = request_info.has_user_gesture; | 97 request_.has_user_gesture = request_info.has_user_gesture; |
113 request_.host_renderer_id = host_renderer_id_; | |
114 request_.host_render_view_id = host_render_view_id_; | |
115 } | 98 } |
116 | 99 |
117 IPCResourceLoaderBridge::~IPCResourceLoaderBridge() { | 100 IPCResourceLoaderBridge::~IPCResourceLoaderBridge() { |
118 // we remove our hook for the resource dispatcher only when going away, since | 101 // we remove our hook for the resource dispatcher only when going away, since |
119 // it doesn't keep track of whether we've force terminated the request | 102 // it doesn't keep track of whether we've force terminated the request |
120 if (request_id_ >= 0) { | 103 if (request_id_ >= 0) { |
121 // this operation may fail, as the dispatcher will have preemptively | 104 // this operation may fail, as the dispatcher will have preemptively |
122 // removed us when the renderer sends the ReceivedAllData message. | 105 // removed us when the renderer sends the ReceivedAllData message. |
123 dispatcher_->RemovePendingRequest(request_id_); | 106 dispatcher_->RemovePendingRequest(request_id_); |
124 | 107 |
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 PendingRequestInfo& pending_request = index->second; | 537 PendingRequestInfo& pending_request = index->second; |
555 if (pending_request.is_deferred) { | 538 if (pending_request.is_deferred) { |
556 pending_request.deferred_message_queue.swap(q); | 539 pending_request.deferred_message_queue.swap(q); |
557 return; | 540 return; |
558 } | 541 } |
559 } | 542 } |
560 } | 543 } |
561 } | 544 } |
562 | 545 |
563 webkit_glue::ResourceLoaderBridge* ResourceDispatcher::CreateBridge( | 546 webkit_glue::ResourceLoaderBridge* ResourceDispatcher::CreateBridge( |
564 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info, | 547 const webkit_glue::ResourceLoaderBridge::RequestInfo& request_info) { |
565 int host_renderer_id, | 548 return new webkit_glue::IPCResourceLoaderBridge(this, request_info); |
566 int host_render_view_id) { | |
567 return new webkit_glue::IPCResourceLoaderBridge(this, request_info, | |
568 host_renderer_id, | |
569 host_render_view_id); | |
570 } | 549 } |
571 | 550 |
572 bool ResourceDispatcher::IsResourceDispatcherMessage( | 551 bool ResourceDispatcher::IsResourceDispatcherMessage( |
573 const IPC::Message& message) { | 552 const IPC::Message& message) { |
574 switch (message.type()) { | 553 switch (message.type()) { |
575 case ViewMsg_Resource_UploadProgress::ID: | 554 case ViewMsg_Resource_UploadProgress::ID: |
576 case ViewMsg_Resource_ReceivedResponse::ID: | 555 case ViewMsg_Resource_ReceivedResponse::ID: |
577 case ViewMsg_Resource_ReceivedCachedMetadata::ID: | 556 case ViewMsg_Resource_ReceivedCachedMetadata::ID: |
578 case ViewMsg_Resource_ReceivedRedirect::ID: | 557 case ViewMsg_Resource_ReceivedRedirect::ID: |
579 case ViewMsg_Resource_DataReceived::ID: | 558 case ViewMsg_Resource_DataReceived::ID: |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 | 591 |
613 // static | 592 // static |
614 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { | 593 void ResourceDispatcher::ReleaseResourcesInMessageQueue(MessageQueue* queue) { |
615 while (!queue->empty()) { | 594 while (!queue->empty()) { |
616 IPC::Message* message = queue->front(); | 595 IPC::Message* message = queue->front(); |
617 ReleaseResourcesInDataMessage(*message); | 596 ReleaseResourcesInDataMessage(*message); |
618 queue->pop_front(); | 597 queue->pop_front(); |
619 delete message; | 598 delete message; |
620 } | 599 } |
621 } | 600 } |
OLD | NEW |