| 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 699 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 710         new ViewMsg_EnableViewSourceMode( | 710         new ViewMsg_EnableViewSourceMode( | 
| 711             render_frame_host->render_view_host()->GetRoutingID())); | 711             render_frame_host->render_view_host()->GetRoutingID())); | 
| 712   } | 712   } | 
| 713 | 713 | 
| 714   CheckWebUIRendererDoesNotDisplayNormalURL( | 714   CheckWebUIRendererDoesNotDisplayNormalURL( | 
| 715       render_frame_host, navigation_request->common_params().url); | 715       render_frame_host, navigation_request->common_params().url); | 
| 716 | 716 | 
| 717   render_frame_host->CommitNavigation(response, body.Pass(), | 717   render_frame_host->CommitNavigation(response, body.Pass(), | 
| 718                                       navigation_request->common_params(), | 718                                       navigation_request->common_params(), | 
| 719                                       navigation_request->request_params()); | 719                                       navigation_request->request_params()); | 
|  | 720 | 
|  | 721   // When navigating to a Javascript url, no commit is expected from the | 
|  | 722   // RenderFrameHost, therefore the NavigationRequest should be reset right now. | 
|  | 723   if (navigation_request->common_params().url.SchemeIs(url::kJavaScriptScheme)) | 
|  | 724     frame_tree_node->ResetNavigationRequest(true); | 
| 720 } | 725 } | 
| 721 | 726 | 
| 722 // PlzNavigate | 727 // PlzNavigate | 
| 723 void NavigatorImpl::FailedNavigation(FrameTreeNode* frame_tree_node, | 728 void NavigatorImpl::FailedNavigation(FrameTreeNode* frame_tree_node, | 
| 724                                      bool has_stale_copy_in_cache, | 729                                      bool has_stale_copy_in_cache, | 
| 725                                      int error_code) { | 730                                      int error_code) { | 
| 726   CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 731   CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| 727       switches::kEnableBrowserSideNavigation)); | 732       switches::kEnableBrowserSideNavigation)); | 
| 728 | 733 | 
| 729   NavigationRequest* navigation_request = frame_tree_node->navigation_request(); | 734   NavigationRequest* navigation_request = frame_tree_node->navigation_request(); | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 813   CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 818   CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| 814       switches::kEnableBrowserSideNavigation)); | 819       switches::kEnableBrowserSideNavigation)); | 
| 815   DCHECK(frame_tree_node); | 820   DCHECK(frame_tree_node); | 
| 816   FrameMsg_Navigate_Type::Value navigation_type = | 821   FrameMsg_Navigate_Type::Value navigation_type = | 
| 817       GetNavigationType(controller_->GetBrowserContext(), entry, reload_type); | 822       GetNavigationType(controller_->GetBrowserContext(), entry, reload_type); | 
| 818   scoped_ptr<NavigationRequest> navigation_request = | 823   scoped_ptr<NavigationRequest> navigation_request = | 
| 819       NavigationRequest::CreateBrowserInitiated(frame_tree_node, entry, | 824       NavigationRequest::CreateBrowserInitiated(frame_tree_node, entry, | 
| 820                                                 navigation_type, | 825                                                 navigation_type, | 
| 821                                                 navigation_start, controller_); | 826                                                 navigation_start, controller_); | 
| 822   frame_tree_node->SetNavigationRequest(navigation_request.Pass()); | 827   frame_tree_node->SetNavigationRequest(navigation_request.Pass()); | 
|  | 828   frame_tree_node->navigation_request()->SetWaitingForRendererResponse(); | 
| 823 | 829 | 
| 824   // Have the current renderer execute its beforeUnload event if needed. If it | 830   // Have the current renderer execute its beforeUnload event if needed. If it | 
| 825   // is not needed (eg. the renderer is not live), BeginNavigation should get | 831   // is not needed (eg. the renderer is not live), BeginNavigation should get | 
| 826   // called. | 832   // called. If the navigation is synchronous and same-site, then it can be sent | 
| 827   frame_tree_node->navigation_request()->SetWaitingForRendererResponse(); | 833   // directly to the renderer (currently this is the case for navigations that | 
| 828   frame_tree_node->current_frame_host()->DispatchBeforeUnload(true); | 834   // do not make network requests such as data urls or Javascript urls). | 
|  | 835   if (NavigationRequest::ShouldMakeNetworkRequest( | 
|  | 836           frame_tree_node->navigation_request()->common_params().url)) { | 
|  | 837     frame_tree_node->current_frame_host()->DispatchBeforeUnload(true); | 
|  | 838   } else { | 
|  | 839     BeginNavigation(frame_tree_node); | 
|  | 840   } | 
| 829 } | 841 } | 
| 830 | 842 | 
| 831 void NavigatorImpl::BeginNavigation(FrameTreeNode* frame_tree_node) { | 843 void NavigatorImpl::BeginNavigation(FrameTreeNode* frame_tree_node) { | 
| 832   NavigationRequest* navigation_request = frame_tree_node->navigation_request(); | 844   NavigationRequest* navigation_request = frame_tree_node->navigation_request(); | 
| 833 | 845 | 
| 834   // A browser-initiated navigation could have been cancelled while it was | 846   // A browser-initiated navigation could have been cancelled while it was | 
| 835   // waiting for the BeforeUnload event to execute. | 847   // waiting for the BeforeUnload event to execute. | 
| 836   if (!navigation_request) | 848   if (!navigation_request) | 
| 837     return; | 849     return; | 
| 838 | 850 | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 893         "Navigation.TimeToCommit_ExistingRenderer_BeforeUnloadDiscounted", | 905         "Navigation.TimeToCommit_ExistingRenderer_BeforeUnloadDiscounted", | 
| 894         time_to_commit); | 906         time_to_commit); | 
| 895     UMA_HISTOGRAM_TIMES( | 907     UMA_HISTOGRAM_TIMES( | 
| 896         "Navigation.TimeToURLJobStart_ExistingRenderer_BeforeUnloadDiscounted", | 908         "Navigation.TimeToURLJobStart_ExistingRenderer_BeforeUnloadDiscounted", | 
| 897         time_to_network); | 909         time_to_network); | 
| 898   } | 910   } | 
| 899   navigation_data_.reset(); | 911   navigation_data_.reset(); | 
| 900 } | 912 } | 
| 901 | 913 | 
| 902 }  // namespace content | 914 }  // namespace content | 
| OLD | NEW | 
|---|