| 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 "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/browser/frame_host/frame_tree.h" | 10 #include "content/browser/frame_host/frame_tree.h" |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 *controller_->GetPendingEntry(), reload_type, | 383 *controller_->GetPendingEntry(), reload_type, |
| 384 is_same_document_history_load); | 384 is_same_document_history_load); |
| 385 } | 385 } |
| 386 | 386 |
| 387 void NavigatorImpl::DidNavigate( | 387 void NavigatorImpl::DidNavigate( |
| 388 RenderFrameHostImpl* render_frame_host, | 388 RenderFrameHostImpl* render_frame_host, |
| 389 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { | 389 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { |
| 390 FrameTree* frame_tree = render_frame_host->frame_tree_node()->frame_tree(); | 390 FrameTree* frame_tree = render_frame_host->frame_tree_node()->frame_tree(); |
| 391 bool oopifs_possible = SiteIsolationPolicy::AreCrossProcessFramesPossible(); | 391 bool oopifs_possible = SiteIsolationPolicy::AreCrossProcessFramesPossible(); |
| 392 | 392 |
| 393 bool is_navigation_within_page = controller_->IsURLInPageNavigation( |
| 394 params.url, params.was_within_same_page, render_frame_host); |
| 393 if (ui::PageTransitionIsMainFrame(params.transition)) { | 395 if (ui::PageTransitionIsMainFrame(params.transition)) { |
| 394 if (delegate_) { | 396 if (delegate_) { |
| 395 // When overscroll navigation gesture is enabled, a screenshot of the page | 397 // When overscroll navigation gesture is enabled, a screenshot of the page |
| 396 // in its current state is taken so that it can be used during the | 398 // in its current state is taken so that it can be used during the |
| 397 // nav-gesture. It is necessary to take the screenshot here, before | 399 // nav-gesture. It is necessary to take the screenshot here, before |
| 398 // calling RenderFrameHostManager::DidNavigateMainFrame, because that can | 400 // calling RenderFrameHostManager::DidNavigateMainFrame, because that can |
| 399 // change WebContents::GetRenderViewHost to return the new host, instead | 401 // change WebContents::GetRenderViewHost to return the new host, instead |
| 400 // of the one that may have just been swapped out. | 402 // of the one that may have just been swapped out. |
| 401 if (delegate_->CanOverscrollContent()) { | 403 if (delegate_->CanOverscrollContent()) { |
| 402 // Don't take screenshots if we are staying on the same page. We want | 404 // Don't take screenshots if we are staying on the same page. We want |
| 403 // in-page navigations to be super fast, and taking a screenshot | 405 // in-page navigations to be super fast, and taking a screenshot |
| 404 // currently blocks GPU for a longer time than we are willing to | 406 // currently blocks GPU for a longer time than we are willing to |
| 405 // tolerate in this use case. | 407 // tolerate in this use case. |
| 406 if (!params.was_within_same_page) | 408 if (!params.was_within_same_page) |
| 407 controller_->TakeScreenshot(); | 409 controller_->TakeScreenshot(); |
| 408 } | 410 } |
| 409 | 411 |
| 410 // Run tasks that must execute just before the commit. | 412 // Run tasks that must execute just before the commit. |
| 411 bool is_navigation_within_page = controller_->IsURLInPageNavigation( | |
| 412 params.url, params.was_within_same_page, render_frame_host); | |
| 413 delegate_->DidNavigateMainFramePreCommit(is_navigation_within_page); | 413 delegate_->DidNavigateMainFramePreCommit(is_navigation_within_page); |
| 414 } | 414 } |
| 415 | 415 |
| 416 if (!oopifs_possible) | 416 if (!oopifs_possible) |
| 417 frame_tree->root()->render_manager()->DidNavigateFrame( | 417 frame_tree->root()->render_manager()->DidNavigateFrame( |
| 418 render_frame_host, params.gesture == NavigationGestureUser); | 418 render_frame_host, params.gesture == NavigationGestureUser); |
| 419 } | 419 } |
| 420 | 420 |
| 421 // Save the origin of the new page. Do this before calling | 421 // Save the origin of the new page. Do this before calling |
| 422 // DidNavigateFrame(), because the origin needs to be included in the SwapOut | 422 // DidNavigateFrame(), because the origin needs to be included in the SwapOut |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 if (did_navigate && | 478 if (did_navigate && |
| 479 (controller_->GetLastCommittedEntry()->GetTransitionType() & | 479 (controller_->GetLastCommittedEntry()->GetTransitionType() & |
| 480 ui::PAGE_TRANSITION_FORWARD_BACK)) { | 480 ui::PAGE_TRANSITION_FORWARD_BACK)) { |
| 481 transition_type = ui::PageTransitionFromInt( | 481 transition_type = ui::PageTransitionFromInt( |
| 482 params.transition | ui::PAGE_TRANSITION_FORWARD_BACK); | 482 params.transition | ui::PAGE_TRANSITION_FORWARD_BACK); |
| 483 } | 483 } |
| 484 | 484 |
| 485 delegate_->DidCommitProvisionalLoad(render_frame_host, | 485 delegate_->DidCommitProvisionalLoad(render_frame_host, |
| 486 params.url, | 486 params.url, |
| 487 transition_type); | 487 transition_type); |
| 488 render_frame_host->navigation_handle()->DidCommitNavigation(); | 488 render_frame_host->navigation_handle()->DidCommitNavigation( |
| 489 is_navigation_within_page); |
| 489 } | 490 } |
| 490 | 491 |
| 491 if (!did_navigate) | 492 if (!did_navigate) |
| 492 return; // No navigation happened. | 493 return; // No navigation happened. |
| 493 | 494 |
| 494 // DO NOT ADD MORE STUFF TO THIS FUNCTION! Your component should either listen | 495 // DO NOT ADD MORE STUFF TO THIS FUNCTION! Your component should either listen |
| 495 // for the appropriate notification (best) or you can add it to | 496 // for the appropriate notification (best) or you can add it to |
| 496 // DidNavigateMainFramePostCommit / DidNavigateAnyFramePostCommit (only if | 497 // DidNavigateMainFramePostCommit / DidNavigateAnyFramePostCommit (only if |
| 497 // necessary, please). | 498 // necessary, please). |
| 498 | 499 |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 entry->set_should_replace_entry(pending_entry->should_replace_entry()); | 946 entry->set_should_replace_entry(pending_entry->should_replace_entry()); |
| 946 entry->SetRedirectChain(pending_entry->GetRedirectChain()); | 947 entry->SetRedirectChain(pending_entry->GetRedirectChain()); |
| 947 } | 948 } |
| 948 controller_->SetPendingEntry(entry.Pass()); | 949 controller_->SetPendingEntry(entry.Pass()); |
| 949 if (delegate_) | 950 if (delegate_) |
| 950 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); | 951 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); |
| 951 } | 952 } |
| 952 } | 953 } |
| 953 | 954 |
| 954 } // namespace content | 955 } // namespace content |
| OLD | NEW |