- add sources.
[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/browser/worker_host/worker_service_impl.h"
10 #include "content/common/net/url_request_user_data.h"
11 #include "content/public/browser/global_request_id.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(
27     net::URLRequest* request,
28     ResourceType::Type resource_type,
29     ResourceContext* context,
30     int render_process_id,
31     int render_view_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           resource_type == ResourceType::MAIN_FRAME,  // is_main_frame
41           0,                                 // frame_id
42           false,                             // parent_is_main_frame
43           0,                                 // parent_frame_id
44           resource_type,                     // resource_type
45           PAGE_TRANSITION_LINK,              // transition_type
46           false,                             // is_download
47           false,                             // is_stream
48           true,                              // allow_download
49           false,                             // has_user_gesture
50           WebKit::WebReferrerPolicyDefault,  // referrer_policy
51           context,                           // context
52           base::WeakPtr<ResourceMessageFilter>(),  // filter
53           is_async);                         // is_async
54   info->AssociateWithRequest(request);
55 }
56
57 // static
58 bool ResourceRequestInfo::GetRenderViewForRequest(
59     const net::URLRequest* request,
60     int* render_process_id,
61     int* render_view_id) {
62   URLRequestUserData* user_data = static_cast<URLRequestUserData*>(
63       request->GetUserData(URLRequestUserData::kUserDataKey));
64   if (!user_data)
65     return false;
66   *render_process_id = user_data->render_process_id();
67   *render_view_id = user_data->render_view_id();
68   return true;
69 }
70
71 // ----------------------------------------------------------------------------
72 // ResourceRequestInfoImpl
73
74 // static
75 ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
76     net::URLRequest* request) {
77   return static_cast<ResourceRequestInfoImpl*>(request->GetUserData(NULL));
78 }
79
80 // static
81 const ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
82     const net::URLRequest* request) {
83   return ForRequest(const_cast<net::URLRequest*>(request));
84 }
85
86 ResourceRequestInfoImpl::ResourceRequestInfoImpl(
87     int process_type,
88     int child_id,
89     int route_id,
90     int origin_pid,
91     int request_id,
92     bool is_main_frame,
93     int64 frame_id,
94     bool parent_is_main_frame,
95     int64 parent_frame_id,
96     ResourceType::Type resource_type,
97     PageTransition transition_type,
98     bool is_download,
99     bool is_stream,
100     bool allow_download,
101     bool has_user_gesture,
102     WebKit::WebReferrerPolicy referrer_policy,
103     ResourceContext* context,
104     base::WeakPtr<ResourceMessageFilter> filter,
105     bool is_async)
106     : cross_site_handler_(NULL),
107       process_type_(process_type),
108       child_id_(child_id),
109       route_id_(route_id),
110       origin_pid_(origin_pid),
111       request_id_(request_id),
112       is_main_frame_(is_main_frame),
113       frame_id_(frame_id),
114       parent_is_main_frame_(parent_is_main_frame),
115       parent_frame_id_(parent_frame_id),
116       is_download_(is_download),
117       is_stream_(is_stream),
118       allow_download_(allow_download),
119       has_user_gesture_(has_user_gesture),
120       was_ignored_by_handler_(false),
121       resource_type_(resource_type),
122       transition_type_(transition_type),
123       memory_cost_(0),
124       referrer_policy_(referrer_policy),
125       context_(context),
126       filter_(filter),
127       is_async_(is_async) {
128 }
129
130 ResourceRequestInfoImpl::~ResourceRequestInfoImpl() {
131 }
132
133 ResourceContext* ResourceRequestInfoImpl::GetContext() const {
134   return context_;
135 }
136
137 int ResourceRequestInfoImpl::GetChildID() const {
138   return child_id_;
139 }
140
141 int ResourceRequestInfoImpl::GetRouteID() const {
142   return route_id_;
143 }
144
145 int ResourceRequestInfoImpl::GetOriginPID() const {
146   return origin_pid_;
147 }
148
149 int ResourceRequestInfoImpl::GetRequestID() const {
150   return request_id_;
151 }
152
153 bool ResourceRequestInfoImpl::IsMainFrame() const {
154   return is_main_frame_;
155 }
156
157 int64 ResourceRequestInfoImpl::GetFrameID() const {
158   return frame_id_;
159 }
160
161 bool ResourceRequestInfoImpl::ParentIsMainFrame() const {
162   return parent_is_main_frame_;
163 }
164
165 int64 ResourceRequestInfoImpl::GetParentFrameID() const {
166   return parent_frame_id_;
167 }
168
169 ResourceType::Type ResourceRequestInfoImpl::GetResourceType() const {
170   return resource_type_;
171 }
172
173 WebKit::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const {
174   return referrer_policy_;
175 }
176
177 PageTransition ResourceRequestInfoImpl::GetPageTransition() const {
178   return transition_type_;
179 }
180
181 bool ResourceRequestInfoImpl::HasUserGesture() const {
182   return has_user_gesture_;
183 }
184
185 bool ResourceRequestInfoImpl::WasIgnoredByHandler() const {
186   return was_ignored_by_handler_;
187 }
188
189 bool ResourceRequestInfoImpl::GetAssociatedRenderView(
190     int* render_process_id,
191     int* render_view_id) const {
192   // If the request is from the worker process, find a content that owns the
193   // worker.
194   if (process_type_ == PROCESS_TYPE_WORKER) {
195     // Need to display some related UI for this network request - pick an
196     // arbitrary parent to do so.
197     if (!WorkerServiceImpl::GetInstance()->GetRendererForWorker(
198             child_id_, render_process_id, render_view_id)) {
199       *render_process_id = -1;
200       *render_view_id = -1;
201       return false;
202     }
203   } else if (process_type_ == PROCESS_TYPE_PLUGIN) {
204     *render_process_id = origin_pid_;
205     *render_view_id = route_id_;
206   } else {
207     *render_process_id = child_id_;
208     *render_view_id = route_id_;
209   }
210   return true;
211 }
212
213 bool ResourceRequestInfoImpl::IsAsync() const {
214   return is_async_;
215 }
216
217 void ResourceRequestInfoImpl::AssociateWithRequest(net::URLRequest* request) {
218   request->SetUserData(NULL, this);
219   int render_process_id;
220   int render_view_id;
221   if (GetAssociatedRenderView(&render_process_id, &render_view_id)) {
222     request->SetUserData(
223         URLRequestUserData::kUserDataKey,
224         new URLRequestUserData(render_process_id, render_view_id));
225   }
226 }
227
228 GlobalRequestID ResourceRequestInfoImpl::GetGlobalRequestID() const {
229   return GlobalRequestID(child_id_, request_id_);
230 }
231
232 GlobalRoutingID ResourceRequestInfoImpl::GetGlobalRoutingID() const {
233   return GlobalRoutingID(child_id_, route_id_);
234 }
235
236 void ResourceRequestInfoImpl::UpdateForTransfer(
237     int child_id,
238     int route_id,
239     int origin_pid,
240     int request_id,
241     int64 frame_id,
242     int64 parent_frame_id,
243     base::WeakPtr<ResourceMessageFilter> filter) {
244   child_id_ = child_id;
245   route_id_ = route_id;
246   origin_pid_ = origin_pid;
247   request_id_ = request_id;
248   frame_id_ = frame_id;
249   filter_ = filter;
250 }
251
252 }  // namespace content