| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 30fe0faf22d707e9da0d19caa39766f84f7496a7..908e5cc953d26f7c0cbf0fa26a3ecbc1aebe0936 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -1717,15 +1717,9 @@ void RenderFrameImpl::loadURLExternally(
|
| }
|
|
|
| blink::WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation(
|
| - blink::WebLocalFrame* frame,
|
| - blink::WebDataSource::ExtraData* extra_data,
|
| - const blink::WebURLRequest& request,
|
| - blink::WebNavigationType type,
|
| - blink::WebNavigationPolicy default_policy,
|
| - bool is_redirect) {
|
| - DCHECK(!frame_ || frame_ == frame);
|
| - return DecidePolicyForNavigation(
|
| - this, frame, extra_data, request, type, default_policy, is_redirect);
|
| + const NavigationPolicyInfo& info) {
|
| + DCHECK(!frame_ || frame_ == info.frame);
|
| + return DecidePolicyForNavigation(this, info);
|
| }
|
|
|
| blink::WebHistoryItem RenderFrameImpl::historyItemForNewChildFrame(
|
| @@ -1786,7 +1780,8 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame,
|
| network_provider.Pass());
|
| }
|
|
|
| -void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame) {
|
| +void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
|
| + bool is_transition_navigation) {
|
| DCHECK(!frame_ || frame_ == frame);
|
| WebDataSource* ds = frame->provisionalDataSource();
|
|
|
| @@ -1830,8 +1825,8 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame) {
|
| DidStartProvisionalLoad(frame));
|
| FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad());
|
|
|
| - Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(routing_id_,
|
| - ds->request().url()));
|
| + Send(new FrameHostMsg_DidStartProvisionalLoadForFrame(
|
| + routing_id_, ds->request().url(), is_transition_navigation));
|
| }
|
|
|
| void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
|
| @@ -3195,33 +3190,29 @@ void RenderFrameImpl::FocusedNodeChanged(const WebNode& node) {
|
|
|
| WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| RenderFrame* render_frame,
|
| - WebFrame* frame,
|
| - WebDataSource::ExtraData* extraData,
|
| - const WebURLRequest& request,
|
| - WebNavigationType type,
|
| - WebNavigationPolicy default_policy,
|
| - bool is_redirect) {
|
| + const NavigationPolicyInfo& info) {
|
| #ifdef OS_ANDROID
|
| // The handlenavigation API is deprecated and will be removed once
|
| // crbug.com/325351 is resolved.
|
| - if (request.url() != GURL(kSwappedOutURL) &&
|
| + if (info.urlRequest.url() != GURL(kSwappedOutURL) &&
|
| GetContentClient()->renderer()->HandleNavigation(
|
| render_frame,
|
| - static_cast<DocumentState*>(extraData),
|
| + static_cast<DocumentState*>(info.extraData),
|
| render_view_->opener_id_,
|
| - frame,
|
| - request,
|
| - type,
|
| - default_policy,
|
| - is_redirect)) {
|
| + info.frame,
|
| + info.urlRequest,
|
| + info.navigationType,
|
| + info.defaultPolicy,
|
| + info.isRedirect)) {
|
| return blink::WebNavigationPolicyIgnore;
|
| }
|
| #endif
|
|
|
| - Referrer referrer(RenderViewImpl::GetReferrerFromRequest(frame, request));
|
| + Referrer referrer(RenderViewImpl::GetReferrerFromRequest(info.frame,
|
| + info.urlRequest));
|
|
|
| if (is_swapped_out_ || render_view_->is_swapped_out()) {
|
| - if (request.url() != GURL(kSwappedOutURL)) {
|
| + if (info.urlRequest.url() != GURL(kSwappedOutURL)) {
|
| // Targeted links may try to navigate a swapped out frame. Allow the
|
| // browser process to navigate the tab instead. Note that it is also
|
| // possible for non-targeted navigations (from this view) to arrive
|
| @@ -3229,8 +3220,9 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| // browser, as long as they're for the top level frame.
|
| // TODO(creis): Ensure this supports targeted form submissions when
|
| // fixing http://crbug.com/101395.
|
| - if (frame->parent() == NULL) {
|
| - OpenURL(frame, request.url(), referrer, default_policy);
|
| + if (info.frame->parent() == NULL) {
|
| + OpenURL(info.frame, info.urlRequest.url(), referrer,
|
| + info.defaultPolicy);
|
| return blink::WebNavigationPolicyIgnore; // Suppress the load here.
|
| }
|
|
|
| @@ -3240,17 +3232,17 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| }
|
|
|
| // Allow kSwappedOutURL to complete.
|
| - return default_policy;
|
| + return info.defaultPolicy;
|
| }
|
|
|
| // Webkit is asking whether to navigate to a new URL.
|
| // This is fine normally, except if we're showing UI from one security
|
| // context and they're trying to navigate to a different context.
|
| - const GURL& url = request.url();
|
| + const GURL& url = info.urlRequest.url();
|
|
|
| // A content initiated navigation may have originated from a link-click,
|
| // script, drag-n-drop operation, etc.
|
| - bool is_content_initiated = static_cast<DocumentState*>(extraData)->
|
| + bool is_content_initiated = static_cast<DocumentState*>(info.extraData)->
|
| navigation_state()->is_content_initiated();
|
|
|
| // Experimental:
|
| @@ -3263,8 +3255,8 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| command_line.HasSwitch(switches::kEnableStrictSiteIsolation) ||
|
| command_line.HasSwitch(switches::kSitePerProcess);
|
| if (force_swap_due_to_flag &&
|
| - !frame->parent() && (is_content_initiated || is_redirect)) {
|
| - WebString origin_str = frame->document().securityOrigin().toString();
|
| + !info.frame->parent() && (is_content_initiated || info.isRedirect)) {
|
| + WebString origin_str = info.frame->document().securityOrigin().toString();
|
| GURL frame_url(origin_str.utf8().data());
|
| // TODO(cevans): revisit whether this site check is still necessary once
|
| // crbug.com/101395 is fixed.
|
| @@ -3274,22 +3266,24 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| url,
|
| net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
|
| if (!same_domain_or_host || frame_url.scheme() != url.scheme()) {
|
| - OpenURL(frame, url, referrer, default_policy);
|
| + OpenURL(info.frame, url, referrer, info.defaultPolicy);
|
| return blink::WebNavigationPolicyIgnore;
|
| }
|
| }
|
|
|
| // If the browser is interested, then give it a chance to look at the request.
|
| if (is_content_initiated) {
|
| - bool is_form_post = ((type == blink::WebNavigationTypeFormSubmitted) ||
|
| - (type == blink::WebNavigationTypeFormResubmitted)) &&
|
| - EqualsASCII(request.httpMethod(), "POST");
|
| + bool is_form_post =
|
| + ((info.navigationType == blink::WebNavigationTypeFormSubmitted) ||
|
| + (info.navigationType == blink::WebNavigationTypeFormResubmitted)) &&
|
| + EqualsASCII(info.urlRequest.httpMethod(), "POST");
|
| bool browser_handles_request =
|
| render_view_->renderer_preferences_
|
| .browser_handles_non_local_top_level_requests
|
| - && IsNonLocalTopLevelNavigation(url, frame, type, is_form_post);
|
| + && IsNonLocalTopLevelNavigation(url, info.frame, info.navigationType,
|
| + is_form_post);
|
| if (!browser_handles_request) {
|
| - browser_handles_request = IsTopLevelNavigation(frame) &&
|
| + browser_handles_request = IsTopLevelNavigation(info.frame) &&
|
| render_view_->renderer_preferences_
|
| .browser_handles_all_top_level_requests;
|
| }
|
| @@ -3299,7 +3293,7 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| // navigation.
|
| render_view_->page_id_ = -1;
|
| render_view_->last_page_id_sent_to_browser_ = -1;
|
| - OpenURL(frame, url, referrer, default_policy);
|
| + OpenURL(info.frame, url, referrer, info.defaultPolicy);
|
| return blink::WebNavigationPolicyIgnore; // Suppress the load here.
|
| }
|
| }
|
| @@ -3308,7 +3302,7 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| // subsequent checks. For a popup, the document's URL may become the opener
|
| // window's URL if the opener has called document.write().
|
| // See http://crbug.com/93517.
|
| - GURL old_url(frame->dataSource()->request().url());
|
| + GURL old_url(info.frame->dataSource()->request().url());
|
|
|
| // Detect when we're crossing a permission-based boundary (e.g. into or out of
|
| // an extension or app origin, leaving a WebUI page, etc). We only care about
|
| @@ -3323,7 +3317,7 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| // browser process, and issue a special POST navigation in WebKit (via
|
| // FrameLoader::loadFrameRequest). See ResourceDispatcher and WebURLLoaderImpl
|
| // for examples of how to send the httpBody data.
|
| - if (!frame->parent() && is_content_initiated &&
|
| + if (!info.frame->parent() && is_content_initiated &&
|
| !url.SchemeIs(url::kAboutScheme)) {
|
| bool send_referrer = false;
|
|
|
| @@ -3341,15 +3335,16 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| bool should_fork = HasWebUIScheme(url) || HasWebUIScheme(old_url) ||
|
| (cumulative_bindings & BINDINGS_POLICY_WEB_UI) ||
|
| url.SchemeIs(kViewSourceScheme) ||
|
| - (frame->isViewSourceModeEnabled() &&
|
| - type != blink::WebNavigationTypeReload);
|
| + (info.frame->isViewSourceModeEnabled() &&
|
| + info.navigationType != blink::WebNavigationTypeReload);
|
|
|
| if (!should_fork && url.SchemeIs(url::kFileScheme)) {
|
| // Fork non-file to file opens. Check the opener URL if this is the
|
| // initial navigation in a newly opened window.
|
| GURL source_url(old_url);
|
| - if (is_initial_navigation && source_url.is_empty() && frame->opener())
|
| - source_url = frame->opener()->top()->document().url();
|
| + if (is_initial_navigation && source_url.is_empty() &&
|
| + info.frame->opener())
|
| + source_url = info.frame->opener()->top()->document().url();
|
| DCHECK(!source_url.is_empty());
|
| should_fork = !source_url.SchemeIs(url::kFileScheme);
|
| }
|
| @@ -3357,13 +3352,13 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| if (!should_fork) {
|
| // Give the embedder a chance.
|
| should_fork = GetContentClient()->renderer()->ShouldFork(
|
| - frame, url, request.httpMethod().utf8(), is_initial_navigation,
|
| - is_redirect, &send_referrer);
|
| + info.frame, url, info.urlRequest.httpMethod().utf8(),
|
| + is_initial_navigation, info.isRedirect, &send_referrer);
|
| }
|
|
|
| if (should_fork) {
|
| - OpenURL(
|
| - frame, url, send_referrer ? referrer : Referrer(), default_policy);
|
| + OpenURL(info.frame, url, send_referrer ? referrer : Referrer(),
|
| + info.defaultPolicy);
|
| return blink::WebNavigationPolicyIgnore; // Suppress the load here.
|
| }
|
| }
|
| @@ -3390,23 +3385,23 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
|
| render_view_->historyForwardListCount() < 1 &&
|
| // The parent page must have set the child's window.opener to null before
|
| // redirecting to the desired URL.
|
| - frame->opener() == NULL &&
|
| + info.frame->opener() == NULL &&
|
| // Must be a top-level frame.
|
| - frame->parent() == NULL &&
|
| + info.frame->parent() == NULL &&
|
| // Must not have issued the request from this page.
|
| is_content_initiated &&
|
| // Must be targeted at the current tab.
|
| - default_policy == blink::WebNavigationPolicyCurrentTab &&
|
| + info.defaultPolicy == blink::WebNavigationPolicyCurrentTab &&
|
| // Must be a JavaScript navigation, which appears as "other".
|
| - type == blink::WebNavigationTypeOther;
|
| + info.navigationType == blink::WebNavigationTypeOther;
|
|
|
| if (is_fork) {
|
| // Open the URL via the browser, not via WebKit.
|
| - OpenURL(frame, url, Referrer(), default_policy);
|
| + OpenURL(info.frame, url, Referrer(), info.defaultPolicy);
|
| return blink::WebNavigationPolicyIgnore;
|
| }
|
|
|
| - return default_policy;
|
| + return info.defaultPolicy;
|
| }
|
|
|
| void RenderFrameImpl::OpenURL(WebFrame* frame,
|
|
|