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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 1103253003: PlzNavigate: properly set file access permissions on the RFH (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 #include "content/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 1583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 1594
1595 // Give the client a chance to disallow URLs from committing. 1595 // Give the client a chance to disallow URLs from committing.
1596 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url); 1596 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url);
1597 } 1597 }
1598 1598
1599 void RenderFrameHostImpl::Navigate( 1599 void RenderFrameHostImpl::Navigate(
1600 const CommonNavigationParams& common_params, 1600 const CommonNavigationParams& common_params,
1601 const StartNavigationParams& start_params, 1601 const StartNavigationParams& start_params,
1602 const RequestNavigationParams& request_params) { 1602 const RequestNavigationParams& request_params) {
1603 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate"); 1603 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate");
1604 // Browser plugin guests are not allowed to navigate outside web-safe schemes,
1605 // so do not grant them the ability to request additional URLs.
1606 if (!GetProcess()->IsIsolatedGuest()) {
1607 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
1608 GetProcess()->GetID(), common_params.url);
1609 if (common_params.url.SchemeIs(url::kDataScheme) &&
1610 common_params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
1611 // If 'data:' is used, and we have a 'file:' base url, grant access to
1612 // local files.
1613 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
1614 GetProcess()->GetID(), common_params.base_url_for_data_url);
1615 }
1616 }
1617 1604
1618 // We may be returning to an existing NavigationEntry that had been granted 1605 UpdatePermissionsForNavigation(common_params, request_params);
1619 // file access. If this is a different process, we will need to grant the
1620 // access again. The files listed in the page state are validated when they
1621 // are received from the renderer to prevent abuse.
1622 if (request_params.page_state.IsValid()) {
1623 render_view_host_->GrantFileAccessFromPageState(request_params.page_state);
1624 }
1625 1606
1626 // Only send the message if we aren't suspended at the start of a cross-site 1607 // Only send the message if we aren't suspended at the start of a cross-site
1627 // request. 1608 // request.
1628 if (navigations_suspended_) { 1609 if (navigations_suspended_) {
1629 // Shouldn't be possible to have a second navigation while suspended, since 1610 // Shouldn't be possible to have a second navigation while suspended, since
1630 // navigations will only be suspended during a cross-site request. If a 1611 // navigations will only be suspended during a cross-site request. If a
1631 // second navigation occurs, RenderFrameHostManager will cancel this pending 1612 // second navigation occurs, RenderFrameHostManager will cancel this pending
1632 // RFH and create a new pending RFH. 1613 // RFH and create a new pending RFH.
1633 DCHECK(!suspended_nav_params_.get()); 1614 DCHECK(!suspended_nav_params_.get());
1634 suspended_nav_params_.reset( 1615 suspended_nav_params_.reset(
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1776 } 1757 }
1777 1758
1778 // PlzNavigate 1759 // PlzNavigate
1779 void RenderFrameHostImpl::CommitNavigation( 1760 void RenderFrameHostImpl::CommitNavigation(
1780 ResourceResponse* response, 1761 ResourceResponse* response,
1781 scoped_ptr<StreamHandle> body, 1762 scoped_ptr<StreamHandle> body,
1782 const CommonNavigationParams& common_params, 1763 const CommonNavigationParams& common_params,
1783 const RequestNavigationParams& request_params) { 1764 const RequestNavigationParams& request_params) {
1784 DCHECK((response && body.get()) || 1765 DCHECK((response && body.get()) ||
1785 !NavigationRequest::ShouldMakeNetworkRequest(common_params.url)); 1766 !NavigationRequest::ShouldMakeNetworkRequest(common_params.url));
1786 // TODO(clamy): Check if we have to add security checks for the browser plugin 1767 UpdatePermissionsForNavigation(common_params, request_params);
1787 // guests.
1788 1768
1789 // Get back to a clean state, in case we start a new navigation without 1769 // Get back to a clean state, in case we start a new navigation without
1790 // completing a RFH swap or unload handler. 1770 // completing a RFH swap or unload handler.
1791 SetState(RenderFrameHostImpl::STATE_DEFAULT); 1771 SetState(RenderFrameHostImpl::STATE_DEFAULT);
1792 1772
1793 const GURL body_url = body.get() ? body->GetURL() : GURL(); 1773 const GURL body_url = body.get() ? body->GetURL() : GURL();
1794 const ResourceResponseHead head = response ? 1774 const ResourceResponseHead head = response ?
1795 response->head : ResourceResponseHead(); 1775 response->head : ResourceResponseHead();
1796 Send(new FrameMsg_CommitNavigation(routing_id_, head, body_url, common_params, 1776 Send(new FrameMsg_CommitNavigation(routing_id_, head, body_url, common_params,
1797 request_params)); 1777 request_params));
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
2065 if (!permission_manager) 2045 if (!permission_manager)
2066 return; 2046 return;
2067 2047
2068 permission_manager->RegisterPermissionUsage( 2048 permission_manager->RegisterPermissionUsage(
2069 PermissionType::GEOLOCATION, 2049 PermissionType::GEOLOCATION,
2070 GetLastCommittedURL().GetOrigin(), 2050 GetLastCommittedURL().GetOrigin(),
2071 frame_tree_node()->frame_tree()->GetMainFrame() 2051 frame_tree_node()->frame_tree()->GetMainFrame()
2072 ->GetLastCommittedURL().GetOrigin()); 2052 ->GetLastCommittedURL().GetOrigin());
2073 } 2053 }
2074 2054
2055 void RenderFrameHostImpl::UpdatePermissionsForNavigation(
2056 const CommonNavigationParams& common_params,
2057 const RequestNavigationParams& request_params) {
2058 // Browser plugin guests are not allowed to navigate outside web-safe schemes,
2059 // so do not grant them the ability to request additional URLs.
2060 if (!GetProcess()->IsIsolatedGuest()) {
2061 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
2062 GetProcess()->GetID(), common_params.url);
2063 if (common_params.url.SchemeIs(url::kDataScheme) &&
2064 common_params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
2065 // If 'data:' is used, and we have a 'file:' base url, grant access to
2066 // local files.
2067 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
2068 GetProcess()->GetID(), common_params.base_url_for_data_url);
2069 }
2070 }
2071
2072 // We may be returning to an existing NavigationEntry that had been granted
2073 // file access. If this is a different process, we will need to grant the
2074 // access again. The files listed in the page state are validated when they
2075 // are received from the renderer to prevent abuse.
2076 if (request_params.page_state.IsValid()) {
2077 render_view_host_->GrantFileAccessFromPageState(request_params.page_state);
2078 }
2079 }
2080
2075 } // namespace content 2081 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698