OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/renderer_host/resource_request_info_impl.h" | |
6 | |
7 #include "content/browser/worker_host/worker_service_impl.h" | |
8 #include "content/common/net/url_request_user_data.h" | |
9 #include "content/public/browser/global_request_id.h" | |
10 #include "net/url_request/url_request.h" | |
11 #include "webkit/blob/blob_data.h" | |
12 | |
13 namespace content { | |
14 | |
15 // ---------------------------------------------------------------------------- | |
16 // ResourceRequestInfo | |
17 | |
18 // static | |
19 const ResourceRequestInfo* ResourceRequestInfo::ForRequest( | |
20 const net::URLRequest* request) { | |
21 return ResourceRequestInfoImpl::ForRequest(request); | |
22 } | |
23 | |
24 // static | |
25 void ResourceRequestInfo::AllocateForTesting( | |
26 net::URLRequest* request, | |
27 ResourceType::Type resource_type, | |
28 ResourceContext* context, | |
29 int render_process_id, | |
30 int render_view_id) { | |
31 ResourceRequestInfoImpl* info = | |
32 new ResourceRequestInfoImpl( | |
33 PROCESS_TYPE_RENDERER, // process_type | |
34 render_process_id, // child_id | |
35 render_view_id, // route_id | |
36 0, // origin_pid | |
37 0, // request_id | |
38 resource_type == ResourceType::MAIN_FRAME, // is_main_frame | |
39 0, // frame_id | |
40 false, // parent_is_main_frame | |
41 0, // parent_frame_id | |
42 resource_type, // resource_type | |
43 PAGE_TRANSITION_LINK, // transition_type | |
44 false, // is_download | |
45 true, // allow_download | |
46 false, // has_user_gesture | |
47 WebKit::WebReferrerPolicyDefault, // referrer_policy | |
48 context); // context | |
49 info->AssociateWithRequest(request); | |
50 } | |
51 | |
52 // static | |
53 bool ResourceRequestInfo::GetRenderViewForRequest( | |
54 const net::URLRequest* request, | |
55 int* render_process_id, | |
56 int* render_view_id) { | |
57 URLRequestUserData* user_data = static_cast<URLRequestUserData*>( | |
58 request->GetUserData(URLRequestUserData::kUserDataKey)); | |
59 if (!user_data) | |
60 return false; | |
61 *render_process_id = user_data->render_process_id(); | |
62 *render_view_id = user_data->render_view_id(); | |
63 return true; | |
64 } | |
65 | |
66 // ---------------------------------------------------------------------------- | |
67 // ResourceRequestInfoImpl | |
68 | |
69 // static | |
70 ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest( | |
71 net::URLRequest* request) { | |
72 return static_cast<ResourceRequestInfoImpl*>(request->GetUserData(NULL)); | |
73 } | |
74 | |
75 // static | |
76 const ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest( | |
77 const net::URLRequest* request) { | |
78 return ForRequest(const_cast<net::URLRequest*>(request)); | |
79 } | |
80 | |
81 ResourceRequestInfoImpl::ResourceRequestInfoImpl( | |
82 ProcessType process_type, | |
83 int child_id, | |
84 int route_id, | |
85 int origin_pid, | |
86 int request_id, | |
87 bool is_main_frame, | |
88 int64 frame_id, | |
89 bool parent_is_main_frame, | |
90 int64 parent_frame_id, | |
91 ResourceType::Type resource_type, | |
92 PageTransition transition_type, | |
93 bool is_download, | |
94 bool allow_download, | |
95 bool has_user_gesture, | |
96 WebKit::WebReferrerPolicy referrer_policy, | |
97 ResourceContext* context) | |
98 : cross_site_handler_(NULL), | |
99 async_handler_(NULL), | |
100 process_type_(process_type), | |
101 child_id_(child_id), | |
102 route_id_(route_id), | |
103 origin_pid_(origin_pid), | |
104 request_id_(request_id), | |
105 is_main_frame_(is_main_frame), | |
106 frame_id_(frame_id), | |
107 parent_is_main_frame_(parent_is_main_frame), | |
108 parent_frame_id_(parent_frame_id), | |
109 is_download_(is_download), | |
110 allow_download_(allow_download), | |
111 has_user_gesture_(has_user_gesture), | |
112 was_ignored_by_handler_(false), | |
113 resource_type_(resource_type), | |
114 transition_type_(transition_type), | |
115 memory_cost_(0), | |
116 referrer_policy_(referrer_policy), | |
117 context_(context) { | |
118 } | |
119 | |
120 ResourceRequestInfoImpl::~ResourceRequestInfoImpl() { | |
121 } | |
122 | |
123 ResourceContext* ResourceRequestInfoImpl::GetContext() const { | |
124 return context_; | |
125 } | |
126 | |
127 int ResourceRequestInfoImpl::GetChildID() const { | |
128 return child_id_; | |
129 } | |
130 | |
131 int ResourceRequestInfoImpl::GetRouteID() const { | |
132 return route_id_; | |
133 } | |
134 | |
135 int ResourceRequestInfoImpl::GetOriginPID() const { | |
136 return origin_pid_; | |
137 } | |
138 | |
139 int ResourceRequestInfoImpl::GetRequestID() const { | |
140 return request_id_; | |
141 } | |
142 | |
143 bool ResourceRequestInfoImpl::IsMainFrame() const { | |
144 return is_main_frame_; | |
145 } | |
146 | |
147 int64 ResourceRequestInfoImpl::GetFrameID() const { | |
148 return frame_id_; | |
149 } | |
150 | |
151 bool ResourceRequestInfoImpl::ParentIsMainFrame() const { | |
152 return parent_is_main_frame_; | |
153 } | |
154 | |
155 int64 ResourceRequestInfoImpl::GetParentFrameID() const { | |
156 return parent_frame_id_; | |
157 } | |
158 | |
159 ResourceType::Type ResourceRequestInfoImpl::GetResourceType() const { | |
160 return resource_type_; | |
161 } | |
162 | |
163 WebKit::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const { | |
164 return referrer_policy_; | |
165 } | |
166 | |
167 bool ResourceRequestInfoImpl::HasUserGesture() const { | |
168 return has_user_gesture_; | |
169 } | |
170 | |
171 bool ResourceRequestInfoImpl::WasIgnoredByHandler() const { | |
172 return was_ignored_by_handler_; | |
173 } | |
174 | |
175 bool ResourceRequestInfoImpl::GetAssociatedRenderView( | |
176 int* render_process_id, | |
177 int* render_view_id) const { | |
178 // If the request is from the worker process, find a content that owns the | |
179 // worker. | |
180 if (process_type_ == PROCESS_TYPE_WORKER) { | |
181 // Need to display some related UI for this network request - pick an | |
182 // arbitrary parent to do so. | |
183 if (!WorkerServiceImpl::GetInstance()->GetRendererForWorker( | |
184 child_id_, render_process_id, render_view_id)) { | |
185 *render_process_id = -1; | |
186 *render_view_id = -1; | |
187 return false; | |
188 } | |
189 } else { | |
190 *render_process_id = child_id_; | |
191 *render_view_id = route_id_; | |
192 } | |
193 return true; | |
194 } | |
195 | |
196 bool ResourceRequestInfoImpl::IsAsync() const { | |
197 return async_handler_ != NULL; | |
198 } | |
199 | |
200 void ResourceRequestInfoImpl::AssociateWithRequest(net::URLRequest* request) { | |
201 request->SetUserData(NULL, this); | |
202 int render_process_id; | |
203 int render_view_id; | |
204 if (GetAssociatedRenderView(&render_process_id, &render_view_id)) { | |
205 request->SetUserData( | |
206 URLRequestUserData::kUserDataKey, | |
207 new URLRequestUserData(render_process_id, render_view_id)); | |
208 } | |
209 } | |
210 | |
211 GlobalRequestID ResourceRequestInfoImpl::GetGlobalRequestID() const { | |
212 return GlobalRequestID(child_id_, request_id_); | |
213 } | |
214 | |
215 void ResourceRequestInfoImpl::set_requested_blob_data( | |
216 webkit_blob::BlobData* data) { | |
217 requested_blob_data_ = data; | |
218 } | |
219 | |
220 } // namespace content | |
OLD | NEW |