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

Side by Side Diff: content/child/resource_dispatcher.h

Issue 274473003: Reland another small part of r267947. Second attempt. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: REBASE Created 6 years, 7 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 | « no previous file | content/child/resource_dispatcher.cc » ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef CONTENT_CHILD_RESOURCE_DISPATCHER_H_ 7 #ifndef CONTENT_CHILD_RESOURCE_DISPATCHER_H_
8 #define CONTENT_CHILD_RESOURCE_DISPATCHER_H_ 8 #define CONTENT_CHILD_RESOURCE_DISPATCHER_H_
9 9
10 #include <deque> 10 #include <deque>
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 // IPC::Listener implementation. 46 // IPC::Listener implementation.
47 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 47 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
48 48
49 // Creates a ResourceLoaderBridge for this type of dispatcher, this is so 49 // Creates a ResourceLoaderBridge for this type of dispatcher, this is so
50 // this can be tested regardless of the ResourceLoaderBridge::Create 50 // this can be tested regardless of the ResourceLoaderBridge::Create
51 // implementation. 51 // implementation.
52 webkit_glue::ResourceLoaderBridge* CreateBridge( 52 webkit_glue::ResourceLoaderBridge* CreateBridge(
53 const RequestInfo& request_info); 53 const RequestInfo& request_info);
54 54
55 // Adds a request from the pending_requests_ list, returning the new 55 // Adds a request from the |pending_requests_| list, returning the new
56 // requests' ID 56 // requests' ID.
57 int AddPendingRequest(RequestPeer* callback, 57 int AddPendingRequest(RequestPeer* callback,
58 ResourceType::Type resource_type, 58 ResourceType::Type resource_type,
59 int origin_pid, 59 int origin_pid,
60 const GURL& frame_origin, 60 const GURL& frame_origin,
61 const GURL& request_url); 61 const GURL& request_url,
62 bool download_to_file);
62 63
63 // Removes a request from the pending_requests_ list, returning true if the 64 // Removes a request from the |pending_requests_| list, returning true if the
64 // request was found and removed. 65 // request was found and removed.
65 bool RemovePendingRequest(int request_id); 66 bool RemovePendingRequest(int request_id);
66 67
67 // Cancels a request in the pending_requests_ list. 68 // Cancels a request in the |pending_requests_| list.
68 void CancelPendingRequest(int request_id); 69 void CancelPendingRequest(int request_id);
69 70
70 IPC::Sender* message_sender() const {
71 return message_sender_;
72 }
73
74 // Toggles the is_deferred attribute for the specified request. 71 // Toggles the is_deferred attribute for the specified request.
75 void SetDefersLoading(int request_id, bool value); 72 void SetDefersLoading(int request_id, bool value);
76 73
77 // Indicates the priority of the specified request changed. 74 // Indicates the priority of the specified request changed.
78 void DidChangePriority(int routing_id, int request_id, 75 void DidChangePriority(int routing_id,
76 int request_id,
79 net::RequestPriority new_priority, 77 net::RequestPriority new_priority,
80 int intra_priority_value); 78 int intra_priority_value);
81 79
80 IPC::Sender* message_sender() const { return message_sender_; }
81
82 // This does not take ownership of the delegate. It is expected that the 82 // This does not take ownership of the delegate. It is expected that the
83 // delegate have a longer lifetime than the ResourceDispatcher. 83 // delegate have a longer lifetime than the ResourceDispatcher.
84 void set_delegate(ResourceDispatcherDelegate* delegate) { 84 void set_delegate(ResourceDispatcherDelegate* delegate) {
85 delegate_ = delegate; 85 delegate_ = delegate;
86 } 86 }
87 87
88 // Remembers IO thread timestamp for next resource message. 88 // Remembers IO thread timestamp for next resource message.
89 void set_io_timestamp(base::TimeTicks io_timestamp) { 89 void set_io_timestamp(base::TimeTicks io_timestamp) {
90 io_timestamp_ = io_timestamp; 90 io_timestamp_ = io_timestamp;
91 } 91 }
92 92
93 private: 93 private:
94 friend class ResourceDispatcherTest; 94 friend class ResourceDispatcherTest;
95 95
96 typedef std::deque<IPC::Message*> MessageQueue; 96 typedef std::deque<IPC::Message*> MessageQueue;
97 struct PendingRequestInfo { 97 struct PendingRequestInfo {
98 PendingRequestInfo(); 98 PendingRequestInfo();
99 99
100 PendingRequestInfo(RequestPeer* peer, 100 PendingRequestInfo(RequestPeer* peer,
101 ResourceType::Type resource_type, 101 ResourceType::Type resource_type,
102 int origin_pid, 102 int origin_pid,
103 const GURL& frame_origin, 103 const GURL& frame_origin,
104 const GURL& request_url); 104 const GURL& request_url,
105 bool download_to_file);
105 106
106 ~PendingRequestInfo(); 107 ~PendingRequestInfo();
107 108
108 RequestPeer* peer; 109 RequestPeer* peer;
109 ResourceType::Type resource_type; 110 ResourceType::Type resource_type;
110 // The PID of the original process which issued this request. This gets 111 // The PID of the original process which issued this request. This gets
111 // non-zero only for a request proxied by another renderer, particularly 112 // non-zero only for a request proxied by another renderer, particularly
112 // requests from plugins. 113 // requests from plugins.
113 int origin_pid; 114 int origin_pid;
114 MessageQueue deferred_message_queue; 115 MessageQueue deferred_message_queue;
115 bool is_deferred; 116 bool is_deferred;
116 bool is_canceled; 117 bool is_canceled;
117 // Original requested url. 118 // Original requested url.
118 GURL url; 119 GURL url;
119 // The security origin of the frame that initiates this request. 120 // The security origin of the frame that initiates this request.
120 GURL frame_origin; 121 GURL frame_origin;
121 // The url of the latest response even in case of redirection. 122 // The url of the latest response even in case of redirection.
122 GURL response_url; 123 GURL response_url;
124 bool download_to_file;
123 linked_ptr<IPC::Message> pending_redirect_message; 125 linked_ptr<IPC::Message> pending_redirect_message;
124 base::TimeTicks request_start; 126 base::TimeTicks request_start;
125 base::TimeTicks response_start; 127 base::TimeTicks response_start;
126 base::TimeTicks completion_time; 128 base::TimeTicks completion_time;
127 linked_ptr<base::SharedMemory> buffer; 129 linked_ptr<base::SharedMemory> buffer;
128 linked_ptr<SiteIsolationResponseMetaData> site_isolation_metadata; 130 linked_ptr<SiteIsolationResponseMetaData> site_isolation_metadata;
129 bool blocked_response; 131 bool blocked_response;
130 int buffer_size; 132 int buffer_size;
131 }; 133 };
132 typedef base::hash_map<int, PendingRequestInfo> PendingRequestList; 134 typedef base::hash_map<int, PendingRequestInfo> PendingRequestList;
133 135
134 // Helper to lookup the info based on the request_id. 136 // Helper to lookup the info based on the request_id.
135 // May return NULL if the request as been canceled from the client side. 137 // May return NULL if the request as been canceled from the client side.
136 PendingRequestInfo* GetPendingRequestInfo(int request_id); 138 PendingRequestInfo* GetPendingRequestInfo(int request_id);
137 139
138 // Follows redirect, if any, for the given request. 140 // Follows redirect, if any, for the given request.
139 void FollowPendingRedirect(int request_id, PendingRequestInfo& request_info); 141 void FollowPendingRedirect(int request_id, PendingRequestInfo& request_info);
140 142
141 // Message response handlers, called by the message handler for this process. 143 // Message response handlers, called by the message handler for this process.
142 void OnUploadProgress( 144 void OnUploadProgress(int request_id, int64 position, int64 size);
143 int request_id,
144 int64 position,
145 int64 size);
146 void OnReceivedResponse(int request_id, const ResourceResponseHead&); 145 void OnReceivedResponse(int request_id, const ResourceResponseHead&);
147 void OnReceivedCachedMetadata(int request_id, const std::vector<char>& data); 146 void OnReceivedCachedMetadata(int request_id, const std::vector<char>& data);
148 void OnReceivedRedirect( 147 void OnReceivedRedirect(int request_id,
149 int request_id, 148 const GURL& new_url,
150 const GURL& new_url, 149 const ResourceResponseHead& response_head);
151 const ResourceResponseHead& response_head); 150 void OnSetDataBuffer(int request_id,
152 void OnSetDataBuffer( 151 base::SharedMemoryHandle shm_handle,
153 int request_id, 152 int shm_size,
154 base::SharedMemoryHandle shm_handle, 153 base::ProcessId renderer_pid);
155 int shm_size, 154 void OnReceivedData(int request_id,
156 base::ProcessId renderer_pid); 155 int data_offset,
157 void OnReceivedData( 156 int data_length,
158 int request_id, 157 int encoded_data_length);
159 int data_offset, 158 void OnDownloadedData(int request_id, int data_len, int encoded_data_length);
160 int data_length,
161 int encoded_data_length);
162 void OnDownloadedData(
163 int request_id,
164 int data_len,
165 int encoded_data_length);
166 void OnRequestComplete( 159 void OnRequestComplete(
167 int request_id, 160 int request_id,
168 const ResourceMsg_RequestCompleteData &request_complete_data); 161 const ResourceMsg_RequestCompleteData& request_complete_data);
169 162
170 // Dispatch the message to one of the message response handlers. 163 // Dispatch the message to one of the message response handlers.
171 void DispatchMessage(const IPC::Message& message); 164 void DispatchMessage(const IPC::Message& message);
172 165
173 // Dispatch any deferred messages for the given request, provided it is not 166 // Dispatch any deferred messages for the given request, provided it is not
174 // again in the deferred state. 167 // again in the deferred state.
175 void FlushDeferredMessages(int request_id); 168 void FlushDeferredMessages(int request_id);
176 169
177 void ToResourceResponseInfo( 170 void ToResourceResponseInfo(
178 const PendingRequestInfo& request_info, 171 const PendingRequestInfo& request_info,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 206
214 // IO thread timestamp for ongoing IPC message. 207 // IO thread timestamp for ongoing IPC message.
215 base::TimeTicks io_timestamp_; 208 base::TimeTicks io_timestamp_;
216 209
217 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcher); 210 DISALLOW_COPY_AND_ASSIGN(ResourceDispatcher);
218 }; 211 };
219 212
220 } // namespace content 213 } // namespace content
221 214
222 #endif // CONTENT_CHILD_RESOURCE_DISPATCHER_H_ 215 #endif // CONTENT_CHILD_RESOURCE_DISPATCHER_H_
OLDNEW
« no previous file with comments | « no previous file | content/child/resource_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698