| Index: content/browser/frame_host/navigation_controller_impl.cc
|
| diff --git a/content/browser/frame_host/navigation_controller_impl.cc b/content/browser/frame_host/navigation_controller_impl.cc
|
| index 0b0f411a1a041f52893e84357af935f7fe81c0df..4150ae64fc0df917d496c9d275d7609470f61e78 100644
|
| --- a/content/browser/frame_host/navigation_controller_impl.cc
|
| +++ b/content/browser/frame_host/navigation_controller_impl.cc
|
| @@ -900,14 +900,15 @@ NavigationType NavigationControllerImpl::ClassifyNavigation(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params) const {
|
| if (params.page_id == -1) {
|
| - // TODO(nasko, creis): An out-of-process child frame has no way of
|
| - // knowing the page_id of its parent, so it is passing back -1. The
|
| - // semantics here should be re-evaluated during session history refactor
|
| - // (see http://crbug.com/236848). For now, we assume this means the
|
| - // child frame loaded and proceed. Note that this may do the wrong thing
|
| - // for cross-process AUTO_SUBFRAME navigations.
|
| - if (rfh->IsCrossProcessSubframe())
|
| - return NAVIGATION_TYPE_NEW_SUBFRAME;
|
| + if (rfh->IsCrossProcessSubframe()) {
|
| + DCHECK(!ui::PageTransitionIsMainFrame(params.transition));
|
| + if (ui::PageTransitionCoreTypeIs(params.transition,
|
| + ui::PAGE_TRANSITION_MANUAL_SUBFRAME)) {
|
| + return NAVIGATION_TYPE_NEW_SUBFRAME;
|
| + } else {
|
| + return NAVIGATION_TYPE_AUTO_SUBFRAME;
|
| + }
|
| + }
|
|
|
| // The renderer generates the page IDs, and so if it gives us the invalid
|
| // page ID (-1) we know it didn't actually navigate. This happens in a few
|
| @@ -1232,27 +1233,8 @@ void NavigationControllerImpl::RendererDidNavigateInPage(
|
| void NavigationControllerImpl::RendererDidNavigateNewSubframe(
|
| RenderFrameHostImpl* rfh,
|
| const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
|
| - if (!ui::PageTransitionCoreTypeIs(params.transition,
|
| - ui::PAGE_TRANSITION_MANUAL_SUBFRAME)) {
|
| - // There was a comment here that said, "This is not user-initiated. Ignore."
|
| - // But this makes no sense; non-user-initiated navigations should be
|
| - // determined to be of type NAVIGATION_TYPE_AUTO_SUBFRAME and sent to
|
| - // RendererDidNavigateAutoSubframe below.
|
| - //
|
| - // This if clause dates back to https://codereview.chromium.org/115919 and
|
| - // the handling of immediate redirects. TODO(avi): Is this still valid? I'm
|
| - // pretty sure that's there's nothing left of that code and that we should
|
| - // take this out.
|
| - //
|
| - // Except for cross-process iframes; this doesn't work yet for them.
|
| - if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kSitePerProcess)) {
|
| - NOTREACHED();
|
| - }
|
| -
|
| - DiscardNonCommittedEntriesInternal();
|
| - return;
|
| - }
|
| + DCHECK(ui::PageTransitionCoreTypeIs(params.transition,
|
| + ui::PAGE_TRANSITION_MANUAL_SUBFRAME));
|
|
|
| // Manual subframe navigations just get the current entry cloned so the user
|
| // can go back or forward to it. The actual subframe information will be
|
|
|