| Index: content/browser/frame_host/render_frame_host_impl.cc
|
| diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
|
| index 57ba8e25e3fd7eb743d7353b2d3916aae34a1f5e..0e5979ed268550a9d6dd1162e562949dbb5bfa7a 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -1601,27 +1601,8 @@ void RenderFrameHostImpl::Navigate(
|
| const StartNavigationParams& start_params,
|
| const RequestNavigationParams& request_params) {
|
| TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate");
|
| - // Browser plugin guests are not allowed to navigate outside web-safe schemes,
|
| - // so do not grant them the ability to request additional URLs.
|
| - if (!GetProcess()->IsIsolatedGuest()) {
|
| - ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
|
| - GetProcess()->GetID(), common_params.url);
|
| - if (common_params.url.SchemeIs(url::kDataScheme) &&
|
| - common_params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
|
| - // If 'data:' is used, and we have a 'file:' base url, grant access to
|
| - // local files.
|
| - ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
|
| - GetProcess()->GetID(), common_params.base_url_for_data_url);
|
| - }
|
| - }
|
|
|
| - // We may be returning to an existing NavigationEntry that had been granted
|
| - // file access. If this is a different process, we will need to grant the
|
| - // access again. The files listed in the page state are validated when they
|
| - // are received from the renderer to prevent abuse.
|
| - if (request_params.page_state.IsValid()) {
|
| - render_view_host_->GrantFileAccessFromPageState(request_params.page_state);
|
| - }
|
| + UpdatePermissionsForNavigation(common_params, request_params);
|
|
|
| // Only send the message if we aren't suspended at the start of a cross-site
|
| // request.
|
| @@ -1783,8 +1764,7 @@ void RenderFrameHostImpl::CommitNavigation(
|
| const RequestNavigationParams& request_params) {
|
| DCHECK((response && body.get()) ||
|
| !NavigationRequest::ShouldMakeNetworkRequest(common_params.url));
|
| - // TODO(clamy): Check if we have to add security checks for the browser plugin
|
| - // guests.
|
| + UpdatePermissionsForNavigation(common_params, request_params);
|
|
|
| // Get back to a clean state, in case we start a new navigation without
|
| // completing a RFH swap or unload handler.
|
| @@ -2072,4 +2052,30 @@ void RenderFrameHostImpl::DidUseGeolocationPermission() {
|
| ->GetLastCommittedURL().GetOrigin());
|
| }
|
|
|
| +void RenderFrameHostImpl::UpdatePermissionsForNavigation(
|
| + const CommonNavigationParams& common_params,
|
| + const RequestNavigationParams& request_params) {
|
| + // Browser plugin guests are not allowed to navigate outside web-safe schemes,
|
| + // so do not grant them the ability to request additional URLs.
|
| + if (!GetProcess()->IsIsolatedGuest()) {
|
| + ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
|
| + GetProcess()->GetID(), common_params.url);
|
| + if (common_params.url.SchemeIs(url::kDataScheme) &&
|
| + common_params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
|
| + // If 'data:' is used, and we have a 'file:' base url, grant access to
|
| + // local files.
|
| + ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
|
| + GetProcess()->GetID(), common_params.base_url_for_data_url);
|
| + }
|
| + }
|
| +
|
| + // We may be returning to an existing NavigationEntry that had been granted
|
| + // file access. If this is a different process, we will need to grant the
|
| + // access again. The files listed in the page state are validated when they
|
| + // are received from the renderer to prevent abuse.
|
| + if (request_params.page_state.IsValid()) {
|
| + render_view_host_->GrantFileAccessFromPageState(request_params.page_state);
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|