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 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(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 61bool 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 78ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest( 79 net::URLRequest* request) { 80 return static_cast<ResourceRequestInfoImpl*>(request->GetUserData(NULL)); 81} 82 83// static 84const ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest( 85 const net::URLRequest* request) { 86 return ForRequest(const_cast<net::URLRequest*>(request)); 87} 88 89ResourceRequestInfoImpl::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 140ResourceRequestInfoImpl::~ResourceRequestInfoImpl() { 141} 142 143ResourceContext* ResourceRequestInfoImpl::GetContext() const { 144 return context_; 145} 146 147int ResourceRequestInfoImpl::GetChildID() const { 148 return child_id_; 149} 150 151int ResourceRequestInfoImpl::GetRouteID() const { 152 return route_id_; 153} 154 155int ResourceRequestInfoImpl::GetOriginPID() const { 156 return origin_pid_; 157} 158 159int ResourceRequestInfoImpl::GetRequestID() const { 160 return request_id_; 161} 162 163int ResourceRequestInfoImpl::GetRenderFrameID() const { 164 return render_frame_id_; 165} 166 167bool ResourceRequestInfoImpl::IsMainFrame() const { 168 return is_main_frame_; 169} 170 171bool ResourceRequestInfoImpl::ParentIsMainFrame() const { 172 return parent_is_main_frame_; 173} 174 175int ResourceRequestInfoImpl::GetParentRenderFrameID() const { 176 return parent_render_frame_id_; 177} 178 179ResourceType ResourceRequestInfoImpl::GetResourceType() const { 180 return resource_type_; 181} 182 183int ResourceRequestInfoImpl::GetProcessType() const { 184 return process_type_; 185} 186 187blink::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const { 188 return referrer_policy_; 189} 190 191blink::WebPageVisibilityState 192ResourceRequestInfoImpl::GetVisibilityState() const { 193 return visibility_state_; 194} 195 196ui::PageTransition ResourceRequestInfoImpl::GetPageTransition() const { 197 return transition_type_; 198} 199 200bool ResourceRequestInfoImpl::HasUserGesture() const { 201 return has_user_gesture_; 202} 203 204bool ResourceRequestInfoImpl::WasIgnoredByHandler() const { 205 return was_ignored_by_handler_; 206} 207 208bool 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 221bool ResourceRequestInfoImpl::IsAsync() const { 222 return is_async_; 223} 224 225bool ResourceRequestInfoImpl::IsDownload() const { 226 return is_download_; 227} 228 229void 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 240GlobalRequestID ResourceRequestInfoImpl::GetGlobalRequestID() const { 241 return GlobalRequestID(child_id_, request_id_); 242} 243 244GlobalRoutingID ResourceRequestInfoImpl::GetGlobalRoutingID() const { 245 return GlobalRoutingID(child_id_, route_id_); 246} 247 248void 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 264