Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Side by Side Diff: content/browser/renderer_host/resource_dispatcher_host.cc

Issue 8760011: Move the ProcessType enum out to its own file. This is in preparation for getting rid of ChildPro... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix mac Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading 5 // See http://dev.chromium.org/developers/design-documents/multi-process-resourc e-loading
6 6
7 #include "content/browser/renderer_host/resource_dispatcher_host.h" 7 #include "content/browser/renderer_host/resource_dispatcher_host.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #include "content/browser/ssl/ssl_client_auth_handler.h" 51 #include "content/browser/ssl/ssl_client_auth_handler.h"
52 #include "content/browser/ssl/ssl_manager.h" 52 #include "content/browser/ssl/ssl_manager.h"
53 #include "content/browser/worker_host/worker_service.h" 53 #include "content/browser/worker_host/worker_service.h"
54 #include "content/common/resource_messages.h" 54 #include "content/common/resource_messages.h"
55 #include "content/common/view_messages.h" 55 #include "content/common/view_messages.h"
56 #include "content/public/browser/browser_thread.h" 56 #include "content/public/browser/browser_thread.h"
57 #include "content/public/browser/content_browser_client.h" 57 #include "content/public/browser/content_browser_client.h"
58 #include "content/public/browser/notification_service.h" 58 #include "content/public/browser/notification_service.h"
59 #include "content/public/browser/resource_dispatcher_host_delegate.h" 59 #include "content/public/browser/resource_dispatcher_host_delegate.h"
60 #include "content/public/common/content_switches.h" 60 #include "content/public/common/content_switches.h"
61 #include "content/public/common/process_type.h"
61 #include "content/public/common/url_constants.h" 62 #include "content/public/common/url_constants.h"
62 #include "net/base/auth.h" 63 #include "net/base/auth.h"
63 #include "net/base/cert_status_flags.h" 64 #include "net/base/cert_status_flags.h"
64 #include "net/base/cookie_monster.h" 65 #include "net/base/cookie_monster.h"
65 #include "net/base/load_flags.h" 66 #include "net/base/load_flags.h"
66 #include "net/base/mime_util.h" 67 #include "net/base/mime_util.h"
67 #include "net/base/net_errors.h" 68 #include "net/base/net_errors.h"
68 #include "net/base/registry_controlled_domain.h" 69 #include "net/base/registry_controlled_domain.h"
69 #include "net/base/request_priority.h" 70 #include "net/base/request_priority.h"
70 #include "net/base/ssl_cert_request_info.h" 71 #include "net/base/ssl_cert_request_info.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 GURL MaybeStripReferrer(const GURL& possible_referrer) { 146 GURL MaybeStripReferrer(const GURL& possible_referrer) {
146 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoReferrers)) 147 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoReferrers))
147 return GURL(); 148 return GURL();
148 return possible_referrer; 149 return possible_referrer;
149 } 150 }
150 151
151 // Consults the RendererSecurity policy to determine whether the 152 // Consults the RendererSecurity policy to determine whether the
152 // ResourceDispatcherHost should service this request. A request might be 153 // ResourceDispatcherHost should service this request. A request might be
153 // disallowed if the renderer is not authorized to retrieve the request URL or 154 // disallowed if the renderer is not authorized to retrieve the request URL or
154 // if the renderer is attempting to upload an unauthorized file. 155 // if the renderer is attempting to upload an unauthorized file.
155 bool ShouldServiceRequest(ChildProcessInfo::ProcessType process_type, 156 bool ShouldServiceRequest(content::ProcessType process_type,
156 int child_id, 157 int child_id,
157 const ResourceHostMsg_Request& request_data) { 158 const ResourceHostMsg_Request& request_data) {
158 if (process_type == ChildProcessInfo::PLUGIN_PROCESS) 159 if (process_type == content::PROCESS_TYPE_PLUGIN)
159 return true; 160 return true;
160 161
161 ChildProcessSecurityPolicy* policy = 162 ChildProcessSecurityPolicy* policy =
162 ChildProcessSecurityPolicy::GetInstance(); 163 ChildProcessSecurityPolicy::GetInstance();
163 164
164 // Check if the renderer is permitted to request the requested URL. 165 // Check if the renderer is permitted to request the requested URL.
165 if (!policy->CanRequestURL(child_id, request_data.url)) { 166 if (!policy->CanRequestURL(child_id, request_data.url)) {
166 VLOG(1) << "Denied unauthorized request for " 167 VLOG(1) << "Denied unauthorized request for "
167 << request_data.url.possibly_invalid_spec(); 168 << request_data.url.possibly_invalid_spec();
168 return false; 169 return false;
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 IPC::Message* sync_result) { 444 IPC::Message* sync_result) {
444 BeginRequest(request_id, request_data, sync_result, 445 BeginRequest(request_id, request_data, sync_result,
445 sync_result->routing_id()); 446 sync_result->routing_id());
446 } 447 }
447 448
448 void ResourceDispatcherHost::BeginRequest( 449 void ResourceDispatcherHost::BeginRequest(
449 int request_id, 450 int request_id,
450 const ResourceHostMsg_Request& request_data, 451 const ResourceHostMsg_Request& request_data,
451 IPC::Message* sync_result, // only valid for sync 452 IPC::Message* sync_result, // only valid for sync
452 int route_id) { 453 int route_id) {
453 ChildProcessInfo::ProcessType process_type = filter_->process_type(); 454 content::ProcessType process_type = filter_->process_type();
454 int child_id = filter_->child_id(); 455 int child_id = filter_->child_id();
455 456
456 // If we crash here, figure out what URL the renderer was requesting. 457 // If we crash here, figure out what URL the renderer was requesting.
457 // http://crbug.com/91398 458 // http://crbug.com/91398
458 char url_buf[128]; 459 char url_buf[128];
459 base::strlcpy(url_buf, request_data.url.spec().c_str(), arraysize(url_buf)); 460 base::strlcpy(url_buf, request_data.url.spec().c_str(), arraysize(url_buf));
460 base::debug::Alias(url_buf); 461 base::debug::Alias(url_buf);
461 462
462 const content::ResourceContext& resource_context = 463 const content::ResourceContext& resource_context =
463 filter_->resource_context(); 464 filter_->resource_context();
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 if (request_data.upload_data) { 564 if (request_data.upload_data) {
564 request->set_upload(request_data.upload_data); 565 request->set_upload(request_data.upload_data);
565 upload_size = request_data.upload_data->GetContentLength(); 566 upload_size = request_data.upload_data->GetContentLength();
566 } 567 }
567 568
568 // Install a CrossSiteResourceHandler if this request is coming from a 569 // Install a CrossSiteResourceHandler if this request is coming from a
569 // RenderViewHost with a pending cross-site request. We only check this for 570 // RenderViewHost with a pending cross-site request. We only check this for
570 // MAIN_FRAME requests. Unblock requests only come from a blocked page, do 571 // MAIN_FRAME requests. Unblock requests only come from a blocked page, do
571 // not count as cross-site, otherwise it gets blocked indefinitely. 572 // not count as cross-site, otherwise it gets blocked indefinitely.
572 if (request_data.resource_type == ResourceType::MAIN_FRAME && 573 if (request_data.resource_type == ResourceType::MAIN_FRAME &&
573 process_type == ChildProcessInfo::RENDER_PROCESS && 574 process_type == content::PROCESS_TYPE_RENDERER &&
574 CrossSiteRequestManager::GetInstance()-> 575 CrossSiteRequestManager::GetInstance()->
575 HasPendingCrossSiteRequest(child_id, route_id)) { 576 HasPendingCrossSiteRequest(child_id, route_id)) {
576 // Wrap the event handler to be sure the current page's onunload handler 577 // Wrap the event handler to be sure the current page's onunload handler
577 // has a chance to run before we render the new page. 578 // has a chance to run before we render the new page.
578 handler = new CrossSiteResourceHandler(handler, 579 handler = new CrossSiteResourceHandler(handler,
579 child_id, 580 child_id,
580 route_id, 581 route_id,
581 this); 582 this);
582 } 583 }
583 584
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 } 748 }
748 749
749 ResourceDispatcherHostRequestInfo* ResourceDispatcherHost::CreateRequestInfo( 750 ResourceDispatcherHostRequestInfo* ResourceDispatcherHost::CreateRequestInfo(
750 ResourceHandler* handler, 751 ResourceHandler* handler,
751 int child_id, 752 int child_id,
752 int route_id, 753 int route_id,
753 bool download, 754 bool download,
754 const content::ResourceContext& context) { 755 const content::ResourceContext& context) {
755 return new ResourceDispatcherHostRequestInfo( 756 return new ResourceDispatcherHostRequestInfo(
756 handler, 757 handler,
757 ChildProcessInfo::RENDER_PROCESS, 758 content::PROCESS_TYPE_RENDERER,
758 child_id, 759 child_id,
759 route_id, 760 route_id,
760 0, 761 0,
761 request_id_, 762 request_id_,
762 false, // is_main_frame 763 false, // is_main_frame
763 -1, // frame_id 764 -1, // frame_id
764 false, // parent_is_main_frame 765 false, // parent_is_main_frame
765 -1, // parent_frame_id 766 -1, // parent_frame_id
766 ResourceType::SUB_RESOURCE, 767 ResourceType::SUB_RESOURCE,
767 content::PAGE_TRANSITION_LINK, 768 content::PAGE_TRANSITION_LINK,
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 // net::URLRequest::Delegate --------------------------------------------------- 1212 // net::URLRequest::Delegate ---------------------------------------------------
1212 1213
1213 void ResourceDispatcherHost::OnReceivedRedirect(net::URLRequest* request, 1214 void ResourceDispatcherHost::OnReceivedRedirect(net::URLRequest* request,
1214 const GURL& new_url, 1215 const GURL& new_url,
1215 bool* defer_redirect) { 1216 bool* defer_redirect) {
1216 VLOG(1) << "OnReceivedRedirect: " << request->url().spec(); 1217 VLOG(1) << "OnReceivedRedirect: " << request->url().spec();
1217 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); 1218 ResourceDispatcherHostRequestInfo* info = InfoForRequest(request);
1218 1219
1219 DCHECK(request->status().is_success()); 1220 DCHECK(request->status().is_success());
1220 1221
1221 if (info->process_type() != ChildProcessInfo::PLUGIN_PROCESS && 1222 if (info->process_type() != content::PROCESS_TYPE_PLUGIN &&
1222 !ChildProcessSecurityPolicy::GetInstance()-> 1223 !ChildProcessSecurityPolicy::GetInstance()->
1223 CanRequestURL(info->child_id(), new_url)) { 1224 CanRequestURL(info->child_id(), new_url)) {
1224 VLOG(1) << "Denied unauthorized request for " 1225 VLOG(1) << "Denied unauthorized request for "
1225 << new_url.possibly_invalid_spec(); 1226 << new_url.possibly_invalid_spec();
1226 1227
1227 // Tell the renderer that this request was disallowed. 1228 // Tell the renderer that this request was disallowed.
1228 CancelRequestInternal(request, false); 1229 CancelRequestInternal(request, false);
1229 return; 1230 return;
1230 } 1231 }
1231 1232
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1831 int* render_process_host_id, 1832 int* render_process_host_id,
1832 int* render_view_host_id) { 1833 int* render_view_host_id) {
1833 const ResourceDispatcherHostRequestInfo* info = InfoForRequest(request); 1834 const ResourceDispatcherHostRequestInfo* info = InfoForRequest(request);
1834 if (!info) { 1835 if (!info) {
1835 *render_process_host_id = -1; 1836 *render_process_host_id = -1;
1836 *render_view_host_id = -1; 1837 *render_view_host_id = -1;
1837 return false; 1838 return false;
1838 } 1839 }
1839 1840
1840 // If the request is from the worker process, find a tab that owns the worker. 1841 // If the request is from the worker process, find a tab that owns the worker.
1841 if (info->process_type() == ChildProcessInfo::WORKER_PROCESS) { 1842 if (info->process_type() == content::PROCESS_TYPE_WORKER) {
1842 // Need to display some related UI for this network request - pick an 1843 // Need to display some related UI for this network request - pick an
1843 // arbitrary parent to do so. 1844 // arbitrary parent to do so.
1844 if (!WorkerService::GetInstance()->GetRendererForWorker( 1845 if (!WorkerService::GetInstance()->GetRendererForWorker(
1845 info->child_id(), render_process_host_id, render_view_host_id)) { 1846 info->child_id(), render_process_host_id, render_view_host_id)) {
1846 *render_process_host_id = -1; 1847 *render_process_host_id = -1;
1847 *render_view_host_id = -1; 1848 *render_view_host_id = -1;
1848 return false; 1849 return false;
1849 } 1850 }
1850 } else { 1851 } else {
1851 *render_process_host_id = info->child_id(); 1852 *render_process_host_id = info->child_id();
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
2165 return HTTP_AUTH_RESOURCE_BLOCKED_CROSS; 2166 return HTTP_AUTH_RESOURCE_BLOCKED_CROSS;
2166 } 2167 }
2167 2168
2168 bool ResourceDispatcherHost::allow_cross_origin_auth_prompt() { 2169 bool ResourceDispatcherHost::allow_cross_origin_auth_prompt() {
2169 return allow_cross_origin_auth_prompt_; 2170 return allow_cross_origin_auth_prompt_;
2170 } 2171 }
2171 2172
2172 void ResourceDispatcherHost::set_allow_cross_origin_auth_prompt(bool value) { 2173 void ResourceDispatcherHost::set_allow_cross_origin_auth_prompt(bool value) {
2173 allow_cross_origin_auth_prompt_ = value; 2174 allow_cross_origin_auth_prompt_ = value;
2174 } 2175 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698