Chromium Code Reviews| 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/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 cross_process_frame_connector_(NULL), | 143 cross_process_frame_connector_(NULL), |
| 144 render_frame_proxy_host_(NULL), | 144 render_frame_proxy_host_(NULL), |
| 145 frame_tree_(frame_tree), | 145 frame_tree_(frame_tree), |
| 146 frame_tree_node_(frame_tree_node), | 146 frame_tree_node_(frame_tree_node), |
| 147 routing_id_(routing_id), | 147 routing_id_(routing_id), |
| 148 render_frame_created_(false), | 148 render_frame_created_(false), |
| 149 navigations_suspended_(false), | 149 navigations_suspended_(false), |
| 150 is_waiting_for_beforeunload_ack_(false), | 150 is_waiting_for_beforeunload_ack_(false), |
| 151 unload_ack_is_for_navigation_(false), | 151 unload_ack_is_for_navigation_(false), |
| 152 is_loading_(false), | 152 is_loading_(false), |
| 153 pending_commit_(false), | |
| 153 accessibility_reset_token_(0), | 154 accessibility_reset_token_(0), |
| 154 accessibility_reset_count_(0), | 155 accessibility_reset_count_(0), |
| 155 no_create_browser_accessibility_manager_for_testing_(false), | 156 no_create_browser_accessibility_manager_for_testing_(false), |
| 156 weak_ptr_factory_(this) { | 157 weak_ptr_factory_(this) { |
| 157 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); | 158 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
| 158 bool hidden = !!(flags & CREATE_RF_HIDDEN); | 159 bool hidden = !!(flags & CREATE_RF_HIDDEN); |
| 159 frame_tree_->RegisterRenderFrameHost(this); | 160 frame_tree_->RegisterRenderFrameHost(this); |
| 160 GetProcess()->AddRoute(routing_id_, this); | 161 GetProcess()->AddRoute(routing_id_, this); |
| 161 g_routing_id_frame_map.Get().insert(std::make_pair( | 162 g_routing_id_frame_map.Get().insert(std::make_pair( |
| 162 RenderFrameHostID(GetProcess()->GetID(), routing_id_), | 163 RenderFrameHostID(GetProcess()->GetID(), routing_id_), |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 832 // filenames it can't access in a future session restore. | 833 // filenames it can't access in a future session restore. |
| 833 if (!render_view_host_->CanAccessFilesOfPageState( | 834 if (!render_view_host_->CanAccessFilesOfPageState( |
| 834 validated_params.page_state)) { | 835 validated_params.page_state)) { |
| 835 bad_message::ReceivedBadMessage( | 836 bad_message::ReceivedBadMessage( |
| 836 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); | 837 GetProcess(), bad_message::RFH_CAN_ACCESS_FILES_OF_PAGE_STATE); |
| 837 return; | 838 return; |
| 838 } | 839 } |
| 839 | 840 |
| 840 accessibility_reset_count_ = 0; | 841 accessibility_reset_count_ = 0; |
| 841 frame_tree_node()->navigator()->DidNavigate(this, validated_params); | 842 frame_tree_node()->navigator()->DidNavigate(this, validated_params); |
| 843 | |
| 844 // PlzNavigate | |
| 845 // Check that a commit is expected. | |
| 846 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 847 switches::kEnableBrowserSideNavigation)) { | |
| 848 DCHECK(pending_commit_); | |
|
Charlie Reis
2015/04/07 17:04:47
This doesn't seem right to me.
If the renderer pr
clamy
2015/04/08 11:56:23
I think we want to inform the browser that we're d
Charlie Reis
2015/04/08 16:45:27
Ok, so the renderer will tell the browser via Begi
clamy
2015/04/10 14:40:15
No that it is not implemented yet. We do not curre
Charlie Reis
2015/04/10 23:04:01
Ok. If you're expecting this check to fail, pleas
clamy
2015/04/14 14:14:16
Considering that the DCHECK may fail for a certain
| |
| 849 pending_commit_ = false; | |
| 850 } | |
| 842 } | 851 } |
| 843 | 852 |
| 844 void RenderFrameHostImpl::OnDidDropNavigation() { | 853 void RenderFrameHostImpl::OnDidDropNavigation() { |
| 845 // At the end of Navigate(), the delegate's DidStartLoading is called to force | 854 // At the end of Navigate(), the delegate's DidStartLoading is called to force |
| 846 // the spinner to start, even if the renderer didn't yet begin the load. If it | 855 // the spinner to start, even if the renderer didn't yet begin the load. If it |
| 847 // turns out that the renderer dropped the navigation, we need to turn off the | 856 // turns out that the renderer dropped the navigation, we need to turn off the |
| 848 // spinner. | 857 // spinner. |
| 849 delegate_->DidStopLoading(); | 858 delegate_->DidStopLoading(); |
| 850 } | 859 } |
| 851 | 860 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 931 replication_state = proxy->frame_tree_node()->current_replication_state(); | 940 replication_state = proxy->frame_tree_node()->current_replication_state(); |
| 932 } | 941 } |
| 933 | 942 |
| 934 if (IsRenderFrameLive()) { | 943 if (IsRenderFrameLive()) { |
| 935 Send(new FrameMsg_SwapOut(routing_id_, proxy_routing_id, is_loading, | 944 Send(new FrameMsg_SwapOut(routing_id_, proxy_routing_id, is_loading, |
| 936 replication_state)); | 945 replication_state)); |
| 937 } | 946 } |
| 938 | 947 |
| 939 if (!GetParent()) | 948 if (!GetParent()) |
| 940 delegate_->SwappedOut(this); | 949 delegate_->SwappedOut(this); |
| 950 | |
| 951 // PlzNavigate | |
| 952 // A commit is no longer expected as the frame is swapped out. | |
|
Charlie Reis
2015/04/07 17:04:47
I don't understand how this would happen. When wo
clamy
2015/04/08 11:56:23
If the current RFH was supposed to commit a naviga
Charlie Reis
2015/04/08 16:45:27
I thought that the DidCommitProvisionalLoad IPC wa
clamy
2015/04/10 14:40:15
No the DidCommitProvisionalLoad IPC is sent when t
Charlie Reis
2015/04/10 23:04:01
Oh. Wouldn't all sorts of things potentially canc
clamy
2015/04/14 14:14:16
Good point. I removed the DCHECK, and I wont reset
| |
| 953 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 954 switches::kEnableBrowserSideNavigation)) { | |
| 955 pending_commit_ = false; | |
| 956 } | |
| 941 } | 957 } |
| 942 | 958 |
| 943 void RenderFrameHostImpl::OnBeforeUnloadACK( | 959 void RenderFrameHostImpl::OnBeforeUnloadACK( |
| 944 bool proceed, | 960 bool proceed, |
| 945 const base::TimeTicks& renderer_before_unload_start_time, | 961 const base::TimeTicks& renderer_before_unload_start_time, |
| 946 const base::TimeTicks& renderer_before_unload_end_time) { | 962 const base::TimeTicks& renderer_before_unload_end_time) { |
| 947 TRACE_EVENT_ASYNC_END0( | 963 TRACE_EVENT_ASYNC_END0( |
| 948 "navigation", "RenderFrameHostImpl::BeforeUnload", this); | 964 "navigation", "RenderFrameHostImpl::BeforeUnload", this); |
| 949 DCHECK(!GetParent()); | 965 DCHECK(!GetParent()); |
| 950 // If this renderer navigated while the beforeunload request was in flight, we | 966 // If this renderer navigated while the beforeunload request was in flight, we |
| (...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1707 const ResourceResponseHead head = response ? | 1723 const ResourceResponseHead head = response ? |
| 1708 response->head : ResourceResponseHead(); | 1724 response->head : ResourceResponseHead(); |
| 1709 Send(new FrameMsg_CommitNavigation(routing_id_, head, body_url, common_params, | 1725 Send(new FrameMsg_CommitNavigation(routing_id_, head, body_url, common_params, |
| 1710 request_params)); | 1726 request_params)); |
| 1711 // TODO(clamy): Check if we should start the throbber for non javascript urls | 1727 // TODO(clamy): Check if we should start the throbber for non javascript urls |
| 1712 // here. | 1728 // here. |
| 1713 | 1729 |
| 1714 // TODO(clamy): Release the stream handle once the renderer has finished | 1730 // TODO(clamy): Release the stream handle once the renderer has finished |
| 1715 // reading it. | 1731 // reading it. |
| 1716 stream_handle_ = body.Pass(); | 1732 stream_handle_ = body.Pass(); |
| 1733 pending_commit_ = true; | |
| 1717 } | 1734 } |
| 1718 | 1735 |
| 1719 void RenderFrameHostImpl::SetUpMojoIfNeeded() { | 1736 void RenderFrameHostImpl::SetUpMojoIfNeeded() { |
| 1720 if (service_registry_.get()) | 1737 if (service_registry_.get()) |
| 1721 return; | 1738 return; |
| 1722 | 1739 |
| 1723 service_registry_.reset(new ServiceRegistryImpl()); | 1740 service_registry_.reset(new ServiceRegistryImpl()); |
| 1724 if (!GetProcess()->GetServiceRegistry()) | 1741 if (!GetProcess()->GetServiceRegistry()) |
| 1725 return; | 1742 return; |
| 1726 | 1743 |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1955 return; | 1972 return; |
| 1956 | 1973 |
| 1957 permission_manager->RegisterPermissionUsage( | 1974 permission_manager->RegisterPermissionUsage( |
| 1958 PermissionType::GEOLOCATION, | 1975 PermissionType::GEOLOCATION, |
| 1959 GetLastCommittedURL().GetOrigin(), | 1976 GetLastCommittedURL().GetOrigin(), |
| 1960 frame_tree_node()->frame_tree()->GetMainFrame() | 1977 frame_tree_node()->frame_tree()->GetMainFrame() |
| 1961 ->GetLastCommittedURL().GetOrigin()); | 1978 ->GetLastCommittedURL().GetOrigin()); |
| 1962 } | 1979 } |
| 1963 | 1980 |
| 1964 } // namespace content | 1981 } // namespace content |
| OLD | NEW |