OLD | NEW |
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/navigator_impl.h" | 5 #include "content/browser/frame_host/navigator_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 } | 431 } |
432 | 432 |
433 void NavigatorImpl::DidNavigate( | 433 void NavigatorImpl::DidNavigate( |
434 RenderFrameHostImpl* render_frame_host, | 434 RenderFrameHostImpl* render_frame_host, |
435 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { | 435 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { |
436 FrameTree* frame_tree = render_frame_host->frame_tree_node()->frame_tree(); | 436 FrameTree* frame_tree = render_frame_host->frame_tree_node()->frame_tree(); |
437 bool oopifs_possible = SiteIsolationPolicy::AreCrossProcessFramesPossible(); | 437 bool oopifs_possible = SiteIsolationPolicy::AreCrossProcessFramesPossible(); |
438 | 438 |
439 bool is_navigation_within_page = controller_->IsURLInPageNavigation( | 439 bool is_navigation_within_page = controller_->IsURLInPageNavigation( |
440 params.url, params.was_within_same_page, render_frame_host); | 440 params.url, params.was_within_same_page, render_frame_host); |
| 441 |
| 442 // If a frame claims it navigated within page, it must be the current frame, |
| 443 // not a pending one. |
| 444 if (is_navigation_within_page && |
| 445 render_frame_host != |
| 446 render_frame_host->frame_tree_node() |
| 447 ->render_manager() |
| 448 ->current_frame_host()) { |
| 449 bad_message::ReceivedBadMessage(render_frame_host->GetProcess(), |
| 450 bad_message::NC_IN_PAGE_NAVIGATION); |
| 451 is_navigation_within_page = false; |
| 452 } |
| 453 |
441 if (ui::PageTransitionIsMainFrame(params.transition)) { | 454 if (ui::PageTransitionIsMainFrame(params.transition)) { |
442 if (delegate_) { | 455 if (delegate_) { |
443 // When overscroll navigation gesture is enabled, a screenshot of the page | 456 // When overscroll navigation gesture is enabled, a screenshot of the page |
444 // in its current state is taken so that it can be used during the | 457 // in its current state is taken so that it can be used during the |
445 // nav-gesture. It is necessary to take the screenshot here, before | 458 // nav-gesture. It is necessary to take the screenshot here, before |
446 // calling RenderFrameHostManager::DidNavigateMainFrame, because that can | 459 // calling RenderFrameHostManager::DidNavigateMainFrame, because that can |
447 // change WebContents::GetRenderViewHost to return the new host, instead | 460 // change WebContents::GetRenderViewHost to return the new host, instead |
448 // of the one that may have just been swapped out. | 461 // of the one that may have just been swapped out. |
449 if (delegate_->CanOverscrollContent()) { | 462 if (delegate_->CanOverscrollContent()) { |
450 // Don't take screenshots if we are staying on the same page. We want | 463 // Don't take screenshots if we are staying on the same page. We want |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1038 entry->set_should_replace_entry(pending_entry->should_replace_entry()); | 1051 entry->set_should_replace_entry(pending_entry->should_replace_entry()); |
1039 entry->SetRedirectChain(pending_entry->GetRedirectChain()); | 1052 entry->SetRedirectChain(pending_entry->GetRedirectChain()); |
1040 } | 1053 } |
1041 controller_->SetPendingEntry(std::move(entry)); | 1054 controller_->SetPendingEntry(std::move(entry)); |
1042 if (delegate_) | 1055 if (delegate_) |
1043 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); | 1056 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); |
1044 } | 1057 } |
1045 } | 1058 } |
1046 | 1059 |
1047 } // namespace content | 1060 } // namespace content |
OLD | NEW |