Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / loader / resource_request_info_impl.cc
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/loader/resource_request_info_impl.h"
6
7 #include "content/browser/loader/global_routing_id.h"
8 #include "content/browser/loader/resource_message_filter.h"
9 #include "content/common/net/url_request_user_data.h"
10 #include "content/public/browser/global_request_id.h"
11 #include "content/public/common/process_type.h"
12 #include "net/url_request/url_request.h"
13
14 namespace content {
15
16 // ----------------------------------------------------------------------------
17 // ResourceRequestInfo
18
19 // static
20 const ResourceRequestInfo* ResourceRequestInfo::ForRequest(
21     const net::URLRequest* request) {
22   return ResourceRequestInfoImpl::ForRequest(request);
23 }
24
25 // static
26 void ResourceRequestInfo::AllocateForTesting(net::URLRequest* request,
27                                              ResourceType resource_type,
28                                              ResourceContext* context,
29                                              int render_process_id,
30                                              int render_view_id,
31                                              int render_frame_id,
32                                              bool is_async) {
33   ResourceRequestInfoImpl* info =
34       new ResourceRequestInfoImpl(
35           PROCESS_TYPE_RENDERER,             // process_type
36           render_process_id,                 // child_id
37           render_view_id,                    // route_id
38           0,                                 // origin_pid
39           0,                                 // request_id
40           render_frame_id,                   // render_frame_id
41           resource_type == RESOURCE_TYPE_MAIN_FRAME,  // is_main_frame
42           false,                             // parent_is_main_frame
43           0,                                 // parent_render_frame_id
44           resource_type,                     // resource_type
45           ui::PAGE_TRANSITION_LINK,          // transition_type
46           false,                             // should_replace_current_entry
47           false,                             // is_download
48           false,                             // is_stream
49           true,                              // allow_download
50           false,                             // has_user_gesture
51           false,                             // enable load timing
52           blink::WebReferrerPolicyDefault,   // referrer_policy
53           blink::WebPageVisibilityStateVisible,  // visibility_state
54           context,                           // context
55           base::WeakPtr<ResourceMessageFilter>(),  // filter
56           is_async);                         // is_async
57   info->AssociateWithRequest(request);
58 }
59
60 // static
61 bool ResourceRequestInfo::GetRenderFrameForRequest(
62     const net::URLRequest* request,
63     int* render_process_id,
64     int* render_frame_id) {
65   URLRequestUserData* user_data = static_cast<URLRequestUserData*>(
66       request->GetUserData(URLRequestUserData::kUserDataKey));
67   if (!user_data)
68     return false;
69   *render_process_id = user_data->render_process_id();
70   *render_frame_id = user_data->render_frame_id();
71   return true;
72 }
73
74 // ----------------------------------------------------------------------------
75 // ResourceRequestInfoImpl
76
77 // static
78 ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
79     net::URLRequest* request) {
80   return static_cast<ResourceRequestInfoImpl*>(request->GetUserData(NULL));
81 }
82
83 // static
84 const ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
85     const net::URLRequest* request) {
86   return ForRequest(const_cast<net::URLRequest*>(request));
87 }
88
89 ResourceRequestInfoImpl::ResourceRequestInfoImpl(
90     int process_type,
91     int child_id,
92     int route_id,
93     int origin_pid,
94     int request_id,
95     int render_frame_id,
96     bool is_main_frame,
97     bool parent_is_main_frame,
98     int parent_render_frame_id,
99     ResourceType resource_type,
100     ui::PageTransition transition_type,
101     bool should_replace_current_entry,
102     bool is_download,
103     bool is_stream,
104     bool allow_download,
105     bool has_user_gesture,
106     bool enable_load_timing,
107     blink::WebReferrerPolicy referrer_policy,
108     blink::WebPageVisibilityState visibility_state,
109     ResourceContext* context,
110     base::WeakPtr<ResourceMessageFilter> filter,
111     bool is_async)
112     : cross_site_handler_(NULL),
113       detachable_handler_(NULL),
114       process_type_(process_type),
115       child_id_(child_id),
116       route_id_(route_id),
117       origin_pid_(origin_pid),
118       request_id_(request_id),
119       render_frame_id_(render_frame_id),
120       is_main_frame_(is_main_frame),
121       parent_is_main_frame_(parent_is_main_frame),
122       parent_render_frame_id_(parent_render_frame_id),
123       should_replace_current_entry_(should_replace_current_entry),
124       is_download_(is_download),
125       is_stream_(is_stream),
126       allow_download_(allow_download),
127       has_user_gesture_(has_user_gesture),
128       enable_load_timing_(enable_load_timing),
129       was_ignored_by_handler_(false),
130       resource_type_(resource_type),
131       transition_type_(transition_type),
132       memory_cost_(0),
133       referrer_policy_(referrer_policy),
134       visibility_state_(visibility_state),
135       context_(context),
136       filter_(filter),
137       is_async_(is_async) {
138 }
139
140 ResourceRequestInfoImpl::~ResourceRequestInfoImpl() {
141 }
142
143 ResourceContext* ResourceRequestInfoImpl::GetContext() const {
144   return context_;
145 }
146
147 int ResourceRequestInfoImpl::GetChildID() const {
148   return child_id_;
149 }
150
151 int ResourceRequestInfoImpl::GetRouteID() const {
152   return route_id_;
153 }
154
155 int ResourceRequestInfoImpl::GetOriginPID() const {
156   return origin_pid_;
157 }
158
159 int ResourceRequestInfoImpl::GetRequestID() const {
160   return request_id_;
161 }
162
163 int ResourceRequestInfoImpl::GetRenderFrameID() const {
164   return render_frame_id_;
165 }
166
167 bool ResourceRequestInfoImpl::IsMainFrame() const {
168   return is_main_frame_;
169 }
170
171 bool ResourceRequestInfoImpl::ParentIsMainFrame() const {
172   return parent_is_main_frame_;
173 }
174
175 int ResourceRequestInfoImpl::GetParentRenderFrameID() const {
176   return parent_render_frame_id_;
177 }
178
179 ResourceType ResourceRequestInfoImpl::GetResourceType() const {
180   return resource_type_;
181 }
182
183 int ResourceRequestInfoImpl::GetProcessType() const {
184   return process_type_;
185 }
186
187 blink::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const {
188   return referrer_policy_;
189 }
190
191 blink::WebPageVisibilityState
192 ResourceRequestInfoImpl::GetVisibilityState() const {
193   return visibility_state_;
194 }
195
196 ui::PageTransition ResourceRequestInfoImpl::GetPageTransition() const {
197   return transition_type_;
198 }
199
200 bool ResourceRequestInfoImpl::HasUserGesture() const {
201   return has_user_gesture_;
202 }
203
204 bool ResourceRequestInfoImpl::WasIgnoredByHandler() const {
205   return was_ignored_by_handler_;
206 }
207
208 bool ResourceRequestInfoImpl::GetAssociatedRenderFrame(
209     int* render_process_id,
210     int* render_frame_id) const {
211   if (process_type_ == PROCESS_TYPE_PLUGIN) {
212     *render_process_id = origin_pid_;
213     *render_frame_id = render_frame_id_;
214   } else {
215     *render_process_id = child_id_;
216     *render_frame_id = render_frame_id_;
217   }
218   return true;
219 }
220
221 bool ResourceRequestInfoImpl::IsAsync() const {
222   return is_async_;
223 }
224
225 bool ResourceRequestInfoImpl::IsDownload() const {
226   return is_download_;
227 }
228
229 void ResourceRequestInfoImpl::AssociateWithRequest(net::URLRequest* request) {
230   request->SetUserData(NULL, this);
231   int render_process_id;
232   int render_frame_id;
233   if (GetAssociatedRenderFrame(&render_process_id, &render_frame_id)) {
234     request->SetUserData(
235         URLRequestUserData::kUserDataKey,
236         new URLRequestUserData(render_process_id, render_frame_id));
237   }
238 }
239
240 GlobalRequestID ResourceRequestInfoImpl::GetGlobalRequestID() const {
241   return GlobalRequestID(child_id_, request_id_);
242 }
243
244 GlobalRoutingID ResourceRequestInfoImpl::GetGlobalRoutingID() const {
245   return GlobalRoutingID(child_id_, route_id_);
246 }
247
248 void ResourceRequestInfoImpl::UpdateForTransfer(
249     int child_id,
250     int route_id,
251     int origin_pid,
252     int request_id,
253     int parent_render_frame_id,
254     base::WeakPtr<ResourceMessageFilter> filter) {
255   child_id_ = child_id;
256   route_id_ = route_id;
257   origin_pid_ = origin_pid;
258   request_id_ = request_id;
259   parent_render_frame_id_ = parent_render_frame_id;
260   filter_ = filter;
261 }
262
263 }  // namespace content