summaryrefslogtreecommitdiffstats
path: root/content/browser/loader/resource_request_info_impl.cc
diff options
context:
space:
mode:
authordarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 08:02:44 +0000
committerdarin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-05 08:02:44 +0000
commit678c036ef6be9f5e845f2e75a8b1bbd76985768d (patch)
tree2f012f324cc9a61c682fc730113e2834534ddb4e /content/browser/loader/resource_request_info_impl.cc
parent4eaa59bf61b134d79cedd565c0ab015dc18b75cd (diff)
downloadchromium_src-678c036ef6be9f5e845f2e75a8b1bbd76985768d.zip
chromium_src-678c036ef6be9f5e845f2e75a8b1bbd76985768d.tar.gz
chromium_src-678c036ef6be9f5e845f2e75a8b1bbd76985768d.tar.bz2
Add content/browser/loader/ for resource loading related classes.
This infrastructure is shared by both renderer and worker processes, so having it live in renderer_host/ was not quite right. This change also nicely reduces the number of files in renderer_host/. R=jam@chromium.org Review URL: https://codereview.chromium.org/11414299 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171194 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader/resource_request_info_impl.cc')
-rw-r--r--content/browser/loader/resource_request_info_impl.cc220
1 files changed, 220 insertions, 0 deletions
diff --git a/content/browser/loader/resource_request_info_impl.cc b/content/browser/loader/resource_request_info_impl.cc
new file mode 100644
index 0000000..3a614e9
--- /dev/null
+++ b/content/browser/loader/resource_request_info_impl.cc
@@ -0,0 +1,220 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/loader/resource_request_info_impl.h"
+
+#include "content/browser/worker_host/worker_service_impl.h"
+#include "content/common/net/url_request_user_data.h"
+#include "content/public/browser/global_request_id.h"
+#include "net/url_request/url_request.h"
+#include "webkit/blob/blob_data.h"
+
+namespace content {
+
+// ----------------------------------------------------------------------------
+// ResourceRequestInfo
+
+// static
+const ResourceRequestInfo* ResourceRequestInfo::ForRequest(
+ const net::URLRequest* request) {
+ return ResourceRequestInfoImpl::ForRequest(request);
+}
+
+// static
+void ResourceRequestInfo::AllocateForTesting(
+ net::URLRequest* request,
+ ResourceType::Type resource_type,
+ ResourceContext* context,
+ int render_process_id,
+ int render_view_id) {
+ ResourceRequestInfoImpl* info =
+ new ResourceRequestInfoImpl(
+ PROCESS_TYPE_RENDERER, // process_type
+ render_process_id, // child_id
+ render_view_id, // route_id
+ 0, // origin_pid
+ 0, // request_id
+ resource_type == ResourceType::MAIN_FRAME, // is_main_frame
+ 0, // frame_id
+ false, // parent_is_main_frame
+ 0, // parent_frame_id
+ resource_type, // resource_type
+ PAGE_TRANSITION_LINK, // transition_type
+ false, // is_download
+ true, // allow_download
+ false, // has_user_gesture
+ WebKit::WebReferrerPolicyDefault, // referrer_policy
+ context); // context
+ info->AssociateWithRequest(request);
+}
+
+// static
+bool ResourceRequestInfo::GetRenderViewForRequest(
+ const net::URLRequest* request,
+ int* render_process_id,
+ int* render_view_id) {
+ URLRequestUserData* user_data = static_cast<URLRequestUserData*>(
+ request->GetUserData(URLRequestUserData::kUserDataKey));
+ if (!user_data)
+ return false;
+ *render_process_id = user_data->render_process_id();
+ *render_view_id = user_data->render_view_id();
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// ResourceRequestInfoImpl
+
+// static
+ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
+ net::URLRequest* request) {
+ return static_cast<ResourceRequestInfoImpl*>(request->GetUserData(NULL));
+}
+
+// static
+const ResourceRequestInfoImpl* ResourceRequestInfoImpl::ForRequest(
+ const net::URLRequest* request) {
+ return ForRequest(const_cast<net::URLRequest*>(request));
+}
+
+ResourceRequestInfoImpl::ResourceRequestInfoImpl(
+ ProcessType process_type,
+ int child_id,
+ int route_id,
+ int origin_pid,
+ int request_id,
+ bool is_main_frame,
+ int64 frame_id,
+ bool parent_is_main_frame,
+ int64 parent_frame_id,
+ ResourceType::Type resource_type,
+ PageTransition transition_type,
+ bool is_download,
+ bool allow_download,
+ bool has_user_gesture,
+ WebKit::WebReferrerPolicy referrer_policy,
+ ResourceContext* context)
+ : cross_site_handler_(NULL),
+ async_handler_(NULL),
+ process_type_(process_type),
+ child_id_(child_id),
+ route_id_(route_id),
+ origin_pid_(origin_pid),
+ request_id_(request_id),
+ is_main_frame_(is_main_frame),
+ frame_id_(frame_id),
+ parent_is_main_frame_(parent_is_main_frame),
+ parent_frame_id_(parent_frame_id),
+ is_download_(is_download),
+ allow_download_(allow_download),
+ has_user_gesture_(has_user_gesture),
+ was_ignored_by_handler_(false),
+ resource_type_(resource_type),
+ transition_type_(transition_type),
+ memory_cost_(0),
+ referrer_policy_(referrer_policy),
+ context_(context) {
+}
+
+ResourceRequestInfoImpl::~ResourceRequestInfoImpl() {
+}
+
+ResourceContext* ResourceRequestInfoImpl::GetContext() const {
+ return context_;
+}
+
+int ResourceRequestInfoImpl::GetChildID() const {
+ return child_id_;
+}
+
+int ResourceRequestInfoImpl::GetRouteID() const {
+ return route_id_;
+}
+
+int ResourceRequestInfoImpl::GetOriginPID() const {
+ return origin_pid_;
+}
+
+int ResourceRequestInfoImpl::GetRequestID() const {
+ return request_id_;
+}
+
+bool ResourceRequestInfoImpl::IsMainFrame() const {
+ return is_main_frame_;
+}
+
+int64 ResourceRequestInfoImpl::GetFrameID() const {
+ return frame_id_;
+}
+
+bool ResourceRequestInfoImpl::ParentIsMainFrame() const {
+ return parent_is_main_frame_;
+}
+
+int64 ResourceRequestInfoImpl::GetParentFrameID() const {
+ return parent_frame_id_;
+}
+
+ResourceType::Type ResourceRequestInfoImpl::GetResourceType() const {
+ return resource_type_;
+}
+
+WebKit::WebReferrerPolicy ResourceRequestInfoImpl::GetReferrerPolicy() const {
+ return referrer_policy_;
+}
+
+bool ResourceRequestInfoImpl::HasUserGesture() const {
+ return has_user_gesture_;
+}
+
+bool ResourceRequestInfoImpl::WasIgnoredByHandler() const {
+ return was_ignored_by_handler_;
+}
+
+bool ResourceRequestInfoImpl::GetAssociatedRenderView(
+ int* render_process_id,
+ int* render_view_id) const {
+ // If the request is from the worker process, find a content that owns the
+ // worker.
+ if (process_type_ == PROCESS_TYPE_WORKER) {
+ // Need to display some related UI for this network request - pick an
+ // arbitrary parent to do so.
+ if (!WorkerServiceImpl::GetInstance()->GetRendererForWorker(
+ child_id_, render_process_id, render_view_id)) {
+ *render_process_id = -1;
+ *render_view_id = -1;
+ return false;
+ }
+ } else {
+ *render_process_id = child_id_;
+ *render_view_id = route_id_;
+ }
+ return true;
+}
+
+bool ResourceRequestInfoImpl::IsAsync() const {
+ return async_handler_ != NULL;
+}
+
+void ResourceRequestInfoImpl::AssociateWithRequest(net::URLRequest* request) {
+ request->SetUserData(NULL, this);
+ int render_process_id;
+ int render_view_id;
+ if (GetAssociatedRenderView(&render_process_id, &render_view_id)) {
+ request->SetUserData(
+ URLRequestUserData::kUserDataKey,
+ new URLRequestUserData(render_process_id, render_view_id));
+ }
+}
+
+GlobalRequestID ResourceRequestInfoImpl::GetGlobalRequestID() const {
+ return GlobalRequestID(child_id_, request_id_);
+}
+
+void ResourceRequestInfoImpl::set_requested_blob_data(
+ webkit_blob::BlobData* data) {
+ requested_blob_data_ = data;
+}
+
+} // namespace content