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